From 40b70bfec36a72e6a6bbc9468cbef9b6a054d596 Mon Sep 17 00:00:00 2001 From: Connor Colenso Date: Mon, 30 Oct 2023 20:02:08 +0000 Subject: [PATCH] World usage working --- .../postea/API/BlockReplacementManager.java | 3 +- .../colen/postea/API/ChunkFixerUtility.java | 36 ++++++++++++------- .../API/TileEntityReplacementManager.java | 18 +++------- src/main/java/com/colen/postea/Postea.java | 16 +++++---- .../mixins/early/MixinAnvilChunkLoader.java | 2 +- 5 files changed, 42 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/colen/postea/API/BlockReplacementManager.java b/src/main/java/com/colen/postea/API/BlockReplacementManager.java index ce621a0..ba4c331 100644 --- a/src/main/java/com/colen/postea/API/BlockReplacementManager.java +++ b/src/main/java/com/colen/postea/API/BlockReplacementManager.java @@ -1,6 +1,7 @@ package com.colen.postea.API; import akka.japi.Pair; +import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; import net.minecraft.item.Item; @@ -22,7 +23,7 @@ public class BlockReplacementManager { @SuppressWarnings("unused") public static Pair getBlockReplacement(int blockID, int metadataIn) { Block block = Block.getBlockById(blockID); - String blockName = block.getUnlocalizedName(); + String blockName = GameRegistry.findUniqueIdentifierFor(block).toString(); Function> transformer = blockReplacementMap.getOrDefault(new BlockKey(blockName, metadataIn), null); diff --git a/src/main/java/com/colen/postea/API/ChunkFixerUtility.java b/src/main/java/com/colen/postea/API/ChunkFixerUtility.java index 817bc07..9f7cf5f 100644 --- a/src/main/java/com/colen/postea/API/ChunkFixerUtility.java +++ b/src/main/java/com/colen/postea/API/ChunkFixerUtility.java @@ -4,21 +4,22 @@ import akka.japi.Pair; import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.world.World; import java.util.ArrayList; import java.util.List; +import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Collectors; public class ChunkFixerUtility { - public static void processChunkNBT(NBTTagCompound compound) { - transformTileEntities(compound); - transformNormalBlocks(compound); - + public static void processChunkNBT(NBTTagCompound compound, World world) { + transformTileEntities(compound, world); + transformNormalBlocks(compound, world); } - private static void transformNormalBlocks(NBTTagCompound compound) { + private static void transformNormalBlocks(NBTTagCompound compound, World world) { NBTTagCompound level = compound.getCompoundTag("Level"); NBTTagList sections = level.getTagList("Sections", 10); for (int i = 0; i < sections.tagCount(); i++) { @@ -32,8 +33,19 @@ public class ChunkFixerUtility { Pair output = BlockReplacementManager.getBlockReplacement(blockId, metadata); if (output != null) { - setBlockInfo(Block.getBlockById(output.first()), index, blockArray); - setMetadata(output.second(), index, metadataArray); + int newBlockId = output.first(); + int newMetadata = output.second(); + + blockArray[index * 2] = (byte) ((newBlockId >> 8) & 0xFF); + blockArray[index * 2 + 1] = (byte) (newBlockId & 0xFF); + + if ((index & 1) == 0) { // Even + metadataArray[index / 2] &= 0xF0; + metadataArray[index / 2] |= (newMetadata & 0x0F); + } else { // Odd + metadataArray[index / 2] &= 0x0F; + metadataArray[index / 2] |= ((newMetadata << 4) & 0xF0); + } } } } @@ -44,10 +56,10 @@ public class ChunkFixerUtility { * * @param chunkNBT The chunk's NBT data. */ - public static void transformTileEntities(NBTTagCompound chunkNBT) { + public static void transformTileEntities(NBTTagCompound chunkNBT, World world) { NBTTagCompound level = chunkNBT.getCompoundTag("Level"); - Pair, NBTTagList> output = adjustTileEntities(level.getTagList("TileEntities", 10)); + Pair, NBTTagList> output = adjustTileEntities(level.getTagList("TileEntities", 10), world); List conversionInfoList = output.first(); NBTTagList tileEntities = output.second(); @@ -118,7 +130,7 @@ public class ChunkFixerUtility { metadataArray[metadataIndex] = currentMetadataByte; } - private static Pair, NBTTagList> adjustTileEntities(NBTTagList tileEntities) { + private static Pair, NBTTagList> adjustTileEntities(NBTTagList tileEntities, World world) { List conversionInfo = new ArrayList<>(); NBTTagList tileEntitiesCopy = new NBTTagList(); @@ -128,14 +140,14 @@ public class ChunkFixerUtility { String tileEntityId = tileEntity.getString("id"); // Check if we have a transformer registered for this tile entity ID - Function transformationFunction = TileEntityReplacementManager.getTileEntityToNormalBlockTransformerFunction(tileEntityId); + BiFunction transformationFunction = TileEntityReplacementManager.getTileEntityToNormalBlockTransformerFunction(tileEntityId); if (transformationFunction != null) { int x = tileEntity.getInteger("x"); int y = tileEntity.getInteger("y"); int z = tileEntity.getInteger("z"); - BlockInfo blockInfo = transformationFunction.apply(tileEntity); + BlockInfo blockInfo = transformationFunction.apply(tileEntity, world); if (blockInfo.tileTransformer != null) { tileEntitiesCopy.appendTag(blockInfo.tileTransformer.apply(tileEntity)); diff --git a/src/main/java/com/colen/postea/API/TileEntityReplacementManager.java b/src/main/java/com/colen/postea/API/TileEntityReplacementManager.java index d009588..799a475 100644 --- a/src/main/java/com/colen/postea/API/TileEntityReplacementManager.java +++ b/src/main/java/com/colen/postea/API/TileEntityReplacementManager.java @@ -1,30 +1,22 @@ package com.colen.postea.API; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; import java.util.HashMap; import java.util.Map; +import java.util.function.BiFunction; import java.util.function.Function; public class TileEntityReplacementManager { - private static final Map> tileEntityFixMap = new HashMap<>(); - private static final HashMap> tileEntityToNormalBlockTransformer = new HashMap<>(); + private static final HashMap> tileEntityToNormalBlockTransformer = new HashMap<>(); - @SuppressWarnings("unused") - public static void tileEntityFixer(String tileName , Function fixerFunction) { - tileEntityFixMap.put(tileName, fixerFunction); - } - - public static Function getTileEntityFixer(String tileName) { - return tileEntityFixMap.getOrDefault(tileName, null); - } - - public static void tileEntityTransformer(String tileEntityId, Function transformerFunction) { + public static void tileEntityTransformer(String tileEntityId, BiFunction transformerFunction) { tileEntityToNormalBlockTransformer.put(tileEntityId, transformerFunction); } - public static Function getTileEntityToNormalBlockTransformerFunction(String tileEntityId) { + public static BiFunction getTileEntityToNormalBlockTransformerFunction(String tileEntityId) { return tileEntityToNormalBlockTransformer.getOrDefault(tileEntityId, null); } } diff --git a/src/main/java/com/colen/postea/Postea.java b/src/main/java/com/colen/postea/Postea.java index e8ecba9..050d239 100644 --- a/src/main/java/com/colen/postea/Postea.java +++ b/src/main/java/com/colen/postea/Postea.java @@ -35,12 +35,16 @@ public class Postea { };*/ //TileEntityReplacementManager.tileEntityFixer("GT_TileEntity_Ores", myTransformer); - TileEntityReplacementManager.tileEntityTransformer("GT_TileEntity_Ores", (tag) -> { - if (tag.getInteger("m") == 86) { - return new ChunkFixerUtility.BlockInfo(Blocks.wool, 5); + TileEntityReplacementManager.tileEntityTransformer("GT_TileEntity_Ores", (tag, world) -> { + if (world.provider.dimensionId == -1) { + return new ChunkFixerUtility.BlockInfo(Blocks.wool, 1); } - return new ChunkFixerUtility.BlockInfo(Blocks.wool, 1); + if (world.provider.dimensionId == 1) { + return new ChunkFixerUtility.BlockInfo(Blocks.wool, 2); + } + + return new ChunkFixerUtility.BlockInfo(Blocks.wool, 3); }); @@ -70,7 +74,7 @@ public class Postea { return new ChunkFixerUtility.BlockInfo(Blocks.chest, 0, chestTransformer); });*/ - TileEntityReplacementManager.tileEntityTransformer("Chest", (tag) -> { + TileEntityReplacementManager.tileEntityTransformer("Chest", (tag, world) -> { Function chestTransformer = (oldTag) -> { @@ -105,7 +109,7 @@ public class Postea { return new Pair<>(7, 0); }; - BlockReplacementManager.addBlockReplacement("grass", 0, blockTransformer); + BlockReplacementManager.addBlockReplacement("minecraft:grass", 0, blockTransformer); } diff --git a/src/main/java/com/colen/postea/mixins/early/MixinAnvilChunkLoader.java b/src/main/java/com/colen/postea/mixins/early/MixinAnvilChunkLoader.java index 82c8094..5534726 100644 --- a/src/main/java/com/colen/postea/mixins/early/MixinAnvilChunkLoader.java +++ b/src/main/java/com/colen/postea/mixins/early/MixinAnvilChunkLoader.java @@ -92,7 +92,7 @@ public abstract class MixinAnvilChunkLoader { @Inject(method = "checkedReadChunkFromNBT__Async", at = @At("HEAD"), remap = false) private void onCheckedReadChunkFromNBT__Async(World world, int x, int z, NBTTagCompound compound, CallbackInfoReturnable cir) { // Your injection code here - processChunkNBT(compound); + processChunkNBT(compound, world); } }