From 682489de18e73067f601d3305cd27708c265dc57 Mon Sep 17 00:00:00 2001 From: Firenoo <49818773+firenoo@users.noreply.github.com> Date: Fri, 7 Apr 2023 20:14:54 -0700 Subject: [PATCH 01/10] EC2 deprecation: Part 1 - Items Laying the groundwork for absorbing EC2 mappings. --- .../java/com/glodblock/github/FluidCraft.java | 8 + .../com/glodblock/github/common/Config.java | 5 +- .../crossmod/extracells/EC2ProxyBlock.java | 33 ++++ .../crossmod/extracells/EC2ProxyItem.java | 71 +++++++ .../crossmod/extracells/EC2Replacer.java | 185 ++++++++++++++++++ .../crossmod/extracells/EC2TileEntity.java | 4 + .../glodblock/github/proxy/CommonProxy.java | 4 + 7 files changed, 309 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyBlock.java create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyItem.java create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/EC2TileEntity.java diff --git a/src/main/java/com/glodblock/github/FluidCraft.java b/src/main/java/com/glodblock/github/FluidCraft.java index 1cd4f76a..b02d73b1 100644 --- a/src/main/java/com/glodblock/github/FluidCraft.java +++ b/src/main/java/com/glodblock/github/FluidCraft.java @@ -1,5 +1,6 @@ package com.glodblock.github; +import com.glodblock.github.crossmod.extracells.EC2Replacer; import net.minecraft.util.ResourceLocation; import appeng.api.AEApi; @@ -93,6 +94,13 @@ public class FluidCraft { SPacketMEUpdateBuffer.disable(); } + @Mod.EventHandler + public void missingMappings(FMLMissingMappingsEvent event) { + if (!ModAndClassUtil.EC2 && Config.replaceEC2) { + EC2Replacer.replaceExtraCells(event); + } + } + @Mod.EventHandler public void onLoadComplete(FMLLoadCompleteEvent event) {} diff --git a/src/main/java/com/glodblock/github/common/Config.java b/src/main/java/com/glodblock/github/common/Config.java index 01ee7ca7..c97cfb1c 100644 --- a/src/main/java/com/glodblock/github/common/Config.java +++ b/src/main/java/com/glodblock/github/common/Config.java @@ -19,7 +19,7 @@ public class Config { public static double portableCellBattery; public static int packetSize; public static int packetRate; - + public static boolean replaceEC2; public static void run() { loadCategory(); loadProperty(); @@ -60,6 +60,9 @@ public class Config { .get("Fluid Craft for AE2", "packetRate", 50, "Period at which packets are dispatched, in ms.") .getInt(); if (packetRate <= 0) packetRate = 50; + replaceEC2 = Config.getBoolean("Fluid Craft for AE2", "replaceEC2", false, + "Set true to handle missing mappings from EC2. Note to work properly, you must have all relevant EC2 parts enabled. " + + "You should disable this after running this once."); if (Config.hasChanged()) Config.save(); } diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyBlock.java b/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyBlock.java new file mode 100644 index 00000000..cbca58e3 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyBlock.java @@ -0,0 +1,33 @@ +package com.glodblock.github.crossmod.extracells; + +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.ItemBlock; + +public class EC2ProxyBlock extends Block { + + protected final String name; + protected final int meta; + protected final Block replacement; + protected final int metaReplacement; + + public EC2ProxyBlock(String ec2itemName, int meta, Block replacement, int metaReplacement) { + super(Material.air); //??? + this.name = ec2itemName; + this.meta = meta; + this.replacement = replacement; + this.metaReplacement = metaReplacement; + } + + void register() { + GameRegistry.registerBlock(this, EC2ProxyItemBlock.class, "ec2placeholder." + name); + } + + private static class EC2ProxyItemBlock extends ItemBlock { + + public EC2ProxyItemBlock(Block block) { + super(block); + } + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyItem.java b/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyItem.java new file mode 100644 index 00000000..308b8057 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyItem.java @@ -0,0 +1,71 @@ +package com.glodblock.github.crossmod.extracells; + +import com.glodblock.github.FluidCraft; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +public class EC2ProxyItem extends Item { + + protected final String name; + + protected final Map replacements; + public EC2ProxyItem(String ec2itemName) { + this.name = ec2itemName; + this.replacements = new HashMap<>(); + } + + void register() { + GameRegistry.registerItem(this, "ec2placeholder." + name, FluidCraft.MODID); + } + + protected void addMetaReplacement(int srcMeta, Item replacement, int targetMeta, Function nbtTransformer) { + this.replacements.put(srcMeta, new ProxyReplacement(replacement, targetMeta, nbtTransformer)); + } + + @Override + public boolean getHasSubtypes() { + return true; + } + + @Override + public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int p_77663_4_, boolean p_77663_5_) { + if (!worldIn.isRemote && entityIn instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) entityIn; + for (int i = 0; i < player.inventory.getSizeInventory(); ++i) { + ItemStack s = player.inventory.getStackInSlot(i); + if (s == stack) { + int meta = stack.getItemDamage(); + ProxyReplacement r = replacements.get(meta); + if (r == null) { + player.inventory.setInventorySlotContents(i, null); + } else { + ItemStack replaceStack = new ItemStack(r.replacement, stack.stackSize, r.meta); + if (replaceStack.hasTagCompound()) { + replaceStack.setTagCompound(r.nbtTransformer.apply(replaceStack.getTagCompound())); + } + player.inventory.setInventorySlotContents(i, replaceStack); + } + } + } + } + } + private static class ProxyReplacement { + private final Item replacement; + private final int meta; + protected final Function nbtTransformer; + ProxyReplacement(Item replacement, int meta, Function nbtTransformer) { + this.replacement = replacement; + this.meta = meta; + this.nbtTransformer = nbtTransformer; + } + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java b/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java new file mode 100644 index 00000000..0d01b58a --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java @@ -0,0 +1,185 @@ +package com.glodblock.github.crossmod.extracells; + +import appeng.api.AEApi; +import com.glodblock.github.loader.ItemAndBlockHolder; +import com.google.common.base.Optional; +import cpw.mods.fml.common.event.FMLMissingMappingsEvent; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +public class EC2Replacer { + + private static Map items; + private static Map blocks; + + /** + * Should be called if and only if replaceEC2 config is true and EC2 not present. Registers proxy + * items for the entire EC2 mod. After running this once, you should set replaceEC2 back to false. + */ + public static void initReplacer() { + items = new HashMap<>(23); + blocks = new HashMap<>(23); + deprecateItem("part.base", 0, ItemAndBlockHolder.FLUID_EXPORT_BUS, EC2Replacer::noop); + deprecateItem("part.base", 1, ItemAndBlockHolder.FLUID_IMPORT_BUS, EC2Replacer::noop); + deprecateItem("part.base", 2, ItemAndBlockHolder.FLUID_STORAGE_BUS, EC2Replacer::noop); + deprecateItem("part.base", 3, ItemAndBlockHolder.FLUID_TERM, EC2Replacer::noop); + deprecateItem("part.base", 4, ItemAndBlockHolder.FLUID_LEVEL_EMITTER, EC2Replacer::noop); + deprecateItem("part.base", 9, ItemAndBlockHolder.FLUID_INTERFACE, EC2Replacer::noop); + deprecateItem("part.base", 10, ItemAndBlockHolder.FLUID_STORAGE_MONITOR, EC2Replacer::noop); + deprecateItem("part.base", 11, ItemAndBlockHolder.FLUID_CONVERSION_MONITOR, EC2Replacer::noop); + deprecateItem("storage.fluid", 0, ItemAndBlockHolder.CELL1KM, EC2Replacer::transformFluidCellData); + deprecateItem("storage.fluid", 1, ItemAndBlockHolder.CELL4KM, EC2Replacer::transformFluidCellData); + deprecateItem("storage.fluid", 2, ItemAndBlockHolder.CELL16KM, EC2Replacer::transformFluidCellData); + deprecateItem("storage.fluid", 3, ItemAndBlockHolder.CELL64KM, EC2Replacer::transformFluidCellData); + deprecateItem("storage.fluid", 4, ItemAndBlockHolder.CELL256KM, EC2Replacer::transformFluidCellData); + deprecateItem("storage.fluid", 5, ItemAndBlockHolder.CELL1024KM, EC2Replacer::transformFluidCellData); + deprecateItem("storage.fluid", 6, ItemAndBlockHolder.CELL4096KM, EC2Replacer::transformFluidCellData); + deprecateItem("storage.fluid", 7, ItemAndBlockHolder.CELL16384KM, EC2Replacer::transformFluidCellData); + // Thanks, AEApi. + if (AEApi.instance().definitions().items().cell256k().isEnabled()) { + deprecateItem("storage.physical", 0, + AEApi.instance().definitions().items().cell256k().maybeItem().get(), + AEApi.instance().definitions().items().cell256k().maybeStack(1).get().getItemDamage(), + EC2Replacer::transformItemCellData); + } + if (AEApi.instance().definitions().items().cell1024k().isEnabled()) { + deprecateItem("storage.physical", 1, + AEApi.instance().definitions().items().cell1024k().maybeItem().get(), + AEApi.instance().definitions().items().cell1024k().maybeStack(1).get().getItemDamage(), + EC2Replacer::transformItemCellData); + } + if (AEApi.instance().definitions().items().cell4096k().isEnabled()) { + deprecateItem("storage.physical", 2, + AEApi.instance().definitions().items().cell4096k().maybeItem().get(), + AEApi.instance().definitions().items().cell4096k().maybeStack(1).get().getItemDamage(), + EC2Replacer::transformItemCellData); + } + if (AEApi.instance().definitions().items().cell16384k().isEnabled()) { + deprecateItem("storage.physical", 3, + AEApi.instance().definitions().items().cell16384k().maybeItem().get(), + AEApi.instance().definitions().items().cell16384k().maybeStack(1).get().getItemDamage(), + EC2Replacer::transformItemCellData); + } + if (AEApi.instance().definitions().items().cellContainer().isEnabled()) { + deprecateItem("storage.physical", 4, + AEApi.instance().definitions().items().cellContainer().maybeItem().get(), + AEApi.instance().definitions().items().cellContainer().maybeStack(1).get().getItemDamage(), + EC2Replacer::transformItemCellData); + } + if (AEApi.instance().definitions().items().cellSingularity().isEnabled()) { + deprecateItem("storage.physical.advanced.singularity", 0, + AEApi.instance().definitions().items().cellSingularity().maybeItem().get(), + AEApi.instance().definitions().items().cellSingularity().maybeStack(1).get().getItemDamage(), + EC2Replacer::transformItemCellData); + } + if (AEApi.instance().definitions().items().cellQuantum().isEnabled()) { + deprecateItem("storage.physical.advanced.quantum", 0, + AEApi.instance().definitions().items().cellQuantum().maybeItem().get(), + AEApi.instance().definitions().items().cellQuantum().maybeStack(1).get().getItemDamage(), + EC2Replacer::transformItemCellData); + } + if (AEApi.instance().definitions().items().cellVoid().isEnabled()) { + deprecateItem("storage.physical.advanced.singularity", 0, + AEApi.instance().definitions().items().cellVoid().maybeItem().get(), + AEApi.instance().definitions().items().cellVoid().maybeStack(1).get().getItemDamage(), + EC2Replacer::transformItemCellData); + } + deprecateItem("pattern.fluid", 0, ItemAndBlockHolder.PATTERN, tag -> tag); + deprecateItem("terminal.fluid.wireless", 0, ItemAndBlockHolder.WIRELESS_FLUID_TERM, tag -> tag); + if (AEApi.instance().definitions().materials().emptyAdvancedStorageCell().isEnabled()) { + deprecateItem("storage.casing", 0, + AEApi.instance().definitions().materials().emptyAdvancedStorageCell().maybeItem().get(), + AEApi.instance().definitions().materials().emptyAdvancedStorageCell().maybeStack(1).get().getItemDamage(), + EC2Replacer::noop); + } + deprecateItem("storage.casing", 1, ItemAndBlockHolder.CELL_HOUSING, 2, EC2Replacer::noop); + if (AEApi.instance().definitions().materials().cell256kPart().isEnabled()) { + deprecateItem("storage.component", 0, + AEApi.instance().definitions().materials().cell256kPart().maybeItem().get(), + AEApi.instance().definitions().materials().cell256kPart().maybeStack(1).get().getItemDamage(), + EC2Replacer::noop); + } + if (AEApi.instance().definitions().materials().cell1024kPart().isEnabled()) { + deprecateItem("storage.component", 1, + AEApi.instance().definitions().materials().cell1024kPart().maybeItem().get(), + AEApi.instance().definitions().materials().cell1024kPart().maybeStack(1).get().getItemDamage(), + EC2Replacer::noop); + } + if (AEApi.instance().definitions().materials().cell4096kPart().isEnabled()) { + deprecateItem("storage.component", 2, + AEApi.instance().definitions().materials().cell4096kPart().maybeItem().get(), + AEApi.instance().definitions().materials().cell4096kPart().maybeStack(1).get().getItemDamage(), + EC2Replacer::noop); + } + if (AEApi.instance().definitions().materials().cell16384kPart().isEnabled()) { + deprecateItem("storage.component", 3, + AEApi.instance().definitions().materials().cell16384kPart().maybeItem().get(), + AEApi.instance().definitions().materials().cell16384kPart().maybeStack(1).get().getItemDamage(), + EC2Replacer::noop); + } + deprecateItem("storage.component", 4, ItemAndBlockHolder.CELL_PART, 0, EC2Replacer::noop); + deprecateItem("storage.component", 5, ItemAndBlockHolder.CELL_PART, 1, EC2Replacer::noop); + deprecateItem("storage.component", 6, ItemAndBlockHolder.CELL_PART, 2, EC2Replacer::noop); + deprecateItem("storage.component", 7, ItemAndBlockHolder.CELL_PART, 3, EC2Replacer::noop); + deprecateItem("storage.component", 8, ItemAndBlockHolder.CELL_PART, 4, EC2Replacer::noop); + deprecateItem("storage.component", 9, ItemAndBlockHolder.CELL_PART, 5, EC2Replacer::noop); + deprecateItem("storage.component", 10, ItemAndBlockHolder.CELL_PART, 6, EC2Replacer::noop); + deprecateItem("terminal.universal.wireless", 0, ItemAndBlockHolder.WIRELESS_ULTRA_TERM, tag -> tag); + } + + private static void deprecateItem(String name, int meta, Item replacement, Function nbtTransformer) { + deprecateItem(name, meta, replacement, 0, nbtTransformer); + } + + private static void deprecateItem(String name, int meta, Item replacement, int targetMeta, Function nbtTransformer) { + final String fullName = "extracells:" + name; + EC2ProxyItem proxy = items.get(fullName); + if (proxy == null) { + proxy = new EC2ProxyItem(name); + items.put(fullName, proxy); + proxy.register(); + } + proxy.addMetaReplacement(meta, replacement, targetMeta, nbtTransformer); + } + + private static void deprecateBlock(String name, int meta, Block replacement) { + deprecateBlock(name, meta, replacement, 0); + } + + private static void deprecateBlock(String name, int meta, Block replacement, int metaReplacement) { + EC2ProxyBlock block = new EC2ProxyBlock(name, meta, replacement, metaReplacement); + blocks.put("extracells:" + name, block); + } + + public static void replaceExtraCells(FMLMissingMappingsEvent event) { + List mappings = event.getAll(); + for (FMLMissingMappingsEvent.MissingMapping m : mappings) { + if (items.containsKey(m.name)) { + Item toRemap = items.get(m.name); + m.remap(toRemap); + } else if (blocks.containsKey(m.name)) { + Block toRemap = blocks.get(m.name); + m.remap(toRemap); + } + } + } + + private static NBTTagCompound noop(NBTTagCompound compound) { + return compound; + } + + private static NBTTagCompound transformFluidCellData(NBTTagCompound compound) { + return compound; //for now no op + } + + private static NBTTagCompound transformItemCellData(NBTTagCompound compound) { + return compound; + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/EC2TileEntity.java b/src/main/java/com/glodblock/github/crossmod/extracells/EC2TileEntity.java new file mode 100644 index 00000000..f4e6a0d1 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/EC2TileEntity.java @@ -0,0 +1,4 @@ +package com.glodblock.github.crossmod.extracells; + +public class EC2TileEntity { +} diff --git a/src/main/java/com/glodblock/github/proxy/CommonProxy.java b/src/main/java/com/glodblock/github/proxy/CommonProxy.java index d218aebe..c26a2862 100644 --- a/src/main/java/com/glodblock/github/proxy/CommonProxy.java +++ b/src/main/java/com/glodblock/github/proxy/CommonProxy.java @@ -1,5 +1,6 @@ package com.glodblock.github.proxy; +import com.glodblock.github.crossmod.extracells.EC2Replacer; import net.minecraft.item.ItemStack; import appeng.api.AEApi; @@ -30,6 +31,9 @@ public class CommonProxy { public void init(FMLInitializationEvent event) { this.registerMovables(); FMLCommonHandler.instance().bus().register(SPacketMEUpdateBuffer.class); + if (!ModAndClassUtil.EC2 && Config.replaceEC2) { + EC2Replacer.initReplacer(); + } } public void postInit(FMLPostInitializationEvent event) { From 68c0abba950e61174a132fffae78f5c66ab28e0a Mon Sep 17 00:00:00 2001 From: Firenoo <49818773+firenoo@users.noreply.github.com> Date: Sat, 8 Apr 2023 08:22:12 -0700 Subject: [PATCH 02/10] EC2 deprecation: Part 2 - Blocks --- .../github/crossmod/extracells/EC2TileEntity.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/EC2TileEntity.java b/src/main/java/com/glodblock/github/crossmod/extracells/EC2TileEntity.java index f4e6a0d1..84b90b44 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/EC2TileEntity.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/EC2TileEntity.java @@ -1,4 +1,17 @@ package com.glodblock.github.crossmod.extracells; -public class EC2TileEntity { +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; + +public abstract class EC2TileEntity extends TileEntity { + + private Object oldTile; + private Class newTile; + public EC2TileEntity(String name, T oldTE, Class newTE) { + this.oldTile = oldTE; + this.newTile = newTE; + } + + abstract TileEntity remap(); + } From 7ad5b9d297f83dce6ba32e600807ac382c968443 Mon Sep 17 00:00:00 2001 From: Firenoo <49818773+firenoo@users.noreply.github.com> Date: Thu, 20 Apr 2023 23:00:07 -0700 Subject: [PATCH 03/10] EC2 Deprecation: Part 3 - Parts Parts are deprecated. --- .../crossmod/extracells/EC2ProxyBlock.java | 2 +- .../crossmod/extracells/EC2Replacer.java | 147 +----------- .../crossmod/extracells/ItemReplacements.java | 177 ++++++++++++++ .../{EC2ProxyItem.java => ProxyItem.java} | 64 +++-- .../github/crossmod/extracells/ProxyPart.java | 225 ++++++++++++++++++ .../crossmod/extracells/ProxyPartItem.java | 58 +++++ .../extracells/parts/ProxyFluidBusIO.java | 72 ++++++ .../extracells/parts/ProxyFluidInterface.java | 42 ++++ .../extracells/parts/ProxyFluidStorage.java | 63 +++++ .../extracells/parts/ProxyLevelEmitter.java | 38 +++ .../extracells/parts/ProxyStorageMonitor.java | 34 +++ 11 files changed, 763 insertions(+), 159 deletions(-) create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java rename src/main/java/com/glodblock/github/crossmod/extracells/{EC2ProxyItem.java => ProxyItem.java} (52%) create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/ProxyPart.java create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/ProxyPartItem.java create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidBusIO.java create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidInterface.java create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidStorage.java create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyLevelEmitter.java create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyStorageMonitor.java diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyBlock.java b/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyBlock.java index cbca58e3..8c7c93f7 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyBlock.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyBlock.java @@ -24,7 +24,7 @@ public class EC2ProxyBlock extends Block { GameRegistry.registerBlock(this, EC2ProxyItemBlock.class, "ec2placeholder." + name); } - private static class EC2ProxyItemBlock extends ItemBlock { + public static class EC2ProxyItemBlock extends ItemBlock { public EC2ProxyItemBlock(Block block) { super(block); diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java b/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java index 0d01b58a..fa16dc41 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java @@ -1,22 +1,15 @@ package com.glodblock.github.crossmod.extracells; -import appeng.api.AEApi; -import com.glodblock.github.loader.ItemAndBlockHolder; -import com.google.common.base.Optional; import cpw.mods.fml.common.event.FMLMissingMappingsEvent; import net.minecraft.block.Block; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.function.Function; public class EC2Replacer { - private static Map items; private static Map blocks; /** @@ -24,129 +17,8 @@ public class EC2Replacer { * items for the entire EC2 mod. After running this once, you should set replaceEC2 back to false. */ public static void initReplacer() { - items = new HashMap<>(23); blocks = new HashMap<>(23); - deprecateItem("part.base", 0, ItemAndBlockHolder.FLUID_EXPORT_BUS, EC2Replacer::noop); - deprecateItem("part.base", 1, ItemAndBlockHolder.FLUID_IMPORT_BUS, EC2Replacer::noop); - deprecateItem("part.base", 2, ItemAndBlockHolder.FLUID_STORAGE_BUS, EC2Replacer::noop); - deprecateItem("part.base", 3, ItemAndBlockHolder.FLUID_TERM, EC2Replacer::noop); - deprecateItem("part.base", 4, ItemAndBlockHolder.FLUID_LEVEL_EMITTER, EC2Replacer::noop); - deprecateItem("part.base", 9, ItemAndBlockHolder.FLUID_INTERFACE, EC2Replacer::noop); - deprecateItem("part.base", 10, ItemAndBlockHolder.FLUID_STORAGE_MONITOR, EC2Replacer::noop); - deprecateItem("part.base", 11, ItemAndBlockHolder.FLUID_CONVERSION_MONITOR, EC2Replacer::noop); - deprecateItem("storage.fluid", 0, ItemAndBlockHolder.CELL1KM, EC2Replacer::transformFluidCellData); - deprecateItem("storage.fluid", 1, ItemAndBlockHolder.CELL4KM, EC2Replacer::transformFluidCellData); - deprecateItem("storage.fluid", 2, ItemAndBlockHolder.CELL16KM, EC2Replacer::transformFluidCellData); - deprecateItem("storage.fluid", 3, ItemAndBlockHolder.CELL64KM, EC2Replacer::transformFluidCellData); - deprecateItem("storage.fluid", 4, ItemAndBlockHolder.CELL256KM, EC2Replacer::transformFluidCellData); - deprecateItem("storage.fluid", 5, ItemAndBlockHolder.CELL1024KM, EC2Replacer::transformFluidCellData); - deprecateItem("storage.fluid", 6, ItemAndBlockHolder.CELL4096KM, EC2Replacer::transformFluidCellData); - deprecateItem("storage.fluid", 7, ItemAndBlockHolder.CELL16384KM, EC2Replacer::transformFluidCellData); - // Thanks, AEApi. - if (AEApi.instance().definitions().items().cell256k().isEnabled()) { - deprecateItem("storage.physical", 0, - AEApi.instance().definitions().items().cell256k().maybeItem().get(), - AEApi.instance().definitions().items().cell256k().maybeStack(1).get().getItemDamage(), - EC2Replacer::transformItemCellData); - } - if (AEApi.instance().definitions().items().cell1024k().isEnabled()) { - deprecateItem("storage.physical", 1, - AEApi.instance().definitions().items().cell1024k().maybeItem().get(), - AEApi.instance().definitions().items().cell1024k().maybeStack(1).get().getItemDamage(), - EC2Replacer::transformItemCellData); - } - if (AEApi.instance().definitions().items().cell4096k().isEnabled()) { - deprecateItem("storage.physical", 2, - AEApi.instance().definitions().items().cell4096k().maybeItem().get(), - AEApi.instance().definitions().items().cell4096k().maybeStack(1).get().getItemDamage(), - EC2Replacer::transformItemCellData); - } - if (AEApi.instance().definitions().items().cell16384k().isEnabled()) { - deprecateItem("storage.physical", 3, - AEApi.instance().definitions().items().cell16384k().maybeItem().get(), - AEApi.instance().definitions().items().cell16384k().maybeStack(1).get().getItemDamage(), - EC2Replacer::transformItemCellData); - } - if (AEApi.instance().definitions().items().cellContainer().isEnabled()) { - deprecateItem("storage.physical", 4, - AEApi.instance().definitions().items().cellContainer().maybeItem().get(), - AEApi.instance().definitions().items().cellContainer().maybeStack(1).get().getItemDamage(), - EC2Replacer::transformItemCellData); - } - if (AEApi.instance().definitions().items().cellSingularity().isEnabled()) { - deprecateItem("storage.physical.advanced.singularity", 0, - AEApi.instance().definitions().items().cellSingularity().maybeItem().get(), - AEApi.instance().definitions().items().cellSingularity().maybeStack(1).get().getItemDamage(), - EC2Replacer::transformItemCellData); - } - if (AEApi.instance().definitions().items().cellQuantum().isEnabled()) { - deprecateItem("storage.physical.advanced.quantum", 0, - AEApi.instance().definitions().items().cellQuantum().maybeItem().get(), - AEApi.instance().definitions().items().cellQuantum().maybeStack(1).get().getItemDamage(), - EC2Replacer::transformItemCellData); - } - if (AEApi.instance().definitions().items().cellVoid().isEnabled()) { - deprecateItem("storage.physical.advanced.singularity", 0, - AEApi.instance().definitions().items().cellVoid().maybeItem().get(), - AEApi.instance().definitions().items().cellVoid().maybeStack(1).get().getItemDamage(), - EC2Replacer::transformItemCellData); - } - deprecateItem("pattern.fluid", 0, ItemAndBlockHolder.PATTERN, tag -> tag); - deprecateItem("terminal.fluid.wireless", 0, ItemAndBlockHolder.WIRELESS_FLUID_TERM, tag -> tag); - if (AEApi.instance().definitions().materials().emptyAdvancedStorageCell().isEnabled()) { - deprecateItem("storage.casing", 0, - AEApi.instance().definitions().materials().emptyAdvancedStorageCell().maybeItem().get(), - AEApi.instance().definitions().materials().emptyAdvancedStorageCell().maybeStack(1).get().getItemDamage(), - EC2Replacer::noop); - } - deprecateItem("storage.casing", 1, ItemAndBlockHolder.CELL_HOUSING, 2, EC2Replacer::noop); - if (AEApi.instance().definitions().materials().cell256kPart().isEnabled()) { - deprecateItem("storage.component", 0, - AEApi.instance().definitions().materials().cell256kPart().maybeItem().get(), - AEApi.instance().definitions().materials().cell256kPart().maybeStack(1).get().getItemDamage(), - EC2Replacer::noop); - } - if (AEApi.instance().definitions().materials().cell1024kPart().isEnabled()) { - deprecateItem("storage.component", 1, - AEApi.instance().definitions().materials().cell1024kPart().maybeItem().get(), - AEApi.instance().definitions().materials().cell1024kPart().maybeStack(1).get().getItemDamage(), - EC2Replacer::noop); - } - if (AEApi.instance().definitions().materials().cell4096kPart().isEnabled()) { - deprecateItem("storage.component", 2, - AEApi.instance().definitions().materials().cell4096kPart().maybeItem().get(), - AEApi.instance().definitions().materials().cell4096kPart().maybeStack(1).get().getItemDamage(), - EC2Replacer::noop); - } - if (AEApi.instance().definitions().materials().cell16384kPart().isEnabled()) { - deprecateItem("storage.component", 3, - AEApi.instance().definitions().materials().cell16384kPart().maybeItem().get(), - AEApi.instance().definitions().materials().cell16384kPart().maybeStack(1).get().getItemDamage(), - EC2Replacer::noop); - } - deprecateItem("storage.component", 4, ItemAndBlockHolder.CELL_PART, 0, EC2Replacer::noop); - deprecateItem("storage.component", 5, ItemAndBlockHolder.CELL_PART, 1, EC2Replacer::noop); - deprecateItem("storage.component", 6, ItemAndBlockHolder.CELL_PART, 2, EC2Replacer::noop); - deprecateItem("storage.component", 7, ItemAndBlockHolder.CELL_PART, 3, EC2Replacer::noop); - deprecateItem("storage.component", 8, ItemAndBlockHolder.CELL_PART, 4, EC2Replacer::noop); - deprecateItem("storage.component", 9, ItemAndBlockHolder.CELL_PART, 5, EC2Replacer::noop); - deprecateItem("storage.component", 10, ItemAndBlockHolder.CELL_PART, 6, EC2Replacer::noop); - deprecateItem("terminal.universal.wireless", 0, ItemAndBlockHolder.WIRELESS_ULTRA_TERM, tag -> tag); - } - - private static void deprecateItem(String name, int meta, Item replacement, Function nbtTransformer) { - deprecateItem(name, meta, replacement, 0, nbtTransformer); - } - - private static void deprecateItem(String name, int meta, Item replacement, int targetMeta, Function nbtTransformer) { - final String fullName = "extracells:" + name; - EC2ProxyItem proxy = items.get(fullName); - if (proxy == null) { - proxy = new EC2ProxyItem(name); - items.put(fullName, proxy); - proxy.register(); - } - proxy.addMetaReplacement(meta, replacement, targetMeta, nbtTransformer); + ItemReplacements.init(); } private static void deprecateBlock(String name, int meta, Block replacement) { @@ -156,13 +28,14 @@ public class EC2Replacer { private static void deprecateBlock(String name, int meta, Block replacement, int metaReplacement) { EC2ProxyBlock block = new EC2ProxyBlock(name, meta, replacement, metaReplacement); blocks.put("extracells:" + name, block); + block.register(); } public static void replaceExtraCells(FMLMissingMappingsEvent event) { List mappings = event.getAll(); for (FMLMissingMappingsEvent.MissingMapping m : mappings) { - if (items.containsKey(m.name)) { - Item toRemap = items.get(m.name); + if (ItemReplacements.registry.containsKey(m.name)) { + Item toRemap = ItemReplacements.registry.get(m.name); m.remap(toRemap); } else if (blocks.containsKey(m.name)) { Block toRemap = blocks.get(m.name); @@ -170,16 +43,4 @@ public class EC2Replacer { } } } - - private static NBTTagCompound noop(NBTTagCompound compound) { - return compound; - } - - private static NBTTagCompound transformFluidCellData(NBTTagCompound compound) { - return compound; //for now no op - } - - private static NBTTagCompound transformItemCellData(NBTTagCompound compound) { - return compound; - } } diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java b/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java new file mode 100644 index 00000000..62f7f15f --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java @@ -0,0 +1,177 @@ +package com.glodblock.github.crossmod.extracells; + +import appeng.api.AEApi; +import appeng.api.definitions.IItemDefinition; +import com.glodblock.github.crossmod.extracells.parts.*; +import com.glodblock.github.loader.ItemAndBlockHolder; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +/** + * Shell class to organize proxy replacements and hide the ugliness + */ +public class ItemReplacements { + + protected static Map registry; + + static void init() { + registry = new HashMap<>(23); + ProxyFluidBusIO.init(); + ItemReplacements.proxyItems(); + ItemReplacements.proxyPartItems(); + } + /** + * Register proxy items (non-parts) + */ + static void proxyItems() { + deprecateFluidStorage("storage.fluid", 0, ItemAndBlockHolder.CELL1KM); + deprecateFluidStorage("storage.fluid", 1, ItemAndBlockHolder.CELL4KM); + deprecateFluidStorage("storage.fluid", 3, ItemAndBlockHolder.CELL64KM); + deprecateFluidStorage("storage.fluid", 4, ItemAndBlockHolder.CELL256KM); + deprecateFluidStorage("storage.fluid", 2, ItemAndBlockHolder.CELL16KM); + deprecateFluidStorage("storage.fluid", 5, ItemAndBlockHolder.CELL1024KM); + deprecateFluidStorage("storage.fluid", 6, ItemAndBlockHolder.CELL4096KM); + deprecateFluidStorage("storage.fluid", 7, ItemAndBlockHolder.CELL16384KM); + // Thanks, AEApi. + deprecateItemStorage("storage.physical", 0, AEApi.instance().definitions().items().cell256k()); + deprecateItemStorage("storage.physical", 1, AEApi.instance().definitions().items().cell1024k()); + deprecateItemStorage("storage.physical", 2, AEApi.instance().definitions().items().cell4096k()); + deprecateItemStorage("storage.physical", 3, AEApi.instance().definitions().items().cell16384k()); + deprecateItemStorage("storage.physical", 4, AEApi.instance().definitions().items().cellContainer()); + deprecateItemStorage("storage.physical.advanced.singularity", 0, + AEApi.instance().definitions().items().cellSingularity()); + deprecateItemStorage("storage.physical.advanced.quantum", 0, + AEApi.instance().definitions().items().cellQuantum()); + deprecateItemStorage("storage.physical.void", 0, + AEApi.instance().definitions().items().cellVoid()); + deprecateItem("pattern.fluid", ItemAndBlockHolder.PATTERN); + deprecateItem("terminal.fluid.wireless", ItemAndBlockHolder.WIRELESS_FLUID_TERM); + /* Storage casings */ + deprecateItem("storage.casing", 0, + AEApi.instance().definitions().materials().emptyAdvancedStorageCell()); + deprecateItem("storage.casing", 1, ItemAndBlockHolder.CELL_HOUSING, 2); + /* Storage components (1k component, etc.) */ + deprecateItem("storage.component", 0, AEApi.instance().definitions().materials().cell256kPart()); + deprecateItem("storage.component", 1, AEApi.instance().definitions().materials().cell1024kPart()); + deprecateItem("storage.component", 2, AEApi.instance().definitions().materials().cell4096kPart()); + deprecateItem("storage.component", 3, AEApi.instance().definitions().materials().cell16384kPart()); + deprecateItem("storage.component", 4, ItemAndBlockHolder.CELL_PART, 0); + deprecateItem("storage.component", 5, ItemAndBlockHolder.CELL_PART, 1); + deprecateItem("storage.component", 6, ItemAndBlockHolder.CELL_PART, 2); + deprecateItem("storage.component", 7, ItemAndBlockHolder.CELL_PART, 3); + deprecateItem("storage.component", 8, ItemAndBlockHolder.CELL_PART, 4); + deprecateItem("storage.component", 9, ItemAndBlockHolder.CELL_PART, 5); + deprecateItem("storage.component", 10, ItemAndBlockHolder.CELL_PART, 6); + deprecateItem("terminal.universal.wireless", ItemAndBlockHolder.WIRELESS_ULTRA_TERM); + + } + + /** + * Register proxy part items. + */ + static void proxyPartItems() { + deprecateItemPart(0, ItemAndBlockHolder.FLUID_EXPORT_BUS, ProxyFluidBusIO::new); + deprecateItemPart(1, ItemAndBlockHolder.FLUID_IMPORT_BUS, ProxyFluidBusIO::new); + deprecateItemPart(2, ItemAndBlockHolder.FLUID_STORAGE_BUS, ProxyFluidStorage::new); + deprecateItemPart(3, ItemAndBlockHolder.FLUID_TERM, ProxyPart::new); + deprecateItemPart(4, ItemAndBlockHolder.FLUID_LEVEL_EMITTER, ProxyLevelEmitter::new); + deprecateItemPart(9, ItemAndBlockHolder.FLUID_INTERFACE, ProxyFluidInterface::new); + deprecateItemPart(10, ItemAndBlockHolder.FLUID_STORAGE_MONITOR, ProxyStorageMonitor::new); + deprecateItemPart(11, ItemAndBlockHolder.FLUID_CONVERSION_MONITOR, ProxyStorageMonitor::new); + } + + private static ProxyItem getOrBuildItem(String srcName) { + final String fullName = "extracells:" + srcName; + ProxyItem proxy = registry.get(fullName); + if (proxy == null) { + proxy = new ProxyItem(srcName); + registry.put(fullName, proxy); + proxy.register(); + } + return proxy; + } + + /** + * Deprecate a simple item. + * @param srcName name of the to-be-replaced item without the mod id prefix + * @param srcMeta meta of the to-be-replaced item + * @param replacement item that will replace src + * @param targetMeta meta of the item that will replace src + */ + private static void deprecateItem(String srcName, int srcMeta, Item replacement, int targetMeta) { + getOrBuildItem(srcName).addMetaReplacement(srcMeta, replacement, targetMeta); + } + + private static void deprecateItem(String srcName, Item replacement) { + deprecateItem(srcName, 0, replacement, 0); + } + + private static void deprecateItem(String srcName, int srcMeta, IItemDefinition replacement) { + if (replacement.isEnabled()) { + deprecateItem(srcName, srcMeta, + replacement.maybeItem().get(), + replacement.maybeStack(1).get().getItemDamage()); + } + } + + private static void deprecateItemPart(int srcMeta, Item replacement, Function partBuilder) { + final String fullName = "extracells:part.base"; + ProxyPartItem proxyItem = (ProxyPartItem) registry.get(fullName); + if (proxyItem == null) { + proxyItem = new ProxyPartItem("part.base"); + registry.put(fullName, proxyItem); + proxyItem.register(); + } + proxyItem.addItemPart(srcMeta, replacement, partBuilder); + } + + /** + * Deprecate a storage item. + */ + private static void deprecateFluidStorage(String srcName, int srcMeta, Item replacement) { + ProxyItem item = getOrBuildItem(srcName); + ProxyItem.ProxyReplacement storage = new FluidStorageReplacement(replacement, 0); + item.addMetaReplacement(srcMeta, storage); + } + + /** + * Deprecate a storage item. This goes through AEAPI, as AE2FC doesn't have any item cells. + * If the item is disabled in AEAPI, the replacement will not be registered! + */ + private static void deprecateItemStorage(String srcName, int srcMeta, IItemDefinition replacement) { + if (replacement.isEnabled()) { + ProxyItem item = getOrBuildItem(srcName); + ProxyItem.ProxyReplacement storage = new ItemStorageReplacement( + replacement.maybeItem().get(), replacement.maybeStack(1).get().getItemDamage()); + item.addMetaReplacement(srcMeta, storage); + } + } +} + +class FluidStorageReplacement extends ProxyItem.ProxyReplacement { + FluidStorageReplacement(Item replacement, int replacementMeta) { + super(replacement, replacementMeta); + } + + @Override + NBTTagCompound replaceNBT(NBTTagCompound compound) { + System.out.println(compound); + return compound; + } +} + +class ItemStorageReplacement extends ProxyItem.ProxyReplacement { + ItemStorageReplacement(Item replacement, int replacementMeta) { + super(replacement, replacementMeta); + } + + @Override + NBTTagCompound replaceNBT(NBTTagCompound compound) { + System.out.println(compound); + return compound; + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyItem.java b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java similarity index 52% rename from src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyItem.java rename to src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java index 308b8057..92e9ce7c 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyItem.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java @@ -1,6 +1,7 @@ package com.glodblock.github.crossmod.extracells; import com.glodblock.github.FluidCraft; +import com.glodblock.github.common.item.FCBaseItem; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -10,25 +11,37 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import java.util.HashMap; +import java.util.List; import java.util.Map; -import java.util.function.Function; -public class EC2ProxyItem extends Item { +/** + * EC2ProxyItem - Item that "holds" the data of a missing item. + */ +public class ProxyItem extends FCBaseItem { protected final String name; + /** + * Maps a metadata value to a replacement. + */ protected final Map replacements; - public EC2ProxyItem(String ec2itemName) { + public ProxyItem(String ec2itemName) { this.name = ec2itemName; this.replacements = new HashMap<>(); } - void register() { + @Override + public FCBaseItem register() { GameRegistry.registerItem(this, "ec2placeholder." + name, FluidCraft.MODID); + return this; } - protected void addMetaReplacement(int srcMeta, Item replacement, int targetMeta, Function nbtTransformer) { - this.replacements.put(srcMeta, new ProxyReplacement(replacement, targetMeta, nbtTransformer)); + protected void addMetaReplacement(int srcMeta, Item replacement, int targetMeta) { + this.replacements.put(srcMeta, new ProxyReplacement(replacement, targetMeta)); + } + + protected void addMetaReplacement(int srcMeta, ProxyReplacement replacement) { + this.replacements.put(srcMeta, replacement); } @Override @@ -36,6 +49,12 @@ public class EC2ProxyItem extends Item { return true; } + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List info, boolean p_77624_4_) { + info.add("§7With Extra Cells gone, this is what remains..."); + info.add("§7Put in your inventory to get a replacement (or disappear if incompatible)"); + } + @Override public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int p_77663_4_, boolean p_77663_5_) { if (!worldIn.isRemote && entityIn instanceof EntityPlayer) { @@ -48,9 +67,9 @@ public class EC2ProxyItem extends Item { if (r == null) { player.inventory.setInventorySlotContents(i, null); } else { - ItemStack replaceStack = new ItemStack(r.replacement, stack.stackSize, r.meta); + ItemStack replaceStack = new ItemStack(r.replacement, stack.stackSize, r.replacementMeta); if (replaceStack.hasTagCompound()) { - replaceStack.setTagCompound(r.nbtTransformer.apply(replaceStack.getTagCompound())); + replaceStack.setTagCompound(r.replaceNBT(replaceStack.getTagCompound())); } player.inventory.setInventorySlotContents(i, replaceStack); } @@ -58,14 +77,29 @@ public class EC2ProxyItem extends Item { } } } - private static class ProxyReplacement { - private final Item replacement; - private final int meta; - protected final Function nbtTransformer; - ProxyReplacement(Item replacement, int meta, Function nbtTransformer) { + + /** + * Base class for a mapping from source (Item, meta) -> replacement (Item, meta). + * Optionally, override the {@link ProxyReplacement#replaceNBT(NBTTagCompound)} + * method for custom NBT migration. + */ + protected static class ProxyReplacement { + + protected final Item replacement; + protected final int replacementMeta; + + /** + * Creates a Proxy Replacement. + * @param replacement Item that will replace the other. + * @param replacementMeta Metadata/damage value of the replacement + */ + ProxyReplacement(Item replacement, int replacementMeta) { this.replacement = replacement; - this.meta = meta; - this.nbtTransformer = nbtTransformer; + this.replacementMeta = replacementMeta; + } + + NBTTagCompound replaceNBT(NBTTagCompound compound) { + return compound; } } } diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPart.java b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPart.java new file mode 100644 index 00000000..993445c0 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPart.java @@ -0,0 +1,225 @@ +package com.glodblock.github.crossmod.extracells; + +import appeng.api.networking.IGridNode; +import appeng.api.parts.*; +import appeng.api.storage.data.IAEItemStack; +import appeng.util.item.AEItemStack; +import cpw.mods.fml.common.registry.GameRegistry; +import io.netty.buffer.ByteBuf; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.Random; + +/** + * ProxyPart is expected to be immediately replaced with the replacement part on load. + */ +public class ProxyPart implements IPart, IPartDeprecated { + + /** + * Prevent memory leaks by having one of the instances be a weak ref. + */ + private final WeakReference item; + + /** + * Name for debug + */ + private final String name; + + public ProxyPart(ProxyPartItem item) { + this.item = new WeakReference<>(item); + this.name = item.name; + } + + @Override + public ItemStack getItemStack(PartItemStack type) { + return null; + } + + @Override + public void renderInventory(IPartRenderHelper rh, RenderBlocks renderer) {} + + @Override + public void renderStatic(int x, int y, int z, IPartRenderHelper rh, RenderBlocks renderer) {} + + @Override + public void renderDynamic(double x, double y, double z, IPartRenderHelper rh, RenderBlocks renderer) {} + + @Override + public IIcon getBreakingTexture() { + return null; + } + + @Override + public boolean requireDynamicRender() { + return false; + } + + @Override + public boolean isSolid() { + return false; + } + + @Override + public boolean canConnectRedstone() { + return false; + } + + @Override + public void writeToNBT(NBTTagCompound data) {} + + @Override + public void readFromNBT(NBTTagCompound data) {} + + @Override + public int getLightLevel() { + return 0; + } + + @Override + public boolean isLadder(EntityLivingBase entity) { + return false; + } + + @Override + public void onNeighborChanged() {} + + @Override + public int isProvidingStrongPower() { + return 0; + } + + @Override + public int isProvidingWeakPower() { + return 0; + } + + @Override + public void writeToStream(ByteBuf data) {} + + @Override + public boolean readFromStream(ByteBuf data) { + return false; + } + + @Override + public IGridNode getGridNode() { + return null; + } + + @Override + public void onEntityCollision(Entity entity) {} + + @Override + public void removeFromWorld() {} + + @Override + public void addToWorld() {} + + @Override + public IGridNode getExternalFacingNode() { + return null; + } + + @Override + public void setPartHostInfo(ForgeDirection side, IPartHost host, TileEntity tile) {} + + @Override + public boolean onActivate(EntityPlayer player, Vec3 pos) { + return false; + } + + @Override + public boolean onShiftActivate(EntityPlayer player, Vec3 pos) { + return false; + } + + @Override + public void getDrops(List drops, boolean wrenched) {} + + @Override + public int cableConnectionRenderTo() { + return 0; + } + + @Override + public void randomDisplayTick(World world, int x, int y, int z, Random r) { + + } + + @Override + public void onPlacement(EntityPlayer player, ItemStack held, ForgeDirection side) {} + + @Override + public boolean canBePlacedOn(BusSupport what) { + return false; + } + + @Override + public void getBoxes(IPartCollisionHelper boxes) {} + + @Override + public NBTTagCompound transformPart(NBTTagCompound def) { + int meta = def.getShort("Damage"); + if (item.get() == null) { + throw new NullPointerException("Umm, this wasn't supposed to happen. The ref item " + name + " was GC'd."); + } + ProxyItem.ProxyReplacement r = item.get().replacements.get(meta); + def.setInteger("id", Item.getIdFromItem(r.replacement)); + def.setShort("Damage", (short) r.replacementMeta); + return def; + } + + @Override + public NBTTagCompound transformNBT(NBTTagCompound extra) { + return extra; + } + + /** + * Creates a new fluid display NBT tag from the fluid name + */ + public static NBTTagCompound createFluidDisplayTag(String fluidName) { + NBTTagCompound fluidDisplay = new NBTTagCompound(); + Fluid fluid = FluidRegistry.getFluid(fluidName); + if (fluid != null) { + ItemStack fluidPacket = new ItemStack(GameRegistry.findItem("ae2fc", "fluid_packet"), 1, 0); + NBTTagCompound fluidPacketTag = new NBTTagCompound(); + // FluidStack + FluidStack fluidStack = new FluidStack(fluid, 1000); + NBTTagCompound fluidStackNbt = new NBTTagCompound(); + fluidStack.writeToNBT(fluidStackNbt); + fluidPacketTag.setTag("FluidStack", fluidStackNbt); + // FluidPacket + fluidPacketTag.setBoolean("DisplayOnly", true); + fluidPacket.setTagCompound(fluidPacketTag); + // Final Item + IAEItemStack aeStack = AEItemStack.create(fluidPacket); + aeStack.writeToNBT(fluidDisplay); + } + return fluidDisplay; + } + + public static NBTTagCompound createFluidNBT(String fluidName, long amount) { + NBTTagCompound fluid = new NBTTagCompound(); + fluid.setString("FluidName", fluidName); + fluid.setBoolean("Craft", false); + fluid.setLong("Req", 0); + fluid.setLong("Cnt", amount); + return fluid; + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPartItem.java b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPartItem.java new file mode 100644 index 00000000..8e5db34a --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPartItem.java @@ -0,0 +1,58 @@ +package com.glodblock.github.crossmod.extracells; + +import appeng.api.parts.IPart; +import appeng.api.parts.IPartItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Function; + +public class ProxyPartItem extends ProxyItem implements IPartItem { + + /** + * Creates a ProxyPartItem associated with the ProxyPart instance. This instance + * is reused on each call to {@link #createPartFromItemStack(ItemStack)}. + * @param ec2itemName extra cells internal name + */ + public ProxyPartItem(String ec2itemName) { + super(ec2itemName); + } + + /** + * + * @param srcMeta + * @param replacement + * @param part + */ + protected void addItemPart(int srcMeta, Item replacement, Function part) { + this.replacements.put(srcMeta, new PartReplacement(replacement, part)); + } + + @Nullable + @Override + public IPart createPartFromItemStack(ItemStack is) { + final int meta = is.getItemDamage(); + if (this.replacements.get(meta) instanceof PartReplacement) { + PartReplacement part = (PartReplacement) this.replacements.get(meta); + return part.proxyPart.apply(this); + } + return null; + } +} + +/** + * Item replacement entry for ItemParts. All targets replace into 0. + */ +class PartReplacement extends ProxyItem.ProxyReplacement { + + Function proxyPart; + + PartReplacement(Item replacement, Function proxyPart) { + super(replacement, 0); + this.proxyPart = proxyPart; + } +} + + + diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidBusIO.java b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidBusIO.java new file mode 100644 index 00000000..8218d578 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidBusIO.java @@ -0,0 +1,72 @@ +package com.glodblock.github.crossmod.extracells.parts; + +import appeng.api.config.RedstoneMode; +import com.glodblock.github.crossmod.extracells.ProxyPart; +import com.glodblock.github.crossmod.extracells.ProxyPartItem; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import static net.minecraftforge.common.util.Constants.NBT.TAG_COMPOUND; + +public class ProxyFluidBusIO extends ProxyPart { + /** + * Map for converting slots from bus EC2 -> AE2FC + */ + private static int[] FILTER_MAP = null; + public static void init() { + FILTER_MAP = new int[] { 5, 3, 6, 1, 0, 2, 7, 4, 8 }; + } + + public ProxyFluidBusIO(ProxyPartItem partItem) { + super(partItem); + } + + @Override + public NBTTagCompound transformNBT(NBTTagCompound extra) { + // Transform NBT in place + // Fluid Filter + NBTTagCompound fluidFilterNew = new NBTTagCompound(); + for (int slot = 0; slot < 9; ++slot) { + String oldFilterName = "FilterFluid#" + slot; + fluidFilterNew + .setTag("#" + FILTER_MAP[slot], ProxyPart.createFluidDisplayTag(extra.getString(oldFilterName))); + extra.removeTag(oldFilterName); + } + extra.setTag("config", fluidFilterNew); + // Upgrades + NBTTagList upgrades = extra.getTagList("upgradeInventory", TAG_COMPOUND); + NBTTagCompound upgradesNew = new NBTTagCompound(); + for (int i = 0; i < 4; ++i) { + NBTTagCompound upgrade = upgrades.getCompoundTagAt(i); + upgrade.removeTag("Slot"); + upgradesNew.setTag("#" + i, upgrade); + } + extra.removeTag("upgradeInventory"); + extra.setTag("upgrades", upgradesNew); + // Redstone mode + RedstoneMode redstoneMode = RedstoneMode.values()[extra.getInteger("redstoneMode")]; + switch (redstoneMode) { + case LOW_SIGNAL: + extra.setString("REDSTONE_CONTROLLED", "LOW_SIGNAL"); + break; + case HIGH_SIGNAL: + extra.setString("REDSTONE_CONTROLLED", "HIGH_SIGNAL"); + break; + case SIGNAL_PULSE: + extra.setString("REDSTONE_CONTROLLED", "SIGNAL_PULSE"); + break; + default: + extra.setString("REDSTONE_CONTROLLED", "IGNORE"); + break; + } + extra.removeTag("redstoneMode"); + // Part data + extra.setTag("part", extra.getCompoundTag("node").getCompoundTag("node0")); + extra.removeTag("node"); + // Extra tags + extra.setString("CRAFT_ONLY", "NO"); + extra.setString("FUZZY_MODE", "IGNORE_ALL"); + extra.setString("SCHEDULING_MODE", "DEFAULT"); + return extra; + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidInterface.java b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidInterface.java new file mode 100644 index 00000000..ea332aa6 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidInterface.java @@ -0,0 +1,42 @@ +package com.glodblock.github.crossmod.extracells.parts; + +import com.glodblock.github.crossmod.extracells.ProxyPart; +import com.glodblock.github.crossmod.extracells.ProxyPartItem; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.common.util.Constants; + +public class ProxyFluidInterface extends ProxyPart { + public ProxyFluidInterface(ProxyPartItem item) { + super(item); + } + + @Override + public NBTTagCompound transformNBT(NBTTagCompound extra) { + // Internal fluids - ConfigInv and FluidInv + NBTTagCompound tank = extra.getCompoundTag("tank"); + NBTTagCompound configTank = new NBTTagCompound(); + configTank.setTag("#0", ProxyPart.createFluidDisplayTag(tank.getString("FluidName"))); + extra.setTag("ConfigInv", configTank); + NBTTagCompound fluidTank = new NBTTagCompound(); + NBTTagCompound fluid = ProxyPart.createFluidNBT(tank.getString("FluidName"), tank.getLong("Amount")); + fluidTank.setTag("#0", fluid); + extra.setTag("FluidInv", fluidTank); + extra.removeTag("tank"); + // Patterns + NBTTagList patterns = extra.getCompoundTag("inventory").getTagList("Inventory", Constants.NBT.TAG_COMPOUND); + NBTTagCompound newPatterns = new NBTTagCompound(); + for (int i = 0; i < patterns.tagCount(); ++i) { + NBTTagCompound p = patterns.getCompoundTagAt(i); + p.removeTag("Slot"); + newPatterns.setTag("#" + i, p); + } + extra.removeTag("inventory"); + extra.setTag("patterns", newPatterns); + // Part + extra.setTag("part", extra.getCompoundTag("node").getCompoundTag("node0")); + extra.removeTag("node"); + return extra; + } + +} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidStorage.java b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidStorage.java new file mode 100644 index 00000000..dfe0dc00 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidStorage.java @@ -0,0 +1,63 @@ +package com.glodblock.github.crossmod.extracells.parts; + +import com.glodblock.github.crossmod.extracells.ProxyPart; +import com.glodblock.github.crossmod.extracells.ProxyPartItem; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import static net.minecraftforge.common.util.Constants.NBT.TAG_COMPOUND; + +public class ProxyFluidStorage extends ProxyPart { + private static int[] FILTER_MAP = null; + protected static void init() { + // spotless:off + FILTER_MAP = new int[] { + 0, 9, 18, 27, 36, 45, + 1, 10, 19, 28, 37, 46, + 2, 11, 20, 29, 38, 47, + 3, 12, 21, 30, 39, 48, + 4, 13, 22, 31, 40, 49, + 5, 14, 23, 32, 41, 50, + 6, 15, 24, 33, 42, 51, + 7, 16, 25, 34, 43, 52, + 8, 17, 26, 35, 44, 53 }; + //spotless:on + } + public ProxyFluidStorage(ProxyPartItem item) { + super(item); + } + + @Override + public NBTTagCompound transformNBT(NBTTagCompound extra) { + // Transform in place, less messy IMO + // Fluid filter slots + NBTTagCompound fluidFilterNew = new NBTTagCompound(); + for (int slot = 0; slot < 54; ++slot) { + String oldFilterName = "FilterFluid#" + slot; + fluidFilterNew + .setTag("#" + FILTER_MAP[slot], ProxyPart.createFluidDisplayTag(extra.getString(oldFilterName))); + extra.removeTag(oldFilterName); + } + extra.setTag("config", fluidFilterNew); + + // Part data + extra.setTag("part", extra.getCompoundTag("node").getCompoundTag("node0")); + extra.removeTag("node"); + + // Access + extra.setString("ACCESS", extra.getString("access")); + extra.removeTag("access"); + + // Upgrades + NBTTagList upgrades = extra.getTagList("upgradeInventory", TAG_COMPOUND); + NBTTagCompound upgradeNew = new NBTTagCompound(); + upgradeNew.setTag("#0", upgrades.getCompoundTagAt(0)); + upgradeNew.setTag("#1", new NBTTagCompound()); + upgradeNew.setTag("#2", new NBTTagCompound()); + upgradeNew.setTag("#3", new NBTTagCompound()); + upgradeNew.setTag("#4", new NBTTagCompound()); + extra.setTag("upgrades", upgradeNew); + extra.removeTag("upgradeInventory"); + return extra; + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyLevelEmitter.java b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyLevelEmitter.java new file mode 100644 index 00000000..13d80361 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyLevelEmitter.java @@ -0,0 +1,38 @@ +package com.glodblock.github.crossmod.extracells.parts; + +import appeng.api.config.RedstoneMode; +import com.glodblock.github.crossmod.extracells.ProxyPart; +import com.glodblock.github.crossmod.extracells.ProxyPartItem; +import net.minecraft.nbt.NBTTagCompound; + +public class ProxyLevelEmitter extends ProxyPart { + public ProxyLevelEmitter(ProxyPartItem item) { + super(item); + } + + @Override + public NBTTagCompound transformNBT(NBTTagCompound extra) { + // Fluid + NBTTagCompound fluidSlots = new NBTTagCompound(); + fluidSlots.setTag("#0", ProxyPart.createFluidDisplayTag(extra.getString("fluid"))); + extra.setTag("config", fluidSlots); + extra.removeTag("fluid"); + // Redstone + RedstoneMode redstoneMode = RedstoneMode.values()[extra.getInteger("mode")]; + if (redstoneMode == RedstoneMode.LOW_SIGNAL) { + extra.setString("REDSTONE_EMITTER", "LOW_SIGNAL"); + } else { + extra.setString("REDSTONE_EMITTER", "HIGH_SIGNAL"); + } + extra.removeTag("mode"); + // Level + long wanted = extra.getLong("wantedAmount"); + extra.setLong("reportingValue", wanted); + extra.setLong("lastReportingValue", wanted); + extra.removeTag("wantedAmount"); + // Part + extra.setTag("part", extra.getCompoundTag("node").getCompoundTag("node0")); + extra.removeTag("node"); + return extra; + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyStorageMonitor.java b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyStorageMonitor.java new file mode 100644 index 00000000..0e1a1971 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyStorageMonitor.java @@ -0,0 +1,34 @@ +package com.glodblock.github.crossmod.extracells.parts; + +import com.glodblock.github.crossmod.extracells.ProxyPart; +import com.glodblock.github.crossmod.extracells.ProxyPartItem; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +public class ProxyStorageMonitor extends ProxyPart { + public ProxyStorageMonitor(ProxyPartItem item) { + super(item); + } + + @Override + public NBTTagCompound transformNBT(NBTTagCompound extra) { + // Fluid + int fluid = extra.getInteger("fluid"); + Fluid f = FluidRegistry.getFluid(fluid); + NBTTagCompound itemDisplay = ProxyPart.createFluidNBT(f.getName(), 0L); + extra.setTag("configuredItem", itemDisplay); + extra.removeTag("amount"); + extra.removeTag("fluid"); + // Locked and other props + extra.setBoolean("isLocked", extra.getBoolean("locked")); + extra.removeTag("locked"); + extra.setByte("spin", (byte) 0); + extra.setFloat("opacity", 255.0f); + // Part + extra.setTag("part", extra.getCompoundTag("node").getCompoundTag("node0")); + extra.removeTag("node"); + return extra; + } + +} From bfaec120113f2d09a16f517cc9d77eca015580c5 Mon Sep 17 00:00:00 2001 From: Firenoo <49818773+firenoo@users.noreply.github.com> Date: Sat, 22 Apr 2023 10:49:52 -0700 Subject: [PATCH 04/10] set config "replaceEC2" to default true --- src/main/java/com/glodblock/github/common/Config.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/glodblock/github/common/Config.java b/src/main/java/com/glodblock/github/common/Config.java index c97cfb1c..2d1fd2cd 100644 --- a/src/main/java/com/glodblock/github/common/Config.java +++ b/src/main/java/com/glodblock/github/common/Config.java @@ -60,9 +60,8 @@ public class Config { .get("Fluid Craft for AE2", "packetRate", 50, "Period at which packets are dispatched, in ms.") .getInt(); if (packetRate <= 0) packetRate = 50; - replaceEC2 = Config.getBoolean("Fluid Craft for AE2", "replaceEC2", false, - "Set true to handle missing mappings from EC2. Note to work properly, you must have all relevant EC2 parts enabled. " + - "You should disable this after running this once."); + replaceEC2 = Config.getBoolean("Fluid Craft for AE2", "replaceEC2", true, + "Set true to handle missing item mappings from EC2. Note to work properly, you must have all relevant parts."); if (Config.hasChanged()) Config.save(); } From 709805b4c6077cb3f0e246dcf98d55e8cb929757 Mon Sep 17 00:00:00 2001 From: Firenoo <49818773+firenoo@users.noreply.github.com> Date: Sat, 22 Apr 2023 18:47:32 -0700 Subject: [PATCH 05/10] API changes to make room for Extra Cells fluid placeholder --- .../github/common/item/FCBaseItemCell.java | 2 +- .../item/ItemCreativeFluidStorageCell.java | 2 +- .../common/item/ItemPortableFluidCell.java | 2 +- .../common/storage/FluidCellHandler.java | 2 +- .../common/storage/FluidCellInventory.java | 15 ++- .../storage/FluidCellInventoryHandler.java | 2 +- .../common/storage/IFluidCellInventory.java | 2 +- .../common/storage/IStorageFluidCell.java | 2 +- .../storage/ProxyFluidCellInvHandler.java | 11 ++ .../storage/ProxyFluidCellInventory.java | 51 ++++++++ .../storage/ProxyFluidStorageCell.java | 111 ++++++++++++++++++ 11 files changed, 190 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInvHandler.java create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInventory.java create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidStorageCell.java diff --git a/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java b/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java index d0d7b232..b089cae8 100644 --- a/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java +++ b/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java @@ -175,7 +175,7 @@ public abstract class FCBaseItemCell extends AEBaseItem implements IStorageFluid } @Override - public double getIdleDrain() { + public double getIdleDrain(ItemStack is) { return this.idleDrain; } diff --git a/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java b/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java index e5c6af1f..be33a2e1 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java @@ -71,7 +71,7 @@ public class ItemCreativeFluidStorageCell extends AEBaseItem } @Override - public double getIdleDrain() { + public double getIdleDrain(ItemStack is) { return 0; } diff --git a/src/main/java/com/glodblock/github/common/item/ItemPortableFluidCell.java b/src/main/java/com/glodblock/github/common/item/ItemPortableFluidCell.java index 03d69270..4b6030cc 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemPortableFluidCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemPortableFluidCell.java @@ -150,7 +150,7 @@ public class ItemPortableFluidCell extends AEBasePoweredItem } @Override - public double getIdleDrain() { + public double getIdleDrain(ItemStack is) { return 0.5; } diff --git a/src/main/java/com/glodblock/github/common/storage/FluidCellHandler.java b/src/main/java/com/glodblock/github/common/storage/FluidCellHandler.java index 648ead69..88740f30 100644 --- a/src/main/java/com/glodblock/github/common/storage/FluidCellHandler.java +++ b/src/main/java/com/glodblock/github/common/storage/FluidCellHandler.java @@ -69,6 +69,6 @@ public class FluidCellHandler implements ICellHandler { @Override public double cellIdleDrain(final ItemStack is, final IMEInventory handler) { final IFluidCellInventory inv = ((IFluidCellInventoryHandler) handler).getCellInv(); - return inv.getIdleDrain(); + return inv.getIdleDrain(is); } } diff --git a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java index cdd86a63..79c538ca 100644 --- a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java +++ b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java @@ -3,6 +3,9 @@ package com.glodblock.github.common.storage; import java.util.ArrayList; import java.util.List; +import com.glodblock.github.crossmod.extracells.storage.ProxyFluidCellInvHandler; +import com.glodblock.github.crossmod.extracells.storage.ProxyFluidCellInventory; +import com.glodblock.github.crossmod.extracells.storage.ProxyFluidStorageCell; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -31,15 +34,15 @@ public class FluidCellInventory implements IFluidCellInventory { private static final String FLUID_SLOT = "#"; private static final String FLUID_SLOT_COUNT = "@"; protected IStorageFluidCell cellType; - private static String[] fluidSlots; - private static String[] fluidSlotCount; + protected static String[] fluidSlots; + protected static String[] fluidSlotCount; protected final ItemStack cellItem; private final ISaveProvider container; private final int MAX_TYPE = 63; private long storedFluidCount; private short storedFluids; protected IItemList cellFluids; - private final NBTTagCompound tagCompound; + protected final NBTTagCompound tagCompound; public static final int singleByteAmount = 256 * 8; public FluidCellInventory(final ItemStack o, final ISaveProvider container) throws AppEngException { @@ -80,6 +83,8 @@ public class FluidCellInventory implements IFluidCellInventory { try { if (o.getItem() instanceof ItemCreativeFluidStorageCell) { return new FluidCellInventoryHandler(new CreativeFluidCellInventory(o, container2)); + } else if (o.getItem() instanceof ProxyFluidStorageCell) { + return new FluidCellInventoryHandler(new ProxyFluidCellInventory(o, container2)); } else { return new FluidCellInventoryHandler(new FluidCellInventory(o, container2)); } @@ -105,8 +110,8 @@ public class FluidCellInventory implements IFluidCellInventory { } @Override - public double getIdleDrain() { - return this.cellType.getIdleDrain(); + public double getIdleDrain(ItemStack is) { + return this.cellType.getIdleDrain(is); } @Override diff --git a/src/main/java/com/glodblock/github/common/storage/FluidCellInventoryHandler.java b/src/main/java/com/glodblock/github/common/storage/FluidCellInventoryHandler.java index 334a0cea..a4bf1add 100644 --- a/src/main/java/com/glodblock/github/common/storage/FluidCellInventoryHandler.java +++ b/src/main/java/com/glodblock/github/common/storage/FluidCellInventoryHandler.java @@ -19,7 +19,7 @@ import com.glodblock.github.util.Util; public class FluidCellInventoryHandler extends MEInventoryHandler implements IFluidCellInventoryHandler { - FluidCellInventoryHandler(final IMEInventory c) { + protected FluidCellInventoryHandler(final IMEInventory c) { super(c, StorageChannel.FLUIDS); final IFluidCellInventory ci = this.getCellInv(); diff --git a/src/main/java/com/glodblock/github/common/storage/IFluidCellInventory.java b/src/main/java/com/glodblock/github/common/storage/IFluidCellInventory.java index e48739c3..f19ea2f7 100644 --- a/src/main/java/com/glodblock/github/common/storage/IFluidCellInventory.java +++ b/src/main/java/com/glodblock/github/common/storage/IFluidCellInventory.java @@ -18,7 +18,7 @@ public interface IFluidCellInventory extends IMEInventory { /** * @return idle cost for this Storage Cell */ - double getIdleDrain(); + double getIdleDrain(ItemStack is); /** * @return access configured list diff --git a/src/main/java/com/glodblock/github/common/storage/IStorageFluidCell.java b/src/main/java/com/glodblock/github/common/storage/IStorageFluidCell.java index 00631727..3e6bdc3d 100644 --- a/src/main/java/com/glodblock/github/common/storage/IStorageFluidCell.java +++ b/src/main/java/com/glodblock/github/common/storage/IStorageFluidCell.java @@ -17,7 +17,7 @@ public interface IStorageFluidCell extends ICellWorkbenchItem { boolean isStorageCell(ItemStack i); - double getIdleDrain(); + double getIdleDrain(ItemStack is); int getTotalTypes(ItemStack cellItem); } diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInvHandler.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInvHandler.java new file mode 100644 index 00000000..235fd42c --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInvHandler.java @@ -0,0 +1,11 @@ +package com.glodblock.github.crossmod.extracells.storage; + +import com.glodblock.github.common.storage.*; + + +public class ProxyFluidCellInvHandler extends FluidCellInventoryHandler { + + public ProxyFluidCellInvHandler(FluidCellInventory inv) { + super(inv); + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInventory.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInventory.java new file mode 100644 index 00000000..5df4a0cc --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInventory.java @@ -0,0 +1,51 @@ +package com.glodblock.github.crossmod.extracells.storage; + +import appeng.api.AEApi; +import appeng.api.config.Actionable; +import appeng.api.exceptions.AppEngException; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.storage.ISaveProvider; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IItemList; +import appeng.util.item.AEFluidStack; +import com.glodblock.github.common.storage.FluidCellInventory; +import com.glodblock.github.common.storage.IFluidCellInventory; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import java.util.List; + +public class ProxyFluidCellInventory extends FluidCellInventory { + private static final String EC_CONVERTED = "ec_converted"; + public ProxyFluidCellInventory(ItemStack o, ISaveProvider container) throws AppEngException { + super(o, container); + } + + @Override + protected void loadCellFluids() { + // If we've already converted the tag to AE2FC, just go to super. + // Else, proceed with conversion + if (!this.tagCompound.hasKey(EC_CONVERTED)) { + if (this.cellFluids == null) { + this.cellFluids = AEApi.instance().storage().createFluidList(); + } + this.cellFluids.resetStatus(); // clears totals and stuff. + // Load using Extra Cell's NBT format + for (int i = 0; i < this.cellType.getTotalTypes(this.cellItem); i++) { + FluidStack fs = FluidStack.loadFluidStackFromNBT(tagCompound.getCompoundTag("Fluid#" + i)); + final AEFluidStack aet = AEFluidStack.create(fs); + if (aet != null) { + if (aet.getStackSize() > 0) { + this.cellFluids.add(aet); + } + } + } + this.tagCompound.setBoolean(EC_CONVERTED, true); + } else { + super.loadCellFluids(); + } + + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidStorageCell.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidStorageCell.java new file mode 100644 index 00000000..efca5ef6 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidStorageCell.java @@ -0,0 +1,111 @@ +package com.glodblock.github.crossmod.extracells.storage; + +import appeng.api.config.FuzzyMode; +import appeng.api.storage.data.IAEFluidStack; +import appeng.items.contents.CellConfig; +import appeng.items.contents.CellUpgrades; +import appeng.util.Platform; +import com.glodblock.github.common.Config; +import com.glodblock.github.common.item.ItemMultiFluidStorageCell; +import com.glodblock.github.common.storage.IStorageFluidCell; +import com.glodblock.github.crossmod.extracells.ProxyItem; +import com.glodblock.github.util.ModAndClassUtil; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +public class ProxyFluidStorageCell extends ProxyItem implements IStorageFluidCell { + + public ProxyFluidStorageCell(String ec2itemName) { + super(ec2itemName); + } + + @Override + public long getBytes(ItemStack cellItem) { + int meta = cellItem.getItemDamage(); + if (replacements.containsKey(meta)) { + ProxyItemEntry entry = replacements.get(meta); + if (entry instanceof ProxyFluidStorageEntry) { + return ((ProxyFluidStorageEntry) entry).maxBytes; + } + } + return 0; + } + + @Override + public int getBytesPerType(ItemStack cellItem) { + int meta = cellItem.getItemDamage(); + if (replacements.containsKey(meta)) { + ProxyItemEntry entry = replacements.get(meta); + if (entry instanceof ProxyFluidStorageEntry) { + return ((ProxyFluidStorageEntry) entry).bytesPerType; + } + } + return 0; + } + + @Override + public boolean isBlackListed(ItemStack cellItem, IAEFluidStack requestedAddition) { + if (Config.blacklistEssentiaGas && ModAndClassUtil.ThE && requestedAddition != null) { + return ModAndClassUtil.essentiaGas.isInstance(requestedAddition.getFluid()); + } + return false; + } + + @Override + public boolean storableInStorageCell() { + return false; + } + + @Override + public boolean isStorageCell(ItemStack i) { + return true; + } + + @Override + public double getIdleDrain(ItemStack is) { + int meta = is.getItemDamage(); + if (replacements.containsKey(meta)) { + ProxyItemEntry entry = replacements.get(meta); + if (entry instanceof ProxyFluidStorageEntry) { + return ((ProxyFluidStorageEntry) entry).idleDrain; + } + } + return 0; + } + + @Override + public int getTotalTypes(ItemStack cellItem) { + return 5; + } + + @Override + public boolean isEditable(ItemStack is) { + return true; + } + + @Override + public IInventory getUpgradesInventory(ItemStack is) { + return new CellUpgrades(is, 0); + } + + @Override + public IInventory getConfigInventory(ItemStack is) { + return new CellConfig(is); + } + + @Override + public FuzzyMode getFuzzyMode(ItemStack is) { + final String fz = Platform.openNbtData(is).getString("FuzzyMode"); + try { + return FuzzyMode.valueOf(fz); + } catch (final Throwable t) { + return FuzzyMode.IGNORE_ALL; + } + } + + @Override + public void setFuzzyMode(ItemStack is, FuzzyMode fzMode) { + + } +} From 6b9e500655a132154d45eac355cff17922dcc387 Mon Sep 17 00:00:00 2001 From: Firenoo <49818773+firenoo@users.noreply.github.com> Date: Sat, 22 Apr 2023 18:48:28 -0700 Subject: [PATCH 06/10] Finish basic item replacement code - parts work - items are remapped properly, and converted when they enter the player inventory --- .../crossmod/extracells/EC2ProxyBlock.java | 33 -------- .../crossmod/extracells/EC2Replacer.java | 23 +----- .../crossmod/extracells/EC2TileEntity.java | 17 ---- .../crossmod/extracells/ItemReplacements.java | 79 ++++++++++--------- .../github/crossmod/extracells/ProxyItem.java | 47 +++++++++-- .../github/crossmod/extracells/ProxyPart.java | 2 +- .../crossmod/extracells/ProxyPartItem.java | 2 +- 7 files changed, 86 insertions(+), 117 deletions(-) delete mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyBlock.java delete mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/EC2TileEntity.java diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyBlock.java b/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyBlock.java deleted file mode 100644 index 8c7c93f7..00000000 --- a/src/main/java/com/glodblock/github/crossmod/extracells/EC2ProxyBlock.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.glodblock.github.crossmod.extracells; - -import cpw.mods.fml.common.registry.GameRegistry; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.item.ItemBlock; - -public class EC2ProxyBlock extends Block { - - protected final String name; - protected final int meta; - protected final Block replacement; - protected final int metaReplacement; - - public EC2ProxyBlock(String ec2itemName, int meta, Block replacement, int metaReplacement) { - super(Material.air); //??? - this.name = ec2itemName; - this.meta = meta; - this.replacement = replacement; - this.metaReplacement = metaReplacement; - } - - void register() { - GameRegistry.registerBlock(this, EC2ProxyItemBlock.class, "ec2placeholder." + name); - } - - public static class EC2ProxyItemBlock extends ItemBlock { - - public EC2ProxyItemBlock(Block block) { - super(block); - } - } -} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java b/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java index fa16dc41..afa62f2c 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java @@ -1,45 +1,30 @@ package com.glodblock.github.crossmod.extracells; import cpw.mods.fml.common.event.FMLMissingMappingsEvent; -import net.minecraft.block.Block; +import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.item.Item; -import java.util.HashMap; import java.util.List; -import java.util.Map; public class EC2Replacer { - private static Map blocks; /** * Should be called if and only if replaceEC2 config is true and EC2 not present. Registers proxy * items for the entire EC2 mod. After running this once, you should set replaceEC2 back to false. */ public static void initReplacer() { - blocks = new HashMap<>(23); ItemReplacements.init(); } - private static void deprecateBlock(String name, int meta, Block replacement) { - deprecateBlock(name, meta, replacement, 0); - } - - private static void deprecateBlock(String name, int meta, Block replacement, int metaReplacement) { - EC2ProxyBlock block = new EC2ProxyBlock(name, meta, replacement, metaReplacement); - blocks.put("extracells:" + name, block); - block.register(); - } - public static void replaceExtraCells(FMLMissingMappingsEvent event) { List mappings = event.getAll(); for (FMLMissingMappingsEvent.MissingMapping m : mappings) { - if (ItemReplacements.registry.containsKey(m.name)) { + if (m.type == GameRegistry.Type.ITEM && ItemReplacements.registry.containsKey(m.name)) { Item toRemap = ItemReplacements.registry.get(m.name); m.remap(toRemap); - } else if (blocks.containsKey(m.name)) { - Block toRemap = blocks.get(m.name); - m.remap(toRemap); + } else { + m.warn(); } } } diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/EC2TileEntity.java b/src/main/java/com/glodblock/github/crossmod/extracells/EC2TileEntity.java deleted file mode 100644 index 84b90b44..00000000 --- a/src/main/java/com/glodblock/github/crossmod/extracells/EC2TileEntity.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.glodblock.github.crossmod.extracells; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; - -public abstract class EC2TileEntity extends TileEntity { - - private Object oldTile; - private Class newTile; - public EC2TileEntity(String name, T oldTE, Class newTE) { - this.oldTile = oldTE; - this.newTile = newTE; - } - - abstract TileEntity remap(); - -} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java b/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java index 62f7f15f..acb8d209 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java @@ -2,10 +2,11 @@ package com.glodblock.github.crossmod.extracells; import appeng.api.AEApi; import appeng.api.definitions.IItemDefinition; +import com.glodblock.github.common.item.ItemMultiFluidStorageCell; import com.glodblock.github.crossmod.extracells.parts.*; +import com.glodblock.github.crossmod.extracells.storage.ProxyFluidStorageCell; import com.glodblock.github.loader.ItemAndBlockHolder; import net.minecraft.item.Item; -import net.minecraft.nbt.NBTTagCompound; import java.util.HashMap; import java.util.Map; @@ -16,7 +17,7 @@ import java.util.function.Function; */ public class ItemReplacements { - protected static Map registry; + protected static Map registry; static void init() { registry = new HashMap<>(23); @@ -28,14 +29,22 @@ public class ItemReplacements { * Register proxy items (non-parts) */ static void proxyItems() { - deprecateFluidStorage("storage.fluid", 0, ItemAndBlockHolder.CELL1KM); - deprecateFluidStorage("storage.fluid", 1, ItemAndBlockHolder.CELL4KM); - deprecateFluidStorage("storage.fluid", 3, ItemAndBlockHolder.CELL64KM); - deprecateFluidStorage("storage.fluid", 4, ItemAndBlockHolder.CELL256KM); - deprecateFluidStorage("storage.fluid", 2, ItemAndBlockHolder.CELL16KM); - deprecateFluidStorage("storage.fluid", 5, ItemAndBlockHolder.CELL1024KM); - deprecateFluidStorage("storage.fluid", 6, ItemAndBlockHolder.CELL4096KM); - deprecateFluidStorage("storage.fluid", 7, ItemAndBlockHolder.CELL16384KM); + deprecateFluidStorage("storage.fluid", 0, ItemAndBlockHolder.CELL1KM, + 1, 8, 0.5); + deprecateFluidStorage("storage.fluid", 1, ItemAndBlockHolder.CELL4KM, + 4, 32, 1.0); + deprecateFluidStorage("storage.fluid", 2, ItemAndBlockHolder.CELL16KM, + 16, 128, 1.5); + deprecateFluidStorage("storage.fluid", 3, ItemAndBlockHolder.CELL64KM, + 64, 512, 2.0); + deprecateFluidStorage("storage.fluid", 4, ItemAndBlockHolder.CELL256KM, + 256, 2048, 2.5); + deprecateFluidStorage("storage.fluid", 5, ItemAndBlockHolder.CELL1024KM, + 1024, 8192, 3.0); + deprecateFluidStorage("storage.fluid", 6, ItemAndBlockHolder.CELL4096KM, + 4096, 32768, 3.5); + deprecateFluidStorage("storage.fluid", 7, ItemAndBlockHolder.CELL16384KM, + 16384, 131072, 4.0); // Thanks, AEApi. deprecateItemStorage("storage.physical", 0, AEApi.instance().definitions().items().cell256k()); deprecateItemStorage("storage.physical", 1, AEApi.instance().definitions().items().cell1024k()); @@ -67,7 +76,6 @@ public class ItemReplacements { deprecateItem("storage.component", 9, ItemAndBlockHolder.CELL_PART, 5); deprecateItem("storage.component", 10, ItemAndBlockHolder.CELL_PART, 6); deprecateItem("terminal.universal.wireless", ItemAndBlockHolder.WIRELESS_ULTRA_TERM); - } /** @@ -86,7 +94,7 @@ public class ItemReplacements { private static ProxyItem getOrBuildItem(String srcName) { final String fullName = "extracells:" + srcName; - ProxyItem proxy = registry.get(fullName); + ProxyItem proxy = (ProxyItem) registry.get(fullName); if (proxy == null) { proxy = new ProxyItem(srcName); registry.put(fullName, proxy); @@ -95,6 +103,17 @@ public class ItemReplacements { return proxy; } + private static ProxyFluidStorageCell getOrBuildFluidStorage(String srcName) { + final String fullName = "extracells:" + srcName; + ProxyFluidStorageCell proxy = (ProxyFluidStorageCell) registry.get(fullName); + if (proxy == null) { + proxy = new ProxyFluidStorageCell(srcName); + registry.put(fullName, proxy); + proxy.register(); + } + return proxy; + } + /** * Deprecate a simple item. * @param srcName name of the to-be-replaced item without the mod id prefix @@ -106,6 +125,10 @@ public class ItemReplacements { getOrBuildItem(srcName).addMetaReplacement(srcMeta, replacement, targetMeta); } + static void deprecateItemBlock(String srcName, int srcMeta, Item replacement, int targetMeta) { + getOrBuildItem("itemBlock." + srcName).addMetaReplacement(srcMeta, replacement, targetMeta); + } + private static void deprecateItem(String srcName, Item replacement) { deprecateItem(srcName, 0, replacement, 0); } @@ -130,12 +153,12 @@ public class ItemReplacements { } /** - * Deprecate a storage item. + * Deprecate a fluid storage item. Note that we can't access the properties directly, so we need to do this */ - private static void deprecateFluidStorage(String srcName, int srcMeta, Item replacement) { - ProxyItem item = getOrBuildItem(srcName); - ProxyItem.ProxyReplacement storage = new FluidStorageReplacement(replacement, 0); - item.addMetaReplacement(srcMeta, storage); + private static void deprecateFluidStorage(String srcName, int srcMeta, ItemMultiFluidStorageCell replacement, long kilobytes, int bytesPerType, double idleDrain) { + ProxyFluidStorageCell proxyItem = getOrBuildFluidStorage(srcName); + ProxyItem.ProxyFluidStorageEntry entry = new ProxyItem.ProxyFluidStorageEntry(replacement, kilobytes, bytesPerType, idleDrain); + proxyItem.addMetaReplacement(srcMeta, entry); } /** @@ -145,33 +168,13 @@ public class ItemReplacements { private static void deprecateItemStorage(String srcName, int srcMeta, IItemDefinition replacement) { if (replacement.isEnabled()) { ProxyItem item = getOrBuildItem(srcName); - ProxyItem.ProxyReplacement storage = new ItemStorageReplacement( + ProxyItem.ProxyItemEntry storage = new ProxyItem.ItemStorageEntry( replacement.maybeItem().get(), replacement.maybeStack(1).get().getItemDamage()); item.addMetaReplacement(srcMeta, storage); } } } -class FluidStorageReplacement extends ProxyItem.ProxyReplacement { - FluidStorageReplacement(Item replacement, int replacementMeta) { - super(replacement, replacementMeta); - } - @Override - NBTTagCompound replaceNBT(NBTTagCompound compound) { - System.out.println(compound); - return compound; - } -} -class ItemStorageReplacement extends ProxyItem.ProxyReplacement { - ItemStorageReplacement(Item replacement, int replacementMeta) { - super(replacement, replacementMeta); - } - @Override - NBTTagCompound replaceNBT(NBTTagCompound compound) { - System.out.println(compound); - return compound; - } -} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java index 92e9ce7c..815cc4b7 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java @@ -2,6 +2,7 @@ package com.glodblock.github.crossmod.extracells; import com.glodblock.github.FluidCraft; import com.glodblock.github.common.item.FCBaseItem; +import com.glodblock.github.common.item.ItemMultiFluidStorageCell; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -24,7 +25,7 @@ public class ProxyItem extends FCBaseItem { /** * Maps a metadata value to a replacement. */ - protected final Map replacements; + protected final Map replacements; public ProxyItem(String ec2itemName) { this.name = ec2itemName; this.replacements = new HashMap<>(); @@ -37,10 +38,10 @@ public class ProxyItem extends FCBaseItem { } protected void addMetaReplacement(int srcMeta, Item replacement, int targetMeta) { - this.replacements.put(srcMeta, new ProxyReplacement(replacement, targetMeta)); + this.replacements.put(srcMeta, new ProxyItemEntry(replacement, targetMeta)); } - protected void addMetaReplacement(int srcMeta, ProxyReplacement replacement) { + protected void addMetaReplacement(int srcMeta, ProxyItemEntry replacement) { this.replacements.put(srcMeta, replacement); } @@ -51,7 +52,7 @@ public class ProxyItem extends FCBaseItem { @Override public void addInformation(ItemStack stack, EntityPlayer player, List info, boolean p_77624_4_) { - info.add("§7With Extra Cells gone, this is what remains..."); + info.add("§7(Extra Cells Placeholder): " + name); info.add("§7Put in your inventory to get a replacement (or disappear if incompatible)"); } @@ -63,7 +64,7 @@ public class ProxyItem extends FCBaseItem { ItemStack s = player.inventory.getStackInSlot(i); if (s == stack) { int meta = stack.getItemDamage(); - ProxyReplacement r = replacements.get(meta); + ProxyItemEntry r = replacements.get(meta); if (r == null) { player.inventory.setInventorySlotContents(i, null); } else { @@ -80,10 +81,10 @@ public class ProxyItem extends FCBaseItem { /** * Base class for a mapping from source (Item, meta) -> replacement (Item, meta). - * Optionally, override the {@link ProxyReplacement#replaceNBT(NBTTagCompound)} + * Optionally, override the {@link ProxyItemEntry#replaceNBT(NBTTagCompound)} * method for custom NBT migration. */ - protected static class ProxyReplacement { + protected static class ProxyItemEntry { protected final Item replacement; protected final int replacementMeta; @@ -93,7 +94,7 @@ public class ProxyItem extends FCBaseItem { * @param replacement Item that will replace the other. * @param replacementMeta Metadata/damage value of the replacement */ - ProxyReplacement(Item replacement, int replacementMeta) { + protected ProxyItemEntry(Item replacement, int replacementMeta) { this.replacement = replacement; this.replacementMeta = replacementMeta; } @@ -102,4 +103,34 @@ public class ProxyItem extends FCBaseItem { return compound; } } + + protected static class ItemStorageEntry extends ProxyItemEntry { + ItemStorageEntry(Item replacement, int replacementMeta) { + super(replacement, replacementMeta); + } + + @Override + NBTTagCompound replaceNBT(NBTTagCompound compound) { + System.out.println(compound); + return compound; + } + } + + protected static class ProxyFluidStorageEntry extends ProxyItemEntry { + public final long maxBytes; + public final int bytesPerType; + public final double idleDrain; + protected ProxyFluidStorageEntry(ItemMultiFluidStorageCell replacement, long kilobytes, int bytesPerType, double idleDrain) { + super(replacement, 0); + this.maxBytes = kilobytes * 1024; + this.bytesPerType = bytesPerType; + this.idleDrain = idleDrain; + } + + @Override + NBTTagCompound replaceNBT(NBTTagCompound compound) { + System.out.println(compound); + return compound; + } + } } diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPart.java b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPart.java index 993445c0..d4d83ff4 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPart.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPart.java @@ -179,7 +179,7 @@ public class ProxyPart implements IPart, IPartDeprecated { if (item.get() == null) { throw new NullPointerException("Umm, this wasn't supposed to happen. The ref item " + name + " was GC'd."); } - ProxyItem.ProxyReplacement r = item.get().replacements.get(meta); + ProxyItem.ProxyItemEntry r = item.get().replacements.get(meta); def.setInteger("id", Item.getIdFromItem(r.replacement)); def.setShort("Damage", (short) r.replacementMeta); return def; diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPartItem.java b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPartItem.java index 8e5db34a..56b5113c 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPartItem.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPartItem.java @@ -44,7 +44,7 @@ public class ProxyPartItem extends ProxyItem implements IPartItem { /** * Item replacement entry for ItemParts. All targets replace into 0. */ -class PartReplacement extends ProxyItem.ProxyReplacement { +class PartReplacement extends ProxyItem.ProxyItemEntry { Function proxyPart; From 3e2a0482e92c771d103ea2f968258aa50856245f Mon Sep 17 00:00:00 2001 From: Firenoo <49818773+firenoo@users.noreply.github.com> Date: Sat, 22 Apr 2023 19:44:24 -0700 Subject: [PATCH 07/10] Fixed some storage cell conversion issues The placeholders did not transfer NBT data properly --- .../common/storage/FluidCellInventory.java | 12 +++--- .../github/crossmod/extracells/ProxyItem.java | 8 ++-- .../storage/ProxyFluidCellInventory.java | 40 ++++++++++++++----- 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java index 79c538ca..bcc81542 100644 --- a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java +++ b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java @@ -29,18 +29,18 @@ import com.glodblock.github.common.item.ItemCreativeFluidStorageCell; public class FluidCellInventory implements IFluidCellInventory { - private static final String FLUID_TYPE_TAG = "ft"; - private static final String FLUID_COUNT_TAG = "fc"; - private static final String FLUID_SLOT = "#"; - private static final String FLUID_SLOT_COUNT = "@"; + protected static final String FLUID_TYPE_TAG = "ft"; + protected static final String FLUID_COUNT_TAG = "fc"; + protected static final String FLUID_SLOT = "#"; + protected static final String FLUID_SLOT_COUNT = "@"; protected IStorageFluidCell cellType; protected static String[] fluidSlots; protected static String[] fluidSlotCount; protected final ItemStack cellItem; private final ISaveProvider container; private final int MAX_TYPE = 63; - private long storedFluidCount; - private short storedFluids; + protected long storedFluidCount; + protected short storedFluids; protected IItemList cellFluids; protected final NBTTagCompound tagCompound; public static final int singleByteAmount = 256 * 8; diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java index 815cc4b7..19c53631 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java @@ -69,8 +69,8 @@ public class ProxyItem extends FCBaseItem { player.inventory.setInventorySlotContents(i, null); } else { ItemStack replaceStack = new ItemStack(r.replacement, stack.stackSize, r.replacementMeta); - if (replaceStack.hasTagCompound()) { - replaceStack.setTagCompound(r.replaceNBT(replaceStack.getTagCompound())); + if (stack.hasTagCompound()) { + replaceStack.setTagCompound(r.replaceNBT(stack.getTagCompound())); } player.inventory.setInventorySlotContents(i, replaceStack); } @@ -129,7 +129,9 @@ public class ProxyItem extends FCBaseItem { @Override NBTTagCompound replaceNBT(NBTTagCompound compound) { - System.out.println(compound); + if (compound != null && compound.hasKey("ecc")) { + compound.removeTag("ecc"); + } return compound; } } diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInventory.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInventory.java index 5df4a0cc..c95be55a 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInventory.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInventory.java @@ -1,24 +1,18 @@ package com.glodblock.github.crossmod.extracells.storage; import appeng.api.AEApi; -import appeng.api.config.Actionable; import appeng.api.exceptions.AppEngException; -import appeng.api.networking.security.BaseActionSource; import appeng.api.storage.ISaveProvider; -import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEFluidStack; -import appeng.api.storage.data.IItemList; import appeng.util.item.AEFluidStack; import com.glodblock.github.common.storage.FluidCellInventory; -import com.glodblock.github.common.storage.IFluidCellInventory; -import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidStack; -import java.util.List; - public class ProxyFluidCellInventory extends FluidCellInventory { - private static final String EC_CONVERTED = "ec_converted"; + private static final String EC_CONVERTED = "ecc"; public ProxyFluidCellInventory(ItemStack o, ISaveProvider container) throws AppEngException { super(o, container); } @@ -35,6 +29,7 @@ public class ProxyFluidCellInventory extends FluidCellInventory { // Load using Extra Cell's NBT format for (int i = 0; i < this.cellType.getTotalTypes(this.cellItem); i++) { FluidStack fs = FluidStack.loadFluidStackFromNBT(tagCompound.getCompoundTag("Fluid#" + i)); + tagCompound.removeTag("Fluid#" + i); final AEFluidStack aet = AEFluidStack.create(fs); if (aet != null) { if (aet.getStackSize() > 0) { @@ -43,6 +38,33 @@ public class ProxyFluidCellInventory extends FluidCellInventory { } } this.tagCompound.setBoolean(EC_CONVERTED, true); + // Convert to the new format + long fluidCount = 0; + int x = 0; + + for (final IAEFluidStack v : this.cellFluids) { + fluidCount += v.getStackSize(); + final NBTBase c = this.tagCompound.getTag(fluidSlots[x]); + if (c instanceof NBTTagCompound) { + v.writeToNBT((NBTTagCompound) c); + } else { + final NBTTagCompound g = new NBTTagCompound(); + v.writeToNBT(g); + this.tagCompound.setTag(fluidSlots[x], g); + } + this.tagCompound.setLong(fluidSlotCount[x], v.getStackSize()); + x++; + } + this.storedFluids = (short) this.cellFluids.size(); + + if (!this.cellFluids.isEmpty()) { + this.tagCompound.setShort(FLUID_TYPE_TAG, this.storedFluids); + } + + this.storedFluidCount = fluidCount; + if (fluidCount > 0) { + this.tagCompound.setLong(FLUID_COUNT_TAG, fluidCount); + } } else { super.loadCellFluids(); } From 3245de6ba107f8f462ff0ceb16296c1161e6d4f8 Mon Sep 17 00:00:00 2001 From: Firenoo <49818773+firenoo@users.noreply.github.com> Date: Sat, 22 Apr 2023 22:01:46 -0700 Subject: [PATCH 08/10] Add handlers for deprecated item cells Now the placeholder should work automatically in a drive. The void cell is still a WIP. --- .../common/storage/FluidCellInventory.java | 1 - .../crossmod/extracells/ItemReplacements.java | 82 +++++++-- .../github/crossmod/extracells/ProxyItem.java | 24 ++- .../storage/ProxyExtremeStorageCell.java | 14 ++ .../storage/ProxyFluidCellInvHandler.java | 11 -- .../storage/ProxyFluidStorageCell.java | 14 +- .../storage/ProxyItemCellHandler.java | 12 ++ .../storage/ProxyItemStorageCell.java | 159 ++++++++++++++++++ 8 files changed, 268 insertions(+), 49 deletions(-) create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyExtremeStorageCell.java delete mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInvHandler.java create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemCellHandler.java create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemStorageCell.java diff --git a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java index bcc81542..1b1beb98 100644 --- a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java +++ b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java @@ -3,7 +3,6 @@ package com.glodblock.github.common.storage; import java.util.ArrayList; import java.util.List; -import com.glodblock.github.crossmod.extracells.storage.ProxyFluidCellInvHandler; import com.glodblock.github.crossmod.extracells.storage.ProxyFluidCellInventory; import com.glodblock.github.crossmod.extracells.storage.ProxyFluidStorageCell; import net.minecraft.inventory.IInventory; diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java b/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java index acb8d209..0c1c37f9 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java @@ -4,7 +4,10 @@ import appeng.api.AEApi; import appeng.api.definitions.IItemDefinition; import com.glodblock.github.common.item.ItemMultiFluidStorageCell; import com.glodblock.github.crossmod.extracells.parts.*; +import com.glodblock.github.crossmod.extracells.storage.ProxyExtremeStorageCell; import com.glodblock.github.crossmod.extracells.storage.ProxyFluidStorageCell; +import com.glodblock.github.crossmod.extracells.storage.ProxyItemCellHandler; +import com.glodblock.github.crossmod.extracells.storage.ProxyItemStorageCell; import com.glodblock.github.loader.ItemAndBlockHolder; import net.minecraft.item.Item; @@ -46,17 +49,17 @@ public class ItemReplacements { deprecateFluidStorage("storage.fluid", 7, ItemAndBlockHolder.CELL16384KM, 16384, 131072, 4.0); // Thanks, AEApi. - deprecateItemStorage("storage.physical", 0, AEApi.instance().definitions().items().cell256k()); - deprecateItemStorage("storage.physical", 1, AEApi.instance().definitions().items().cell1024k()); - deprecateItemStorage("storage.physical", 2, AEApi.instance().definitions().items().cell4096k()); - deprecateItemStorage("storage.physical", 3, AEApi.instance().definitions().items().cell16384k()); - deprecateItemStorage("storage.physical", 4, AEApi.instance().definitions().items().cellContainer()); - deprecateItemStorage("storage.physical.advanced.singularity", 0, - AEApi.instance().definitions().items().cellSingularity()); - deprecateItemStorage("storage.physical.advanced.quantum", 0, - AEApi.instance().definitions().items().cellQuantum()); - deprecateItemStorage("storage.physical.void", 0, - AEApi.instance().definitions().items().cellVoid()); + AEApi.instance().registries().cell().addCellHandler(new ProxyItemCellHandler()); + deprecateItemStorage(0, AEApi.instance().definitions().items().cell256k(), 256, 2048, 2.5); + deprecateItemStorage(1, AEApi.instance().definitions().items().cell1024k(), 1024, 8192, 3.0); + deprecateItemStorage(2, AEApi.instance().definitions().items().cell4096k(), 4096, 32768, 3.5); + deprecateItemStorage(3, AEApi.instance().definitions().items().cell16384k(), 16384, 131072, 4.0); + deprecateItemStorage(4, AEApi.instance().definitions().items().cellContainer(), 65536, 8, 2.0, 1); + deprecateExtremeStorage("storage.physical.advanced.quantum", 0, + AEApi.instance().definitions().items().cellQuantum(), Integer.MAX_VALUE / 16, 4096, 1000.0); + deprecateExtremeStorage("storage.physical.advanced.singularity", 0, + AEApi.instance().definitions().items().cellSingularity(), Long.MAX_VALUE / 16, 4096, 15000.0); + deprecateItem("storage.physical.void", 0, AEApi.instance().definitions().items().cellVoid()); deprecateItem("pattern.fluid", ItemAndBlockHolder.PATTERN); deprecateItem("terminal.fluid.wireless", ItemAndBlockHolder.WIRELESS_FLUID_TERM); /* Storage casings */ @@ -114,6 +117,28 @@ public class ItemReplacements { return proxy; } + private static ProxyItemStorageCell getOrBuildItemStorage() { + final String fullName = "extracells:storage.physical"; + ProxyItemStorageCell proxy = (ProxyItemStorageCell) registry.get(fullName); + if (proxy == null) { + proxy = new ProxyItemStorageCell("storage.physical"); + registry.put(fullName, proxy); + proxy.register(); + } + return proxy; + } + + private static ProxyExtremeStorageCell getOrBuildItemStorage(String srcName) { + final String fullName = "extracells:" + srcName; + ProxyExtremeStorageCell proxy = (ProxyExtremeStorageCell) registry.get(fullName); + if (proxy == null) { + proxy = new ProxyExtremeStorageCell(srcName); + registry.put(fullName, proxy); + proxy.register(); + } + return proxy; + } + /** * Deprecate a simple item. * @param srcName name of the to-be-replaced item without the mod id prefix @@ -157,7 +182,7 @@ public class ItemReplacements { */ private static void deprecateFluidStorage(String srcName, int srcMeta, ItemMultiFluidStorageCell replacement, long kilobytes, int bytesPerType, double idleDrain) { ProxyFluidStorageCell proxyItem = getOrBuildFluidStorage(srcName); - ProxyItem.ProxyFluidStorageEntry entry = new ProxyItem.ProxyFluidStorageEntry(replacement, kilobytes, bytesPerType, idleDrain); + ProxyItem.ProxyStorageEntry entry = new ProxyItem.ProxyStorageEntry(replacement, kilobytes, bytesPerType, idleDrain); proxyItem.addMetaReplacement(srcMeta, entry); } @@ -165,11 +190,36 @@ public class ItemReplacements { * Deprecate a storage item. This goes through AEAPI, as AE2FC doesn't have any item cells. * If the item is disabled in AEAPI, the replacement will not be registered! */ - private static void deprecateItemStorage(String srcName, int srcMeta, IItemDefinition replacement) { + private static void deprecateItemStorage(int srcMeta, IItemDefinition replacement, long kilobytes, int bytesPerType, double idleDrain) { if (replacement.isEnabled()) { - ProxyItem item = getOrBuildItem(srcName); - ProxyItem.ProxyItemEntry storage = new ProxyItem.ItemStorageEntry( - replacement.maybeItem().get(), replacement.maybeStack(1).get().getItemDamage()); + ProxyItemStorageCell item = getOrBuildItemStorage(); + int meta = replacement.maybeStack(1).get().getItemDamage(); + ProxyItem.ProxyItemEntry storage = new ProxyItem.ProxyStorageEntry( + replacement.maybeItem().get(), kilobytes, bytesPerType, idleDrain); + item.addMetaReplacement(srcMeta, storage); + } + } + + /** + * Deprecate a storage item. This goes through AEAPI, as AE2FC doesn't have any item cells. + * If the item is disabled in AEAPI, the replacement will not be registered! + */ + private static void deprecateItemStorage(int srcMeta, IItemDefinition replacement, long kilobytes, int bytesPerType, double idleDrain, int types) { + if (replacement.isEnabled()) { + ProxyItemStorageCell item = getOrBuildItemStorage(); + int meta = replacement.maybeStack(1).get().getItemDamage(); + ProxyItem.ProxyItemEntry storage = new ProxyItem.ProxyStorageEntry( + replacement.maybeItem().get(), kilobytes, bytesPerType, idleDrain, types); + item.addMetaReplacement(srcMeta, storage); + } + } + + private static void deprecateExtremeStorage(String srcName, int srcMeta, IItemDefinition replacement, long bytes, int bytesPerType, double idleDrain) { + if (replacement.isEnabled()) { + ProxyExtremeStorageCell item = getOrBuildItemStorage(srcName); + int meta = replacement.maybeStack(1).get().getItemDamage(); + ProxyItem.ProxyItemEntry storage = new ProxyItem.ProxyStorageEntry( + replacement.maybeItem().get(), bytes / 1024, bytesPerType, idleDrain); item.addMetaReplacement(srcMeta, storage); } } diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java index 19c53631..3cc4538e 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java @@ -99,34 +99,32 @@ public class ProxyItem extends FCBaseItem { this.replacementMeta = replacementMeta; } - NBTTagCompound replaceNBT(NBTTagCompound compound) { - return compound; - } - } - - protected static class ItemStorageEntry extends ProxyItemEntry { - ItemStorageEntry(Item replacement, int replacementMeta) { - super(replacement, replacementMeta); - } - - @Override NBTTagCompound replaceNBT(NBTTagCompound compound) { System.out.println(compound); return compound; } } - protected static class ProxyFluidStorageEntry extends ProxyItemEntry { + protected static class ProxyStorageEntry extends ProxyItemEntry { public final long maxBytes; public final int bytesPerType; public final double idleDrain; - protected ProxyFluidStorageEntry(ItemMultiFluidStorageCell replacement, long kilobytes, int bytesPerType, double idleDrain) { + public final int types; + protected ProxyStorageEntry(Item replacement, long kilobytes, int bytesPerType, double idleDrain) { super(replacement, 0); this.maxBytes = kilobytes * 1024; this.bytesPerType = bytesPerType; this.idleDrain = idleDrain; + this.types = 63; } + protected ProxyStorageEntry(Item replacement, long kilobytes, int bytesPerType, double idleDrain, int types) { + super(replacement, 0); + this.maxBytes = kilobytes * 1024; + this.bytesPerType = bytesPerType; + this.idleDrain = idleDrain; + this.types = types; + } @Override NBTTagCompound replaceNBT(NBTTagCompound compound) { if (compound != null && compound.hasKey("ecc")) { diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyExtremeStorageCell.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyExtremeStorageCell.java new file mode 100644 index 00000000..14ed2496 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyExtremeStorageCell.java @@ -0,0 +1,14 @@ +package com.glodblock.github.crossmod.extracells.storage; + +import net.minecraft.item.ItemStack; + +public class ProxyExtremeStorageCell extends ProxyItemStorageCell { + public ProxyExtremeStorageCell(String ec2itemName) { + super(ec2itemName); + } + + @Override + public int getTotalTypes(ItemStack cellItem) { + return 1; + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInvHandler.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInvHandler.java deleted file mode 100644 index 235fd42c..00000000 --- a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInvHandler.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.glodblock.github.crossmod.extracells.storage; - -import com.glodblock.github.common.storage.*; - - -public class ProxyFluidCellInvHandler extends FluidCellInventoryHandler { - - public ProxyFluidCellInvHandler(FluidCellInventory inv) { - super(inv); - } -} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidStorageCell.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidStorageCell.java index efca5ef6..9c1839cf 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidStorageCell.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidStorageCell.java @@ -6,13 +6,11 @@ import appeng.items.contents.CellConfig; import appeng.items.contents.CellUpgrades; import appeng.util.Platform; import com.glodblock.github.common.Config; -import com.glodblock.github.common.item.ItemMultiFluidStorageCell; import com.glodblock.github.common.storage.IStorageFluidCell; import com.glodblock.github.crossmod.extracells.ProxyItem; import com.glodblock.github.util.ModAndClassUtil; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; public class ProxyFluidStorageCell extends ProxyItem implements IStorageFluidCell { @@ -25,8 +23,8 @@ public class ProxyFluidStorageCell extends ProxyItem implements IStorageFluidCel int meta = cellItem.getItemDamage(); if (replacements.containsKey(meta)) { ProxyItemEntry entry = replacements.get(meta); - if (entry instanceof ProxyFluidStorageEntry) { - return ((ProxyFluidStorageEntry) entry).maxBytes; + if (entry instanceof ProxyStorageEntry) { + return ((ProxyStorageEntry) entry).maxBytes; } } return 0; @@ -37,8 +35,8 @@ public class ProxyFluidStorageCell extends ProxyItem implements IStorageFluidCel int meta = cellItem.getItemDamage(); if (replacements.containsKey(meta)) { ProxyItemEntry entry = replacements.get(meta); - if (entry instanceof ProxyFluidStorageEntry) { - return ((ProxyFluidStorageEntry) entry).bytesPerType; + if (entry instanceof ProxyStorageEntry) { + return ((ProxyStorageEntry) entry).bytesPerType; } } return 0; @@ -67,8 +65,8 @@ public class ProxyFluidStorageCell extends ProxyItem implements IStorageFluidCel int meta = is.getItemDamage(); if (replacements.containsKey(meta)) { ProxyItemEntry entry = replacements.get(meta); - if (entry instanceof ProxyFluidStorageEntry) { - return ((ProxyFluidStorageEntry) entry).idleDrain; + if (entry instanceof ProxyStorageEntry) { + return ((ProxyStorageEntry) entry).idleDrain; } } return 0; diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemCellHandler.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemCellHandler.java new file mode 100644 index 00000000..2644ca1e --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemCellHandler.java @@ -0,0 +1,12 @@ +package com.glodblock.github.crossmod.extracells.storage; + +import appeng.core.features.registries.entries.BasicCellHandler; +import net.minecraft.item.ItemStack; + +public class ProxyItemCellHandler extends BasicCellHandler { + + @Override + public boolean isCell(ItemStack is) { + return is != null && is.getItem() != null && is.getItem() instanceof ProxyItemStorageCell; + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemStorageCell.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemStorageCell.java new file mode 100644 index 00000000..f947d5ce --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemStorageCell.java @@ -0,0 +1,159 @@ +package com.glodblock.github.crossmod.extracells.storage; + +import appeng.api.config.FuzzyMode; +import appeng.api.implementations.items.IStorageCell; +import appeng.api.storage.data.IAEItemStack; +import appeng.items.contents.CellConfig; +import appeng.items.contents.CellUpgrades; +import appeng.util.Platform; +import com.glodblock.github.crossmod.extracells.ProxyItem; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + +import javax.annotation.Nullable; + +/** + * Proxy Item Storage. 256K, 1024K, etc. -> AE2's version. + * For now its just mirroring AE2's version, will need to transition to something better. + */ +public class ProxyItemStorageCell extends ProxyItem implements IStorageCell { + + public ProxyItemStorageCell(String ec2itemName) { + super(ec2itemName); + } + + @Override + public int getBytes(ItemStack cellItem) { + if (cellItem == null) { + return 0; + } + int meta = cellItem.getItemDamage(); + if (replacements.containsKey(meta)) { + ProxyItemEntry entry = replacements.get(meta); + if (entry instanceof ProxyStorageEntry) { + return (int) ((ProxyStorageEntry) entry).maxBytes; + } + } + return 0; + } + + @Override + public int BytePerType(ItemStack cellItem) { + if (cellItem == null) { + return 0; + } + int meta = cellItem.getItemDamage(); + if (replacements.containsKey(meta)) { + ProxyItemEntry entry = replacements.get(meta); + if (entry instanceof ProxyStorageEntry) { + return ((ProxyStorageEntry) entry).bytesPerType; + } + } + return 0; + } + + @Override + public int getBytesPerType(ItemStack cellItem) { + if (cellItem == null) { + return 0; + } + int meta = cellItem.getItemDamage(); + if (replacements.containsKey(meta)) { + ProxyItemEntry entry = replacements.get(meta); + if (entry instanceof ProxyStorageEntry) { + return ((ProxyStorageEntry) entry).bytesPerType; + } + } + return 0; + } + + @Override + public long getBytesLong(ItemStack cellItem) { + if (cellItem == null) { + return 0; + } + int meta = cellItem.getItemDamage(); + if (replacements.containsKey(meta)) { + ProxyItemEntry entry = replacements.get(meta); + if (entry instanceof ProxyStorageEntry) { + return ((ProxyStorageEntry) entry).maxBytes; + } + } + return 0; + } + + @Override + public int getTotalTypes(ItemStack cellItem) { + return 63; + } + + @Override + public boolean isBlackListed(ItemStack cellItem, IAEItemStack requestedAddition) { + return false; + } + + @Override + public boolean storableInStorageCell() { + return false; + } + + @Override + public boolean isStorageCell(ItemStack i) { + return true; + } + + @Override + public double getIdleDrain(@Nullable ItemStack cellItem) { + if (cellItem == null) { + return 0.0; + } + int meta = cellItem.getItemDamage(); + if (replacements.containsKey(meta)) { + ProxyItemEntry entry = replacements.get(meta); + if (entry instanceof ProxyStorageEntry) { + return ((ProxyStorageEntry) entry).bytesPerType; + } + } + return 0; + } + + @Override + public double getIdleDrain() { + return 0; + } + + @Override + public boolean isEditable(ItemStack is) { + return true; + } + + @Override + public IInventory getUpgradesInventory(ItemStack is) { + return new CellUpgrades(is, 2); + } + + @Override + public IInventory getConfigInventory(ItemStack is) { + return new CellConfig(is); + } + + @Override + public FuzzyMode getFuzzyMode(ItemStack is) { + final String fz = Platform.openNbtData(is).getString("FuzzyMode"); + try { + return FuzzyMode.valueOf(fz); + } catch (final Throwable t) { + return FuzzyMode.IGNORE_ALL; + } + } + + @Override + public void setFuzzyMode(ItemStack is, FuzzyMode fzMode) { + Platform.openNbtData(is).setString("FuzzyMode", fzMode.name()); + } + + @Override + public String getOreFilter(ItemStack is) { + return Platform.openNbtData(is).getString("OreFilter"); + } +} From b7b68515f120328b98b32252c6c8eb6052e4cb1e Mon Sep 17 00:00:00 2001 From: Firenoo <49818773+firenoo@users.noreply.github.com> Date: Sun, 23 Apr 2023 00:11:25 -0700 Subject: [PATCH 09/10] Add more tooltip help and cell handler for void cell --- .../crossmod/extracells/ItemReplacements.java | 12 +++--- .../github/crossmod/extracells/ProxyItem.java | 16 +++++-- .../storage/ProxyVoidCellHandler.java | 11 +++++ .../storage/ProxyVoidStorageCell.java | 43 +++++++++++++++++++ 4 files changed, 74 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidCellHandler.java create mode 100644 src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidStorageCell.java diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java b/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java index 0c1c37f9..8f645f4c 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java @@ -4,11 +4,9 @@ import appeng.api.AEApi; import appeng.api.definitions.IItemDefinition; import com.glodblock.github.common.item.ItemMultiFluidStorageCell; import com.glodblock.github.crossmod.extracells.parts.*; -import com.glodblock.github.crossmod.extracells.storage.ProxyExtremeStorageCell; -import com.glodblock.github.crossmod.extracells.storage.ProxyFluidStorageCell; -import com.glodblock.github.crossmod.extracells.storage.ProxyItemCellHandler; -import com.glodblock.github.crossmod.extracells.storage.ProxyItemStorageCell; +import com.glodblock.github.crossmod.extracells.storage.*; import com.glodblock.github.loader.ItemAndBlockHolder; +import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.item.Item; import java.util.HashMap; @@ -50,6 +48,7 @@ public class ItemReplacements { 16384, 131072, 4.0); // Thanks, AEApi. AEApi.instance().registries().cell().addCellHandler(new ProxyItemCellHandler()); + AEApi.instance().registries().cell().addCellHandler(new ProxyVoidCellHandler()); deprecateItemStorage(0, AEApi.instance().definitions().items().cell256k(), 256, 2048, 2.5); deprecateItemStorage(1, AEApi.instance().definitions().items().cell1024k(), 1024, 8192, 3.0); deprecateItemStorage(2, AEApi.instance().definitions().items().cell4096k(), 4096, 32768, 3.5); @@ -59,7 +58,10 @@ public class ItemReplacements { AEApi.instance().definitions().items().cellQuantum(), Integer.MAX_VALUE / 16, 4096, 1000.0); deprecateExtremeStorage("storage.physical.advanced.singularity", 0, AEApi.instance().definitions().items().cellSingularity(), Long.MAX_VALUE / 16, 4096, 15000.0); - deprecateItem("storage.physical.void", 0, AEApi.instance().definitions().items().cellVoid()); + //Deprecate void cell manually + ProxyVoidStorageCell voidCell = new ProxyVoidStorageCell(); + GameRegistry.registerItem(voidCell, "ec2placeholder.storage.physical.void"); + registry.put("extracells:storage.physical.void", voidCell); deprecateItem("pattern.fluid", ItemAndBlockHolder.PATTERN); deprecateItem("terminal.fluid.wireless", ItemAndBlockHolder.WIRELESS_FLUID_TERM); /* Storage casings */ diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java index 3cc4538e..e3b0b6f4 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java @@ -2,13 +2,14 @@ package com.glodblock.github.crossmod.extracells; import com.glodblock.github.FluidCraft; import com.glodblock.github.common.item.FCBaseItem; -import com.glodblock.github.common.item.ItemMultiFluidStorageCell; import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.client.resources.I18n; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import java.util.HashMap; @@ -29,6 +30,7 @@ public class ProxyItem extends FCBaseItem { public ProxyItem(String ec2itemName) { this.name = ec2itemName; this.replacements = new HashMap<>(); + setUnlocalizedName("ec2placeholder." + name); } @Override @@ -52,8 +54,15 @@ public class ProxyItem extends FCBaseItem { @Override public void addInformation(ItemStack stack, EntityPlayer player, List info, boolean p_77624_4_) { - info.add("§7(Extra Cells Placeholder): " + name); - info.add("§7Put in your inventory to get a replacement (or disappear if incompatible)"); + int meta = stack.getItemDamage(); + ProxyItemEntry itemRepl = replacements.get(meta); + if (itemRepl != null) { + info.add(EnumChatFormatting.RED + "Extra Cells Placeholder for:"); + info.add(EnumChatFormatting.AQUA + itemRepl.replacement.getUnlocalizedName()); + info.add(EnumChatFormatting.GOLD + "Put in your inventory to get a replacement."); + info.add(EnumChatFormatting.GOLD + "It will disappear if no replacement was found."); + info.add(EnumChatFormatting.RED + "Report missing conversions on the Github."); + } } @Override @@ -74,6 +83,7 @@ public class ProxyItem extends FCBaseItem { } player.inventory.setInventorySlotContents(i, replaceStack); } + break; } } } diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidCellHandler.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidCellHandler.java new file mode 100644 index 00000000..24952af2 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidCellHandler.java @@ -0,0 +1,11 @@ +package com.glodblock.github.crossmod.extracells.storage; + +import appeng.core.features.registries.entries.VoidCellHandler; +import net.minecraft.item.ItemStack; + +public class ProxyVoidCellHandler extends VoidCellHandler { + @Override + public boolean isCell(ItemStack is) { + return is != null && is.getItem() != null && is.getItem() instanceof ProxyVoidStorageCell; + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidStorageCell.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidStorageCell.java new file mode 100644 index 00000000..478c1bd4 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidStorageCell.java @@ -0,0 +1,43 @@ +package com.glodblock.github.crossmod.extracells.storage; + +import appeng.api.AEApi; +import appeng.core.localization.GuiText; +import appeng.items.storage.ItemVoidStorageCell; +import com.glodblock.github.crossmod.extracells.ProxyItem; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import java.util.List; + +public class ProxyVoidStorageCell extends ItemVoidStorageCell { + + private final String name = AEApi.instance().definitions().items().cellVoid().maybeStack(1).get().getUnlocalizedName(); + @Override + public void addCheckedInformation(ItemStack stack, EntityPlayer player, List info, boolean displayMoreInfo) { + info.add(EnumChatFormatting.RED + "Extra Cells Placeholder for:"); + info.add(EnumChatFormatting.AQUA + name); + info.add(EnumChatFormatting.GOLD + "Put in your inventory to get a replacement."); + info.add(EnumChatFormatting.GOLD + "It will disappear if no replacement was found."); + info.add(EnumChatFormatting.RED + "Report missing conversions on the Github."); + } + + @Override + public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int p_77663_4_, boolean p_77663_5_) { + if (!worldIn.isRemote && entityIn instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) entityIn; + for (int i = 0; i < player.inventory.getSizeInventory(); ++i) { + ItemStack s = player.inventory.getStackInSlot(i); + if (s == stack) { + ItemStack replaceStack = AEApi.instance().definitions().items().cellVoid().maybeStack(1).get(); + player.inventory.setInventorySlotContents(i, replaceStack); + break; + } + } + } + + } +} From 50c4015d54540df2388fde72eb71543a5eca31cd Mon Sep 17 00:00:00 2001 From: Firenoo <49818773+firenoo@users.noreply.github.com> Date: Sun, 23 Apr 2023 00:12:35 -0700 Subject: [PATCH 10/10] apply spotless too lazy to rebase --- .../java/com/glodblock/github/FluidCraft.java | 2 +- .../com/glodblock/github/common/Config.java | 8 +- .../common/storage/FluidCellInventory.java | 4 +- .../crossmod/extracells/EC2Replacer.java | 14 +- .../crossmod/extracells/ItemReplacements.java | 124 +++++++++++------- .../github/crossmod/extracells/ProxyItem.java | 26 ++-- .../github/crossmod/extracells/ProxyPart.java | 19 +-- .../crossmod/extracells/ProxyPartItem.java | 20 +-- .../extracells/parts/ProxyFluidBusIO.java | 18 ++- .../extracells/parts/ProxyFluidInterface.java | 6 +- .../extracells/parts/ProxyFluidStorage.java | 16 ++- .../extracells/parts/ProxyLevelEmitter.java | 9 +- .../extracells/parts/ProxyStorageMonitor.java | 6 +- .../storage/ProxyExtremeStorageCell.java | 1 + .../storage/ProxyFluidCellInventory.java | 12 +- .../storage/ProxyFluidStorageCell.java | 6 +- .../storage/ProxyItemCellHandler.java | 3 +- .../storage/ProxyItemStorageCell.java | 14 +- .../storage/ProxyVoidCellHandler.java | 4 +- .../storage/ProxyVoidStorageCell.java | 17 +-- .../glodblock/github/proxy/CommonProxy.java | 2 +- 21 files changed, 195 insertions(+), 136 deletions(-) diff --git a/src/main/java/com/glodblock/github/FluidCraft.java b/src/main/java/com/glodblock/github/FluidCraft.java index b02d73b1..747d424c 100644 --- a/src/main/java/com/glodblock/github/FluidCraft.java +++ b/src/main/java/com/glodblock/github/FluidCraft.java @@ -1,12 +1,12 @@ package com.glodblock.github; -import com.glodblock.github.crossmod.extracells.EC2Replacer; import net.minecraft.util.ResourceLocation; import appeng.api.AEApi; import com.glodblock.github.common.Config; import com.glodblock.github.common.storage.FluidCellHandler; +import com.glodblock.github.crossmod.extracells.EC2Replacer; import com.glodblock.github.crossmod.opencomputers.OCDriverInit; import com.glodblock.github.crossmod.waila.WailaInit; import com.glodblock.github.inventory.InventoryHandler; diff --git a/src/main/java/com/glodblock/github/common/Config.java b/src/main/java/com/glodblock/github/common/Config.java index 2d1fd2cd..0408952f 100644 --- a/src/main/java/com/glodblock/github/common/Config.java +++ b/src/main/java/com/glodblock/github/common/Config.java @@ -20,6 +20,7 @@ public class Config { public static int packetSize; public static int packetRate; public static boolean replaceEC2; + public static void run() { loadCategory(); loadProperty(); @@ -60,8 +61,11 @@ public class Config { .get("Fluid Craft for AE2", "packetRate", 50, "Period at which packets are dispatched, in ms.") .getInt(); if (packetRate <= 0) packetRate = 50; - replaceEC2 = Config.getBoolean("Fluid Craft for AE2", "replaceEC2", true, - "Set true to handle missing item mappings from EC2. Note to work properly, you must have all relevant parts."); + replaceEC2 = Config.getBoolean( + "Fluid Craft for AE2", + "replaceEC2", + true, + "Set true to handle missing item mappings from EC2. Note to work properly, you must have all relevant parts."); if (Config.hasChanged()) Config.save(); } diff --git a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java index 1b1beb98..52d0768f 100644 --- a/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java +++ b/src/main/java/com/glodblock/github/common/storage/FluidCellInventory.java @@ -3,8 +3,6 @@ package com.glodblock.github.common.storage; import java.util.ArrayList; import java.util.List; -import com.glodblock.github.crossmod.extracells.storage.ProxyFluidCellInventory; -import com.glodblock.github.crossmod.extracells.storage.ProxyFluidStorageCell; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -25,6 +23,8 @@ import appeng.util.Platform; import appeng.util.item.AEFluidStack; import com.glodblock.github.common.item.ItemCreativeFluidStorageCell; +import com.glodblock.github.crossmod.extracells.storage.ProxyFluidCellInventory; +import com.glodblock.github.crossmod.extracells.storage.ProxyFluidStorageCell; public class FluidCellInventory implements IFluidCellInventory { diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java b/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java index afa62f2c..97d768de 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/EC2Replacer.java @@ -1,17 +1,17 @@ package com.glodblock.github.crossmod.extracells; -import cpw.mods.fml.common.event.FMLMissingMappingsEvent; -import cpw.mods.fml.common.registry.GameRegistry; -import net.minecraft.item.Item; - import java.util.List; +import net.minecraft.item.Item; + +import cpw.mods.fml.common.event.FMLMissingMappingsEvent; +import cpw.mods.fml.common.registry.GameRegistry; + public class EC2Replacer { - /** - * Should be called if and only if replaceEC2 config is true and EC2 not present. Registers proxy - * items for the entire EC2 mod. After running this once, you should set replaceEC2 back to false. + * Should be called if and only if replaceEC2 config is true and EC2 not present. Registers proxy items for the + * entire EC2 mod. After running this once, you should set replaceEC2 back to false. */ public static void initReplacer() { ItemReplacements.init(); diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java b/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java index 8f645f4c..c935c58e 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ItemReplacements.java @@ -1,17 +1,19 @@ package com.glodblock.github.crossmod.extracells; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +import net.minecraft.item.Item; + import appeng.api.AEApi; import appeng.api.definitions.IItemDefinition; + import com.glodblock.github.common.item.ItemMultiFluidStorageCell; import com.glodblock.github.crossmod.extracells.parts.*; import com.glodblock.github.crossmod.extracells.storage.*; import com.glodblock.github.loader.ItemAndBlockHolder; import cpw.mods.fml.common.registry.GameRegistry; -import net.minecraft.item.Item; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; /** * Shell class to organize proxy replacements and hide the ugliness @@ -26,26 +28,19 @@ public class ItemReplacements { ItemReplacements.proxyItems(); ItemReplacements.proxyPartItems(); } + /** * Register proxy items (non-parts) */ static void proxyItems() { - deprecateFluidStorage("storage.fluid", 0, ItemAndBlockHolder.CELL1KM, - 1, 8, 0.5); - deprecateFluidStorage("storage.fluid", 1, ItemAndBlockHolder.CELL4KM, - 4, 32, 1.0); - deprecateFluidStorage("storage.fluid", 2, ItemAndBlockHolder.CELL16KM, - 16, 128, 1.5); - deprecateFluidStorage("storage.fluid", 3, ItemAndBlockHolder.CELL64KM, - 64, 512, 2.0); - deprecateFluidStorage("storage.fluid", 4, ItemAndBlockHolder.CELL256KM, - 256, 2048, 2.5); - deprecateFluidStorage("storage.fluid", 5, ItemAndBlockHolder.CELL1024KM, - 1024, 8192, 3.0); - deprecateFluidStorage("storage.fluid", 6, ItemAndBlockHolder.CELL4096KM, - 4096, 32768, 3.5); - deprecateFluidStorage("storage.fluid", 7, ItemAndBlockHolder.CELL16384KM, - 16384, 131072, 4.0); + deprecateFluidStorage("storage.fluid", 0, ItemAndBlockHolder.CELL1KM, 1, 8, 0.5); + deprecateFluidStorage("storage.fluid", 1, ItemAndBlockHolder.CELL4KM, 4, 32, 1.0); + deprecateFluidStorage("storage.fluid", 2, ItemAndBlockHolder.CELL16KM, 16, 128, 1.5); + deprecateFluidStorage("storage.fluid", 3, ItemAndBlockHolder.CELL64KM, 64, 512, 2.0); + deprecateFluidStorage("storage.fluid", 4, ItemAndBlockHolder.CELL256KM, 256, 2048, 2.5); + deprecateFluidStorage("storage.fluid", 5, ItemAndBlockHolder.CELL1024KM, 1024, 8192, 3.0); + deprecateFluidStorage("storage.fluid", 6, ItemAndBlockHolder.CELL4096KM, 4096, 32768, 3.5); + deprecateFluidStorage("storage.fluid", 7, ItemAndBlockHolder.CELL16384KM, 16384, 131072, 4.0); // Thanks, AEApi. AEApi.instance().registries().cell().addCellHandler(new ProxyItemCellHandler()); AEApi.instance().registries().cell().addCellHandler(new ProxyVoidCellHandler()); @@ -54,19 +49,28 @@ public class ItemReplacements { deprecateItemStorage(2, AEApi.instance().definitions().items().cell4096k(), 4096, 32768, 3.5); deprecateItemStorage(3, AEApi.instance().definitions().items().cell16384k(), 16384, 131072, 4.0); deprecateItemStorage(4, AEApi.instance().definitions().items().cellContainer(), 65536, 8, 2.0, 1); - deprecateExtremeStorage("storage.physical.advanced.quantum", 0, - AEApi.instance().definitions().items().cellQuantum(), Integer.MAX_VALUE / 16, 4096, 1000.0); - deprecateExtremeStorage("storage.physical.advanced.singularity", 0, - AEApi.instance().definitions().items().cellSingularity(), Long.MAX_VALUE / 16, 4096, 15000.0); - //Deprecate void cell manually + deprecateExtremeStorage( + "storage.physical.advanced.quantum", + 0, + AEApi.instance().definitions().items().cellQuantum(), + Integer.MAX_VALUE / 16, + 4096, + 1000.0); + deprecateExtremeStorage( + "storage.physical.advanced.singularity", + 0, + AEApi.instance().definitions().items().cellSingularity(), + Long.MAX_VALUE / 16, + 4096, + 15000.0); + // Deprecate void cell manually ProxyVoidStorageCell voidCell = new ProxyVoidStorageCell(); GameRegistry.registerItem(voidCell, "ec2placeholder.storage.physical.void"); registry.put("extracells:storage.physical.void", voidCell); deprecateItem("pattern.fluid", ItemAndBlockHolder.PATTERN); deprecateItem("terminal.fluid.wireless", ItemAndBlockHolder.WIRELESS_FLUID_TERM); /* Storage casings */ - deprecateItem("storage.casing", 0, - AEApi.instance().definitions().materials().emptyAdvancedStorageCell()); + deprecateItem("storage.casing", 0, AEApi.instance().definitions().materials().emptyAdvancedStorageCell()); deprecateItem("storage.casing", 1, ItemAndBlockHolder.CELL_HOUSING, 2); /* Storage components (1k component, etc.) */ deprecateItem("storage.component", 0, AEApi.instance().definitions().materials().cell256kPart()); @@ -143,10 +147,11 @@ public class ItemReplacements { /** * Deprecate a simple item. - * @param srcName name of the to-be-replaced item without the mod id prefix - * @param srcMeta meta of the to-be-replaced item + * + * @param srcName name of the to-be-replaced item without the mod id prefix + * @param srcMeta meta of the to-be-replaced item * @param replacement item that will replace src - * @param targetMeta meta of the item that will replace src + * @param targetMeta meta of the item that will replace src */ private static void deprecateItem(String srcName, int srcMeta, Item replacement, int targetMeta) { getOrBuildItem(srcName).addMetaReplacement(srcMeta, replacement, targetMeta); @@ -162,13 +167,16 @@ public class ItemReplacements { private static void deprecateItem(String srcName, int srcMeta, IItemDefinition replacement) { if (replacement.isEnabled()) { - deprecateItem(srcName, srcMeta, - replacement.maybeItem().get(), - replacement.maybeStack(1).get().getItemDamage()); + deprecateItem( + srcName, + srcMeta, + replacement.maybeItem().get(), + replacement.maybeStack(1).get().getItemDamage()); } } - private static void deprecateItemPart(int srcMeta, Item replacement, Function partBuilder) { + private static void deprecateItemPart(int srcMeta, Item replacement, + Function partBuilder) { final String fullName = "extracells:part.base"; ProxyPartItem proxyItem = (ProxyPartItem) registry.get(fullName); if (proxyItem == null) { @@ -182,51 +190,65 @@ public class ItemReplacements { /** * Deprecate a fluid storage item. Note that we can't access the properties directly, so we need to do this */ - private static void deprecateFluidStorage(String srcName, int srcMeta, ItemMultiFluidStorageCell replacement, long kilobytes, int bytesPerType, double idleDrain) { + private static void deprecateFluidStorage(String srcName, int srcMeta, ItemMultiFluidStorageCell replacement, + long kilobytes, int bytesPerType, double idleDrain) { ProxyFluidStorageCell proxyItem = getOrBuildFluidStorage(srcName); - ProxyItem.ProxyStorageEntry entry = new ProxyItem.ProxyStorageEntry(replacement, kilobytes, bytesPerType, idleDrain); + ProxyItem.ProxyStorageEntry entry = new ProxyItem.ProxyStorageEntry( + replacement, + kilobytes, + bytesPerType, + idleDrain); proxyItem.addMetaReplacement(srcMeta, entry); } /** - * Deprecate a storage item. This goes through AEAPI, as AE2FC doesn't have any item cells. - * If the item is disabled in AEAPI, the replacement will not be registered! + * Deprecate a storage item. This goes through AEAPI, as AE2FC doesn't have any item cells. If the item is disabled + * in AEAPI, the replacement will not be registered! */ - private static void deprecateItemStorage(int srcMeta, IItemDefinition replacement, long kilobytes, int bytesPerType, double idleDrain) { + private static void deprecateItemStorage(int srcMeta, IItemDefinition replacement, long kilobytes, int bytesPerType, + double idleDrain) { if (replacement.isEnabled()) { ProxyItemStorageCell item = getOrBuildItemStorage(); int meta = replacement.maybeStack(1).get().getItemDamage(); ProxyItem.ProxyItemEntry storage = new ProxyItem.ProxyStorageEntry( - replacement.maybeItem().get(), kilobytes, bytesPerType, idleDrain); + replacement.maybeItem().get(), + kilobytes, + bytesPerType, + idleDrain); item.addMetaReplacement(srcMeta, storage); } } /** - * Deprecate a storage item. This goes through AEAPI, as AE2FC doesn't have any item cells. - * If the item is disabled in AEAPI, the replacement will not be registered! + * Deprecate a storage item. This goes through AEAPI, as AE2FC doesn't have any item cells. If the item is disabled + * in AEAPI, the replacement will not be registered! */ - private static void deprecateItemStorage(int srcMeta, IItemDefinition replacement, long kilobytes, int bytesPerType, double idleDrain, int types) { + private static void deprecateItemStorage(int srcMeta, IItemDefinition replacement, long kilobytes, int bytesPerType, + double idleDrain, int types) { if (replacement.isEnabled()) { ProxyItemStorageCell item = getOrBuildItemStorage(); int meta = replacement.maybeStack(1).get().getItemDamage(); ProxyItem.ProxyItemEntry storage = new ProxyItem.ProxyStorageEntry( - replacement.maybeItem().get(), kilobytes, bytesPerType, idleDrain, types); + replacement.maybeItem().get(), + kilobytes, + bytesPerType, + idleDrain, + types); item.addMetaReplacement(srcMeta, storage); } } - private static void deprecateExtremeStorage(String srcName, int srcMeta, IItemDefinition replacement, long bytes, int bytesPerType, double idleDrain) { + private static void deprecateExtremeStorage(String srcName, int srcMeta, IItemDefinition replacement, long bytes, + int bytesPerType, double idleDrain) { if (replacement.isEnabled()) { ProxyExtremeStorageCell item = getOrBuildItemStorage(srcName); int meta = replacement.maybeStack(1).get().getItemDamage(); ProxyItem.ProxyItemEntry storage = new ProxyItem.ProxyStorageEntry( - replacement.maybeItem().get(), bytes / 1024, bytesPerType, idleDrain); + replacement.maybeItem().get(), + bytes / 1024, + bytesPerType, + idleDrain); item.addMetaReplacement(srcMeta, storage); } } } - - - - diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java index e3b0b6f4..44d5bcf3 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyItem.java @@ -1,9 +1,9 @@ package com.glodblock.github.crossmod.extracells; -import com.glodblock.github.FluidCraft; -import com.glodblock.github.common.item.FCBaseItem; -import cpw.mods.fml.common.registry.GameRegistry; -import net.minecraft.client.resources.I18n; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -12,9 +12,9 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import com.glodblock.github.FluidCraft; +import com.glodblock.github.common.item.FCBaseItem; +import cpw.mods.fml.common.registry.GameRegistry; /** * EC2ProxyItem - Item that "holds" the data of a missing item. @@ -27,6 +27,7 @@ public class ProxyItem extends FCBaseItem { * Maps a metadata value to a replacement. */ protected final Map replacements; + public ProxyItem(String ec2itemName) { this.name = ec2itemName; this.replacements = new HashMap<>(); @@ -90,9 +91,8 @@ public class ProxyItem extends FCBaseItem { } /** - * Base class for a mapping from source (Item, meta) -> replacement (Item, meta). - * Optionally, override the {@link ProxyItemEntry#replaceNBT(NBTTagCompound)} - * method for custom NBT migration. + * Base class for a mapping from source (Item, meta) -> replacement (Item, meta). Optionally, override the + * {@link ProxyItemEntry#replaceNBT(NBTTagCompound)} method for custom NBT migration. */ protected static class ProxyItemEntry { @@ -101,7 +101,8 @@ public class ProxyItem extends FCBaseItem { /** * Creates a Proxy Replacement. - * @param replacement Item that will replace the other. + * + * @param replacement Item that will replace the other. * @param replacementMeta Metadata/damage value of the replacement */ protected ProxyItemEntry(Item replacement, int replacementMeta) { @@ -116,10 +117,12 @@ public class ProxyItem extends FCBaseItem { } protected static class ProxyStorageEntry extends ProxyItemEntry { + public final long maxBytes; public final int bytesPerType; public final double idleDrain; public final int types; + protected ProxyStorageEntry(Item replacement, long kilobytes, int bytesPerType, double idleDrain) { super(replacement, 0); this.maxBytes = kilobytes * 1024; @@ -135,6 +138,7 @@ public class ProxyItem extends FCBaseItem { this.idleDrain = idleDrain; this.types = types; } + @Override NBTTagCompound replaceNBT(NBTTagCompound compound) { if (compound != null && compound.hasKey("ecc")) { diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPart.java b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPart.java index d4d83ff4..4ea20eda 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPart.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPart.java @@ -1,11 +1,9 @@ package com.glodblock.github.crossmod.extracells; -import appeng.api.networking.IGridNode; -import appeng.api.parts.*; -import appeng.api.storage.data.IAEItemStack; -import appeng.util.item.AEItemStack; -import cpw.mods.fml.common.registry.GameRegistry; -import io.netty.buffer.ByteBuf; +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.Random; + import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -22,9 +20,12 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; -import java.lang.ref.WeakReference; -import java.util.List; -import java.util.Random; +import appeng.api.networking.IGridNode; +import appeng.api.parts.*; +import appeng.api.storage.data.IAEItemStack; +import appeng.util.item.AEItemStack; +import cpw.mods.fml.common.registry.GameRegistry; +import io.netty.buffer.ByteBuf; /** * ProxyPart is expected to be immediately replaced with the replacement part on load. diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPartItem.java b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPartItem.java index 56b5113c..1409116a 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPartItem.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/ProxyPartItem.java @@ -1,18 +1,21 @@ package com.glodblock.github.crossmod.extracells; +import java.util.function.Function; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import org.jetbrains.annotations.Nullable; + import appeng.api.parts.IPart; import appeng.api.parts.IPartItem; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import org.jetbrains.annotations.Nullable; - -import java.util.function.Function; public class ProxyPartItem extends ProxyItem implements IPartItem { /** - * Creates a ProxyPartItem associated with the ProxyPart instance. This instance - * is reused on each call to {@link #createPartFromItemStack(ItemStack)}. + * Creates a ProxyPartItem associated with the ProxyPart instance. This instance is reused on each call to + * {@link #createPartFromItemStack(ItemStack)}. + * * @param ec2itemName extra cells internal name */ public ProxyPartItem(String ec2itemName) { @@ -53,6 +56,3 @@ class PartReplacement extends ProxyItem.ProxyItemEntry { this.proxyPart = proxyPart; } } - - - diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidBusIO.java b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidBusIO.java index 8218d578..01bcf0e2 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidBusIO.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidBusIO.java @@ -1,18 +1,22 @@ package com.glodblock.github.crossmod.extracells.parts; -import appeng.api.config.RedstoneMode; -import com.glodblock.github.crossmod.extracells.ProxyPart; -import com.glodblock.github.crossmod.extracells.ProxyPartItem; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; - import static net.minecraftforge.common.util.Constants.NBT.TAG_COMPOUND; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import appeng.api.config.RedstoneMode; + +import com.glodblock.github.crossmod.extracells.ProxyPart; +import com.glodblock.github.crossmod.extracells.ProxyPartItem; + public class ProxyFluidBusIO extends ProxyPart { + /** * Map for converting slots from bus EC2 -> AE2FC */ private static int[] FILTER_MAP = null; + public static void init() { FILTER_MAP = new int[] { 5, 3, 6, 1, 0, 2, 7, 4, 8 }; } @@ -29,7 +33,7 @@ public class ProxyFluidBusIO extends ProxyPart { for (int slot = 0; slot < 9; ++slot) { String oldFilterName = "FilterFluid#" + slot; fluidFilterNew - .setTag("#" + FILTER_MAP[slot], ProxyPart.createFluidDisplayTag(extra.getString(oldFilterName))); + .setTag("#" + FILTER_MAP[slot], ProxyPart.createFluidDisplayTag(extra.getString(oldFilterName))); extra.removeTag(oldFilterName); } extra.setTag("config", fluidFilterNew); diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidInterface.java b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidInterface.java index ea332aa6..093663d6 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidInterface.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidInterface.java @@ -1,12 +1,14 @@ package com.glodblock.github.crossmod.extracells.parts; -import com.glodblock.github.crossmod.extracells.ProxyPart; -import com.glodblock.github.crossmod.extracells.ProxyPartItem; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraftforge.common.util.Constants; +import com.glodblock.github.crossmod.extracells.ProxyPart; +import com.glodblock.github.crossmod.extracells.ProxyPartItem; + public class ProxyFluidInterface extends ProxyPart { + public ProxyFluidInterface(ProxyPartItem item) { super(item); } diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidStorage.java b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidStorage.java index dfe0dc00..36b69f84 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidStorage.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyFluidStorage.java @@ -1,14 +1,17 @@ package com.glodblock.github.crossmod.extracells.parts; -import com.glodblock.github.crossmod.extracells.ProxyPart; -import com.glodblock.github.crossmod.extracells.ProxyPartItem; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; - import static net.minecraftforge.common.util.Constants.NBT.TAG_COMPOUND; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import com.glodblock.github.crossmod.extracells.ProxyPart; +import com.glodblock.github.crossmod.extracells.ProxyPartItem; + public class ProxyFluidStorage extends ProxyPart { + private static int[] FILTER_MAP = null; + protected static void init() { // spotless:off FILTER_MAP = new int[] { @@ -23,6 +26,7 @@ public class ProxyFluidStorage extends ProxyPart { 8, 17, 26, 35, 44, 53 }; //spotless:on } + public ProxyFluidStorage(ProxyPartItem item) { super(item); } @@ -35,7 +39,7 @@ public class ProxyFluidStorage extends ProxyPart { for (int slot = 0; slot < 54; ++slot) { String oldFilterName = "FilterFluid#" + slot; fluidFilterNew - .setTag("#" + FILTER_MAP[slot], ProxyPart.createFluidDisplayTag(extra.getString(oldFilterName))); + .setTag("#" + FILTER_MAP[slot], ProxyPart.createFluidDisplayTag(extra.getString(oldFilterName))); extra.removeTag(oldFilterName); } extra.setTag("config", fluidFilterNew); diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyLevelEmitter.java b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyLevelEmitter.java index 13d80361..db7eaa6b 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyLevelEmitter.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyLevelEmitter.java @@ -1,11 +1,14 @@ package com.glodblock.github.crossmod.extracells.parts; -import appeng.api.config.RedstoneMode; -import com.glodblock.github.crossmod.extracells.ProxyPart; -import com.glodblock.github.crossmod.extracells.ProxyPartItem; import net.minecraft.nbt.NBTTagCompound; +import appeng.api.config.RedstoneMode; + +import com.glodblock.github.crossmod.extracells.ProxyPart; +import com.glodblock.github.crossmod.extracells.ProxyPartItem; + public class ProxyLevelEmitter extends ProxyPart { + public ProxyLevelEmitter(ProxyPartItem item) { super(item); } diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyStorageMonitor.java b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyStorageMonitor.java index 0e1a1971..47130e14 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyStorageMonitor.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/parts/ProxyStorageMonitor.java @@ -1,12 +1,14 @@ package com.glodblock.github.crossmod.extracells.parts; -import com.glodblock.github.crossmod.extracells.ProxyPart; -import com.glodblock.github.crossmod.extracells.ProxyPartItem; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; +import com.glodblock.github.crossmod.extracells.ProxyPart; +import com.glodblock.github.crossmod.extracells.ProxyPartItem; + public class ProxyStorageMonitor extends ProxyPart { + public ProxyStorageMonitor(ProxyPartItem item) { super(item); } diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyExtremeStorageCell.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyExtremeStorageCell.java index 14ed2496..c6e05083 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyExtremeStorageCell.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyExtremeStorageCell.java @@ -3,6 +3,7 @@ package com.glodblock.github.crossmod.extracells.storage; import net.minecraft.item.ItemStack; public class ProxyExtremeStorageCell extends ProxyItemStorageCell { + public ProxyExtremeStorageCell(String ec2itemName) { super(ec2itemName); } diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInventory.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInventory.java index c95be55a..0f8f4aa5 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInventory.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidCellInventory.java @@ -1,18 +1,22 @@ package com.glodblock.github.crossmod.extracells.storage; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fluids.FluidStack; + import appeng.api.AEApi; import appeng.api.exceptions.AppEngException; import appeng.api.storage.ISaveProvider; import appeng.api.storage.data.IAEFluidStack; import appeng.util.item.AEFluidStack; + import com.glodblock.github.common.storage.FluidCellInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fluids.FluidStack; public class ProxyFluidCellInventory extends FluidCellInventory { + private static final String EC_CONVERTED = "ecc"; + public ProxyFluidCellInventory(ItemStack o, ISaveProvider container) throws AppEngException { super(o, container); } diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidStorageCell.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidStorageCell.java index 9c1839cf..5a58e522 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidStorageCell.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyFluidStorageCell.java @@ -1,16 +1,18 @@ package com.glodblock.github.crossmod.extracells.storage; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + import appeng.api.config.FuzzyMode; import appeng.api.storage.data.IAEFluidStack; import appeng.items.contents.CellConfig; import appeng.items.contents.CellUpgrades; import appeng.util.Platform; + import com.glodblock.github.common.Config; import com.glodblock.github.common.storage.IStorageFluidCell; import com.glodblock.github.crossmod.extracells.ProxyItem; import com.glodblock.github.util.ModAndClassUtil; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; public class ProxyFluidStorageCell extends ProxyItem implements IStorageFluidCell { diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemCellHandler.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemCellHandler.java index 2644ca1e..2b2c6dcc 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemCellHandler.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemCellHandler.java @@ -1,8 +1,9 @@ package com.glodblock.github.crossmod.extracells.storage; -import appeng.core.features.registries.entries.BasicCellHandler; import net.minecraft.item.ItemStack; +import appeng.core.features.registries.entries.BasicCellHandler; + public class ProxyItemCellHandler extends BasicCellHandler { @Override diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemStorageCell.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemStorageCell.java index f947d5ce..3f2ce3ac 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemStorageCell.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyItemStorageCell.java @@ -1,20 +1,22 @@ package com.glodblock.github.crossmod.extracells.storage; +import javax.annotation.Nullable; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; + import appeng.api.config.FuzzyMode; import appeng.api.implementations.items.IStorageCell; import appeng.api.storage.data.IAEItemStack; import appeng.items.contents.CellConfig; import appeng.items.contents.CellUpgrades; import appeng.util.Platform; -import com.glodblock.github.crossmod.extracells.ProxyItem; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import javax.annotation.Nullable; +import com.glodblock.github.crossmod.extracells.ProxyItem; /** - * Proxy Item Storage. 256K, 1024K, etc. -> AE2's version. - * For now its just mirroring AE2's version, will need to transition to something better. + * Proxy Item Storage. 256K, 1024K, etc. -> AE2's version. For now its just mirroring AE2's version, will need to + * transition to something better. */ public class ProxyItemStorageCell extends ProxyItem implements IStorageCell { diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidCellHandler.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidCellHandler.java index 24952af2..aaf11ce2 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidCellHandler.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidCellHandler.java @@ -1,9 +1,11 @@ package com.glodblock.github.crossmod.extracells.storage; -import appeng.core.features.registries.entries.VoidCellHandler; import net.minecraft.item.ItemStack; +import appeng.core.features.registries.entries.VoidCellHandler; + public class ProxyVoidCellHandler extends VoidCellHandler { + @Override public boolean isCell(ItemStack is) { return is != null && is.getItem() != null && is.getItem() instanceof ProxyVoidStorageCell; diff --git a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidStorageCell.java b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidStorageCell.java index 478c1bd4..dc900159 100644 --- a/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidStorageCell.java +++ b/src/main/java/com/glodblock/github/crossmod/extracells/storage/ProxyVoidStorageCell.java @@ -1,23 +1,24 @@ package com.glodblock.github.crossmod.extracells.storage; -import appeng.api.AEApi; -import appeng.core.localization.GuiText; -import appeng.items.storage.ItemVoidStorageCell; -import com.glodblock.github.crossmod.extracells.ProxyItem; -import net.minecraft.client.resources.I18n; +import java.util.List; + import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -import java.util.List; +import appeng.api.AEApi; +import appeng.items.storage.ItemVoidStorageCell; public class ProxyVoidStorageCell extends ItemVoidStorageCell { - private final String name = AEApi.instance().definitions().items().cellVoid().maybeStack(1).get().getUnlocalizedName(); + private final String name = AEApi.instance().definitions().items().cellVoid().maybeStack(1).get() + .getUnlocalizedName(); + @Override - public void addCheckedInformation(ItemStack stack, EntityPlayer player, List info, boolean displayMoreInfo) { + public void addCheckedInformation(ItemStack stack, EntityPlayer player, List info, + boolean displayMoreInfo) { info.add(EnumChatFormatting.RED + "Extra Cells Placeholder for:"); info.add(EnumChatFormatting.AQUA + name); info.add(EnumChatFormatting.GOLD + "Put in your inventory to get a replacement."); diff --git a/src/main/java/com/glodblock/github/proxy/CommonProxy.java b/src/main/java/com/glodblock/github/proxy/CommonProxy.java index c26a2862..022db374 100644 --- a/src/main/java/com/glodblock/github/proxy/CommonProxy.java +++ b/src/main/java/com/glodblock/github/proxy/CommonProxy.java @@ -1,6 +1,5 @@ package com.glodblock.github.proxy; -import com.glodblock.github.crossmod.extracells.EC2Replacer; import net.minecraft.item.ItemStack; import appeng.api.AEApi; @@ -10,6 +9,7 @@ import appeng.api.config.Upgrades; import com.glodblock.github.FluidCraft; import com.glodblock.github.common.Config; import com.glodblock.github.common.tile.TileWalrus; +import com.glodblock.github.crossmod.extracells.EC2Replacer; import com.glodblock.github.inventory.external.AEFluidInterfaceHandler; import com.glodblock.github.loader.ItemAndBlockHolder; import com.glodblock.github.network.SPacketMEUpdateBuffer;