From 13a0d05e8823ae19867c68cc751762bfa7a9a320 Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Sun, 3 Jul 2022 19:48:30 +0200 Subject: [PATCH 01/14] =?UTF-8?q?Rename=20Helper=20=E2=86=92=20NbtHelper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mcaselector/version/ChunkMerger.java | 25 ++- .../mcaselector/version/ChunkRelocator.java | 2 +- .../version/{Helper.java => NbtHelper.java} | 4 +- .../version/anvil112/Anvil112ChunkFilter.java | 83 ++++---- .../version/anvil112/Anvil112ChunkMerger.java | 4 +- .../anvil112/Anvil112ChunkRelocator.java | 112 +++++------ .../anvil112/Anvil112ChunkRenderer.java | 32 ++-- .../anvil112/Anvil112EntityFilter.java | 8 +- .../version/anvil113/Anvil113ChunkFilter.java | 94 ++++----- .../version/anvil113/Anvil113ChunkMerger.java | 24 +-- .../anvil113/Anvil113ChunkRelocator.java | 138 +++++++------- .../anvil113/Anvil113ChunkRenderer.java | 46 ++--- .../anvil113/Anvil113ColorMapping.java | 6 +- .../version/anvil114/Anvil114ChunkFilter.java | 6 +- .../version/anvil114/Anvil114ChunkMerger.java | 24 +-- .../anvil114/Anvil114ChunkRelocator.java | 138 +++++++------- .../anvil114/Anvil114ColorMapping.java | 6 +- .../anvil114/Anvil114PoiRelocator.java | 10 +- .../version/anvil115/Anvil115ChunkFilter.java | 4 +- .../version/anvil115/Anvil115ChunkMerger.java | 28 +-- .../anvil115/Anvil115ChunkRelocator.java | 152 +++++++-------- .../anvil115/Anvil115ChunkRenderer.java | 46 ++--- .../anvil115/Anvil115ColorMapping.java | 6 +- .../anvil116/Anvil116ChunkRelocator.java | 178 +++++++++--------- .../anvil116/Anvil116ChunkRenderer.java | 46 ++--- .../anvil116/Anvil116ColorMapping.java | 6 +- .../version/anvil117/Anvil117ChunkFilter.java | 6 +- .../version/anvil117/Anvil117ChunkMerger.java | 22 +-- .../anvil117/Anvil117ChunkRelocator.java | 100 +++++----- .../anvil117/Anvil117ChunkRenderer.java | 46 ++--- .../anvil117/Anvil117ColorMapping.java | 6 +- .../anvil117/Anvil117EntityFilter.java | 10 +- .../anvil117/Anvil117EntityRelocator.java | 82 ++++---- .../version/anvil118/Anvil118ChunkFilter.java | 100 +++++----- .../version/anvil118/Anvil118ChunkMerger.java | 20 +- .../anvil118/Anvil118ChunkRelocator.java | 90 ++++----- .../anvil118/Anvil118ChunkRenderer.java | 36 ++-- .../anvil118/Anvil118ColorMapping.java | 10 +- .../anvil118/Anvil118EntityFilter.java | 4 +- .../version/anvil118/LegacyHelper.java | 84 ++++----- .../version/anvil119/Anvil119ChunkFilter.java | 92 ++++----- .../version/anvil119/Anvil119ChunkMerger.java | 22 +-- .../anvil119/Anvil119ChunkRelocator.java | 92 ++++----- .../anvil119/Anvil119ChunkRenderer.java | 48 ++--- .../anvil119/Anvil119ColorMapping.java | 6 +- 45 files changed, 1051 insertions(+), 1053 deletions(-) rename src/main/java/net/querz/mcaselector/version/{Helper.java => NbtHelper.java} (99%) diff --git a/src/main/java/net/querz/mcaselector/version/ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/ChunkMerger.java index d55a447e..0a1cc088 100644 --- a/src/main/java/net/querz/mcaselector/version/ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/ChunkMerger.java @@ -4,7 +4,6 @@ import net.querz.mcaselector.range.Range; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; -import net.querz.nbt.NBTUtil; import net.querz.nbt.Tag; import java.util.*; import java.util.function.Function; @@ -40,8 +39,8 @@ default ListTag mergeLists(ListTag source, ListTag destination, List rang } default void mergeListTagLists(CompoundTag source, CompoundTag destination, List ranges, int yOffset, String name) { - ListTag sourceList = Helper.tagFromLevelFromRoot(source, name); - ListTag destinationList = Helper.tagFromLevelFromRoot(destination, name, sourceList); + ListTag sourceList = NbtHelper.tagFromLevelFromRoot(source, name); + ListTag destinationList = NbtHelper.tagFromLevelFromRoot(destination, name, sourceList); if (sourceList == null || destinationList == null || sourceList.size() != destinationList.size()) { return; @@ -58,23 +57,23 @@ default void mergeListTagLists(CompoundTag source, CompoundTag destination, List } default void mergeCompoundTagListsFromLevel(CompoundTag source, CompoundTag destination, List ranges, int yOffset, String name, Function ySupplier) { - ListTag sourceElements = Helper.tagFromLevelFromRoot(source, name, new ListTag()); - ListTag destinationElements = Helper.tagFromLevelFromRoot(destination, name, new ListTag()); + ListTag sourceElements = NbtHelper.tagFromLevelFromRoot(source, name, new ListTag()); + ListTag destinationElements = NbtHelper.tagFromLevelFromRoot(destination, name, new ListTag()); initLevel(destination).put(name, mergeLists(sourceElements, destinationElements, ranges, ySupplier, yOffset)); } default void mergeCompoundTagLists(CompoundTag source, CompoundTag destination, List ranges, int yOffset, String name, Function ySupplier) { - ListTag sourceElements = Helper.tagFromCompound(source, name, new ListTag()); - ListTag destinationElements = Helper.tagFromCompound(destination, name, new ListTag()); + ListTag sourceElements = NbtHelper.tagFromCompound(source, name, new ListTag()); + ListTag destinationElements = NbtHelper.tagFromCompound(destination, name, new ListTag()); destination.put(name, mergeLists(sourceElements, destinationElements, ranges, ySupplier, yOffset)); } // merge based on compound tag keys, assuming compound tag keys are ints default void mergeCompoundTags(CompoundTag source, CompoundTag destination, List ranges, int yOffset, String name) { - CompoundTag sourceElements = Helper.tagFromCompound(source, name, new CompoundTag()); - CompoundTag destinationElements = Helper.tagFromCompound(destination, name, new CompoundTag()); + CompoundTag sourceElements = NbtHelper.tagFromCompound(source, name, new CompoundTag()); + CompoundTag destinationElements = NbtHelper.tagFromCompound(destination, name, new CompoundTag()); for (Map.Entry sourceElement : sourceElements) { if (sourceElement.getKey().matches("^-?[0-9]{1,2}$")) { @@ -90,7 +89,7 @@ default void mergeCompoundTags(CompoundTag source, CompoundTag destination, List } default CompoundTag initLevel(CompoundTag c) { - CompoundTag level = Helper.levelFromRoot(c); + CompoundTag level = NbtHelper.levelFromRoot(c); if (level == null) { c.put("Level", level = new CompoundTag()); } @@ -98,16 +97,16 @@ default CompoundTag initLevel(CompoundTag c) { } default void fixEntityUUIDs(CompoundTag root) { - ListTag entities = Helper.tagFromCompound(root, "Entities", null); + ListTag entities = NbtHelper.tagFromCompound(root, "Entities", null); if (entities != null) { entities.forEach(e -> fixEntityUUID((CompoundTag) e)); } } private static void fixEntityUUID(CompoundTag entity) { - Helper.fixEntityUUID(entity); + NbtHelper.fixEntityUUID(entity); if (entity.containsKey("Passengers")) { - ListTag passengers = Helper.tagFromCompound(entity, "Passengers", null); + ListTag passengers = NbtHelper.tagFromCompound(entity, "Passengers", null); if (passengers != null) { passengers.forEach(e -> fixEntityUUID((CompoundTag) e)); } diff --git a/src/main/java/net/querz/mcaselector/version/ChunkRelocator.java b/src/main/java/net/querz/mcaselector/version/ChunkRelocator.java index ca7e5655..0404cba9 100644 --- a/src/main/java/net/querz/mcaselector/version/ChunkRelocator.java +++ b/src/main/java/net/querz/mcaselector/version/ChunkRelocator.java @@ -10,7 +10,7 @@ public interface ChunkRelocator { default boolean applyOffsetToSection(CompoundTag section, Point3i offset, int minY, int maxY) { NumberTag value; - if ((value = Helper.tagFromCompound(section, "Y")) != null) { + if ((value = NbtHelper.tagFromCompound(section, "Y")) != null) { if (value.asByte() > maxY || value.asByte() < minY) { return false; } diff --git a/src/main/java/net/querz/mcaselector/version/Helper.java b/src/main/java/net/querz/mcaselector/version/NbtHelper.java similarity index 99% rename from src/main/java/net/querz/mcaselector/version/Helper.java rename to src/main/java/net/querz/mcaselector/version/NbtHelper.java index 41803fae..3c93308c 100644 --- a/src/main/java/net/querz/mcaselector/version/Helper.java +++ b/src/main/java/net/querz/mcaselector/version/NbtHelper.java @@ -5,11 +5,11 @@ import net.querz.nbt.*; import java.util.Random; -public final class Helper { +public final class NbtHelper { private static final Random random = new Random(); - private Helper() {} + private NbtHelper() {} public static CompoundTag levelFromRoot(Tag root) { return tagFromCompound(root, "Level", null); diff --git a/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkFilter.java b/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkFilter.java index aed6bb82..c571acd7 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkFilter.java +++ b/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkFilter.java @@ -4,8 +4,7 @@ import net.querz.mcaselector.range.Range; import net.querz.mcaselector.tile.Tile; import net.querz.mcaselector.version.ChunkFilter; -import net.querz.mcaselector.version.Helper; -import net.querz.mcaselector.version.VersionController; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -79,7 +78,7 @@ public Anvil112ChunkFilter() { @Override public boolean matchBlockNames(CompoundTag data, Collection names) { - ListTag sections = Helper.tagFromLevelFromRoot(data, "Sections", null); + ListTag sections = NbtHelper.tagFromLevelFromRoot(data, "Sections", null); if (sections == null) { return false; } @@ -92,11 +91,11 @@ public boolean matchBlockNames(CompoundTag data, Collection names) { continue; } for (Tag t : sections) { - byte[] blocks = Helper.byteArrayFromCompound(t, "Blocks"); + byte[] blocks = NbtHelper.byteArrayFromCompound(t, "Blocks"); if (blocks == null) { continue; } - byte[] blockData = Helper.byteArrayFromCompound(t, "Data"); + byte[] blockData = NbtHelper.byteArrayFromCompound(t, "Data"); if (blockData == null) { continue; } @@ -120,7 +119,7 @@ public boolean matchBlockNames(CompoundTag data, Collection names) { @Override public boolean matchAnyBlockName(CompoundTag data, Collection names) { - ListTag sections = Helper.tagFromLevelFromRoot(data, "Sections", null); + ListTag sections = NbtHelper.tagFromLevelFromRoot(data, "Sections", null); if (sections == null) { return false; } @@ -131,11 +130,11 @@ public boolean matchAnyBlockName(CompoundTag data, Collection names) { continue; } for (CompoundTag t : sections.iterateType(CompoundTag.TYPE)) { - byte[] blocks = Helper.byteArrayFromCompound(t, "Blocks"); + byte[] blocks = NbtHelper.byteArrayFromCompound(t, "Blocks"); if (blocks == null) { continue; } - byte[] blockData = Helper.byteArrayFromCompound(t, "Data"); + byte[] blockData = NbtHelper.byteArrayFromCompound(t, "Data"); if (blockData == null) { continue; } @@ -158,7 +157,7 @@ public boolean matchAnyBlockName(CompoundTag data, Collection names) { @Override public boolean paletteEquals(CompoundTag data, Collection names) { - ListTag sections = Helper.tagFromLevelFromRoot(data, "Sections", null); + ListTag sections = NbtHelper.tagFromLevelFromRoot(data, "Sections", null); if (sections == null) { return false; } @@ -175,11 +174,11 @@ public boolean paletteEquals(CompoundTag data, Collection names) { } for (CompoundTag t : sections.iterateType(CompoundTag.TYPE)) { - byte[] blockBytes = Helper.byteArrayFromCompound(t, "Blocks"); + byte[] blockBytes = NbtHelper.byteArrayFromCompound(t, "Blocks"); if (blockBytes == null) { continue; } - byte[] dataBits = Helper.byteArrayFromCompound(t, "Data"); + byte[] dataBits = NbtHelper.byteArrayFromCompound(t, "Data"); if (dataBits == null) { continue; } @@ -252,7 +251,7 @@ public boolean equals(Object other) { @Override public boolean matchBiomes(CompoundTag data, Collection biomes) { - ByteArrayTag biomesTag = Helper.tagFromLevelFromRoot(data, "Biomes", null); + ByteArrayTag biomesTag = NbtHelper.tagFromLevelFromRoot(data, "Biomes", null); if (biomesTag == null) { return false; } @@ -271,7 +270,7 @@ public boolean matchBiomes(CompoundTag data, Collection biomes) { - ByteArrayTag biomesTag = Helper.tagFromLevelFromRoot(data, "Biomes", null); + ByteArrayTag biomesTag = NbtHelper.tagFromLevelFromRoot(data, "Biomes", null); if (biomesTag == null) { return false; } @@ -288,7 +287,7 @@ public boolean matchAnyBiome(CompoundTag data, Collection replace) { - ListTag sections = Helper.tagFromLevelFromRoot(data, "Sections", null); + ListTag sections = NbtHelper.tagFromLevelFromRoot(data, "Sections", null); if (sections == null) { return; } @@ -369,11 +368,11 @@ public void replaceBlocks(CompoundTag data, Map replac // delete tile entities with that name - ListTag tileEntities = Helper.tagFromLevelFromRoot(data, "TileEntities", null); + ListTag tileEntities = NbtHelper.tagFromLevelFromRoot(data, "TileEntities", null); if (tileEntities != null) { for (int i = 0; i < tileEntities.size(); i++) { CompoundTag tileEntity = tileEntities.getCompound(i); - String id = Helper.stringFromCompound(tileEntity, "id"); + String id = NbtHelper.stringFromCompound(tileEntity, "id"); if (id != null && replace.containsKey(id)) { tileEntities.remove(i); i--; @@ -392,7 +391,7 @@ protected CompoundTag createEmptySection(int y) { @Override public int getAverageHeight(CompoundTag data) { - ListTag sections = Helper.tagFromLevelFromRoot(data, "Sections", null); + ListTag sections = NbtHelper.tagFromLevelFromRoot(data, "Sections", null); if (sections == null) { return 0; } @@ -405,12 +404,12 @@ public int getAverageHeight(CompoundTag data) { zLoop: for (int cz = 0; cz < Tile.CHUNK_SIZE; cz++) { for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { - byte[] blocks = Helper.byteArrayFromCompound(section, "Blocks"); + byte[] blocks = NbtHelper.byteArrayFromCompound(section, "Blocks"); if (blocks == null) { continue; } - Number height = Helper.numberFromCompound(section, "Y", null); + Number height = NbtHelper.numberFromCompound(section, "Y", null); if (height == null) { continue; } @@ -433,12 +432,12 @@ private boolean isEmpty(int blockID) { } private int filterSections(Tag sectionA, Tag sectionB) { - return Helper.numberFromCompound(sectionB, "Y", -1).intValue() - Helper.numberFromCompound(sectionA, "Y", -1).intValue(); + return NbtHelper.numberFromCompound(sectionB, "Y", -1).intValue() - NbtHelper.numberFromCompound(sectionA, "Y", -1).intValue(); } @Override public int getBlockAmount(CompoundTag data, String[] blocks) { - ListTag sections = Helper.tagFromLevelFromRoot(data, "Sections", null); + ListTag sections = NbtHelper.tagFromLevelFromRoot(data, "Sections", null); if (sections == null) { return 0; } @@ -454,12 +453,12 @@ public int getBlockAmount(CompoundTag data, String[] blocks) { BlockData[] blockData = mapping.get(blockName); for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { - byte[] blockIDs = Helper.byteArrayFromCompound(section, "Blocks"); + byte[] blockIDs = NbtHelper.byteArrayFromCompound(section, "Blocks"); if (blockIDs == null) { continue; } - byte[] blockIDsData = Helper.byteArrayFromCompound(section, "Data"); + byte[] blockIDsData = NbtHelper.byteArrayFromCompound(section, "Data"); if (blockIDsData == null) { continue; } @@ -481,29 +480,29 @@ public int getBlockAmount(CompoundTag data, String[] blocks) { @Override public ListTag getTileEntities(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "TileEntities"); + return NbtHelper.tagFromLevelFromRoot(data, "TileEntities"); } @Override public CompoundTag getStructureReferences(CompoundTag data) { - CompoundTag structures = Helper.tagFromLevelFromRoot(data, "Structures"); - return Helper.tagFromCompound(structures, "References"); + CompoundTag structures = NbtHelper.tagFromLevelFromRoot(data, "Structures"); + return NbtHelper.tagFromCompound(structures, "References"); } @Override public CompoundTag getStructureStarts(CompoundTag data) { - CompoundTag structures = Helper.tagFromLevelFromRoot(data, "Structures"); - return Helper.tagFromCompound(structures, "Starts"); + CompoundTag structures = NbtHelper.tagFromLevelFromRoot(data, "Structures"); + return NbtHelper.tagFromCompound(structures, "Starts"); } @Override public ListTag getSections(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "Sections"); + return NbtHelper.tagFromLevelFromRoot(data, "Sections"); } @Override public void deleteSections(CompoundTag data, List ranges) { - ListTag sections = Helper.tagFromLevelFromRoot(data, "Sections"); + ListTag sections = NbtHelper.tagFromLevelFromRoot(data, "Sections"); if (sections == null) { return; } @@ -520,12 +519,12 @@ public void deleteSections(CompoundTag data, List ranges) { @Override public LongTag getInhabitedTime(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "InhabitedTime"); + return NbtHelper.tagFromLevelFromRoot(data, "InhabitedTime"); } @Override public void setInhabitedTime(CompoundTag data, long inhabitedTime) { - CompoundTag level = Helper.levelFromRoot(data); + CompoundTag level = NbtHelper.levelFromRoot(data); if (level != null) { level.putLong("InhabitedTime", inhabitedTime); } @@ -533,12 +532,12 @@ public void setInhabitedTime(CompoundTag data, long inhabitedTime) { @Override public StringTag getStatus(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "Status"); + return NbtHelper.tagFromLevelFromRoot(data, "Status"); } @Override public void setStatus(CompoundTag data, String status) { - CompoundTag level = Helper.levelFromRoot(data); + CompoundTag level = NbtHelper.levelFromRoot(data); if (level != null) { level.putString("Status", status); } @@ -546,12 +545,12 @@ public void setStatus(CompoundTag data, String status) { @Override public LongTag getLastUpdate(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "LastUpdate"); + return NbtHelper.tagFromLevelFromRoot(data, "LastUpdate"); } @Override public void setLastUpdate(CompoundTag data, long lastUpdate) { - CompoundTag level = Helper.levelFromRoot(data); + CompoundTag level = NbtHelper.levelFromRoot(data); if (level != null) { level.putLong("Status", lastUpdate); } @@ -559,7 +558,7 @@ public void setLastUpdate(CompoundTag data, long lastUpdate) { @Override public IntTag getXPos(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "xPos"); + return NbtHelper.tagFromLevelFromRoot(data, "xPos"); } @Override @@ -569,17 +568,17 @@ public IntTag getYPos(CompoundTag data) { @Override public IntTag getZPos(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "zPos"); + return NbtHelper.tagFromLevelFromRoot(data, "zPos"); } @Override public ByteTag getLightPopulated(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "LightPopulated"); + return NbtHelper.tagFromLevelFromRoot(data, "LightPopulated"); } @Override public void setLightPopulated(CompoundTag data, byte lightPopulated) { - CompoundTag level = Helper.levelFromRoot(data); + CompoundTag level = NbtHelper.levelFromRoot(data); if (level != null) { level.putLong("LightPopulated", lightPopulated); } diff --git a/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkMerger.java index 71445f20..b4963258 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkMerger.java @@ -3,7 +3,7 @@ import net.querz.mcaselector.point.Point2i; import net.querz.mcaselector.range.Range; import net.querz.mcaselector.version.ChunkMerger; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import java.util.List; @@ -22,7 +22,7 @@ public void mergeChunks(CompoundTag source, CompoundTag destination, List mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); // we need to fix entity UUIDs, because Minecraft doesn't like duplicates - fixEntityUUIDs(Helper.levelFromRoot(destination)); + fixEntityUUIDs(NbtHelper.levelFromRoot(destination)); } @Override diff --git a/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkRelocator.java b/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkRelocator.java index 3d75e409..d2927278 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkRelocator.java +++ b/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkRelocator.java @@ -2,13 +2,13 @@ import net.querz.mcaselector.point.Point3i; import net.querz.mcaselector.version.ChunkRelocator; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.*; public class Anvil112ChunkRelocator implements ChunkRelocator { public boolean relocate(CompoundTag root, Point3i offset) { - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); if (level == null) { return false; } @@ -18,43 +18,43 @@ public boolean relocate(CompoundTag root, Point3i offset) { level.putInt("zPos", level.getInt("zPos") + offset.blockToChunk().getZ()); // adjust entity positions - ListTag entities = Helper.tagFromCompound(level, "Entities"); + ListTag entities = NbtHelper.tagFromCompound(level, "Entities"); if (entities != null) { entities.forEach(v -> applyOffsetToEntity((CompoundTag) v, offset)); } // adjust tile entity positions - ListTag tileEntities = Helper.tagFromCompound(level, "TileEntities"); + ListTag tileEntities = NbtHelper.tagFromCompound(level, "TileEntities"); if (tileEntities != null) { tileEntities.forEach(v -> applyOffsetToTileEntity((CompoundTag) v, offset)); } // adjust tile ticks - ListTag tileTicks = Helper.tagFromCompound(level, "TileTicks"); + ListTag tileTicks = NbtHelper.tagFromCompound(level, "TileTicks"); if (tileTicks != null) { tileTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust liquid ticks - ListTag liquidTicks = Helper.tagFromCompound(level, "LiquidTicks"); + ListTag liquidTicks = NbtHelper.tagFromCompound(level, "LiquidTicks"); if (liquidTicks != null) { liquidTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // Lights - Helper.applyOffsetToListOfShortTagLists(level, "Lights", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "Lights", offset.blockToSection()); // LiquidsToBeTicked - Helper.applyOffsetToListOfShortTagLists(level, "LiquidsToBeTicked", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "LiquidsToBeTicked", offset.blockToSection()); // ToBeTicked - Helper.applyOffsetToListOfShortTagLists(level, "ToBeTicked", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "ToBeTicked", offset.blockToSection()); // PostProcessing - Helper.applyOffsetToListOfShortTagLists(level, "PostProcessing", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "PostProcessing", offset.blockToSection()); // adjust sections vertically - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections != null) { ListTag newSections = new ListTag(); for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { @@ -73,7 +73,7 @@ private void applyOffsetToEntity(CompoundTag entity, Point3i offset) { return; } - ListTag entityPos = Helper.tagFromCompound(entity, "Pos"); + ListTag entityPos = NbtHelper.tagFromCompound(entity, "Pos"); if (entityPos != null && entityPos.size() == 3) { entityPos.set(0, DoubleTag.valueOf(entityPos.getDouble(0) + offset.getX())); entityPos.set(1, DoubleTag.valueOf(entityPos.getDouble(1) + offset.getY())); @@ -81,72 +81,72 @@ private void applyOffsetToEntity(CompoundTag entity, Point3i offset) { } // leashed entities - CompoundTag leash = Helper.tagFromCompound(entity, "Leash"); - Helper.applyIntOffsetIfRootPresent(leash, "X", "Y", "Z", offset); + CompoundTag leash = NbtHelper.tagFromCompound(entity, "Leash"); + NbtHelper.applyIntOffsetIfRootPresent(leash, "X", "Y", "Z", offset); // projectiles - Helper.applyIntOffsetIfRootPresent(entity, "xTile", "yTile", "zTile", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "xTile", "yTile", "zTile", offset); // entities that have a sleeping place - Helper.applyIntOffsetIfRootPresent(entity, "SleepingX", "SleepingY", "SleepingZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "SleepingX", "SleepingY", "SleepingZ", offset); // positions for specific entity types - String id = Helper.stringFromCompound(entity, "id", ""); + String id = NbtHelper.stringFromCompound(entity, "id", ""); switch (id) { case "minecraft:shulker": - Helper.applyIntOffsetIfRootPresent(entity, "APX", "APY", "APZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "APX", "APY", "APZ", offset); break; case "minecraft:vex": - Helper.applyIntOffsetIfRootPresent(entity, "BoundX", "BoundY", "BoundZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "BoundX", "BoundY", "BoundZ", offset); break; case "minecraft:shulker_bullet": - CompoundTag owner = Helper.tagFromCompound(entity, "Owner"); - Helper.applyIntOffsetIfRootPresent(owner, "X", "Y", "Z", offset); - CompoundTag target = Helper.tagFromCompound(entity, "Target"); - Helper.applyIntOffsetIfRootPresent(target, "X", "Y", "Z", offset); + CompoundTag owner = NbtHelper.tagFromCompound(entity, "Owner"); + NbtHelper.applyIntOffsetIfRootPresent(owner, "X", "Y", "Z", offset); + CompoundTag target = NbtHelper.tagFromCompound(entity, "Target"); + NbtHelper.applyIntOffsetIfRootPresent(target, "X", "Y", "Z", offset); break; case "minecraft:end_crystal": - CompoundTag beamTarget = Helper.tagFromCompound(entity, "BeamTarget"); - Helper.applyIntOffsetIfRootPresent(beamTarget, "X", "Y", "Z", offset); + CompoundTag beamTarget = NbtHelper.tagFromCompound(entity, "BeamTarget"); + NbtHelper.applyIntOffsetIfRootPresent(beamTarget, "X", "Y", "Z", offset); break; case "minecraft:item_frame": case "minecraft:painting": - Helper.applyIntOffsetIfRootPresent(entity, "TileX", "TileY", "TileZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TileX", "TileY", "TileZ", offset); break; case "minecraft:villager": if (entity.containsKey("Brain")) { - CompoundTag brain = Helper.tagFromCompound(entity, "Brain"); + CompoundTag brain = NbtHelper.tagFromCompound(entity, "Brain"); if (brain != null && brain.containsKey("memories")) { - CompoundTag memories = Helper.tagFromCompound(brain, "memories"); + CompoundTag memories = NbtHelper.tagFromCompound(brain, "memories"); if (memories != null && memories.size() > 0) { - CompoundTag meetingPoint = Helper.tagFromCompound(memories, "minecraft:meeting_point"); + CompoundTag meetingPoint = NbtHelper.tagFromCompound(memories, "minecraft:meeting_point"); if (meetingPoint != null && meetingPoint.containsKey("pos")) { if (meetingPoint.get("pos") instanceof IntArrayTag) { - IntArrayTag pos = Helper.tagFromCompound(meetingPoint, "pos"); - Helper.applyOffsetToIntArrayPos(pos, offset); + IntArrayTag pos = NbtHelper.tagFromCompound(meetingPoint, "pos"); + NbtHelper.applyOffsetToIntArrayPos(pos, offset); } else if (meetingPoint.get("pos") instanceof ListTag) { - ListTag pos = Helper.tagFromCompound(meetingPoint, "pos"); - Helper.applyOffsetToIntListPos(pos, offset); + ListTag pos = NbtHelper.tagFromCompound(meetingPoint, "pos"); + NbtHelper.applyOffsetToIntListPos(pos, offset); } } - CompoundTag home = Helper.tagFromCompound(memories, "minecraft:home"); + CompoundTag home = NbtHelper.tagFromCompound(memories, "minecraft:home"); if (home != null && home.containsKey("pos")) { if (home.get("pos") instanceof IntArrayTag) { - IntArrayTag pos = Helper.tagFromCompound(home, "pos"); - Helper.applyOffsetToIntArrayPos(pos, offset); + IntArrayTag pos = NbtHelper.tagFromCompound(home, "pos"); + NbtHelper.applyOffsetToIntArrayPos(pos, offset); } else if (home.get("pos") instanceof ListTag) { - ListTag pos = Helper.tagFromCompound(home, "pos"); - Helper.applyOffsetToIntListPos(pos, offset); + ListTag pos = NbtHelper.tagFromCompound(home, "pos"); + NbtHelper.applyOffsetToIntListPos(pos, offset); } } - CompoundTag jobSite = Helper.tagFromCompound(memories, "minecraft:job_site"); + CompoundTag jobSite = NbtHelper.tagFromCompound(memories, "minecraft:job_site"); if (jobSite != null && jobSite.containsKey("pos")) { if (jobSite.get("pos") instanceof IntArrayTag) { - IntArrayTag pos = Helper.tagFromCompound(jobSite, "pos"); - Helper.applyOffsetToIntArrayPos(pos, offset); + IntArrayTag pos = NbtHelper.tagFromCompound(jobSite, "pos"); + NbtHelper.applyOffsetToIntArrayPos(pos, offset); } else if (jobSite.get("pos") instanceof ListTag) { - ListTag pos = Helper.tagFromCompound(jobSite, "pos"); - Helper.applyOffsetToIntListPos(pos, offset); + ListTag pos = NbtHelper.tagFromCompound(jobSite, "pos"); + NbtHelper.applyOffsetToIntListPos(pos, offset); } } } @@ -157,26 +157,26 @@ private void applyOffsetToEntity(CompoundTag entity, Point3i offset) { case "minecraft:vindicator": case "minecraft:illusioner": case "minecraft:evoker": - CompoundTag patrolTarget = Helper.tagFromCompound(entity, "PatrolTarget"); - Helper.applyIntOffsetIfRootPresent(patrolTarget, "X", "Y", "Z", offset); + CompoundTag patrolTarget = NbtHelper.tagFromCompound(entity, "PatrolTarget"); + NbtHelper.applyIntOffsetIfRootPresent(patrolTarget, "X", "Y", "Z", offset); break; case "minecraft:falling_block": - CompoundTag tileEntityData = Helper.tagFromCompound(entity, "TileEntityData"); + CompoundTag tileEntityData = NbtHelper.tagFromCompound(entity, "TileEntityData"); applyOffsetToTileEntity(tileEntityData, offset); break; } // recursively update passengers - ListTag passengers = Helper.tagFromCompound(entity, "Passengers"); + ListTag passengers = NbtHelper.tagFromCompound(entity, "Passengers"); if (passengers != null) { passengers.forEach(p -> applyOffsetToEntity((CompoundTag) p, offset)); } - Helper.fixEntityUUID(entity); + NbtHelper.fixEntityUUID(entity); } private void applyOffsetToTick(CompoundTag tick, Point3i offset) { - Helper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); } private void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { @@ -184,20 +184,20 @@ private void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { return; } - Helper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); - String id = Helper.stringFromCompound(tileEntity, "id", ""); + String id = NbtHelper.stringFromCompound(tileEntity, "id", ""); switch (id) { case "minecraft:end_gateway" -> { - CompoundTag exitPortal = Helper.tagFromCompound(tileEntity, "ExitPortal"); - Helper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); + CompoundTag exitPortal = NbtHelper.tagFromCompound(tileEntity, "ExitPortal"); + NbtHelper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); } - case "minecraft:structure_block" -> Helper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); + case "minecraft:structure_block" -> NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); case "minecraft:mob_spawner" -> { - ListTag spawnPotentials = Helper.tagFromCompound(tileEntity, "SpawnPotentials"); + ListTag spawnPotentials = NbtHelper.tagFromCompound(tileEntity, "SpawnPotentials"); if (spawnPotentials != null) { for (CompoundTag spawnPotential : spawnPotentials.iterateType(CompoundTag.TYPE)) { - CompoundTag entity = Helper.tagFromCompound(spawnPotential, "Entity"); + CompoundTag entity = NbtHelper.tagFromCompound(spawnPotential, "Entity"); applyOffsetToEntity(entity, offset); } } diff --git a/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkRenderer.java b/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkRenderer.java index f06a8324..660bd0b0 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkRenderer.java +++ b/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkRenderer.java @@ -5,7 +5,7 @@ import net.querz.mcaselector.tile.Tile; import net.querz.mcaselector.version.ChunkRenderer; import net.querz.mcaselector.version.ColorMapping; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; @@ -13,7 +13,7 @@ public class Anvil112ChunkRenderer implements ChunkRenderer { @Override public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, int[] waterPixels, short[] terrainHeights, short[] waterHeights, boolean water, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } @@ -24,9 +24,9 @@ public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, if (!s.containsKey("Blocks") || !s.containsKey("Data")) { return; } - int y = Helper.numberFromCompound(s, "Y", -1).intValue(); - byte[] b = Helper.byteArrayFromCompound(s, "Blocks"); - byte[] d = Helper.byteArrayFromCompound(s, "Data"); + int y = NbtHelper.numberFromCompound(s, "Y", -1).intValue(); + byte[] b = NbtHelper.byteArrayFromCompound(s, "Blocks"); + byte[] d = NbtHelper.byteArrayFromCompound(s, "Data"); if (y >= 0 && y < 16 && b != null && d != null) { blocksArray[y] = b; dataArray[y] = d; @@ -35,7 +35,7 @@ public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, height = MathUtil.clamp(height, 0, 255); - byte[] biomes = Helper.byteArrayFromCompound(Helper.tagFromCompound(root, "Level"), "Biomes"); + byte[] biomes = NbtHelper.byteArrayFromCompound(NbtHelper.tagFromCompound(root, "Level"), "Biomes"); // loop over x / z for (int cx = 0; cx < Tile.CHUNK_SIZE; cx += scale) { @@ -103,14 +103,14 @@ public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } DataProperty section = new DataProperty<>(); for (CompoundTag s : sections.iterateType(CompoundTag.TYPE)) { - int y = Helper.numberFromCompound(s, "Y", -1).intValue(); + int y = NbtHelper.numberFromCompound(s, "Y", -1).intValue(); if (y == height >> 4) { section.set(s); break; @@ -120,13 +120,13 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, return; } - byte[] blocks = Helper.byteArrayFromCompound(section.get(), "Blocks"); - byte[] data = Helper.byteArrayFromCompound(section.get(), "Data"); + byte[] blocks = NbtHelper.byteArrayFromCompound(section.get(), "Blocks"); + byte[] data = NbtHelper.byteArrayFromCompound(section.get(), "Data"); if (blocks == null || data == null) { return; } - byte[] biomes = Helper.byteArrayFromCompound(Helper.tagFromCompound(root, "Level"), "Biomes"); + byte[] biomes = NbtHelper.byteArrayFromCompound(NbtHelper.tagFromCompound(root, "Level"), "Biomes"); height = MathUtil.clamp(height, 0, 255); @@ -157,7 +157,7 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, short[] terrainHeights, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } @@ -168,9 +168,9 @@ public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, if (!s.containsKey("Blocks") || !s.containsKey("Data")) { return; } - int y = Helper.numberFromCompound(s, "Y", -1).intValue(); - byte[] b = Helper.byteArrayFromCompound(s, "Blocks"); - byte[] d = Helper.byteArrayFromCompound(s, "Data"); + int y = NbtHelper.numberFromCompound(s, "Y", -1).intValue(); + byte[] b = NbtHelper.byteArrayFromCompound(s, "Blocks"); + byte[] d = NbtHelper.byteArrayFromCompound(s, "Data"); if (y >= 0 && y < 16 && b != null && d != null) { blocksArray[y] = b; dataArray[y] = d; @@ -179,7 +179,7 @@ public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, height = MathUtil.clamp(height, 0, 255); - byte[] biomes = Helper.byteArrayFromCompound(Helper.tagFromCompound(root, "Level"), "Biomes"); + byte[] biomes = NbtHelper.byteArrayFromCompound(NbtHelper.tagFromCompound(root, "Level"), "Biomes"); // loop over x / z for (int cx = 0; cx < Tile.CHUNK_SIZE; cx += scale) { diff --git a/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112EntityFilter.java b/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112EntityFilter.java index a28aa20d..1b3eac3c 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112EntityFilter.java +++ b/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112EntityFilter.java @@ -3,7 +3,7 @@ import net.querz.mcaselector.io.mca.ChunkData; import net.querz.mcaselector.range.Range; import net.querz.mcaselector.version.EntityFilter; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; import java.util.List; @@ -12,7 +12,7 @@ public class Anvil112EntityFilter implements EntityFilter { @Override public void deleteEntities(ChunkData data, List ranges) { - ListTag entities = Helper.tagFromLevelFromRoot(data.region().getData(), "Entities", null); + ListTag entities = NbtHelper.tagFromLevelFromRoot(data.region().getData(), "Entities", null); if (ranges == null) { if (entities != null) { entities.clear(); @@ -21,7 +21,7 @@ public void deleteEntities(ChunkData data, List ranges) { for (int i = 0; i < entities.size(); i++) { CompoundTag entity = entities.getCompound(i); for (Range range : ranges) { - ListTag entityPos = Helper.tagFromCompound(entity, "Pos"); + ListTag entityPos = NbtHelper.tagFromCompound(entity, "Pos"); if (entityPos != null && entityPos.size() == 3) { if (range.contains(entityPos.getInt(1) >> 4)) { entities.remove(i); @@ -35,6 +35,6 @@ public void deleteEntities(ChunkData data, List ranges) { @Override public ListTag getEntities(ChunkData data) { - return Helper.tagFromLevelFromRoot(data.region().getData(), "Entities", null); + return NbtHelper.tagFromLevelFromRoot(data.region().getData(), "Entities", null); } } diff --git a/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkFilter.java b/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkFilter.java index b412addd..aa99fb57 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkFilter.java +++ b/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkFilter.java @@ -7,7 +7,7 @@ import net.querz.mcaselector.range.Range; import net.querz.mcaselector.tile.Tile; import net.querz.mcaselector.version.ChunkFilter; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.*; import java.util.*; @@ -15,7 +15,7 @@ public class Anvil113ChunkFilter implements ChunkFilter { @Override public boolean matchBlockNames(CompoundTag data, Collection names) { - ListTag sections = Helper.tagFromLevelFromRoot(data, "Sections", null); + ListTag sections = NbtHelper.tagFromLevelFromRoot(data, "Sections", null); if (sections == null) { return false; } @@ -24,12 +24,12 @@ public boolean matchBlockNames(CompoundTag data, Collection names) { nameLoop: for (String name : names) { for (CompoundTag t : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = Helper.tagFromCompound(t, "Palette", null); + ListTag palette = NbtHelper.tagFromCompound(t, "Palette", null); if (palette == null) { continue; } for (CompoundTag p : palette.iterateType(CompoundTag.TYPE)) { - if (name.equals(Helper.stringFromCompound(p, "Name"))) { + if (name.equals(NbtHelper.stringFromCompound(p, "Name"))) { c++; continue nameLoop; } @@ -41,19 +41,19 @@ public boolean matchBlockNames(CompoundTag data, Collection names) { @Override public boolean matchAnyBlockName(CompoundTag data, Collection names) { - ListTag sections = Helper.tagFromLevelFromRoot(data, "Sections", null); + ListTag sections = NbtHelper.tagFromLevelFromRoot(data, "Sections", null); if (sections == null) { return false; } for (String name : names) { for (CompoundTag t : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = Helper.tagFromCompound(t, "Palette", null); + ListTag palette = NbtHelper.tagFromCompound(t, "Palette", null); if (palette == null) { continue; } for (CompoundTag p : palette.iterateType(CompoundTag.TYPE)) { - if (name.equals(Helper.stringFromCompound(p, "Name"))) { + if (name.equals(NbtHelper.stringFromCompound(p, "Name"))) { return true; } } @@ -64,20 +64,20 @@ public boolean matchAnyBlockName(CompoundTag data, Collection names) { @Override public boolean paletteEquals(CompoundTag data, Collection names) { - ListTag sections = Helper.tagFromLevelFromRoot(data, "Sections", null); + ListTag sections = NbtHelper.tagFromLevelFromRoot(data, "Sections", null); if (sections == null) { return false; } Set blocks = new HashSet<>(); for (CompoundTag t : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = Helper.tagFromCompound(t, "Palette", null); + ListTag palette = NbtHelper.tagFromCompound(t, "Palette", null); if (palette == null) { continue; } for (CompoundTag p : palette.iterateType(CompoundTag.TYPE)) { String n; - if ((n = Helper.stringFromCompound(p, "Name")) != null) { + if ((n = NbtHelper.stringFromCompound(p, "Name")) != null) { if (!names.contains(n)) { return false; } @@ -98,7 +98,7 @@ public boolean paletteEquals(CompoundTag data, Collection names) { @Override public boolean matchBiomes(CompoundTag data, Collection biomes) { - IntArrayTag biomesTag = Helper.tagFromLevelFromRoot(data, "Biomes", null); + IntArrayTag biomesTag = NbtHelper.tagFromLevelFromRoot(data, "Biomes", null); if (biomesTag == null) { return false; } @@ -117,7 +117,7 @@ public boolean matchBiomes(CompoundTag data, Collection biomes) { - IntArrayTag biomesTag = Helper.tagFromLevelFromRoot(data, "Biomes", null); + IntArrayTag biomesTag = NbtHelper.tagFromLevelFromRoot(data, "Biomes", null); if (biomesTag == null) { return false; } @@ -134,7 +134,7 @@ public boolean matchAnyBiome(CompoundTag data, Collection replace) { - ListTag sections = Helper.tagFromLevelFromRoot(data, "Sections", null); + ListTag sections = NbtHelper.tagFromLevelFromRoot(data, "Sections", null); if (sections == null) { return; } CompoundTag level = data.getCompound("Level"); - Point2i pos = Helper.point2iFromCompound(level, "xPos", "zPos"); + Point2i pos = NbtHelper.point2iFromCompound(level, "xPos", "zPos"); if (pos == null) { return; } @@ -194,23 +194,23 @@ public void replaceBlocks(CompoundTag data, Map replac } } - ListTag tileEntities = Helper.tagFromCompound(level, "TileEntities", null); + ListTag tileEntities = NbtHelper.tagFromCompound(level, "TileEntities", null); if (tileEntities == null) { tileEntities = new ListTag(); } for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = Helper.tagFromCompound(section, "Palette", null); + ListTag palette = NbtHelper.tagFromCompound(section, "Palette", null); if (palette == null) { continue; } - long[] blockStates = Helper.longArrayFromCompound(section, "BlockStates"); + long[] blockStates = NbtHelper.longArrayFromCompound(section, "BlockStates"); if (blockStates == null) { continue; } - int y = Helper.numberFromCompound(section, "Y", -1).intValue(); + int y = NbtHelper.numberFromCompound(section, "Y", -1).intValue(); if (y < 0 || y > 15) { continue; } @@ -409,7 +409,7 @@ protected CompoundTag createEmptySection(int y) { @Override public int getAverageHeight(CompoundTag data) { - ListTag sections = Helper.tagFromLevelFromRoot(data, "Sections", null); + ListTag sections = NbtHelper.tagFromLevelFromRoot(data, "Sections", null); if (sections == null) { return 0; } @@ -422,17 +422,17 @@ public int getAverageHeight(CompoundTag data) { zLoop: for (int cz = 0; cz < Tile.CHUNK_SIZE; cz++) { for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = Helper.tagFromCompound(section, "Palette", null); + ListTag palette = NbtHelper.tagFromCompound(section, "Palette", null); if (palette == null) { continue; } - long[] blockStates = Helper.longArrayFromCompound(section, "BlockStates"); + long[] blockStates = NbtHelper.longArrayFromCompound(section, "BlockStates"); if (blockStates == null) { continue; } - Number height = Helper.numberFromCompound(section, "Y", null); + Number height = NbtHelper.numberFromCompound(section, "Y", null); if (height == null) { continue; } @@ -452,7 +452,7 @@ public int getAverageHeight(CompoundTag data) { } protected boolean isEmpty(CompoundTag blockData) { - return switch (Helper.stringFromCompound(blockData, "Name", "")) { + return switch (NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:air", "minecraft:cave_air", "minecraft:barrier", "minecraft:structure_void" -> blockData.size() == 1; default -> false; @@ -460,12 +460,12 @@ protected boolean isEmpty(CompoundTag blockData) { } protected int filterSections(Tag sectionA, Tag sectionB) { - return Helper.numberFromCompound(sectionB, "Y", -1).intValue() - Helper.numberFromCompound(sectionA, "Y", -1).intValue(); + return NbtHelper.numberFromCompound(sectionB, "Y", -1).intValue() - NbtHelper.numberFromCompound(sectionA, "Y", -1).intValue(); } @Override public int getBlockAmount(CompoundTag data, String[] blocks) { - ListTag sections = Helper.tagFromLevelFromRoot(data, "Sections", null); + ListTag sections = NbtHelper.tagFromLevelFromRoot(data, "Sections", null); if (sections == null) { return 0; } @@ -473,14 +473,14 @@ public int getBlockAmount(CompoundTag data, String[] blocks) { int result = 0; for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = Helper.tagFromCompound(section, "Palette", null); + ListTag palette = NbtHelper.tagFromCompound(section, "Palette", null); if (palette == null) { continue; } for (int i = 0; i < palette.size(); i++) { CompoundTag blockState = palette.getCompound(i); - String name = Helper.stringFromCompound(blockState, "Name"); + String name = NbtHelper.stringFromCompound(blockState, "Name"); if (name == null) { continue; } @@ -489,7 +489,7 @@ public int getBlockAmount(CompoundTag data, String[] blocks) { if (name.equals(block)) { // count blocks of this type - long[] blockStates = Helper.longArrayFromCompound(section, "BlockStates"); + long[] blockStates = NbtHelper.longArrayFromCompound(section, "BlockStates"); if (blockStates == null) { break; } @@ -509,29 +509,29 @@ public int getBlockAmount(CompoundTag data, String[] blocks) { @Override public ListTag getTileEntities(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "TileEntities"); + return NbtHelper.tagFromLevelFromRoot(data, "TileEntities"); } @Override public CompoundTag getStructureReferences(CompoundTag data) { - CompoundTag structures = Helper.tagFromLevelFromRoot(data, "Structures"); - return Helper.tagFromCompound(structures, "References"); + CompoundTag structures = NbtHelper.tagFromLevelFromRoot(data, "Structures"); + return NbtHelper.tagFromCompound(structures, "References"); } @Override public CompoundTag getStructureStarts(CompoundTag data) { - CompoundTag structures = Helper.tagFromLevelFromRoot(data, "Structures"); - return Helper.tagFromCompound(structures, "Starts"); + CompoundTag structures = NbtHelper.tagFromLevelFromRoot(data, "Structures"); + return NbtHelper.tagFromCompound(structures, "Starts"); } @Override public ListTag getSections(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "Sections"); + return NbtHelper.tagFromLevelFromRoot(data, "Sections"); } @Override public void deleteSections(CompoundTag data, List ranges) { - ListTag sections = Helper.tagFromLevelFromRoot(data, "Sections"); + ListTag sections = NbtHelper.tagFromLevelFromRoot(data, "Sections"); if (sections == null) { return; } @@ -548,12 +548,12 @@ public void deleteSections(CompoundTag data, List ranges) { @Override public LongTag getInhabitedTime(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "InhabitedTime"); + return NbtHelper.tagFromLevelFromRoot(data, "InhabitedTime"); } @Override public void setInhabitedTime(CompoundTag data, long inhabitedTime) { - CompoundTag level = Helper.levelFromRoot(data); + CompoundTag level = NbtHelper.levelFromRoot(data); if (level != null) { level.putLong("InhabitedTime", inhabitedTime); } @@ -561,12 +561,12 @@ public void setInhabitedTime(CompoundTag data, long inhabitedTime) { @Override public StringTag getStatus(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "Status"); + return NbtHelper.tagFromLevelFromRoot(data, "Status"); } @Override public void setStatus(CompoundTag data, String status) { - CompoundTag level = Helper.levelFromRoot(data); + CompoundTag level = NbtHelper.levelFromRoot(data); if (level != null) { level.putString("Status", status); } @@ -574,12 +574,12 @@ public void setStatus(CompoundTag data, String status) { @Override public LongTag getLastUpdate(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "LastUpdate"); + return NbtHelper.tagFromLevelFromRoot(data, "LastUpdate"); } @Override public void setLastUpdate(CompoundTag data, long lastUpdate) { - CompoundTag level = Helper.levelFromRoot(data); + CompoundTag level = NbtHelper.levelFromRoot(data); if (level != null) { level.putLong("Status", lastUpdate); } @@ -587,7 +587,7 @@ public void setLastUpdate(CompoundTag data, long lastUpdate) { @Override public IntTag getXPos(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "xPos"); + return NbtHelper.tagFromLevelFromRoot(data, "xPos"); } @Override @@ -597,17 +597,17 @@ public IntTag getYPos(CompoundTag data) { @Override public IntTag getZPos(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "zPos"); + return NbtHelper.tagFromLevelFromRoot(data, "zPos"); } @Override public ByteTag getLightPopulated(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "LightPopulated"); + return NbtHelper.tagFromLevelFromRoot(data, "LightPopulated"); } @Override public void setLightPopulated(CompoundTag data, byte lightPopulated) { - CompoundTag level = Helper.levelFromRoot(data); + CompoundTag level = NbtHelper.levelFromRoot(data); if (level != null) { level.putLong("LightPopulated", lightPopulated); } diff --git a/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkMerger.java index 287f4158..72f99603 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkMerger.java @@ -3,7 +3,7 @@ import net.querz.mcaselector.point.Point2i; import net.querz.mcaselector.range.Range; import net.querz.mcaselector.version.ChunkMerger; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; import net.querz.nbt.Tag; @@ -26,21 +26,21 @@ public void mergeChunks(CompoundTag source, CompoundTag destination, List mergeStructures(source, destination, ranges, yOffset); // we need to fix entity UUIDs, because Minecraft doesn't like duplicates - fixEntityUUIDs(Helper.levelFromRoot(destination)); + fixEntityUUIDs(NbtHelper.levelFromRoot(destination)); } private void mergeStructures(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - CompoundTag sourceStarts = Helper.tagFromCompound(Helper.tagFromLevelFromRoot(source, "Structures", new CompoundTag()), "Starts", new CompoundTag()); - CompoundTag destinationStarts = Helper.tagFromCompound(Helper.tagFromLevelFromRoot(destination, "Structures", new CompoundTag()), "Starts", new CompoundTag()); + CompoundTag sourceStarts = NbtHelper.tagFromCompound(NbtHelper.tagFromLevelFromRoot(source, "Structures", new CompoundTag()), "Starts", new CompoundTag()); + CompoundTag destinationStarts = NbtHelper.tagFromCompound(NbtHelper.tagFromLevelFromRoot(destination, "Structures", new CompoundTag()), "Starts", new CompoundTag()); if (destinationStarts.size() != 0) { // remove BBs from destination for (Map.Entry start : destinationStarts) { - ListTag children = Helper.tagFromCompound(start.getValue(), "Children", null); + ListTag children = NbtHelper.tagFromCompound(start.getValue(), "Children", null); if (children != null) { child: for (int i = 0; i < children.size(); i++) { CompoundTag child = children.getCompound(i); - int[] bb = Helper.intArrayFromCompound(child, "BB"); + int[] bb = NbtHelper.intArrayFromCompound(child, "BB"); if (bb != null && bb.length == 6) { for (Range range : ranges) { if (range.contains(bb[1] >> 4) && range.contains(bb[4] >> 4)) { @@ -55,7 +55,7 @@ private void mergeStructures(CompoundTag source, CompoundTag destination, List> 4) && range.contains(bb[4] >> 4)) { @@ -73,30 +73,30 @@ private void mergeStructures(CompoundTag source, CompoundTag destination, List start : sourceStarts) { - ListTag children = Helper.tagFromCompound(start.getValue(), "Children", null); + ListTag children = NbtHelper.tagFromCompound(start.getValue(), "Children", null); if (children != null) { child: for (int i = 0; i < children.size(); i++) { CompoundTag child = children.getCompound(i); - int[] bb = Helper.intArrayFromCompound(child, "BB"); + int[] bb = NbtHelper.intArrayFromCompound(child, "BB"); if (bb == null) { continue; } for (Range range : ranges) { if (range.contains(bb[1] >> 4 - yOffset) || range.contains(bb[4] >> 4 - yOffset)) { - CompoundTag destinationStart = Helper.tagFromCompound(destinationStarts, start.getKey(), null); + CompoundTag destinationStart = NbtHelper.tagFromCompound(destinationStarts, start.getKey(), null); if (destinationStart == null || "INVALID".equals(destinationStart.getString("id"))) { destinationStart = ((CompoundTag) start.getValue()).copy(); // we need to remove the children, we don't want all of them - ListTag clonedDestinationChildren = Helper.tagFromCompound(destinationStart, "Children", null); + ListTag clonedDestinationChildren = NbtHelper.tagFromCompound(destinationStart, "Children", null); if (clonedDestinationChildren != null) { clonedDestinationChildren.clear(); } destinationStarts.put(start.getKey(), destinationStart); } - ListTag destinationChildren = Helper.tagFromCompound(destinationStarts.get(start.getKey()), "Children", null); + ListTag destinationChildren = NbtHelper.tagFromCompound(destinationStarts.get(start.getKey()), "Children", null); if (destinationChildren == null) { destinationChildren = new ListTag(); destinationStart.put("Children", destinationChildren); diff --git a/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkRelocator.java b/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkRelocator.java index 3bd3f3d9..113d3112 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkRelocator.java +++ b/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkRelocator.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.point.Point3i; import net.querz.mcaselector.version.ChunkRelocator; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.*; import java.util.Map; import static net.querz.mcaselector.validation.ValidationHelper.silent; @@ -11,7 +11,7 @@ public class Anvil113ChunkRelocator implements ChunkRelocator { @Override public boolean relocate(CompoundTag root, Point3i offset) { - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); if (level == null) { return false; } @@ -21,49 +21,49 @@ public boolean relocate(CompoundTag root, Point3i offset) { level.putInt("zPos", level.getInt("zPos") + offset.blockToChunk().getZ()); // adjust entity positions - ListTag entities = Helper.tagFromCompound(level, "Entities"); + ListTag entities = NbtHelper.tagFromCompound(level, "Entities"); if (entities != null) { entities.forEach(v -> applyOffsetToEntity((CompoundTag) v, offset)); } // adjust tile entity positions - ListTag tileEntities = Helper.tagFromCompound(level, "TileEntities"); + ListTag tileEntities = NbtHelper.tagFromCompound(level, "TileEntities"); if (tileEntities != null) { tileEntities.forEach(v -> applyOffsetToTileEntity((CompoundTag) v, offset)); } // adjust tile ticks - ListTag tileTicks = Helper.tagFromCompound(level, "TileTicks"); + ListTag tileTicks = NbtHelper.tagFromCompound(level, "TileTicks"); if (tileTicks != null) { tileTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust liquid ticks - ListTag liquidTicks = Helper.tagFromCompound(level, "LiquidTicks"); + ListTag liquidTicks = NbtHelper.tagFromCompound(level, "LiquidTicks"); if (liquidTicks != null) { liquidTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust structures - CompoundTag structures = Helper.tagFromCompound(level, "Structures"); + CompoundTag structures = NbtHelper.tagFromCompound(level, "Structures"); if (structures != null) { applyOffsetToStructures(structures, offset); } // Lights - Helper.applyOffsetToListOfShortTagLists(level, "Lights", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "Lights", offset.blockToSection()); // LiquidsToBeTicked - Helper.applyOffsetToListOfShortTagLists(level, "LiquidsToBeTicked", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "LiquidsToBeTicked", offset.blockToSection()); // ToBeTicked - Helper.applyOffsetToListOfShortTagLists(level, "ToBeTicked", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "ToBeTicked", offset.blockToSection()); // PostProcessing - Helper.applyOffsetToListOfShortTagLists(level, "PostProcessing", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "PostProcessing", offset.blockToSection()); // adjust sections vertically - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections != null) { ListTag newSections = new ListTag(); for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { @@ -82,7 +82,7 @@ private void applyOffsetToEntity(CompoundTag entity, Point3i offset) { return; } - ListTag entityPos = Helper.tagFromCompound(entity, "Pos"); + ListTag entityPos = NbtHelper.tagFromCompound(entity, "Pos"); if (entityPos != null && entityPos.size() == 3) { entityPos.set(0, DoubleTag.valueOf(entityPos.getDouble(0) + offset.getX())); entityPos.set(1, DoubleTag.valueOf(entityPos.getDouble(1) + offset.getY())); @@ -90,83 +90,83 @@ private void applyOffsetToEntity(CompoundTag entity, Point3i offset) { } // leashed entities - CompoundTag leash = Helper.tagFromCompound(entity, "Leash"); - Helper.applyIntOffsetIfRootPresent(leash, "X", "Y", "Z", offset); + CompoundTag leash = NbtHelper.tagFromCompound(entity, "Leash"); + NbtHelper.applyIntOffsetIfRootPresent(leash, "X", "Y", "Z", offset); // projectiles - Helper.applyIntOffsetIfRootPresent(entity, "xTile", "yTile", "zTile", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "xTile", "yTile", "zTile", offset); // entities that have a sleeping place - Helper.applyIntOffsetIfRootPresent(entity, "SleepingX", "SleepingY", "SleepingZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "SleepingX", "SleepingY", "SleepingZ", offset); // positions for specific entity types - String id = Helper.stringFromCompound(entity, "id", ""); + String id = NbtHelper.stringFromCompound(entity, "id", ""); switch (id) { case "minecraft:dolphin": - Helper.applyIntOffsetIfRootPresent(entity, "TreasurePosX", "TreasurePosY", "TreasurePosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TreasurePosX", "TreasurePosY", "TreasurePosZ", offset); break; case "minecraft:phantom": - Helper.applyIntOffsetIfRootPresent(entity, "AX", "AY", "AZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "AX", "AY", "AZ", offset); break; case "minecraft:shulker": - Helper.applyIntOffsetIfRootPresent(entity, "APX", "APY", "APZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "APX", "APY", "APZ", offset); break; case "minecraft:turtle": - Helper.applyIntOffsetIfRootPresent(entity, "HomePosX", "HomePosY", "HomePosZ", offset); - Helper.applyIntOffsetIfRootPresent(entity, "TravelPosX", "TravelPosY", "TravelPosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "HomePosX", "HomePosY", "HomePosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TravelPosX", "TravelPosY", "TravelPosZ", offset); break; case "minecraft:vex": - Helper.applyIntOffsetIfRootPresent(entity, "BoundX", "BoundY", "BoundZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "BoundX", "BoundY", "BoundZ", offset); break; case "minecraft:shulker_bullet": - CompoundTag owner = Helper.tagFromCompound(entity, "Owner"); - Helper.applyIntOffsetIfRootPresent(owner, "X", "Y", "Z", offset); - CompoundTag target = Helper.tagFromCompound(entity, "Target"); - Helper.applyIntOffsetIfRootPresent(target, "X", "Y", "Z", offset); + CompoundTag owner = NbtHelper.tagFromCompound(entity, "Owner"); + NbtHelper.applyIntOffsetIfRootPresent(owner, "X", "Y", "Z", offset); + CompoundTag target = NbtHelper.tagFromCompound(entity, "Target"); + NbtHelper.applyIntOffsetIfRootPresent(target, "X", "Y", "Z", offset); break; case "minecraft:end_crystal": - CompoundTag beamTarget = Helper.tagFromCompound(entity, "BeamTarget"); - Helper.applyIntOffsetIfRootPresent(beamTarget, "X", "Y", "Z", offset); + CompoundTag beamTarget = NbtHelper.tagFromCompound(entity, "BeamTarget"); + NbtHelper.applyIntOffsetIfRootPresent(beamTarget, "X", "Y", "Z", offset); break; case "minecraft:item_frame": case "minecraft:painting": - Helper.applyIntOffsetIfRootPresent(entity, "TileX", "TileY", "TileZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TileX", "TileY", "TileZ", offset); break; case "minecraft:villager": - CompoundTag memories = Helper.tagFromCompound(Helper.tagFromCompound(entity, "Brain"), "memories"); + CompoundTag memories = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(entity, "Brain"), "memories"); if (memories != null && memories.size() > 0) { - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:meeting_point"), offset); - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:home"), offset); - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:job_site"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:meeting_point"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:home"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:job_site"), offset); } break; case "minecraft:witch": case "minecraft:vindicator": case "minecraft:illusioner": case "minecraft:evoker": - CompoundTag patrolTarget = Helper.tagFromCompound(entity, "PatrolTarget"); - Helper.applyIntOffsetIfRootPresent(patrolTarget, "X", "Y", "Z", offset); + CompoundTag patrolTarget = NbtHelper.tagFromCompound(entity, "PatrolTarget"); + NbtHelper.applyIntOffsetIfRootPresent(patrolTarget, "X", "Y", "Z", offset); break; case "minecraft:falling_block": - CompoundTag tileEntityData = Helper.tagFromCompound(entity, "TileEntityData"); + CompoundTag tileEntityData = NbtHelper.tagFromCompound(entity, "TileEntityData"); applyOffsetToTileEntity(tileEntityData, offset); } // recursively update passengers - ListTag passengers = Helper.tagFromCompound(entity, "Passengers"); + ListTag passengers = NbtHelper.tagFromCompound(entity, "Passengers"); if (passengers != null) { passengers.forEach(p -> applyOffsetToEntity((CompoundTag) p, offset)); } - Helper.fixEntityUUID(entity); + NbtHelper.fixEntityUUID(entity); } private void applyOffsetToVillagerMemory(CompoundTag memory, Point3i offset) { - IntArrayTag mPos = Helper.tagFromCompound(memory, "pos"); - Helper.applyOffsetToIntArrayPos(mPos, offset); + IntArrayTag mPos = NbtHelper.tagFromCompound(memory, "pos"); + NbtHelper.applyOffsetToIntArrayPos(mPos, offset); if (mPos == null) { - ListTag lPos = Helper.tagFromCompound(memory, "pos"); - Helper.applyOffsetToIntListPos(lPos, offset); + ListTag lPos = NbtHelper.tagFromCompound(memory, "pos"); + NbtHelper.applyOffsetToIntListPos(lPos, offset); } } @@ -174,7 +174,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / Point3i chunkOffset = offset.blockToChunk(); // update references - CompoundTag references = Helper.tagFromCompound(structures, "References"); + CompoundTag references = NbtHelper.tagFromCompound(structures, "References"); if (references != null) { for (Map.Entry entry : references) { long[] reference = silent(() -> ((LongArrayTag) entry.getValue()).getValue(), null); @@ -189,41 +189,41 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / } // update starts - CompoundTag starts = Helper.tagFromCompound(structures, "Starts"); + CompoundTag starts = NbtHelper.tagFromCompound(structures, "Starts"); if (starts != null) { for (Map.Entry entry : starts) { CompoundTag structure = silent(() -> (CompoundTag) entry.getValue(), null); - if ("INVALID".equals(Helper.stringFromCompound(structure, "id"))) { + if ("INVALID".equals(NbtHelper.stringFromCompound(structure, "id"))) { continue; } - Helper.applyIntIfPresent(structure, "ChunkX", chunkOffset.getX()); - Helper.applyIntIfPresent(structure, "ChunkZ", chunkOffset.getZ()); - Helper.applyOffsetToBB(Helper.intArrayFromCompound(structure, "BB"), offset); + NbtHelper.applyIntIfPresent(structure, "ChunkX", chunkOffset.getX()); + NbtHelper.applyIntIfPresent(structure, "ChunkZ", chunkOffset.getZ()); + NbtHelper.applyOffsetToBB(NbtHelper.intArrayFromCompound(structure, "BB"), offset); - ListTag processed = Helper.tagFromCompound(structure, "Processed"); + ListTag processed = NbtHelper.tagFromCompound(structure, "Processed"); if (processed != null) { for (CompoundTag chunk : processed.iterateType(CompoundTag.TYPE)) { - Helper.applyIntIfPresent(chunk, "X", chunkOffset.getX()); - Helper.applyIntIfPresent(chunk, "Z", chunkOffset.getZ()); + NbtHelper.applyIntIfPresent(chunk, "X", chunkOffset.getX()); + NbtHelper.applyIntIfPresent(chunk, "Z", chunkOffset.getZ()); } } - ListTag children = Helper.tagFromCompound(structure, "Children"); + ListTag children = NbtHelper.tagFromCompound(structure, "Children"); if (children != null) { for (CompoundTag child : children.iterateType(CompoundTag.TYPE)) { - Helper.applyIntOffsetIfRootPresent(child, "TPX", "TPY", "TPZ", offset); - Helper.applyIntOffsetIfRootPresent(child, "PosX", "PosY", "PosZ", offset); - Helper.applyOffsetToBB(Helper.intArrayFromCompound(child, "BB"), offset); + NbtHelper.applyIntOffsetIfRootPresent(child, "TPX", "TPY", "TPZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(child, "PosX", "PosY", "PosZ", offset); + NbtHelper.applyOffsetToBB(NbtHelper.intArrayFromCompound(child, "BB"), offset); - ListTag entrances = Helper.tagFromCompound(child, "Entrances"); + ListTag entrances = NbtHelper.tagFromCompound(child, "Entrances"); if (entrances != null) { - entrances.forEach(e -> Helper.applyOffsetToBB(((IntArrayTag) e).getValue(), offset)); + entrances.forEach(e -> NbtHelper.applyOffsetToBB(((IntArrayTag) e).getValue(), offset)); } - ListTag junctions = Helper.tagFromCompound(child, "junctions"); + ListTag junctions = NbtHelper.tagFromCompound(child, "junctions"); if (junctions != null) { for (CompoundTag junction : junctions.iterateType(CompoundTag.TYPE)) { - Helper.applyIntOffsetIfRootPresent(junction, "source_x", "source_y", "source_z", offset); + NbtHelper.applyIntOffsetIfRootPresent(junction, "source_x", "source_y", "source_z", offset); } } } @@ -234,7 +234,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / } private void applyOffsetToTick(CompoundTag tick, Point3i offset) { - Helper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); } private void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { @@ -242,22 +242,22 @@ private void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { return; } - Helper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); - String id = Helper.stringFromCompound(tileEntity, "id", ""); + String id = NbtHelper.stringFromCompound(tileEntity, "id", ""); switch (id) { case "minecraft:end_gateway": - CompoundTag exitPortal = Helper.tagFromCompound(tileEntity, "ExitPortal"); - Helper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); + CompoundTag exitPortal = NbtHelper.tagFromCompound(tileEntity, "ExitPortal"); + NbtHelper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); break; case "minecraft:structure_block": - Helper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); break; case "minecraft:mob_spawner": - ListTag spawnPotentials = Helper.tagFromCompound(tileEntity, "SpawnPotentials"); + ListTag spawnPotentials = NbtHelper.tagFromCompound(tileEntity, "SpawnPotentials"); if (spawnPotentials != null) { for (CompoundTag spawnPotential : spawnPotentials.iterateType(CompoundTag.TYPE)) { - CompoundTag entity = Helper.tagFromCompound(spawnPotential, "Entity"); + CompoundTag entity = NbtHelper.tagFromCompound(spawnPotential, "Entity"); applyOffsetToEntity(entity, offset); } } diff --git a/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkRenderer.java b/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkRenderer.java index 84d63e1a..30c5a341 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkRenderer.java +++ b/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkRenderer.java @@ -4,7 +4,7 @@ import net.querz.mcaselector.tile.Tile; import net.querz.mcaselector.version.ChunkRenderer; import net.querz.mcaselector.version.ColorMapping; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; @@ -12,28 +12,28 @@ public class Anvil113ChunkRenderer implements ChunkRenderer { @Override public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, int[] waterPixels, short[] terrainHeights, short[] waterHeights, boolean water, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); height = MathUtil.clamp(height, 0, 255); ListTag[] palettes = new ListTag[16]; long[][] blockStatesArray = new long[16][]; sections.forEach(s -> { - ListTag p = Helper.tagFromCompound(s, "Palette"); - long[] b = Helper.longArrayFromCompound(s, "BlockStates"); - int y = Helper.numberFromCompound(s, "Y", -1).intValue(); + ListTag p = NbtHelper.tagFromCompound(s, "Palette"); + long[] b = NbtHelper.longArrayFromCompound(s, "BlockStates"); + int y = NbtHelper.numberFromCompound(s, "Y", -1).intValue(); if (y >= 0 && y <= 15 && p != null && b != null) { palettes[y] = p; blockStatesArray[y] = b; } }); - int[] biomes = Helper.intArrayFromCompound(level, "Biomes"); + int[] biomes = NbtHelper.intArrayFromCompound(level, "Biomes"); for (int cx = 0; cx < Tile.CHUNK_SIZE; cx += scale) { zLoop: @@ -103,18 +103,18 @@ public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); height = MathUtil.clamp(height, 0, 255); CompoundTag section = null; for (CompoundTag s : sections.iterateType(CompoundTag.TYPE)) { - int y = Helper.numberFromCompound(s, "Y", -1).intValue(); + int y = NbtHelper.numberFromCompound(s, "Y", -1).intValue(); if (y == height >> 4) { section = s; break; @@ -124,13 +124,13 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, return; } - ListTag palette = Helper.tagFromCompound(section, "Palette"); - long[] blockStates = Helper.longArrayFromCompound(section, "BlockStates"); + ListTag palette = NbtHelper.tagFromCompound(section, "Palette"); + long[] blockStates = NbtHelper.longArrayFromCompound(section, "BlockStates"); if (blockStates == null || palette == null) { return; } - int[] biomes = Helper.intArrayFromCompound(level, "Biomes"); + int[] biomes = NbtHelper.intArrayFromCompound(level, "Biomes"); int cy = height % 16; int bits = blockStates.length >> 6; @@ -156,28 +156,28 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, short[] terrainHeights, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); height = MathUtil.clamp(height, 0, 255); ListTag[] palettes = new ListTag[16]; long[][] blockStatesArray = new long[16][]; sections.forEach(s -> { - ListTag p = Helper.tagFromCompound(s, "Palette"); - long[] b = Helper.longArrayFromCompound(s, "BlockStates"); - int y = Helper.numberFromCompound(s, "Y", -1).intValue(); + ListTag p = NbtHelper.tagFromCompound(s, "Palette"); + long[] b = NbtHelper.longArrayFromCompound(s, "BlockStates"); + int y = NbtHelper.numberFromCompound(s, "Y", -1).intValue(); if (y >= 0 && y <= 15 && p != null && b != null) { palettes[y] = p; blockStatesArray[y] = b; } }); - int[] biomes = Helper.intArrayFromCompound(level, "Biomes"); + int[] biomes = NbtHelper.intArrayFromCompound(level, "Biomes"); for (int cx = 0; cx < Tile.CHUNK_SIZE; cx += scale) { zLoop: @@ -249,18 +249,18 @@ public CompoundTag minimizeChunk(CompoundTag root) { } private boolean isWater(CompoundTag blockData) { - return switch (Helper.stringFromCompound(blockData, "Name", "")) { + return switch (NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:water", "minecraft:bubble_column" -> true; default -> false; }; } private boolean isWaterlogged(CompoundTag data) { - return data.get("Properties") != null && "true".equals(Helper.stringFromCompound(Helper.tagFromCompound(data, "Properties"), "waterlogged", null)); + return data.get("Properties") != null && "true".equals(NbtHelper.stringFromCompound(NbtHelper.tagFromCompound(data, "Properties"), "waterlogged", null)); } private boolean isEmpty(CompoundTag blockData) { - return switch (Helper.stringFromCompound(blockData, "Name", "")) { + return switch (NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:air", "minecraft:cave_air", "minecraft:barrier", "minecraft:structure_void" -> blockData.size() == 1; default -> false; }; @@ -268,7 +268,7 @@ private boolean isEmpty(CompoundTag blockData) { private boolean isEmptyOrFoliage(CompoundTag blockData, ColorMapping colorMapping) { String name; - return switch (name = Helper.stringFromCompound(blockData, "Name", "")) { + return switch (name = NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:air", "minecraft:cave_air", "minecraft:barrier", "minecraft:structure_void", "minecraft:snow" -> blockData.size() == 1; default -> colorMapping.isFoliage(name); }; diff --git a/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ColorMapping.java b/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ColorMapping.java index 2a2dbbaa..fcbc5b17 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ColorMapping.java +++ b/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ColorMapping.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.text.TextHelper; import net.querz.mcaselector.version.ColorMapping; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.StringTag; import net.querz.nbt.Tag; @@ -105,12 +105,12 @@ public Anvil113ColorMapping() { @Override public int getRGB(Object o, int biome) { - String name = Helper.stringFromCompound((CompoundTag) o, "Name", ""); + String name = NbtHelper.stringFromCompound((CompoundTag) o, "Name", ""); Object value = mapping.get(name); if (value instanceof Integer) { return applyBiomeTint(name, biome, (int) value); } else if (value instanceof BlockStateMapping) { - int color = ((BlockStateMapping) value).getColor(Helper.tagFromCompound((CompoundTag) o, "Properties")); + int color = ((BlockStateMapping) value).getColor(NbtHelper.tagFromCompound((CompoundTag) o, "Properties")); return applyBiomeTint(name, biome, color); } return 0xFF000000; diff --git a/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkFilter.java b/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkFilter.java index 5ff6f749..bf08631f 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkFilter.java +++ b/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkFilter.java @@ -1,6 +1,6 @@ package net.querz.mcaselector.version.anvil114; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.mcaselector.version.anvil113.Anvil113ChunkFilter; import net.querz.nbt.*; @@ -8,12 +8,12 @@ public class Anvil114ChunkFilter extends Anvil113ChunkFilter { @Override public ByteTag getLightPopulated(CompoundTag data) { - return Helper.tagFromLevelFromRoot(data, "isLightOn"); + return NbtHelper.tagFromLevelFromRoot(data, "isLightOn"); } @Override public void setLightPopulated(CompoundTag data, byte lightPopulated) { - CompoundTag level = Helper.levelFromRoot(data); + CompoundTag level = NbtHelper.levelFromRoot(data); if (level != null) { level.putLong("isLightOn", lightPopulated); } diff --git a/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkMerger.java index 43e79e68..85f6e579 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkMerger.java @@ -3,7 +3,7 @@ import net.querz.mcaselector.point.Point2i; import net.querz.mcaselector.range.Range; import net.querz.mcaselector.version.ChunkMerger; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; import net.querz.nbt.Tag; @@ -26,21 +26,21 @@ public void mergeChunks(CompoundTag source, CompoundTag destination, List mergeStructures(source, destination, ranges, yOffset); // we need to fix entity UUIDs, because Minecraft doesn't like duplicates - fixEntityUUIDs(Helper.levelFromRoot(destination)); + fixEntityUUIDs(NbtHelper.levelFromRoot(destination)); } private void mergeStructures(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - CompoundTag sourceStarts = Helper.tagFromCompound(Helper.tagFromLevelFromRoot(source, "Structures", new CompoundTag()), "Starts", new CompoundTag()); - CompoundTag destinationStarts = Helper.tagFromCompound(Helper.tagFromLevelFromRoot(destination, "Structures", new CompoundTag()), "Starts", new CompoundTag()); + CompoundTag sourceStarts = NbtHelper.tagFromCompound(NbtHelper.tagFromLevelFromRoot(source, "Structures", new CompoundTag()), "Starts", new CompoundTag()); + CompoundTag destinationStarts = NbtHelper.tagFromCompound(NbtHelper.tagFromLevelFromRoot(destination, "Structures", new CompoundTag()), "Starts", new CompoundTag()); if (destinationStarts.size() != 0) { // remove BBs from destination for (Map.Entry start : destinationStarts) { - ListTag children = Helper.tagFromCompound(start.getValue(), "Children", null); + ListTag children = NbtHelper.tagFromCompound(start.getValue(), "Children", null); if (children != null) { child: for (int i = 0; i < children.size(); i++) { CompoundTag child = children.getCompound(i); - int[] bb = Helper.intArrayFromCompound(child, "BB"); + int[] bb = NbtHelper.intArrayFromCompound(child, "BB"); if (bb != null && bb.length == 6) { for (Range range : ranges) { if (range.contains(bb[1] >> 4) && range.contains(bb[4] >> 4)) { @@ -55,7 +55,7 @@ private void mergeStructures(CompoundTag source, CompoundTag destination, List> 4) && range.contains(bb[4] >> 4)) { @@ -73,30 +73,30 @@ private void mergeStructures(CompoundTag source, CompoundTag destination, List start : sourceStarts) { - ListTag children = Helper.tagFromCompound(start.getValue(), "Children", null); + ListTag children = NbtHelper.tagFromCompound(start.getValue(), "Children", null); if (children != null) { child: for (int i = 0; i < children.size(); i++) { CompoundTag child = children.getCompound(i); - int[] bb = Helper.intArrayFromCompound(child, "BB"); + int[] bb = NbtHelper.intArrayFromCompound(child, "BB"); if (bb == null) { continue; } for (Range range : ranges) { if (range.contains(bb[1] >> 4 - yOffset) || range.contains(bb[4] >> 4 - yOffset)) { - CompoundTag destinationStart = Helper.tagFromCompound(destinationStarts, start.getKey(), null); + CompoundTag destinationStart = NbtHelper.tagFromCompound(destinationStarts, start.getKey(), null); if (destinationStart == null || "INVALID".equals(destinationStart.getString("id"))) { destinationStart = ((CompoundTag) start.getValue()).copy(); // we need to remove the children, we don't want all of them - ListTag clonedDestinationChildren = Helper.tagFromCompound(destinationStart, "Children", null); + ListTag clonedDestinationChildren = NbtHelper.tagFromCompound(destinationStart, "Children", null); if (clonedDestinationChildren != null) { clonedDestinationChildren.clear(); } destinationStarts.put(start.getKey(), destinationStart); } - ListTag destinationChildren = Helper.tagFromCompound(destinationStarts.get(start.getKey()), "Children", null); + ListTag destinationChildren = NbtHelper.tagFromCompound(destinationStarts.get(start.getKey()), "Children", null); if (destinationChildren == null) { destinationChildren = new ListTag(); destinationStart.put("Children", destinationChildren); diff --git a/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkRelocator.java b/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkRelocator.java index ef06709d..d78daca3 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkRelocator.java +++ b/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkRelocator.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.point.Point3i; import net.querz.mcaselector.version.ChunkRelocator; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.*; import java.util.Map; import static net.querz.mcaselector.validation.ValidationHelper.silent; @@ -11,7 +11,7 @@ public class Anvil114ChunkRelocator implements ChunkRelocator { @Override public boolean relocate(CompoundTag root, Point3i offset) { - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); if (level == null) { return false; } @@ -21,49 +21,49 @@ public boolean relocate(CompoundTag root, Point3i offset) { level.putInt("zPos", level.getInt("zPos") + offset.blockToChunk().getZ()); // adjust entity positions - ListTag entities = Helper.tagFromCompound(level, "Entities"); + ListTag entities = NbtHelper.tagFromCompound(level, "Entities"); if (entities != null) { entities.forEach(v -> applyOffsetToEntity((CompoundTag) v, offset)); } // adjust tile entity positions - ListTag tileEntities = Helper.tagFromCompound(level, "TileEntities"); + ListTag tileEntities = NbtHelper.tagFromCompound(level, "TileEntities"); if (tileEntities != null) { tileEntities.forEach(v -> applyOffsetToTileEntity((CompoundTag) v, offset)); } // adjust tile ticks - ListTag tileTicks = Helper.tagFromCompound(level, "TileTicks"); + ListTag tileTicks = NbtHelper.tagFromCompound(level, "TileTicks"); if (tileTicks != null) { tileTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust liquid ticks - ListTag liquidTicks = Helper.tagFromCompound(level, "LiquidTicks"); + ListTag liquidTicks = NbtHelper.tagFromCompound(level, "LiquidTicks"); if (liquidTicks != null) { liquidTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust structures - CompoundTag structures = Helper.tagFromCompound(level, "Structures"); + CompoundTag structures = NbtHelper.tagFromCompound(level, "Structures"); if (structures != null) { applyOffsetToStructures(structures, offset); } // Lights - Helper.applyOffsetToListOfShortTagLists(level, "Lights", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "Lights", offset.blockToSection()); // LiquidsToBeTicked - Helper.applyOffsetToListOfShortTagLists(level, "LiquidsToBeTicked", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "LiquidsToBeTicked", offset.blockToSection()); // ToBeTicked - Helper.applyOffsetToListOfShortTagLists(level, "ToBeTicked", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "ToBeTicked", offset.blockToSection()); // PostProcessing - Helper.applyOffsetToListOfShortTagLists(level, "PostProcessing", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "PostProcessing", offset.blockToSection()); // adjust sections vertically - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections != null) { ListTag newSections = new ListTag(); for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { @@ -82,7 +82,7 @@ private void applyOffsetToEntity(CompoundTag entity, Point3i offset) { return; } - ListTag entityPos = Helper.tagFromCompound(entity, "Pos"); + ListTag entityPos = NbtHelper.tagFromCompound(entity, "Pos"); if (entityPos != null && entityPos.size() == 3) { entityPos.set(0, DoubleTag.valueOf(entityPos.getDouble(0) + offset.getX())); entityPos.set(1, DoubleTag.valueOf(entityPos.getDouble(1) + offset.getY())); @@ -90,54 +90,54 @@ private void applyOffsetToEntity(CompoundTag entity, Point3i offset) { } // leashed entities - CompoundTag leash = Helper.tagFromCompound(entity, "Leash"); - Helper.applyIntOffsetIfRootPresent(leash, "X", "Y", "Z", offset); + CompoundTag leash = NbtHelper.tagFromCompound(entity, "Leash"); + NbtHelper.applyIntOffsetIfRootPresent(leash, "X", "Y", "Z", offset); // projectiles - Helper.applyIntOffsetIfRootPresent(entity, "xTile", "yTile", "zTile", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "xTile", "yTile", "zTile", offset); // entities that have a sleeping place - Helper.applyIntOffsetIfRootPresent(entity, "SleepingX", "SleepingY", "SleepingZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "SleepingX", "SleepingY", "SleepingZ", offset); // positions for specific entity types - String id = Helper.stringFromCompound(entity, "id", ""); + String id = NbtHelper.stringFromCompound(entity, "id", ""); switch (id) { case "minecraft:dolphin": - Helper.applyIntOffsetIfRootPresent(entity, "TreasurePosX", "TreasurePosY", "TreasurePosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TreasurePosX", "TreasurePosY", "TreasurePosZ", offset); break; case "minecraft:phantom": - Helper.applyIntOffsetIfRootPresent(entity, "AX", "AY", "AZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "AX", "AY", "AZ", offset); break; case "minecraft:shulker": - Helper.applyIntOffsetIfRootPresent(entity, "APX", "APY", "APZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "APX", "APY", "APZ", offset); break; case "minecraft:turtle": - Helper.applyIntOffsetIfRootPresent(entity, "HomePosX", "HomePosY", "HomePosZ", offset); - Helper.applyIntOffsetIfRootPresent(entity, "TravelPosX", "TravelPosY", "TravelPosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "HomePosX", "HomePosY", "HomePosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TravelPosX", "TravelPosY", "TravelPosZ", offset); break; case "minecraft:vex": - Helper.applyIntOffsetIfRootPresent(entity, "BoundX", "BoundY", "BoundZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "BoundX", "BoundY", "BoundZ", offset); break; case "minecraft:shulker_bullet": - CompoundTag owner = Helper.tagFromCompound(entity, "Owner"); - Helper.applyIntOffsetIfRootPresent(owner, "X", "Y", "Z", offset); - CompoundTag target = Helper.tagFromCompound(entity, "Target"); - Helper.applyIntOffsetIfRootPresent(target, "X", "Y", "Z", offset); + CompoundTag owner = NbtHelper.tagFromCompound(entity, "Owner"); + NbtHelper.applyIntOffsetIfRootPresent(owner, "X", "Y", "Z", offset); + CompoundTag target = NbtHelper.tagFromCompound(entity, "Target"); + NbtHelper.applyIntOffsetIfRootPresent(target, "X", "Y", "Z", offset); break; case "minecraft:end_crystal": - CompoundTag beamTarget = Helper.tagFromCompound(entity, "BeamTarget"); - Helper.applyIntOffsetIfRootPresent(beamTarget, "X", "Y", "Z", offset); + CompoundTag beamTarget = NbtHelper.tagFromCompound(entity, "BeamTarget"); + NbtHelper.applyIntOffsetIfRootPresent(beamTarget, "X", "Y", "Z", offset); break; case "minecraft:item_frame": case "minecraft:painting": - Helper.applyIntOffsetIfRootPresent(entity, "TileX", "TileY", "TileZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TileX", "TileY", "TileZ", offset); break; case "minecraft:villager": - CompoundTag memories = Helper.tagFromCompound(Helper.tagFromCompound(entity, "Brain"), "memories"); + CompoundTag memories = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(entity, "Brain"), "memories"); if (memories != null && memories.size() > 0) { - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:meeting_point"), offset); - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:home"), offset); - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:job_site"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:meeting_point"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:home"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:job_site"), offset); } break; case "minecraft:pillager": @@ -146,29 +146,29 @@ private void applyOffsetToEntity(CompoundTag entity, Point3i offset) { case "minecraft:ravager": case "minecraft:illusioner": case "minecraft:evoker": - CompoundTag patrolTarget = Helper.tagFromCompound(entity, "PatrolTarget"); - Helper.applyIntOffsetIfRootPresent(patrolTarget, "X", "Y", "Z", offset); + CompoundTag patrolTarget = NbtHelper.tagFromCompound(entity, "PatrolTarget"); + NbtHelper.applyIntOffsetIfRootPresent(patrolTarget, "X", "Y", "Z", offset); break; case "minecraft:falling_block": - CompoundTag tileEntityData = Helper.tagFromCompound(entity, "TileEntityData"); + CompoundTag tileEntityData = NbtHelper.tagFromCompound(entity, "TileEntityData"); applyOffsetToTileEntity(tileEntityData, offset); } // recursively update passengers - ListTag passengers = Helper.tagFromCompound(entity, "Passengers"); + ListTag passengers = NbtHelper.tagFromCompound(entity, "Passengers"); if (passengers != null) { passengers.forEach(p -> applyOffsetToEntity((CompoundTag) p, offset)); } - Helper.fixEntityUUID(entity); + NbtHelper.fixEntityUUID(entity); } private void applyOffsetToVillagerMemory(CompoundTag memory, Point3i offset) { - IntArrayTag mPos = Helper.tagFromCompound(memory, "pos"); - Helper.applyOffsetToIntArrayPos(mPos, offset); + IntArrayTag mPos = NbtHelper.tagFromCompound(memory, "pos"); + NbtHelper.applyOffsetToIntArrayPos(mPos, offset); if (mPos == null) { - ListTag lPos = Helper.tagFromCompound(memory, "pos"); - Helper.applyOffsetToIntListPos(lPos, offset); + ListTag lPos = NbtHelper.tagFromCompound(memory, "pos"); + NbtHelper.applyOffsetToIntListPos(lPos, offset); } } @@ -176,7 +176,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / Point3i chunkOffset = offset.blockToChunk(); // update references - CompoundTag references = Helper.tagFromCompound(structures, "References"); + CompoundTag references = NbtHelper.tagFromCompound(structures, "References"); if (references != null) { for (Map.Entry entry : references) { long[] reference = silent(() -> ((LongArrayTag) entry.getValue()).getValue(), null); @@ -191,41 +191,41 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / } // update starts - CompoundTag starts = Helper.tagFromCompound(structures, "Starts"); + CompoundTag starts = NbtHelper.tagFromCompound(structures, "Starts"); if (starts != null) { for (Map.Entry entry : starts) { CompoundTag structure = silent(() -> (CompoundTag) entry.getValue(), null); - if ("INVALID".equals(Helper.stringFromCompound(structure, "id"))) { + if ("INVALID".equals(NbtHelper.stringFromCompound(structure, "id"))) { continue; } - Helper.applyIntIfPresent(structure, "ChunkX", chunkOffset.getX()); - Helper.applyIntIfPresent(structure, "ChunkZ", chunkOffset.getZ()); - Helper.applyOffsetToBB(Helper.intArrayFromCompound(structure, "BB"), offset); + NbtHelper.applyIntIfPresent(structure, "ChunkX", chunkOffset.getX()); + NbtHelper.applyIntIfPresent(structure, "ChunkZ", chunkOffset.getZ()); + NbtHelper.applyOffsetToBB(NbtHelper.intArrayFromCompound(structure, "BB"), offset); - ListTag processed = Helper.tagFromCompound(structure, "Processed"); + ListTag processed = NbtHelper.tagFromCompound(structure, "Processed"); if (processed != null) { for (CompoundTag chunk : processed.iterateType(CompoundTag.TYPE)) { - Helper.applyIntIfPresent(chunk, "X", chunkOffset.getX()); - Helper.applyIntIfPresent(chunk, "Z", chunkOffset.getZ()); + NbtHelper.applyIntIfPresent(chunk, "X", chunkOffset.getX()); + NbtHelper.applyIntIfPresent(chunk, "Z", chunkOffset.getZ()); } } - ListTag children = Helper.tagFromCompound(structure, "Children"); + ListTag children = NbtHelper.tagFromCompound(structure, "Children"); if (children != null) { for (CompoundTag child : children.iterateType(CompoundTag.TYPE)) { - Helper.applyIntOffsetIfRootPresent(child, "TPX", "TPY", "TPZ", offset); - Helper.applyIntOffsetIfRootPresent(child, "PosX", "PosY", "PosZ", offset); - Helper.applyOffsetToBB(Helper.intArrayFromCompound(child, "BB"), offset); + NbtHelper.applyIntOffsetIfRootPresent(child, "TPX", "TPY", "TPZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(child, "PosX", "PosY", "PosZ", offset); + NbtHelper.applyOffsetToBB(NbtHelper.intArrayFromCompound(child, "BB"), offset); - ListTag entrances = Helper.tagFromCompound(child, "Entrances"); + ListTag entrances = NbtHelper.tagFromCompound(child, "Entrances"); if (entrances != null) { - entrances.forEach(e -> Helper.applyOffsetToBB(((IntArrayTag) e).getValue(), offset)); + entrances.forEach(e -> NbtHelper.applyOffsetToBB(((IntArrayTag) e).getValue(), offset)); } - ListTag junctions = Helper.tagFromCompound(child, "junctions"); + ListTag junctions = NbtHelper.tagFromCompound(child, "junctions"); if (junctions != null) { for (CompoundTag junction : junctions.iterateType(CompoundTag.TYPE)) { - Helper.applyIntOffsetIfRootPresent(junction, "source_x", "source_y", "source_z", offset); + NbtHelper.applyIntOffsetIfRootPresent(junction, "source_x", "source_y", "source_z", offset); } } } @@ -235,7 +235,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / } private void applyOffsetToTick(CompoundTag tick, Point3i offset) { - Helper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); } private void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { @@ -243,22 +243,22 @@ private void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { return; } - Helper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); - String id = Helper.stringFromCompound(tileEntity, "id", ""); + String id = NbtHelper.stringFromCompound(tileEntity, "id", ""); switch (id) { case "minecraft:end_gateway": - CompoundTag exitPortal = Helper.tagFromCompound(tileEntity, "ExitPortal"); - Helper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); + CompoundTag exitPortal = NbtHelper.tagFromCompound(tileEntity, "ExitPortal"); + NbtHelper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); break; case "minecraft:structure_block": - Helper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); break; case "minecraft:mob_spawner": - ListTag spawnPotentials = Helper.tagFromCompound(tileEntity, "SpawnPotentials"); + ListTag spawnPotentials = NbtHelper.tagFromCompound(tileEntity, "SpawnPotentials"); if (spawnPotentials != null) { for (CompoundTag spawnPotential : spawnPotentials.iterateType(CompoundTag.TYPE)) { - CompoundTag entity = Helper.tagFromCompound(spawnPotential, "Entity"); + CompoundTag entity = NbtHelper.tagFromCompound(spawnPotential, "Entity"); applyOffsetToEntity(entity, offset); } } diff --git a/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ColorMapping.java b/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ColorMapping.java index 355f5553..d9a2fc8f 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ColorMapping.java +++ b/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ColorMapping.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.text.TextHelper; import net.querz.mcaselector.version.ColorMapping; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.StringTag; import net.querz.nbt.Tag; @@ -105,12 +105,12 @@ public Anvil114ColorMapping() { @Override public int getRGB(Object o, int biome) { - String name = Helper.stringFromCompound((CompoundTag) o, "Name", ""); + String name = NbtHelper.stringFromCompound((CompoundTag) o, "Name", ""); Object value = mapping.get(name); if (value instanceof Integer) { return applyBiomeTint(name, biome, (int) value); } else if (value instanceof BlockStateMapping) { - int color = ((BlockStateMapping) value).getColor(Helper.tagFromCompound((CompoundTag) o, "Properties")); + int color = ((BlockStateMapping) value).getColor(NbtHelper.tagFromCompound((CompoundTag) o, "Properties")); return applyBiomeTint(name, biome, color); } return 0xFF000000; diff --git a/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114PoiRelocator.java b/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114PoiRelocator.java index 764b54e8..76f9be5e 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114PoiRelocator.java +++ b/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114PoiRelocator.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.point.Point3i; import net.querz.mcaselector.version.ChunkRelocator; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; import net.querz.nbt.Tag; @@ -13,7 +13,7 @@ public class Anvil114PoiRelocator implements ChunkRelocator { @Override public boolean relocate(CompoundTag root, Point3i offset) { - CompoundTag sections = Helper.tagFromCompound(root, "Sections"); + CompoundTag sections = NbtHelper.tagFromCompound(root, "Sections"); if (sections == null) { return false; } @@ -27,11 +27,11 @@ public boolean relocate(CompoundTag root, Point3i offset) { } if (section.containsKey("Records") && section.get("Records").getID() != Tag.LONG_ARRAY) { - ListTag records = Helper.tagFromCompound(section, "Records"); + ListTag records = NbtHelper.tagFromCompound(section, "Records"); if (records != null) { for (CompoundTag record : records.iterateType(CompoundTag.TYPE)) { - int[] pos = Helper.intArrayFromCompound(record, "pos"); - Helper.applyOffsetToIntArrayPos(pos, offset); + int[] pos = NbtHelper.intArrayFromCompound(record, "pos"); + NbtHelper.applyOffsetToIntArrayPos(pos, offset); } } } diff --git a/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkFilter.java b/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkFilter.java index 9ed9e35c..4cc0a4e4 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkFilter.java +++ b/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkFilter.java @@ -1,7 +1,7 @@ package net.querz.mcaselector.version.anvil115; import net.querz.mcaselector.io.registry.BiomeRegistry; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.mcaselector.version.anvil113.Anvil113ChunkFilter; import net.querz.nbt.CompoundTag; import java.util.Arrays; @@ -10,7 +10,7 @@ public class Anvil115ChunkFilter extends Anvil113ChunkFilter { @Override public void forceBiome(CompoundTag data, BiomeRegistry.BiomeIdentifier biome) { - CompoundTag level = Helper.levelFromRoot(data); + CompoundTag level = NbtHelper.levelFromRoot(data); if (level != null) { int[] biomes = new int[1024]; Arrays.fill(biomes, (byte) biome.getID()); diff --git a/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkMerger.java index a23fda06..fb15ae14 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkMerger.java @@ -3,7 +3,7 @@ import net.querz.mcaselector.point.Point2i; import net.querz.mcaselector.range.Range; import net.querz.mcaselector.version.ChunkMerger; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.IntArrayTag; import net.querz.nbt.ListTag; @@ -28,14 +28,14 @@ public void mergeChunks(CompoundTag source, CompoundTag destination, List mergeStructures(source, destination, ranges, yOffset); // we need to fix entity UUIDs, because Minecraft doesn't like duplicates - fixEntityUUIDs(Helper.levelFromRoot(destination)); + fixEntityUUIDs(NbtHelper.levelFromRoot(destination)); mergeBiomes(source, destination, ranges, yOffset); } protected void mergeBiomes(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - IntArrayTag sourceBiomes = Helper.tagFromLevelFromRoot(source, "Biomes"); - IntArrayTag destinationBiomes = Helper.tagFromLevelFromRoot(destination, "Biomes"); + IntArrayTag sourceBiomes = NbtHelper.tagFromLevelFromRoot(source, "Biomes"); + IntArrayTag destinationBiomes = NbtHelper.tagFromLevelFromRoot(destination, "Biomes"); if (destinationBiomes == null) { // if there is no destination, we will let minecraft set the biome @@ -104,17 +104,17 @@ private int getBiomeIndex(int x, int y, int z) { } private void mergeStructures(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - CompoundTag sourceStarts = Helper.tagFromCompound(Helper.tagFromLevelFromRoot(source, "Structures", new CompoundTag()), "Starts", new CompoundTag()); - CompoundTag destinationStarts = Helper.tagFromCompound(Helper.tagFromLevelFromRoot(destination, "Structures", new CompoundTag()), "Starts", new CompoundTag()); + CompoundTag sourceStarts = NbtHelper.tagFromCompound(NbtHelper.tagFromLevelFromRoot(source, "Structures", new CompoundTag()), "Starts", new CompoundTag()); + CompoundTag destinationStarts = NbtHelper.tagFromCompound(NbtHelper.tagFromLevelFromRoot(destination, "Structures", new CompoundTag()), "Starts", new CompoundTag()); if (destinationStarts.size() != 0) { // remove BBs from destination for (Map.Entry start : destinationStarts) { - ListTag children = Helper.tagFromCompound(start.getValue(), "Children", null); + ListTag children = NbtHelper.tagFromCompound(start.getValue(), "Children", null); if (children != null) { child: for (int i = 0; i < children.size(); i++) { CompoundTag child = children.getCompound(i); - int[] bb = Helper.intArrayFromCompound(child, "BB"); + int[] bb = NbtHelper.intArrayFromCompound(child, "BB"); if (bb != null && bb.length == 6) { for (Range range : ranges) { if (range.contains(bb[1] >> 4) && range.contains(bb[4] >> 4)) { @@ -129,7 +129,7 @@ private void mergeStructures(CompoundTag source, CompoundTag destination, List> 4) && range.contains(bb[4] >> 4)) { @@ -147,30 +147,30 @@ private void mergeStructures(CompoundTag source, CompoundTag destination, List start : sourceStarts) { - ListTag children = Helper.tagFromCompound(start.getValue(), "Children", null); + ListTag children = NbtHelper.tagFromCompound(start.getValue(), "Children", null); if (children != null) { child: for (int i = 0; i < children.size(); i++) { CompoundTag child = children.getCompound(i); - int[] bb = Helper.intArrayFromCompound(child, "BB"); + int[] bb = NbtHelper.intArrayFromCompound(child, "BB"); if (bb == null) { continue; } for (Range range : ranges) { if (range.contains(bb[1] >> 4 - yOffset) || range.contains(bb[4] >> 4 - yOffset)) { - CompoundTag destinationStart = Helper.tagFromCompound(destinationStarts, start.getKey(), null); + CompoundTag destinationStart = NbtHelper.tagFromCompound(destinationStarts, start.getKey(), null); if (destinationStart == null || "INVALID".equals(destinationStart.getString("id"))) { destinationStart = ((CompoundTag) start.getValue()).copy(); // we need to remove the children, we don't want all of them - ListTag clonedDestinationChildren = Helper.tagFromCompound(destinationStart, "Children", null); + ListTag clonedDestinationChildren = NbtHelper.tagFromCompound(destinationStart, "Children", null); if (clonedDestinationChildren != null) { clonedDestinationChildren.clear(); } destinationStarts.put(start.getKey(), destinationStart); } - ListTag destinationChildren = Helper.tagFromCompound(destinationStarts.get(start.getKey()), "Children", null); + ListTag destinationChildren = NbtHelper.tagFromCompound(destinationStarts.get(start.getKey()), "Children", null); if (destinationChildren == null) { destinationChildren = new ListTag(); destinationStart.put("Children", destinationChildren); diff --git a/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkRelocator.java b/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkRelocator.java index 3f13adae..cbfe2c09 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkRelocator.java +++ b/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkRelocator.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.point.Point3i; import net.querz.mcaselector.version.ChunkRelocator; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.*; import java.util.Map; import static net.querz.mcaselector.validation.ValidationHelper.silent; @@ -11,7 +11,7 @@ public class Anvil115ChunkRelocator implements ChunkRelocator { @Override public boolean relocate(CompoundTag root, Point3i offset) { - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); if (level == null) { return false; } @@ -21,52 +21,52 @@ public boolean relocate(CompoundTag root, Point3i offset) { level.putInt("zPos", level.getInt("zPos") + offset.blockToChunk().getZ()); // adjust entity positions - ListTag entities = Helper.tagFromCompound(level, "Entities"); + ListTag entities = NbtHelper.tagFromCompound(level, "Entities"); if (entities != null) { entities.forEach(v -> applyOffsetToEntity((CompoundTag) v, offset)); } // adjust tile entity positions - ListTag tileEntities = Helper.tagFromCompound(level, "TileEntities"); + ListTag tileEntities = NbtHelper.tagFromCompound(level, "TileEntities"); if (tileEntities != null) { tileEntities.forEach(v -> applyOffsetToTileEntity((CompoundTag) v, offset)); } // adjust tile ticks - ListTag tileTicks = Helper.tagFromCompound(level, "TileTicks"); + ListTag tileTicks = NbtHelper.tagFromCompound(level, "TileTicks"); if (tileTicks != null) { tileTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust liquid ticks - ListTag liquidTicks = Helper.tagFromCompound(level, "LiquidTicks"); + ListTag liquidTicks = NbtHelper.tagFromCompound(level, "LiquidTicks"); if (liquidTicks != null) { liquidTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust structures - CompoundTag structures = Helper.tagFromCompound(level, "Structures"); + CompoundTag structures = NbtHelper.tagFromCompound(level, "Structures"); if (structures != null) { applyOffsetToStructures(structures, offset); } // Biomes - applyOffsetToBiomes(Helper.tagFromCompound(level, "Biomes"), offset.blockToSection()); + applyOffsetToBiomes(NbtHelper.tagFromCompound(level, "Biomes"), offset.blockToSection()); // Lights - Helper.applyOffsetToListOfShortTagLists(level, "Lights", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "Lights", offset.blockToSection()); // LiquidsToBeTicked - Helper.applyOffsetToListOfShortTagLists(level, "LiquidsToBeTicked", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "LiquidsToBeTicked", offset.blockToSection()); // ToBeTicked - Helper.applyOffsetToListOfShortTagLists(level, "ToBeTicked", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "ToBeTicked", offset.blockToSection()); // PostProcessing - Helper.applyOffsetToListOfShortTagLists(level, "PostProcessing", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "PostProcessing", offset.blockToSection()); // adjust sections vertically - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections != null) { ListTag newSections = new ListTag(); for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { @@ -108,7 +108,7 @@ private void applyOffsetToEntity(CompoundTag entity, Point3i offset) { return; } - ListTag entityPos = Helper.tagFromCompound(entity, "Pos"); + ListTag entityPos = NbtHelper.tagFromCompound(entity, "Pos"); if (entityPos != null && entityPos.size() == 3) { entityPos.set(0, DoubleTag.valueOf(entityPos.getDouble(0) + offset.getX())); entityPos.set(1, DoubleTag.valueOf(entityPos.getDouble(1) + offset.getY())); @@ -116,58 +116,58 @@ private void applyOffsetToEntity(CompoundTag entity, Point3i offset) { } // leashed entities - CompoundTag leash = Helper.tagFromCompound(entity, "Leash"); - Helper.applyIntOffsetIfRootPresent(leash, "X", "Y", "Z", offset); + CompoundTag leash = NbtHelper.tagFromCompound(entity, "Leash"); + NbtHelper.applyIntOffsetIfRootPresent(leash, "X", "Y", "Z", offset); // projectiles - Helper.applyIntOffsetIfRootPresent(entity, "xTile", "yTile", "zTile", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "xTile", "yTile", "zTile", offset); // entities that have a sleeping place - Helper.applyIntOffsetIfRootPresent(entity, "SleepingX", "SleepingY", "SleepingZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "SleepingX", "SleepingY", "SleepingZ", offset); // positions for specific entity types - String id = Helper.stringFromCompound(entity, "id", ""); + String id = NbtHelper.stringFromCompound(entity, "id", ""); switch (id) { case "minecraft:dolphin": - Helper.applyIntOffsetIfRootPresent(entity, "TreasurePosX", "TreasurePosY", "TreasurePosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TreasurePosX", "TreasurePosY", "TreasurePosZ", offset); break; case "minecraft:phantom": - Helper.applyIntOffsetIfRootPresent(entity, "AX", "AY", "AZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "AX", "AY", "AZ", offset); break; case "minecraft:shulker": - Helper.applyIntOffsetIfRootPresent(entity, "APX", "APY", "APZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "APX", "APY", "APZ", offset); break; case "minecraft:turtle": - Helper.applyIntOffsetIfRootPresent(entity, "HomePosX", "HomePosY", "HomePosZ", offset); - Helper.applyIntOffsetIfRootPresent(entity, "TravelPosX", "TravelPosY", "TravelPosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "HomePosX", "HomePosY", "HomePosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TravelPosX", "TravelPosY", "TravelPosZ", offset); break; case "minecraft:vex": - Helper.applyIntOffsetIfRootPresent(entity, "BoundX", "BoundY", "BoundZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "BoundX", "BoundY", "BoundZ", offset); break; case "minecraft:wandering_trader": - CompoundTag wanderTarget = Helper.tagFromCompound(entity, "WanderTarget"); - Helper.applyIntOffsetIfRootPresent(wanderTarget, "X", "Y", "Z", offset); + CompoundTag wanderTarget = NbtHelper.tagFromCompound(entity, "WanderTarget"); + NbtHelper.applyIntOffsetIfRootPresent(wanderTarget, "X", "Y", "Z", offset); break; case "minecraft:shulker_bullet": - CompoundTag owner = Helper.tagFromCompound(entity, "Owner"); - Helper.applyIntOffsetIfRootPresent(owner, "X", "Y", "Z", offset); - CompoundTag target = Helper.tagFromCompound(entity, "Target"); - Helper.applyIntOffsetIfRootPresent(target, "X", "Y", "Z", offset); + CompoundTag owner = NbtHelper.tagFromCompound(entity, "Owner"); + NbtHelper.applyIntOffsetIfRootPresent(owner, "X", "Y", "Z", offset); + CompoundTag target = NbtHelper.tagFromCompound(entity, "Target"); + NbtHelper.applyIntOffsetIfRootPresent(target, "X", "Y", "Z", offset); break; case "minecraft:end_crystal": - CompoundTag beamTarget = Helper.tagFromCompound(entity, "BeamTarget"); - Helper.applyIntOffsetIfRootPresent(beamTarget, "X", "Y", "Z", offset); + CompoundTag beamTarget = NbtHelper.tagFromCompound(entity, "BeamTarget"); + NbtHelper.applyIntOffsetIfRootPresent(beamTarget, "X", "Y", "Z", offset); break; case "minecraft:item_frame": case "minecraft:painting": - Helper.applyIntOffsetIfRootPresent(entity, "TileX", "TileY", "TileZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TileX", "TileY", "TileZ", offset); break; case "minecraft:villager": - CompoundTag memories = Helper.tagFromCompound(Helper.tagFromCompound(entity, "Brain"), "memories"); + CompoundTag memories = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(entity, "Brain"), "memories"); if (memories != null && memories.size() > 0) { - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:meeting_point"), offset); - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:home"), offset); - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:job_site"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:meeting_point"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:home"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:job_site"), offset); } break; case "minecraft:pillager": @@ -176,29 +176,29 @@ private void applyOffsetToEntity(CompoundTag entity, Point3i offset) { case "minecraft:ravager": case "minecraft:illusioner": case "minecraft:evoker": - CompoundTag patrolTarget = Helper.tagFromCompound(entity, "PatrolTarget"); - Helper.applyIntOffsetIfRootPresent(patrolTarget, "X", "Y", "Z", offset); + CompoundTag patrolTarget = NbtHelper.tagFromCompound(entity, "PatrolTarget"); + NbtHelper.applyIntOffsetIfRootPresent(patrolTarget, "X", "Y", "Z", offset); break; case "minecraft:falling_block": - CompoundTag tileEntityData = Helper.tagFromCompound(entity, "TileEntityData"); + CompoundTag tileEntityData = NbtHelper.tagFromCompound(entity, "TileEntityData"); applyOffsetToTileEntity(tileEntityData, offset); } // recursively update passengers - ListTag passengers = Helper.tagFromCompound(entity, "Passengers"); + ListTag passengers = NbtHelper.tagFromCompound(entity, "Passengers"); if (passengers != null) { passengers.forEach(p -> applyOffsetToEntity((CompoundTag) p, offset)); } - Helper.fixEntityUUID(entity); + NbtHelper.fixEntityUUID(entity); } private void applyOffsetToVillagerMemory(CompoundTag memory, Point3i offset) { - IntArrayTag mPos = Helper.tagFromCompound(memory, "pos"); - Helper.applyOffsetToIntArrayPos(mPos, offset); + IntArrayTag mPos = NbtHelper.tagFromCompound(memory, "pos"); + NbtHelper.applyOffsetToIntArrayPos(mPos, offset); if (mPos == null) { - ListTag lPos = Helper.tagFromCompound(memory, "pos"); - Helper.applyOffsetToIntListPos(lPos, offset); + ListTag lPos = NbtHelper.tagFromCompound(memory, "pos"); + NbtHelper.applyOffsetToIntListPos(lPos, offset); } } @@ -206,7 +206,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / Point3i chunkOffset = offset.blockToChunk(); // update references - CompoundTag references = Helper.tagFromCompound(structures, "References"); + CompoundTag references = NbtHelper.tagFromCompound(structures, "References"); if (references != null) { for (Map.Entry entry : references) { long[] reference = silent(() -> ((LongArrayTag) entry.getValue()).getValue(), null); @@ -221,41 +221,41 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / } // update starts - CompoundTag starts = Helper.tagFromCompound(structures, "Starts"); + CompoundTag starts = NbtHelper.tagFromCompound(structures, "Starts"); if (starts != null) { for (Map.Entry entry : starts) { CompoundTag structure = silent(() -> (CompoundTag) entry.getValue(), null); - if ("INVALID".equals(Helper.stringFromCompound(structure, "id"))) { + if ("INVALID".equals(NbtHelper.stringFromCompound(structure, "id"))) { continue; } - Helper.applyIntIfPresent(structure, "ChunkX", chunkOffset.getX()); - Helper.applyIntIfPresent(structure, "ChunkZ", chunkOffset.getZ()); - Helper.applyOffsetToBB(Helper.intArrayFromCompound(structure, "BB"), offset); + NbtHelper.applyIntIfPresent(structure, "ChunkX", chunkOffset.getX()); + NbtHelper.applyIntIfPresent(structure, "ChunkZ", chunkOffset.getZ()); + NbtHelper.applyOffsetToBB(NbtHelper.intArrayFromCompound(structure, "BB"), offset); - ListTag processed = Helper.tagFromCompound(structure, "Processed"); + ListTag processed = NbtHelper.tagFromCompound(structure, "Processed"); if (processed != null) { for (CompoundTag chunk : processed.iterateType(CompoundTag.TYPE)) { - Helper.applyIntIfPresent(chunk, "X", chunkOffset.getX()); - Helper.applyIntIfPresent(chunk, "Z", chunkOffset.getZ()); + NbtHelper.applyIntIfPresent(chunk, "X", chunkOffset.getX()); + NbtHelper.applyIntIfPresent(chunk, "Z", chunkOffset.getZ()); } } - ListTag children = Helper.tagFromCompound(structure, "Children"); + ListTag children = NbtHelper.tagFromCompound(structure, "Children"); if (children != null) { for (CompoundTag child : children.iterateType(CompoundTag.TYPE)) { - Helper.applyIntOffsetIfRootPresent(child, "TPX", "TPY", "TPZ", offset); - Helper.applyIntOffsetIfRootPresent(child, "PosX", "PosY", "PosZ", offset); - Helper.applyOffsetToBB(Helper.intArrayFromCompound(child, "BB"), offset); + NbtHelper.applyIntOffsetIfRootPresent(child, "TPX", "TPY", "TPZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(child, "PosX", "PosY", "PosZ", offset); + NbtHelper.applyOffsetToBB(NbtHelper.intArrayFromCompound(child, "BB"), offset); - ListTag entrances = Helper.tagFromCompound(child, "Entrances"); + ListTag entrances = NbtHelper.tagFromCompound(child, "Entrances"); if (entrances != null) { - entrances.forEach(e -> Helper.applyOffsetToBB(((IntArrayTag) e).getValue(), offset)); + entrances.forEach(e -> NbtHelper.applyOffsetToBB(((IntArrayTag) e).getValue(), offset)); } - ListTag junctions = Helper.tagFromCompound(child, "junctions"); + ListTag junctions = NbtHelper.tagFromCompound(child, "junctions"); if (junctions != null) { for (CompoundTag junction : junctions.iterateType(CompoundTag.TYPE)) { - Helper.applyIntOffsetIfRootPresent(junction, "source_x", "source_y", "source_z", offset); + NbtHelper.applyIntOffsetIfRootPresent(junction, "source_x", "source_y", "source_z", offset); } } } @@ -265,7 +265,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / } private void applyOffsetToTick(CompoundTag tick, Point3i offset) { - Helper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); } private void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { @@ -273,33 +273,33 @@ private void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { return; } - Helper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); - String id = Helper.stringFromCompound(tileEntity, "id", ""); + String id = NbtHelper.stringFromCompound(tileEntity, "id", ""); switch (id) { case "minecraft:bee_nest": case "minecraft:beehive": - CompoundTag flowerPos = Helper.tagFromCompound(tileEntity, "FlowerPos"); - Helper.applyIntOffsetIfRootPresent(flowerPos, "X", "Y", "Z", offset); - ListTag bees = Helper.tagFromCompound(tileEntity, "Bees"); + CompoundTag flowerPos = NbtHelper.tagFromCompound(tileEntity, "FlowerPos"); + NbtHelper.applyIntOffsetIfRootPresent(flowerPos, "X", "Y", "Z", offset); + ListTag bees = NbtHelper.tagFromCompound(tileEntity, "Bees"); if (bees != null) { for (CompoundTag bee : bees.iterateType(CompoundTag.TYPE)) { - applyOffsetToEntity(Helper.tagFromCompound(bee, "EntityData"), offset); + applyOffsetToEntity(NbtHelper.tagFromCompound(bee, "EntityData"), offset); } } break; case "minecraft:end_gateway": - CompoundTag exitPortal = Helper.tagFromCompound(tileEntity, "ExitPortal"); - Helper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); + CompoundTag exitPortal = NbtHelper.tagFromCompound(tileEntity, "ExitPortal"); + NbtHelper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); break; case "minecraft:structure_block": - Helper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); break; case "minecraft:mob_spawner": - ListTag spawnPotentials = Helper.tagFromCompound(tileEntity, "SpawnPotentials"); + ListTag spawnPotentials = NbtHelper.tagFromCompound(tileEntity, "SpawnPotentials"); if (spawnPotentials != null) { for (CompoundTag spawnPotential : spawnPotentials.iterateType(CompoundTag.TYPE)) { - CompoundTag entity = Helper.tagFromCompound(spawnPotential, "Entity"); + CompoundTag entity = NbtHelper.tagFromCompound(spawnPotential, "Entity"); applyOffsetToEntity(entity, offset); } } diff --git a/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkRenderer.java b/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkRenderer.java index d1cccd0d..3efa1f45 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkRenderer.java +++ b/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkRenderer.java @@ -4,7 +4,7 @@ import net.querz.mcaselector.tile.Tile; import net.querz.mcaselector.version.ChunkRenderer; import net.querz.mcaselector.version.ColorMapping; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; @@ -12,28 +12,28 @@ public class Anvil115ChunkRenderer implements ChunkRenderer { @Override public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, int[] waterPixels, short[] terrainHeights, short[] waterHeights, boolean water, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); height = MathUtil.clamp(height, 0, 255); ListTag[] palettes = new ListTag[16]; long[][] blockStatesArray = new long[16][]; sections.forEach(s -> { - ListTag p = Helper.tagFromCompound(s, "Palette"); - long[] b = Helper.longArrayFromCompound(s, "BlockStates"); - int y = Helper.numberFromCompound(s, "Y", -1).intValue(); + ListTag p = NbtHelper.tagFromCompound(s, "Palette"); + long[] b = NbtHelper.longArrayFromCompound(s, "BlockStates"); + int y = NbtHelper.numberFromCompound(s, "Y", -1).intValue(); if (y >= 0 && y <= 15 && p != null && b != null) { palettes[y] = p; blockStatesArray[y] = b; } }); - int[] biomes = Helper.intArrayFromCompound(level, "Biomes"); + int[] biomes = NbtHelper.intArrayFromCompound(level, "Biomes"); for (int cx = 0; cx < Tile.CHUNK_SIZE; cx += scale) { zLoop: @@ -103,18 +103,18 @@ public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); height = MathUtil.clamp(height, 0, 255); CompoundTag section = null; for (CompoundTag s : sections.iterateType(CompoundTag.TYPE)) { - int y = Helper.numberFromCompound(s, "Y", -1).intValue(); + int y = NbtHelper.numberFromCompound(s, "Y", -1).intValue(); if (y == height >> 4) { section = s; break; @@ -124,13 +124,13 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, return; } - ListTag palette = Helper.tagFromCompound(section, "Palette"); - long[] blockStates = Helper.longArrayFromCompound(section, "BlockStates"); + ListTag palette = NbtHelper.tagFromCompound(section, "Palette"); + long[] blockStates = NbtHelper.longArrayFromCompound(section, "BlockStates"); if (blockStates == null || palette == null) { return; } - int[] biomes = Helper.intArrayFromCompound(level, "Biomes"); + int[] biomes = NbtHelper.intArrayFromCompound(level, "Biomes"); int cy = height % 16; int bits = blockStates.length >> 6; @@ -156,28 +156,28 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, short[] terrainHeights, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); height = MathUtil.clamp(height, 0, 255); ListTag[] palettes = new ListTag[16]; long[][] blockStatesArray = new long[16][]; sections.forEach(s -> { - ListTag p = Helper.tagFromCompound(s, "Palette"); - long[] b = Helper.longArrayFromCompound(s, "BlockStates"); - int y = Helper.numberFromCompound(s, "Y", -1).intValue(); + ListTag p = NbtHelper.tagFromCompound(s, "Palette"); + long[] b = NbtHelper.longArrayFromCompound(s, "BlockStates"); + int y = NbtHelper.numberFromCompound(s, "Y", -1).intValue(); if (y >= 0 && y <= 15 && p != null && b != null) { palettes[y] = p; blockStatesArray[y] = b; } }); - int[] biomes = Helper.intArrayFromCompound(level, "Biomes"); + int[] biomes = NbtHelper.intArrayFromCompound(level, "Biomes"); for (int cx = 0; cx < Tile.CHUNK_SIZE; cx += scale) { zLoop: @@ -249,18 +249,18 @@ public CompoundTag minimizeChunk(CompoundTag root) { } private boolean isWater(CompoundTag blockData) { - return switch (Helper.stringFromCompound(blockData, "Name", "")) { + return switch (NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:water", "minecraft:bubble_column" -> true; default -> false; }; } private boolean isWaterlogged(CompoundTag data) { - return data.get("Properties") != null && "true".equals(Helper.stringFromCompound(Helper.tagFromCompound(data, "Properties"), "waterlogged", null)); + return data.get("Properties") != null && "true".equals(NbtHelper.stringFromCompound(NbtHelper.tagFromCompound(data, "Properties"), "waterlogged", null)); } private boolean isEmpty(CompoundTag blockData) { - return switch (Helper.stringFromCompound(blockData, "Name", "")) { + return switch (NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:air", "minecraft:cave_air", "minecraft:barrier", "minecraft:structure_void" -> blockData.size() == 1; default -> false; }; @@ -268,7 +268,7 @@ private boolean isEmpty(CompoundTag blockData) { private boolean isEmptyOrFoliage(CompoundTag blockData, ColorMapping colorMapping) { String name; - return switch (name = Helper.stringFromCompound(blockData, "Name", "")) { + return switch (name = NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:air", "minecraft:cave_air", "minecraft:barrier", "minecraft:structure_void", "minecraft:snow" -> blockData.size() == 1; default -> colorMapping.isFoliage(name); }; diff --git a/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ColorMapping.java b/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ColorMapping.java index 0dbc61ed..059701ba 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ColorMapping.java +++ b/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ColorMapping.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.text.TextHelper; import net.querz.mcaselector.version.ColorMapping; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.StringTag; import net.querz.nbt.Tag; @@ -105,12 +105,12 @@ public Anvil115ColorMapping() { @Override public int getRGB(Object o, int biome) { - String name = Helper.stringFromCompound((CompoundTag) o, "Name", ""); + String name = NbtHelper.stringFromCompound((CompoundTag) o, "Name", ""); Object value = mapping.get(name); if (value instanceof Integer) { return applyBiomeTint(name, biome, (int) value); } else if (value instanceof BlockStateMapping) { - int color = ((BlockStateMapping) value).getColor(Helper.tagFromCompound((CompoundTag) o, "Properties")); + int color = ((BlockStateMapping) value).getColor(NbtHelper.tagFromCompound((CompoundTag) o, "Properties")); return applyBiomeTint(name, biome, color); } return 0xFF000000; diff --git a/src/main/java/net/querz/mcaselector/version/anvil116/Anvil116ChunkRelocator.java b/src/main/java/net/querz/mcaselector/version/anvil116/Anvil116ChunkRelocator.java index 3eb24afb..2fb2943a 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil116/Anvil116ChunkRelocator.java +++ b/src/main/java/net/querz/mcaselector/version/anvil116/Anvil116ChunkRelocator.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.point.Point3i; import net.querz.mcaselector.version.ChunkRelocator; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.*; import java.util.Map; import static net.querz.mcaselector.validation.ValidationHelper.silent; @@ -11,7 +11,7 @@ public class Anvil116ChunkRelocator implements ChunkRelocator { @Override public boolean relocate(CompoundTag root, Point3i offset) { - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); if (level == null) { return false; } @@ -21,52 +21,52 @@ public boolean relocate(CompoundTag root, Point3i offset) { level.putInt("zPos", level.getInt("zPos") + offset.blockToChunk().getZ()); // adjust entity positions - ListTag entities = Helper.tagFromCompound(level, "Entities"); + ListTag entities = NbtHelper.tagFromCompound(level, "Entities"); if (entities != null) { entities.forEach(v -> applyOffsetToEntity((CompoundTag) v, offset)); } // adjust tile entity positions - ListTag tileEntities = Helper.tagFromCompound(level, "TileEntities"); + ListTag tileEntities = NbtHelper.tagFromCompound(level, "TileEntities"); if (tileEntities != null) { tileEntities.forEach(v -> applyOffsetToTileEntity((CompoundTag) v, offset)); } // adjust tile ticks - ListTag tileTicks = Helper.tagFromCompound(level, "TileTicks"); + ListTag tileTicks = NbtHelper.tagFromCompound(level, "TileTicks"); if (tileTicks != null) { tileTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust liquid ticks - ListTag liquidTicks = Helper.tagFromCompound(level, "LiquidTicks"); + ListTag liquidTicks = NbtHelper.tagFromCompound(level, "LiquidTicks"); if (liquidTicks != null) { liquidTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust structures - CompoundTag structures = Helper.tagFromCompound(level, "Structures"); + CompoundTag structures = NbtHelper.tagFromCompound(level, "Structures"); if (structures != null) { applyOffsetToStructures(structures, offset); } // Biomes - applyOffsetToBiomes(Helper.tagFromCompound(level, "Biomes"), offset.blockToSection()); + applyOffsetToBiomes(NbtHelper.tagFromCompound(level, "Biomes"), offset.blockToSection()); // Lights - Helper.applyOffsetToListOfShortTagLists(level, "Lights", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "Lights", offset.blockToSection()); // LiquidsToBeTicked - Helper.applyOffsetToListOfShortTagLists(level, "LiquidsToBeTicked", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "LiquidsToBeTicked", offset.blockToSection()); // ToBeTicked - Helper.applyOffsetToListOfShortTagLists(level, "ToBeTicked", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "ToBeTicked", offset.blockToSection()); // PostProcessing - Helper.applyOffsetToListOfShortTagLists(level, "PostProcessing", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "PostProcessing", offset.blockToSection()); // adjust sections vertically - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections != null) { ListTag newSections = new ListTag(); for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { @@ -108,7 +108,7 @@ private void applyOffsetToEntity(CompoundTag entity, Point3i offset) { return; } - ListTag entityPos = Helper.tagFromCompound(entity, "Pos"); + ListTag entityPos = NbtHelper.tagFromCompound(entity, "Pos"); if (entityPos != null && entityPos.size() == 3) { entityPos.set(0, DoubleTag.valueOf(entityPos.getDouble(0) + offset.getX())); entityPos.set(1, DoubleTag.valueOf(entityPos.getDouble(1) + offset.getY())); @@ -116,58 +116,58 @@ private void applyOffsetToEntity(CompoundTag entity, Point3i offset) { } // leashed entities - CompoundTag leash = Helper.tagFromCompound(entity, "Leash"); - Helper.applyIntOffsetIfRootPresent(leash, "X", "Y", "Z", offset); + CompoundTag leash = NbtHelper.tagFromCompound(entity, "Leash"); + NbtHelper.applyIntOffsetIfRootPresent(leash, "X", "Y", "Z", offset); // projectiles - Helper.applyIntOffsetIfRootPresent(entity, "xTile", "yTile", "zTile", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "xTile", "yTile", "zTile", offset); // entities that have a sleeping place - Helper.applyIntOffsetIfRootPresent(entity, "SleepingX", "SleepingY", "SleepingZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "SleepingX", "SleepingY", "SleepingZ", offset); // positions for specific entity types - String id = Helper.stringFromCompound(entity, "id", ""); + String id = NbtHelper.stringFromCompound(entity, "id", ""); switch (id) { case "minecraft:dolphin": - Helper.applyIntOffsetIfRootPresent(entity, "TreasurePosX", "TreasurePosY", "TreasurePosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TreasurePosX", "TreasurePosY", "TreasurePosZ", offset); break; case "minecraft:phantom": - Helper.applyIntOffsetIfRootPresent(entity, "AX", "AY", "AZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "AX", "AY", "AZ", offset); break; case "minecraft:shulker": - Helper.applyIntOffsetIfRootPresent(entity, "APX", "APY", "APZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "APX", "APY", "APZ", offset); break; case "minecraft:turtle": - Helper.applyIntOffsetIfRootPresent(entity, "HomePosX", "HomePosY", "HomePosZ", offset); - Helper.applyIntOffsetIfRootPresent(entity, "TravelPosX", "TravelPosY", "TravelPosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "HomePosX", "HomePosY", "HomePosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TravelPosX", "TravelPosY", "TravelPosZ", offset); break; case "minecraft:vex": - Helper.applyIntOffsetIfRootPresent(entity, "BoundX", "BoundY", "BoundZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "BoundX", "BoundY", "BoundZ", offset); break; case "minecraft:wandering_trader": - CompoundTag wanderTarget = Helper.tagFromCompound(entity, "WanderTarget"); - Helper.applyIntOffsetIfRootPresent(wanderTarget, "X", "Y", "Z", offset); + CompoundTag wanderTarget = NbtHelper.tagFromCompound(entity, "WanderTarget"); + NbtHelper.applyIntOffsetIfRootPresent(wanderTarget, "X", "Y", "Z", offset); break; case "minecraft:shulker_bullet": - CompoundTag owner = Helper.tagFromCompound(entity, "Owner"); - Helper.applyIntOffsetIfRootPresent(owner, "X", "Y", "Z", offset); - CompoundTag target = Helper.tagFromCompound(entity, "Target"); - Helper.applyIntOffsetIfRootPresent(target, "X", "Y", "Z", offset); + CompoundTag owner = NbtHelper.tagFromCompound(entity, "Owner"); + NbtHelper.applyIntOffsetIfRootPresent(owner, "X", "Y", "Z", offset); + CompoundTag target = NbtHelper.tagFromCompound(entity, "Target"); + NbtHelper.applyIntOffsetIfRootPresent(target, "X", "Y", "Z", offset); break; case "minecraft:end_crystal": - CompoundTag beamTarget = Helper.tagFromCompound(entity, "BeamTarget"); - Helper.applyIntOffsetIfRootPresent(beamTarget, "X", "Y", "Z", offset); + CompoundTag beamTarget = NbtHelper.tagFromCompound(entity, "BeamTarget"); + NbtHelper.applyIntOffsetIfRootPresent(beamTarget, "X", "Y", "Z", offset); break; case "minecraft:item_frame": case "minecraft:painting": - Helper.applyIntOffsetIfRootPresent(entity, "TileX", "TileY", "TileZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TileX", "TileY", "TileZ", offset); break; case "minecraft:villager": - CompoundTag memories = Helper.tagFromCompound(Helper.tagFromCompound(entity, "Brain"), "memories"); + CompoundTag memories = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(entity, "Brain"), "memories"); if (memories != null && memories.size() > 0) { - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:meeting_point"), offset); - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:home"), offset); - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:job_site"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:meeting_point"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:home"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:job_site"), offset); } break; case "minecraft:pillager": @@ -176,47 +176,47 @@ private void applyOffsetToEntity(CompoundTag entity, Point3i offset) { case "minecraft:ravager": case "minecraft:illusioner": case "minecraft:evoker": - CompoundTag patrolTarget = Helper.tagFromCompound(entity, "PatrolTarget"); - Helper.applyIntOffsetIfRootPresent(patrolTarget, "X", "Y", "Z", offset); + CompoundTag patrolTarget = NbtHelper.tagFromCompound(entity, "PatrolTarget"); + NbtHelper.applyIntOffsetIfRootPresent(patrolTarget, "X", "Y", "Z", offset); break; case "minecraft:falling_block": - CompoundTag tileEntityData = Helper.tagFromCompound(entity, "TileEntityData"); + CompoundTag tileEntityData = NbtHelper.tagFromCompound(entity, "TileEntityData"); applyOffsetToTileEntity(tileEntityData, offset); } // recursively update passengers - ListTag passengers = Helper.tagFromCompound(entity, "Passengers"); + ListTag passengers = NbtHelper.tagFromCompound(entity, "Passengers"); if (passengers != null) { passengers.forEach(p -> applyOffsetToEntity((CompoundTag) p, offset)); } - CompoundTag item = Helper.tagFromCompound(entity, "Item"); + CompoundTag item = NbtHelper.tagFromCompound(entity, "Item"); applyOffsetToItem(item, offset); - ListTag items = Helper.tagFromCompound(entity, "Items"); + ListTag items = NbtHelper.tagFromCompound(entity, "Items"); if (items != null) { items.forEach(i -> applyOffsetToItem((CompoundTag) i, offset)); } - ListTag handItems = Helper.tagFromCompound(entity, "HandItems"); + ListTag handItems = NbtHelper.tagFromCompound(entity, "HandItems"); if (handItems != null) { handItems.forEach(i -> applyOffsetToItem((CompoundTag) i, offset)); } - ListTag armorItems = Helper.tagFromCompound(entity, "ArmorItems"); + ListTag armorItems = NbtHelper.tagFromCompound(entity, "ArmorItems"); if (armorItems != null) { armorItems.forEach(i -> applyOffsetToItem((CompoundTag) i, offset)); } - Helper.fixEntityUUID(entity); + NbtHelper.fixEntityUUID(entity); } private void applyOffsetToVillagerMemory(CompoundTag memory, Point3i offset) { - IntArrayTag mPos = Helper.tagFromCompound(memory, "pos"); - Helper.applyOffsetToIntArrayPos(mPos, offset); + IntArrayTag mPos = NbtHelper.tagFromCompound(memory, "pos"); + NbtHelper.applyOffsetToIntArrayPos(mPos, offset); if (mPos == null) { - ListTag lPos = Helper.tagFromCompound(memory, "pos"); - Helper.applyOffsetToIntListPos(lPos, offset); + ListTag lPos = NbtHelper.tagFromCompound(memory, "pos"); + NbtHelper.applyOffsetToIntListPos(lPos, offset); } } @@ -224,7 +224,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / Point3i chunkOffset = offset.blockToChunk(); // update references - CompoundTag references = Helper.tagFromCompound(structures, "References"); + CompoundTag references = NbtHelper.tagFromCompound(structures, "References"); if (references != null) { for (Map.Entry entry : references) { long[] reference = silent(() -> ((LongArrayTag) entry.getValue()).getValue(), null); @@ -239,41 +239,41 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / } // update starts - CompoundTag starts = Helper.tagFromCompound(structures, "Starts"); + CompoundTag starts = NbtHelper.tagFromCompound(structures, "Starts"); if (starts != null) { for (Map.Entry entry : starts) { CompoundTag structure = silent(() -> (CompoundTag) entry.getValue(), null); - if ("INVALID".equals(Helper.stringFromCompound(structure, "id"))) { + if ("INVALID".equals(NbtHelper.stringFromCompound(structure, "id"))) { continue; } - Helper.applyIntIfPresent(structure, "ChunkX", chunkOffset.getX()); - Helper.applyIntIfPresent(structure, "ChunkZ", chunkOffset.getZ()); - Helper.applyOffsetToBB(Helper.intArrayFromCompound(structure, "BB"), offset); + NbtHelper.applyIntIfPresent(structure, "ChunkX", chunkOffset.getX()); + NbtHelper.applyIntIfPresent(structure, "ChunkZ", chunkOffset.getZ()); + NbtHelper.applyOffsetToBB(NbtHelper.intArrayFromCompound(structure, "BB"), offset); - ListTag processed = Helper.tagFromCompound(structure, "Processed"); + ListTag processed = NbtHelper.tagFromCompound(structure, "Processed"); if (processed != null) { for (CompoundTag chunk : processed.iterateType(CompoundTag.TYPE)) { - Helper.applyIntIfPresent(chunk, "X", chunkOffset.getX()); - Helper.applyIntIfPresent(chunk, "Z", chunkOffset.getZ()); + NbtHelper.applyIntIfPresent(chunk, "X", chunkOffset.getX()); + NbtHelper.applyIntIfPresent(chunk, "Z", chunkOffset.getZ()); } } - ListTag children = Helper.tagFromCompound(structure, "Children"); + ListTag children = NbtHelper.tagFromCompound(structure, "Children"); if (children != null) { for (CompoundTag child : children.iterateType(CompoundTag.TYPE)) { - Helper.applyIntOffsetIfRootPresent(child, "TPX", "TPY", "TPZ", offset); - Helper.applyIntOffsetIfRootPresent(child, "PosX", "PosY", "PosZ", offset); - Helper.applyOffsetToBB(Helper.intArrayFromCompound(child, "BB"), offset); + NbtHelper.applyIntOffsetIfRootPresent(child, "TPX", "TPY", "TPZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(child, "PosX", "PosY", "PosZ", offset); + NbtHelper.applyOffsetToBB(NbtHelper.intArrayFromCompound(child, "BB"), offset); - ListTag entrances = Helper.tagFromCompound(child, "Entrances"); + ListTag entrances = NbtHelper.tagFromCompound(child, "Entrances"); if (entrances != null) { - entrances.forEach(e -> Helper.applyOffsetToBB(((IntArrayTag) e).getValue(), offset)); + entrances.forEach(e -> NbtHelper.applyOffsetToBB(((IntArrayTag) e).getValue(), offset)); } - ListTag junctions = Helper.tagFromCompound(child, "junctions"); + ListTag junctions = NbtHelper.tagFromCompound(child, "junctions"); if (junctions != null) { for (CompoundTag junction : junctions.iterateType(CompoundTag.TYPE)) { - Helper.applyIntOffsetIfRootPresent(junction, "source_x", "source_y", "source_z", offset); + NbtHelper.applyIntOffsetIfRootPresent(junction, "source_x", "source_y", "source_z", offset); } } } @@ -283,7 +283,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / } private void applyOffsetToTick(CompoundTag tick, Point3i offset) { - Helper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); } private void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { @@ -291,47 +291,47 @@ private void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { return; } - Helper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); - String id = Helper.stringFromCompound(tileEntity, "id", ""); + String id = NbtHelper.stringFromCompound(tileEntity, "id", ""); switch (id) { case "minecraft:bee_nest": case "minecraft:beehive": - CompoundTag flowerPos = Helper.tagFromCompound(tileEntity, "FlowerPos"); - Helper.applyIntOffsetIfRootPresent(flowerPos, "X", "Y", "Z", offset); - ListTag bees = Helper.tagFromCompound(tileEntity, "Bees"); + CompoundTag flowerPos = NbtHelper.tagFromCompound(tileEntity, "FlowerPos"); + NbtHelper.applyIntOffsetIfRootPresent(flowerPos, "X", "Y", "Z", offset); + ListTag bees = NbtHelper.tagFromCompound(tileEntity, "Bees"); if (bees != null) { for (CompoundTag bee : bees.iterateType(CompoundTag.TYPE)) { - applyOffsetToEntity(Helper.tagFromCompound(bee, "EntityData"), offset); + applyOffsetToEntity(NbtHelper.tagFromCompound(bee, "EntityData"), offset); } } break; case "minecraft:end_gateway": - CompoundTag exitPortal = Helper.tagFromCompound(tileEntity, "ExitPortal"); - Helper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); + CompoundTag exitPortal = NbtHelper.tagFromCompound(tileEntity, "ExitPortal"); + NbtHelper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); break; case "minecraft:structure_block": - Helper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); break; case "minecraft:jukebox": - CompoundTag recordItem = Helper.tagFromCompound(tileEntity, "RecordItem"); + CompoundTag recordItem = NbtHelper.tagFromCompound(tileEntity, "RecordItem"); applyOffsetToItem(recordItem, offset); break; case "minecraft:lectern": // 1.14 - CompoundTag book = Helper.tagFromCompound(tileEntity, "Book"); + CompoundTag book = NbtHelper.tagFromCompound(tileEntity, "Book"); applyOffsetToItem(book, offset); break; case "minecraft:mob_spawner": - ListTag spawnPotentials = Helper.tagFromCompound(tileEntity, "SpawnPotentials"); + ListTag spawnPotentials = NbtHelper.tagFromCompound(tileEntity, "SpawnPotentials"); if (spawnPotentials != null) { for (CompoundTag spawnPotential : spawnPotentials.iterateType(CompoundTag.TYPE)) { - CompoundTag entity = Helper.tagFromCompound(spawnPotential, "Entity"); + CompoundTag entity = NbtHelper.tagFromCompound(spawnPotential, "Entity"); applyOffsetToEntity(entity, offset); } } } - ListTag items = Helper.tagFromCompound(tileEntity, "Items"); + ListTag items = NbtHelper.tagFromCompound(tileEntity, "Items"); if (items != null) { items.forEach(i -> applyOffsetToItem((CompoundTag) i, offset)); } @@ -342,22 +342,22 @@ private void applyOffsetToItem(CompoundTag item, Point3i offset) { return; } - CompoundTag tag = Helper.tagFromCompound(item, "tag"); + CompoundTag tag = NbtHelper.tagFromCompound(item, "tag"); if (tag == null) { return; } - String id = Helper.stringFromCompound(item, "id", ""); + String id = NbtHelper.stringFromCompound(item, "id", ""); switch (id) { case "minecraft:compass": - CompoundTag lodestonePos = Helper.tagFromCompound(tag, "LodestonePos"); - Helper.applyIntOffsetIfRootPresent(lodestonePos, "X", "Y", "Z", offset); + CompoundTag lodestonePos = NbtHelper.tagFromCompound(tag, "LodestonePos"); + NbtHelper.applyIntOffsetIfRootPresent(lodestonePos, "X", "Y", "Z", offset); break; } // recursively update all items in child containers - CompoundTag blockEntityTag = Helper.tagFromCompound(tag, "BlockEntityTag"); - ListTag items = Helper.tagFromCompound(blockEntityTag, "Items"); + CompoundTag blockEntityTag = NbtHelper.tagFromCompound(tag, "BlockEntityTag"); + ListTag items = NbtHelper.tagFromCompound(blockEntityTag, "Items"); if (items != null) { items.forEach(i -> applyOffsetToItem((CompoundTag) i, offset)); } diff --git a/src/main/java/net/querz/mcaselector/version/anvil116/Anvil116ChunkRenderer.java b/src/main/java/net/querz/mcaselector/version/anvil116/Anvil116ChunkRenderer.java index 381cd97a..e513b41f 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil116/Anvil116ChunkRenderer.java +++ b/src/main/java/net/querz/mcaselector/version/anvil116/Anvil116ChunkRenderer.java @@ -4,7 +4,7 @@ import net.querz.mcaselector.tile.Tile; import net.querz.mcaselector.version.ChunkRenderer; import net.querz.mcaselector.version.ColorMapping; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; @@ -12,28 +12,28 @@ public class Anvil116ChunkRenderer implements ChunkRenderer { @Override public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, int[] waterPixels, short[] terrainHeights, short[] waterHeights, boolean water, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); height = MathUtil.clamp(height, 0, 255); ListTag[] palettes = new ListTag[16]; long[][] blockStatesArray = new long[16][]; sections.forEach(s -> { - ListTag p = Helper.tagFromCompound(s, "Palette"); - long[] b = Helper.longArrayFromCompound(s, "BlockStates"); - int y = Helper.numberFromCompound(s, "Y", -1).intValue(); + ListTag p = NbtHelper.tagFromCompound(s, "Palette"); + long[] b = NbtHelper.longArrayFromCompound(s, "BlockStates"); + int y = NbtHelper.numberFromCompound(s, "Y", -1).intValue(); if (y >= 0 && y <= 15 && p != null && b != null) { palettes[y] = p; blockStatesArray[y] = b; } }); - int[] biomes = Helper.intArrayFromCompound(level, "Biomes"); + int[] biomes = NbtHelper.intArrayFromCompound(level, "Biomes"); for (int cx = 0; cx < Tile.CHUNK_SIZE; cx += scale) { zLoop: @@ -103,18 +103,18 @@ public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); height = MathUtil.clamp(height, 0, 255); CompoundTag section = null; for (CompoundTag s : sections.iterateType(CompoundTag.TYPE)) { - int y = Helper.numberFromCompound(s, "Y", -1).intValue(); + int y = NbtHelper.numberFromCompound(s, "Y", -1).intValue(); if (y == height >> 4) { section = s; break; @@ -124,13 +124,13 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, return; } - ListTag palette = Helper.tagFromCompound(section, "Palette"); - long[] blockStates = Helper.longArrayFromCompound(section, "BlockStates"); + ListTag palette = NbtHelper.tagFromCompound(section, "Palette"); + long[] blockStates = NbtHelper.longArrayFromCompound(section, "BlockStates"); if (blockStates == null || palette == null) { return; } - int[] biomes = Helper.intArrayFromCompound(level, "Biomes"); + int[] biomes = NbtHelper.intArrayFromCompound(level, "Biomes"); int cy = height % 16; int bits = blockStates.length >> 6; @@ -156,28 +156,28 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, short[] terrainHeights, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); height = MathUtil.clamp(height, 0, 255); ListTag[] palettes = new ListTag[16]; long[][] blockStatesArray = new long[16][]; sections.forEach(s -> { - ListTag p = Helper.tagFromCompound(s, "Palette"); - long[] b = Helper.longArrayFromCompound(s, "BlockStates"); - int y = Helper.numberFromCompound(s, "Y", -1).intValue(); + ListTag p = NbtHelper.tagFromCompound(s, "Palette"); + long[] b = NbtHelper.longArrayFromCompound(s, "BlockStates"); + int y = NbtHelper.numberFromCompound(s, "Y", -1).intValue(); if (y >= 0 && y <= 15 && p != null && b != null) { palettes[y] = p; blockStatesArray[y] = b; } }); - int[] biomes = Helper.intArrayFromCompound(level, "Biomes"); + int[] biomes = NbtHelper.intArrayFromCompound(level, "Biomes"); for (int cx = 0; cx < Tile.CHUNK_SIZE; cx += scale) { zLoop: @@ -249,18 +249,18 @@ public CompoundTag minimizeChunk(CompoundTag root) { } private boolean isWater(CompoundTag blockData) { - return switch (Helper.stringFromCompound(blockData, "Name", "")) { + return switch (NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:water", "minecraft:bubble_column" -> true; default -> false; }; } private boolean isWaterlogged(CompoundTag data) { - return data.get("Properties") != null && "true".equals(Helper.stringFromCompound(Helper.tagFromCompound(data, "Properties"), "waterlogged", null)); + return data.get("Properties") != null && "true".equals(NbtHelper.stringFromCompound(NbtHelper.tagFromCompound(data, "Properties"), "waterlogged", null)); } private boolean isEmpty(CompoundTag blockData) { - return switch (Helper.stringFromCompound(blockData, "Name", "")) { + return switch (NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:air", "minecraft:cave_air", "minecraft:barrier", "minecraft:structure_void" -> blockData.size() == 1; default -> false; }; @@ -268,7 +268,7 @@ private boolean isEmpty(CompoundTag blockData) { private boolean isEmptyOrFoliage(CompoundTag blockData, ColorMapping colorMapping) { String name; - return switch (name = Helper.stringFromCompound(blockData, "Name", "")) { + return switch (name = NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:air", "minecraft:cave_air", "minecraft:barrier", "minecraft:structure_void", "minecraft:snow" -> blockData.size() == 1; default -> colorMapping.isFoliage(name); }; diff --git a/src/main/java/net/querz/mcaselector/version/anvil116/Anvil116ColorMapping.java b/src/main/java/net/querz/mcaselector/version/anvil116/Anvil116ColorMapping.java index 6962646c..c4b656d6 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil116/Anvil116ColorMapping.java +++ b/src/main/java/net/querz/mcaselector/version/anvil116/Anvil116ColorMapping.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.text.TextHelper; import net.querz.mcaselector.version.ColorMapping; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.StringTag; import net.querz.nbt.Tag; @@ -105,12 +105,12 @@ public Anvil116ColorMapping() { @Override public int getRGB(Object o, int biome) { - String name = Helper.stringFromCompound((CompoundTag) o, "Name", ""); + String name = NbtHelper.stringFromCompound((CompoundTag) o, "Name", ""); Object value = mapping.get(name); if (value instanceof Integer) { return applyBiomeTint(name, biome, (int) value); } else if (value instanceof BlockStateMapping) { - int color = ((BlockStateMapping) value).getColor(Helper.tagFromCompound((CompoundTag) o, "Properties")); + int color = ((BlockStateMapping) value).getColor(NbtHelper.tagFromCompound((CompoundTag) o, "Properties")); return applyBiomeTint(name, biome, color); } return 0xFF000000; diff --git a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkFilter.java b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkFilter.java index 4c3b4fef..ac744de9 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkFilter.java +++ b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkFilter.java @@ -1,7 +1,7 @@ package net.querz.mcaselector.version.anvil117; import net.querz.mcaselector.io.registry.BiomeRegistry; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.mcaselector.version.anvil116.Anvil116ChunkFilter; import net.querz.nbt.CompoundTag; import java.util.Arrays; @@ -10,9 +10,9 @@ public class Anvil117ChunkFilter extends Anvil116ChunkFilter { @Override public void forceBiome(CompoundTag data, BiomeRegistry.BiomeIdentifier biome) { - CompoundTag level = Helper.levelFromRoot(data); + CompoundTag level = NbtHelper.levelFromRoot(data); if (level != null) { - int[] biomes = Helper.intArrayFromCompound(level, "Biomes"); + int[] biomes = NbtHelper.intArrayFromCompound(level, "Biomes"); if (biomes != null && (biomes.length == 1024 || biomes.length == 1536)) { biomes = new int[biomes.length]; } else { diff --git a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkMerger.java index 5d41c5df..bf56b85f 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkMerger.java @@ -3,7 +3,7 @@ import net.querz.mcaselector.point.Point2i; import net.querz.mcaselector.range.Range; import net.querz.mcaselector.version.ChunkMerger; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; import net.querz.nbt.Tag; @@ -26,17 +26,17 @@ public void mergeChunks(CompoundTag source, CompoundTag destination, List } private void mergeStructures(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - CompoundTag sourceStarts = Helper.tagFromCompound(Helper.tagFromLevelFromRoot(source, "Structures", new CompoundTag()), "Starts", new CompoundTag()); - CompoundTag destinationStarts = Helper.tagFromCompound(Helper.tagFromLevelFromRoot(destination, "Structures", new CompoundTag()), "Starts", new CompoundTag()); + CompoundTag sourceStarts = NbtHelper.tagFromCompound(NbtHelper.tagFromLevelFromRoot(source, "Structures", new CompoundTag()), "Starts", new CompoundTag()); + CompoundTag destinationStarts = NbtHelper.tagFromCompound(NbtHelper.tagFromLevelFromRoot(destination, "Structures", new CompoundTag()), "Starts", new CompoundTag()); if (destinationStarts.size() != 0) { // remove BBs from destination for (Map.Entry start : destinationStarts) { - ListTag children = Helper.tagFromCompound(start.getValue(), "Children", null); + ListTag children = NbtHelper.tagFromCompound(start.getValue(), "Children", null); if (children != null) { child: for (int i = 0; i < children.size(); i++) { CompoundTag child = children.getCompound(i); - int[] bb = Helper.intArrayFromCompound(child, "BB"); + int[] bb = NbtHelper.intArrayFromCompound(child, "BB"); if (bb != null && bb.length == 6) { for (Range range : ranges) { if (range.contains(bb[1] >> 4 - yOffset) && range.contains(bb[4] >> 4 - yOffset)) { @@ -51,7 +51,7 @@ private void mergeStructures(CompoundTag source, CompoundTag destination, List> 4 - yOffset) && range.contains(bb[4] >> 4 - yOffset)) { @@ -69,30 +69,30 @@ private void mergeStructures(CompoundTag source, CompoundTag destination, List start : sourceStarts) { - ListTag children = Helper.tagFromCompound(start.getValue(), "Children", null); + ListTag children = NbtHelper.tagFromCompound(start.getValue(), "Children", null); if (children != null) { child: for (int i = 0; i < children.size(); i++) { CompoundTag child = children.getCompound(i); - int[] bb = Helper.intArrayFromCompound(child, "BB"); + int[] bb = NbtHelper.intArrayFromCompound(child, "BB"); if (bb == null) { continue; } for (Range range : ranges) { if (range.contains(bb[1] >> 4 - yOffset) || range.contains(bb[4] >> 4 - yOffset)) { - CompoundTag destinationStart = Helper.tagFromCompound(destinationStarts, start.getKey(), null); + CompoundTag destinationStart = NbtHelper.tagFromCompound(destinationStarts, start.getKey(), null); if (destinationStart == null || "INVALID".equals(destinationStart.getString("id"))) { destinationStart = ((CompoundTag) start.getValue()).copy(); // we need to remove the children, we don't want all of them - ListTag clonedDestinationChildren = Helper.tagFromCompound(destinationStart, "Children", null); + ListTag clonedDestinationChildren = NbtHelper.tagFromCompound(destinationStart, "Children", null); if (clonedDestinationChildren != null) { clonedDestinationChildren.clear(); } destinationStarts.put(start.getKey(), destinationStart); } - ListTag destinationChildren = Helper.tagFromCompound(destinationStarts.get(start.getKey()), "Children", null); + ListTag destinationChildren = NbtHelper.tagFromCompound(destinationStarts.get(start.getKey()), "Children", null); if (destinationChildren == null) { destinationChildren = new ListTag(); destinationStart.put("Children", destinationChildren); diff --git a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkRelocator.java b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkRelocator.java index cfe75360..2422f95e 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkRelocator.java +++ b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkRelocator.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.point.Point3i; import net.querz.mcaselector.version.ChunkRelocator; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.*; import java.util.Map; import static net.querz.mcaselector.validation.ValidationHelper.silent; @@ -12,7 +12,7 @@ public class Anvil117ChunkRelocator implements ChunkRelocator { @Override public boolean relocate(CompoundTag root, Point3i offset) { - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); if (level == null) { return false; } @@ -22,46 +22,46 @@ public boolean relocate(CompoundTag root, Point3i offset) { level.putInt("zPos", level.getInt("zPos") + offset.blockToChunk().getZ()); // adjust tile entity positions - ListTag tileEntities = Helper.tagFromCompound(level, "TileEntities"); + ListTag tileEntities = NbtHelper.tagFromCompound(level, "TileEntities"); if (tileEntities != null) { tileEntities.forEach(v -> applyOffsetToTileEntity((CompoundTag) v, offset)); } // adjust tile ticks - ListTag tileTicks = Helper.tagFromCompound(level, "TileTicks"); + ListTag tileTicks = NbtHelper.tagFromCompound(level, "TileTicks"); if (tileTicks != null) { tileTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust liquid ticks - ListTag liquidTicks = Helper.tagFromCompound(level, "LiquidTicks"); + ListTag liquidTicks = NbtHelper.tagFromCompound(level, "LiquidTicks"); if (liquidTicks != null) { liquidTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust structures - CompoundTag structures = Helper.tagFromCompound(level, "Structures"); + CompoundTag structures = NbtHelper.tagFromCompound(level, "Structures"); if (structures != null) { applyOffsetToStructures(structures, offset); } // Biomes - applyOffsetToBiomes(Helper.tagFromCompound(level, "Biomes"), offset.blockToSection()); + applyOffsetToBiomes(NbtHelper.tagFromCompound(level, "Biomes"), offset.blockToSection()); // Lights - Helper.applyOffsetToListOfShortTagLists(level, "Lights", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "Lights", offset.blockToSection()); // LiquidsToBeTicked - Helper.applyOffsetToListOfShortTagLists(level, "LiquidsToBeTicked", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "LiquidsToBeTicked", offset.blockToSection()); // ToBeTicked - Helper.applyOffsetToListOfShortTagLists(level, "ToBeTicked", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "ToBeTicked", offset.blockToSection()); // PostProcessing - Helper.applyOffsetToListOfShortTagLists(level, "PostProcessing", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(level, "PostProcessing", offset.blockToSection()); // adjust sections vertically - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections != null) { ListTag newSections = new ListTag(); for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { @@ -103,7 +103,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / Point3i chunkOffset = offset.blockToChunk(); // update references - CompoundTag references = Helper.tagFromCompound(structures, "References"); + CompoundTag references = NbtHelper.tagFromCompound(structures, "References"); if (references != null) { for (Map.Entry entry : references) { long[] reference = silent(() -> ((LongArrayTag) entry.getValue()).getValue(), null); @@ -118,41 +118,41 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / } // update starts - CompoundTag starts = Helper.tagFromCompound(structures, "Starts"); + CompoundTag starts = NbtHelper.tagFromCompound(structures, "Starts"); if (starts != null) { for (Map.Entry entry : starts) { CompoundTag structure = silent(() -> (CompoundTag) entry.getValue(), null); - if ("INVALID".equals(Helper.stringFromCompound(structure, "id"))) { + if ("INVALID".equals(NbtHelper.stringFromCompound(structure, "id"))) { continue; } - Helper.applyIntIfPresent(structure, "ChunkX", chunkOffset.getX()); - Helper.applyIntIfPresent(structure, "ChunkZ", chunkOffset.getZ()); - Helper.applyOffsetToBB(Helper.intArrayFromCompound(structure, "BB"), offset); + NbtHelper.applyIntIfPresent(structure, "ChunkX", chunkOffset.getX()); + NbtHelper.applyIntIfPresent(structure, "ChunkZ", chunkOffset.getZ()); + NbtHelper.applyOffsetToBB(NbtHelper.intArrayFromCompound(structure, "BB"), offset); - ListTag processed = Helper.tagFromCompound(structure, "Processed"); + ListTag processed = NbtHelper.tagFromCompound(structure, "Processed"); if (processed != null) { for (CompoundTag chunk : processed.iterateType(CompoundTag.TYPE)) { - Helper.applyIntIfPresent(chunk, "X", chunkOffset.getX()); - Helper.applyIntIfPresent(chunk, "Z", chunkOffset.getZ()); + NbtHelper.applyIntIfPresent(chunk, "X", chunkOffset.getX()); + NbtHelper.applyIntIfPresent(chunk, "Z", chunkOffset.getZ()); } } - ListTag children = Helper.tagFromCompound(structure, "Children"); + ListTag children = NbtHelper.tagFromCompound(structure, "Children"); if (children != null) { for (CompoundTag child : children.iterateType(CompoundTag.TYPE)) { - Helper.applyIntOffsetIfRootPresent(child, "TPX", "TPY", "TPZ", offset); - Helper.applyIntOffsetIfRootPresent(child, "PosX", "PosY", "PosZ", offset); - Helper.applyOffsetToBB(Helper.intArrayFromCompound(child, "BB"), offset); + NbtHelper.applyIntOffsetIfRootPresent(child, "TPX", "TPY", "TPZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(child, "PosX", "PosY", "PosZ", offset); + NbtHelper.applyOffsetToBB(NbtHelper.intArrayFromCompound(child, "BB"), offset); - ListTag entrances = Helper.tagFromCompound(child, "Entrances"); + ListTag entrances = NbtHelper.tagFromCompound(child, "Entrances"); if (entrances != null) { - entrances.forEach(e -> Helper.applyOffsetToBB(((IntArrayTag) e).getValue(), offset)); + entrances.forEach(e -> NbtHelper.applyOffsetToBB(((IntArrayTag) e).getValue(), offset)); } - ListTag junctions = Helper.tagFromCompound(child, "junctions"); + ListTag junctions = NbtHelper.tagFromCompound(child, "junctions"); if (junctions != null) { for (CompoundTag junction : junctions.iterateType(CompoundTag.TYPE)) { - Helper.applyIntOffsetIfRootPresent(junction, "source_x", "source_y", "source_z", offset); + NbtHelper.applyIntOffsetIfRootPresent(junction, "source_x", "source_y", "source_z", offset); } } } @@ -162,7 +162,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / } private void applyOffsetToTick(CompoundTag tick, Point3i offset) { - Helper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); } static void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { @@ -170,47 +170,47 @@ static void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { return; } - Helper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); - String id = Helper.stringFromCompound(tileEntity, "id", ""); + String id = NbtHelper.stringFromCompound(tileEntity, "id", ""); switch (id) { case "minecraft:bee_nest": case "minecraft:beehive": - CompoundTag flowerPos = Helper.tagFromCompound(tileEntity, "FlowerPos"); - Helper.applyIntOffsetIfRootPresent(flowerPos, "X", "Y", "Z", offset); - ListTag bees = Helper.tagFromCompound(tileEntity, "Bees"); + CompoundTag flowerPos = NbtHelper.tagFromCompound(tileEntity, "FlowerPos"); + NbtHelper.applyIntOffsetIfRootPresent(flowerPos, "X", "Y", "Z", offset); + ListTag bees = NbtHelper.tagFromCompound(tileEntity, "Bees"); if (bees != null) { for (CompoundTag bee : bees.iterateType(CompoundTag.TYPE)) { - applyOffsetToEntity(Helper.tagFromCompound(bee, "EntityData"), offset); + applyOffsetToEntity(NbtHelper.tagFromCompound(bee, "EntityData"), offset); } } break; case "minecraft:end_gateway": - CompoundTag exitPortal = Helper.tagFromCompound(tileEntity, "ExitPortal"); - Helper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); + CompoundTag exitPortal = NbtHelper.tagFromCompound(tileEntity, "ExitPortal"); + NbtHelper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); break; case "minecraft:structure_block": - Helper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); break; case "minecraft:jukebox": - CompoundTag recordItem = Helper.tagFromCompound(tileEntity, "RecordItem"); + CompoundTag recordItem = NbtHelper.tagFromCompound(tileEntity, "RecordItem"); applyOffsetToItem(recordItem, offset); break; case "minecraft:lectern": // 1.14 - CompoundTag book = Helper.tagFromCompound(tileEntity, "Book"); + CompoundTag book = NbtHelper.tagFromCompound(tileEntity, "Book"); applyOffsetToItem(book, offset); break; case "minecraft:mob_spawner": - ListTag spawnPotentials = Helper.tagFromCompound(tileEntity, "SpawnPotentials"); + ListTag spawnPotentials = NbtHelper.tagFromCompound(tileEntity, "SpawnPotentials"); if (spawnPotentials != null) { for (CompoundTag spawnPotential : spawnPotentials.iterateType(CompoundTag.TYPE)) { - CompoundTag entity = Helper.tagFromCompound(spawnPotential, "Entity"); + CompoundTag entity = NbtHelper.tagFromCompound(spawnPotential, "Entity"); applyOffsetToEntity(entity, offset); } } } - ListTag items = Helper.tagFromCompound(tileEntity, "Items"); + ListTag items = NbtHelper.tagFromCompound(tileEntity, "Items"); if (items != null) { items.forEach(i -> applyOffsetToItem((CompoundTag) i, offset)); } @@ -221,22 +221,22 @@ static void applyOffsetToItem(CompoundTag item, Point3i offset) { return; } - CompoundTag tag = Helper.tagFromCompound(item, "tag"); + CompoundTag tag = NbtHelper.tagFromCompound(item, "tag"); if (tag == null) { return; } - String id = Helper.stringFromCompound(item, "id", ""); + String id = NbtHelper.stringFromCompound(item, "id", ""); switch (id) { case "minecraft:compass": - CompoundTag lodestonePos = Helper.tagFromCompound(tag, "LodestonePos"); - Helper.applyIntOffsetIfRootPresent(lodestonePos, "X", "Y", "Z", offset); + CompoundTag lodestonePos = NbtHelper.tagFromCompound(tag, "LodestonePos"); + NbtHelper.applyIntOffsetIfRootPresent(lodestonePos, "X", "Y", "Z", offset); break; } // recursively update all items in child containers - CompoundTag blockEntityTag = Helper.tagFromCompound(tag, "BlockEntityTag"); - ListTag items = Helper.tagFromCompound(blockEntityTag, "Items"); + CompoundTag blockEntityTag = NbtHelper.tagFromCompound(tag, "BlockEntityTag"); + ListTag items = NbtHelper.tagFromCompound(blockEntityTag, "Items"); if (items != null) { items.forEach(i -> applyOffsetToItem((CompoundTag) i, offset)); } diff --git a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkRenderer.java b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkRenderer.java index c1373737..3eec7e7b 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkRenderer.java +++ b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkRenderer.java @@ -4,7 +4,7 @@ import net.querz.mcaselector.tile.Tile; import net.querz.mcaselector.version.ChunkRenderer; import net.querz.mcaselector.version.ColorMapping; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; @@ -12,28 +12,28 @@ public class Anvil117ChunkRenderer implements ChunkRenderer { @Override public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, int[] waterPixels, short[] terrainHeights, short[] waterHeights, boolean water, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); int absHeight = height + 64; ListTag[] palettes = new ListTag[24]; long[][] blockStatesArray = new long[24][]; sections.forEach(s -> { - ListTag p = Helper.tagFromCompound(s, "Palette"); - long[] b = Helper.longArrayFromCompound(s, "BlockStates"); - int y = Helper.numberFromCompound(s, "Y", -5).intValue(); + ListTag p = NbtHelper.tagFromCompound(s, "Palette"); + long[] b = NbtHelper.longArrayFromCompound(s, "BlockStates"); + int y = NbtHelper.numberFromCompound(s, "Y", -5).intValue(); if (y >= -4 && y <= 19 && p != null && b != null) { palettes[y + 4] = p; blockStatesArray[y + 4] = b; } }); - int[] biomes = Helper.intArrayFromCompound(level, "Biomes"); + int[] biomes = NbtHelper.intArrayFromCompound(level, "Biomes"); for (int cx = 0; cx < Tile.CHUNK_SIZE; cx += scale) { zLoop: @@ -103,16 +103,16 @@ public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); CompoundTag section = null; for (CompoundTag s : sections.iterateType(CompoundTag.TYPE)) { - int y = Helper.numberFromCompound(s, "Y", -5).intValue(); + int y = NbtHelper.numberFromCompound(s, "Y", -5).intValue(); if (y == height >> 4) { section = s; break; @@ -122,13 +122,13 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, return; } - ListTag palette = Helper.tagFromCompound(section, "Palette"); - long[] blockStates = Helper.longArrayFromCompound(section, "BlockStates"); + ListTag palette = NbtHelper.tagFromCompound(section, "Palette"); + long[] blockStates = NbtHelper.longArrayFromCompound(section, "BlockStates"); if (blockStates == null || palette == null) { return; } - int[] biomes = Helper.intArrayFromCompound(level, "Biomes"); + int[] biomes = NbtHelper.intArrayFromCompound(level, "Biomes"); int cy = height % 16; int bits = blockStates.length >> 6; @@ -154,28 +154,28 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, short[] terrainHeights, int height) { - ListTag sections = Helper.getSectionsFromLevelFromRoot(root, "Sections"); + ListTag sections = NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); if (sections == null) { return; } - CompoundTag level = Helper.tagFromCompound(root, "Level"); + CompoundTag level = NbtHelper.tagFromCompound(root, "Level"); int absHeight = height + 64; ListTag[] palettes = new ListTag[24]; long[][] blockStatesArray = new long[24][]; sections.forEach(s -> { - ListTag p = Helper.tagFromCompound(s, "Palette"); - long[] b = Helper.longArrayFromCompound(s, "BlockStates"); - int y = Helper.numberFromCompound(s, "Y", -5).intValue(); + ListTag p = NbtHelper.tagFromCompound(s, "Palette"); + long[] b = NbtHelper.longArrayFromCompound(s, "BlockStates"); + int y = NbtHelper.numberFromCompound(s, "Y", -5).intValue(); if (y >= -4 && y <= 19 && p != null && b != null) { palettes[y + 4] = p; blockStatesArray[y + 4] = b; } }); - int[] biomes = Helper.intArrayFromCompound(level, "Biomes"); + int[] biomes = NbtHelper.intArrayFromCompound(level, "Biomes"); for (int cx = 0; cx < Tile.CHUNK_SIZE; cx += scale) { zLoop: @@ -247,18 +247,18 @@ public CompoundTag minimizeChunk(CompoundTag root) { } private boolean isWater(CompoundTag blockData) { - return switch (Helper.stringFromCompound(blockData, "Name", "")) { + return switch (NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:water", "minecraft:bubble_column" -> true; default -> false; }; } private boolean isWaterlogged(CompoundTag data) { - return data.get("Properties") != null && "true".equals(Helper.stringFromCompound(Helper.tagFromCompound(data, "Properties"), "waterlogged", null)); + return data.get("Properties") != null && "true".equals(NbtHelper.stringFromCompound(NbtHelper.tagFromCompound(data, "Properties"), "waterlogged", null)); } private boolean isEmpty(CompoundTag blockData) { - return switch (Helper.stringFromCompound(blockData, "Name", "")) { + return switch (NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:air", "minecraft:cave_air", "minecraft:barrier", "minecraft:structure_void", "minecraft:light" -> blockData.size() == 1; default -> false; }; @@ -266,7 +266,7 @@ private boolean isEmpty(CompoundTag blockData) { private boolean isEmptyOrFoliage(CompoundTag blockData, ColorMapping colorMapping) { String name; - return switch (name = Helper.stringFromCompound(blockData, "Name", "")) { + return switch (name = NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:air", "minecraft:cave_air", "minecraft:barrier", "minecraft:structure_void", "minecraft:light", "minecraft:snow" -> blockData.size() == 1; default -> colorMapping.isFoliage(name); }; diff --git a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ColorMapping.java b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ColorMapping.java index 6d05433e..84467421 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ColorMapping.java +++ b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ColorMapping.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.text.TextHelper; import net.querz.mcaselector.version.ColorMapping; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.StringTag; import net.querz.nbt.Tag; @@ -105,12 +105,12 @@ public Anvil117ColorMapping() { @Override public int getRGB(Object o, int biome) { - String name = Helper.stringFromCompound((CompoundTag) o, "Name", ""); + String name = NbtHelper.stringFromCompound((CompoundTag) o, "Name", ""); Object value = mapping.get(name); if (value instanceof Integer) { return applyBiomeTint(name, biome, (int) value); } else if (value instanceof BlockStateMapping) { - int color = ((BlockStateMapping) value).getColor(Helper.tagFromCompound((CompoundTag) o, "Properties")); + int color = ((BlockStateMapping) value).getColor(NbtHelper.tagFromCompound((CompoundTag) o, "Properties")); return applyBiomeTint(name, biome, color); } return 0xFF000000; diff --git a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117EntityFilter.java b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117EntityFilter.java index 3de59e1a..6f69b9ca 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117EntityFilter.java +++ b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117EntityFilter.java @@ -3,7 +3,7 @@ import net.querz.mcaselector.io.mca.ChunkData; import net.querz.mcaselector.range.Range; import net.querz.mcaselector.version.EntityFilter; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; import java.util.List; @@ -12,11 +12,11 @@ public class Anvil117EntityFilter implements EntityFilter { @Override public void deleteEntities(ChunkData data, List ranges) { - ListTag entities = Helper.tagFromLevelFromRoot(data.entities().getData(), "Entities", null); + ListTag entities = NbtHelper.tagFromLevelFromRoot(data.entities().getData(), "Entities", null); deleteEntities(entities, ranges); // delete proto-entities - ListTag protoEntities = Helper.tagFromLevelFromRoot(data.region().getData(), "Entities", null); + ListTag protoEntities = NbtHelper.tagFromLevelFromRoot(data.region().getData(), "Entities", null); deleteEntities(protoEntities, ranges); } @@ -30,7 +30,7 @@ protected void deleteEntities(ListTag entities, List ranges) { for (int i = 0; i < entities.size(); i++) { CompoundTag entity = entities.getCompound(i); for (Range range : ranges) { - ListTag entityPos = Helper.tagFromCompound(entity, "Pos"); + ListTag entityPos = NbtHelper.tagFromCompound(entity, "Pos"); if (entityPos != null && entityPos.size() == 3) { if (range.contains(entityPos.getInt(1) >> 4)) { entities.remove(i); @@ -47,6 +47,6 @@ public ListTag getEntities(ChunkData data) { if (data.entities() == null) { return null; } - return Helper.tagFromCompound(data.entities().getData(), "Entities", null); + return NbtHelper.tagFromCompound(data.entities().getData(), "Entities", null); } } diff --git a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117EntityRelocator.java b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117EntityRelocator.java index 468de2ea..f005e235 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117EntityRelocator.java +++ b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117EntityRelocator.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.point.Point3i; import net.querz.mcaselector.version.ChunkRelocator; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.*; import static net.querz.mcaselector.version.anvil117.Anvil117ChunkRelocator.*; @@ -10,7 +10,7 @@ public class Anvil117EntityRelocator implements ChunkRelocator { @Override public boolean relocate(CompoundTag root, Point3i offset) { - int[] position = Helper.intArrayFromCompound(root, "Position"); + int[] position = NbtHelper.intArrayFromCompound(root, "Position"); if (position == null || position.length != 2) { return false; } @@ -19,7 +19,7 @@ public boolean relocate(CompoundTag root, Point3i offset) { position[1] += offset.blockToChunk().getZ(); // adjust entity positions - ListTag entities = Helper.tagFromCompound(root, "Entities"); + ListTag entities = NbtHelper.tagFromCompound(root, "Entities"); if (entities != null) { entities.forEach(v -> applyOffsetToEntity((CompoundTag) v, offset)); } @@ -32,7 +32,7 @@ public static void applyOffsetToEntity(CompoundTag entity, Point3i offset) { return; } - ListTag entityPos = Helper.tagFromCompound(entity, "Pos"); + ListTag entityPos = NbtHelper.tagFromCompound(entity, "Pos"); if (entityPos != null && entityPos.size() == 3) { entityPos.set(0, DoubleTag.valueOf(entityPos.getDouble(0) + offset.getX())); entityPos.set(1, DoubleTag.valueOf(entityPos.getDouble(1) + offset.getY())); @@ -40,58 +40,58 @@ public static void applyOffsetToEntity(CompoundTag entity, Point3i offset) { } // leashed entities - CompoundTag leash = Helper.tagFromCompound(entity, "Leash"); - Helper.applyIntOffsetIfRootPresent(leash, "X", "Y", "Z", offset); + CompoundTag leash = NbtHelper.tagFromCompound(entity, "Leash"); + NbtHelper.applyIntOffsetIfRootPresent(leash, "X", "Y", "Z", offset); // projectiles - Helper.applyIntOffsetIfRootPresent(entity, "xTile", "yTile", "zTile", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "xTile", "yTile", "zTile", offset); // entities that have a sleeping place - Helper.applyIntOffsetIfRootPresent(entity, "SleepingX", "SleepingY", "SleepingZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "SleepingX", "SleepingY", "SleepingZ", offset); // positions for specific entity types - String id = Helper.stringFromCompound(entity, "id", ""); + String id = NbtHelper.stringFromCompound(entity, "id", ""); switch (id) { case "minecraft:dolphin": - Helper.applyIntOffsetIfRootPresent(entity, "TreasurePosX", "TreasurePosY", "TreasurePosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TreasurePosX", "TreasurePosY", "TreasurePosZ", offset); break; case "minecraft:phantom": - Helper.applyIntOffsetIfRootPresent(entity, "AX", "AY", "AZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "AX", "AY", "AZ", offset); break; case "minecraft:shulker": - Helper.applyIntOffsetIfRootPresent(entity, "APX", "APY", "APZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "APX", "APY", "APZ", offset); break; case "minecraft:turtle": - Helper.applyIntOffsetIfRootPresent(entity, "HomePosX", "HomePosY", "HomePosZ", offset); - Helper.applyIntOffsetIfRootPresent(entity, "TravelPosX", "TravelPosY", "TravelPosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "HomePosX", "HomePosY", "HomePosZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TravelPosX", "TravelPosY", "TravelPosZ", offset); break; case "minecraft:vex": - Helper.applyIntOffsetIfRootPresent(entity, "BoundX", "BoundY", "BoundZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "BoundX", "BoundY", "BoundZ", offset); break; case "minecraft:wandering_trader": - CompoundTag wanderTarget = Helper.tagFromCompound(entity, "WanderTarget"); - Helper.applyIntOffsetIfRootPresent(wanderTarget, "X", "Y", "Z", offset); + CompoundTag wanderTarget = NbtHelper.tagFromCompound(entity, "WanderTarget"); + NbtHelper.applyIntOffsetIfRootPresent(wanderTarget, "X", "Y", "Z", offset); break; case "minecraft:shulker_bullet": - CompoundTag owner = Helper.tagFromCompound(entity, "Owner"); - Helper.applyIntOffsetIfRootPresent(owner, "X", "Y", "Z", offset); - CompoundTag target = Helper.tagFromCompound(entity, "Target"); - Helper.applyIntOffsetIfRootPresent(target, "X", "Y", "Z", offset); + CompoundTag owner = NbtHelper.tagFromCompound(entity, "Owner"); + NbtHelper.applyIntOffsetIfRootPresent(owner, "X", "Y", "Z", offset); + CompoundTag target = NbtHelper.tagFromCompound(entity, "Target"); + NbtHelper.applyIntOffsetIfRootPresent(target, "X", "Y", "Z", offset); break; case "minecraft:end_crystal": - CompoundTag beamTarget = Helper.tagFromCompound(entity, "BeamTarget"); - Helper.applyIntOffsetIfRootPresent(beamTarget, "X", "Y", "Z", offset); + CompoundTag beamTarget = NbtHelper.tagFromCompound(entity, "BeamTarget"); + NbtHelper.applyIntOffsetIfRootPresent(beamTarget, "X", "Y", "Z", offset); break; case "minecraft:item_frame": case "minecraft:painting": - Helper.applyIntOffsetIfRootPresent(entity, "TileX", "TileY", "TileZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(entity, "TileX", "TileY", "TileZ", offset); break; case "minecraft:villager": - CompoundTag memories = Helper.tagFromCompound(Helper.tagFromCompound(entity, "Brain"), "memories"); + CompoundTag memories = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(entity, "Brain"), "memories"); if (memories != null && memories.size() > 0) { - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:meeting_point"), offset); - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:home"), offset); - applyOffsetToVillagerMemory(Helper.tagFromCompound(memories, "minecraft:job_site"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:meeting_point"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:home"), offset); + applyOffsetToVillagerMemory(NbtHelper.tagFromCompound(memories, "minecraft:job_site"), offset); } break; case "minecraft:pillager": @@ -100,47 +100,47 @@ public static void applyOffsetToEntity(CompoundTag entity, Point3i offset) { case "minecraft:ravager": case "minecraft:illusioner": case "minecraft:evoker": - CompoundTag patrolTarget = Helper.tagFromCompound(entity, "PatrolTarget"); - Helper.applyIntOffsetIfRootPresent(patrolTarget, "X", "Y", "Z", offset); + CompoundTag patrolTarget = NbtHelper.tagFromCompound(entity, "PatrolTarget"); + NbtHelper.applyIntOffsetIfRootPresent(patrolTarget, "X", "Y", "Z", offset); break; case "minecraft:falling_block": - CompoundTag tileEntityData = Helper.tagFromCompound(entity, "TileEntityData"); + CompoundTag tileEntityData = NbtHelper.tagFromCompound(entity, "TileEntityData"); applyOffsetToTileEntity(tileEntityData, offset); } // recursively update passengers - ListTag passengers = Helper.tagFromCompound(entity, "Passengers"); + ListTag passengers = NbtHelper.tagFromCompound(entity, "Passengers"); if (passengers != null) { passengers.forEach(p -> applyOffsetToEntity((CompoundTag) p, offset)); } - CompoundTag item = Helper.tagFromCompound(entity, "Item"); + CompoundTag item = NbtHelper.tagFromCompound(entity, "Item"); applyOffsetToItem(item, offset); - ListTag items = Helper.tagFromCompound(entity, "Items"); + ListTag items = NbtHelper.tagFromCompound(entity, "Items"); if (items != null) { items.forEach(i -> applyOffsetToItem((CompoundTag) i, offset)); } - ListTag handItems = Helper.tagFromCompound(entity, "HandItems"); + ListTag handItems = NbtHelper.tagFromCompound(entity, "HandItems"); if (handItems != null) { handItems.forEach(i -> applyOffsetToItem((CompoundTag) i, offset)); } - ListTag armorItems = Helper.tagFromCompound(entity, "ArmorItems"); + ListTag armorItems = NbtHelper.tagFromCompound(entity, "ArmorItems"); if (armorItems != null) { armorItems.forEach(i -> applyOffsetToItem((CompoundTag) i, offset)); } - Helper.fixEntityUUID(entity); + NbtHelper.fixEntityUUID(entity); } static void applyOffsetToVillagerMemory(CompoundTag memory, Point3i offset) { - IntArrayTag mPos = Helper.tagFromCompound(memory, "pos"); - Helper.applyOffsetToIntArrayPos(mPos, offset); + IntArrayTag mPos = NbtHelper.tagFromCompound(memory, "pos"); + NbtHelper.applyOffsetToIntArrayPos(mPos, offset); if (mPos == null) { - ListTag lPos = Helper.tagFromCompound(memory, "pos"); - Helper.applyOffsetToIntListPos(lPos, offset); + ListTag lPos = NbtHelper.tagFromCompound(memory, "pos"); + NbtHelper.applyOffsetToIntListPos(lPos, offset); } } } diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkFilter.java b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkFilter.java index 6db0c2d7..4fd892b2 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkFilter.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkFilter.java @@ -5,7 +5,7 @@ import net.querz.mcaselector.point.Point3i; import net.querz.mcaselector.range.Range; import net.querz.mcaselector.tile.Tile; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.mcaselector.version.anvil117.Anvil117ChunkFilter; import net.querz.nbt.*; import java.util.*; @@ -14,7 +14,7 @@ public class Anvil118ChunkFilter extends Anvil117ChunkFilter { @Override public boolean matchBlockNames(CompoundTag data, Collection names) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return false; } @@ -33,7 +33,7 @@ public boolean matchBlockNames(CompoundTag data, Collection names) { continue; } for (CompoundTag p : palette.iterateType(CompoundTag.TYPE)) { - if (name.equals(Helper.stringFromCompound(p, "Name"))) { + if (name.equals(NbtHelper.stringFromCompound(p, "Name"))) { c++; continue nameLoop; } @@ -45,7 +45,7 @@ public boolean matchBlockNames(CompoundTag data, Collection names) { @Override public boolean matchAnyBlockName(CompoundTag data, Collection names) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return false; } @@ -62,7 +62,7 @@ public boolean matchAnyBlockName(CompoundTag data, Collection names) { continue; } for (CompoundTag p : palette.iterateType(CompoundTag.TYPE)) { - if (name.equals(Helper.stringFromCompound(p, "Name"))) { + if (name.equals(NbtHelper.stringFromCompound(p, "Name"))) { return true; } } @@ -73,7 +73,7 @@ public boolean matchAnyBlockName(CompoundTag data, Collection names) { @Override public boolean paletteEquals(CompoundTag data, Collection names) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return false; } @@ -91,7 +91,7 @@ public boolean paletteEquals(CompoundTag data, Collection names) { } for (CompoundTag p : palette.iterateType(CompoundTag.TYPE)) { String n; - if ((n = Helper.stringFromCompound(p, "Name")) != null) { + if ((n = NbtHelper.stringFromCompound(p, "Name")) != null) { if (!names.contains(n)) { return false; } @@ -112,7 +112,7 @@ public boolean paletteEquals(CompoundTag data, Collection names) { @Override public boolean matchBiomes(CompoundTag data, Collection biomes) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return false; } @@ -128,7 +128,7 @@ public boolean matchBiomes(CompoundTag data, Collection biomes) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return false; } @@ -175,7 +175,7 @@ public boolean matchAnyBiome(CompoundTag data, Collection replace) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return; } @@ -292,7 +292,7 @@ public void replaceBlocks(CompoundTag data, Map replac } pos = pos.chunkToBlock(); - int yMax = Helper.findHighestSection(sections, -4); + int yMax = NbtHelper.findHighestSection(sections, -4); // handle the special case when someone wants to replace air with something else if (replace.containsKey("minecraft:air")) { @@ -330,8 +330,8 @@ public void replaceBlocks(CompoundTag data, Map replac for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { CompoundTag blockStatesTag = section.getCompound("block_states"); - ListTag palette = Helper.tagFromCompound(blockStatesTag, "palette"); - long[] blockStates = Helper.longArrayFromCompound(blockStatesTag, "data"); + ListTag palette = NbtHelper.tagFromCompound(blockStatesTag, "palette"); + long[] blockStates = NbtHelper.longArrayFromCompound(blockStatesTag, "data"); if (palette == null) { continue; } @@ -340,7 +340,7 @@ public void replaceBlocks(CompoundTag data, Map replac blockStates = new long[256]; } - int y = Helper.numberFromCompound(section, "Y", -5).intValue(); + int y = NbtHelper.numberFromCompound(section, "Y", -5).intValue(); if (y < -4 || y > yMax) { continue; } @@ -402,7 +402,7 @@ public void replaceBlocks(CompoundTag data, Map replac } else { CompoundTag level = data.getCompound("Level"); - Point2i pos = Helper.point2iFromCompound(level, "xPos", "zPos"); + Point2i pos = NbtHelper.point2iFromCompound(level, "xPos", "zPos"); if (pos == null) { return; } @@ -437,23 +437,23 @@ public void replaceBlocks(CompoundTag data, Map replac } } - ListTag tileEntities = Helper.tagFromCompound(level, "TileEntities", null); + ListTag tileEntities = NbtHelper.tagFromCompound(level, "TileEntities", null); if (tileEntities == null) { tileEntities = new ListTag(); } for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = Helper.tagFromCompound(section, "Palette", null); + ListTag palette = NbtHelper.tagFromCompound(section, "Palette", null); if (palette == null) { continue; } - long[] blockStates = Helper.longArrayFromCompound(section, "BlockStates"); + long[] blockStates = NbtHelper.longArrayFromCompound(section, "BlockStates"); if (blockStates == null) { continue; } - int y = Helper.numberFromCompound(section, "Y", -1).intValue(); + int y = NbtHelper.numberFromCompound(section, "Y", -1).intValue(); if (y < 0 || y > 15) { continue; } @@ -565,7 +565,7 @@ protected CompoundTag completeSection(CompoundTag section, int y) { @Override public int getAverageHeight(CompoundTag data) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return 0; } @@ -589,7 +589,7 @@ public int getAverageHeight(CompoundTag data) { continue; } - Number height = Helper.numberFromCompound(section, "Y", null); + Number height = NbtHelper.numberFromCompound(section, "Y", null); if (height == null) { continue; } @@ -610,7 +610,7 @@ public int getAverageHeight(CompoundTag data) { @Override public int getBlockAmount(CompoundTag data, String[] blocks) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return 0; } @@ -631,7 +631,7 @@ public int getBlockAmount(CompoundTag data, String[] blocks) { for (int i = 0; i < palette.size(); i++) { CompoundTag blockState = palette.getCompound(i); - String name = Helper.stringFromCompound(blockState, "Name"); + String name = NbtHelper.stringFromCompound(blockState, "Name"); if (name == null) { continue; } @@ -654,7 +654,7 @@ public int getBlockAmount(CompoundTag data, String[] blocks) { @Override public ListTag getTileEntities(CompoundTag data) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return null; } @@ -663,17 +663,17 @@ public ListTag getTileEntities(CompoundTag data) { @Override public CompoundTag getStructureReferences(CompoundTag data) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return null; } CompoundTag structures = LegacyHelper.getStructures(data, dataVersion); - return Helper.tagFromCompound(structures, "References"); + return NbtHelper.tagFromCompound(structures, "References"); } @Override public CompoundTag getStructureStarts(CompoundTag data) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return null; } @@ -682,7 +682,7 @@ public CompoundTag getStructureStarts(CompoundTag data) { @Override public ListTag getSections(CompoundTag data) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return null; } @@ -703,7 +703,7 @@ public void deleteSections(CompoundTag data, List ranges) { default: return; } - ListTag sections = Helper.tagFromCompound(data, "sections"); + ListTag sections = NbtHelper.tagFromCompound(data, "sections"); if (sections == null) { return; } @@ -731,7 +731,7 @@ private void deleteSection(CompoundTag section) { @Override public LongTag getInhabitedTime(CompoundTag data) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return null; } @@ -740,7 +740,7 @@ public LongTag getInhabitedTime(CompoundTag data) { @Override public void setInhabitedTime(CompoundTag data, long inhabitedTime) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return; } @@ -749,7 +749,7 @@ public void setInhabitedTime(CompoundTag data, long inhabitedTime) { @Override public StringTag getStatus(CompoundTag data) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return null; } @@ -758,7 +758,7 @@ public StringTag getStatus(CompoundTag data) { @Override public void setStatus(CompoundTag data, String status) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return; } @@ -767,7 +767,7 @@ public void setStatus(CompoundTag data, String status) { @Override public LongTag getLastUpdate(CompoundTag data) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return null; } @@ -776,7 +776,7 @@ public LongTag getLastUpdate(CompoundTag data) { @Override public void setLastUpdate(CompoundTag data, long lastUpdate) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return; } @@ -785,7 +785,7 @@ public void setLastUpdate(CompoundTag data, long lastUpdate) { @Override public IntTag getXPos(CompoundTag data) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return null; } @@ -794,7 +794,7 @@ public IntTag getXPos(CompoundTag data) { @Override public IntTag getYPos(CompoundTag data) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return null; } @@ -803,7 +803,7 @@ public IntTag getYPos(CompoundTag data) { @Override public IntTag getZPos(CompoundTag data) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return null; } @@ -812,7 +812,7 @@ public IntTag getZPos(CompoundTag data) { @Override public ByteTag getLightPopulated(CompoundTag data) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return null; } @@ -821,7 +821,7 @@ public ByteTag getLightPopulated(CompoundTag data) { @Override public void setLightPopulated(CompoundTag data, byte lightPopulated) { - Integer dataVersion = Helper.intFromCompound(data, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(data, "DataVersion"); if (dataVersion == null) { return; } diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkMerger.java index 9f7a507e..e785678e 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkMerger.java @@ -3,7 +3,7 @@ import net.querz.mcaselector.point.Point2i; import net.querz.mcaselector.range.Range; import net.querz.mcaselector.version.ChunkMerger; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; import net.querz.nbt.Tag; @@ -14,7 +14,7 @@ public class Anvil118ChunkMerger implements ChunkMerger { @Override public void mergeChunks(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - Integer dataVersion = Helper.intFromCompound(source, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(source, "DataVersion"); if (dataVersion == null) { return; } @@ -46,11 +46,11 @@ private void mergeStructures(CompoundTag source, CompoundTag destination, List start : destinationStarts) { - ListTag children = Helper.tagFromCompound(start.getValue(), "Children", null); + ListTag children = NbtHelper.tagFromCompound(start.getValue(), "Children", null); if (children != null) { child: for (int i = 0; i < children.size(); i++) { CompoundTag child = children.getCompound(i); - int[] bb = Helper.intArrayFromCompound(child, "BB"); + int[] bb = NbtHelper.intArrayFromCompound(child, "BB"); if (bb != null && bb.length == 6) { for (Range range : ranges) { if (range.contains(bb[1] >> 4 - yOffset) && range.contains(bb[4] >> 4 - yOffset)) { @@ -65,7 +65,7 @@ private void mergeStructures(CompoundTag source, CompoundTag destination, List> 4 - yOffset) && range.contains(bb[4] >> 4 - yOffset)) { @@ -83,30 +83,30 @@ private void mergeStructures(CompoundTag source, CompoundTag destination, List start : sourceStarts) { - ListTag children = Helper.tagFromCompound(start.getValue(), "Children", null); + ListTag children = NbtHelper.tagFromCompound(start.getValue(), "Children", null); if (children != null) { child: for (int i = 0; i < children.size(); i++) { CompoundTag child = children.getCompound(i); - int[] bb = Helper.intArrayFromCompound(child, "BB"); + int[] bb = NbtHelper.intArrayFromCompound(child, "BB"); if (bb == null) { continue; } for (Range range : ranges) { if (range.contains(bb[1] >> 4 - yOffset) || range.contains(bb[4] >> 4 - yOffset)) { - CompoundTag destinationStart = Helper.tagFromCompound(destinationStarts, start.getKey(), null); + CompoundTag destinationStart = NbtHelper.tagFromCompound(destinationStarts, start.getKey(), null); if (destinationStart == null || "INVALID".equals(destinationStart.getString("id"))) { destinationStart = ((CompoundTag) start.getValue()).copy(); // we need to remove the children, we don't want all of them - ListTag clonedDestinationChildren = Helper.tagFromCompound(destinationStart, "Children", null); + ListTag clonedDestinationChildren = NbtHelper.tagFromCompound(destinationStart, "Children", null); if (clonedDestinationChildren != null) { clonedDestinationChildren.clear(); } destinationStarts.put(start.getKey(), destinationStart); } - ListTag destinationChildren = Helper.tagFromCompound(destinationStarts.get(start.getKey()), "Children", null); + ListTag destinationChildren = NbtHelper.tagFromCompound(destinationStarts.get(start.getKey()), "Children", null); if (destinationChildren == null) { destinationChildren = new ListTag(); destinationStart.put("Children", destinationChildren); diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRelocator.java b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRelocator.java index 9683c70b..3a24a169 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRelocator.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRelocator.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.point.Point3i; import net.querz.mcaselector.version.ChunkRelocator; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.mcaselector.version.anvil117.Anvil117EntityRelocator; import net.querz.nbt.*; import java.util.Map; @@ -13,7 +13,7 @@ public class Anvil118ChunkRelocator implements ChunkRelocator { @Override public boolean relocate(CompoundTag root, Point3i offset) { - Integer dataVersion = Helper.intFromCompound(root, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(root, "DataVersion"); if (dataVersion == null) { return false; } @@ -47,29 +47,29 @@ public boolean relocate(CompoundTag root, Point3i offset) { // Biomes as int array only exist in experimental snapshots. for everything above, moving the sections is enough. if (dataVersion < 2834) { - applyOffsetToBiomes(Helper.tagFromLevelFromRoot(root, "Biomes"), offset.blockToSection()); + applyOffsetToBiomes(NbtHelper.tagFromLevelFromRoot(root, "Biomes"), offset.blockToSection()); } if (dataVersion < 2844) { // LiquidsToBeTicked - Helper.applyOffsetToListOfShortTagLists(Helper.levelFromRoot(root), "LiquidsToBeTicked", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(NbtHelper.levelFromRoot(root), "LiquidsToBeTicked", offset.blockToSection()); // ToBeTicked - Helper.applyOffsetToListOfShortTagLists(Helper.levelFromRoot(root), "ToBeTicked", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(NbtHelper.levelFromRoot(root), "ToBeTicked", offset.blockToSection()); } // PostProcessing if (dataVersion < 2844) { - Helper.applyOffsetToListOfShortTagLists(Helper.levelFromRoot(root), "PostProcessing", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(NbtHelper.levelFromRoot(root), "PostProcessing", offset.blockToSection()); } else { - Helper.applyOffsetToListOfShortTagLists(root, "PostProcessing", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(root, "PostProcessing", offset.blockToSection()); } // adjust sections vertically ListTag sections = LegacyHelper.getSections(root, dataVersion); if (sections != null) { ListTag newSections = new ListTag(); - int yMax = Helper.findHighestSection(sections, -4); + int yMax = NbtHelper.findHighestSection(sections, -4); for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { if (applyOffsetToSection(section, offset.blockToSection(), -4, yMax)) { newSections.add(section); @@ -108,7 +108,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset, int Point3i chunkOffset = offset.blockToChunk(); // update references - CompoundTag references = Helper.tagFromCompound(structures, "References"); + CompoundTag references = NbtHelper.tagFromCompound(structures, "References"); if (references != null) { for (Map.Entry entry : references) { long[] reference = silent(() -> ((LongArrayTag) entry.getValue()).getValue(), null); @@ -127,37 +127,37 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset, int if (starts != null) { for (Map.Entry entry : starts) { CompoundTag structure = silent(() -> (CompoundTag) entry.getValue(), null); - if ("INVALID".equals(Helper.stringFromCompound(structure, "id"))) { + if ("INVALID".equals(NbtHelper.stringFromCompound(structure, "id"))) { continue; } - Helper.applyIntIfPresent(structure, "ChunkX", chunkOffset.getX()); - Helper.applyIntIfPresent(structure, "ChunkZ", chunkOffset.getZ()); - Helper.applyOffsetToBB(Helper.intArrayFromCompound(structure, "BB"), offset); + NbtHelper.applyIntIfPresent(structure, "ChunkX", chunkOffset.getX()); + NbtHelper.applyIntIfPresent(structure, "ChunkZ", chunkOffset.getZ()); + NbtHelper.applyOffsetToBB(NbtHelper.intArrayFromCompound(structure, "BB"), offset); - ListTag processed = Helper.tagFromCompound(structure, "Processed"); + ListTag processed = NbtHelper.tagFromCompound(structure, "Processed"); if (processed != null) { for (CompoundTag chunk : processed.iterateType(CompoundTag.TYPE)) { - Helper.applyIntIfPresent(chunk, "X", chunkOffset.getX()); - Helper.applyIntIfPresent(chunk, "Z", chunkOffset.getZ()); + NbtHelper.applyIntIfPresent(chunk, "X", chunkOffset.getX()); + NbtHelper.applyIntIfPresent(chunk, "Z", chunkOffset.getZ()); } } - ListTag children = Helper.tagFromCompound(structure, "Children"); + ListTag children = NbtHelper.tagFromCompound(structure, "Children"); if (children != null) { for (CompoundTag child : children.iterateType(CompoundTag.TYPE)) { - Helper.applyIntOffsetIfRootPresent(child, "TPX", "TPY", "TPZ", offset); - Helper.applyIntOffsetIfRootPresent(child, "PosX", "PosY", "PosZ", offset); - Helper.applyOffsetToBB(Helper.intArrayFromCompound(child, "BB"), offset); + NbtHelper.applyIntOffsetIfRootPresent(child, "TPX", "TPY", "TPZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(child, "PosX", "PosY", "PosZ", offset); + NbtHelper.applyOffsetToBB(NbtHelper.intArrayFromCompound(child, "BB"), offset); - ListTag entrances = Helper.tagFromCompound(child, "Entrances"); + ListTag entrances = NbtHelper.tagFromCompound(child, "Entrances"); if (entrances != null) { - entrances.forEach(e -> Helper.applyOffsetToBB(((IntArrayTag) e).getValue(), offset)); + entrances.forEach(e -> NbtHelper.applyOffsetToBB(((IntArrayTag) e).getValue(), offset)); } - ListTag junctions = Helper.tagFromCompound(child, "junctions"); + ListTag junctions = NbtHelper.tagFromCompound(child, "junctions"); if (junctions != null) { for (CompoundTag junction : junctions.iterateType(CompoundTag.TYPE)) { - Helper.applyIntOffsetIfRootPresent(junction, "source_x", "source_y", "source_z", offset); + NbtHelper.applyIntOffsetIfRootPresent(junction, "source_x", "source_y", "source_z", offset); } } } @@ -167,7 +167,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset, int } private void applyOffsetToTick(CompoundTag tick, Point3i offset) { - Helper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); } static void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { @@ -175,47 +175,47 @@ static void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { return; } - Helper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); - String id = Helper.stringFromCompound(tileEntity, "id", ""); + String id = NbtHelper.stringFromCompound(tileEntity, "id", ""); switch (id) { case "minecraft:bee_nest": case "minecraft:beehive": - CompoundTag flowerPos = Helper.tagFromCompound(tileEntity, "FlowerPos"); - Helper.applyIntOffsetIfRootPresent(flowerPos, "X", "Y", "Z", offset); - ListTag bees = Helper.tagFromCompound(tileEntity, "Bees"); + CompoundTag flowerPos = NbtHelper.tagFromCompound(tileEntity, "FlowerPos"); + NbtHelper.applyIntOffsetIfRootPresent(flowerPos, "X", "Y", "Z", offset); + ListTag bees = NbtHelper.tagFromCompound(tileEntity, "Bees"); if (bees != null) { for (CompoundTag bee : bees.iterateType(CompoundTag.TYPE)) { - applyOffsetToEntity(Helper.tagFromCompound(bee, "EntityData"), offset); + applyOffsetToEntity(NbtHelper.tagFromCompound(bee, "EntityData"), offset); } } break; case "minecraft:end_gateway": - CompoundTag exitPortal = Helper.tagFromCompound(tileEntity, "ExitPortal"); - Helper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); + CompoundTag exitPortal = NbtHelper.tagFromCompound(tileEntity, "ExitPortal"); + NbtHelper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); break; case "minecraft:structure_block": - Helper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); break; case "minecraft:jukebox": - CompoundTag recordItem = Helper.tagFromCompound(tileEntity, "RecordItem"); + CompoundTag recordItem = NbtHelper.tagFromCompound(tileEntity, "RecordItem"); applyOffsetToItem(recordItem, offset); break; case "minecraft:lectern": // 1.14 - CompoundTag book = Helper.tagFromCompound(tileEntity, "Book"); + CompoundTag book = NbtHelper.tagFromCompound(tileEntity, "Book"); applyOffsetToItem(book, offset); break; case "minecraft:mob_spawner": - ListTag spawnPotentials = Helper.tagFromCompound(tileEntity, "SpawnPotentials"); + ListTag spawnPotentials = NbtHelper.tagFromCompound(tileEntity, "SpawnPotentials"); if (spawnPotentials != null) { for (CompoundTag spawnPotential : spawnPotentials.iterateType(CompoundTag.TYPE)) { - CompoundTag entity = Helper.tagFromCompound(spawnPotential, "Entity"); + CompoundTag entity = NbtHelper.tagFromCompound(spawnPotential, "Entity"); Anvil117EntityRelocator.applyOffsetToEntity(entity, offset); } } } - ListTag items = Helper.tagFromCompound(tileEntity, "Items"); + ListTag items = NbtHelper.tagFromCompound(tileEntity, "Items"); if (items != null) { items.forEach(i -> applyOffsetToItem((CompoundTag) i, offset)); } @@ -226,22 +226,22 @@ static void applyOffsetToItem(CompoundTag item, Point3i offset) { return; } - CompoundTag tag = Helper.tagFromCompound(item, "tag"); + CompoundTag tag = NbtHelper.tagFromCompound(item, "tag"); if (tag == null) { return; } - String id = Helper.stringFromCompound(item, "id", ""); + String id = NbtHelper.stringFromCompound(item, "id", ""); switch (id) { case "minecraft:compass": - CompoundTag lodestonePos = Helper.tagFromCompound(tag, "LodestonePos"); - Helper.applyIntOffsetIfRootPresent(lodestonePos, "X", "Y", "Z", offset); + CompoundTag lodestonePos = NbtHelper.tagFromCompound(tag, "LodestonePos"); + NbtHelper.applyIntOffsetIfRootPresent(lodestonePos, "X", "Y", "Z", offset); break; } // recursively update all items in child containers - CompoundTag blockEntityTag = Helper.tagFromCompound(tag, "BlockEntityTag"); - ListTag items = Helper.tagFromCompound(blockEntityTag, "Items"); + CompoundTag blockEntityTag = NbtHelper.tagFromCompound(tag, "BlockEntityTag"); + ListTag items = NbtHelper.tagFromCompound(blockEntityTag, "Items"); if (items != null) { items.forEach(i -> applyOffsetToItem((CompoundTag) i, offset)); } diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRenderer.java b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRenderer.java index db8ec2bd..653f4ab4 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRenderer.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRenderer.java @@ -5,7 +5,7 @@ import net.querz.mcaselector.tile.Tile; import net.querz.mcaselector.version.ChunkRenderer; import net.querz.mcaselector.version.ColorMapping; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.*; import static net.querz.mcaselector.validation.ValidationHelper.silent; @@ -13,7 +13,7 @@ public class Anvil118ChunkRenderer implements ChunkRenderer { @Override public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, int[] waterPixels, short[] terrainHeights, short[] waterHeights, boolean water, int height) { - Integer dataVersion = Helper.intFromCompound(root, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(root, "DataVersion"); if (dataVersion == null) { return; } @@ -35,14 +35,14 @@ public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, ListTag p = LegacyHelper.getPalette(s, dataVersion); long[] b = LegacyHelper.getBlockStates(s, dataVersion); - int y = Helper.numberFromCompound(s, "Y", -5).intValue(); + int y = NbtHelper.numberFromCompound(s, "Y", -5).intValue(); if (y >= -4 && y < yMax && p != null) { palettes[y + 4] = p; blockStatesArray[y + 4] = b; if (dataVersion >= 2834) { - biomePalettes[y + 4] = Helper.tagFromCompound(Helper.tagFromCompound(s, "biomes"), "palette"); - biomesArray[y + 4] = Helper.longArrayFromCompound(Helper.tagFromCompound(s, "biomes"), "data"); + biomePalettes[y + 4] = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(s, "biomes"), "palette"); + biomesArray[y + 4] = NbtHelper.longArrayFromCompound(NbtHelper.tagFromCompound(s, "biomes"), "data"); } } } @@ -130,7 +130,7 @@ public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, int height) { - Integer dataVersion = Helper.intFromCompound(root, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(root, "DataVersion"); if (dataVersion == null) { return; } @@ -142,7 +142,7 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, CompoundTag section = null; for (Tag s : sections) { - int y = Helper.numberFromCompound(s, "Y", -5).intValue(); + int y = NbtHelper.numberFromCompound(s, "Y", -5).intValue(); if (y == height >> 4) { section = (CompoundTag) s; break; @@ -162,8 +162,8 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, } if (dataVersion >= 2834) { - biomesPalette = Helper.tagFromCompound(Helper.tagFromCompound(section, "biomes"), "palette"); - biomeIndices = Helper.longArrayFromCompound(Helper.tagFromCompound(section, "biomes"), "data"); + biomesPalette = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(section, "biomes"), "palette"); + biomeIndices = NbtHelper.longArrayFromCompound(NbtHelper.tagFromCompound(section, "biomes"), "data"); } int[] biomes = LegacyHelper.getLegacyBiomes(root, dataVersion); @@ -206,7 +206,7 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, short[] terrainHeights, int height) { - Integer dataVersion = Helper.intFromCompound(root, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(root, "DataVersion"); if (dataVersion == null) { return; } @@ -228,14 +228,14 @@ public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, ListTag p = LegacyHelper.getPalette(s, dataVersion); long[] b = LegacyHelper.getBlockStates(s, dataVersion); - int y = Helper.numberFromCompound(s, "Y", -5).intValue(); + int y = NbtHelper.numberFromCompound(s, "Y", -5).intValue(); if (y >= -4 && y < yMax && p != null) { palettes[y + 4] = p; blockStatesArray[y + 4] = b; if (dataVersion >= 2834) { - biomePalettes[y + 4] = Helper.tagFromCompound(Helper.tagFromCompound(s, "biomes"), "palette"); - biomesArray[y + 4] = Helper.longArrayFromCompound(Helper.tagFromCompound(s, "biomes"), "data"); + biomePalettes[y + 4] = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(s, "biomes"), "palette"); + biomesArray[y + 4] = NbtHelper.longArrayFromCompound(NbtHelper.tagFromCompound(s, "biomes"), "data"); } } } @@ -310,7 +310,7 @@ public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public CompoundTag minimizeChunk(CompoundTag root) { - Integer dataVersion = Helper.intFromCompound(root, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(root, "DataVersion"); if (dataVersion == null) { return root; } @@ -341,18 +341,18 @@ public CompoundTag minimizeChunk(CompoundTag root) { } private boolean isWater(CompoundTag blockData) { - return switch (Helper.stringFromCompound(blockData, "Name", "")) { + return switch (NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:water", "minecraft:bubble_column" -> true; default -> false; }; } private boolean isWaterlogged(CompoundTag data) { - return data.get("Properties") != null && "true".equals(Helper.stringFromCompound(Helper.tagFromCompound(data, "Properties"), "waterlogged", null)); + return data.get("Properties") != null && "true".equals(NbtHelper.stringFromCompound(NbtHelper.tagFromCompound(data, "Properties"), "waterlogged", null)); } private boolean isEmpty(CompoundTag blockData) { - return switch (Helper.stringFromCompound(blockData, "Name", "")) { + return switch (NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:air", "minecraft:cave_air", "minecraft:barrier", "minecraft:structure_void", "minecraft:light" -> blockData.size() == 1; default -> false; }; @@ -360,7 +360,7 @@ private boolean isEmpty(CompoundTag blockData) { private boolean isEmptyOrFoliage(CompoundTag blockData, ColorMapping colorMapping) { String name; - return switch (name = Helper.stringFromCompound(blockData, "Name", "")) { + return switch (name = NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:air", "minecraft:cave_air", "minecraft:barrier", "minecraft:structure_void", "minecraft:light", "minecraft:snow" -> blockData.size() == 1; default -> colorMapping.isFoliage(name); }; diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ColorMapping.java b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ColorMapping.java index b27a39ad..59b6466a 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ColorMapping.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ColorMapping.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.text.TextHelper; import net.querz.mcaselector.version.ColorMapping; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.StringTag; import net.querz.nbt.Tag; @@ -133,12 +133,12 @@ public Anvil118ColorMapping() { @Override public int getRGB(Object o, int biome) { - String name = Helper.stringFromCompound((CompoundTag) o, "Name", ""); + String name = NbtHelper.stringFromCompound((CompoundTag) o, "Name", ""); Object value = mapping.get(name); if (value instanceof Integer) { return applyBiomeTintLegacy(name, biome, (int) value); } else if (value instanceof BlockStateMapping) { - int color = ((BlockStateMapping) value).getColor(Helper.tagFromCompound((CompoundTag) o, "Properties")); + int color = ((BlockStateMapping) value).getColor(NbtHelper.tagFromCompound((CompoundTag) o, "Properties")); return applyBiomeTintLegacy(name, biome, color); } return 0xFF000000; @@ -146,12 +146,12 @@ public int getRGB(Object o, int biome) { @Override public int getRGB(Object o, String biome) { - String name = Helper.stringFromCompound((CompoundTag) o, "Name", ""); + String name = NbtHelper.stringFromCompound((CompoundTag) o, "Name", ""); Object value = mapping.get(name); if (value instanceof Integer) { return applyBiomeTint(name, biome, (int) value); } else if (value instanceof BlockStateMapping) { - int color = ((BlockStateMapping) value).getColor(Helper.tagFromCompound((CompoundTag) o, "Properties")); + int color = ((BlockStateMapping) value).getColor(NbtHelper.tagFromCompound((CompoundTag) o, "Properties")); return applyBiomeTint(name, biome, color); } return 0xFF000000; diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118EntityFilter.java b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118EntityFilter.java index 0970d964..64cc6339 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118EntityFilter.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118EntityFilter.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.io.mca.ChunkData; import net.querz.mcaselector.range.Range; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.mcaselector.version.anvil117.Anvil117EntityFilter; import net.querz.nbt.ListTag; import java.util.List; @@ -12,7 +12,7 @@ public class Anvil118EntityFilter extends Anvil117EntityFilter { @Override public void deleteEntities(ChunkData data, List ranges) { if (data.entities() != null) { - ListTag entities = Helper.tagFromLevelFromRoot(data.entities().getData(), "Entities", null); + ListTag entities = NbtHelper.tagFromLevelFromRoot(data.entities().getData(), "Entities", null); deleteEntities(entities, ranges); } diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/LegacyHelper.java b/src/main/java/net/querz/mcaselector/version/anvil118/LegacyHelper.java index 6924e0fa..b0ce1bac 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/LegacyHelper.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/LegacyHelper.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.point.Point2i; import net.querz.mcaselector.point.Point3i; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.*; public final class LegacyHelper { @@ -11,17 +11,17 @@ private LegacyHelper() {} static ListTag getProtoEntities(CompoundTag root, int dataVersion) { if (dataVersion > 2843) { - return Helper.tagFromCompound(root, "entities"); + return NbtHelper.tagFromCompound(root, "entities"); } else { - return Helper.tagFromLevelFromRoot(root, "Entities"); + return NbtHelper.tagFromLevelFromRoot(root, "Entities"); } } static ListTag getSections(CompoundTag root, int dataVersion) { if (dataVersion > 2843) { // 21w42a - return Helper.tagFromCompound(root, "sections"); + return NbtHelper.tagFromCompound(root, "sections"); } else { - return Helper.getSectionsFromLevelFromRoot(root, "Sections"); + return NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); } } @@ -35,25 +35,25 @@ static void putSections(CompoundTag root, ListTag sections, int dataVersion) { static ListTag getPalette(CompoundTag section, int dataVersion) { if (dataVersion >= 2834) { - return Helper.tagFromCompound(Helper.tagFromCompound(section, "block_states"), "palette"); + return NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(section, "block_states"), "palette"); } else { - return Helper.tagFromCompound(section, "Palette"); + return NbtHelper.tagFromCompound(section, "Palette"); } } static long[] getBlockStates(CompoundTag section, int dataVersion) { if (dataVersion >= 2834) { - return Helper.longArrayFromCompound(Helper.tagFromCompound(section, "block_states"), "data"); + return NbtHelper.longArrayFromCompound(NbtHelper.tagFromCompound(section, "block_states"), "data"); } else { - return Helper.longArrayFromCompound(section, "BlockStates"); + return NbtHelper.longArrayFromCompound(section, "BlockStates"); } } static LongTag getInhabitedTime(CompoundTag root, int dataVersion) { if (dataVersion > 2843) { // 21w42a - return Helper.tagFromCompound(root, "InhabitedTime"); + return NbtHelper.tagFromCompound(root, "InhabitedTime"); } else { - return Helper.tagFromLevelFromRoot(root, "InhabitedTime"); + return NbtHelper.tagFromLevelFromRoot(root, "InhabitedTime"); } } @@ -63,7 +63,7 @@ static void setInhabitedTime(CompoundTag root, long inhabitedTime, int dataVersi root.putLong("InhabitedTime", inhabitedTime); } } else { - CompoundTag level = Helper.levelFromRoot(root); + CompoundTag level = NbtHelper.levelFromRoot(root); if (level != null) { level.putLong("InhabitedTime", inhabitedTime); } @@ -72,9 +72,9 @@ static void setInhabitedTime(CompoundTag root, long inhabitedTime, int dataVersi static LongTag getLastUpdate(CompoundTag root, int dataVersion) { if (dataVersion > 2843) { // 21w42a - return Helper.tagFromCompound(root, "LastUpdate"); + return NbtHelper.tagFromCompound(root, "LastUpdate"); } else { - return Helper.tagFromLevelFromRoot(root, "LastUpdate"); + return NbtHelper.tagFromLevelFromRoot(root, "LastUpdate"); } } @@ -84,7 +84,7 @@ static void setLastUpdate(CompoundTag root, long lastUpdate, int dataVersion) { root.putLong("LastUpdate", lastUpdate); } } else { - CompoundTag level = Helper.levelFromRoot(root); + CompoundTag level = NbtHelper.levelFromRoot(root); if (level != null) { level.putLong("LastUpdate", lastUpdate); } @@ -93,9 +93,9 @@ static void setLastUpdate(CompoundTag root, long lastUpdate, int dataVersion) { static StringTag getStatus(CompoundTag root, int dataVersion) { if (dataVersion > 2843) { - return Helper.tagFromCompound(root, "Status"); + return NbtHelper.tagFromCompound(root, "Status"); } else { - return Helper.tagFromLevelFromRoot(root, "Status"); + return NbtHelper.tagFromLevelFromRoot(root, "Status"); } } @@ -105,7 +105,7 @@ static void setStatus(CompoundTag root, String status, int dataVersion) { root.putString("Status", status); } } else { - CompoundTag level = Helper.levelFromRoot(root); + CompoundTag level = NbtHelper.levelFromRoot(root); if (level != null) { level.putString("Status", status); } @@ -114,25 +114,25 @@ static void setStatus(CompoundTag root, String status, int dataVersion) { static ListTag getTileEntities(CompoundTag root, int dataVersion) { if (dataVersion < 2844) { - return Helper.tagFromLevelFromRoot(root, "TileEntities"); + return NbtHelper.tagFromLevelFromRoot(root, "TileEntities"); } else { - return Helper.tagFromCompound(root, "block_entities"); + return NbtHelper.tagFromCompound(root, "block_entities"); } } static ListTag getTileTicks(CompoundTag root, int dataVersion) { if (dataVersion < 2844) { - return Helper.tagFromLevelFromRoot(root, "TileTicks"); + return NbtHelper.tagFromLevelFromRoot(root, "TileTicks"); } else { - return Helper.tagFromCompound(root, "block_ticks"); + return NbtHelper.tagFromCompound(root, "block_ticks"); } } static ListTag getLiquidTicks(CompoundTag root, int dataVersion) { if (dataVersion < 2844) { - return Helper.tagFromLevelFromRoot(root, "LiquidTicks"); + return NbtHelper.tagFromLevelFromRoot(root, "LiquidTicks"); } else { - return Helper.tagFromCompound(root, "fluid_ticks"); + return NbtHelper.tagFromCompound(root, "fluid_ticks"); } } @@ -146,15 +146,15 @@ static void putTileEntities(CompoundTag root, ListTag tileEntities, int dataVers static Point2i getChunkCoordinates(CompoundTag root, int dataVersion) { if (dataVersion < 2844) { - return Helper.point2iFromCompound(Helper.tagFromCompound(root, "Level"), "xPos", "zPos"); + return NbtHelper.point2iFromCompound(NbtHelper.tagFromCompound(root, "Level"), "xPos", "zPos"); } else { - return Helper.point2iFromCompound(root, "xPos", "zPos"); + return NbtHelper.point2iFromCompound(root, "xPos", "zPos"); } } static void applyOffsetToChunkCoordinates(CompoundTag root, Point3i offset, int dataVersion) { if (dataVersion < 2844) { - CompoundTag level = Helper.levelFromRoot(root); + CompoundTag level = NbtHelper.levelFromRoot(root); level.putInt("xPos", level.getInt("xPos") + offset.blockToChunk().getX()); level.putInt("zPos", level.getInt("zPos") + offset.blockToChunk().getZ()); } else { @@ -165,7 +165,7 @@ static void applyOffsetToChunkCoordinates(CompoundTag root, Point3i offset, int static int[] getLegacyBiomes(CompoundTag root, int dataVersion) { if (dataVersion < 2844) { // 21w43a - IntArrayTag t = Helper.tagFromLevelFromRoot(root, "Biomes"); + IntArrayTag t = NbtHelper.tagFromLevelFromRoot(root, "Biomes"); if (t != null) { return t.getValue(); } @@ -175,39 +175,39 @@ static int[] getLegacyBiomes(CompoundTag root, int dataVersion) { static CompoundTag getStructureStarts(CompoundTag root, int dataVersion) { if (dataVersion < 2844) { - return Helper.tagFromCompound(Helper.tagFromLevelFromRoot(root, "Structures", new CompoundTag()), "Starts", new CompoundTag()); + return NbtHelper.tagFromCompound(NbtHelper.tagFromLevelFromRoot(root, "Structures", new CompoundTag()), "Starts", new CompoundTag()); } else { - return Helper.tagFromCompound(Helper.tagFromCompound(root, "structures"), "starts", new CompoundTag()); + return NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(root, "structures"), "starts", new CompoundTag()); } } static CompoundTag getStructures(CompoundTag root, int dataVersion) { if (dataVersion < 2844) { - return Helper.tagFromLevelFromRoot(root, "Structures"); + return NbtHelper.tagFromLevelFromRoot(root, "Structures"); } else { - return Helper.tagFromCompound(root, "structures"); + return NbtHelper.tagFromCompound(root, "structures"); } } static CompoundTag getStructureStartsFromStructures(CompoundTag structures, int dataVersion) { if (dataVersion < 2844) { - return Helper.tagFromLevelFromRoot(structures, "Starts"); + return NbtHelper.tagFromLevelFromRoot(structures, "Starts"); } else { - return Helper.tagFromCompound(structures, "starts"); + return NbtHelper.tagFromCompound(structures, "starts"); } } static IntTag getXPos(CompoundTag data, int dataVersion) { if (dataVersion > 2843) { - return Helper.tagFromCompound(data, "xPos"); + return NbtHelper.tagFromCompound(data, "xPos"); } else { - return Helper.tagFromLevelFromRoot(data, "xPos"); + return NbtHelper.tagFromLevelFromRoot(data, "xPos"); } } static IntTag getYPos(CompoundTag data, int dataVersion) { if (dataVersion > 2843) { - return Helper.tagFromCompound(data, "yPos"); + return NbtHelper.tagFromCompound(data, "yPos"); } else { return null; } @@ -215,17 +215,17 @@ static IntTag getYPos(CompoundTag data, int dataVersion) { static IntTag getZPos(CompoundTag data, int dataVersion) { if (dataVersion > 2843) { - return Helper.tagFromCompound(data, "zPos"); + return NbtHelper.tagFromCompound(data, "zPos"); } else { - return Helper.tagFromLevelFromRoot(data, "zPos"); + return NbtHelper.tagFromLevelFromRoot(data, "zPos"); } } static ByteTag getIsLightOn(CompoundTag data, int dataVersion) { if (dataVersion > 2843) { - return Helper.tagFromCompound(data, "isLightOn"); + return NbtHelper.tagFromCompound(data, "isLightOn"); } else { - return Helper.tagFromLevelFromRoot(data, "isLightOn"); + return NbtHelper.tagFromLevelFromRoot(data, "isLightOn"); } } @@ -235,7 +235,7 @@ static void setIsLightOn(CompoundTag root, byte isLightOn, int dataVersion) { root.putByte("isLightOn", isLightOn); } } else { - CompoundTag level = Helper.levelFromRoot(root); + CompoundTag level = NbtHelper.levelFromRoot(root); if (level != null) { level.putByte("isLightOn", isLightOn); } diff --git a/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkFilter.java b/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkFilter.java index 7d0876aa..201e2e4a 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkFilter.java +++ b/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkFilter.java @@ -5,7 +5,7 @@ import net.querz.mcaselector.point.Point3i; import net.querz.mcaselector.range.Range; import net.querz.mcaselector.tile.Tile; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.mcaselector.version.anvil117.Anvil117ChunkFilter; import net.querz.nbt.*; import java.util.*; @@ -14,7 +14,7 @@ public class Anvil119ChunkFilter extends Anvil117ChunkFilter { @Override public boolean matchBlockNames(CompoundTag data, Collection names) { - ListTag sections = Helper.tagFromCompound(data, "sections"); + ListTag sections = NbtHelper.tagFromCompound(data, "sections"); if (sections == null) { return false; } @@ -23,12 +23,12 @@ public boolean matchBlockNames(CompoundTag data, Collection names) { nameLoop: for (String name : names) { for (CompoundTag t : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = Helper.tagFromCompound(Helper.tagFromCompound(t, "block_states"), "palette"); + ListTag palette = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(t, "block_states"), "palette"); if (palette == null) { continue; } for (CompoundTag p : palette.iterateType(CompoundTag.TYPE)) { - if (name.equals(Helper.stringFromCompound(p, "Name"))) { + if (name.equals(NbtHelper.stringFromCompound(p, "Name"))) { c++; continue nameLoop; } @@ -40,19 +40,19 @@ public boolean matchBlockNames(CompoundTag data, Collection names) { @Override public boolean matchAnyBlockName(CompoundTag data, Collection names) { - ListTag sections = Helper.tagFromCompound(data, "sections"); + ListTag sections = NbtHelper.tagFromCompound(data, "sections"); if (sections == null) { return false; } for (String name : names) { for (CompoundTag t : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = Helper.tagFromCompound(Helper.tagFromCompound(t, "block_states"), "palette"); + ListTag palette = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(t, "block_states"), "palette"); if (palette == null) { continue; } for (CompoundTag p : palette.iterateType(CompoundTag.TYPE)) { - if (name.equals(Helper.stringFromCompound(p, "Name"))) { + if (name.equals(NbtHelper.stringFromCompound(p, "Name"))) { return true; } } @@ -63,20 +63,20 @@ public boolean matchAnyBlockName(CompoundTag data, Collection names) { @Override public boolean paletteEquals(CompoundTag data, Collection names) { - ListTag sections = Helper.tagFromCompound(data, "sections"); + ListTag sections = NbtHelper.tagFromCompound(data, "sections"); if (sections == null) { return false; } Set blocks = new HashSet<>(); for (CompoundTag t : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = Helper.tagFromCompound(Helper.tagFromCompound(t, "block_states"), "palette"); + ListTag palette = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(t, "block_states"), "palette"); if (palette == null) { continue; } for (CompoundTag p : palette.iterateType(CompoundTag.TYPE)) { String n; - if ((n = Helper.stringFromCompound(p, "Name")) != null) { + if ((n = NbtHelper.stringFromCompound(p, "Name")) != null) { if (!names.contains(n)) { return false; } @@ -97,7 +97,7 @@ public boolean paletteEquals(CompoundTag data, Collection names) { @Override public boolean matchBiomes(CompoundTag data, Collection biomes) { - ListTag sections = Helper.tagFromCompound(data, "sections"); + ListTag sections = NbtHelper.tagFromCompound(data, "sections"); if (sections == null) { return false; } @@ -107,7 +107,7 @@ public boolean matchBiomes(CompoundTag data, Collection biomes) { - ListTag sections = Helper.tagFromCompound(data, "sections"); + ListTag sections = NbtHelper.tagFromCompound(data, "sections"); if (sections == null) { return false; } for (BiomeRegistry.BiomeIdentifier identifier : biomes) { for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { - ListTag biomePalette = Helper.tagFromCompound(Helper.tagFromCompound(section, "biomes"), "palette"); + ListTag biomePalette = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(section, "biomes"), "palette"); if (biomePalette == null) { continue; } @@ -147,13 +147,13 @@ public boolean matchAnyBiome(CompoundTag data, Collection replace) { - ListTag sections = Helper.tagFromCompound(data, "sections"); + ListTag sections = NbtHelper.tagFromCompound(data, "sections"); if (sections == null) { return; } - Point2i pos = Helper.point2iFromCompound(data, "xPos", "zPos"); + Point2i pos = NbtHelper.point2iFromCompound(data, "xPos", "zPos"); if (pos == null) { return; } pos = pos.chunkToBlock(); - int yMax = Helper.findHighestSection(sections, -4); + int yMax = NbtHelper.findHighestSection(sections, -4); // handle the special case when someone wants to replace air with something else if (replace.containsKey("minecraft:air")) { @@ -226,15 +226,15 @@ public void replaceBlocks(CompoundTag data, Map replac } } - ListTag tileEntities = Helper.tagFromCompound(data, "block_entities"); + ListTag tileEntities = NbtHelper.tagFromCompound(data, "block_entities"); if (tileEntities == null) { tileEntities = new ListTag(); } for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { CompoundTag blockStatesTag = section.getCompound("block_states"); - ListTag palette = Helper.tagFromCompound(blockStatesTag, "palette"); - long[] blockStates = Helper.longArrayFromCompound(blockStatesTag, "data"); + ListTag palette = NbtHelper.tagFromCompound(blockStatesTag, "palette"); + long[] blockStates = NbtHelper.longArrayFromCompound(blockStatesTag, "data"); if (palette == null) { continue; } @@ -243,7 +243,7 @@ public void replaceBlocks(CompoundTag data, Map replac blockStates = new long[256]; } - int y = Helper.numberFromCompound(section, "Y", -5).intValue(); + int y = NbtHelper.numberFromCompound(section, "Y", -5).intValue(); if (y < -4 || y > yMax) { continue; } @@ -359,7 +359,7 @@ protected CompoundTag completeSection(CompoundTag section, int y) { @Override public int getAverageHeight(CompoundTag data) { - ListTag sections = Helper.tagFromCompound(data, "sections"); + ListTag sections = NbtHelper.tagFromCompound(data, "sections"); if (sections == null) { return 0; } @@ -372,13 +372,13 @@ public int getAverageHeight(CompoundTag data) { zLoop: for (int cz = 0; cz < Tile.CHUNK_SIZE; cz++) { for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = Helper.tagFromCompound(Helper.tagFromCompound(section, "block_states"), "palette"); - long[] blockStates = Helper.longArrayFromCompound(Helper.tagFromCompound(section, "block_states"), "data"); + ListTag palette = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(section, "block_states"), "palette"); + long[] blockStates = NbtHelper.longArrayFromCompound(NbtHelper.tagFromCompound(section, "block_states"), "data"); if (palette == null) { continue; } - Number height = Helper.numberFromCompound(section, "Y", null); + Number height = NbtHelper.numberFromCompound(section, "Y", null); if (height == null) { continue; } @@ -399,7 +399,7 @@ public int getAverageHeight(CompoundTag data) { @Override public int getBlockAmount(CompoundTag data, String[] blocks) { - ListTag sections = Helper.tagFromCompound(data, "sections"); + ListTag sections = NbtHelper.tagFromCompound(data, "sections"); if (sections == null) { return 0; } @@ -407,15 +407,15 @@ public int getBlockAmount(CompoundTag data, String[] blocks) { int result = 0; for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = Helper.tagFromCompound(Helper.tagFromCompound(section, "block_states"), "palette"); - long[] blockStates = Helper.longArrayFromCompound(Helper.tagFromCompound(section, "block_states"), "data"); + ListTag palette = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(section, "block_states"), "palette"); + long[] blockStates = NbtHelper.longArrayFromCompound(NbtHelper.tagFromCompound(section, "block_states"), "data"); if (palette == null) { continue; } for (int i = 0; i < palette.size(); i++) { CompoundTag blockState = palette.getCompound(i); - String name = Helper.stringFromCompound(blockState, "Name"); + String name = NbtHelper.stringFromCompound(blockState, "Name"); if (name == null) { continue; } @@ -438,22 +438,22 @@ public int getBlockAmount(CompoundTag data, String[] blocks) { @Override public ListTag getTileEntities(CompoundTag data) { - return Helper.tagFromCompound(data, "block_entities"); + return NbtHelper.tagFromCompound(data, "block_entities"); } @Override public CompoundTag getStructureReferences(CompoundTag data) { - return Helper.tagFromCompound(Helper.tagFromCompound(data, "structures"), "References"); + return NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(data, "structures"), "References"); } @Override public CompoundTag getStructureStarts(CompoundTag data) { - return Helper.tagFromCompound(Helper.tagFromCompound(data, "structures"), "starts", new CompoundTag()); + return NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(data, "structures"), "starts", new CompoundTag()); } @Override public ListTag getSections(CompoundTag data) { - return Helper.tagFromCompound(data, "sections"); + return NbtHelper.tagFromCompound(data, "sections"); } @Override @@ -462,7 +462,7 @@ public void deleteSections(CompoundTag data, List ranges) { case "light", "spawn", "heightmaps", "full" -> data.putString("Status", "features"); default -> {return;} } - ListTag sections = Helper.tagFromCompound(data, "sections"); + ListTag sections = NbtHelper.tagFromCompound(data, "sections"); if (sections == null) { return; } @@ -490,7 +490,7 @@ private void deleteSection(CompoundTag section) { @Override public LongTag getInhabitedTime(CompoundTag data) { - return Helper.tagFromCompound(data, "InhabitedTime"); + return NbtHelper.tagFromCompound(data, "InhabitedTime"); } @Override @@ -502,7 +502,7 @@ public void setInhabitedTime(CompoundTag data, long inhabitedTime) { @Override public StringTag getStatus(CompoundTag data) { - return Helper.tagFromCompound(data, "Status"); + return NbtHelper.tagFromCompound(data, "Status"); } @Override @@ -514,7 +514,7 @@ public void setStatus(CompoundTag data, String status) { @Override public LongTag getLastUpdate(CompoundTag data) { - return Helper.tagFromCompound(data, "LastUpdate"); + return NbtHelper.tagFromCompound(data, "LastUpdate"); } @Override @@ -526,22 +526,22 @@ public void setLastUpdate(CompoundTag data, long lastUpdate) { @Override public IntTag getXPos(CompoundTag data) { - return Helper.tagFromCompound(data, "xPos"); + return NbtHelper.tagFromCompound(data, "xPos"); } @Override public IntTag getYPos(CompoundTag data) { - return Helper.tagFromCompound(data, "yPos"); + return NbtHelper.tagFromCompound(data, "yPos"); } @Override public IntTag getZPos(CompoundTag data) { - return Helper.tagFromCompound(data, "zPos"); + return NbtHelper.tagFromCompound(data, "zPos"); } @Override public ByteTag getLightPopulated(CompoundTag data) { - return Helper.tagFromCompound(data, "isLightOn"); + return NbtHelper.tagFromCompound(data, "isLightOn"); } @Override @@ -554,9 +554,9 @@ public void setLightPopulated(CompoundTag data, byte lightPopulated) { @Override public void forceBlending(CompoundTag data) { int min = 0, max = 0; - ListTag sections = Helper.tagFromCompound(data, "sections"); + ListTag sections = NbtHelper.tagFromCompound(data, "sections"); for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { - int y = Helper.numberFromCompound(section, "Y", 0).intValue(); + int y = NbtHelper.numberFromCompound(section, "Y", 0).intValue(); min = Math.min(y, min); max = Math.max(y, max); } diff --git a/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkMerger.java index 51722323..35009f53 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkMerger.java @@ -3,7 +3,7 @@ import net.querz.mcaselector.point.Point2i; import net.querz.mcaselector.range.Range; import net.querz.mcaselector.version.ChunkMerger; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; import net.querz.nbt.Tag; @@ -23,17 +23,17 @@ public void mergeChunks(CompoundTag source, CompoundTag destination, List } private void mergeStructures(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - CompoundTag sourceStarts = Helper.tagFromCompound(Helper.tagFromCompound(source, "structures"), "starts", new CompoundTag()); - CompoundTag destinationStarts = Helper.tagFromCompound(Helper.tagFromCompound(destination, "structures"), "starts", new CompoundTag()); + CompoundTag sourceStarts = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(source, "structures"), "starts", new CompoundTag()); + CompoundTag destinationStarts = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(destination, "structures"), "starts", new CompoundTag()); if (destinationStarts.size() != 0) { // remove BBs from destination for (Map.Entry start : destinationStarts) { - ListTag children = Helper.tagFromCompound(start.getValue(), "Children", null); + ListTag children = NbtHelper.tagFromCompound(start.getValue(), "Children", null); if (children != null) { child: for (int i = 0; i < children.size(); i++) { CompoundTag child = children.getCompound(i); - int[] bb = Helper.intArrayFromCompound(child, "BB"); + int[] bb = NbtHelper.intArrayFromCompound(child, "BB"); if (bb != null && bb.length == 6) { for (Range range : ranges) { if (range.contains(bb[1] >> 4 - yOffset) && range.contains(bb[4] >> 4 - yOffset)) { @@ -48,7 +48,7 @@ private void mergeStructures(CompoundTag source, CompoundTag destination, List> 4 - yOffset) && range.contains(bb[4] >> 4 - yOffset)) { @@ -66,30 +66,30 @@ private void mergeStructures(CompoundTag source, CompoundTag destination, List start : sourceStarts) { - ListTag children = Helper.tagFromCompound(start.getValue(), "Children", null); + ListTag children = NbtHelper.tagFromCompound(start.getValue(), "Children", null); if (children != null) { child: for (int i = 0; i < children.size(); i++) { CompoundTag child = children.getCompound(i); - int[] bb = Helper.intArrayFromCompound(child, "BB"); + int[] bb = NbtHelper.intArrayFromCompound(child, "BB"); if (bb == null) { continue; } for (Range range : ranges) { if (range.contains(bb[1] >> 4 - yOffset) || range.contains(bb[4] >> 4 - yOffset)) { - CompoundTag destinationStart = Helper.tagFromCompound(destinationStarts, start.getKey(), null); + CompoundTag destinationStart = NbtHelper.tagFromCompound(destinationStarts, start.getKey(), null); if (destinationStart == null || "INVALID".equals(destinationStart.getString("id"))) { destinationStart = ((CompoundTag) start.getValue()).copy(); // we need to remove the children, we don't want all of them - ListTag clonedDestinationChildren = Helper.tagFromCompound(destinationStart, "Children", null); + ListTag clonedDestinationChildren = NbtHelper.tagFromCompound(destinationStart, "Children", null); if (clonedDestinationChildren != null) { clonedDestinationChildren.clear(); } destinationStarts.put(start.getKey(), destinationStart); } - ListTag destinationChildren = Helper.tagFromCompound(destinationStarts.get(start.getKey()), "Children", null); + ListTag destinationChildren = NbtHelper.tagFromCompound(destinationStarts.get(start.getKey()), "Children", null); if (destinationChildren == null) { destinationChildren = new ListTag(); destinationStart.put("Children", destinationChildren); diff --git a/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkRelocator.java b/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkRelocator.java index 02ab2a6c..182b2d43 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkRelocator.java +++ b/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkRelocator.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.point.Point3i; import net.querz.mcaselector.version.ChunkRelocator; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.mcaselector.version.anvil117.Anvil117EntityRelocator; import net.querz.nbt.*; import java.util.Map; @@ -18,36 +18,36 @@ public boolean relocate(CompoundTag root, Point3i offset) { root.putInt("zPos", root.getInt("zPos") + offset.blockToChunk().getZ()); // adjust tile entity positions - ListTag tileEntities = Helper.tagFromCompound(root, "block_entities"); + ListTag tileEntities = NbtHelper.tagFromCompound(root, "block_entities"); if (tileEntities != null) { tileEntities.forEach(v -> applyOffsetToTileEntity((CompoundTag) v, offset)); } // adjust tile ticks - ListTag tileTicks = Helper.tagFromCompound(root, "block_ticks"); + ListTag tileTicks = NbtHelper.tagFromCompound(root, "block_ticks"); if (tileTicks != null) { tileTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust liquid ticks - ListTag liquidTicks = Helper.tagFromCompound(root, "fluid_ticks"); + ListTag liquidTicks = NbtHelper.tagFromCompound(root, "fluid_ticks"); if (liquidTicks != null) { liquidTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust structures - CompoundTag structures = Helper.tagFromCompound(root, "structures"); + CompoundTag structures = NbtHelper.tagFromCompound(root, "structures"); if (structures != null) { applyOffsetToStructures(structures, offset); } - Helper.applyOffsetToListOfShortTagLists(root, "PostProcessing", offset.blockToSection()); + NbtHelper.applyOffsetToListOfShortTagLists(root, "PostProcessing", offset.blockToSection()); // adjust sections vertically - ListTag sections = Helper.tagFromCompound(root, "sections"); + ListTag sections = NbtHelper.tagFromCompound(root, "sections"); if (sections != null) { ListTag newSections = new ListTag(); - int yMax = Helper.findHighestSection(sections, -4); + int yMax = NbtHelper.findHighestSection(sections, -4); for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { if (applyOffsetToSection(section, offset.blockToSection(), -4, yMax)) { newSections.add(section); @@ -63,7 +63,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / Point3i chunkOffset = offset.blockToChunk(); // update references - CompoundTag references = Helper.tagFromCompound(structures, "References"); + CompoundTag references = NbtHelper.tagFromCompound(structures, "References"); if (references != null) { for (Map.Entry entry : references) { long[] reference = silent(() -> ((LongArrayTag) entry.getValue()).getValue(), null); @@ -78,41 +78,41 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / } // update starts - CompoundTag starts = Helper.tagFromCompound(structures, "starts"); + CompoundTag starts = NbtHelper.tagFromCompound(structures, "starts"); if (starts != null) { for (Map.Entry entry : starts) { CompoundTag structure = silent(() -> (CompoundTag) entry.getValue(), null); - if ("INVALID".equals(Helper.stringFromCompound(structure, "id"))) { + if ("INVALID".equals(NbtHelper.stringFromCompound(structure, "id"))) { continue; } - Helper.applyIntIfPresent(structure, "ChunkX", chunkOffset.getX()); - Helper.applyIntIfPresent(structure, "ChunkZ", chunkOffset.getZ()); - Helper.applyOffsetToBB(Helper.intArrayFromCompound(structure, "BB"), offset); + NbtHelper.applyIntIfPresent(structure, "ChunkX", chunkOffset.getX()); + NbtHelper.applyIntIfPresent(structure, "ChunkZ", chunkOffset.getZ()); + NbtHelper.applyOffsetToBB(NbtHelper.intArrayFromCompound(structure, "BB"), offset); - ListTag processed = Helper.tagFromCompound(structure, "Processed"); + ListTag processed = NbtHelper.tagFromCompound(structure, "Processed"); if (processed != null) { for (CompoundTag chunk : processed.iterateType(CompoundTag.TYPE)) { - Helper.applyIntIfPresent(chunk, "X", chunkOffset.getX()); - Helper.applyIntIfPresent(chunk, "Z", chunkOffset.getZ()); + NbtHelper.applyIntIfPresent(chunk, "X", chunkOffset.getX()); + NbtHelper.applyIntIfPresent(chunk, "Z", chunkOffset.getZ()); } } - ListTag children = Helper.tagFromCompound(structure, "Children"); + ListTag children = NbtHelper.tagFromCompound(structure, "Children"); if (children != null) { for (CompoundTag child : children.iterateType(CompoundTag.TYPE)) { - Helper.applyIntOffsetIfRootPresent(child, "TPX", "TPY", "TPZ", offset); - Helper.applyIntOffsetIfRootPresent(child, "PosX", "PosY", "PosZ", offset); - Helper.applyOffsetToBB(Helper.intArrayFromCompound(child, "BB"), offset); + NbtHelper.applyIntOffsetIfRootPresent(child, "TPX", "TPY", "TPZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(child, "PosX", "PosY", "PosZ", offset); + NbtHelper.applyOffsetToBB(NbtHelper.intArrayFromCompound(child, "BB"), offset); - ListTag entrances = Helper.tagFromCompound(child, "Entrances"); + ListTag entrances = NbtHelper.tagFromCompound(child, "Entrances"); if (entrances != null) { - entrances.forEach(e -> Helper.applyOffsetToBB(((IntArrayTag) e).getValue(), offset)); + entrances.forEach(e -> NbtHelper.applyOffsetToBB(((IntArrayTag) e).getValue(), offset)); } - ListTag junctions = Helper.tagFromCompound(child, "junctions"); + ListTag junctions = NbtHelper.tagFromCompound(child, "junctions"); if (junctions != null) { for (CompoundTag junction : junctions.iterateType(CompoundTag.TYPE)) { - Helper.applyIntOffsetIfRootPresent(junction, "source_x", "source_y", "source_z", offset); + NbtHelper.applyIntOffsetIfRootPresent(junction, "source_x", "source_y", "source_z", offset); } } } @@ -122,7 +122,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset) { / } private void applyOffsetToTick(CompoundTag tick, Point3i offset) { - Helper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tick, "x", "y", "z", offset); } static void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { @@ -130,47 +130,47 @@ static void applyOffsetToTileEntity(CompoundTag tileEntity, Point3i offset) { return; } - Helper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "x", "y", "z", offset); - String id = Helper.stringFromCompound(tileEntity, "id", ""); + String id = NbtHelper.stringFromCompound(tileEntity, "id", ""); switch (id) { case "minecraft:bee_nest": case "minecraft:beehive": - CompoundTag flowerPos = Helper.tagFromCompound(tileEntity, "FlowerPos"); - Helper.applyIntOffsetIfRootPresent(flowerPos, "X", "Y", "Z", offset); - ListTag bees = Helper.tagFromCompound(tileEntity, "Bees"); + CompoundTag flowerPos = NbtHelper.tagFromCompound(tileEntity, "FlowerPos"); + NbtHelper.applyIntOffsetIfRootPresent(flowerPos, "X", "Y", "Z", offset); + ListTag bees = NbtHelper.tagFromCompound(tileEntity, "Bees"); if (bees != null) { for (Tag bee : bees) { - applyOffsetToEntity(Helper.tagFromCompound(bee, "EntityData"), offset); + applyOffsetToEntity(NbtHelper.tagFromCompound(bee, "EntityData"), offset); } } break; case "minecraft:end_gateway": - CompoundTag exitPortal = Helper.tagFromCompound(tileEntity, "ExitPortal"); - Helper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); + CompoundTag exitPortal = NbtHelper.tagFromCompound(tileEntity, "ExitPortal"); + NbtHelper.applyIntOffsetIfRootPresent(exitPortal, "X", "Y", "Z", offset); break; case "minecraft:structure_block": - Helper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); + NbtHelper.applyIntOffsetIfRootPresent(tileEntity, "posX", "posY", "posZ", offset); break; case "minecraft:jukebox": - CompoundTag recordItem = Helper.tagFromCompound(tileEntity, "RecordItem"); + CompoundTag recordItem = NbtHelper.tagFromCompound(tileEntity, "RecordItem"); applyOffsetToItem(recordItem, offset); break; case "minecraft:lectern": // 1.14 - CompoundTag book = Helper.tagFromCompound(tileEntity, "Book"); + CompoundTag book = NbtHelper.tagFromCompound(tileEntity, "Book"); applyOffsetToItem(book, offset); break; case "minecraft:mob_spawner": - ListTag spawnPotentials = Helper.tagFromCompound(tileEntity, "SpawnPotentials"); + ListTag spawnPotentials = NbtHelper.tagFromCompound(tileEntity, "SpawnPotentials"); if (spawnPotentials != null) { for (CompoundTag spawnPotential : spawnPotentials.iterateType(CompoundTag.TYPE)) { - CompoundTag entity = Helper.tagFromCompound(spawnPotential, "Entity"); + CompoundTag entity = NbtHelper.tagFromCompound(spawnPotential, "Entity"); Anvil117EntityRelocator.applyOffsetToEntity(entity, offset); } } } - ListTag items = Helper.tagFromCompound(tileEntity, "Items"); + ListTag items = NbtHelper.tagFromCompound(tileEntity, "Items"); if (items != null) { items.forEach(i -> applyOffsetToItem((CompoundTag) i, offset)); } @@ -181,22 +181,22 @@ static void applyOffsetToItem(CompoundTag item, Point3i offset) { return; } - CompoundTag tag = Helper.tagFromCompound(item, "tag"); + CompoundTag tag = NbtHelper.tagFromCompound(item, "tag"); if (tag == null) { return; } - String id = Helper.stringFromCompound(item, "id", ""); + String id = NbtHelper.stringFromCompound(item, "id", ""); switch (id) { case "minecraft:compass": - CompoundTag lodestonePos = Helper.tagFromCompound(tag, "LodestonePos"); - Helper.applyIntOffsetIfRootPresent(lodestonePos, "X", "Y", "Z", offset); + CompoundTag lodestonePos = NbtHelper.tagFromCompound(tag, "LodestonePos"); + NbtHelper.applyIntOffsetIfRootPresent(lodestonePos, "X", "Y", "Z", offset); break; } // recursively update all items in child containers - CompoundTag blockEntityTag = Helper.tagFromCompound(tag, "BlockEntityTag"); - ListTag items = Helper.tagFromCompound(blockEntityTag, "Items"); + CompoundTag blockEntityTag = NbtHelper.tagFromCompound(tag, "BlockEntityTag"); + ListTag items = NbtHelper.tagFromCompound(blockEntityTag, "Items"); if (items != null) { items.forEach(i -> applyOffsetToItem((CompoundTag) i, offset)); } diff --git a/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkRenderer.java b/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkRenderer.java index a1ce8874..79f6817f 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkRenderer.java +++ b/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkRenderer.java @@ -4,7 +4,7 @@ import net.querz.mcaselector.tile.Tile; import net.querz.mcaselector.version.ChunkRenderer; import net.querz.mcaselector.version.ColorMapping; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; import static net.querz.mcaselector.validation.ValidationHelper.silent; @@ -13,7 +13,7 @@ public class Anvil119ChunkRenderer implements ChunkRenderer { @Override public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, int[] waterPixels, short[] terrainHeights, short[] waterHeights, boolean water, int height) { - ListTag sections = Helper.tagFromCompound(root, "sections"); + ListTag sections = NbtHelper.tagFromCompound(root, "sections"); if (sections == null) { return; } @@ -27,14 +27,14 @@ public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, ListTag[] biomePalettes = new ListTag[sMax]; long[][] biomesArray = new long[sMax][]; sections.forEach(s -> { - ListTag p = Helper.tagFromCompound(Helper.tagFromCompound(s, "block_states"), "palette"); + ListTag p = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(s, "block_states"), "palette"); - int y = Helper.numberFromCompound(s, "Y", -5).intValue(); + int y = NbtHelper.numberFromCompound(s, "Y", -5).intValue(); if (y >= -4 && y < yMax && p != null) { palettes[y + 4] = p; - blockStatesArray[y + 4] = Helper.longArrayFromCompound(Helper.tagFromCompound(s, "block_states"), "data");; - biomePalettes[y + 4] = Helper.tagFromCompound(Helper.tagFromCompound(s, "biomes"), "palette"); - biomesArray[y + 4] = Helper.longArrayFromCompound(Helper.tagFromCompound(s, "biomes"), "data"); + blockStatesArray[y + 4] = NbtHelper.longArrayFromCompound(NbtHelper.tagFromCompound(s, "block_states"), "data");; + biomePalettes[y + 4] = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(s, "biomes"), "palette"); + biomesArray[y + 4] = NbtHelper.longArrayFromCompound(NbtHelper.tagFromCompound(s, "biomes"), "data"); } }); @@ -112,14 +112,14 @@ public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, int height) { - ListTag sections = Helper.tagFromCompound(root, "sections"); + ListTag sections = NbtHelper.tagFromCompound(root, "sections"); if (sections == null) { return; } CompoundTag section = null; for (CompoundTag s : sections.iterateType(CompoundTag.TYPE)) { - int y = Helper.numberFromCompound(s, "Y", -5).intValue(); + int y = NbtHelper.numberFromCompound(s, "Y", -5).intValue(); if (y == height >> 4) { section = s; break; @@ -130,14 +130,14 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, } - ListTag palette = Helper.tagFromCompound(Helper.tagFromCompound(section, "block_states"), "palette"); - long[] blockStates = Helper.longArrayFromCompound(Helper.tagFromCompound(section, "block_states"), "data"); + ListTag palette = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(section, "block_states"), "palette"); + long[] blockStates = NbtHelper.longArrayFromCompound(NbtHelper.tagFromCompound(section, "block_states"), "data"); if (palette == null) { return; } - ListTag biomesPalette = Helper.tagFromCompound(Helper.tagFromCompound(section, "biomes"), "palette"); - long[] biomeIndices = Helper.longArrayFromCompound(Helper.tagFromCompound(section, "biomes"), "data"); + ListTag biomesPalette = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(section, "biomes"), "palette"); + long[] biomeIndices = NbtHelper.longArrayFromCompound(NbtHelper.tagFromCompound(section, "biomes"), "data"); height = height + 64; @@ -167,7 +167,7 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, int scale, int[] pixelBuffer, short[] terrainHeights, int height) { - ListTag sections = Helper.tagFromCompound(root, "sections"); + ListTag sections = NbtHelper.tagFromCompound(root, "sections"); if (sections == null) { return; } @@ -181,14 +181,14 @@ public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, ListTag[] biomePalettes = new ListTag[sMax]; long[][] biomesArray = new long[sMax][]; sections.forEach(s -> { - ListTag p = Helper.tagFromCompound(Helper.tagFromCompound(s, "block_states"), "palette"); + ListTag p = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(s, "block_states"), "palette"); - int y = Helper.numberFromCompound(s, "Y", -5).intValue(); + int y = NbtHelper.numberFromCompound(s, "Y", -5).intValue(); if (y >= -4 && y < yMax && p != null) { palettes[y + 4] = p; - blockStatesArray[y + 4] = Helper.longArrayFromCompound(Helper.tagFromCompound(s, "block_states"), "data"); - biomePalettes[y + 4] = Helper.tagFromCompound(Helper.tagFromCompound(s, "biomes"), "palette"); - biomesArray[y + 4] = Helper.longArrayFromCompound(Helper.tagFromCompound(s, "biomes"), "data"); + blockStatesArray[y + 4] = NbtHelper.longArrayFromCompound(NbtHelper.tagFromCompound(s, "block_states"), "data"); + biomePalettes[y + 4] = NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(s, "biomes"), "palette"); + biomesArray[y + 4] = NbtHelper.longArrayFromCompound(NbtHelper.tagFromCompound(s, "biomes"), "data"); } }); @@ -253,7 +253,7 @@ public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, @Override public CompoundTag minimizeChunk(CompoundTag root) { - Integer dataVersion = Helper.intFromCompound(root, "DataVersion"); + Integer dataVersion = NbtHelper.intFromCompound(root, "DataVersion"); if (dataVersion == null) { return root; } @@ -271,18 +271,18 @@ public CompoundTag minimizeChunk(CompoundTag root) { } private boolean isWater(CompoundTag blockData) { - return switch (Helper.stringFromCompound(blockData, "Name", "")) { + return switch (NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:water", "minecraft:bubble_column" -> true; default -> false; }; } private boolean isWaterlogged(CompoundTag data) { - return data.get("Properties") != null && "true".equals(Helper.stringFromCompound(Helper.tagFromCompound(data, "Properties"), "waterlogged", null)); + return data.get("Properties") != null && "true".equals(NbtHelper.stringFromCompound(NbtHelper.tagFromCompound(data, "Properties"), "waterlogged", null)); } private boolean isEmpty(CompoundTag blockData) { - return switch (Helper.stringFromCompound(blockData, "Name", "")) { + return switch (NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:air", "minecraft:cave_air", "minecraft:barrier", "minecraft:structure_void", "minecraft:light" -> blockData.size() == 1; default -> false; }; @@ -290,7 +290,7 @@ private boolean isEmpty(CompoundTag blockData) { private boolean isEmptyOrFoliage(CompoundTag blockData, ColorMapping colorMapping) { String name; - return switch (name = Helper.stringFromCompound(blockData, "Name", "")) { + return switch (name = NbtHelper.stringFromCompound(blockData, "Name", "")) { case "minecraft:air", "minecraft:cave_air", "minecraft:barrier", "minecraft:structure_void", "minecraft:light", "minecraft:snow" -> blockData.size() == 1; default -> colorMapping.isFoliage(name); }; diff --git a/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ColorMapping.java b/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ColorMapping.java index 0456cd51..b4b13f18 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ColorMapping.java +++ b/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ColorMapping.java @@ -2,7 +2,7 @@ import net.querz.mcaselector.text.TextHelper; import net.querz.mcaselector.version.ColorMapping; -import net.querz.mcaselector.version.Helper; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.StringTag; import net.querz.nbt.Tag; @@ -106,12 +106,12 @@ public int getRGB(Object o, int biome) { @Override public int getRGB(Object o, String biome) { - String name = Helper.stringFromCompound((CompoundTag) o, "Name", ""); + String name = NbtHelper.stringFromCompound((CompoundTag) o, "Name", ""); Object value = mapping.get(name); if (value instanceof Integer) { return applyBiomeTint(name, biome, (int) value); } else if (value instanceof BlockStateMapping) { - int color = ((BlockStateMapping) value).getColor(Helper.tagFromCompound((CompoundTag) o, "Properties")); + int color = ((BlockStateMapping) value).getColor(NbtHelper.tagFromCompound((CompoundTag) o, "Properties")); return applyBiomeTint(name, biome, color); } return 0xFF000000; From 53d443de0aafdb44f9d4ad6483d9583a49e9fb03 Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Sun, 3 Jul 2022 21:43:23 +0200 Subject: [PATCH 02/14] =?UTF-8?q?Rename=20LegacyHelper=20=E2=86=92=20Snaps?= =?UTF-8?q?hot118Helper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../version/anvil118/Anvil118ChunkFilter.java | 70 +++++++++---------- .../version/anvil118/Anvil118ChunkMerger.java | 4 +- .../anvil118/Anvil118ChunkRelocator.java | 16 ++--- .../anvil118/Anvil118ChunkRenderer.java | 24 +++---- .../anvil118/Anvil118EntityFilter.java | 2 +- ...gacyHelper.java => Snapshot118Helper.java} | 5 +- 6 files changed, 61 insertions(+), 60 deletions(-) rename src/main/java/net/querz/mcaselector/version/anvil118/{LegacyHelper.java => Snapshot118Helper.java} (99%) diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkFilter.java b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkFilter.java index 4fd892b2..37a663a6 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkFilter.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkFilter.java @@ -19,7 +19,7 @@ public boolean matchBlockNames(CompoundTag data, Collection names) { return false; } - ListTag sections = LegacyHelper.getSections(data, dataVersion); + ListTag sections = Snapshot118Helper.getSections(data, dataVersion); if (sections == null) { return false; } @@ -28,7 +28,7 @@ public boolean matchBlockNames(CompoundTag data, Collection names) { nameLoop: for (String name : names) { for (CompoundTag t : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = LegacyHelper.getPalette(t, dataVersion); + ListTag palette = Snapshot118Helper.getPalette(t, dataVersion); if (palette == null) { continue; } @@ -50,14 +50,14 @@ public boolean matchAnyBlockName(CompoundTag data, Collection names) { return false; } - ListTag sections = LegacyHelper.getSections(data, dataVersion); + ListTag sections = Snapshot118Helper.getSections(data, dataVersion); if (sections == null) { return false; } for (String name : names) { for (CompoundTag t : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = LegacyHelper.getPalette(t, dataVersion); + ListTag palette = Snapshot118Helper.getPalette(t, dataVersion); if (palette == null) { continue; } @@ -78,14 +78,14 @@ public boolean paletteEquals(CompoundTag data, Collection names) { return false; } - ListTag sections = LegacyHelper.getSections(data, dataVersion); + ListTag sections = Snapshot118Helper.getSections(data, dataVersion); if (sections == null) { return false; } Set blocks = new HashSet<>(); for (CompoundTag t : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = LegacyHelper.getPalette(t, dataVersion); + ListTag palette = Snapshot118Helper.getPalette(t, dataVersion); if (palette == null) { continue; } @@ -118,7 +118,7 @@ public boolean matchBiomes(CompoundTag data, Collection= 2834) { - ListTag sections = LegacyHelper.getSections(data, dataVersion); + ListTag sections = Snapshot118Helper.getSections(data, dataVersion); if (sections == null) { return false; } @@ -168,7 +168,7 @@ public boolean matchAnyBiome(CompoundTag data, Collection= 2834) { - ListTag sections = LegacyHelper.getSections(data, dataVersion); + ListTag sections = Snapshot118Helper.getSections(data, dataVersion); if (sections == null) { return false; } @@ -212,7 +212,7 @@ public void changeBiome(CompoundTag data, BiomeRegistry.BiomeIdentifier biome) { } if (dataVersion >= 2834) { - ListTag sections = LegacyHelper.getSections(data, dataVersion); + ListTag sections = Snapshot118Helper.getSections(data, dataVersion); if (sections == null) { return; } @@ -244,7 +244,7 @@ public void forceBiome(CompoundTag data, BiomeRegistry.BiomeIdentifier biome) { } if (dataVersion >= 2834) { - ListTag sections = LegacyHelper.getSections(data, dataVersion); + ListTag sections = Snapshot118Helper.getSections(data, dataVersion); if (sections == null) { return; } @@ -280,13 +280,13 @@ public void replaceBlocks(CompoundTag data, Map replac return; } - ListTag sections = LegacyHelper.getSections(data, dataVersion); + ListTag sections = Snapshot118Helper.getSections(data, dataVersion); if (sections == null) { return; } if (dataVersion >= 2834) { - Point2i pos = LegacyHelper.getChunkCoordinates(data, dataVersion); + Point2i pos = Snapshot118Helper.getChunkCoordinates(data, dataVersion); if (pos == null) { return; } @@ -323,7 +323,7 @@ public void replaceBlocks(CompoundTag data, Map replac } } - ListTag tileEntities = LegacyHelper.getTileEntities(data, dataVersion); + ListTag tileEntities = Snapshot118Helper.getTileEntities(data, dataVersion); if (tileEntities == null) { tileEntities = new ListTag(); } @@ -398,7 +398,7 @@ public void replaceBlocks(CompoundTag data, Map replac } } - LegacyHelper.putTileEntities(data, tileEntities, dataVersion); + Snapshot118Helper.putTileEntities(data, tileEntities, dataVersion); } else { CompoundTag level = data.getCompound("Level"); @@ -570,7 +570,7 @@ public int getAverageHeight(CompoundTag data) { return 0; } - ListTag sections = LegacyHelper.getSections(data, dataVersion); + ListTag sections = Snapshot118Helper.getSections(data, dataVersion); if (sections == null) { return 0; } @@ -583,8 +583,8 @@ public int getAverageHeight(CompoundTag data) { zLoop: for (int cz = 0; cz < Tile.CHUNK_SIZE; cz++) { for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = LegacyHelper.getPalette(section, dataVersion); - long[] blockStates = LegacyHelper.getBlockStates(section, dataVersion); + ListTag palette = Snapshot118Helper.getPalette(section, dataVersion); + long[] blockStates = Snapshot118Helper.getBlockStates(section, dataVersion); if (palette == null) { continue; } @@ -615,7 +615,7 @@ public int getBlockAmount(CompoundTag data, String[] blocks) { return 0; } - ListTag sections = LegacyHelper.getSections(data, dataVersion); + ListTag sections = Snapshot118Helper.getSections(data, dataVersion); if (sections == null) { return 0; } @@ -623,8 +623,8 @@ public int getBlockAmount(CompoundTag data, String[] blocks) { int result = 0; for (CompoundTag section : sections.iterateType(CompoundTag.TYPE)) { - ListTag palette = LegacyHelper.getPalette(section, dataVersion); - long[] blockStates = LegacyHelper.getBlockStates(section, dataVersion); + ListTag palette = Snapshot118Helper.getPalette(section, dataVersion); + long[] blockStates = Snapshot118Helper.getBlockStates(section, dataVersion); if (palette == null) { continue; } @@ -658,7 +658,7 @@ public ListTag getTileEntities(CompoundTag data) { if (dataVersion == null) { return null; } - return LegacyHelper.getTileEntities(data, dataVersion); + return Snapshot118Helper.getTileEntities(data, dataVersion); } @Override @@ -667,7 +667,7 @@ public CompoundTag getStructureReferences(CompoundTag data) { if (dataVersion == null) { return null; } - CompoundTag structures = LegacyHelper.getStructures(data, dataVersion); + CompoundTag structures = Snapshot118Helper.getStructures(data, dataVersion); return NbtHelper.tagFromCompound(structures, "References"); } @@ -677,7 +677,7 @@ public CompoundTag getStructureStarts(CompoundTag data) { if (dataVersion == null) { return null; } - return LegacyHelper.getStructureStarts(data, dataVersion); + return Snapshot118Helper.getStructureStarts(data, dataVersion); } @Override @@ -686,7 +686,7 @@ public ListTag getSections(CompoundTag data) { if (dataVersion == null) { return null; } - return LegacyHelper.getSections(data, dataVersion); + return Snapshot118Helper.getSections(data, dataVersion); } @Override @@ -735,7 +735,7 @@ public LongTag getInhabitedTime(CompoundTag data) { if (dataVersion == null) { return null; } - return LegacyHelper.getInhabitedTime(data, dataVersion); + return Snapshot118Helper.getInhabitedTime(data, dataVersion); } @Override @@ -744,7 +744,7 @@ public void setInhabitedTime(CompoundTag data, long inhabitedTime) { if (dataVersion == null) { return; } - LegacyHelper.setInhabitedTime(data, inhabitedTime, dataVersion); + Snapshot118Helper.setInhabitedTime(data, inhabitedTime, dataVersion); } @Override @@ -753,7 +753,7 @@ public StringTag getStatus(CompoundTag data) { if (dataVersion == null) { return null; } - return LegacyHelper.getStatus(data, dataVersion); + return Snapshot118Helper.getStatus(data, dataVersion); } @Override @@ -762,7 +762,7 @@ public void setStatus(CompoundTag data, String status) { if (dataVersion == null) { return; } - LegacyHelper.setStatus(data, status, dataVersion); + Snapshot118Helper.setStatus(data, status, dataVersion); } @Override @@ -771,7 +771,7 @@ public LongTag getLastUpdate(CompoundTag data) { if (dataVersion == null) { return null; } - return LegacyHelper.getLastUpdate(data, dataVersion); + return Snapshot118Helper.getLastUpdate(data, dataVersion); } @Override @@ -780,7 +780,7 @@ public void setLastUpdate(CompoundTag data, long lastUpdate) { if (dataVersion == null) { return; } - LegacyHelper.setLastUpdate(data, lastUpdate, dataVersion); + Snapshot118Helper.setLastUpdate(data, lastUpdate, dataVersion); } @Override @@ -789,7 +789,7 @@ public IntTag getXPos(CompoundTag data) { if (dataVersion == null) { return null; } - return LegacyHelper.getXPos(data, dataVersion); + return Snapshot118Helper.getXPos(data, dataVersion); } @Override @@ -798,7 +798,7 @@ public IntTag getYPos(CompoundTag data) { if (dataVersion == null) { return null; } - return LegacyHelper.getYPos(data, dataVersion); + return Snapshot118Helper.getYPos(data, dataVersion); } @Override @@ -807,7 +807,7 @@ public IntTag getZPos(CompoundTag data) { if (dataVersion == null) { return null; } - return LegacyHelper.getZPos(data, dataVersion); + return Snapshot118Helper.getZPos(data, dataVersion); } @Override @@ -816,7 +816,7 @@ public ByteTag getLightPopulated(CompoundTag data) { if (dataVersion == null) { return null; } - return LegacyHelper.getIsLightOn(data, dataVersion); + return Snapshot118Helper.getIsLightOn(data, dataVersion); } @Override @@ -825,7 +825,7 @@ public void setLightPopulated(CompoundTag data, byte lightPopulated) { if (dataVersion == null) { return; } - LegacyHelper.setIsLightOn(data, lightPopulated, dataVersion); + Snapshot118Helper.setIsLightOn(data, lightPopulated, dataVersion); } @Override diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkMerger.java index e785678e..6ee77d87 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkMerger.java @@ -40,8 +40,8 @@ public void mergeChunks(CompoundTag source, CompoundTag destination, List } private void mergeStructures(CompoundTag source, CompoundTag destination, List ranges, int yOffset, int dataVersion) { - CompoundTag sourceStarts = LegacyHelper.getStructureStarts(source, dataVersion); - CompoundTag destinationStarts = LegacyHelper.getStructureStarts(destination, dataVersion); + CompoundTag sourceStarts = Snapshot118Helper.getStructureStarts(source, dataVersion); + CompoundTag destinationStarts = Snapshot118Helper.getStructureStarts(destination, dataVersion); if (destinationStarts.size() != 0) { // remove BBs from destination diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRelocator.java b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRelocator.java index 3a24a169..65d465cc 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRelocator.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRelocator.java @@ -19,28 +19,28 @@ public boolean relocate(CompoundTag root, Point3i offset) { } // adjust or set chunk position - LegacyHelper.applyOffsetToChunkCoordinates(root, offset, dataVersion); + Snapshot118Helper.applyOffsetToChunkCoordinates(root, offset, dataVersion); // adjust tile entity positions - ListTag tileEntities = LegacyHelper.getTileEntities(root, dataVersion); + ListTag tileEntities = Snapshot118Helper.getTileEntities(root, dataVersion); if (tileEntities != null) { tileEntities.forEach(v -> applyOffsetToTileEntity((CompoundTag) v, offset)); } // adjust tile ticks - ListTag tileTicks = LegacyHelper.getTileTicks(root, dataVersion); + ListTag tileTicks = Snapshot118Helper.getTileTicks(root, dataVersion); if (tileTicks != null) { tileTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust liquid ticks - ListTag liquidTicks = LegacyHelper.getLiquidTicks(root, dataVersion); + ListTag liquidTicks = Snapshot118Helper.getLiquidTicks(root, dataVersion); if (liquidTicks != null) { liquidTicks.forEach(v -> applyOffsetToTick((CompoundTag) v, offset)); } // adjust structures - CompoundTag structures = LegacyHelper.getStructures(root, dataVersion); + CompoundTag structures = Snapshot118Helper.getStructures(root, dataVersion); if (structures != null) { applyOffsetToStructures(structures, offset, dataVersion); } @@ -66,7 +66,7 @@ public boolean relocate(CompoundTag root, Point3i offset) { } // adjust sections vertically - ListTag sections = LegacyHelper.getSections(root, dataVersion); + ListTag sections = Snapshot118Helper.getSections(root, dataVersion); if (sections != null) { ListTag newSections = new ListTag(); int yMax = NbtHelper.findHighestSection(sections, -4); @@ -75,7 +75,7 @@ public boolean relocate(CompoundTag root, Point3i offset) { newSections.add(section); } } - LegacyHelper.putSections(root, newSections, dataVersion); + Snapshot118Helper.putSections(root, newSections, dataVersion); } return true; @@ -123,7 +123,7 @@ private void applyOffsetToStructures(CompoundTag structures, Point3i offset, int } // update starts - CompoundTag starts = LegacyHelper.getStructureStartsFromStructures(structures, dataVersion); + CompoundTag starts = Snapshot118Helper.getStructureStartsFromStructures(structures, dataVersion); if (starts != null) { for (Map.Entry entry : starts) { CompoundTag structure = silent(() -> (CompoundTag) entry.getValue(), null); diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRenderer.java b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRenderer.java index 653f4ab4..c431f5e1 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRenderer.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkRenderer.java @@ -18,7 +18,7 @@ public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, return; } - ListTag sections = LegacyHelper.getSections(root, dataVersion); + ListTag sections = Snapshot118Helper.getSections(root, dataVersion); if (sections == null) { return; } @@ -32,8 +32,8 @@ public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, ListTag[] biomePalettes = new ListTag[sMax]; long[][] biomesArray = new long[sMax][]; for (CompoundTag s : sections.iterateType(CompoundTag.TYPE)) { - ListTag p = LegacyHelper.getPalette(s, dataVersion); - long[] b = LegacyHelper.getBlockStates(s, dataVersion); + ListTag p = Snapshot118Helper.getPalette(s, dataVersion); + long[] b = Snapshot118Helper.getBlockStates(s, dataVersion); int y = NbtHelper.numberFromCompound(s, "Y", -5).intValue(); if (y >= -4 && y < yMax && p != null) { @@ -47,7 +47,7 @@ public void drawChunk(CompoundTag root, ColorMapping colorMapping, int x, int z, } } - int[] biomes = LegacyHelper.getLegacyBiomes(root, dataVersion); + int[] biomes = Snapshot118Helper.getLegacyBiomes(root, dataVersion); for (int cx = 0; cx < Tile.CHUNK_SIZE; cx += scale) { zLoop: @@ -135,7 +135,7 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, return; } - ListTag sections = LegacyHelper.getSections(root, dataVersion); + ListTag sections = Snapshot118Helper.getSections(root, dataVersion); if (sections == null) { return; } @@ -155,8 +155,8 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, ListTag biomesPalette = null; long[] biomeIndices = null; - ListTag palette = LegacyHelper.getPalette(section, dataVersion); - long[] blockStates = LegacyHelper.getBlockStates(section, dataVersion); + ListTag palette = Snapshot118Helper.getPalette(section, dataVersion); + long[] blockStates = Snapshot118Helper.getBlockStates(section, dataVersion); if (palette == null) { return; } @@ -166,7 +166,7 @@ public void drawLayer(CompoundTag root, ColorMapping colorMapping, int x, int z, biomeIndices = NbtHelper.longArrayFromCompound(NbtHelper.tagFromCompound(section, "biomes"), "data"); } - int[] biomes = LegacyHelper.getLegacyBiomes(root, dataVersion); + int[] biomes = Snapshot118Helper.getLegacyBiomes(root, dataVersion); height = height + 64; @@ -211,7 +211,7 @@ public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, return; } - ListTag sections = LegacyHelper.getSections(root, dataVersion); + ListTag sections = Snapshot118Helper.getSections(root, dataVersion); if (sections == null) { return; } @@ -225,8 +225,8 @@ public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, ListTag[] biomePalettes = new ListTag[sMax]; long[][] biomesArray = new long[sMax][]; for (CompoundTag s : sections.iterateType(CompoundTag.TYPE)) { - ListTag p = LegacyHelper.getPalette(s, dataVersion); - long[] b = LegacyHelper.getBlockStates(s, dataVersion); + ListTag p = Snapshot118Helper.getPalette(s, dataVersion); + long[] b = Snapshot118Helper.getBlockStates(s, dataVersion); int y = NbtHelper.numberFromCompound(s, "Y", -5).intValue(); if (y >= -4 && y < yMax && p != null) { @@ -240,7 +240,7 @@ public void drawCaves(CompoundTag root, ColorMapping colorMapping, int x, int z, } } - int[] biomes = LegacyHelper.getLegacyBiomes(root, dataVersion); + int[] biomes = Snapshot118Helper.getLegacyBiomes(root, dataVersion); for (int cx = 0; cx < Tile.CHUNK_SIZE; cx += scale) { zLoop: diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118EntityFilter.java b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118EntityFilter.java index 64cc6339..16fe5571 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118EntityFilter.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118EntityFilter.java @@ -17,7 +17,7 @@ public void deleteEntities(ChunkData data, List ranges) { } // delete proto-entities - ListTag protoEntities = LegacyHelper.getProtoEntities(data.region().getData(), data.region().getData().getInt("DataVersion")); + ListTag protoEntities = Snapshot118Helper.getProtoEntities(data.region().getData(), data.region().getData().getInt("DataVersion")); deleteEntities(protoEntities, ranges); } } diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/LegacyHelper.java b/src/main/java/net/querz/mcaselector/version/anvil118/Snapshot118Helper.java similarity index 99% rename from src/main/java/net/querz/mcaselector/version/anvil118/LegacyHelper.java rename to src/main/java/net/querz/mcaselector/version/anvil118/Snapshot118Helper.java index b0ce1bac..44aabf19 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/LegacyHelper.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Snapshot118Helper.java @@ -5,9 +5,9 @@ import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.*; -public final class LegacyHelper { +final class Snapshot118Helper { - private LegacyHelper() {} + private Snapshot118Helper() {} static ListTag getProtoEntities(CompoundTag root, int dataVersion) { if (dataVersion > 2843) { @@ -241,4 +241,5 @@ static void setIsLightOn(CompoundTag root, byte isLightOn, int dataVersion) { } } } + } From 6b8cdbe4be13948a4ad6ba05ae0f48bcfdbe155b Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Sun, 3 Jul 2022 23:45:14 +0200 Subject: [PATCH 03/14] Un-magic number 1.18 snapshots --- .../version/anvil118/Snapshot118Helper.java | 55 ++++++++++--------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/Snapshot118Helper.java b/src/main/java/net/querz/mcaselector/version/anvil118/Snapshot118Helper.java index 44aabf19..542188ff 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/Snapshot118Helper.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Snapshot118Helper.java @@ -7,10 +7,13 @@ final class Snapshot118Helper { + private static final int SNAPSHOT_21w43a = 2844; + private static final int SNAPSHOT_21w37a = 2834; + private Snapshot118Helper() {} static ListTag getProtoEntities(CompoundTag root, int dataVersion) { - if (dataVersion > 2843) { + if (dataVersion >= SNAPSHOT_21w43a) { return NbtHelper.tagFromCompound(root, "entities"); } else { return NbtHelper.tagFromLevelFromRoot(root, "Entities"); @@ -18,7 +21,7 @@ static ListTag getProtoEntities(CompoundTag root, int dataVersion) { } static ListTag getSections(CompoundTag root, int dataVersion) { - if (dataVersion > 2843) { // 21w42a + if (dataVersion >= SNAPSHOT_21w43a) { return NbtHelper.tagFromCompound(root, "sections"); } else { return NbtHelper.getSectionsFromLevelFromRoot(root, "Sections"); @@ -26,7 +29,7 @@ static ListTag getSections(CompoundTag root, int dataVersion) { } static void putSections(CompoundTag root, ListTag sections, int dataVersion) { - if (dataVersion > 2843) { // 21w42a + if (dataVersion >= SNAPSHOT_21w43a) { root.put("sections", sections); } else { root.getCompound("Level").put("Sections", sections); @@ -34,7 +37,7 @@ static void putSections(CompoundTag root, ListTag sections, int dataVersion) { } static ListTag getPalette(CompoundTag section, int dataVersion) { - if (dataVersion >= 2834) { + if (dataVersion >= SNAPSHOT_21w37a) { return NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(section, "block_states"), "palette"); } else { return NbtHelper.tagFromCompound(section, "Palette"); @@ -42,7 +45,7 @@ static ListTag getPalette(CompoundTag section, int dataVersion) { } static long[] getBlockStates(CompoundTag section, int dataVersion) { - if (dataVersion >= 2834) { + if (dataVersion >= SNAPSHOT_21w37a) { return NbtHelper.longArrayFromCompound(NbtHelper.tagFromCompound(section, "block_states"), "data"); } else { return NbtHelper.longArrayFromCompound(section, "BlockStates"); @@ -50,7 +53,7 @@ static long[] getBlockStates(CompoundTag section, int dataVersion) { } static LongTag getInhabitedTime(CompoundTag root, int dataVersion) { - if (dataVersion > 2843) { // 21w42a + if (dataVersion >= SNAPSHOT_21w43a) { return NbtHelper.tagFromCompound(root, "InhabitedTime"); } else { return NbtHelper.tagFromLevelFromRoot(root, "InhabitedTime"); @@ -58,7 +61,7 @@ static LongTag getInhabitedTime(CompoundTag root, int dataVersion) { } static void setInhabitedTime(CompoundTag root, long inhabitedTime, int dataVersion) { - if (dataVersion > 2843) { + if (dataVersion >= SNAPSHOT_21w43a) { if (root != null) { root.putLong("InhabitedTime", inhabitedTime); } @@ -71,7 +74,7 @@ static void setInhabitedTime(CompoundTag root, long inhabitedTime, int dataVersi } static LongTag getLastUpdate(CompoundTag root, int dataVersion) { - if (dataVersion > 2843) { // 21w42a + if (dataVersion >= SNAPSHOT_21w43a) { return NbtHelper.tagFromCompound(root, "LastUpdate"); } else { return NbtHelper.tagFromLevelFromRoot(root, "LastUpdate"); @@ -79,7 +82,7 @@ static LongTag getLastUpdate(CompoundTag root, int dataVersion) { } static void setLastUpdate(CompoundTag root, long lastUpdate, int dataVersion) { - if (dataVersion > 2843) { + if (dataVersion >= SNAPSHOT_21w43a) { if (root != null) { root.putLong("LastUpdate", lastUpdate); } @@ -92,7 +95,7 @@ static void setLastUpdate(CompoundTag root, long lastUpdate, int dataVersion) { } static StringTag getStatus(CompoundTag root, int dataVersion) { - if (dataVersion > 2843) { + if (dataVersion >= SNAPSHOT_21w43a) { return NbtHelper.tagFromCompound(root, "Status"); } else { return NbtHelper.tagFromLevelFromRoot(root, "Status"); @@ -100,7 +103,7 @@ static StringTag getStatus(CompoundTag root, int dataVersion) { } static void setStatus(CompoundTag root, String status, int dataVersion) { - if (dataVersion > 2843) { + if (dataVersion >= SNAPSHOT_21w43a) { if (root != null) { root.putString("Status", status); } @@ -113,7 +116,7 @@ static void setStatus(CompoundTag root, String status, int dataVersion) { } static ListTag getTileEntities(CompoundTag root, int dataVersion) { - if (dataVersion < 2844) { + if (dataVersion < SNAPSHOT_21w43a) { return NbtHelper.tagFromLevelFromRoot(root, "TileEntities"); } else { return NbtHelper.tagFromCompound(root, "block_entities"); @@ -121,7 +124,7 @@ static ListTag getTileEntities(CompoundTag root, int dataVersion) { } static ListTag getTileTicks(CompoundTag root, int dataVersion) { - if (dataVersion < 2844) { + if (dataVersion < SNAPSHOT_21w43a) { return NbtHelper.tagFromLevelFromRoot(root, "TileTicks"); } else { return NbtHelper.tagFromCompound(root, "block_ticks"); @@ -129,7 +132,7 @@ static ListTag getTileTicks(CompoundTag root, int dataVersion) { } static ListTag getLiquidTicks(CompoundTag root, int dataVersion) { - if (dataVersion < 2844) { + if (dataVersion < SNAPSHOT_21w43a) { return NbtHelper.tagFromLevelFromRoot(root, "LiquidTicks"); } else { return NbtHelper.tagFromCompound(root, "fluid_ticks"); @@ -137,7 +140,7 @@ static ListTag getLiquidTicks(CompoundTag root, int dataVersion) { } static void putTileEntities(CompoundTag root, ListTag tileEntities, int dataVersion) { - if (dataVersion < 2844) { + if (dataVersion < SNAPSHOT_21w43a) { root.getCompound("Level").put("TileEntities", tileEntities); } else { root.put("block_entities", tileEntities); @@ -145,7 +148,7 @@ static void putTileEntities(CompoundTag root, ListTag tileEntities, int dataVers } static Point2i getChunkCoordinates(CompoundTag root, int dataVersion) { - if (dataVersion < 2844) { + if (dataVersion < SNAPSHOT_21w43a) { return NbtHelper.point2iFromCompound(NbtHelper.tagFromCompound(root, "Level"), "xPos", "zPos"); } else { return NbtHelper.point2iFromCompound(root, "xPos", "zPos"); @@ -153,7 +156,7 @@ static Point2i getChunkCoordinates(CompoundTag root, int dataVersion) { } static void applyOffsetToChunkCoordinates(CompoundTag root, Point3i offset, int dataVersion) { - if (dataVersion < 2844) { + if (dataVersion < SNAPSHOT_21w43a) { CompoundTag level = NbtHelper.levelFromRoot(root); level.putInt("xPos", level.getInt("xPos") + offset.blockToChunk().getX()); level.putInt("zPos", level.getInt("zPos") + offset.blockToChunk().getZ()); @@ -164,7 +167,7 @@ static void applyOffsetToChunkCoordinates(CompoundTag root, Point3i offset, int } static int[] getLegacyBiomes(CompoundTag root, int dataVersion) { - if (dataVersion < 2844) { // 21w43a + if (dataVersion < SNAPSHOT_21w43a) { IntArrayTag t = NbtHelper.tagFromLevelFromRoot(root, "Biomes"); if (t != null) { return t.getValue(); @@ -174,7 +177,7 @@ static int[] getLegacyBiomes(CompoundTag root, int dataVersion) { } static CompoundTag getStructureStarts(CompoundTag root, int dataVersion) { - if (dataVersion < 2844) { + if (dataVersion < SNAPSHOT_21w43a) { return NbtHelper.tagFromCompound(NbtHelper.tagFromLevelFromRoot(root, "Structures", new CompoundTag()), "Starts", new CompoundTag()); } else { return NbtHelper.tagFromCompound(NbtHelper.tagFromCompound(root, "structures"), "starts", new CompoundTag()); @@ -182,7 +185,7 @@ static CompoundTag getStructureStarts(CompoundTag root, int dataVersion) { } static CompoundTag getStructures(CompoundTag root, int dataVersion) { - if (dataVersion < 2844) { + if (dataVersion < SNAPSHOT_21w43a) { return NbtHelper.tagFromLevelFromRoot(root, "Structures"); } else { return NbtHelper.tagFromCompound(root, "structures"); @@ -190,7 +193,7 @@ static CompoundTag getStructures(CompoundTag root, int dataVersion) { } static CompoundTag getStructureStartsFromStructures(CompoundTag structures, int dataVersion) { - if (dataVersion < 2844) { + if (dataVersion < SNAPSHOT_21w43a) { return NbtHelper.tagFromLevelFromRoot(structures, "Starts"); } else { return NbtHelper.tagFromCompound(structures, "starts"); @@ -198,7 +201,7 @@ static CompoundTag getStructureStartsFromStructures(CompoundTag structures, int } static IntTag getXPos(CompoundTag data, int dataVersion) { - if (dataVersion > 2843) { + if (dataVersion >= SNAPSHOT_21w43a) { return NbtHelper.tagFromCompound(data, "xPos"); } else { return NbtHelper.tagFromLevelFromRoot(data, "xPos"); @@ -206,7 +209,7 @@ static IntTag getXPos(CompoundTag data, int dataVersion) { } static IntTag getYPos(CompoundTag data, int dataVersion) { - if (dataVersion > 2843) { + if (dataVersion >= SNAPSHOT_21w43a) { return NbtHelper.tagFromCompound(data, "yPos"); } else { return null; @@ -214,7 +217,7 @@ static IntTag getYPos(CompoundTag data, int dataVersion) { } static IntTag getZPos(CompoundTag data, int dataVersion) { - if (dataVersion > 2843) { + if (dataVersion >= SNAPSHOT_21w43a) { return NbtHelper.tagFromCompound(data, "zPos"); } else { return NbtHelper.tagFromLevelFromRoot(data, "zPos"); @@ -222,7 +225,7 @@ static IntTag getZPos(CompoundTag data, int dataVersion) { } static ByteTag getIsLightOn(CompoundTag data, int dataVersion) { - if (dataVersion > 2843) { + if (dataVersion >= SNAPSHOT_21w43a) { return NbtHelper.tagFromCompound(data, "isLightOn"); } else { return NbtHelper.tagFromLevelFromRoot(data, "isLightOn"); @@ -230,7 +233,7 @@ static ByteTag getIsLightOn(CompoundTag data, int dataVersion) { } static void setIsLightOn(CompoundTag root, byte isLightOn, int dataVersion) { - if (dataVersion > 2843) { + if (dataVersion >= SNAPSHOT_21w43a) { if (root != null) { root.putByte("isLightOn", isLightOn); } From 8f541e0a793b18eb3fbc8d055d16d0a02f542c34 Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Thu, 14 Jul 2022 02:33:50 +0200 Subject: [PATCH 04/14] Add ChunkData.getDataVersion --- .../changer/fields/BiomeField.java | 4 ++-- .../changer/fields/DataVersionField.java | 2 +- .../changer/fields/DeleteEntitiesField.java | 2 +- .../changer/fields/DeleteSectionsField.java | 4 ++-- .../changer/fields/DeleteStructureField.java | 2 +- .../changer/fields/FixStatusField.java | 2 +- .../changer/fields/ForceBlendField.java | 2 +- .../changer/fields/InhabitedTimeField.java | 6 +++--- .../changer/fields/LastUpdateField.java | 6 +++--- .../changer/fields/LightPopulatedField.java | 6 +++--- .../changer/fields/ReferenceField.java | 2 +- .../changer/fields/ReplaceBlocksField.java | 2 +- .../changer/fields/StatusField.java | 6 +++--- .../filter/filters/BiomeFilter.java | 4 ++-- .../filter/filters/BorderFilter.java | 2 +- .../filter/filters/CircleFilter.java | 2 +- .../filter/filters/DataVersionFilter.java | 2 +- .../filter/filters/EntityAmountFilter.java | 10 +--------- .../filter/filters/EntityFilter.java | 12 ++---------- .../filter/filters/InhabitedTimeFilter.java | 2 +- .../filter/filters/LastUpdateFilter.java | 2 +- .../filter/filters/LightPopulatedFilter.java | 2 +- .../filter/filters/PaletteFilter.java | 6 +++--- .../filter/filters/PlayerLocationFilter.java | 2 +- .../filter/filters/StatusFilter.java | 2 +- .../filter/filters/StructureFilter.java | 4 ++-- .../filters/TileEntityAmountFilter.java | 2 +- .../filter/filters/XPosFilter.java | 2 +- .../filter/filters/YPosFilter.java | 2 +- .../filter/filters/ZPosFilter.java | 2 +- .../net/querz/mcaselector/io/mca/Chunk.java | 6 +++++- .../querz/mcaselector/io/mca/ChunkData.java | 19 +++++++++++++++++++ .../net/querz/mcaselector/io/mca/MCAFile.java | 4 ++-- .../mcaselector/io/mca/RegionMCAFile.java | 2 +- .../overlays/AverageHeightOverlay.java | 2 +- .../overlay/overlays/BlockAmountOverlay.java | 2 +- .../overlay/overlays/DataVersionOverlay.java | 2 +- .../overlay/overlays/EntityAmountOverlay.java | 2 +- .../overlays/InhabitedTimeOverlay.java | 2 +- .../overlay/overlays/LastUpdateOverlay.java | 2 +- .../overlays/TileEntityAmountOverlay.java | 2 +- .../net/querz/mcaselector/tile/TileImage.java | 2 +- .../anvil118/Anvil118EntityFilter.java | 2 +- 43 files changed, 81 insertions(+), 74 deletions(-) diff --git a/src/main/java/net/querz/mcaselector/changer/fields/BiomeField.java b/src/main/java/net/querz/mcaselector/changer/fields/BiomeField.java index f1194cfc..617f868d 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/BiomeField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/BiomeField.java @@ -57,11 +57,11 @@ public BiomeRegistry.BiomeIdentifier getOldValue(ChunkData data) { @Override public void change(ChunkData data) { - VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")).changeBiome(data.region().getData(), getNewValue()); + VersionController.getChunkFilter(data.getDataVersion()).changeBiome(data.region().getData(), getNewValue()); } @Override public void force(ChunkData data) { - VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")).forceBiome(data.region().getData(), getNewValue()); + VersionController.getChunkFilter(data.getDataVersion()).forceBiome(data.region().getData(), getNewValue()); } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/DataVersionField.java b/src/main/java/net/querz/mcaselector/changer/fields/DataVersionField.java index 44c07eed..912d8dfe 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/DataVersionField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/DataVersionField.java @@ -14,7 +14,7 @@ public DataVersionField() { @Override public Integer getOldValue(ChunkData data) { - return ValidationHelper.withDefault(() -> data.region().getData().getInt("DataVersion"), null); + return ValidationHelper.withDefault(data::getDataVersion, null); } @Override diff --git a/src/main/java/net/querz/mcaselector/changer/fields/DeleteEntitiesField.java b/src/main/java/net/querz/mcaselector/changer/fields/DeleteEntitiesField.java index 7c12e8cb..13e6938d 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/DeleteEntitiesField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/DeleteEntitiesField.java @@ -27,7 +27,7 @@ public boolean parseNewValue(String s) { @Override public void change(ChunkData data) { - VersionController.getEntityFilter(data.region().getData().getInt("DataVersion")).deleteEntities(data, null); + VersionController.getEntityFilter(data.getDataVersion()).deleteEntities(data, null); } @Override diff --git a/src/main/java/net/querz/mcaselector/changer/fields/DeleteSectionsField.java b/src/main/java/net/querz/mcaselector/changer/fields/DeleteSectionsField.java index 7c286b34..48d85f9c 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/DeleteSectionsField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/DeleteSectionsField.java @@ -40,12 +40,12 @@ public boolean parseNewValue(String s) { @Override public void change(ChunkData data) { if (data.region() != null && data.region().getData() != null) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); chunkFilter.deleteSections(data.region().getData(), getNewValue()); } // delete entities and poi as well if (data.entities() != null && data.entities().getData() != null) { - EntityFilter entityFilter = VersionController.getEntityFilter(data.entities().getData().getInt("DataVersion")); + EntityFilter entityFilter = VersionController.getEntityFilter(data.getDataVersion()); entityFilter.deleteEntities(data, getNewValue()); } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/DeleteStructureField.java b/src/main/java/net/querz/mcaselector/changer/fields/DeleteStructureField.java index f6cd6734..3fa01186 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/DeleteStructureField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/DeleteStructureField.java @@ -52,7 +52,7 @@ public boolean parseNewValue(String s) { @Override public void change(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); CompoundTag references = chunkFilter.getStructureReferences(data.region().getData()); CompoundTag starts = chunkFilter.getStructureStarts(data.region().getData()); for (String structure : getNewValue()) { diff --git a/src/main/java/net/querz/mcaselector/changer/fields/FixStatusField.java b/src/main/java/net/querz/mcaselector/changer/fields/FixStatusField.java index 8aee899e..40786545 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/FixStatusField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/FixStatusField.java @@ -30,7 +30,7 @@ public boolean parseNewValue(String s) { @Override public void change(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); StringTag status = chunkFilter.getStatus(data.region().getData()); if ("empty".equals(status.getValue())) { diff --git a/src/main/java/net/querz/mcaselector/changer/fields/ForceBlendField.java b/src/main/java/net/querz/mcaselector/changer/fields/ForceBlendField.java index e25d7082..0f54be2a 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/ForceBlendField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/ForceBlendField.java @@ -28,7 +28,7 @@ public boolean parseNewValue(String s) { @Override public void change(ChunkData root) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(root.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(root.getDataVersion()); chunkFilter.forceBlending(root.region().getData()); } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/InhabitedTimeField.java b/src/main/java/net/querz/mcaselector/changer/fields/InhabitedTimeField.java index ba6d0f81..b0424bf9 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/InhabitedTimeField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/InhabitedTimeField.java @@ -15,7 +15,7 @@ public InhabitedTimeField() { @Override public Long getOldValue(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); LongTag inhabitedTime = chunkFilter.getInhabitedTime(data.region().getData()); return inhabitedTime == null ? null : inhabitedTime.asLong(); } @@ -32,7 +32,7 @@ public boolean parseNewValue(String s) { @Override public void change(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); LongTag tag = chunkFilter.getInhabitedTime(data.region().getData()); if (tag != null) { chunkFilter.setInhabitedTime(data.region().getData(), getNewValue()); @@ -41,7 +41,7 @@ public void change(ChunkData data) { @Override public void force(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); chunkFilter.setInhabitedTime(data.region().getData(), getNewValue()); } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/LastUpdateField.java b/src/main/java/net/querz/mcaselector/changer/fields/LastUpdateField.java index a399b109..bfd87671 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/LastUpdateField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/LastUpdateField.java @@ -15,7 +15,7 @@ public LastUpdateField() { @Override public Long getOldValue(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); LongTag lastUpdate = chunkFilter.getLastUpdate(data.region().getData()); return lastUpdate == null ? null : lastUpdate.asLong(); } @@ -32,7 +32,7 @@ public boolean parseNewValue(String s) { @Override public void change(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); LongTag tag = chunkFilter.getLastUpdate(data.region().getData()); if (tag != null) { chunkFilter.setLastUpdate(data.region().getData(), getNewValue()); @@ -41,7 +41,7 @@ public void change(ChunkData data) { @Override public void force(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); chunkFilter.setLastUpdate(data.region().getData(), getNewValue()); } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/LightPopulatedField.java b/src/main/java/net/querz/mcaselector/changer/fields/LightPopulatedField.java index f80131f6..5413402c 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/LightPopulatedField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/LightPopulatedField.java @@ -15,7 +15,7 @@ public LightPopulatedField() { @Override public Byte getOldValue(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); ByteTag lightPopulated = chunkFilter.getLightPopulated(data.region().getData()); return lightPopulated == null ? null : lightPopulated.asByte(); } @@ -35,7 +35,7 @@ public boolean parseNewValue(String s) { @Override public void change(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); ByteTag tag = chunkFilter.getLightPopulated(data.region().getData()); if (tag != null) { chunkFilter.setLightPopulated(data.region().getData(), getNewValue()); @@ -44,7 +44,7 @@ public void change(ChunkData data) { @Override public void force(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); chunkFilter.setLightPopulated(data.region().getData(), getNewValue()); } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/ReferenceField.java b/src/main/java/net/querz/mcaselector/changer/fields/ReferenceField.java index 9eb9b9d4..c68970d7 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/ReferenceField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/ReferenceField.java @@ -38,7 +38,7 @@ public void change(ChunkData data) { // attempt to fix chunk coordinates of structure references - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); CompoundTag references = chunkFilter.getStructureReferences(data.region().getData()); int xPos = chunkFilter.getXPos(data.region().getData()).asInt(); int zPos = chunkFilter.getZPos(data.region().getData()).asInt(); diff --git a/src/main/java/net/querz/mcaselector/changer/fields/ReplaceBlocksField.java b/src/main/java/net/querz/mcaselector/changer/fields/ReplaceBlocksField.java index b218fbd1..92c769d3 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/ReplaceBlocksField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/ReplaceBlocksField.java @@ -180,7 +180,7 @@ public Map getOldValue(ChunkData data) { @Override public void change(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); chunkFilter.replaceBlocks(data.region().getData(), getNewValue()); } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/StatusField.java b/src/main/java/net/querz/mcaselector/changer/fields/StatusField.java index 39a62f0b..05e91d49 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/StatusField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/StatusField.java @@ -40,7 +40,7 @@ public StatusField() { @Override public String getOldValue(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); StringTag status = chunkFilter.getStatus(data.region().getData()); return status == null ? null : status.getValue(); } @@ -56,7 +56,7 @@ public boolean parseNewValue(String s) { @Override public void change(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); StringTag tag = chunkFilter.getStatus(data.region().getData()); if (tag != null) { chunkFilter.setStatus(data.region().getData(), getNewValue()); @@ -65,7 +65,7 @@ public void change(ChunkData data) { @Override public void force(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); chunkFilter.setStatus(data.region().getData(), getNewValue()); } } diff --git a/src/main/java/net/querz/mcaselector/filter/filters/BiomeFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/BiomeFilter.java index 42fd42ac..6727decd 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/BiomeFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/BiomeFilter.java @@ -38,7 +38,7 @@ public boolean contains(List value, ChunkData dat if (data.region() == null) { return false; } - return VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")) + return VersionController.getChunkFilter(data.getDataVersion()) .matchBiomes(data.region().getData(), value); } @@ -52,7 +52,7 @@ public boolean intersects(List value, ChunkData d if (data.region() == null) { return false; } - return VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")) + return VersionController.getChunkFilter(data.getDataVersion()) .matchAnyBiome(data.region().getData(), value); } diff --git a/src/main/java/net/querz/mcaselector/filter/filters/BorderFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/BorderFilter.java index c446041f..83d78767 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/BorderFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/BorderFilter.java @@ -46,7 +46,7 @@ protected Integer getNumber(ChunkData data) { return 9; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); StringTag tag = chunkFilter.getStatus(data.region().getData()); if (tag == null || !tag.getValue().equals("full")) { return 9; diff --git a/src/main/java/net/querz/mcaselector/filter/filters/CircleFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/CircleFilter.java index ed35a64f..effb7235 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/CircleFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/CircleFilter.java @@ -86,7 +86,7 @@ public boolean contains(List value, ChunkData data) { return false; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); IntTag xPos = chunkFilter.getXPos(data.region().getData()); IntTag zPos = chunkFilter.getZPos(data.region().getData()); if (xPos == null || zPos == null) { diff --git a/src/main/java/net/querz/mcaselector/filter/filters/DataVersionFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/DataVersionFilter.java index f87dda05..2e427580 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/DataVersionFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/DataVersionFilter.java @@ -21,7 +21,7 @@ protected Integer getNumber(ChunkData data) { if (data.region() == null || data.region().getData() == null) { return 0; } - return data.region().getData().getInt("DataVersion"); + return data.getDataVersion(); } @Override diff --git a/src/main/java/net/querz/mcaselector/filter/filters/EntityAmountFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/EntityAmountFilter.java index f083684d..e003becf 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/EntityAmountFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/EntityAmountFilter.java @@ -21,15 +21,7 @@ private EntityAmountFilter(Operator operator, Comparator comparator, int value) @Override protected Integer getNumber(ChunkData data) { - int dataVersion; - if (data.region() != null && data.region().getData() != null) { - dataVersion = data.region().getData().getInt("DataVersion"); - } else if (data.entities() != null && data.entities().getData() != null) { - dataVersion = data.entities().getData().getInt("DataVersion"); - } else { - return 0; - } - EntityFilter entityFilter = VersionController.getEntityFilter(dataVersion); + EntityFilter entityFilter = VersionController.getEntityFilter(data.getDataVersion()); ListTag entities = entityFilter.getEntities(data); if (entities == null) { return 0; diff --git a/src/main/java/net/querz/mcaselector/filter/filters/EntityFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/EntityFilter.java index 98cdf7e8..8e4ec299 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/EntityFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/EntityFilter.java @@ -54,15 +54,7 @@ private EntityFilter(Operator operator, Comparator comparator, List valu @Override public boolean contains(List value, ChunkData data) { - int dataVersion; - if (data.region() != null && data.region().getData() != null) { - dataVersion = data.region().getData().getInt("DataVersion"); - } else if (data.entities() != null && data.entities().getData() != null) { - dataVersion = data.entities().getData().getInt("DataVersion"); - } else { - return false; - } - ListTag entities = VersionController.getEntityFilter(dataVersion).getEntities(data); + ListTag entities = VersionController.getEntityFilter(data.getDataVersion()).getEntities(data); if (entities == null || entities.getID() == Tag.LONG_ARRAY) { return false; } @@ -84,7 +76,7 @@ public boolean intersects(List value, ChunkData data) { if (data.region() == null || data.region().getData() == null) { return false; } - ListTag entities = VersionController.getEntityFilter(data.region().getData().getInt("DataVersion")).getEntities(data); + ListTag entities = VersionController.getEntityFilter(data.getDataVersion()).getEntities(data); if (entities == null || entities.getID() == Tag.LONG_ARRAY) { return false; } diff --git a/src/main/java/net/querz/mcaselector/filter/filters/InhabitedTimeFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/InhabitedTimeFilter.java index bb773f74..027a9aa2 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/InhabitedTimeFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/InhabitedTimeFilter.java @@ -25,7 +25,7 @@ protected Long getNumber(ChunkData data) { if (data.region() == null || data.region().getData() == null) { return 0L; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); LongTag tag = chunkFilter.getInhabitedTime(data.region().getData()); return tag == null ? 0L : tag.asLong(); } diff --git a/src/main/java/net/querz/mcaselector/filter/filters/LastUpdateFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/LastUpdateFilter.java index e409796c..4b864be6 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/LastUpdateFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/LastUpdateFilter.java @@ -25,7 +25,7 @@ protected Long getNumber(ChunkData data) { if (data.region() == null || data.region().getData() == null) { return 0L; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); LongTag tag = chunkFilter.getLastUpdate(data.region().getData()); return tag == null ? 0L : tag.asLong(); } diff --git a/src/main/java/net/querz/mcaselector/filter/filters/LightPopulatedFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/LightPopulatedFilter.java index 6229906c..9ea99ebe 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/LightPopulatedFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/LightPopulatedFilter.java @@ -34,7 +34,7 @@ protected Byte getNumber(ChunkData data) { if (data.region() == null || data.region().getData() == null) { return 0; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); ByteTag tag = chunkFilter.getLightPopulated(data.region().getData()); return tag == null ? 0 : tag.asByte(); } diff --git a/src/main/java/net/querz/mcaselector/filter/filters/PaletteFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/PaletteFilter.java index c2bc69b2..53ec2837 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/PaletteFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/PaletteFilter.java @@ -52,7 +52,7 @@ public boolean contains(List value, ChunkData data) { if (data.region() == null || data.region().getData() == null) { return false; } - return VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")) + return VersionController.getChunkFilter(data.getDataVersion()) .matchBlockNames(data.region().getData(), value); } @@ -66,7 +66,7 @@ public boolean intersects(List value, ChunkData data) { if (data.region() == null || data.region().getData() == null) { return false; } - return VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")) + return VersionController.getChunkFilter(data.getDataVersion()) .matchAnyBlockName(data.region().getData(), value); } @@ -74,7 +74,7 @@ public boolean equals(List value, ChunkData data) { if (data.region() == null || data.region().getData() == null) { return false; } - return VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")) + return VersionController.getChunkFilter(data.getDataVersion()) .paletteEquals(data.region().getData(), value); } diff --git a/src/main/java/net/querz/mcaselector/filter/filters/PlayerLocationFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/PlayerLocationFilter.java index aafc38f8..fda66eb1 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/PlayerLocationFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/PlayerLocationFilter.java @@ -107,7 +107,7 @@ public boolean contains(PlayerLocationFilterDefinition value, ChunkData data) { } } - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); IntTag xPos = chunkFilter.getXPos(data.region().getData()); IntTag zPos = chunkFilter.getZPos(data.region().getData()); if (xPos == null || zPos == null) { diff --git a/src/main/java/net/querz/mcaselector/filter/filters/StatusFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/StatusFilter.java index f6aaa785..8c93611a 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/StatusFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/StatusFilter.java @@ -71,7 +71,7 @@ public boolean isEqual(String value, ChunkData data) { if (data.region() == null || data.region().getData() == null) { return false; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); StringTag tag = chunkFilter.getStatus(data.region().getData()); return tag != null && value.equals(tag.getValue()); } diff --git a/src/main/java/net/querz/mcaselector/filter/filters/StructureFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/StructureFilter.java index b451c697..c9e1dd34 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/StructureFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/StructureFilter.java @@ -27,7 +27,7 @@ public boolean contains(List value, ChunkData data) { if (data.region() == null || data.region().getData() == null) { return false; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); CompoundTag references = chunkFilter.getStructureReferences(data.region().getData()); if (references == null) { return false; @@ -56,7 +56,7 @@ public boolean intersects(List value, ChunkData data) { if (data.region() == null || data.region().getData() == null) { return false; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); CompoundTag references = chunkFilter.getStructureReferences(data.region().getData()); if (references == null) { return false; diff --git a/src/main/java/net/querz/mcaselector/filter/filters/TileEntityAmountFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/TileEntityAmountFilter.java index f5368cf4..fcb8e590 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/TileEntityAmountFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/TileEntityAmountFilter.java @@ -24,7 +24,7 @@ protected Integer getNumber(ChunkData data) { if (data.region() == null || data.region().getData() == null) { return 0; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); ListTag tileEntities = chunkFilter.getTileEntities(data.region().getData()); return tileEntities == null ? 0 : tileEntities.size(); } diff --git a/src/main/java/net/querz/mcaselector/filter/filters/XPosFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/XPosFilter.java index 40c2ef13..30616563 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/XPosFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/XPosFilter.java @@ -22,7 +22,7 @@ protected Integer getNumber(ChunkData data) { if (data.region() == null || data.region().getData() == null) { return null; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); IntTag tag = chunkFilter.getXPos(data.region().getData()); return tag.asInt(); } diff --git a/src/main/java/net/querz/mcaselector/filter/filters/YPosFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/YPosFilter.java index ab21855b..86e05062 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/YPosFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/YPosFilter.java @@ -24,7 +24,7 @@ protected Integer getNumber(ChunkData data) { if (data.region() == null || data.region().getData() == null) { return null; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); IntTag tag = chunkFilter.getYPos(data.region().getData()); return tag.asInt(); } diff --git a/src/main/java/net/querz/mcaselector/filter/filters/ZPosFilter.java b/src/main/java/net/querz/mcaselector/filter/filters/ZPosFilter.java index 1ac0231f..e4dbbcad 100644 --- a/src/main/java/net/querz/mcaselector/filter/filters/ZPosFilter.java +++ b/src/main/java/net/querz/mcaselector/filter/filters/ZPosFilter.java @@ -22,7 +22,7 @@ protected Integer getNumber(ChunkData data) { if (data.region() == null || data.region().getData() == null) { return null; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); IntTag tag = chunkFilter.getZPos(data.region().getData()); return tag.asInt(); } diff --git a/src/main/java/net/querz/mcaselector/io/mca/Chunk.java b/src/main/java/net/querz/mcaselector/io/mca/Chunk.java index f9bbd59e..d3f46b31 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/Chunk.java +++ b/src/main/java/net/querz/mcaselector/io/mca/Chunk.java @@ -97,7 +97,7 @@ public int save(RandomAccessFile raf) throws IOException { // save mcc file if chunk doesn't fit in mca file if (baos.size() > 1048576) { // if the chunk's version is below 2203, we throw an exception instead - Integer dataVersion = ValidationHelper.withDefault(() -> data.getInt("DataVersion"), null); + Integer dataVersion = ValidationHelper.withDefault(this::getDataVersion, null); if (dataVersion == null) { throw new RuntimeException("no DataVersion for oversized chunk"); } @@ -137,6 +137,10 @@ public void setData(CompoundTag data) { this.data = data; } + public int getDataVersion() { + return data.getInt("DataVersion"); + } + public CompressionType getCompressionType() { return compressionType; } diff --git a/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java b/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java index bc7143aa..9d09c934 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java +++ b/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java @@ -4,6 +4,8 @@ import net.querz.mcaselector.point.Point2i; import net.querz.mcaselector.point.Point3i; import net.querz.mcaselector.overlay.Overlay; +import net.querz.nbt.CompoundTag; + import java.util.List; public record ChunkData(RegionChunk region, PoiChunk poi, EntitiesChunk entities) { @@ -35,4 +37,21 @@ public void applyFieldChanges(List> fields, boolean force) { public int parseData(Overlay parser) { return parser.parseValue(this); } + + public int getDataVersion() { + Chunk source; + + if (region != null && region.getData() != null) { + source = region; + } else if (entities != null && entities.getData() != null) { + source = entities; + } else { + // MAINTAINER why not check poi data? + // MAINTAINER fail fast? + return 0; + } + + return source.getData().getInt("DataVersion"); + } + } diff --git a/src/main/java/net/querz/mcaselector/io/mca/MCAFile.java b/src/main/java/net/querz/mcaselector/io/mca/MCAFile.java index 14a93ddc..80a238f3 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/MCAFile.java +++ b/src/main/java/net/querz/mcaselector/io/mca/MCAFile.java @@ -450,7 +450,7 @@ protected void mergeChunksInto(MCAFile destination, Point3i offset, boolean o } if (ranges != null) { - int sourceVersion = sourceChunk.getData().getInt("DataVersion"); + int sourceVersion = sourceChunk.getDataVersion(); if (sourceVersion == 0) { continue; } @@ -459,7 +459,7 @@ protected void mergeChunksInto(MCAFile destination, Point3i offset, boolean o if (destinationChunk == null || destinationChunk.isEmpty()) { destinationChunk = chunkCreator.apply(destChunk, sourceVersion); destination.chunks[destIndex] = destinationChunk; - } else if (sourceVersion != (destinationVersion = destinationChunk.getData().getInt("DataVersion"))) { + } else if (sourceVersion != (destinationVersion = destinationChunk.getDataVersion())) { Point2i srcChunk = location.regionToChunk().add(x, z); LOGGER.warn("failed to merge chunk at {} into chunk at {} because their DataVersion does not match ({} != {})", srcChunk, destChunk, sourceVersion, destinationVersion); diff --git a/src/main/java/net/querz/mcaselector/io/mca/RegionMCAFile.java b/src/main/java/net/querz/mcaselector/io/mca/RegionMCAFile.java index e40a0141..38d44585 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/RegionMCAFile.java +++ b/src/main/java/net/querz/mcaselector/io/mca/RegionMCAFile.java @@ -49,7 +49,7 @@ public RegionMCAFile minimizeForRendering() { } try { - ChunkRenderer chunkRenderer = VersionController.getChunkRenderer(chunk.data.getInt("DataVersion")); + ChunkRenderer chunkRenderer = VersionController.getChunkRenderer(chunk.getDataVersion()); CompoundTag minData = chunkRenderer.minimizeChunk(chunk.data); RegionChunk minChunk = new RegionChunk(chunk.absoluteLocation.clone()); diff --git a/src/main/java/net/querz/mcaselector/overlay/overlays/AverageHeightOverlay.java b/src/main/java/net/querz/mcaselector/overlay/overlays/AverageHeightOverlay.java index e5a79941..d9a4653d 100644 --- a/src/main/java/net/querz/mcaselector/overlay/overlays/AverageHeightOverlay.java +++ b/src/main/java/net/querz/mcaselector/overlay/overlays/AverageHeightOverlay.java @@ -20,7 +20,7 @@ public int parseValue(ChunkData chunkData) { if (chunkData.region() == null || chunkData.region().getData() == null) { return 0; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(chunkData.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(chunkData.getDataVersion()); return chunkFilter.getAverageHeight(chunkData.region().getData()); } diff --git a/src/main/java/net/querz/mcaselector/overlay/overlays/BlockAmountOverlay.java b/src/main/java/net/querz/mcaselector/overlay/overlays/BlockAmountOverlay.java index d65c7e2f..d22b9385 100644 --- a/src/main/java/net/querz/mcaselector/overlay/overlays/BlockAmountOverlay.java +++ b/src/main/java/net/querz/mcaselector/overlay/overlays/BlockAmountOverlay.java @@ -22,7 +22,7 @@ public int parseValue(ChunkData chunkData) { if (chunkData.region() == null || chunkData.region().getData() == null) { return 0; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(chunkData.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(chunkData.getDataVersion()); return chunkFilter.getBlockAmount(chunkData.region().getData(), multiValues()); } diff --git a/src/main/java/net/querz/mcaselector/overlay/overlays/DataVersionOverlay.java b/src/main/java/net/querz/mcaselector/overlay/overlays/DataVersionOverlay.java index c6789d64..1cf65124 100644 --- a/src/main/java/net/querz/mcaselector/overlay/overlays/DataVersionOverlay.java +++ b/src/main/java/net/querz/mcaselector/overlay/overlays/DataVersionOverlay.java @@ -15,7 +15,7 @@ public int parseValue(ChunkData chunkData) { if (chunkData.region() == null || chunkData.region().getData() == null) { return 0; } - return chunkData.region().getData().getInt("DataVersion"); + return chunkData.getDataVersion(); } @Override diff --git a/src/main/java/net/querz/mcaselector/overlay/overlays/EntityAmountOverlay.java b/src/main/java/net/querz/mcaselector/overlay/overlays/EntityAmountOverlay.java index 3a499695..dd08114f 100644 --- a/src/main/java/net/querz/mcaselector/overlay/overlays/EntityAmountOverlay.java +++ b/src/main/java/net/querz/mcaselector/overlay/overlays/EntityAmountOverlay.java @@ -18,7 +18,7 @@ public int parseValue(ChunkData chunkData) { if (chunkData.region() == null || chunkData.region().getData() == null) { return 0; } - EntityFilter entityFilter = VersionController.getEntityFilter(chunkData.region().getData().getInt("DataVersion")); + EntityFilter entityFilter = VersionController.getEntityFilter(chunkData.getDataVersion()); ListTag entities = entityFilter.getEntities(chunkData); return entities == null ? 0 : entities.size(); } diff --git a/src/main/java/net/querz/mcaselector/overlay/overlays/InhabitedTimeOverlay.java b/src/main/java/net/querz/mcaselector/overlay/overlays/InhabitedTimeOverlay.java index 948524aa..458b27f5 100644 --- a/src/main/java/net/querz/mcaselector/overlay/overlays/InhabitedTimeOverlay.java +++ b/src/main/java/net/querz/mcaselector/overlay/overlays/InhabitedTimeOverlay.java @@ -21,7 +21,7 @@ public InhabitedTimeOverlay() { @Override public int parseValue(ChunkData chunkData) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(chunkData.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(chunkData.getDataVersion()); LongTag tag = chunkFilter.getInhabitedTime(chunkData.region().getData()); return tag == null ? 0 : tag.asInt(); } diff --git a/src/main/java/net/querz/mcaselector/overlay/overlays/LastUpdateOverlay.java b/src/main/java/net/querz/mcaselector/overlay/overlays/LastUpdateOverlay.java index 6dbe84eb..7da326da 100644 --- a/src/main/java/net/querz/mcaselector/overlay/overlays/LastUpdateOverlay.java +++ b/src/main/java/net/querz/mcaselector/overlay/overlays/LastUpdateOverlay.java @@ -21,7 +21,7 @@ public LastUpdateOverlay() { @Override public int parseValue(ChunkData chunkData) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(chunkData.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(chunkData.getDataVersion()); LongTag tag = chunkFilter.getLastUpdate(chunkData.region().getData()); return tag == null ? 0 : tag.asInt(); } diff --git a/src/main/java/net/querz/mcaselector/overlay/overlays/TileEntityAmountOverlay.java b/src/main/java/net/querz/mcaselector/overlay/overlays/TileEntityAmountOverlay.java index b6ab5fd0..531a8f4f 100644 --- a/src/main/java/net/querz/mcaselector/overlay/overlays/TileEntityAmountOverlay.java +++ b/src/main/java/net/querz/mcaselector/overlay/overlays/TileEntityAmountOverlay.java @@ -18,7 +18,7 @@ public int parseValue(ChunkData chunkData) { if (chunkData.region() == null) { return 0; } - ChunkFilter chunkFilter = VersionController.getChunkFilter(chunkData.region().getData().getInt("DataVersion")); + ChunkFilter chunkFilter = VersionController.getChunkFilter(chunkData.getDataVersion()); ListTag tileEntities = chunkFilter.getTileEntities(chunkData.region().getData()); return tileEntities == null ? 0 : tileEntities.size(); } diff --git a/src/main/java/net/querz/mcaselector/tile/TileImage.java b/src/main/java/net/querz/mcaselector/tile/TileImage.java index 015d672d..59284255 100644 --- a/src/main/java/net/querz/mcaselector/tile/TileImage.java +++ b/src/main/java/net/querz/mcaselector/tile/TileImage.java @@ -140,7 +140,7 @@ private static void drawChunkImage(Chunk chunkData, int x, int z, int scale, int if (chunkData.getData() == null) { return; } - int dataVersion = chunkData.getData().getInt("DataVersion"); + int dataVersion = chunkData.getDataVersion(); try { if (Config.renderCaves()) { VersionController.getChunkRenderer(dataVersion).drawCaves( diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118EntityFilter.java b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118EntityFilter.java index 16fe5571..4e7a8ab4 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118EntityFilter.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118EntityFilter.java @@ -17,7 +17,7 @@ public void deleteEntities(ChunkData data, List ranges) { } // delete proto-entities - ListTag protoEntities = Snapshot118Helper.getProtoEntities(data.region().getData(), data.region().getData().getInt("DataVersion")); + ListTag protoEntities = Snapshot118Helper.getProtoEntities(data.region().getData(), data.getDataVersion()); deleteEntities(protoEntities, ranges); } } From 03d67cbfb6db5642e3e4fba6f176c74f7047d19c Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Thu, 14 Jul 2022 01:02:37 +0200 Subject: [PATCH 05/14] De-dupe ChunkData.relocate --- .../querz/mcaselector/io/mca/ChunkData.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java b/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java index 9d09c934..30924f27 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java +++ b/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java @@ -1,7 +1,6 @@ package net.querz.mcaselector.io.mca; import net.querz.mcaselector.changer.Field; -import net.querz.mcaselector.point.Point2i; import net.querz.mcaselector.point.Point3i; import net.querz.mcaselector.overlay.Overlay; import net.querz.nbt.CompoundTag; @@ -11,17 +10,15 @@ public record ChunkData(RegionChunk region, PoiChunk poi, EntitiesChunk entities) { public boolean relocate(Point3i offset) { - boolean result = true; - if (region != null && region.getData() != null && region.getData().containsKey("DataVersion")) { - result = region.relocate(offset); - } - if (poi != null && poi.getData() != null && poi.getData().containsKey("DataVersion")) { - result = result && poi.relocate(offset); - } - if (entities != null && entities.getData() != null && entities.getData().containsKey("DataVersion")) { - result = result && entities.relocate(offset); + // XXX boolean return value is never used + return relocateChunk(region, offset) && relocateChunk(poi, offset) && relocateChunk(entities, offset); + } + + private boolean relocateChunk(Chunk c, Point3i offset) { + if (c != null && c.getData() != null && c.getData().containsKey("DataVersion")) { + return c.relocate(offset); } - return result; + return true; } public void applyFieldChanges(List> fields, boolean force) { From cca17576f5494e21d40a869f15933aa2898d2092 Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Thu, 14 Jul 2022 17:55:20 +0200 Subject: [PATCH 06/14] Inline ChunkData.parseData --- .../java/net/querz/mcaselector/io/job/ParseDataJob.java | 2 +- src/main/java/net/querz/mcaselector/io/mca/ChunkData.java | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/net/querz/mcaselector/io/job/ParseDataJob.java b/src/main/java/net/querz/mcaselector/io/job/ParseDataJob.java index 72d15528..f08846ff 100644 --- a/src/main/java/net/querz/mcaselector/io/job/ParseDataJob.java +++ b/src/main/java/net/querz/mcaselector/io/job/ParseDataJob.java @@ -150,7 +150,7 @@ public boolean execute() { poiMCAFile == null ? null : poiMCAFile.getChunk(i), entitiesMCAFile == null ? null : entitiesMCAFile.getChunk(i)); try { - data[i] = chunkData.parseData(parser); + data[i] = parser.parseValue(chunkData); } catch (Exception ex) { LOGGER.warn("failed to parse chunk data at index {}", i, ex); } diff --git a/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java b/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java index 30924f27..2e3bc052 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java +++ b/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java @@ -2,8 +2,6 @@ import net.querz.mcaselector.changer.Field; import net.querz.mcaselector.point.Point3i; -import net.querz.mcaselector.overlay.Overlay; -import net.querz.nbt.CompoundTag; import java.util.List; @@ -31,10 +29,6 @@ public void applyFieldChanges(List> fields, boolean force) { } } - public int parseData(Overlay parser) { - return parser.parseValue(this); - } - public int getDataVersion() { Chunk source; From 9caec3d9c4bf661b90e1156281778b6dc25ca85b Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Fri, 22 Jul 2022 17:37:13 +0200 Subject: [PATCH 07/14] De-dupe build.gradle --- build.gradle | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/build.gradle b/build.gradle index db4835dd..4394d1d2 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,6 @@ sourceCompatibility = JavaLanguageVersion.of(17) targetCompatibility = JavaLanguageVersion.of(17) compileJava.options.encoding = 'UTF-8' application.mainClass = 'net.querz.mcaselector.Main' -configurations.implementation.canBeResolved = true javafx { version = "$sourceCompatibility" @@ -44,17 +43,6 @@ dependencies { implementation 'me.tongfei:progressbar:0.9.3' implementation 'org.codehaus.groovy:groovy-jsr223:3.0.11' - shadow 'com.github.Querz:NBT:f279a237fb' - shadow 'org.json:json:20220320' - shadow 'ar.com.hjg:pngj:2.1.0' - shadow 'org.xerial:sqlite-jdbc:3.36.0.3' - shadow 'it.unimi.dsi:fastutil:8.5.8' - shadow 'org.apache.logging.log4j:log4j-api:2.17.2' - shadow 'org.apache.logging.log4j:log4j-core:2.17.2' - shadow 'commons-cli:commons-cli:1.5.0' - shadow 'me.tongfei:progressbar:0.9.3' - shadow 'org.codehaus.groovy:groovy-jsr223:3.0.11' - testImplementation 'junit:junit:4.13.2' testImplementation 'commons-io:commons-io:2.11.0' } @@ -82,11 +70,9 @@ jar { 'Class-Path': configurations.shadow.files.stream() .filter($it -> !$it.name.startsWith('javafx')).collect{"lib/$it.name"}.join(' ') ) - exclude 'licenses/' from 'LICENSE' dependsOn minifyCss dependsOn copyRuntimeLibs - finalizedBy shadowJar } shadowJar { @@ -98,7 +84,6 @@ shadowJar { exclude(dependency(':javafx.*:.*')) } archiveFileName = "${project.name}-${project.version}.jar" - configurations = [project.configurations.shadow] from 'LICENSE' } From 3a7469f883c1367d9473144579a8b8c20c2d997c Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Wed, 13 Jul 2022 03:46:21 +0200 Subject: [PATCH 08/14] Move Chunk's and MCAFile's implementations' Cloneable contracts to supertype This grammatical nightmare has surprisingly been approved by a colleague that teaches English. --- src/main/java/net/querz/mcaselector/io/mca/Chunk.java | 5 ++++- .../java/net/querz/mcaselector/io/mca/EntitiesChunk.java | 2 +- .../java/net/querz/mcaselector/io/mca/EntitiesMCAFile.java | 2 +- src/main/java/net/querz/mcaselector/io/mca/MCAFile.java | 4 +++- src/main/java/net/querz/mcaselector/io/mca/PoiChunk.java | 2 +- src/main/java/net/querz/mcaselector/io/mca/PoiMCAFile.java | 2 +- src/main/java/net/querz/mcaselector/io/mca/RegionChunk.java | 2 +- .../java/net/querz/mcaselector/io/mca/RegionMCAFile.java | 2 +- 8 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/querz/mcaselector/io/mca/Chunk.java b/src/main/java/net/querz/mcaselector/io/mca/Chunk.java index d3f46b31..11153de2 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/Chunk.java +++ b/src/main/java/net/querz/mcaselector/io/mca/Chunk.java @@ -27,7 +27,7 @@ import java.util.zip.Inflater; import java.util.zip.InflaterInputStream; -public abstract class Chunk { +public abstract class Chunk implements Cloneable { protected int timestamp; protected CompoundTag data; @@ -176,4 +176,7 @@ protected T clone(Function chunkConstructor) { } return clone; } + + public abstract Chunk clone(); + } diff --git a/src/main/java/net/querz/mcaselector/io/mca/EntitiesChunk.java b/src/main/java/net/querz/mcaselector/io/mca/EntitiesChunk.java index e9c131ba..bbb79bee 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/EntitiesChunk.java +++ b/src/main/java/net/querz/mcaselector/io/mca/EntitiesChunk.java @@ -11,7 +11,7 @@ import java.io.File; import java.util.List; -public class EntitiesChunk extends Chunk implements Cloneable { +public class EntitiesChunk extends Chunk { public EntitiesChunk(Point2i absoluteLocation) { super(absoluteLocation); diff --git a/src/main/java/net/querz/mcaselector/io/mca/EntitiesMCAFile.java b/src/main/java/net/querz/mcaselector/io/mca/EntitiesMCAFile.java index 6510b7c1..08a7fa14 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/EntitiesMCAFile.java +++ b/src/main/java/net/querz/mcaselector/io/mca/EntitiesMCAFile.java @@ -11,7 +11,7 @@ import java.io.File; import java.util.List; -public class EntitiesMCAFile extends MCAFile implements Cloneable { +public class EntitiesMCAFile extends MCAFile { public EntitiesMCAFile(File file) { super(file, EntitiesChunk::new); diff --git a/src/main/java/net/querz/mcaselector/io/mca/MCAFile.java b/src/main/java/net/querz/mcaselector/io/mca/MCAFile.java index 80a238f3..4c796366 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/MCAFile.java +++ b/src/main/java/net/querz/mcaselector/io/mca/MCAFile.java @@ -23,7 +23,7 @@ import java.util.function.BiFunction; import java.util.function.Function; -public abstract class MCAFile { +public abstract class MCAFile implements Cloneable { private static final Logger LOGGER = LogManager.getLogger(MCAFile.class); @@ -557,4 +557,6 @@ protected > V clone(Function mcaFileConstructor) { clone.timestamps = timestamps.clone(); return clone; } + + public abstract MCAFile clone(); } diff --git a/src/main/java/net/querz/mcaselector/io/mca/PoiChunk.java b/src/main/java/net/querz/mcaselector/io/mca/PoiChunk.java index c9ff3744..13a7fbc5 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/PoiChunk.java +++ b/src/main/java/net/querz/mcaselector/io/mca/PoiChunk.java @@ -11,7 +11,7 @@ import java.io.File; import java.util.List; -public class PoiChunk extends Chunk implements Cloneable { +public class PoiChunk extends Chunk { public PoiChunk(Point2i absoluteLocation) { super(absoluteLocation); diff --git a/src/main/java/net/querz/mcaselector/io/mca/PoiMCAFile.java b/src/main/java/net/querz/mcaselector/io/mca/PoiMCAFile.java index 87b6597e..74872b66 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/PoiMCAFile.java +++ b/src/main/java/net/querz/mcaselector/io/mca/PoiMCAFile.java @@ -11,7 +11,7 @@ import java.io.File; import java.util.List; -public class PoiMCAFile extends MCAFile implements Cloneable { +public class PoiMCAFile extends MCAFile { public PoiMCAFile(File file) { super(file, PoiChunk::new); diff --git a/src/main/java/net/querz/mcaselector/io/mca/RegionChunk.java b/src/main/java/net/querz/mcaselector/io/mca/RegionChunk.java index b52789d6..26f2a69f 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/RegionChunk.java +++ b/src/main/java/net/querz/mcaselector/io/mca/RegionChunk.java @@ -11,7 +11,7 @@ import java.io.File; import java.util.List; -public class RegionChunk extends Chunk implements Cloneable { +public class RegionChunk extends Chunk { public RegionChunk(Point2i absoluteLocation) { super(absoluteLocation); diff --git a/src/main/java/net/querz/mcaselector/io/mca/RegionMCAFile.java b/src/main/java/net/querz/mcaselector/io/mca/RegionMCAFile.java index 38d44585..5004c3a7 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/RegionMCAFile.java +++ b/src/main/java/net/querz/mcaselector/io/mca/RegionMCAFile.java @@ -12,7 +12,7 @@ import java.io.File; import java.util.List; -public class RegionMCAFile extends MCAFile implements Cloneable { +public class RegionMCAFile extends MCAFile { public RegionMCAFile(File file) { super(file, RegionChunk::new); From 804bb1af44222997413ed737c68eafd06f99780f Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Sat, 16 Jul 2022 20:29:15 +0200 Subject: [PATCH 09/14] De-dupe Chunk.save --- .../net/querz/mcaselector/io/mca/Chunk.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/querz/mcaselector/io/mca/Chunk.java b/src/main/java/net/querz/mcaselector/io/mca/Chunk.java index 11153de2..b7477d8a 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/Chunk.java +++ b/src/main/java/net/querz/mcaselector/io/mca/Chunk.java @@ -83,25 +83,25 @@ public void load(RandomAccessFile raf) throws IOException { } public int save(RandomAccessFile raf) throws IOException { - ExposedByteArrayOutputStream baos = null; + ExposedByteArrayOutputStream baos = new ExposedByteArrayOutputStream(); - DataOutputStream nbtOut = switch (compressionType) { - case GZIP, GZIP_EXT -> new DataOutputStream(new BufferedOutputStream(new GZIPOutputStream(baos = new ExposedByteArrayOutputStream()))); - case ZLIB, ZLIB_EXT -> new DataOutputStream(new BufferedOutputStream(new DeflaterOutputStream(baos = new ExposedByteArrayOutputStream()))); - case NONE, NONE_EXT -> new DataOutputStream(new BufferedOutputStream(baos = new ExposedByteArrayOutputStream())); - }; + // CHECK DataOutputStream wrapper unnecessary? + DataOutputStream nbtOut = new DataOutputStream(new BufferedOutputStream(switch (compressionType) { + case GZIP, GZIP_EXT -> new GZIPOutputStream(baos); + case ZLIB, ZLIB_EXT -> new DeflaterOutputStream(baos); + case NONE, NONE_EXT -> baos; + })); new NBTWriter().write(nbtOut, data); nbtOut.close(); // save mcc file if chunk doesn't fit in mca file - if (baos.size() > 1048576) { + if (baos.size() > 1048576) { // XXX magic number // if the chunk's version is below 2203, we throw an exception instead Integer dataVersion = ValidationHelper.withDefault(this::getDataVersion, null); if (dataVersion == null) { throw new RuntimeException("no DataVersion for oversized chunk"); - } - if (dataVersion < 2203) { + } else if (dataVersion < 2203) { throw new RuntimeException("chunk at " + absoluteLocation + " is oversized and can't be saved when DataVersion is below 2203"); } @@ -110,7 +110,7 @@ public int save(RandomAccessFile raf) throws IOException { try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(getMCCFile()), baos.size())) { bos.write(baos.getBuffer(), 0, baos.size()); } - return 5; + return 5; // XXX magic number } else { raf.writeInt(baos.size() + 1); // length includes the compression type byte raf.writeByte(compressionType.getByte()); @@ -164,7 +164,7 @@ public void setTimestamp(int timestamp) { @Override public String toString() { String s = NBTUtil.toSNBT(data); - return ""; + return ""; } protected T clone(Function chunkConstructor) { From fe3d3f6f4fbcd85a2db57be5e0534d7c6ce6a826 Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Sat, 16 Jul 2022 18:37:38 +0200 Subject: [PATCH 10/14] Generify Chunk.save to take a DataOutput parameter RandomAccessFile implements DataOutput --- .../java/net/querz/mcaselector/io/mca/Chunk.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/querz/mcaselector/io/mca/Chunk.java b/src/main/java/net/querz/mcaselector/io/mca/Chunk.java index b7477d8a..cd2a9911 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/Chunk.java +++ b/src/main/java/net/querz/mcaselector/io/mca/Chunk.java @@ -13,6 +13,7 @@ import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; +import java.io.DataOutput; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; @@ -82,7 +83,7 @@ public void load(RandomAccessFile raf) throws IOException { } } - public int save(RandomAccessFile raf) throws IOException { + public int save(DataOutput out) throws IOException { ExposedByteArrayOutputStream baos = new ExposedByteArrayOutputStream(); // CHECK DataOutputStream wrapper unnecessary? @@ -105,16 +106,16 @@ public int save(RandomAccessFile raf) throws IOException { throw new RuntimeException("chunk at " + absoluteLocation + " is oversized and can't be saved when DataVersion is below 2203"); } - raf.writeInt(1); - raf.writeByte(compressionType.getExternal().getByte()); + out.writeInt(1); + out.writeByte(compressionType.getExternal().getByte()); try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(getMCCFile()), baos.size())) { bos.write(baos.getBuffer(), 0, baos.size()); } return 5; // XXX magic number } else { - raf.writeInt(baos.size() + 1); // length includes the compression type byte - raf.writeByte(compressionType.getByte()); - raf.write(baos.getBuffer(), 0, baos.size()); + out.writeInt(baos.size() + 1); // length includes the compression type byte + out.writeByte(compressionType.getByte()); + out.write(baos.getBuffer(), 0, baos.size()); return baos.size() + 5; // data length + 1 compression type byte + 4 length bytes } } From f1fdaef7b95246dc2b75fb6fda93333aa56a7b64 Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Wed, 13 Jul 2022 15:06:41 +0200 Subject: [PATCH 11/14] Static-ify ChunkMerger's default methods and move to NbtHelper --- .../mcaselector/version/ChunkMerger.java | 102 +---------------- .../querz/mcaselector/version/NbtHelper.java | 107 ++++++++++++++++++ .../version/anvil112/Anvil112ChunkMerger.java | 20 ++-- .../version/anvil113/Anvil113ChunkMerger.java | 20 ++-- .../version/anvil114/Anvil114ChunkMerger.java | 20 ++-- .../version/anvil114/Anvil114PoiMerger.java | 3 +- .../version/anvil115/Anvil115ChunkMerger.java | 20 ++-- .../version/anvil117/Anvil117ChunkMerger.java | 16 +-- .../anvil117/Anvil117EntityMerger.java | 3 +- .../version/anvil118/Anvil118ChunkMerger.java | 26 ++--- .../version/anvil119/Anvil119ChunkMerger.java | 10 +- 11 files changed, 178 insertions(+), 169 deletions(-) diff --git a/src/main/java/net/querz/mcaselector/version/ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/ChunkMerger.java index 0a1cc088..393c56e6 100644 --- a/src/main/java/net/querz/mcaselector/version/ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/ChunkMerger.java @@ -3,10 +3,8 @@ import net.querz.mcaselector.point.Point2i; import net.querz.mcaselector.range.Range; import net.querz.nbt.CompoundTag; -import net.querz.nbt.ListTag; -import net.querz.nbt.Tag; + import java.util.*; -import java.util.function.Function; public interface ChunkMerger { @@ -14,102 +12,4 @@ public interface ChunkMerger { CompoundTag newEmptyChunk(Point2i absoluteLocation, int dataVersion); - default ListTag mergeLists(ListTag source, ListTag destination, List ranges, Function ySupplier, int yOffset) { - ListTag result = new ListTag(); - for (Tag dest : destination) { - int y = ySupplier.apply(dest); - for (Range range : ranges) { - if (!range.contains(y)) { - result.add(dest); - } - } - } - - for (Tag sourceElement : source) { - int y = ySupplier.apply(sourceElement); - for (Range range : ranges) { - if (range.contains(y - yOffset)) { - result.add(sourceElement); - break; - } - } - } - - return result; - } - - default void mergeListTagLists(CompoundTag source, CompoundTag destination, List ranges, int yOffset, String name) { - ListTag sourceList = NbtHelper.tagFromLevelFromRoot(source, name); - ListTag destinationList = NbtHelper.tagFromLevelFromRoot(destination, name, sourceList); - - if (sourceList == null || destinationList == null || sourceList.size() != destinationList.size()) { - return; - } - - for (Range range : ranges) { - int m = Math.min(range.getTo() + yOffset, sourceList.size() - 1); - for (int i = Math.max(range.getFrom() + yOffset, 0); i <= m; i++) { - destinationList.set(i, sourceList.get(i)); - } - } - - initLevel(destination).put(name, destinationList); - } - - default void mergeCompoundTagListsFromLevel(CompoundTag source, CompoundTag destination, List ranges, int yOffset, String name, Function ySupplier) { - ListTag sourceElements = NbtHelper.tagFromLevelFromRoot(source, name, new ListTag()); - ListTag destinationElements = NbtHelper.tagFromLevelFromRoot(destination, name, new ListTag()); - - initLevel(destination).put(name, mergeLists(sourceElements, destinationElements, ranges, ySupplier, yOffset)); - } - - default void mergeCompoundTagLists(CompoundTag source, CompoundTag destination, List ranges, int yOffset, String name, Function ySupplier) { - ListTag sourceElements = NbtHelper.tagFromCompound(source, name, new ListTag()); - ListTag destinationElements = NbtHelper.tagFromCompound(destination, name, new ListTag()); - - destination.put(name, mergeLists(sourceElements, destinationElements, ranges, ySupplier, yOffset)); - } - - // merge based on compound tag keys, assuming compound tag keys are ints - default void mergeCompoundTags(CompoundTag source, CompoundTag destination, List ranges, int yOffset, String name) { - CompoundTag sourceElements = NbtHelper.tagFromCompound(source, name, new CompoundTag()); - CompoundTag destinationElements = NbtHelper.tagFromCompound(destination, name, new CompoundTag()); - - for (Map.Entry sourceElement : sourceElements) { - if (sourceElement.getKey().matches("^-?[0-9]{1,2}$")) { - int y = Integer.parseInt(sourceElement.getKey()); - for (Range range : ranges) { - if (range.contains(y - yOffset)) { - destinationElements.put(sourceElement.getKey(), sourceElement.getValue()); - break; - } - } - } - } - } - - default CompoundTag initLevel(CompoundTag c) { - CompoundTag level = NbtHelper.levelFromRoot(c); - if (level == null) { - c.put("Level", level = new CompoundTag()); - } - return level; - } - - default void fixEntityUUIDs(CompoundTag root) { - ListTag entities = NbtHelper.tagFromCompound(root, "Entities", null); - if (entities != null) { - entities.forEach(e -> fixEntityUUID((CompoundTag) e)); - } - } - - private static void fixEntityUUID(CompoundTag entity) { - NbtHelper.fixEntityUUID(entity); - if (entity.containsKey("Passengers")) { - ListTag passengers = NbtHelper.tagFromCompound(entity, "Passengers", null); - if (passengers != null) { - passengers.forEach(e -> fixEntityUUID((CompoundTag) e)); - } - } - } } diff --git a/src/main/java/net/querz/mcaselector/version/NbtHelper.java b/src/main/java/net/querz/mcaselector/version/NbtHelper.java index 3c93308c..088473b1 100644 --- a/src/main/java/net/querz/mcaselector/version/NbtHelper.java +++ b/src/main/java/net/querz/mcaselector/version/NbtHelper.java @@ -2,8 +2,13 @@ import net.querz.mcaselector.point.Point2i; import net.querz.mcaselector.point.Point3i; +import net.querz.mcaselector.range.Range; import net.querz.nbt.*; + +import java.util.List; +import java.util.Map; import java.util.Random; +import java.util.function.Function; public final class NbtHelper { @@ -253,4 +258,106 @@ public static int findHighestSection(ListTag sections, int lowest) { } return max; } + + public static ListTag mergeLists(ListTag source, ListTag destination, List ranges, Function ySupplier, int yOffset) { + ListTag result = new ListTag(); + for (Tag dest : destination) { + int y = ySupplier.apply(dest); + for (Range range : ranges) { + if (!range.contains(y)) { + result.add(dest); + } + } + } + + for (Tag sourceElement : source) { + int y = ySupplier.apply(sourceElement); + for (Range range : ranges) { + if (range.contains(y - yOffset)) { + result.add(sourceElement); + break; + } + } + } + + return result; + } + + public static void mergeListTagLists(CompoundTag source, CompoundTag destination, List ranges, int yOffset, String name) { + ListTag sourceList = tagFromLevelFromRoot(source, name); + ListTag destinationList = tagFromLevelFromRoot(destination, name, sourceList); + + if (sourceList == null || destinationList == null || sourceList.size() != destinationList.size()) { + return; + } + + for (Range range : ranges) { + int m = Math.min(range.getTo() + yOffset, sourceList.size() - 1); + for (int i = Math.max(range.getFrom() + yOffset, 0); i <= m; i++) { + destinationList.set(i, sourceList.get(i)); + } + } + + initLevel(destination).put(name, destinationList); + } + + public static void mergeCompoundTagListsFromLevel(CompoundTag source, CompoundTag destination, List ranges, int yOffset, String name, Function ySupplier) { + ListTag sourceElements = tagFromLevelFromRoot(source, name, new ListTag()); + ListTag destinationElements = tagFromLevelFromRoot(destination, name, new ListTag()); + + initLevel(destination).put(name, mergeLists(sourceElements, destinationElements, ranges, ySupplier, yOffset)); + } + + public static void mergeCompoundTagLists(CompoundTag source, CompoundTag destination, List ranges, int yOffset, String name, Function ySupplier) { + ListTag sourceElements = tagFromCompound(source, name, new ListTag()); + ListTag destinationElements = tagFromCompound(destination, name, new ListTag()); + + destination.put(name, mergeLists(sourceElements, destinationElements, ranges, ySupplier, yOffset)); + } + + // merge based on compound tag keys, assuming compound tag keys are ints + public static void mergeCompoundTags(CompoundTag source, CompoundTag destination, List ranges, int yOffset, String name) { + CompoundTag sourceElements = tagFromCompound(source, name, new CompoundTag()); + CompoundTag destinationElements = tagFromCompound(destination, name, new CompoundTag()); + + for (Map.Entry sourceElement : sourceElements) { + if (sourceElement.getKey().matches("^-?[0-9]{1,2}$")) { + int y = Integer.parseInt(sourceElement.getKey()); + for (Range range : ranges) { + if (range.contains(y - yOffset)) { + destinationElements.put(sourceElement.getKey(), sourceElement.getValue()); + break; + } + } + } + } + } + + public static CompoundTag initLevel(CompoundTag c) { + CompoundTag level = levelFromRoot(c); + if (level == null) { + c.put("Level", level = new CompoundTag()); + } + return level; + } + + // XXX what's going on with the colliding fixEntityUUID* methods? What do they actually do? How can they be named better? + public static void fixEntityUUIDsMerger(CompoundTag root) { + // MAINTAINER shouldn't this be VersionController'ed? + ListTag entities = tagFromCompound(root, "Entities", null); + if (entities != null) { + entities.forEach(e -> fixEntityUUIDMerger((CompoundTag) e)); + } + } + + private static void fixEntityUUIDMerger(CompoundTag entity) { + fixEntityUUID(entity); + if (entity.containsKey("Passengers")) { + ListTag passengers = tagFromCompound(entity, "Passengers", null); + if (passengers != null) { + passengers.forEach(e -> fixEntityUUIDMerger((CompoundTag) e)); + } + } + } + } diff --git a/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkMerger.java index b4963258..6704f5b3 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil112/Anvil112ChunkMerger.java @@ -11,18 +11,18 @@ public class Anvil112ChunkMerger implements ChunkMerger { @Override public void mergeChunks(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Sections", c -> ((CompoundTag) c).getInt("Y")); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Entities", c -> ((CompoundTag) c).getList("Pos").getInt(1) >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileEntities", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileTicks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "LiquidTicks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeListTagLists(source, destination, ranges, yOffset, "Lights"); - mergeListTagLists(source, destination, ranges, yOffset, "LiquidsToBeTicked"); - mergeListTagLists(source, destination, ranges, yOffset, "ToBeTicked"); - mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Sections", c -> ((CompoundTag) c).getInt("Y")); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Entities", c -> ((CompoundTag) c).getList("Pos").getInt(1) >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileEntities", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileTicks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "LiquidTicks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "Lights"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "LiquidsToBeTicked"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "ToBeTicked"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); // we need to fix entity UUIDs, because Minecraft doesn't like duplicates - fixEntityUUIDs(NbtHelper.levelFromRoot(destination)); + NbtHelper.fixEntityUUIDsMerger(NbtHelper.levelFromRoot(destination)); } @Override diff --git a/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkMerger.java index 72f99603..9cd4a8b0 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil113/Anvil113ChunkMerger.java @@ -14,19 +14,19 @@ public class Anvil113ChunkMerger implements ChunkMerger { @Override public void mergeChunks(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Sections", c -> ((CompoundTag) c).getInt("Y")); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Entities", c -> ((CompoundTag) c).getList("Pos").getInt(1) >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileEntities", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileTicks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "LiquidTicks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeListTagLists(source, destination, ranges, yOffset, "Lights"); - mergeListTagLists(source, destination, ranges, yOffset, "LiquidsToBeTicked"); - mergeListTagLists(source, destination, ranges, yOffset, "ToBeTicked"); - mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Sections", c -> ((CompoundTag) c).getInt("Y")); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Entities", c -> ((CompoundTag) c).getList("Pos").getInt(1) >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileEntities", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileTicks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "LiquidTicks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "Lights"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "LiquidsToBeTicked"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "ToBeTicked"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); mergeStructures(source, destination, ranges, yOffset); // we need to fix entity UUIDs, because Minecraft doesn't like duplicates - fixEntityUUIDs(NbtHelper.levelFromRoot(destination)); + NbtHelper.fixEntityUUIDsMerger(NbtHelper.levelFromRoot(destination)); } private void mergeStructures(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { diff --git a/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkMerger.java index 85f6e579..a873ac28 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114ChunkMerger.java @@ -14,19 +14,19 @@ public class Anvil114ChunkMerger implements ChunkMerger { @Override public void mergeChunks(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Sections", c -> ((CompoundTag) c).getInt("Y")); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Entities", c -> ((CompoundTag) c).getList("Pos").getInt(1) >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileEntities", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileTicks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "LiquidTicks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeListTagLists(source, destination, ranges, yOffset, "Lights"); - mergeListTagLists(source, destination, ranges, yOffset, "LiquidsToBeTicked"); - mergeListTagLists(source, destination, ranges, yOffset, "ToBeTicked"); - mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Sections", c -> ((CompoundTag) c).getInt("Y")); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Entities", c -> ((CompoundTag) c).getList("Pos").getInt(1) >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileEntities", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileTicks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "LiquidTicks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "Lights"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "LiquidsToBeTicked"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "ToBeTicked"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); mergeStructures(source, destination, ranges, yOffset); // we need to fix entity UUIDs, because Minecraft doesn't like duplicates - fixEntityUUIDs(NbtHelper.levelFromRoot(destination)); + NbtHelper.fixEntityUUIDsMerger(NbtHelper.levelFromRoot(destination)); } private void mergeStructures(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { diff --git a/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114PoiMerger.java b/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114PoiMerger.java index ba1bd2e4..627ff00e 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114PoiMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil114/Anvil114PoiMerger.java @@ -3,6 +3,7 @@ import net.querz.mcaselector.point.Point2i; import net.querz.mcaselector.range.Range; import net.querz.mcaselector.version.ChunkMerger; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import java.util.List; @@ -10,7 +11,7 @@ public class Anvil114PoiMerger implements ChunkMerger { @Override public void mergeChunks(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - mergeCompoundTags(source, destination, ranges, yOffset, "Sections"); + NbtHelper.mergeCompoundTags(source, destination, ranges, yOffset, "Sections"); } @Override diff --git a/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkMerger.java index fb15ae14..33e963bc 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil115/Anvil115ChunkMerger.java @@ -16,19 +16,19 @@ public class Anvil115ChunkMerger implements ChunkMerger { @Override public void mergeChunks(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Sections", c -> ((CompoundTag) c).getInt("Y")); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Entities", c -> ((CompoundTag) c).getList("Pos").getInt(1) >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileEntities", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileTicks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "LiquidTicks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeListTagLists(source, destination, ranges, yOffset, "Lights"); - mergeListTagLists(source, destination, ranges, yOffset, "LiquidsToBeTicked"); - mergeListTagLists(source, destination, ranges, yOffset, "ToBeTicked"); - mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Sections", c -> ((CompoundTag) c).getInt("Y")); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Entities", c -> ((CompoundTag) c).getList("Pos").getInt(1) >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileEntities", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileTicks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "LiquidTicks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "Lights"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "LiquidsToBeTicked"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "ToBeTicked"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); mergeStructures(source, destination, ranges, yOffset); // we need to fix entity UUIDs, because Minecraft doesn't like duplicates - fixEntityUUIDs(NbtHelper.levelFromRoot(destination)); + NbtHelper.fixEntityUUIDsMerger(NbtHelper.levelFromRoot(destination)); mergeBiomes(source, destination, ranges, yOffset); } diff --git a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkMerger.java index bf56b85f..3e58236a 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117ChunkMerger.java @@ -14,14 +14,14 @@ public class Anvil117ChunkMerger implements ChunkMerger { @Override public void mergeChunks(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Sections", c -> ((CompoundTag) c).getInt("Y")); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileEntities", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileTicks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "LiquidTicks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeListTagLists(source, destination, ranges, yOffset, "Lights"); - mergeListTagLists(source, destination, ranges, yOffset, "LiquidsToBeTicked"); - mergeListTagLists(source, destination, ranges, yOffset, "ToBeTicked"); - mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Sections", c -> ((CompoundTag) c).getInt("Y")); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileEntities", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileTicks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "LiquidTicks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "Lights"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "LiquidsToBeTicked"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "ToBeTicked"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); mergeStructures(source, destination, ranges, yOffset); } diff --git a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117EntityMerger.java b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117EntityMerger.java index 66aa6c07..e259e76b 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117EntityMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil117/Anvil117EntityMerger.java @@ -3,6 +3,7 @@ import net.querz.mcaselector.point.Point2i; import net.querz.mcaselector.range.Range; import net.querz.mcaselector.version.ChunkMerger; +import net.querz.mcaselector.version.NbtHelper; import net.querz.nbt.CompoundTag; import net.querz.nbt.ListTag; @@ -12,7 +13,7 @@ public class Anvil117EntityMerger implements ChunkMerger { @Override public void mergeChunks(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - mergeCompoundTagLists(source, destination, ranges, yOffset, "Entities", c -> ((CompoundTag) c).getList("Pos").getInt(1) >> 4); + NbtHelper.mergeCompoundTagLists(source, destination, ranges, yOffset, "Entities", c -> ((CompoundTag) c).getList("Pos").getInt(1) >> 4); } @Override diff --git a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkMerger.java index 6ee77d87..75e23aae 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil118/Anvil118ChunkMerger.java @@ -20,21 +20,21 @@ public void mergeChunks(CompoundTag source, CompoundTag destination, List } if (dataVersion < 2844) { - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Sections", c -> ((CompoundTag) c).getInt("Y")); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileEntities", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileTicks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "LiquidTicks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeListTagLists(source, destination, ranges, yOffset, "Lights"); - mergeListTagLists(source, destination, ranges, yOffset, "LiquidsToBeTicked"); - mergeListTagLists(source, destination, ranges, yOffset, "ToBeTicked"); - mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "Sections", c -> ((CompoundTag) c).getInt("Y")); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileEntities", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "TileTicks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagListsFromLevel(source, destination, ranges, yOffset, "LiquidTicks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "Lights"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "LiquidsToBeTicked"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "ToBeTicked"); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); mergeStructures(source, destination, ranges, yOffset, dataVersion); } else { - mergeCompoundTagLists(source, destination, ranges, yOffset, "sections", c -> ((CompoundTag) c).getInt("Y")); - mergeCompoundTagLists(source, destination, ranges, yOffset, "block_entities", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagLists(source, destination, ranges, yOffset, "block_ticks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagLists(source, destination, ranges, yOffset, "fluid_ticks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); + NbtHelper.mergeCompoundTagLists(source, destination, ranges, yOffset, "sections", c -> ((CompoundTag) c).getInt("Y")); + NbtHelper.mergeCompoundTagLists(source, destination, ranges, yOffset, "block_entities", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagLists(source, destination, ranges, yOffset, "block_ticks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagLists(source, destination, ranges, yOffset, "fluid_ticks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); mergeStructures(source, destination, ranges, yOffset, dataVersion); } } diff --git a/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkMerger.java b/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkMerger.java index 35009f53..34a0149d 100644 --- a/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkMerger.java +++ b/src/main/java/net/querz/mcaselector/version/anvil119/Anvil119ChunkMerger.java @@ -14,11 +14,11 @@ public class Anvil119ChunkMerger implements ChunkMerger { @Override public void mergeChunks(CompoundTag source, CompoundTag destination, List ranges, int yOffset) { - mergeCompoundTagLists(source, destination, ranges, yOffset, "sections", c -> ((CompoundTag) c).getInt("Y")); - mergeCompoundTagLists(source, destination, ranges, yOffset, "block_entities", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagLists(source, destination, ranges, yOffset, "block_ticks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeCompoundTagLists(source, destination, ranges, yOffset, "fluid_ticks", c -> ((CompoundTag) c).getInt("y") >> 4); - mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); + NbtHelper.mergeCompoundTagLists(source, destination, ranges, yOffset, "sections", c -> ((CompoundTag) c).getInt("Y")); + NbtHelper.mergeCompoundTagLists(source, destination, ranges, yOffset, "block_entities", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagLists(source, destination, ranges, yOffset, "block_ticks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeCompoundTagLists(source, destination, ranges, yOffset, "fluid_ticks", c -> ((CompoundTag) c).getInt("y") >> 4); + NbtHelper.mergeListTagLists(source, destination, ranges, yOffset, "PostProcessing"); mergeStructures(source, destination, ranges, yOffset); } From ee39c4888213f1a4ae4b537a2c8b44f1a2cd568a Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Sun, 31 Jul 2022 01:25:07 +0200 Subject: [PATCH 12/14] Replace Field.force with a boolean parameter on Field.change --- .../net/querz/mcaselector/changer/Field.java | 3 +-- .../changer/fields/BiomeField.java | 14 +++++++----- .../changer/fields/CustomField.java | 6 +---- .../changer/fields/DataVersionField.java | 22 +++++-------------- .../changer/fields/DeleteEntitiesField.java | 6 +---- .../changer/fields/DeleteSectionsField.java | 7 +----- .../changer/fields/DeleteStructureField.java | 7 +----- .../changer/fields/FixStatusField.java | 6 +---- .../changer/fields/ForceBlendField.java | 6 +---- .../changer/fields/InhabitedTimeField.java | 9 ++------ .../changer/fields/LastUpdateField.java | 9 ++------ .../changer/fields/LightPopulatedField.java | 9 ++------ .../changer/fields/PreventRetrogenField.java | 6 +---- .../changer/fields/ReferenceField.java | 6 +---- .../changer/fields/ReplaceBlocksField.java | 7 +----- .../changer/fields/StatusField.java | 9 ++------ .../changer/fields/TimestampField.java | 6 +---- .../querz/mcaselector/io/mca/ChunkData.java | 6 +---- 18 files changed, 33 insertions(+), 111 deletions(-) diff --git a/src/main/java/net/querz/mcaselector/changer/Field.java b/src/main/java/net/querz/mcaselector/changer/Field.java index ba840534..1495d501 100644 --- a/src/main/java/net/querz/mcaselector/changer/Field.java +++ b/src/main/java/net/querz/mcaselector/changer/Field.java @@ -59,7 +59,6 @@ public boolean parseNewValue(String s) { return false; } - public abstract void change(ChunkData root); + public abstract void change(ChunkData root, boolean force); - public abstract void force(ChunkData root); } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/BiomeField.java b/src/main/java/net/querz/mcaselector/changer/fields/BiomeField.java index 617f868d..641ff6c4 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/BiomeField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/BiomeField.java @@ -4,6 +4,7 @@ import net.querz.mcaselector.changer.FieldType; import net.querz.mcaselector.io.registry.BiomeRegistry; import net.querz.mcaselector.io.mca.ChunkData; +import net.querz.mcaselector.version.ChunkFilter; import net.querz.mcaselector.version.VersionController; public class BiomeField extends Field { @@ -56,12 +57,13 @@ public BiomeRegistry.BiomeIdentifier getOldValue(ChunkData data) { } @Override - public void change(ChunkData data) { - VersionController.getChunkFilter(data.getDataVersion()).changeBiome(data.region().getData(), getNewValue()); + public void change(ChunkData data, boolean force) { + ChunkFilter filter = VersionController.getChunkFilter(data.getDataVersion()); + if (force) { + filter.forceBiome(data.region().getData(), getNewValue()); + } else { + filter.changeBiome(data.region().getData(), getNewValue()); + } } - @Override - public void force(ChunkData data) { - VersionController.getChunkFilter(data.getDataVersion()).forceBiome(data.region().getData(), getNewValue()); - } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/CustomField.java b/src/main/java/net/querz/mcaselector/changer/fields/CustomField.java index 0481944c..6f5d86a1 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/CustomField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/CustomField.java @@ -49,7 +49,7 @@ public boolean parseNewValue(String s) { } @Override - public void change(ChunkData root) { + public void change(ChunkData root, boolean force) { // this needs to be thread safe because all threads use the same ScriptEngine synchronized (lock) { engine.put("region", root.region() != null && root.region().getData() != null ? root.region().getData() : null); @@ -64,8 +64,4 @@ public void change(ChunkData root) { } } - @Override - public void force(ChunkData root) { - change(root); - } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/DataVersionField.java b/src/main/java/net/querz/mcaselector/changer/fields/DataVersionField.java index 912d8dfe..d3bdff40 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/DataVersionField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/DataVersionField.java @@ -31,37 +31,25 @@ public boolean parseNewValue(String s) { } @Override - public void change(ChunkData data) { + public void change(ChunkData data, boolean force) { IntTag tag = data.region().getData().getIntTag("DataVersion"); - if (tag != null) { + if (tag != null || force) { data.region().getData().putInt("DataVersion", getNewValue()); } if (data.poi() != null) { tag = data.poi().getData().getIntTag("DataVersion"); - if (tag != null) { + if (tag != null || force) { data.region().getData().putInt("DataVersion", getNewValue()); } } if (data.entities() != null) { tag = data.entities().getData().getIntTag("DataVersion"); - if (tag != null) { + if (tag != null || force) { data.region().getData().putInt("DataVersion", getNewValue()); } } } - - @Override - public void force(ChunkData data) { - data.region().getData().putInt("DataVersion", getNewValue()); - - if (data.poi() != null) { - data.poi().getData().putInt("DataVersion", getNewValue()); - } - - if (data.entities() != null) { - data.entities().getData().putInt("DataVersion", getNewValue()); - } - } + } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/DeleteEntitiesField.java b/src/main/java/net/querz/mcaselector/changer/fields/DeleteEntitiesField.java index 13e6938d..4bdbcbdc 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/DeleteEntitiesField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/DeleteEntitiesField.java @@ -26,12 +26,8 @@ public boolean parseNewValue(String s) { } @Override - public void change(ChunkData data) { + public void change(ChunkData data, boolean force) { VersionController.getEntityFilter(data.getDataVersion()).deleteEntities(data, null); } - @Override - public void force(ChunkData data) { - change(data); - } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/DeleteSectionsField.java b/src/main/java/net/querz/mcaselector/changer/fields/DeleteSectionsField.java index 48d85f9c..df6cf1e5 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/DeleteSectionsField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/DeleteSectionsField.java @@ -38,7 +38,7 @@ public boolean parseNewValue(String s) { } @Override - public void change(ChunkData data) { + public void change(ChunkData data, boolean force) { if (data.region() != null && data.region().getData() != null) { ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); chunkFilter.deleteSections(data.region().getData(), getNewValue()); @@ -50,11 +50,6 @@ public void change(ChunkData data) { } } - @Override - public void force(ChunkData data) { - change(data); - } - @Override public String toString() { if (getNewValue().size() == 1 && getNewValue().get(0).isMaxRange()) { diff --git a/src/main/java/net/querz/mcaselector/changer/fields/DeleteStructureField.java b/src/main/java/net/querz/mcaselector/changer/fields/DeleteStructureField.java index 3fa01186..ff2e4582 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/DeleteStructureField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/DeleteStructureField.java @@ -51,7 +51,7 @@ public boolean parseNewValue(String s) { } @Override - public void change(ChunkData data) { + public void change(ChunkData data, boolean force) { ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); CompoundTag references = chunkFilter.getStructureReferences(data.region().getData()); CompoundTag starts = chunkFilter.getStructureStarts(data.region().getData()); @@ -63,11 +63,6 @@ public void change(ChunkData data) { } } - @Override - public void force(ChunkData data) { - change(data); - } - @Override public String toString() { StringJoiner sj = new StringJoiner(", "); diff --git a/src/main/java/net/querz/mcaselector/changer/fields/FixStatusField.java b/src/main/java/net/querz/mcaselector/changer/fields/FixStatusField.java index 40786545..acc4fd1f 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/FixStatusField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/FixStatusField.java @@ -29,7 +29,7 @@ public boolean parseNewValue(String s) { } @Override - public void change(ChunkData data) { + public void change(ChunkData data, boolean force) { ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); StringTag status = chunkFilter.getStatus(data.region().getData()); @@ -44,8 +44,4 @@ public void change(ChunkData data) { } } - @Override - public void force(ChunkData data) { - change(data); - } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/ForceBlendField.java b/src/main/java/net/querz/mcaselector/changer/fields/ForceBlendField.java index 0f54be2a..58411424 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/ForceBlendField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/ForceBlendField.java @@ -27,13 +27,9 @@ public boolean parseNewValue(String s) { } @Override - public void change(ChunkData root) { + public void change(ChunkData root, boolean force) { ChunkFilter chunkFilter = VersionController.getChunkFilter(root.getDataVersion()); chunkFilter.forceBlending(root.region().getData()); } - @Override - public void force(ChunkData root) { - change(root); - } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/InhabitedTimeField.java b/src/main/java/net/querz/mcaselector/changer/fields/InhabitedTimeField.java index b0424bf9..79ff182e 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/InhabitedTimeField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/InhabitedTimeField.java @@ -31,17 +31,12 @@ public boolean parseNewValue(String s) { } @Override - public void change(ChunkData data) { + public void change(ChunkData data, boolean force) { ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); LongTag tag = chunkFilter.getInhabitedTime(data.region().getData()); - if (tag != null) { + if (tag != null || force) { chunkFilter.setInhabitedTime(data.region().getData(), getNewValue()); } } - @Override - public void force(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); - chunkFilter.setInhabitedTime(data.region().getData(), getNewValue()); - } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/LastUpdateField.java b/src/main/java/net/querz/mcaselector/changer/fields/LastUpdateField.java index bfd87671..13caa17d 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/LastUpdateField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/LastUpdateField.java @@ -31,17 +31,12 @@ public boolean parseNewValue(String s) { } @Override - public void change(ChunkData data) { + public void change(ChunkData data, boolean force) { ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); LongTag tag = chunkFilter.getLastUpdate(data.region().getData()); - if (tag != null) { + if (tag != null || force) { chunkFilter.setLastUpdate(data.region().getData(), getNewValue()); } } - @Override - public void force(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); - chunkFilter.setLastUpdate(data.region().getData(), getNewValue()); - } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/LightPopulatedField.java b/src/main/java/net/querz/mcaselector/changer/fields/LightPopulatedField.java index 5413402c..d014d1ff 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/LightPopulatedField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/LightPopulatedField.java @@ -34,17 +34,12 @@ public boolean parseNewValue(String s) { } @Override - public void change(ChunkData data) { + public void change(ChunkData data, boolean force) { ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); ByteTag tag = chunkFilter.getLightPopulated(data.region().getData()); - if (tag != null) { + if (tag != null || force) { chunkFilter.setLightPopulated(data.region().getData(), getNewValue()); } } - @Override - public void force(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); - chunkFilter.setLightPopulated(data.region().getData(), getNewValue()); - } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/PreventRetrogenField.java b/src/main/java/net/querz/mcaselector/changer/fields/PreventRetrogenField.java index 8a4cd7db..745e0517 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/PreventRetrogenField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/PreventRetrogenField.java @@ -25,7 +25,7 @@ public boolean parseNewValue(String s) { } @Override - public void change(ChunkData data) { + public void change(ChunkData data, boolean force) { if (data.region() == null || data.region().getData() == null) { return; } @@ -33,8 +33,4 @@ public void change(ChunkData data) { data.region().getData().putString("Status", "full"); } - @Override - public void force(ChunkData data) { - change(data); - } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/ReferenceField.java b/src/main/java/net/querz/mcaselector/changer/fields/ReferenceField.java index c68970d7..bd57100e 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/ReferenceField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/ReferenceField.java @@ -31,7 +31,7 @@ public Boolean getOldValue(ChunkData data) { } @Override - public void change(ChunkData data) { + public void change(ChunkData data, boolean force) { if (!getNewValue()) { return; } @@ -57,8 +57,4 @@ public void change(ChunkData data) { } } - @Override - public void force(ChunkData data) { - change(data); - } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/ReplaceBlocksField.java b/src/main/java/net/querz/mcaselector/changer/fields/ReplaceBlocksField.java index 92c769d3..ddd37885 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/ReplaceBlocksField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/ReplaceBlocksField.java @@ -179,16 +179,11 @@ public Map getOldValue(ChunkData data) { } @Override - public void change(ChunkData data) { + public void change(ChunkData data, boolean force) { ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); chunkFilter.replaceBlocks(data.region().getData(), getNewValue()); } - @Override - public void force(ChunkData data) { - change(data); - } - @Override public String toString() { return getType().toString() + " = \"" + valueToString() + "\""; diff --git a/src/main/java/net/querz/mcaselector/changer/fields/StatusField.java b/src/main/java/net/querz/mcaselector/changer/fields/StatusField.java index 05e91d49..2b22ad57 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/StatusField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/StatusField.java @@ -55,17 +55,12 @@ public boolean parseNewValue(String s) { } @Override - public void change(ChunkData data) { + public void change(ChunkData data, boolean force) { ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); StringTag tag = chunkFilter.getStatus(data.region().getData()); - if (tag != null) { + if (tag != null || force) { chunkFilter.setStatus(data.region().getData(), getNewValue()); } } - @Override - public void force(ChunkData data) { - ChunkFilter chunkFilter = VersionController.getChunkFilter(data.getDataVersion()); - chunkFilter.setStatus(data.region().getData(), getNewValue()); - } } diff --git a/src/main/java/net/querz/mcaselector/changer/fields/TimestampField.java b/src/main/java/net/querz/mcaselector/changer/fields/TimestampField.java index 2ac6009c..9ec1851a 100644 --- a/src/main/java/net/querz/mcaselector/changer/fields/TimestampField.java +++ b/src/main/java/net/querz/mcaselector/changer/fields/TimestampField.java @@ -26,7 +26,7 @@ public boolean parseNewValue(String s) { } @Override - public void change(ChunkData root) { + public void change(ChunkData root, boolean force) { if (root.region() != null) { root.region().setTimestamp(getNewValue()); } @@ -38,8 +38,4 @@ public void change(ChunkData root) { } } - @Override - public void force(ChunkData root) { - change(root); - } } diff --git a/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java b/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java index 2e3bc052..b7304f07 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java +++ b/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java @@ -21,11 +21,7 @@ private boolean relocateChunk(Chunk c, Point3i offset) { public void applyFieldChanges(List> fields, boolean force) { for (Field field : fields) { - if (force) { - field.force(this); - } else { - field.change(this); - } + field.change(this, force); } } From 81af8c4275323d1d4cc9c2bda5302bcf88238ddc Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Mon, 1 Aug 2022 16:12:02 +0200 Subject: [PATCH 13/14] Fail fast in Chunk.getDataVersion --- .../net/querz/mcaselector/io/mca/Chunk.java | 17 ++++++++++++----- .../net/querz/mcaselector/io/mca/MCAFile.java | 3 --- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/querz/mcaselector/io/mca/Chunk.java b/src/main/java/net/querz/mcaselector/io/mca/Chunk.java index cd2a9911..baaa972d 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/Chunk.java +++ b/src/main/java/net/querz/mcaselector/io/mca/Chunk.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.RandomAccessFile; import java.util.List; +import java.util.NoSuchElementException; import java.util.function.Function; import java.util.zip.DeflaterOutputStream; import java.util.zip.GZIPInputStream; @@ -84,6 +85,10 @@ public void load(RandomAccessFile raf) throws IOException { } public int save(DataOutput out) throws IOException { + if (data == null) { + throw new IllegalStateException("Can't save unloaded chunk"); + } + ExposedByteArrayOutputStream baos = new ExposedByteArrayOutputStream(); // CHECK DataOutputStream wrapper unnecessary? @@ -99,10 +104,7 @@ public int save(DataOutput out) throws IOException { // save mcc file if chunk doesn't fit in mca file if (baos.size() > 1048576) { // XXX magic number // if the chunk's version is below 2203, we throw an exception instead - Integer dataVersion = ValidationHelper.withDefault(this::getDataVersion, null); - if (dataVersion == null) { - throw new RuntimeException("no DataVersion for oversized chunk"); - } else if (dataVersion < 2203) { + if (getDataVersion() < 2203) { // XXX magic number throw new RuntimeException("chunk at " + absoluteLocation + " is oversized and can't be saved when DataVersion is below 2203"); } @@ -139,7 +141,12 @@ public void setData(CompoundTag data) { } public int getDataVersion() { - return data.getInt("DataVersion"); + int dataVersion = data.getInt("DataVersion"); + if (dataVersion == 0) { + // FIXME upstream NBT's primitive getters should fail fast instead + throw new NoSuchElementException("Chunk NBT does not have DataVersion property"); + } + return dataVersion; } public CompressionType getCompressionType() { diff --git a/src/main/java/net/querz/mcaselector/io/mca/MCAFile.java b/src/main/java/net/querz/mcaselector/io/mca/MCAFile.java index 4c796366..3f4da6e7 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/MCAFile.java +++ b/src/main/java/net/querz/mcaselector/io/mca/MCAFile.java @@ -451,9 +451,6 @@ protected void mergeChunksInto(MCAFile destination, Point3i offset, boolean o if (ranges != null) { int sourceVersion = sourceChunk.getDataVersion(); - if (sourceVersion == 0) { - continue; - } int destinationVersion; if (destinationChunk == null || destinationChunk.isEmpty()) { From 3738e76bf8eb097509de321d168c710c67612301 Mon Sep 17 00:00:00 2001 From: HoldYourWaffle Date: Mon, 1 Aug 2022 16:25:43 +0200 Subject: [PATCH 14/14] Fail fast in ChunkData.getDataVersion --- .../java/net/querz/mcaselector/io/mca/ChunkData.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java b/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java index b7304f07..1dd10b17 100644 --- a/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java +++ b/src/main/java/net/querz/mcaselector/io/mca/ChunkData.java @@ -4,6 +4,7 @@ import net.querz.mcaselector.point.Point3i; import java.util.List; +import java.util.NoSuchElementException; public record ChunkData(RegionChunk region, PoiChunk poi, EntitiesChunk entities) { @@ -13,6 +14,7 @@ public boolean relocate(Point3i offset) { } private boolean relocateChunk(Chunk c, Point3i offset) { + // MAINTAINER why do we check if DataVersion exists, shouldn't that be a (fast-failing) irrecoverable corruption? if (c != null && c.getData() != null && c.getData().containsKey("DataVersion")) { return c.relocate(offset); } @@ -34,11 +36,15 @@ public int getDataVersion() { source = entities; } else { // MAINTAINER why not check poi data? - // MAINTAINER fail fast? - return 0; + throw new IllegalStateException("ChunkData does not contain any NBT data"); } - return source.getData().getInt("DataVersion"); + int dataVersion = source.getData().getInt("DataVersion"); + if (dataVersion == 0) { + // FIXME upstream NBT's primitive getters should fail fast instead + throw new NoSuchElementException("Chunk NBT does not have DataVersion property"); + } + return dataVersion; } }