From 6d58c41dd8e96f439bdbc83fb1297ea99f63349f Mon Sep 17 00:00:00 2001 From: Guillaume Mercier <10gui-gui10@live.ca> Date: Tue, 20 Jan 2026 13:27:50 -0500 Subject: [PATCH] move internal stuff to a non-api endpoint and clean-up added structures --- .../java/com/gtnewhorizons/postea/Postea.java | 21 ++---- .../postea/api/BlockReplacementManager.java | 36 +++------- .../api/ItemStackReplacementManager.java | 23 +++--- .../postea/utility/ChunkFixerUtility.java | 10 +-- .../postea/utility/ItemFixerUtility.java | 6 +- .../MissingMappingHandler.java} | 9 +-- .../postea/utility/TransformerRegistry.java | 70 +++++++++++++++++++ 7 files changed, 104 insertions(+), 71 deletions(-) rename src/main/java/com/gtnewhorizons/postea/{PosteaMissingMappingHandler.java => utility/MissingMappingHandler.java} (96%) create mode 100644 src/main/java/com/gtnewhorizons/postea/utility/TransformerRegistry.java diff --git a/src/main/java/com/gtnewhorizons/postea/Postea.java b/src/main/java/com/gtnewhorizons/postea/Postea.java index fa4c8f8..eac8908 100644 --- a/src/main/java/com/gtnewhorizons/postea/Postea.java +++ b/src/main/java/com/gtnewhorizons/postea/Postea.java @@ -1,9 +1,7 @@ package com.gtnewhorizons.postea; -import static com.gtnewhorizons.postea.api.BlockReplacementManager.blockReplacementMap; -import static com.gtnewhorizons.postea.api.BlockReplacementManager.posteaMarkedIDs; - -import net.minecraft.block.Block; +import com.gtnewhorizons.postea.utility.MissingMappingHandler; +import com.gtnewhorizons.postea.utility.TransformerRegistry; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.event.FMLLoadCompleteEvent; @@ -29,29 +27,22 @@ public class Postea { @Mod.EventHandler public void onIdMappingsChanged(FMLModIdMappingEvent event) { - posteaMarkedIDs.clear(); - for (String name : blockReplacementMap.keySet()) { - Block block = Block.getBlockFromName(name); - if (block != null) { - int id = Block.getIdFromBlock(block); - posteaMarkedIDs.add(id); - } - } + TransformerRegistry.onIdMappingsChanged(); } @Mod.EventHandler public void onMissingMapping(FMLMissingMappingsEvent event) { - PosteaMissingMappingHandler.onMissingMapping(event); + MissingMappingHandler.onMissingMapping(event); } @Mod.EventHandler public void onLoadCompleted(FMLLoadCompleteEvent event) { - PosteaMissingMappingHandler.onLoadCompleted(); + MissingMappingHandler.onLoadCompleted(); } @Mod.EventHandler public void onServerStopping(FMLServerStoppingEvent event) { - posteaMarkedIDs.clear(); + TransformerRegistry.onServerStopping(); } } diff --git a/src/main/java/com/gtnewhorizons/postea/api/BlockReplacementManager.java b/src/main/java/com/gtnewhorizons/postea/api/BlockReplacementManager.java index 3671394..a65a1f0 100644 --- a/src/main/java/com/gtnewhorizons/postea/api/BlockReplacementManager.java +++ b/src/main/java/com/gtnewhorizons/postea/api/BlockReplacementManager.java @@ -4,40 +4,20 @@ import java.util.function.BiFunction; import net.minecraft.world.World; -import com.google.common.collect.LinkedListMultimap; -import com.gtnewhorizons.postea.PosteaMissingMappingHandler; import com.gtnewhorizons.postea.utility.BlockConversionInfo; - -import it.unimi.dsi.fastutil.ints.IntOpenHashSet; +import com.gtnewhorizons.postea.utility.TransformerRegistry; public class BlockReplacementManager { - public static final LinkedListMultimap> blockReplacementMap = LinkedListMultimap - .create(); - public static final IntOpenHashSet posteaMarkedIDs = new IntOpenHashSet(); - + /** + * Adds a custom transformer for a given id. + * + * @param blockNameIn The id of the block to transform. + * @param transformer The transformer to apply. + */ @SuppressWarnings("unused") public static void addBlockReplacement(String blockNameIn, BiFunction transformer) { - PosteaMissingMappingHandler.createDummyBlockIfNeeded(blockNameIn); - blockReplacementMap.put(blockNameIn, transformer); - } - - public static BlockConversionInfo getBlockReplacement(BlockConversionInfo blockConversionInfo, World world) { - // auto change the value in case a handler check it, we can't do anything about the block id - // but hopefully that's never going to be an issue - String originalName = PosteaMissingMappingHandler.getOriginalIDIfIDIsDummyID(blockConversionInfo.blockName); - blockConversionInfo.blockName = originalName; - for (BiFunction transformer : blockReplacementMap - .get(originalName)) { - BlockConversionInfo result = transformer.apply(blockConversionInfo, world); - if (result != null) return result; - } - return null; - } - - // We need this to save reprocessing blocks. - public static boolean blockNotConvertible(int blockID) { - return !posteaMarkedIDs.contains(blockID); + TransformerRegistry.addBlockReplacement(blockNameIn, transformer); } } diff --git a/src/main/java/com/gtnewhorizons/postea/api/ItemStackReplacementManager.java b/src/main/java/com/gtnewhorizons/postea/api/ItemStackReplacementManager.java index 58505da..f221c09 100644 --- a/src/main/java/com/gtnewhorizons/postea/api/ItemStackReplacementManager.java +++ b/src/main/java/com/gtnewhorizons/postea/api/ItemStackReplacementManager.java @@ -1,28 +1,25 @@ package com.gtnewhorizons.postea.api; -import java.util.Collection; import java.util.function.Function; import net.minecraft.nbt.NBTTagCompound; -import com.google.common.collect.LinkedListMultimap; -import com.gtnewhorizons.postea.PosteaMissingMappingHandler; +import com.gtnewhorizons.postea.utility.MissingMappingHandler; +import com.gtnewhorizons.postea.utility.TransformerRegistry; public class ItemStackReplacementManager { - private static final LinkedListMultimap> replacementMap = LinkedListMultimap - .create(); - // Public API for converting ItemStacks. + /** + * Adds a custom transformer for a given id. + * + * @param itemName The id of the block to transform. + * @param transformer The transformer to apply. + */ @SuppressWarnings("unused") public static void addItemReplacement(String itemName, Function transformer) { - PosteaMissingMappingHandler.createDummyItemIfNeeded(itemName); - replacementMap.put(itemName, transformer); - } - - @SuppressWarnings("unused") - public static Collection> getItemReplacement(String itemNameInternal) { - return replacementMap.get(PosteaMissingMappingHandler.getOriginalIDIfIDIsDummyID(itemNameInternal)); + MissingMappingHandler.createDummyItemIfNeeded(itemName); + TransformerRegistry.addItemReplacement(itemName, transformer); } } diff --git a/src/main/java/com/gtnewhorizons/postea/utility/ChunkFixerUtility.java b/src/main/java/com/gtnewhorizons/postea/utility/ChunkFixerUtility.java index d0c157c..c65c92a 100644 --- a/src/main/java/com/gtnewhorizons/postea/utility/ChunkFixerUtility.java +++ b/src/main/java/com/gtnewhorizons/postea/utility/ChunkFixerUtility.java @@ -1,6 +1,5 @@ package com.gtnewhorizons.postea.utility; -import static com.gtnewhorizons.postea.api.BlockReplacementManager.blockNotConvertible; import static com.gtnewhorizons.postea.utility.PosteaUtilities.getModListHash; import java.util.ArrayList; @@ -15,8 +14,6 @@ import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.storage.ExtendedBlockStorage; -import com.gtnewhorizons.postea.PosteaMissingMappingHandler; -import com.gtnewhorizons.postea.api.BlockReplacementManager; import com.gtnewhorizons.postea.api.TileEntityReplacementManager; import com.gtnewhorizons.postea.api.TriFunction; import com.gtnewhorizons.postea.compat.Compat; @@ -51,7 +48,7 @@ public class ChunkFixerUtility { // Skip air. if (blockId == AIR_ID) continue; // If this block has no registered Postea conversion, skip it. - if (blockNotConvertible(blockId)) continue; + if (TransformerRegistry.blockNotConvertible(blockId)) continue; // Cache block names to improve performance, as findUniqueIdentifierFor is expensive. Block block = Block.getBlockById(blockId); @@ -71,13 +68,12 @@ public class ChunkFixerUtility { blockConversionInfo.y = y + sectionY; blockConversionInfo.z = z + chunkZPos + 1; - BlockConversionInfo output = BlockReplacementManager - .getBlockReplacement(blockConversionInfo, world); + BlockConversionInfo output = TransformerRegistry.getBlockReplacement(blockConversionInfo, world); if (output != null) { access.setBlockId(x, y, z, output.blockID); access.setMeta(x, y, z, output.metadata); - } else if (PosteaMissingMappingHandler.isDummyBlock(block)) { + } else if (MissingMappingHandler.isDummyBlock(block)) { // clear out the slot if this is an unhandled dummy item. access.setBlockId(x, y, z, 0); access.setMeta(x, y, z, 0); diff --git a/src/main/java/com/gtnewhorizons/postea/utility/ItemFixerUtility.java b/src/main/java/com/gtnewhorizons/postea/utility/ItemFixerUtility.java index c6ca17a..cd2f4ce 100644 --- a/src/main/java/com/gtnewhorizons/postea/utility/ItemFixerUtility.java +++ b/src/main/java/com/gtnewhorizons/postea/utility/ItemFixerUtility.java @@ -6,9 +6,7 @@ import java.util.function.Function; import net.minecraft.item.Item; import net.minecraft.nbt.NBTTagCompound; -import com.gtnewhorizons.postea.PosteaMissingMappingHandler; import com.gtnewhorizons.postea.api.IDExtenderCompat; -import com.gtnewhorizons.postea.api.ItemStackReplacementManager; import cpw.mods.fml.common.registry.GameRegistry; @@ -26,7 +24,7 @@ public abstract class ItemFixerUtility { String itemNameInternal = uuid.modId + ":" + uuid.name; // abort early if no handlers - Collection> handlers = ItemStackReplacementManager + Collection> handlers = TransformerRegistry .getItemReplacement(itemNameInternal); if (handlers.isEmpty()) return; @@ -38,7 +36,7 @@ public abstract class ItemFixerUtility { } // if no handler overwrote anything on this stack, and it's a dummy, delete the stack. - if (PosteaMissingMappingHandler.isDummyItem(item)) { + if (MissingMappingHandler.isDummyItem(item)) { tag.removeTag("id"); tag.removeTag("idExt"); } diff --git a/src/main/java/com/gtnewhorizons/postea/PosteaMissingMappingHandler.java b/src/main/java/com/gtnewhorizons/postea/utility/MissingMappingHandler.java similarity index 96% rename from src/main/java/com/gtnewhorizons/postea/PosteaMissingMappingHandler.java rename to src/main/java/com/gtnewhorizons/postea/utility/MissingMappingHandler.java index 8edd233..8a397ba 100644 --- a/src/main/java/com/gtnewhorizons/postea/PosteaMissingMappingHandler.java +++ b/src/main/java/com/gtnewhorizons/postea/utility/MissingMappingHandler.java @@ -1,4 +1,4 @@ -package com.gtnewhorizons.postea; +package com.gtnewhorizons.postea.utility; import java.util.HashMap; import java.util.Map; @@ -10,12 +10,13 @@ import net.minecraft.block.material.Material; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; +import com.gtnewhorizons.postea.Postea; import com.gtnewhorizons.postea.compat.Compat; import cpw.mods.fml.common.event.FMLMissingMappingsEvent; import cpw.mods.fml.common.registry.GameRegistry; -public abstract class PosteaMissingMappingHandler { +public abstract class MissingMappingHandler { enum MappingType { /** Tells the mapping logic to register an Item. */ @@ -67,7 +68,7 @@ public abstract class PosteaMissingMappingHandler { private static final String DUMMY_ID_PREFIX_END = "d."; private static final String DUMMY_ID_PREFIX = DUMMY_ID_PREFIX_START + DUMMY_ID_PREFIX_END; - static void onLoadCompleted() { + public static void onLoadCompleted() { for (Map.Entry kv : DUMMY_TARGET_TYPES.entrySet()) { DummyMapping mapping = kv.getValue(); String originalId = kv.getKey(); @@ -98,7 +99,7 @@ public abstract class PosteaMissingMappingHandler { DUMMY_TARGET_TYPES.clear(); } - static void onMissingMapping(FMLMissingMappingsEvent event) { + public static void onMissingMapping(FMLMissingMappingsEvent event) { for (FMLMissingMappingsEvent.MissingMapping mapping : event.getAll()) { if (mapping.name.startsWith(DUMMY_ID_PREFIX)) { // for when a migrator ceases being registered, likely due to a removal. diff --git a/src/main/java/com/gtnewhorizons/postea/utility/TransformerRegistry.java b/src/main/java/com/gtnewhorizons/postea/utility/TransformerRegistry.java new file mode 100644 index 0000000..03c13c1 --- /dev/null +++ b/src/main/java/com/gtnewhorizons/postea/utility/TransformerRegistry.java @@ -0,0 +1,70 @@ +package com.gtnewhorizons.postea.utility; + +import java.util.Collection; +import java.util.function.BiFunction; +import java.util.function.Function; + +import net.minecraft.block.Block; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import com.google.common.collect.LinkedListMultimap; + +import it.unimi.dsi.fastutil.ints.IntOpenHashSet; + +public class TransformerRegistry { + + private static final LinkedListMultimap> ITEM_REPLACEMENT_MAP = LinkedListMultimap + .create(); + public static final LinkedListMultimap> BLOCK_REPLACEMENT_MAP = LinkedListMultimap + .create(); + public static final IntOpenHashSet POSTEA_MARKED_IDS = new IntOpenHashSet(); + + public static void addBlockReplacement(String blockNameIn, + BiFunction transformer) { + MissingMappingHandler.createDummyBlockIfNeeded(blockNameIn); + BLOCK_REPLACEMENT_MAP.put(blockNameIn, transformer); + } + + public static void addItemReplacement(String itemName, Function transformer) { + MissingMappingHandler.createDummyItemIfNeeded(itemName); + ITEM_REPLACEMENT_MAP.put(itemName, transformer); + } + + public static void onIdMappingsChanged() { + POSTEA_MARKED_IDS.clear(); + for (String name : BLOCK_REPLACEMENT_MAP.keySet()) { + Block block = Block.getBlockFromName(name); + if (block != null) { + int id = Block.getIdFromBlock(block); + POSTEA_MARKED_IDS.add(id); + } + } + } + + public static void onServerStopping() { + POSTEA_MARKED_IDS.clear(); + } + + public static Collection> getItemReplacement(String itemNameInternal) { + return ITEM_REPLACEMENT_MAP.get(MissingMappingHandler.getOriginalIDIfIDIsDummyID(itemNameInternal)); + } + + public static BlockConversionInfo getBlockReplacement(BlockConversionInfo blockConversionInfo, World world) { + // auto change the value in case a handler check it, we can't do anything about the block id + // but hopefully that's never going to be an issue + String originalName = MissingMappingHandler.getOriginalIDIfIDIsDummyID(blockConversionInfo.blockName); + blockConversionInfo.blockName = originalName; + for (BiFunction transformer : BLOCK_REPLACEMENT_MAP + .get(originalName)) { + BlockConversionInfo result = transformer.apply(blockConversionInfo, world); + if (result != null) return result; + } + return null; + } + + // We need this to save reprocessing blocks. + public static boolean blockNotConvertible(int blockID) { + return !POSTEA_MARKED_IDS.contains(blockID); + } +}