move internal stuff to a non-api endpoint and clean-up added structures

This commit is contained in:
Guillaume Mercier committed 2026-01-20 13:27:50 -05:00
1 parent 5d4b657868
commit 6d58c41dd8
7 files changed
+104 -71

No files matched your search

@@ -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();
}
}
@@ -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<String, BiFunction<BlockConversionInfo, World, BlockConversionInfo>> 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<BlockConversionInfo, World, BlockConversionInfo> 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<BlockConversionInfo, World, BlockConversionInfo> 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);
}
}
@@ -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<String, Function<NBTTagCompound, NBTTagCompound>> 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<NBTTagCompound, NBTTagCompound> transformer) {
PosteaMissingMappingHandler.createDummyItemIfNeeded(itemName);
replacementMap.put(itemName, transformer);
}
@SuppressWarnings("unused")
public static Collection<Function<NBTTagCompound, NBTTagCompound>> getItemReplacement(String itemNameInternal) {
return replacementMap.get(PosteaMissingMappingHandler.getOriginalIDIfIDIsDummyID(itemNameInternal));
MissingMappingHandler.createDummyItemIfNeeded(itemName);
TransformerRegistry.addItemReplacement(itemName, transformer);
}
}
@@ -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);
@@ -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<Function<NBTTagCompound, NBTTagCompound>> handlers = ItemStackReplacementManager
Collection<Function<NBTTagCompound, NBTTagCompound>> 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");
}
@@ -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<String, DummyMapping> 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.
@@ -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<String, Function<NBTTagCompound, NBTTagCompound>> ITEM_REPLACEMENT_MAP = LinkedListMultimap
.create();
public static final LinkedListMultimap<String, BiFunction<BlockConversionInfo, World, BlockConversionInfo>> BLOCK_REPLACEMENT_MAP = LinkedListMultimap
.create();
public static final IntOpenHashSet POSTEA_MARKED_IDS = new IntOpenHashSet();
public static void addBlockReplacement(String blockNameIn,
BiFunction<BlockConversionInfo, World, BlockConversionInfo> transformer) {
MissingMappingHandler.createDummyBlockIfNeeded(blockNameIn);
BLOCK_REPLACEMENT_MAP.put(blockNameIn, transformer);
}
public static void addItemReplacement(String itemName, Function<NBTTagCompound, NBTTagCompound> 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<Function<NBTTagCompound, NBTTagCompound>> 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<BlockConversionInfo, World, BlockConversionInfo> 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);
}
}