diff --git a/src/main/java/com/gtnewhorizons/postea/api/BlockReplacementManager.java b/src/main/java/com/gtnewhorizons/postea/api/BlockReplacementManager.java index 027008a..168362d 100644 --- a/src/main/java/com/gtnewhorizons/postea/api/BlockReplacementManager.java +++ b/src/main/java/com/gtnewhorizons/postea/api/BlockReplacementManager.java @@ -1,14 +1,12 @@ package com.gtnewhorizons.postea.api; import java.util.function.Consumer; -import java.util.function.Function; import javax.annotation.Nonnull; import net.minecraft.block.Block; import net.minecraftforge.oredict.OreDictionary; -import com.gtnewhorizons.postea.utility.BlockConversionInfo; import com.gtnewhorizons.postea.utility.IDRegistry; import com.gtnewhorizons.postea.utility.MissingMappingHandler; import com.gtnewhorizons.postea.utility.SimpleTransformationRegistry; @@ -48,7 +46,7 @@ public abstract class BlockReplacementManager { * @param transformer The transformer to apply. */ @SuppressWarnings("unused") - public static void addTransformationHandler(String originalId, Function transformer) { + public static void addTransformationHandler(String originalId, IBlockTransformationHandler transformer) { if (originalId == null) throw new IllegalArgumentException("original id is null"); if (transformer == null) throw new IllegalArgumentException("transformer is null"); TransformerRegistry.addBlockTransformer(originalId, transformer); diff --git a/src/main/java/com/gtnewhorizons/postea/api/IBlockTransformationHandler.java b/src/main/java/com/gtnewhorizons/postea/api/IBlockTransformationHandler.java new file mode 100644 index 0000000..e183082 --- /dev/null +++ b/src/main/java/com/gtnewhorizons/postea/api/IBlockTransformationHandler.java @@ -0,0 +1,9 @@ +package com.gtnewhorizons.postea.api; + +import com.gtnewhorizons.postea.utility.BlockConversionInfo; + +@FunctionalInterface +public interface IBlockTransformationHandler { + + boolean apply(BlockConversionInfo info); +} diff --git a/src/main/java/com/gtnewhorizons/postea/api/IItemStackTransformationHandler.java b/src/main/java/com/gtnewhorizons/postea/api/IItemStackTransformationHandler.java new file mode 100644 index 0000000..d4be2dd --- /dev/null +++ b/src/main/java/com/gtnewhorizons/postea/api/IItemStackTransformationHandler.java @@ -0,0 +1,9 @@ +package com.gtnewhorizons.postea.api; + +import net.minecraft.nbt.NBTTagCompound; + +@FunctionalInterface +public interface IItemStackTransformationHandler { + + boolean apply(String originalId, NBTTagCompound stack); +} diff --git a/src/main/java/com/gtnewhorizons/postea/api/ItemStackReplacementManager.java b/src/main/java/com/gtnewhorizons/postea/api/ItemStackReplacementManager.java index 51a0063..949e126 100644 --- a/src/main/java/com/gtnewhorizons/postea/api/ItemStackReplacementManager.java +++ b/src/main/java/com/gtnewhorizons/postea/api/ItemStackReplacementManager.java @@ -1,6 +1,5 @@ package com.gtnewhorizons.postea.api; -import java.util.function.BiFunction; import java.util.function.Consumer; import javax.annotation.Nonnull; @@ -8,7 +7,6 @@ import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.oredict.OreDictionary; import com.gtnewhorizons.postea.utility.IDRegistry; @@ -52,8 +50,7 @@ public abstract class ItemStackReplacementManager { * @param transformer The transformer to apply. */ @SuppressWarnings("unused") - public static void addTransformationHandler(String originalId, - BiFunction transformer) { + public static void addTransformationHandler(String originalId, IItemStackTransformationHandler transformer) { if (originalId == null) throw new IllegalArgumentException("original id is null"); if (transformer == null) throw new IllegalArgumentException("transformer is null"); TransformerRegistry.addStackTransformer(originalId, transformer); diff --git a/src/main/java/com/gtnewhorizons/postea/utility/SimpleTransformationRegistry.java b/src/main/java/com/gtnewhorizons/postea/utility/SimpleTransformationRegistry.java index 815546c..38a2586 100644 --- a/src/main/java/com/gtnewhorizons/postea/utility/SimpleTransformationRegistry.java +++ b/src/main/java/com/gtnewhorizons/postea/utility/SimpleTransformationRegistry.java @@ -1,8 +1,6 @@ package com.gtnewhorizons.postea.utility; import java.util.Map; -import java.util.function.BiFunction; -import java.util.function.Function; import net.minecraft.block.Block; import net.minecraft.item.Item; @@ -10,7 +8,9 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.oredict.OreDictionary; +import com.gtnewhorizons.postea.api.IBlockTransformationHandler; import com.gtnewhorizons.postea.api.IDExtenderCompat; +import com.gtnewhorizons.postea.api.IItemStackTransformationHandler; /** * A registry for simple item and block transformations. A common use case is mod removal, replacements or deprecations. @@ -114,7 +114,7 @@ public static void addSimpleTransformer(String originalId, int originalMeta, Blo * * @implNote This implementation has constant-time runtime. */ - private static class SimpleBlockTransformationHandler implements Function { + private static class SimpleBlockTransformationHandler implements IBlockTransformationHandler { private final Map> metaMap; @@ -123,7 +123,7 @@ private static class SimpleBlockTransformationHandler implements Function mapping = SimpleTransformationMap .getFromSubMap(metaMap, info.metadata); if (mapping == null || mapping.targetRuntimeId <= -1) return false; @@ -176,7 +176,7 @@ public static void addSimpleTransformer(String originalId, int originalMeta, Ite * * @implNote This implementation has constant-time runtime. */ - private static class SimpleItemTransformationHandler implements BiFunction { + private static class SimpleItemTransformationHandler implements IItemStackTransformationHandler { private final Map> metaMap; @@ -185,7 +185,7 @@ private static class SimpleItemTransformationHandler implements BiFunction mapping = SimpleTransformationMap.getFromSubMap(metaMap, meta); if (mapping == null || mapping.targetRuntimeId <= -1) return false; diff --git a/src/main/java/com/gtnewhorizons/postea/utility/TransformerRegistry.java b/src/main/java/com/gtnewhorizons/postea/utility/TransformerRegistry.java index 7b8c4be..aec6bc1 100644 --- a/src/main/java/com/gtnewhorizons/postea/utility/TransformerRegistry.java +++ b/src/main/java/com/gtnewhorizons/postea/utility/TransformerRegistry.java @@ -2,8 +2,6 @@ import java.util.Collection; import java.util.List; -import java.util.function.BiFunction; -import java.util.function.Function; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -15,7 +13,9 @@ import org.apache.commons.lang3.tuple.Pair; import com.google.common.collect.LinkedListMultimap; +import com.gtnewhorizons.postea.api.IBlockTransformationHandler; import com.gtnewhorizons.postea.api.IDExtenderCompat; +import com.gtnewhorizons.postea.api.IItemStackTransformationHandler; import com.gtnewhorizons.postea.api.TriFunction; import cpw.mods.fml.common.Loader; @@ -27,9 +27,9 @@ */ public class TransformerRegistry { - private static final LinkedListMultimap> ITEM_REPLACEMENT_MAP = LinkedListMultimap + private static final LinkedListMultimap ITEM_REPLACEMENT_MAP = LinkedListMultimap .create(); - public static final LinkedListMultimap> BLOCK_REPLACEMENT_MAP = LinkedListMultimap + public static final LinkedListMultimap BLOCK_REPLACEMENT_MAP = LinkedListMultimap .create(); private static final LinkedListMultimap> TILE_ENTITY_REPLACEMENT_MAP = LinkedListMultimap .create(); @@ -38,13 +38,13 @@ public class TransformerRegistry { * Pivoting on the id is faster than pivoting on the strings so this should help with perf a bit. * Generated during the mapping update event whilst entering/loading a world. */ - private static final Int2ObjectOpenHashMap>>> RUNTIME_ITEM_REPLACEMENT_MAP = new Int2ObjectOpenHashMap<>(); + private static final Int2ObjectOpenHashMap>> RUNTIME_ITEM_REPLACEMENT_MAP = new Int2ObjectOpenHashMap<>(); /** * Map of blockIO -> originalName+transformationHandler. * Pivoting on the id is faster than pivoting on the strings so this should help with perf a bit. * Generated during the mapping update event whilst entering/loading a world. */ - private static final Int2ObjectOpenHashMap>>> RUNTIME_BLOCK_REPLACEMENT_MAP = new Int2ObjectOpenHashMap<>(); + private static final Int2ObjectOpenHashMap>> RUNTIME_BLOCK_REPLACEMENT_MAP = new Int2ObjectOpenHashMap<>(); // region FML Life Cycle handlers /** @@ -94,7 +94,7 @@ public static void onIdMappingsChanged() { * @param transformer The transformation handler that will execute a transformation on the block. */ public static void addBlockTransformer(@Nonnull String originalId, - @Nonnull Function transformer) { + @Nonnull IBlockTransformationHandler transformer) { BLOCK_REPLACEMENT_MAP.put(originalId, transformer); } @@ -112,7 +112,7 @@ public static void addBlockTransformer(@Nonnull String originalId, * @param transformer The transformation handler that will execute a transformation on the block. */ public static void addStackTransformer(@Nonnull String originalId, - @Nonnull BiFunction transformer) { + @Nonnull IItemStackTransformationHandler transformer) { ITEM_REPLACEMENT_MAP.put(originalId, transformer); } @@ -137,7 +137,7 @@ public static void addTileEntityTransformer(@Nonnull String originalId, // region transformation handlers public static @Nullable BlockConversionInfo getBlockReplacement(int blockId, byte metadata, World world, int x, int y, int z) { - Pair>> data = RUNTIME_BLOCK_REPLACEMENT_MAP.get(blockId); + Pair> data = RUNTIME_BLOCK_REPLACEMENT_MAP.get(blockId); if (data == null) return null; BlockConversionInfo blockConversionInfo = new BlockConversionInfo( // transparently maps the id to the original id if it's a dummy id @@ -148,7 +148,7 @@ public static void addTileEntityTransformer(@Nonnull String originalId, y, z, world); - for (Function transformer : data.getValue()) { + for (IBlockTransformationHandler transformer : data.getValue()) { if (transformer.apply(blockConversionInfo)) { return blockConversionInfo; } @@ -161,12 +161,12 @@ public static void transformItem(NBTTagCompound tag) { if (tag.hasNoTags() || !tag.hasKey("id")) return; // get handler int id = IDExtenderCompat.getItemStackID(tag); - Pair>> data = RUNTIME_ITEM_REPLACEMENT_MAP.get(id); + Pair> data = RUNTIME_ITEM_REPLACEMENT_MAP.get(id); // abort early if handler not found if (data != null && !data.getValue() .isEmpty()) { // apply handlers - for (BiFunction transformer : data.getValue()) { + for (IItemStackTransformationHandler transformer : data.getValue()) { if (transformer.apply(data.getKey(), tag)) { return; }