From 43991596617724ec17cc405ec13ea1486acb91d3 Mon Sep 17 00:00:00 2001 From: Connor Colenso Date: Mon, 30 Oct 2023 01:28:47 +0000 Subject: [PATCH] Some progress for block -> block --- .../java/com/colen/postea/API/BlockKey.java | 19 +++------ .../postea/API/BlockReplacementManager.java | 23 ++++++++--- .../colen/postea/API/ChunkFixerUtility.java | 40 ++++++++++++------- src/main/java/com/colen/postea/Postea.java | 12 ++++-- 4 files changed, 57 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/colen/postea/API/BlockKey.java b/src/main/java/com/colen/postea/API/BlockKey.java index e3c0ad3..91c52da 100644 --- a/src/main/java/com/colen/postea/API/BlockKey.java +++ b/src/main/java/com/colen/postea/API/BlockKey.java @@ -7,11 +7,11 @@ import net.minecraft.item.Item; public class BlockKey { - private final Block block; - private final int meta; + public final String blockName; + public final int meta; - public BlockKey(Block block, int meta) { - this.block = block; + public BlockKey(String blockName, int meta) { + this.blockName = blockName; this.meta = meta; } @@ -19,20 +19,13 @@ public class BlockKey { public boolean equals(Object o) { if (o == null) return false; if (o instanceof BlockKey that) { - return (this.meta == that.meta) && (this.block == that.block); + return (this.meta == that.meta) && (this.blockName.equals(that.blockName)); } else return false; } @Override public int hashCode() { - return Objects.hash(block, meta); + return Objects.hash(blockName, meta); } - public int getDamage() { - return meta; - } - - public Block getBlock() { - return block; - } } diff --git a/src/main/java/com/colen/postea/API/BlockReplacementManager.java b/src/main/java/com/colen/postea/API/BlockReplacementManager.java index 552d44d..ce621a0 100644 --- a/src/main/java/com/colen/postea/API/BlockReplacementManager.java +++ b/src/main/java/com/colen/postea/API/BlockReplacementManager.java @@ -1,25 +1,36 @@ package com.colen.postea.API; +import akka.japi.Pair; import net.minecraft.block.Block; import net.minecraft.item.Item; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; import static com.colen.postea.API.ItemStackReplacementManager.addItemReplacement; public class BlockReplacementManager { - private static final Map blockReplacementMap = new HashMap<>(); + private static final Map>> blockReplacementMap = new HashMap<>(); @SuppressWarnings("unused") - public static void addBlockReplacement(Block blockIn, int metadataIn, Block blockOut, int metadataOut) { - blockReplacementMap.put(new BlockKey(blockIn, metadataIn), new BlockKey(blockOut, metadataOut)); - addItemReplacement(Item.getItemFromBlock(blockIn), metadataIn, Item.getItemFromBlock(blockOut), metadataOut); + public static void addBlockReplacement(String blockNameIn, int metadataIn, Function> transformer) { + blockReplacementMap.put(new BlockKey(blockNameIn, metadataIn), transformer); } @SuppressWarnings("unused") - public static BlockKey getBlockReplacement(Block blockIn, int metadataIn) { - return blockReplacementMap.getOrDefault(new BlockKey(blockIn, metadataIn), null); + public static Pair getBlockReplacement(int blockID, int metadataIn) { + Block block = Block.getBlockById(blockID); + String blockName = block.getUnlocalizedName(); + + Function> transformer = blockReplacementMap.getOrDefault(new BlockKey(blockName, metadataIn), null); + + if (transformer == null) { + return null; + } else { + return transformer.apply(new BlockKey(blockName, metadataIn)); + } } + } diff --git a/src/main/java/com/colen/postea/API/ChunkFixerUtility.java b/src/main/java/com/colen/postea/API/ChunkFixerUtility.java index 347c45d..817bc07 100644 --- a/src/main/java/com/colen/postea/API/ChunkFixerUtility.java +++ b/src/main/java/com/colen/postea/API/ChunkFixerUtility.java @@ -13,7 +13,30 @@ import java.util.stream.Collectors; public class ChunkFixerUtility { public static void processChunkNBT(NBTTagCompound compound) { - replaceTileEntitiesWithNormalBlock(compound); + transformTileEntities(compound); + transformNormalBlocks(compound); + + } + + private static void transformNormalBlocks(NBTTagCompound compound) { + NBTTagCompound level = compound.getCompoundTag("Level"); + NBTTagList sections = level.getTagList("Sections", 10); + for (int i = 0; i < sections.tagCount(); i++) { + NBTTagCompound section = sections.getCompoundTagAt(i); + byte[] blockArray = section.getByteArray("Blocks16"); + byte[] metadataArray = section.getByteArray("Data"); + + for (int index = 0; index < blockArray.length / 2; index++) { + int blockId = ((blockArray[index * 2] & 0xFF) << 8) | (blockArray[index * 2 + 1] & 0xFF); + byte metadata = (byte) ((index & 1) == 0 ? (metadataArray[index / 2] & 0x0F) : ((metadataArray[index / 2] & 0xF0) >> 4)); + + Pair output = BlockReplacementManager.getBlockReplacement(blockId, metadata); + if (output != null) { + setBlockInfo(Block.getBlockById(output.first()), index, blockArray); + setMetadata(output.second(), index, metadataArray); + } + } + } } /** @@ -21,7 +44,7 @@ public class ChunkFixerUtility { * * @param chunkNBT The chunk's NBT data. */ - public static void replaceTileEntitiesWithNormalBlock(NBTTagCompound chunkNBT) { + public static void transformTileEntities(NBTTagCompound chunkNBT) { NBTTagCompound level = chunkNBT.getCompoundTag("Level"); Pair, NBTTagList> output = adjustTileEntities(level.getTagList("TileEntities", 10)); @@ -127,19 +150,6 @@ public class ChunkFixerUtility { } - private static void fixTileEntities(NBTTagCompound compound) { - NBTTagList tileEntities = compound.getCompoundTag("Level").getTagList("TileEntities", 10); - for (int i = 0; i < tileEntities.tagCount(); i++) { - NBTTagCompound tileEntity = tileEntities.getCompoundTagAt(i); - String tileEntityStringName = tileEntity.getString("id"); - Function tileFixer = TileEntityReplacementManager.getTileEntityFixer(tileEntityStringName); - - if (tileFixer != null) { - tileFixer.apply(tileEntity); - } - } - } - public static class ConversionInfo { public final int x; diff --git a/src/main/java/com/colen/postea/Postea.java b/src/main/java/com/colen/postea/Postea.java index 1f283e4..e8ecba9 100644 --- a/src/main/java/com/colen/postea/Postea.java +++ b/src/main/java/com/colen/postea/Postea.java @@ -1,5 +1,8 @@ package com.colen.postea; +import akka.japi.Pair; +import com.colen.postea.API.BlockKey; +import com.colen.postea.API.BlockReplacementManager; import com.colen.postea.API.ChunkFixerUtility; import com.colen.postea.API.TileEntityReplacementManager; import cpw.mods.fml.common.Mod; @@ -98,9 +101,12 @@ public class Postea { return new ChunkFixerUtility.BlockInfo(Blocks.chest, 0, chestTransformer); }); -// TileEntityReplacementManager.tileEntityToNormalBlockTransformer("Chest", (tag) -> { -// return new ChunkFixerUtility.BlockInfo(Blocks.coal_block, 0); -// }); + Function> blockTransformer = (blockKey) -> { + return new Pair<>(7, 0); + }; + + BlockReplacementManager.addBlockReplacement("grass", 0, blockTransformer); + } private NBTTagCompound cleanseNBT(String newTileEntityID, NBTTagCompound tag) {