diff --git a/dependencies.gradle b/dependencies.gradle index 4f9733dc..01b56b83 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -47,14 +47,17 @@ dependencies { compileOnly('com.github.GTNewHorizons:TinkersConstruct:1.14.14-GTNH:dev') + api("com.github.GTNewHorizons:Postea:1.1.5:dev") + devOnlyNonPublishable("com.github.GTNewHorizons:Baubles-Expanded:2.2.4-GTNH:dev") devOnlyNonPublishable("io.github.legacymoddingmc:unimixins:0.1.23:dev") runtimeOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.8.40-GTNH:dev") - - // For testing NBT data (/nbtedit) - // runtimeOnlyNonPublishable("com.github.GTNewHorizons:ServerUtilities:2.2.6:dev") + // Misc testing utilities + // runtimeOnlyNonPublishable("com.github.GTNewHorizons:ServerUtilities:2.2.6:dev") // (/nbtedit) + // runtimeOnlyNonPublishable("com.github.GTNewHorizons:worldedit-gtnh:v0.0.8:dev") + // runtimeOnlyNonPublishable("com.github.GTNewHorizons:waila:1.9.15:dev") // For testing glove // runtimeOnlyNonPublishable("com.github.GTNewHorizons:Translocators:1.4.0:dev") - // runtimeOnlyNonPublishable("com.github.GTNewHorizons:Backhand:1.8.2:dev") + // runtimeOnlyNonPublishable("com.github.GTNewHorizons:Backhand:1.8.0:dev") } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java index 74580fca..041b88be 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/CommonProxy.java @@ -6,6 +6,8 @@ import com.fouristhenumber.utilitiesinexcess.common.dimensions.endoftime.EndOfTimeEvents; import com.fouristhenumber.utilitiesinexcess.common.dimensions.underworld.UnderWorldEvents; import com.fouristhenumber.utilitiesinexcess.compat.Mods; +import com.fouristhenumber.utilitiesinexcess.compat.exu.Remappings; +import com.fouristhenumber.utilitiesinexcess.config.OtherConfig; import com.fouristhenumber.utilitiesinexcess.network.PacketHandler; import com.fouristhenumber.utilitiesinexcess.utils.SoundVolumeChecks; import com.gtnewhorizon.gtnhlib.keybind.SyncedKeybind; @@ -35,6 +37,9 @@ public void preInit(FMLPreInitializationEvent event) { if (Mods.NEI.isLoaded()) { IMCForNEI.IMCSender(); } + if (OtherConfig.enableWorldConversion && !Mods.ExtraUtilities.isLoaded() && Mods.Postea.isLoaded()) { + Remappings.preInit(); + } } public void init(FMLInitializationEvent event) { @@ -42,7 +47,11 @@ public void init(FMLInitializationEvent event) { GLOVE_KEYBIND = SyncedKeybind.createConfigurable("key.uie.glove", "key.categories.uie", Keyboard.KEY_NONE); } - public void postInit(FMLPostInitializationEvent event) {} + public void postInit(FMLPostInitializationEvent event) { + if (OtherConfig.enableWorldConversion && !Mods.ExtraUtilities.isLoaded() && Mods.Postea.isLoaded()) { + Remappings.postInit(); + } + } public void serverStarting(FMLServerStartingEvent event) {} } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java index a4c9ea2f..e39c9583 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/UtilitiesInExcess.java @@ -48,6 +48,8 @@ import com.fouristhenumber.utilitiesinexcess.common.worldgen.WorldGenEnderLotus; import com.fouristhenumber.utilitiesinexcess.compat.Mods; import com.fouristhenumber.utilitiesinexcess.compat.crafttweaker.QEDCraftTweakerSupport; +import com.fouristhenumber.utilitiesinexcess.compat.exu.ExuCompat; +import com.fouristhenumber.utilitiesinexcess.compat.exu.Remappings; import com.fouristhenumber.utilitiesinexcess.compat.tinkers.TinkersCompat; import com.fouristhenumber.utilitiesinexcess.config.OtherConfig; import com.fouristhenumber.utilitiesinexcess.utils.FMLEventHandler; @@ -60,6 +62,7 @@ import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLMissingMappingsEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.event.FMLServerStartingEvent; @@ -144,6 +147,9 @@ public void init(FMLInitializationEvent event) { GameRegistry.registerTileEntity(TileEntityNetherStarGenerator.class, "TileEntityNetherStarGeneratorUIE"); GameRegistry.registerTileEntity(TileEntityPacifistsBench.class, "TileEntityPacifistsBenchUIE"); GameRegistry.registerTileEntity(TileEntityTradingPost.class, "TileEntityTradingPostUIE"); + if (OtherConfig.enableWorldConversion && !Mods.ExtraUtilities.isLoaded() && Mods.Postea.isLoaded()) { + Remappings.init(); + } lapisAetheriusRenderID = RenderingRegistry.getNextAvailableRenderId(); RenderingRegistry.registerBlockHandler(new LapisAetheriusRenderer()); @@ -219,4 +225,9 @@ public ItemStack getIconItemStack() { return ICON_ITEM; } }; + + @Mod.EventHandler + public void onMissingMappings(FMLMissingMappingsEvent event) { + ExuCompat.onMissingMappings(event); + } } diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInversionSigilActive.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInversionSigilActive.java index be1d5d12..bcb11416 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInversionSigilActive.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/common/items/ItemInversionSigilActive.java @@ -53,7 +53,7 @@ public class ItemInversionSigilActive extends Item { - private static final String DURABILITY_NBT_KEY = "RemainingUses"; + public static final String DURABILITY_NBT_KEY = "RemainingUses"; private static final int BEACON_SEARCH_RADIUS = 6; private final int[][] LIGHTNING_POSITIONS = { { 0, 0 }, { -5, 0 }, { 5, 0 }, { 0, -5 }, { 0, 5 } }; diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/Mods.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/Mods.java index 6d9235cc..d09e5e81 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/Mods.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/Mods.java @@ -13,7 +13,9 @@ public enum Mods { NEI("NotEnoughItems"), CraftTweaker("MineTweaker3"), FindIt("findit"), - Tinkers("TConstruct") + Tinkers("TConstruct"), + ExtraUtilities("ExtraUtilities"), + Postea("postea"), ; // spotless:on diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/ExuCompat.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/ExuCompat.java new file mode 100644 index 00000000..7c35f868 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/ExuCompat.java @@ -0,0 +1,33 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; + +import cpw.mods.fml.common.event.FMLMissingMappingsEvent; +import cpw.mods.fml.common.registry.GameRegistry; + +public class ExuCompat { + + public static void onMissingMappings(FMLMissingMappingsEvent event) { + for (FMLMissingMappingsEvent.MissingMapping mapping : event.getAll()) { + if (mapping == null) continue; + + if (Remappings.SKIPPED_MAPPINGS.contains(mapping.name)) { + mapping.ignore(); + continue; + } + + if (mapping.type == GameRegistry.Type.ITEM) { + Item newItem = Remappings.ITEM_MAPPINGS.get(mapping.name); + if (newItem != null) { + mapping.remap(newItem); + } + } else { // BLOCK + Block newBlock = Remappings.BLOCK_MAPPINGS.get(mapping.name); + if (newBlock != null) { + mapping.remap(newBlock); + } + } + } + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/Remappings.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/Remappings.java new file mode 100644 index 00000000..a283207b --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/Remappings.java @@ -0,0 +1,183 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.fouristhenumber.utilitiesinexcess.ModItems; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.IPosteaTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks.CompressedBlocksTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks.ConveyorTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks.DarkPortalTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks.DecoBlock1Transformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks.EnderLilyTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks.SoundMufflerTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks.TrashCanTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.items.DivisionSigilTransformation; +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.items.UnstableIngotTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.items.WateringCanTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities.FullChestTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities.GeneratorTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities.MiniChestTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities.SpikeTransformation; + +public enum Remappings { + // spotless:off + + // make sure to leave a trailing comma + // Direct block remappings + ANGEL_BLOCK("ExtraUtilities:angelBlock", ModBlocks.FLOATING_BLOCK), + BUD("ExtraUtilities:budoff", ModBlocks.BLOCK_UPDATE_DETECTOR), + DECO_BLOCK_2("ExtraUtilities:decorativeBlock2", ModBlocks.DECORATIVE_GLASS), + CURTAINS("ExtraUtilities:curtains", ModBlocks.BLACKOUT_CURTAINS), + PURE_LOVE("ExtraUtilities:pureLove", ModBlocks.PURE_LOVE), + BEDROCKUIM_BLOCK("ExtraUtilities:block_bedrockium", ModBlocks.BEDROCKIUM_BLOCK), + GREENSCREEN("ExtraUtilities:greenscreen", ModBlocks.LAPIS_AETHERIUS), +// PEACEFUL_TABLE("ExtraUtilities:peaceful_table_top", ModBlocks.abc), // TODO: add here once merged + CURSED_EARTH("ExtraUtilities:cursedearthside", ModBlocks.CURSED_EARTH), + SPIKE_WOOD("ExtraUtilities:spike_base_wood", ModBlocks.SPIKE_WOOD), + SPIKE_IRON("ExtraUtilities:spike_base", ModBlocks.SPIKE_IRON), + SPIKE_GOLD("ExtraUtilities:spike_base_gold", ModBlocks.SPIKE_GOLD), + SPIKE_DIAMOND("ExtraUtilities:spike_base_diamond", ModBlocks.SPIKE_DIAMOND), + TIMER("ExtraUtilities:timer", ModBlocks.REDSTONE_CLOCK), + ETHEREAL_GLASS("ExtraUtilities:etherealglass", ModBlocks.ETHEREAL_GLASS), + ENDER_PUMP("ExtraUtilities:enderThermicPump", ModBlocks.SMART_PUMP), + COLORED_STONE_BRICK("ExtraUtilities:colorStoneBrick", ModBlocks.COLORED_STONE_BRICKS), + COLORED_PLANKS("ExtraUtilities:colorWoodPlanks", ModBlocks.COLORED_WOOD_PLANKS), + COLORED_GLOWSTONE("ExtraUtilities:color_lightgem", ModBlocks.COLORED_GLOWSTONE), + COLORED_STONE("ExtraUtilities:color_stone", ModBlocks.COLORED_STONE), + COLORED_QUARTZ_BLOCK("ExtraUtilities:color_quartzBlock", ModBlocks.COLORED_QUARTZ_BLOCK), + COLORED_SOUL_SAND("ExtraUtilities:color_hellsand", ModBlocks.COLORED_SOUL_SAND), + COLORED_REDSTONE_LAMP("ExtraUtilities:color_redstoneLight", ModBlocks.COLORED_REDSTONE_LAMP), + COLORED_BRICKS("ExtraUtilities:color_brick", ModBlocks.COLORED_BRICKS), + COLORED_COBBLESTONE("ExtraUtilities:color_stonebrick", ModBlocks.COLORED_COBBLESTONE), + COLORED_LAPIS_BLOCK("ExtraUtilities:color_blockLapis", ModBlocks.COLORED_LAPIS_BLOCK), + COLORED_OBSIDIAN("ExtraUtilities:color_obsidian", ModBlocks.COLORED_OBSIDIAN), + COLORED_REDSTONE_BLOCK("ExtraUtilities:color_blockRedstone", ModBlocks.COLORED_REDSTONE_BLOCK), + COLORED_COAL_BLOCK("ExtraUtilities:color_blockCoal", ModBlocks.COLORED_COAL_BLOCK), + + // Direct item remappings + GLOVE("ExtraUtilities:glove", ModItems.GLOVE), + HEAVENLY_RING("ExtraUtilities:angelRing", ModItems.HEAVENLY_RING), + FIRE_BATTERY("ExtraUtilities:heatingElement", ModItems.FIRE_BATTERY), + ARCHITECTS_WAND("ExtraUtilities:buildersWand", ModItems.ARCHITECTS_WAND), + SUPER_ARCHITECTS_WAND("ExtraUtilities:creativeBuildersWand", ModItems.ARCHITECTS_WAND), + INVERTED_SWORD("ExtraUtilities:ethericSword", ModItems.ETHERIC_SWORD), + INVERTED_PICKAXE("ExtraUtilities:destructionpickaxe", ModItems.DESTRUCTION_PICKAXE), + INVERTED_AXE("ExtraUtilities:defoliageAxe", ModItems.GLUTTONS_AXE), + INVERTED_SHOVEL("ExtraUtilities:erosionShovel", ModItems.ANTI_PARTICULATE_SHOVEL), + INVERTED_HOE("ExtraUtilities:temporalHoe", ModItems.REVERSING_HOE), + INVERTED_SHEARS("ExtraUtilities:shears", ModItems.PRECISION_SHEARS), + XRAY_GLASSES("ExtraUtilities:sonar_goggles", ModItems.XRAY_GLASSES), + BEDROCKUIM_INGOT("ExtraUtilities:bedrockiumIngot", ModItems.BEDROCKIUM_INGOT), + SCANNER("ExtraUtilities:scanner", ModItems.BLOCK_ANALYZER), + + // Item Transformations + GOLDEN_BAG(new GoldenBagTransformation()), + WATERING_CAN(new WateringCanTransformation()), + INVERSION_SIGIL(new DivisionSigilTransformation()), + MOB_JAR(new GoldenLassoTransformation()), + INVERTED_INGOT(new UnstableIngotTransformation()), + + // Block Transformations + SOUND_MUFFLER(new SoundMufflerTransformation()), + DECO_BLOCK_1(new DecoBlock1Transformation()), + COMPRESSED_BLOCKS(new CompressedBlocksTransformation()), + DARK_PORTAL(new DarkPortalTransformation()), + TRASH_CANS(new TrashCanTransformation()), + ENDER_LOTUS(new EnderLilyTransformation()), + CONVEYOR(new ConveyorTransformation()), + + // Tile Entity Transformation + GENERATORS(new GeneratorTransformation()), + FULL_CHEST(new FullChestTransformation()), + MINI_CHEST(new MiniChestTransformation()), + SPIKES(new SpikeTransformation()), + + // Skipped mappings + PAINT_BRUSH("ExtraUtilities:paintbrush"), + DATABLOCK("ExtraUtilities:datablock"), + + ; // leave trailing semicolon + // spotless:on + + public static final Remappings[] VALUES = values(); + + public static final HashMap ITEM_MAPPINGS = new HashMap<>(); + public static final HashMap BLOCK_MAPPINGS = new HashMap<>(); + public static final List TRANSFORMATIONS = new ArrayList<>(); + public static final Set SKIPPED_MAPPINGS = new HashSet<>(); + + public static void preInit() { + for (Remappings remapping : VALUES) { + if (remapping.replacementItem != null) { + ITEM_MAPPINGS.put(remapping.getName(), remapping.replacementItem); + } + if (remapping.replacementBlock != null) { + BLOCK_MAPPINGS.put(remapping.getName(), remapping.replacementBlock); + } + if (remapping.transformation != null) { + TRANSFORMATIONS.add(remapping.transformation); + } + if (remapping.isSkipped) { + SKIPPED_MAPPINGS.add(remapping.getName()); + } + if (remapping.transformation != null) { + remapping.transformation.registerDummies(); + remapping.transformation.addItemRemappings(ITEM_MAPPINGS); + remapping.transformation.addBlockRemappings(BLOCK_MAPPINGS); + } + } + } + + public static void init() { + for (IPosteaTransformation transformation : TRANSFORMATIONS) { + transformation.registerTEDummies(); + } + } + + public static void postInit() { + for (IPosteaTransformation transformation : TRANSFORMATIONS) { + transformation.registerTransformations(); + } + } + + private String oldName; + private Block replacementBlock = null; + private Item replacementItem = null; + private IPosteaTransformation transformation = null; + + private boolean isSkipped = false; + + Remappings(String oldName, ModBlocks modBlock) { + this.oldName = oldName; + this.replacementBlock = modBlock.get(); + this.replacementItem = modBlock.getItem(); + } + + Remappings(String oldName, ModItems modItem) { + this.oldName = oldName; + this.replacementItem = modItem.get(); + } + + Remappings(String oldName) { + this.oldName = oldName; + isSkipped = true; + } + + Remappings(IPosteaTransformation posteaTransformation) { + this.transformation = posteaTransformation; + } + + public String getName() { + return oldName; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/DummyBlock.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/DummyBlock.java new file mode 100644 index 00000000..f00e8b69 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/DummyBlock.java @@ -0,0 +1,11 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; + +public class DummyBlock extends Block { + + public DummyBlock(Material materialIn) { + super(materialIn); + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/IPosteaTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/IPosteaTransformation.java new file mode 100644 index 00000000..367f5b3d --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/IPosteaTransformation.java @@ -0,0 +1,57 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea; + +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; + +/** + * Represents a Postea transformation which handles the process of migrating a now-removed items and blocks + * in already existing saves. + * The process goes: + * "modid:removed" -> FMLMissingMappingsEvent -> "ourmodid:dummyitem" -> Postea -> "ourmodid:corrected_item" + */ +public interface IPosteaTransformation { + + /** + * This method is called during a common FMLPreInitializationEvent, + * do all your GameRegistry.registerItem and GameRegistry.registerBlock calls here. + */ + default void registerDummies() {} + + /** + * This method is called during a common FMLInitializationEvent, + * do all your GameRegistry.registerTileEntity calls here. + */ + default void registerTEDummies() {} + + /** + * Called to add your dummy items to be mapped during the FMLMissingMappingsEvent event, + * add your items with the old item's "modid:itemname" registry name as the key + * and your dummy {@link Item} instance as the value. + *

+ * See {@link cpw.mods.fml.common.event.FMLMissingMappingsEvent} for more. + * + * @param remappings Current running list of remappings, add yours to this. + */ + default void addItemRemappings(Map remappings) {} + + /** + * Called to add your dummy blocks to be mapped during the FMLMissingMappingsEvent event, + * add your blocks with the old block's "modid:itemname" registry name as the key + * and your dummy {@link Block} instance as the value. + * Remember to also add it's ItemBlock instance to addItemRemappings. + *

+ * See {@link cpw.mods.fml.common.event.FMLMissingMappingsEvent} for more. + * + * @param remappings Current running list of remappings, add yours to this. + */ + default void addBlockRemappings(Map remappings) {} + + /** + * This method is called during a common FMLPostInitializationEvent, + * do all your BlockReplacementManager.addBlockReplacement and + * ItemStackReplacementManager.addItemReplacement calls here. + */ + default void registerTransformations() {} +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/AbstractBlockTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/AbstractBlockTransformation.java new file mode 100644 index 00000000..df7c0325 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/AbstractBlockTransformation.java @@ -0,0 +1,84 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks; + +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import com.fouristhenumber.utilitiesinexcess.UtilitiesInExcess; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.DummyBlock; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.IPosteaTransformation; +import com.fouristhenumber.utilitiesinexcess.utils.UIEUtils; +import com.gtnewhorizons.postea.api.BlockReplacementManager; +import com.gtnewhorizons.postea.api.ItemStackReplacementManager; +import com.gtnewhorizons.postea.utility.BlockConversionInfo; + +import cpw.mods.fml.common.registry.GameRegistry; + +/** + * A simple {@link IPosteaTransformation} that transforms a single block. + * Extend and use setDummyName and setOldName + * then do your transformations in doItemTransformation and doBlockTransformation + *

+ * See {@link SoundMufflerTransformation} for an example. + */ +public abstract class AbstractBlockTransformation implements IPosteaTransformation { + + private final Block dummyBlock; + + private String dummyName; + private String oldName; + + /** + * Set the name for this transformation's dummy block *without* the modid, e.g. "dummy_golden_bag". + * + * @param dummyName The registry name for this transformation's dummy block + */ + public void setDummyName(String dummyName) { + this.dummyName = dummyName; + } + + /** + * Set the *full registry name* (e.g. "modid:item") of the old block this transformation is replacing + * + * @param oldName The registry name for the block this transformation is replacing + */ + public void setOldName(String oldName) { + this.oldName = oldName; + } + + public AbstractBlockTransformation() { + dummyBlock = new DummyBlock(Material.ground); + } + + @Override + public void registerDummies() { + GameRegistry.registerBlock(dummyBlock, dummyName); + UIEUtils.hideInNei(dummyBlock); + } + + @Override + public void addItemRemappings(Map remappings) { + remappings.put(oldName, Item.getItemFromBlock(dummyBlock)); + } + + @Override + public void addBlockRemappings(Map remappings) { + remappings.put(oldName, dummyBlock); + } + + @Override + public void registerTransformations() { + BlockReplacementManager + .addBlockReplacement(UtilitiesInExcess.MODID + ":" + dummyName, this::doBlockTransformation); + ItemStackReplacementManager + .addItemReplacement(UtilitiesInExcess.MODID + ":" + dummyName, this::doItemTransformation); + } + + public abstract NBTTagCompound doItemTransformation(NBTTagCompound tag); + + public abstract BlockConversionInfo doBlockTransformation(BlockConversionInfo blockConversionInfo, World world); +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/CompressedBlocksTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/CompressedBlocksTransformation.java new file mode 100644 index 00000000..8fa31099 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/CompressedBlocksTransformation.java @@ -0,0 +1,56 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.gtnewhorizons.postea.api.IDExtenderCompat; +import com.gtnewhorizons.postea.utility.BlockConversionInfo; + +public class CompressedBlocksTransformation extends AbstractBlockTransformation { + + public CompressedBlocksTransformation() { + super(); + setDummyName("dummy_compressed_blocks"); + setOldName("ExtraUtilities:cobblestone_compressed"); + } + + public NBTTagCompound doItemTransformation(NBTTagCompound tag) { + int dmg = tag.getInteger("Damage"); + if (dmg < 8) { + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModBlocks.COMPRESSED_COBBLESTONE.getItem())); + } else if (dmg < 12) { + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModBlocks.COMPRESSED_DIRT.getItem())); + tag.setInteger("Damage", dmg - 8); + } else if (dmg < 14) { + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModBlocks.COMPRESSED_GRAVEL.getItem())); + tag.setInteger("Damage", dmg - 12); + } else { + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModBlocks.COMPRESSED_SAND.getItem())); + tag.setInteger("Damage", dmg - 14); + } + return tag; + } + + public BlockConversionInfo doBlockTransformation(BlockConversionInfo blockConversionInfo, World world) { + BlockConversionInfo blockConversionInfoNew = new BlockConversionInfo(); + int dmg = blockConversionInfo.metadata; + if (dmg < 8) { + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.COMPRESSED_COBBLESTONE.get()); + blockConversionInfoNew.metadata = blockConversionInfo.metadata; + } else if (dmg < 12) { + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.COMPRESSED_DIRT.get()); + blockConversionInfoNew.metadata = blockConversionInfo.metadata - 8; + } else if (dmg < 14) { + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.COMPRESSED_GRAVEL.get()); + blockConversionInfoNew.metadata = blockConversionInfo.metadata - 12; + } else { + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.COMPRESSED_SAND.get()); + blockConversionInfoNew.metadata = blockConversionInfo.metadata - 14; + } + + return blockConversionInfoNew; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/ConveyorTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/ConveyorTransformation.java new file mode 100644 index 00000000..7dfd9df8 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/ConveyorTransformation.java @@ -0,0 +1,34 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.gtnewhorizons.postea.api.IDExtenderCompat; +import com.gtnewhorizons.postea.utility.BlockConversionInfo; + +public class ConveyorTransformation extends AbstractBlockTransformation { + + public ConveyorTransformation() { + super(); + setDummyName("dummy_conveyor"); + setOldName("ExtraUtilities:conveyor"); + } + + public NBTTagCompound doItemTransformation(NBTTagCompound tag) { + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModBlocks.CONVEYOR.getItem())); + tag.setInteger("Damage", 0); + return tag; + } + + public BlockConversionInfo doBlockTransformation(BlockConversionInfo blockConversionInfo, World world) { + BlockConversionInfo blockConversionInfoNew = new BlockConversionInfo(); + int meta = blockConversionInfo.metadata; + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.CONVEYOR.get()); + blockConversionInfoNew.metadata = meta - 2 >= 0 ? meta - 2 : meta + 2; + + return blockConversionInfoNew; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/DarkPortalTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/DarkPortalTransformation.java new file mode 100644 index 00000000..7528cc6c --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/DarkPortalTransformation.java @@ -0,0 +1,43 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.gtnewhorizons.postea.api.IDExtenderCompat; +import com.gtnewhorizons.postea.utility.BlockConversionInfo; + +public class DarkPortalTransformation extends AbstractBlockTransformation { + + public DarkPortalTransformation() { + super(); + setDummyName("dummy_dark_portal"); + setOldName("ExtraUtilities:dark_portal"); + } + + public NBTTagCompound doItemTransformation(NBTTagCompound tag) { + int dmg = tag.getInteger("Damage"); + if (dmg == 2) { + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModBlocks.END_OF_TIME_PORTAL.getItem())); + } else { + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModBlocks.UNDERWORLD_PORTAL.getItem())); + } + tag.setInteger("Damage", 0); + return tag; + } + + public BlockConversionInfo doBlockTransformation(BlockConversionInfo blockConversionInfo, World world) { + BlockConversionInfo blockConversionInfoNew = new BlockConversionInfo(); + int dmg = blockConversionInfo.metadata; + if (dmg == 2) { + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.END_OF_TIME_PORTAL.get()); + } else { + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.UNDERWORLD_PORTAL.get()); + } + blockConversionInfoNew.metadata = 0; + + return blockConversionInfoNew; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/DecoBlock1Transformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/DecoBlock1Transformation.java new file mode 100644 index 00000000..b37bd7ad --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/DecoBlock1Transformation.java @@ -0,0 +1,49 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.gtnewhorizons.postea.api.IDExtenderCompat; +import com.gtnewhorizons.postea.utility.BlockConversionInfo; + +public class DecoBlock1Transformation extends AbstractBlockTransformation { + + public DecoBlock1Transformation() { + super(); + setDummyName("dummy_decorativeBlock1"); + setOldName("ExtraUtilities:decorativeBlock1"); + } + + // TODO Add the remaining decorative block metas once they get implemented + public NBTTagCompound doItemTransformation(NBTTagCompound tag) { + int dmg = tag.getInteger("Damage"); + switch (dmg) { + case 5: + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModBlocks.INVERTED_BLOCK.getItem())); + break; + case 8: + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModBlocks.MAGIC_WOOD.getItem())); + break; + } + tag.setInteger("Damage", 0); + return tag; + } + + public BlockConversionInfo doBlockTransformation(BlockConversionInfo blockConversionInfo, World world) { + BlockConversionInfo blockConversionInfoNew = new BlockConversionInfo(); + int meta = blockConversionInfo.metadata; + if (meta == 5) { + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.INVERTED_BLOCK.get()); + } else if (meta == 8) { + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.MAGIC_WOOD.get()); + } else { + return blockConversionInfo; + } + blockConversionInfoNew.metadata = 0; + + return blockConversionInfoNew; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/EnderLilyTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/EnderLilyTransformation.java new file mode 100644 index 00000000..c67ea6a6 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/EnderLilyTransformation.java @@ -0,0 +1,38 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.fouristhenumber.utilitiesinexcess.ModItems; +import com.gtnewhorizons.postea.api.IDExtenderCompat; +import com.gtnewhorizons.postea.utility.BlockConversionInfo; + +public class EnderLilyTransformation extends AbstractBlockTransformation { + + public EnderLilyTransformation() { + super(); + setDummyName("dummy_ender_lotus"); + setOldName("ExtraUtilities:plant/ender_lilly"); + } + + // This is NOT a direct mapping!! + // EXU's ender lily item is the block's ItemBlock, which is incompatible with our version which is a seed + // that plants the block, + public NBTTagCompound doItemTransformation(NBTTagCompound tag) { + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModItems.ENDER_LOTUS_SEED.get())); + tag.setInteger("Damage", 0); + return tag; + } + + public BlockConversionInfo doBlockTransformation(BlockConversionInfo blockConversionInfo, World world) { + BlockConversionInfo blockConversionInfoNew = new BlockConversionInfo(); + + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.ENDER_LOTUS.get()); + blockConversionInfoNew.metadata = 0; + + return blockConversionInfoNew; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/SoundMufflerTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/SoundMufflerTransformation.java new file mode 100644 index 00000000..15bd9e89 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/SoundMufflerTransformation.java @@ -0,0 +1,46 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.gtnewhorizons.postea.api.IDExtenderCompat; +import com.gtnewhorizons.postea.utility.BlockConversionInfo; + +public class SoundMufflerTransformation extends AbstractBlockTransformation { + + public SoundMufflerTransformation() { + super(); + setDummyName("dummy_sound_muffler"); + setOldName("ExtraUtilities:sound_muffler"); + } + + public NBTTagCompound doItemTransformation(NBTTagCompound tag) { + int dmg = tag.getInteger("Damage"); + switch (dmg) { + case 0: + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModBlocks.SOUND_MUFFLER.getItem())); + break; + case 1: + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModBlocks.RAIN_MUFFLER.getItem())); + break; + } + tag.setInteger("Damage", 0); + return tag; + } + + public BlockConversionInfo doBlockTransformation(BlockConversionInfo blockConversionInfo, World world) { + BlockConversionInfo blockConversionInfoNew = new BlockConversionInfo(); + int meta = blockConversionInfo.metadata; + if (meta == 1) { + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.RAIN_MUFFLER.get()); + } else { + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.SOUND_MUFFLER.get()); + } + blockConversionInfoNew.metadata = 0; + + return blockConversionInfoNew; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/TrashCanTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/TrashCanTransformation.java new file mode 100644 index 00000000..07691068 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/blocks/TrashCanTransformation.java @@ -0,0 +1,55 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.gtnewhorizons.postea.api.IDExtenderCompat; +import com.gtnewhorizons.postea.utility.BlockConversionInfo; + +public class TrashCanTransformation extends AbstractBlockTransformation { + + public TrashCanTransformation() { + super(); + setDummyName("dummy_trash_cans"); + setOldName("ExtraUtilities:trashcan"); + } + + public NBTTagCompound doItemTransformation(NBTTagCompound tag) { + int dmg = tag.getInteger("Damage"); + switch (dmg) { + case 1: + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModBlocks.TRASH_CAN_FLUID.getItem())); + break; + case 2: + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModBlocks.TRASH_CAN_ENERGY.getItem())); + break; + default: + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModBlocks.TRASH_CAN_ITEM.getItem())); + break; + } + tag.setInteger("Damage", 0); + return tag; + } + + public BlockConversionInfo doBlockTransformation(BlockConversionInfo blockConversionInfo, World world) { + BlockConversionInfo blockConversionInfoNew = new BlockConversionInfo(); + int dmg = blockConversionInfo.metadata; + switch (dmg) { + case 1: + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.TRASH_CAN_FLUID.get()); + break; + case 2: + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.TRASH_CAN_ENERGY.get()); + break; + default: + blockConversionInfoNew.blockID = Block.getIdFromBlock(ModBlocks.TRASH_CAN_ITEM.get()); + break; + } + blockConversionInfoNew.metadata = 0; + + return blockConversionInfoNew; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/AbstractItemTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/AbstractItemTransformation.java new file mode 100644 index 00000000..e73f7b16 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/AbstractItemTransformation.java @@ -0,0 +1,68 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.items; + +import java.util.Map; + +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; + +import com.fouristhenumber.utilitiesinexcess.UtilitiesInExcess; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.IPosteaTransformation; +import com.fouristhenumber.utilitiesinexcess.utils.UIEUtils; +import com.gtnewhorizons.postea.api.ItemStackReplacementManager; + +import cpw.mods.fml.common.registry.GameRegistry; + +/** + * A simple {@link IPosteaTransformation} that transforms a single item. + * Extend and use setDummyName and setOldName then do your transformations in doTransformation + *

+ * See {@link WateringCanTransformation} for an example. + */ +public abstract class AbstractItemTransformation implements IPosteaTransformation { + + private final Item dummyItem; + + private String dummyName; + private String oldName; + + /** + * Set the name for this transformation's dummy item *without* the modid, e.g. "dummy_golden_bag". + * + * @param dummyName The registry name for this transformation's dummy item + */ + public void setDummyName(String dummyName) { + this.dummyName = dummyName; + } + + /** + * Set the *full registry name* (e.g. "modid:item") of the old item this transformation is replacing + * + * @param oldName The registry name for the item this transformation is replacing + */ + public void setOldName(String oldName) { + this.oldName = oldName; + } + + public AbstractItemTransformation() { + dummyItem = new Item(); + UIEUtils.hideInNei(dummyItem); + } + + @Override + public void registerDummies() { + GameRegistry.registerItem(dummyItem, dummyName); + } + + @Override + public void addItemRemappings(Map remappings) { + remappings.put(oldName, dummyItem); + } + + @Override + public void registerTransformations() { + ItemStackReplacementManager + .addItemReplacement(UtilitiesInExcess.MODID + ":" + dummyName, this::doTransformation); + } + + public abstract NBTTagCompound doTransformation(NBTTagCompound tag); +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/DivisionSigilTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/DivisionSigilTransformation.java new file mode 100644 index 00000000..e7827dee --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/DivisionSigilTransformation.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.ModItems; +import com.fouristhenumber.utilitiesinexcess.common.items.ItemInversionSigilActive; +import com.gtnewhorizons.postea.api.IDExtenderCompat; + +public class DivisionSigilTransformation extends AbstractItemTransformation { + + public DivisionSigilTransformation() { + super(); + setDummyName("dummy_inversion_sigil"); + setOldName("ExtraUtilities:divisionSigil"); + } + + public NBTTagCompound doTransformation(NBTTagCompound tag) { + NBTTagCompound tagtag = tag.getCompoundTag("tag"); + int stable = tagtag.getByte("stable"); + if (stable == 1) { + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModItems.PSEUDO_INVERSION_SIGIL.get())); + tag.removeTag("tag"); + } else { + int dmg = tagtag.getInteger("damage"); + tagtag.removeTag("damage"); + if (dmg > 1) { + tagtag.setInteger(ItemInversionSigilActive.DURABILITY_NBT_KEY, dmg); + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModItems.INVERSION_SIGIL_ACTIVE.get())); + } else { + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModItems.INVERSION_SIGIL_INACTIVE.get())); + } + } + + return tag; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/GoldenBagTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/GoldenBagTransformation.java new file mode 100644 index 00000000..2ea8e473 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/GoldenBagTransformation.java @@ -0,0 +1,46 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.items; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import com.fouristhenumber.utilitiesinexcess.ModItems; +import com.gtnewhorizons.postea.api.IDExtenderCompat; + +public class GoldenBagTransformation extends AbstractItemTransformation { + + public GoldenBagTransformation() { + super(); + setDummyName("dummy_golden_bag"); + setOldName("ExtraUtilities:golden_bag"); + } + + public NBTTagCompound doTransformation(NBTTagCompound tag) { + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModItems.GOLDEN_BAG.get())); + + NBTTagCompound tagtag = tag.getCompoundTag("tag"); + NBTTagList tagList = new NBTTagList(); + + List toBeRemoved = new ArrayList<>(); + for (String name : tagtag.func_150296_c()) { + if (!name.startsWith("items_")) continue; + + NBTTagCompound item = tagtag.getCompoundTag(name); + item.setByte("Slot", Byte.parseByte(name.split("_")[1])); + tagList.appendTag(item); + + toBeRemoved.add(name); + } + + for (String name : toBeRemoved) { + tagtag.removeTag(name); + } + + tagtag.setTag("Items", tagList); + tag.setTag("tag", tagtag); + return tag; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/GoldenLassoTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/GoldenLassoTransformation.java new file mode 100644 index 00000000..500a1d5a --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/GoldenLassoTransformation.java @@ -0,0 +1,30 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.items; + +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; + +import com.fouristhenumber.utilitiesinexcess.ModItems; +import com.gtnewhorizons.postea.api.IDExtenderCompat; + +public class GoldenLassoTransformation extends AbstractItemTransformation { + + public GoldenLassoTransformation() { + super(); + setDummyName("dummy_mob_jar"); + setOldName("ExtraUtilities:golden_lasso"); + } + + public NBTTagCompound doTransformation(NBTTagCompound tag) { + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModItems.MOB_JAR.get())); + + if (tag.hasKey("tag")) { + NBTTagCompound tagtag = tag.getCompoundTag("tag"); + NBTTagCompound newTagtag = new NBTTagCompound(); + newTagtag.setTag("MobData", tagtag); + + tag.setTag("tag", newTagtag); + } + + return tag; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/UnstableIngotTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/UnstableIngotTransformation.java new file mode 100644 index 00000000..c740febd --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/UnstableIngotTransformation.java @@ -0,0 +1,29 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.items; + +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; + +import com.fouristhenumber.utilitiesinexcess.ModItems; +import com.gtnewhorizons.postea.api.IDExtenderCompat; + +public class UnstableIngotTransformation extends AbstractItemTransformation { + + public UnstableIngotTransformation() { + super(); + setDummyName("dummy_inverted_ingot"); + setOldName("ExtraUtilities:unstableIngot"); + } + + public NBTTagCompound doTransformation(NBTTagCompound tag) { + int dmg = tag.getInteger("Damage"); + switch (dmg) { + case 0, 2: + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModItems.INVERTED_INGOT.get())); + break; + case 1: + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModItems.INVERTED_NUGGET.get())); + break; + } + return tag; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/WateringCanTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/WateringCanTransformation.java new file mode 100644 index 00000000..814d2003 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/items/WateringCanTransformation.java @@ -0,0 +1,32 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.items; + +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; + +import com.fouristhenumber.utilitiesinexcess.ModItems; +import com.gtnewhorizons.postea.api.IDExtenderCompat; + +public class WateringCanTransformation extends AbstractItemTransformation { + + public WateringCanTransformation() { + super(); + setDummyName("dummy_watering_can"); + setOldName("ExtraUtilities:watering_can"); + } + + public NBTTagCompound doTransformation(NBTTagCompound tag) { + int dmg = tag.getInteger("Damage"); + switch (dmg) { + case 0, 1: + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModItems.WATERING_CAN_BASIC.get())); + break; + case 2: + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModItems.WATERING_CAN_ADVANCED.get())); + break; + case 3: + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(ModItems.WATERING_CAN_ELITE.get())); + break; + } + return tag; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/AbstractTileEntityTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/AbstractTileEntityTransformation.java new file mode 100644 index 00000000..e7e3ad2b --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/AbstractTileEntityTransformation.java @@ -0,0 +1,82 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities; + +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.DummyBlock; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.IPosteaTransformation; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.blocks.SoundMufflerTransformation; +import com.gtnewhorizons.postea.api.TileEntityReplacementManager; +import com.gtnewhorizons.postea.utility.BlockInfo; + +/** + * A simple {@link IPosteaTransformation} that transforms a single tile entity. + * Extend and use setOldBlockName and setNewBlock + * then do your transformation in doTileEntityTransformation + *

+ * See {@link SoundMufflerTransformation} for an example. + */ +public abstract class AbstractTileEntityTransformation implements IPosteaTransformation { + + private final Block dummyBlock; + + private String oldBlockName; + private String oldTEID; + + private ModBlocks block; + + /** + * Set the *full registry name* (e.g. "modid:item") of the old block this transformation is replacing + * + * @param oldName The registry name for the block this transformation is replacing + */ + public void setOldBlockName(String oldName) { + this.oldBlockName = oldName; + } + + /** + * Set the Modblock instance of the block that this TE will be re-mapped to. + * + * @param block The new block to be mapped to + */ + public void setNewBlock(ModBlocks block) { + this.block = block; + } + + /** + * Set the tile entity ID of the tile entity this transformation is replacing + * + * @param oldId The tile entity ID for the tile entity this transformation is replacing + */ + public void setOldTileEntityId(String oldId) { + this.oldTEID = oldId; + } + + public AbstractTileEntityTransformation() { + dummyBlock = new DummyBlock(Material.ground); + } + + @Override + public void addItemRemappings(Map remappings) { + remappings.put(oldBlockName, block.getItem()); + } + + @Override + public void addBlockRemappings(Map remappings) { + remappings.put(oldBlockName, block.get()); + } + + @Override + public void registerTransformations() { + TileEntityReplacementManager.tileEntityTransformer(oldTEID, this::doTileEntityTransformation); + } + + public abstract BlockInfo doTileEntityTransformation(NBTTagCompound oldTag, World world, Chunk chunk); +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/FullChestTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/FullChestTransformation.java new file mode 100644 index 00000000..dd2c8414 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/FullChestTransformation.java @@ -0,0 +1,37 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.gtnewhorizons.postea.utility.BlockInfo; +import com.gtnewhorizons.postea.utility.PosteaUtilities; + +public class FullChestTransformation extends AbstractTileEntityTransformation { + + public FullChestTransformation() { + super(); + setOldBlockName("ExtraUtilities:chestFull"); + setOldTileEntityId("TileFullChest"); + setNewBlock(ModBlocks.MARGINALLY_MAXIMISED_CHEST); + } + + @Override + public BlockInfo doTileEntityTransformation(NBTTagCompound _oldTag, World world, Chunk chunk) { + int meta = chunk + .getBlockMetadata(_oldTag.getInteger("x") & 15, _oldTag.getInteger("y"), _oldTag.getInteger("z") & 15); + // Don't ask me why our direction metas are so incomprehensible. + meta = switch (meta) { + case 1 -> 4; + case 0 -> 3; + case 3 -> 5; + default -> 2; + }; + return new BlockInfo(ModBlocks.MARGINALLY_MAXIMISED_CHEST.get(), meta, (oldTag) -> { + NBTTagCompound tag = PosteaUtilities.cleanseNBT("TileEntityMarginallyMaximisedChestUIE", oldTag); + tag.setTag("Items", oldTag.getTag("Items")); + return tag; + }); + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/GeneratorTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/GeneratorTransformation.java new file mode 100644 index 00000000..6c964070 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/GeneratorTransformation.java @@ -0,0 +1,278 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities; + +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.fouristhenumber.utilitiesinexcess.UtilitiesInExcess; +import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockEnderGenerator; +import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockFoodGenerator; +import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockFurnaceGenerator; +import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockHighTemperatureFurnaceGenerator; +import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockLavaGenerator; +import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockLowTemperatureFurnaceGenerator; +import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockNetherStarGenerator; +import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockPinkGenerator; +import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockPotionGenerator; +import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockRedstoneGenerator; +import com.fouristhenumber.utilitiesinexcess.common.blocks.generators.BlockSolarGenerator; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.DummyBlock; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.IPosteaTransformation; +import com.fouristhenumber.utilitiesinexcess.utils.UIEUtils; +import com.gtnewhorizons.postea.api.IDExtenderCompat; +import com.gtnewhorizons.postea.api.ItemStackReplacementManager; +import com.gtnewhorizons.postea.api.TileEntityReplacementManager; +import com.gtnewhorizons.postea.utility.BlockInfo; +import com.gtnewhorizons.postea.utility.PosteaUtilities; + +import cpw.mods.fml.common.registry.GameRegistry; + +public class GeneratorTransformation implements IPosteaTransformation { + + private final Block dummyBlock1; + private final Block dummyBlock8; + private final Block dummyBlock64; + + private static final String dummyName1 = "dummy_generator1x"; + private static final String dummyName8 = "dummy_generator8x"; + private static final String dummyName64 = "dummy_generator64x"; + + public GeneratorTransformation() { + dummyBlock1 = new DummyBlock(Material.ground); + dummyBlock8 = new DummyBlock(Material.ground); + dummyBlock64 = new DummyBlock(Material.ground); + } + + @Override + public void registerDummies() { + GameRegistry.registerBlock(dummyBlock1, dummyName1); + GameRegistry.registerBlock(dummyBlock8, dummyName8); + GameRegistry.registerBlock(dummyBlock64, dummyName64); + UIEUtils.hideInNei(dummyBlock1); + UIEUtils.hideInNei(dummyBlock8); + UIEUtils.hideInNei(dummyBlock64); + } + + @Override + public void addItemRemappings(Map remappings) { + remappings.put("ExtraUtilities:generator", Item.getItemFromBlock(dummyBlock1)); + remappings.put("ExtraUtilities:generator.8", Item.getItemFromBlock(dummyBlock8)); + remappings.put("ExtraUtilities:generator.64", Item.getItemFromBlock(dummyBlock64)); + } + + @Override + public void addBlockRemappings(Map remappings) { + remappings.put("ExtraUtilities:generator", dummyBlock1); + remappings.put("ExtraUtilities:generator.8", dummyBlock8); + remappings.put("ExtraUtilities:generator.64", dummyBlock64); + } + + @Override + public void registerTransformations() { + ItemStackReplacementManager + .addItemReplacement(UtilitiesInExcess.MODID + ":" + dummyName1, (tag) -> this.doItemTransformation(tag, 1)); + ItemStackReplacementManager + .addItemReplacement(UtilitiesInExcess.MODID + ":" + dummyName8, (tag) -> this.doItemTransformation(tag, 8)); + ItemStackReplacementManager.addItemReplacement( + UtilitiesInExcess.MODID + ":" + dummyName64, + (tag) -> this.doItemTransformation(tag, 64)); + TileEntityReplacementManager.tileEntityTransformer( + "extrautils:generatorstone", + (tag, world, chunk) -> this.doGeneratorTransformation(0, tag, world, chunk)); + TileEntityReplacementManager.tileEntityTransformer( + "extrautils:generatorbase", + (tag, world, chunk) -> this.doGeneratorTransformation(1, tag, world, chunk)); + TileEntityReplacementManager.tileEntityTransformer( + "extrautils:generatorlava", + (tag, world, chunk) -> this.doGeneratorTransformation(2, tag, world, chunk)); + TileEntityReplacementManager.tileEntityTransformer( + "extrautils:generatorender", + (tag, world, chunk) -> this.doGeneratorTransformation(3, tag, world, chunk)); + TileEntityReplacementManager.tileEntityTransformer( + "extrautils:generatorredflux", + (tag, world, chunk) -> this.doGeneratorTransformation(4, tag, world, chunk)); + TileEntityReplacementManager.tileEntityTransformer( + "extrautils:generatorfood", + (tag, world, chunk) -> this.doGeneratorTransformation(5, tag, world, chunk)); + TileEntityReplacementManager.tileEntityTransformer( + "extrautils:generatorpotion", + (tag, world, chunk) -> this.doGeneratorTransformation(6, tag, world, chunk)); + TileEntityReplacementManager.tileEntityTransformer( + "extrautils:generatorsolar", + (tag, world, chunk) -> this.doGeneratorTransformation(7, tag, world, chunk)); + TileEntityReplacementManager.tileEntityTransformer( + "extrautils:generatortnt", + (tag, world, chunk) -> this.doGeneratorTransformation(8, tag, world, chunk)); + TileEntityReplacementManager.tileEntityTransformer( + "extrautils:generatorpink", + (tag, world, chunk) -> this.doGeneratorTransformation(9, tag, world, chunk)); + TileEntityReplacementManager.tileEntityTransformer( + "extrautils:generatoroverclocked", + (tag, world, chunk) -> this.doGeneratorTransformation(10, tag, world, chunk)); + TileEntityReplacementManager.tileEntityTransformer( + "extrautils:generatornether", + (tag, world, chunk) -> this.doGeneratorTransformation(11, tag, world, chunk)); + } + + public NBTTagCompound doItemTransformation(NBTTagCompound tag, int mult) { + int dmg = tag.getInteger("Damage"); + ModBlocks block = getGeneratorFromMetaAndMult(dmg, mult); + IDExtenderCompat.setItemStackID(tag, Item.getIdFromItem(block.getItem())); + tag.setInteger("Damage", 0); + return tag; + } + + public BlockInfo doGeneratorTransformation(int meta, NBTTagCompound originalTag, World world, Chunk chunk) { + Block block = chunk + .getBlock(originalTag.getInteger("x") & 15, originalTag.getInteger("y"), originalTag.getInteger("z") & 15); + + int mult = 1; + if (block == dummyBlock8) { + mult = 8; + } else if (block == dummyBlock64) { + mult = 64; + } + + Block newBlock = getGeneratorFromMetaAndMult(meta, mult).get(); + + return new BlockInfo(newBlock, 0, (oldTag) -> { + NBTTagCompound tag = PosteaUtilities.cleanseNBT(getGeneratorTEID(newBlock), oldTag); + tag.setInteger("Energy", oldTag.getInteger("Energy")); + int burnTime = (int) oldTag.getDouble("coolDown"); + int rfPerTick = oldTag.getInteger("curLevel"); + + tag.setInteger("BurnTime", rfPerTick == 0 ? 0 : burnTime); + tag.setInteger("CurrentRFPerTick", rfPerTick); + + if (oldTag.hasKey("items")) { + NBTTagCompound items = oldTag.getCompoundTag("items"); + if (items.hasKey("item_0")) { + String stackName = newBlock instanceof BlockRedstoneGenerator ? "RedstoneStack" : "FuelStack"; + NBTTagCompound item = items.getCompoundTag("item_0"); + + if (rfPerTick == 0 && burnTime != 0) { + // If we know that the generator is running, but we don't know at what rf/t + // Add an extra item to the input stack + item.setInteger("Count", item.getInteger("Count") + 1); + } + + tag.setTag(stackName, item); + } + } + + if (oldTag.hasKey("Tank_0")) { + NBTTagCompound tank = oldTag.getCompoundTag("Tank_0"); + int amount = tank.getInteger("Amount"); + if (amount > 0 && rfPerTick == 0 && burnTime != 0) { + // If we know that the generator is running, but we don't know at what rf/t + // Add an extra bucket to the input fluid + tank.setInteger("Amount", Math.min(amount + 1000, 4000)); + } + tag.setTag("Fluid", tank); + } + return tag; + }); + } + + public static ModBlocks getGeneratorFromMetaAndMult(int meta, int mult) { + return switch (meta) { + case 0 -> switch (mult) { + case 64 -> ModBlocks.LOW_TEMPERATURE_FURNACE_GENERATOR_PLUSPLUS; + case 8 -> ModBlocks.LOW_TEMPERATURE_FURNACE_GENERATOR_PLUS; + default -> ModBlocks.LOW_TEMPERATURE_FURNACE_GENERATOR; + }; + case 1 -> switch (mult) { + case 64 -> ModBlocks.FURNACE_GENERATOR_PLUSPLUS; + case 8 -> ModBlocks.FURNACE_GENERATOR_PLUS; + default -> ModBlocks.FURNACE_GENERATOR; + }; + case 2 -> switch (mult) { + case 64 -> ModBlocks.LAVA_GENERATOR_PLUSPLUS; + case 8 -> ModBlocks.LAVA_GENERATOR_PLUS; + default -> ModBlocks.LAVA_GENERATOR; + }; + case 3 -> switch (mult) { + case 64 -> ModBlocks.ENDER_GENERATOR_PLUSPLUS; + case 8 -> ModBlocks.ENDER_GENERATOR_PLUS; + default -> ModBlocks.ENDER_GENERATOR; + }; + case 4 -> switch (mult) { + case 64 -> ModBlocks.REDSTONE_GENERATOR_PLUSPLUS; + case 8 -> ModBlocks.REDSTONE_GENERATOR_PLUS; + default -> ModBlocks.REDSTONE_GENERATOR; + }; + case 5 -> switch (mult) { + case 64 -> ModBlocks.FOOD_GENERATOR_PLUSPLUS; + case 8 -> ModBlocks.FOOD_GENERATOR_PLUS; + default -> ModBlocks.FOOD_GENERATOR; + }; + case 6 -> switch (mult) { + case 64 -> ModBlocks.POTION_GENERATOR_PLUSPLUS; + case 8 -> ModBlocks.POTION_GENERATOR_PLUS; + default -> ModBlocks.POTION_GENERATOR; + }; + case 7 -> switch (mult) { + case 64 -> ModBlocks.SOLAR_GENERATOR_PLUSPLUS; + case 8 -> ModBlocks.SOLAR_GENERATOR_PLUS; + default -> ModBlocks.SOLAR_GENERATOR; + }; + case 8 -> switch (mult) { + case 64 -> ModBlocks.TNT_GENERATOR_PLUSPLUS; + case 8 -> ModBlocks.TNT_GENERATOR_PLUS; + default -> ModBlocks.TNT_GENERATOR; + }; + case 9 -> switch (mult) { + case 64 -> ModBlocks.PINK_GENERATOR_PLUSPLUS; + case 8 -> ModBlocks.PINK_GENERATOR_PLUS; + default -> ModBlocks.PINK_GENERATOR; + }; + case 10 -> switch (mult) { + case 64 -> ModBlocks.HIGH_TEMPERATURE_FURNACE_GENERATOR_PLUSPLUS; + case 8 -> ModBlocks.HIGH_TEMPERATURE_FURNACE_GENERATOR_PLUS; + default -> ModBlocks.HIGH_TEMPERATURE_FURNACE_GENERATOR; + }; + case 11 -> switch (mult) { + case 64 -> ModBlocks.NETHER_STAR_GENERATOR_PLUSPLUS; + case 8 -> ModBlocks.NETHER_STAR_GENERATOR_PLUS; + default -> ModBlocks.NETHER_STAR_GENERATOR; + }; + + default -> throw new IllegalStateException("No defined generator with EXU meta: " + meta); + }; + } + + // TODO replace this once malteez's quarry PR gets merged with the TEID enum + private static String getGeneratorTEID(Block block) { + if (block instanceof BlockEnderGenerator) { + return "TileEntityEnderGeneratorUIE"; + } else if (block instanceof BlockFoodGenerator) { + return "TileEntityFoodGeneratorUIE"; + } else if (block instanceof BlockFurnaceGenerator) { + return "TileEntityFurnaceGeneratorUIE"; + } else if (block instanceof BlockHighTemperatureFurnaceGenerator) { + return "TileEntityHighTemperatureFurnaceGenerator"; + } else if (block instanceof BlockLavaGenerator) { + return "TileEntityLowTemperatureFurnaceGeneratorUIE"; + } else if (block instanceof BlockLowTemperatureFurnaceGenerator) { + return "TileEntityNetherStarGeneratorUIE"; + } else if (block instanceof BlockNetherStarGenerator) { + return "TileEntityPinkGeneratorUIE"; + } else if (block instanceof BlockPinkGenerator) { + return "TileEntityPotionGeneratorUIE"; + } else if (block instanceof BlockPotionGenerator) { + return "TileEntityRedstoneGeneratorUIE"; + } else if (block instanceof BlockRedstoneGenerator) { + return "TileEntitySolarGeneratorUIE"; + } else if (block instanceof BlockSolarGenerator) { + return "TileEntityTNTGeneratorUIE"; + } + + return ""; + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/MiniChestTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/MiniChestTransformation.java new file mode 100644 index 00000000..0a81041f --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/MiniChestTransformation.java @@ -0,0 +1,37 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import com.fouristhenumber.utilitiesinexcess.ModBlocks; +import com.gtnewhorizons.postea.utility.BlockInfo; +import com.gtnewhorizons.postea.utility.PosteaUtilities; + +public class MiniChestTransformation extends AbstractTileEntityTransformation { + + public MiniChestTransformation() { + super(); + setOldBlockName("ExtraUtilities:chestMini"); + setOldTileEntityId("TileMiniChest"); + setNewBlock(ModBlocks.SIGNIFICANTLY_SHRUNK_CHEST); + } + + @Override + public BlockInfo doTileEntityTransformation(NBTTagCompound _oldTag, World world, Chunk chunk) { + int meta = chunk + .getBlockMetadata(_oldTag.getInteger("x") & 15, _oldTag.getInteger("y"), _oldTag.getInteger("z") & 15); + // Don't ask me why our direction metas are so incomprehensible. + meta = switch (meta) { + case 3 -> 4; + case 2 -> 3; + case 1 -> 5; + default -> 2; + }; + return new BlockInfo(ModBlocks.SIGNIFICANTLY_SHRUNK_CHEST.get(), meta, (oldTag) -> { + NBTTagCompound tag = PosteaUtilities.cleanseNBT("TileEntitySignificantlyShrunkChestUIE", oldTag); + tag.setTag("Items", oldTag.getTag("Items")); + return tag; + }); + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/SpikeTransformation.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/SpikeTransformation.java new file mode 100644 index 00000000..e17ec183 --- /dev/null +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/compat/exu/postea/tileentities/SpikeTransformation.java @@ -0,0 +1,51 @@ +package com.fouristhenumber.utilitiesinexcess.compat.exu.postea.tileentities; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import com.fouristhenumber.utilitiesinexcess.common.blocks.BlockSpike; +import com.fouristhenumber.utilitiesinexcess.compat.exu.postea.IPosteaTransformation; +import com.gtnewhorizons.postea.api.TileEntityReplacementManager; +import com.gtnewhorizons.postea.utility.BlockInfo; +import com.gtnewhorizons.postea.utility.PosteaUtilities; + +public class SpikeTransformation implements IPosteaTransformation { + + @Override + public void registerTransformations() { + TileEntityReplacementManager + .tileEntityTransformer("TileEntityEnchantedSpike", this::doTileEntityTransformation); + } + + public BlockInfo doTileEntityTransformation(NBTTagCompound _oldTag, World world, Chunk chunk) { + Block block = chunk + .getBlock(_oldTag.getInteger("x") & 15, _oldTag.getInteger("y"), _oldTag.getInteger("z") & 15); + + return new BlockInfo(block, 0, (oldTag) -> { + NBTTagCompound tag = PosteaUtilities.cleanseNBT("utilitiesinexcess:TileEntitySpike", oldTag); + + NBTTagCompound fakeWeapon = new NBTTagCompound(); + + ItemStack fakeWeaponStack = new ItemStack(Item.getItemFromBlock(block)); + NBTTagCompound tagtag = (NBTTagCompound) oldTag.copy(); + tagtag.removeTag("x"); + tagtag.removeTag("y"); + tagtag.removeTag("z"); + tagtag.removeTag("id"); + fakeWeaponStack.setTagCompound(tagtag); + fakeWeaponStack.writeToNBT(fakeWeapon); + + tag.setTag("FakeWeapon", fakeWeapon); + + String spikeType = ((BlockSpike) block).getSpikeType() + .name(); + tag.setString("SpikeType", spikeType); + + return tag; + }); + } +} diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/config/OtherConfig.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/config/OtherConfig.java index 6878f6c1..336431e1 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/config/OtherConfig.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/config/OtherConfig.java @@ -12,6 +12,11 @@ public static void registerConfig() throws ConfigException { ConfigurationManager.registerConfig(OtherConfig.class); } + @Config.DefaultBoolean(true) // TODO Set default to false before release + @Config.RequiresMcRestart + @Config.Comment("Enable the Extra Utilities to Utilities In Excess world conversion system") + public static boolean enableWorldConversion; + @Config.DefaultBoolean(true) @Config.RequiresMcRestart @Config.Comment("Enable rendering some UIE baubles on players who have them equipped") diff --git a/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java b/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java index 09920424..c6155444 100644 --- a/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java +++ b/src/main/java/com/fouristhenumber/utilitiesinexcess/utils/UIEUtils.java @@ -3,7 +3,9 @@ import java.text.DecimalFormat; import java.util.Random; +import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -11,6 +13,7 @@ import baubles.common.container.InventoryBaubles; import baubles.common.lib.PlayerHandler; +import codechicken.nei.api.API; public class UIEUtils { @@ -80,4 +83,14 @@ public static NBTTagCompound getUIETag(EntityPlayer player) { } return uieTag; } + + public static void hideInNei(Block block) { + hideInNei(Item.getItemFromBlock(block)); + } + + public static void hideInNei(Item item) { + if (!Mods.NEI.isLoaded()) return; + + API.hideItem(new ItemStack(item)); + } }