diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java index 4e1ea2ea0..62f784b99 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java @@ -7,6 +7,7 @@ import com.fouristhenumber.utilitiesinexcess.client.IMCForNEI; import com.fouristhenumber.utilitiesinexcess.common.items.tools.ItemDestructionPickaxe; import com.fouristhenumber.utilitiesinexcess.common.items.tools.ItemReversingHoe; +import com.fouristhenumber.utilitiesinexcess.compat.ForgeMultipart.FMPCompat; import com.fouristhenumber.utilitiesinexcess.compat.ForgeMultipart.FMPItems; import com.fouristhenumber.utilitiesinexcess.compat.ForgeMultipart.multipart.Content; import com.fouristhenumber.utilitiesinexcess.compat.Mods; @@ -56,6 +57,7 @@ public void preInit(FMLPreInitializationEvent event) { } if (Mods.ForgeMicroBlock.isLoaded()) { FMPItems.init(); + FMPCompat.init(); } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/ForgeMultipart/FMPCompat.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/ForgeMultipart/FMPCompat.java new file mode 100644 index 000000000..f1ea96ac5 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/ForgeMultipart/FMPCompat.java @@ -0,0 +1,136 @@ +package com.fouristhenumber.utilitiesinexcess.compat.ForgeMultipart; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.fouristhenumber.utilitiesinexcess.compat.Mods; +import com.fouristhenumber.utilitiesinexcess.config.OtherConfig; + +import codechicken.microblock.BlockMicroMaterial; +import codechicken.microblock.MicroMaterialRegistry; +import cpw.mods.fml.common.registry.GameRegistry; + +public class FMPCompat { + + public static void init() { + registerMicroblock(ModBlocks.SMART_PUMP); + registerMicroblock(ModBlocks.TRADING_POST); + registerMicroblock(ModBlocks.COMPRESSED_COBBLESTONE, 0, 7); + registerMicroblock(ModBlocks.COMPRESSED_DIRT, 0, 7); + registerMicroblock(ModBlocks.DECORATIVE_BLOCKS, 0, 11); + registerMicroblock(ModBlocks.COMPRESSED_GRAVEL, 0, 7); + registerMicroblock(ModBlocks.COMPRESSED_SAND, 0, 7); + registerMicroblock(ModBlocks.COLORED_STONE_BRICKS, 0, 15); + registerMicroblock(ModBlocks.COLORED_WOOD_PLANKS, 0, 15); + registerMicroblock(ModBlocks.COLORED_GLOWSTONE, 0, 15); + registerMicroblock(ModBlocks.COLORED_STONE, 0, 15); + registerMicroblock(ModBlocks.COLORED_QUARTZ_BLOCK, 0, 15); + registerMicroblock(ModBlocks.COLORED_SOUL_SAND, 0, 15); + registerMicroblock(ModBlocks.COLORED_REDSTONE_LAMP, 0, 15); + registerMicroblock(ModBlocks.COLORED_BRICKS, 0, 15); + registerMicroblock(ModBlocks.COLORED_COBBLESTONE, 0, 15); + registerMicroblock(ModBlocks.COLORED_LAPIS_BLOCK, 0, 15); + registerMicroblock(ModBlocks.COLORED_OBSIDIAN, 0, 15); + registerMicroblock(ModBlocks.COLORED_REDSTONE_BLOCK, 0, 15); + registerMicroblock(ModBlocks.COLORED_COAL_BLOCK, 0, 15); + registerMicroblock(ModBlocks.DECORATIVE_GLASS, 0, 12); + registerMicroblock(ModBlocks.ENDSPARK); + registerMicroblock(ModBlocks.INVERTED_BLOCK); + registerMicroblock(ModBlocks.BEDROCKIUM_BLOCK); + registerMicroblock(ModBlocks.MAGIC_WOOD); + registerMicroblock(ModBlocks.ETHEREAL_GLASS, 0, 5); + registerMicroblock(ModBlocks.LAPIS_AETHERIUS, 0, 15); + + if (Mods.ExtraUtilities.isLoaded() || !OtherConfig.enableWorldConversion) return; + + registerRemap("ExtraUtilities:enderThermicPump", ModBlocks.SMART_PUMP); + registerRemap("ExtraUtilities:trading_post", ModBlocks.TRADING_POST); + registerRemap("tile.extrautils:cobblestone_compressed", ModBlocks.COMPRESSED_COBBLESTONE, 7); + registerRemap("tile.extrautils:cobblestone_compressed", ModBlocks.COMPRESSED_DIRT, 8, 0); + registerRemap("tile.extrautils:cobblestone_compressed", ModBlocks.COMPRESSED_DIRT, 9, 1); + registerRemap("tile.extrautils:cobblestone_compressed", ModBlocks.COMPRESSED_DIRT, 10, 2); + registerRemap("tile.extrautils:cobblestone_compressed", ModBlocks.COMPRESSED_DIRT, 11, 3); + registerRemap("tile.extrautils:cobblestone_compressed", ModBlocks.COMPRESSED_GRAVEL, 12, 0); + registerRemap("tile.extrautils:cobblestone_compressed", ModBlocks.COMPRESSED_GRAVEL, 13, 1); + registerRemap("tile.extrautils:cobblestone_compressed", ModBlocks.COMPRESSED_SAND, 14, 0); + registerRemap("tile.extrautils:cobblestone_compressed", ModBlocks.COMPRESSED_SAND, 15, 1); + registerRemap("tile.extrautils:colorStoneBrick", ModBlocks.COLORED_STONE_BRICKS, 15); + registerRemap("tile.extrautils:colorWoodPlanks", ModBlocks.COLORED_WOOD_PLANKS, 15); + registerRemap("tile.extrautils:color_lightgem", ModBlocks.COLORED_GLOWSTONE, 15); + registerRemap("tile.extrautils:color_stone", ModBlocks.COLORED_STONE, 15); + registerRemap("tile.extrautils:color_quartzBlock", ModBlocks.COLORED_QUARTZ_BLOCK, 15); + registerRemap("tile.extrautils:color_hellsand", ModBlocks.COLORED_SOUL_SAND, 15); + registerRemap("tile.extrautils:color_redstoneLight", ModBlocks.COLORED_REDSTONE_LAMP, 15); + registerRemap("tile.extrautils:color_brick", ModBlocks.COLORED_BRICKS, 15); + registerRemap("tile.extrautils:color_stonebrick", ModBlocks.COLORED_COBBLESTONE, 15); + registerRemap("tile.extrautils:color_blockLapis", ModBlocks.COLORED_LAPIS_BLOCK, 15); + registerRemap("tile.extrautils:color_obsidian", ModBlocks.COLORED_OBSIDIAN, 15); + registerRemap("tile.extrautils:color_blockRedstone", ModBlocks.COLORED_REDSTONE_BLOCK, 15); + registerRemap("tile.extrautils:color_blockCoal", ModBlocks.COLORED_COAL_BLOCK, 15); + registerRemap("tile.extrautils:decorativeBlock1", ModBlocks.DECORATIVE_BLOCKS, 0, 7); + registerRemap("tile.extrautils:decorativeBlock1", ModBlocks.DECORATIVE_BLOCKS, 1, 5); + registerRemap("tile.extrautils:decorativeBlock1", ModBlocks.DECORATIVE_BLOCKS, 2, 2); + registerRemap("tile.extrautils:decorativeBlock1", ModBlocks.DECORATIVE_BLOCKS, 3, 4); + registerRemap("tile.extrautils:decorativeBlock1", ModBlocks.DECORATIVE_BLOCKS, 4, 8); + registerRemap("tile.extrautils:decorativeBlock1", ModBlocks.DECORATIVE_BLOCKS, 6, 6); + registerRemap("tile.extrautils:decorativeBlock1", ModBlocks.DECORATIVE_BLOCKS, 7, 9); + registerRemap("tile.extrautils:decorativeBlock1", ModBlocks.DECORATIVE_BLOCKS, 9, 3); + registerRemap("tile.extrautils:decorativeBlock1", ModBlocks.DECORATIVE_BLOCKS, 10, 10); + registerRemap("tile.extrautils:decorativeBlock1", ModBlocks.DECORATIVE_BLOCKS, 12, 0); + registerRemap("tile.extrautils:decorativeBlock1", ModBlocks.DECORATIVE_BLOCKS, 13, 1); + registerRemap("tile.extrautils:decorativeBlock1", ModBlocks.DECORATIVE_BLOCKS, 14, 11); + registerRemap("tile.extrautils:decorativeBlock2", ModBlocks.DECORATIVE_GLASS, 11); + registerRemap("tile.extrautils:decorativeBlock1_11", ModBlocks.ENDSPARK); + registerRemap("tile.extrautils:decorativeBlock1_5", ModBlocks.INVERTED_BLOCK); + registerRemap("tile.extrautils:block_bedrockium", ModBlocks.BEDROCKIUM_BLOCK); + registerRemap("tile.extrautils:decorativeBlock1_8", ModBlocks.MAGIC_WOOD); + registerRemap("tile.extrautils:etherealglass", ModBlocks.ETHEREAL_GLASS, 5); + registerRemap("tile.extrautils:greenscreen", ModBlocks.LAPIS_AETHERIUS, 15); + } + + private static void registerMicroblock(ModBlocks block, int meta) { + String blockName = GameRegistry.findUniqueIdentifierFor(block.get()) + .toString(); + if (block.isEnabled()) { + MicroMaterialRegistry + .registerMaterial(new BlockMicroMaterial(block.get(), meta), applyMeta(blockName, meta)); + } + } + + private static void registerMicroblock(ModBlocks block) { + registerMicroblock(block, 0); + } + + private static void registerMicroblock(ModBlocks block, int min, int max) { + for (int m = min; m <= max; m++) { + registerMicroblock(block, m); + } + } + + private static void registerRemap(String exuName, ModBlocks uieBlock) { + MicroMaterialRegistry.remapName( + exuName, + GameRegistry.findUniqueIdentifierFor(uieBlock.get()) + .toString()); + } + + private static void registerRemap(String exuName, ModBlocks uieBlock, int max) { + String blockName = GameRegistry.findUniqueIdentifierFor(uieBlock.get()) + .toString(); + for (int m = 0; m <= max; m++) { + MicroMaterialRegistry.remapName(applyMeta(exuName, m), applyMeta(blockName, m)); + } + } + + private static void registerRemap(String exuName, ModBlocks uieBlock, int exuMeta, int uieMeta) { + MicroMaterialRegistry.remapName( + applyMeta(exuName, exuMeta), + applyMeta( + GameRegistry.findUniqueIdentifierFor(uieBlock.get()) + .toString(), + uieMeta)); + } + + private static String applyMeta(String name, int meta) { + if (meta == 0) return name; + return name + "_" + meta; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/ForgeMultipart/multipart/Content.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/ForgeMultipart/multipart/Content.java index 689571a80..779f20725 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/ForgeMultipart/multipart/Content.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/ForgeMultipart/multipart/Content.java @@ -1,5 +1,6 @@ package com.fouristhenumber.utilitiesinexcess.compat.ForgeMultipart.multipart; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -7,6 +8,9 @@ import net.minecraft.nbt.NBTTagCompound; +import com.fouristhenumber.utilitiesinexcess.compat.Mods; +import com.fouristhenumber.utilitiesinexcess.config.OtherConfig; + import codechicken.lib.data.MCDataInput; import codechicken.microblock.MicroMaterialRegistry; import codechicken.multipart.MultiPartRegistry; @@ -20,13 +24,30 @@ public class Content implements MultiPartRegistry.IPartFactory2 { public static final Set sidedParts = new HashSet<>(); + public static final Map legacyAliases = new HashMap<>(); + public void init() { for (int i = 0; i < partNames.length; i++) { partMap.put(partNames[i], i); } sidedParts.add(WallPart.name); sidedParts.add(FencePart.name); - MultiPartRegistry.registerParts(this, partNames); + + if (!Mods.ExtraUtilities.isLoaded() && OtherConfig.enableWorldConversion) { + legacyAliases.put("extrautils:sphere", SpherePart.name); + legacyAliases.put("extrautils:fence", FencePart.name); + legacyAliases.put("extrautils:wall", WallPart.name); + } + + Set namesToRegister = new HashSet<>(); + namesToRegister.addAll(Arrays.asList(partNames)); + namesToRegister.addAll(legacyAliases.keySet()); + + MultiPartRegistry.registerParts(this, namesToRegister.toArray(new String[0])); + } + + private String translateName(String name) { + return legacyAliases.getOrDefault(name, name); } public UEMultipart createUEMultiPart(boolean isClient, int material, int side, String name) { @@ -47,19 +68,23 @@ public UEMultipart createUEMultiPart(boolean isClient, int material, int side, S // Called on the server @Override public TMultiPart createPart(String name, NBTTagCompound nbt) { + String actualName = translateName(name); + return createUEMultiPart( false, MicroMaterialRegistry.materialID(nbt.getString("material")), nbt.getInteger("side"), - name); + actualName); } // Called on the client @Override public TMultiPart createPart(String name, MCDataInput packet) { - if (sidedParts.contains(name)) { - return createUEMultiPart(true, MicroMaterialRegistry.readMaterialID(packet), packet.readInt(), name); + String actualName = translateName(name); + + if (sidedParts.contains(actualName)) { + return createUEMultiPart(true, MicroMaterialRegistry.readMaterialID(packet), packet.readInt(), actualName); } - return createUEMultiPart(true, MicroMaterialRegistry.readMaterialID(packet), 0, name); + return createUEMultiPart(true, MicroMaterialRegistry.readMaterialID(packet), 0, actualName); } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/PosteaTransforms.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/PosteaTransforms.java index e22642c7c..134399b7d 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/PosteaTransforms.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/PosteaTransforms.java @@ -3,6 +3,7 @@ import com.fouristhenumber.utilitiesinexcess.ModBlocks; import com.fouristhenumber.utilitiesinexcess.ModItems; import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.items.DivisionSigilTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.items.ForgeMicroblockItemTransformer; import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.items.GoldenBagTransformation; import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.items.GoldenLassoTransformation; import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities.CollectorTransformation; @@ -87,6 +88,8 @@ private static void transformItems() { .addSimpleReplacement("ExtraUtilities:endConstructor", 2, ModBlocks.CONVERGENCE_CRYSTAL.getItem(), 0); ItemStackReplacementManager .addSimpleReplacement("ExtraUtilities:endConstructor", 3, ModBlocks.CONVERGENCE_CRYSTAL.getItem(), 0); + ItemStackReplacementManager + .addTransformationHandler("ExtraUtilities:microblocks", new ForgeMicroblockItemTransformer()); // Custom transformers ItemStackReplacementManager .addTransformationHandler("ExtraUtilities:divisionSigil", new DivisionSigilTransformation()); @@ -362,6 +365,7 @@ private static void ignoreMissingMappings() { ItemStackReplacementManager.ignoreMissingMapping("ExtraUtilities:temporalHoe"); ItemStackReplacementManager.ignoreMissingMapping("ExtraUtilities:unstableingot"); ItemStackReplacementManager.ignoreMissingMapping("ExtraUtilities:watering_can"); + ItemStackReplacementManager.ignoreMissingMapping("ExtraUtilities:microblocks"); // Blocks BlockReplacementManager.ignoreMissingMapping("ExtraUtilities:angelBlock"); BlockReplacementManager.ignoreMissingMapping("ExtraUtilities:block_bedrockium"); diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/ForgeMicroblockItemTransformer.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/ForgeMicroblockItemTransformer.java new file mode 100644 index 000000000..63dcc396a --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/ForgeMicroblockItemTransformer.java @@ -0,0 +1,37 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.items; + +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; + +import com.fouristhenumber.utilitiesinexcess.compat.ForgeMultipart.FMPItems; +import com.gtnewhorizons.postea.api.IDExtenderCompat; +import com.gtnewhorizons.postea.api.IItemStackTransformationHandler; + +import codechicken.microblock.MicroMaterialRegistry; + +public class ForgeMicroblockItemTransformer implements IItemStackTransformationHandler { + + @Override + public boolean apply(String originalItemId, NBTTagCompound stack) { + // UiE's microblock metas are offset 1. The item/meta is always modified when this transformer runs. Therefore, + // we always return true. + IDExtenderCompat.setItemStackID(stack, Item.getIdFromItem(FMPItems.UE_MULTI_PART.get())); + stack.setInteger("Damage", stack.getInteger("Damage") - 1); + + if (!stack.hasKey("tag")) return true; + NBTTagCompound tag = stack.getCompoundTag("tag"); + + if (!tag.hasKey("mat")) return true; + String matName = tag.getString("mat"); + + // Goes through the remap layer, which is private + int remappedId = MicroMaterialRegistry.materialID(matName); + String remappedName = MicroMaterialRegistry.materialName(remappedId); + + if (remappedName.equals(matName)) return true; + + tag.setString("mat", remappedName); + stack.setTag("tag", tag); + return true; + } +}