From 36832d19447ede49cf85a8480ae5c869d1263e3c Mon Sep 17 00:00:00 2001 From: kekzdealer Date: Tue, 2 Jun 2020 00:54:41 +0200 Subject: code cleanup --- src/main/java/kekztech/Items.java | 188 +++++++++++++++---------------- src/main/java/kekztech/KekzCore.java | 210 +++++++++++++++++------------------ 2 files changed, 199 insertions(+), 199 deletions(-) (limited to 'src/main/java/kekztech') diff --git a/src/main/java/kekztech/Items.java b/src/main/java/kekztech/Items.java index cb79d01947..66a8f996e3 100644 --- a/src/main/java/kekztech/Items.java +++ b/src/main/java/kekztech/Items.java @@ -1,94 +1,94 @@ -package kekztech; - -import items.MetaItem_CraftingComponent; -import items.MetaItem_ReactorComponent; -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; -import util.Util; - -import java.util.Arrays; - -public enum Items { - // Heat Vents - T1HeatVent(0,0), T2HeatVent(1,0), T3HeatVent(2,0), T4HeatVent(3,0), - T1ComponentHeatVent(4,0), T2ComponentHeatVent(5,0), T3ComponentHeatVent(6,0), T4ComponentHeatVent(7,0), - T1OverclockedHeatVent(8,0), T2OverclockedHeatVent(9,0), T3OverclockedHeatVent(10,0), T4OverclockedHeatVent(11,0), - // Heat Exchanger - T1HeatExchanger(12,0), T2HeatExchanger(13,0), T3HeatExchanger(14,0), T4HeatExchanger(15,0), - // Fuel Rods - UraniumFuelRod(16,0), UraniumDualFuelRod(17,0), UraniumQuadFuelRod(18,0), - ThoriumFuelRod(19,0), ThoriumDualFuelRod(20,0), ThoriumQuadFuelRod(21,0), - MOXFuelRod(22,0), MOXDualFuelRod(23,0), MOXQuadFuelRod(24,0), - NaquadahFuelRod(25,0), NaquadahDualFuelRod(26,0), NaquadahQuadFuelRod(27,0), - Th_MOXFuelRod(28,0), Th_MOXDualFuelRod(29,0), Th_MOXQuadFuelRod(30,0), - // Depleted Fuel Rods - DepletedUraniumFuelRod(31,0), DepletedUraniumDualFuelRod(32,0), DepletedUraniumQuadFuelRod(33,0), - DepletedThoriumFuelRod(34,0), DepletedThoriumDualFuelRod(35,0), DepletedThoriumQuadFuelRod(36,0), - DepletedMOXFuelRod(37,0), DepletedMOXDualFuelRod(38,0), DepletedMOXQuadFuelRod(39,0), - DepletedNaquadahFuelRod(40,0), DepletedNaquadahDualFuelRod(41,0), DepletedNaquadahQuadFuelRod(42,0), - Th_DepletedMOXFuelRod(43,0), Th_DepletedMOXDualFuelRod(44,0), Th_DepletedMOXQuadFuelRod(45,0), - // Neutron Reflectors - T1NeutronReflector(46,0), T2NeutronReflector(47,0), - // Coolant Cells - HeliumCoolantCell360k(48,0), NaKCoolantCell360k(49,0), - - // Heat Pipes - CopperHeatPipe(0,1), SilverHeatPipe(1,1), BoronArsenideHeatPipe(2,1), DiamondHeatPipe(3,1), - BoronArsenideDust(4,1), IsotopicallyPureDiamondDust(5,1), AmineCarbamiteDust(6,1), - BoronArsenideCrystal(7,1), IsotopicallyPureDiamondCrystal(8,1), - // Ceramics - YSZCeramicDust(9,1), GDCCeramicDust(10,1), - YttriaDust(11,1), ZirconiaDust(12,1), CeriaDust(13,1), - YSZCeramicPlate(14,1), GDCCeramicPlate(15,1), - ItemServerBlade(16,1), - // Error Item - Error(0,1), - // Configurator - Configurator(0, 1); - - static { - YttriaDust.setOreDictName("dustYttriumOxide"); - ZirconiaDust.setOreDictName("dustCubicZirconia"); - } - - private final int metaID; - private final int identifier; - - private Items(int metaID, int identifier) { - this.metaID = metaID; - this.identifier = identifier; - } - - public int getMetaID() { - return metaID; - } - - String OreDictName; - - private void registerOreDict(){ - OreDictionary.registerOre(getOreDictName(),getNonOreDictedItemStack(1)); - } - - public static void registerOreDictNames(){ - Arrays.stream(Items.values()).filter(e -> e.getOreDictName() != null).forEach(Items::registerOreDict); - } - - public ItemStack getNonOreDictedItemStack(int amount){ - return identifier == 0 ? new ItemStack(MetaItem_ReactorComponent.getInstance(),amount,this.getMetaID()) : - new ItemStack(MetaItem_CraftingComponent.getInstance(),amount,this.getMetaID()); - } - - public ItemStack getOreDictedItemStack(int amount){ - return this.getOreDictName() != null ? Util.getStackofAmountFromOreDict(this.getOreDictName(),amount) : - identifier == 0 ? new ItemStack(MetaItem_ReactorComponent.getInstance(),amount,this.getMetaID()) : - new ItemStack(MetaItem_CraftingComponent.getInstance(),amount,this.getMetaID()); - } - - public String getOreDictName() { - return OreDictName; - } - - public void setOreDictName(String oreDictName) { - OreDictName = oreDictName; - } -} +package kekztech; + +import common.items.MetaItem_CraftingComponent; +import common.items.MetaItem_ReactorComponent; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; +import util.Util; + +import java.util.Arrays; + +public enum Items { + // Heat Vents + T1HeatVent(0,0), T2HeatVent(1,0), T3HeatVent(2,0), T4HeatVent(3,0), + T1ComponentHeatVent(4,0), T2ComponentHeatVent(5,0), T3ComponentHeatVent(6,0), T4ComponentHeatVent(7,0), + T1OverclockedHeatVent(8,0), T2OverclockedHeatVent(9,0), T3OverclockedHeatVent(10,0), T4OverclockedHeatVent(11,0), + // Heat Exchanger + T1HeatExchanger(12,0), T2HeatExchanger(13,0), T3HeatExchanger(14,0), T4HeatExchanger(15,0), + // Fuel Rods + UraniumFuelRod(16,0), UraniumDualFuelRod(17,0), UraniumQuadFuelRod(18,0), + ThoriumFuelRod(19,0), ThoriumDualFuelRod(20,0), ThoriumQuadFuelRod(21,0), + MOXFuelRod(22,0), MOXDualFuelRod(23,0), MOXQuadFuelRod(24,0), + NaquadahFuelRod(25,0), NaquadahDualFuelRod(26,0), NaquadahQuadFuelRod(27,0), + Th_MOXFuelRod(28,0), Th_MOXDualFuelRod(29,0), Th_MOXQuadFuelRod(30,0), + // Depleted Fuel Rods + DepletedUraniumFuelRod(31,0), DepletedUraniumDualFuelRod(32,0), DepletedUraniumQuadFuelRod(33,0), + DepletedThoriumFuelRod(34,0), DepletedThoriumDualFuelRod(35,0), DepletedThoriumQuadFuelRod(36,0), + DepletedMOXFuelRod(37,0), DepletedMOXDualFuelRod(38,0), DepletedMOXQuadFuelRod(39,0), + DepletedNaquadahFuelRod(40,0), DepletedNaquadahDualFuelRod(41,0), DepletedNaquadahQuadFuelRod(42,0), + Th_DepletedMOXFuelRod(43,0), Th_DepletedMOXDualFuelRod(44,0), Th_DepletedMOXQuadFuelRod(45,0), + // Neutron Reflectors + T1NeutronReflector(46,0), T2NeutronReflector(47,0), + // Coolant Cells + HeliumCoolantCell360k(48,0), NaKCoolantCell360k(49,0), + + // Heat Pipes + CopperHeatPipe(0,1), SilverHeatPipe(1,1), BoronArsenideHeatPipe(2,1), DiamondHeatPipe(3,1), + BoronArsenideDust(4,1), IsotopicallyPureDiamondDust(5,1), AmineCarbamiteDust(6,1), + BoronArsenideCrystal(7,1), IsotopicallyPureDiamondCrystal(8,1), + // Ceramics + YSZCeramicDust(9,1), GDCCeramicDust(10,1), + YttriaDust(11,1), ZirconiaDust(12,1), CeriaDust(13,1), + YSZCeramicPlate(14,1), GDCCeramicPlate(15,1), + ItemServerBlade(16,1), + // Error Item + Error(0,1), + // Configurator + Configurator(0, 1); + + static { + YttriaDust.setOreDictName("dustYttriumOxide"); + ZirconiaDust.setOreDictName("dustCubicZirconia"); + } + + private final int metaID; + private final int identifier; + + Items(int metaID, int identifier) { + this.metaID = metaID; + this.identifier = identifier; + } + + public int getMetaID() { + return metaID; + } + + String OreDictName; + + private void registerOreDict(){ + OreDictionary.registerOre(getOreDictName(),getNonOreDictedItemStack(1)); + } + + public static void registerOreDictNames(){ + Arrays.stream(Items.values()).filter(e -> e.getOreDictName() != null).forEach(Items::registerOreDict); + } + + public ItemStack getNonOreDictedItemStack(int amount){ + return identifier == 0 ? new ItemStack(MetaItem_ReactorComponent.getInstance(),amount,this.getMetaID()) : + new ItemStack(MetaItem_CraftingComponent.getInstance(),amount,this.getMetaID()); + } + + public ItemStack getOreDictedItemStack(int amount){ + return this.getOreDictName() != null ? Util.getStackofAmountFromOreDict(this.getOreDictName(),amount) : + identifier == 0 ? new ItemStack(MetaItem_ReactorComponent.getInstance(),amount,this.getMetaID()) : + new ItemStack(MetaItem_CraftingComponent.getInstance(),amount,this.getMetaID()); + } + + public String getOreDictName() { + return OreDictName; + } + + public void setOreDictName(String oreDictName) { + OreDictName = oreDictName; + } +} diff --git a/src/main/java/kekztech/KekzCore.java b/src/main/java/kekztech/KekzCore.java index 7574c1f399..10d9281c49 100644 --- a/src/main/java/kekztech/KekzCore.java +++ b/src/main/java/kekztech/KekzCore.java @@ -1,105 +1,105 @@ -package kekztech; - -import client.renderer.TESR_SECapacitor; -import client.renderer.TESR_SETether; -import common.Blocks; -import common.Recipes; -import common.Researches; -import common.tileentities.*; -import cpw.mods.fml.client.registry.ClientRegistry; -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLPostInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.network.NetworkRegistry; -import cpw.mods.fml.common.registry.GameRegistry; -import items.ErrorItem; -import items.MetaItem_CraftingComponent; -import items.MetaItem_ReactorComponent; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -/** - * My GT-Meta-IDs are: 13101 - 13500 - * - * @author kekzdealer - * - */ -@Mod(modid = KekzCore.MODID, name = KekzCore.NAME, version = KekzCore.VERSION, - dependencies = - "required-after:IC2;" - + "required-after:gregtech;" - + "required-after:tectech;" - + "required-after:Thaumcraft;" - + "required-after:ThaumicTinkerer;" - + "after:bartworks;" - + "after:dreamcraft" - ) -public class KekzCore { - - public static final String NAME = "KekzTech"; - public static final String MODID = "kekztech"; - public static final String VERSION = "0.4.5"; - - public static final Logger LOGGER = LogManager.getLogger(NAME); - - @Mod.Instance("kekztech") - public static KekzCore instance; - - public static GTMTE_SOFuelCellMK1 sofc1; - public static GTMTE_SOFuelCellMK2 sofc2; - public static GTMTE_ModularNuclearReactor mdr; - public static GTMTE_FluidMultiStorage fms; - public static GTMTE_ItemServer is; - public static GTMTE_LapotronicSuperCapacitor lsc; - public static GTMTE_SpaceElevator se; - - @Mod.EventHandler - public void preInit(FMLPreInitializationEvent event) { - // Items - ErrorItem.getInstance().registerItem(); - MetaItem_ReactorComponent.getInstance().registerItem(); - MetaItem_CraftingComponent.getInstance().registerItem(); - Items.registerOreDictNames(); - - Blocks.preInit(); - - // Register TileEntities - GameRegistry.registerTileEntity(TE_TFFTMultiHatch.class, "kekztech_tfftmultihatch_tile"); - //GameRegistry.registerTileEntity(TE_ItemServerIOPort.class, "kekztech_itemserverioport_tile"); - GameRegistry.registerTileEntity(TE_ItemProxyCable.class, "kekztech_itemproxycable_tile"); - GameRegistry.registerTileEntity(TE_ItemProxySource.class, "kekztech_itemproxysource_tile"); - GameRegistry.registerTileEntity(TE_ItemProxyEndpoint.class, "kekztech_itemproxyendpoint_tile"); - GameRegistry.registerTileEntity(TE_ThaumiumReinforcedJar.class, "kekztech_thaumiumreinforcedjar"); - GameRegistry.registerTileEntity(TE_IchorJar.class, "kekztech_ichorjar"); - - // Register guis - NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler()); - - // Register TESR - ClientRegistry.bindTileEntitySpecialRenderer(TE_SpaceElevatorTether.class, new TESR_SETether()); - ClientRegistry.bindTileEntitySpecialRenderer(TE_SpaceElevatorCapacitor.class, new TESR_SECapacitor()); - - Researches.preInit(); - } - - @Mod.EventHandler - public void init(FMLInitializationEvent event) { - // Multiblock controllers - sofc1 = new GTMTE_SOFuelCellMK1(13101, "multimachine.fuelcellmk1", "Solid-Oxide Fuel Cell Mk I"); - sofc2 = new GTMTE_SOFuelCellMK2(13102, "multimachine.fuelcellmk2", "Solid-Oxide Fuel Cell Mk II"); - mdr = new GTMTE_ModularNuclearReactor(13103, "multimachine.nuclearreactor", "Nuclear Reactor"); - fms = new GTMTE_FluidMultiStorage(13104, "multimachine.tf_fluidtank", "T.F.F.T"); - //is = new GTMTE_ItemServer(13105, "multimachine.itemserver", "Item Server"); - lsc = new GTMTE_LapotronicSuperCapacitor(13106, "multimachine.supercapacitor", "Lapotronic Supercapacitor"); - se = new GTMTE_SpaceElevator(13107, "multimachine.spaceelevator", "Space Elevator"); - // Register renderer - //RenderingRegistry.registerBlockHandler(ConduitRenderer.getInstance()); - } - - @Mod.EventHandler - public void postInit(FMLPostInitializationEvent event) { - Recipes.postInit(); - Researches.postInit(); - } -} +package kekztech; + +import client.renderer.TESR_SECapacitor; +import client.renderer.TESR_SETether; +import common.Blocks; +import common.Recipes; +import common.Researches; +import common.tileentities.*; +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.common.registry.GameRegistry; +import common.items.ErrorItem; +import common.items.MetaItem_CraftingComponent; +import common.items.MetaItem_ReactorComponent; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +/** + * My GT-Meta-IDs are: 13101 - 13500 + * + * @author kekzdealer + * + */ +@Mod(modid = KekzCore.MODID, name = KekzCore.NAME, version = KekzCore.VERSION, + dependencies = + "required-after:IC2;" + + "required-after:gregtech;" + + "required-after:tectech;" + + "required-after:Thaumcraft;" + + "required-after:ThaumicTinkerer;" + + "after:bartworks;" + + "after:dreamcraft" + ) +public class KekzCore { + + public static final String NAME = "KekzTech"; + public static final String MODID = "kekztech"; + public static final String VERSION = "0.4.5"; + + public static final Logger LOGGER = LogManager.getLogger(NAME); + + @Mod.Instance("kekztech") + public static KekzCore instance; + + public static GTMTE_SOFuelCellMK1 sofc1; + public static GTMTE_SOFuelCellMK2 sofc2; + public static GTMTE_ModularNuclearReactor mdr; + public static GTMTE_FluidMultiStorage fms; + public static GTMTE_ItemServer is; + public static GTMTE_LapotronicSuperCapacitor lsc; + public static GTMTE_SpaceElevator se; + + @Mod.EventHandler + public void preInit(FMLPreInitializationEvent event) { + // Items + ErrorItem.getInstance().registerItem(); + MetaItem_ReactorComponent.getInstance().registerItem(); + MetaItem_CraftingComponent.getInstance().registerItem(); + Items.registerOreDictNames(); + + Blocks.preInit(); + + // Register TileEntities + GameRegistry.registerTileEntity(TE_TFFTMultiHatch.class, "kekztech_tfftmultihatch_tile"); + //GameRegistry.registerTileEntity(TE_ItemServerIOPort.class, "kekztech_itemserverioport_tile"); + GameRegistry.registerTileEntity(TE_ItemProxyCable.class, "kekztech_itemproxycable_tile"); + GameRegistry.registerTileEntity(TE_ItemProxySource.class, "kekztech_itemproxysource_tile"); + GameRegistry.registerTileEntity(TE_ItemProxyEndpoint.class, "kekztech_itemproxyendpoint_tile"); + GameRegistry.registerTileEntity(TE_ThaumiumReinforcedJar.class, "kekztech_thaumiumreinforcedjar"); + GameRegistry.registerTileEntity(TE_IchorJar.class, "kekztech_ichorjar"); + + // Register guis + NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler()); + + // Register TESR + ClientRegistry.bindTileEntitySpecialRenderer(TE_SpaceElevatorTether.class, new TESR_SETether()); + ClientRegistry.bindTileEntitySpecialRenderer(TE_SpaceElevatorCapacitor.class, new TESR_SECapacitor()); + + Researches.preInit(); + } + + @Mod.EventHandler + public void init(FMLInitializationEvent event) { + // Multiblock controllers + sofc1 = new GTMTE_SOFuelCellMK1(13101, "multimachine.fuelcellmk1", "Solid-Oxide Fuel Cell Mk I"); + sofc2 = new GTMTE_SOFuelCellMK2(13102, "multimachine.fuelcellmk2", "Solid-Oxide Fuel Cell Mk II"); + mdr = new GTMTE_ModularNuclearReactor(13103, "multimachine.nuclearreactor", "Nuclear Reactor"); + fms = new GTMTE_FluidMultiStorage(13104, "multimachine.tf_fluidtank", "T.F.F.T"); + //is = new GTMTE_ItemServer(13105, "multimachine.itemserver", "Item Server"); + lsc = new GTMTE_LapotronicSuperCapacitor(13106, "multimachine.supercapacitor", "Lapotronic Supercapacitor"); + se = new GTMTE_SpaceElevator(13107, "multimachine.spaceelevator", "Space Elevator"); + // Register renderer + //RenderingRegistry.registerBlockHandler(ConduitRenderer.getInstance()); + } + + @Mod.EventHandler + public void postInit(FMLPostInitializationEvent event) { + Recipes.postInit(); + Researches.postInit(); + } +} -- cgit From cf4206d981762fbcd00ab62f89034eb351559356 Mon Sep 17 00:00:00 2001 From: kekzdealer Date: Tue, 2 Jun 2020 01:49:21 +0200 Subject: Refactored into sided proxies --- src/main/java/client/ClientProxy.java | 29 ++++++++++++++++++ src/main/java/common/CommonProxy.java | 46 ++++++++++++++++++++++++++++ src/main/java/common/TileEntities.java | 36 ++++++++++++++++++++++ src/main/java/kekztech/KekzCore.java | 53 +++++---------------------------- src/main/java/kekztech/ServerProxy.java | 7 +++++ 5 files changed, 126 insertions(+), 45 deletions(-) create mode 100644 src/main/java/client/ClientProxy.java create mode 100644 src/main/java/common/CommonProxy.java create mode 100644 src/main/java/common/TileEntities.java create mode 100644 src/main/java/kekztech/ServerProxy.java (limited to 'src/main/java/kekztech') diff --git a/src/main/java/client/ClientProxy.java b/src/main/java/client/ClientProxy.java new file mode 100644 index 0000000000..e50639b878 --- /dev/null +++ b/src/main/java/client/ClientProxy.java @@ -0,0 +1,29 @@ +package client; + +import client.renderer.TESR_SECapacitor; +import client.renderer.TESR_SETether; +import common.CommonProxy; +import common.tileentities.TE_SpaceElevatorCapacitor; +import common.tileentities.TE_SpaceElevatorTether; +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; + +public class ClientProxy extends CommonProxy { + + @Override + public void preInit(final FMLPreInitializationEvent e) { + super.preInit(e); + // Register TESR + ClientRegistry.bindTileEntitySpecialRenderer(TE_SpaceElevatorTether.class, new TESR_SETether()); + ClientRegistry.bindTileEntitySpecialRenderer(TE_SpaceElevatorCapacitor.class, new TESR_SECapacitor()); + } + + @Override + public void init(final FMLInitializationEvent e) { + super.init(e); + // Register Simple Block Renderers + //RenderingRegistry.registerBlockHandler(ConduitRenderer.getInstance()); + } + +} diff --git a/src/main/java/common/CommonProxy.java b/src/main/java/common/CommonProxy.java new file mode 100644 index 0000000000..3341019ffc --- /dev/null +++ b/src/main/java/common/CommonProxy.java @@ -0,0 +1,46 @@ +package common; + +import common.items.ErrorItem; +import common.items.MetaItem_CraftingComponent; +import common.items.MetaItem_ReactorComponent; +import common.tileentities.*; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.common.registry.GameRegistry; +import kekztech.GuiHandler; +import kekztech.Items; +import kekztech.KekzCore; + +public class CommonProxy { + + public void preInit(final FMLPreInitializationEvent e) { + // Items + ErrorItem.getInstance().registerItem(); + MetaItem_ReactorComponent.getInstance().registerItem(); + MetaItem_CraftingComponent.getInstance().registerItem(); + Items.registerOreDictNames(); + // Blocks + Blocks.preInit(); + // TileEntities + TileEntities.preInit(); + // TC Research + Researches.preInit(); + // GUI Handler + NetworkRegistry.INSTANCE.registerGuiHandler(KekzCore.instance, new GuiHandler()); + } + + public void init(final FMLInitializationEvent e) { + // GregTech Meta TileEntities + TileEntities.init(); + } + + public void postInit(final FMLPostInitializationEvent e) { + // Recipes + Recipes.postInit(); + // Research + Researches.postInit(); + } + +} diff --git a/src/main/java/common/TileEntities.java b/src/main/java/common/TileEntities.java new file mode 100644 index 0000000000..2e51dec473 --- /dev/null +++ b/src/main/java/common/TileEntities.java @@ -0,0 +1,36 @@ +package common; + +import common.tileentities.*; +import cpw.mods.fml.common.registry.GameRegistry; + +public class TileEntities { + + public static GTMTE_SOFuelCellMK1 sofc1; + public static GTMTE_SOFuelCellMK2 sofc2; + public static GTMTE_ModularNuclearReactor mdr; + public static GTMTE_FluidMultiStorage fms; + public static GTMTE_ItemServer is; + public static GTMTE_LapotronicSuperCapacitor lsc; + public static GTMTE_SpaceElevator se; + + public static void preInit() { + GameRegistry.registerTileEntity(TE_TFFTMultiHatch.class, "kekztech_tfftmultihatch_tile"); + //GameRegistry.registerTileEntity(TE_ItemServerIOPort.class, "kekztech_itemserverioport_tile"); + GameRegistry.registerTileEntity(TE_ItemProxyCable.class, "kekztech_itemproxycable_tile"); + GameRegistry.registerTileEntity(TE_ItemProxySource.class, "kekztech_itemproxysource_tile"); + GameRegistry.registerTileEntity(TE_ItemProxyEndpoint.class, "kekztech_itemproxyendpoint_tile"); + GameRegistry.registerTileEntity(TE_ThaumiumReinforcedJar.class, "kekztech_thaumiumreinforcedjar"); + GameRegistry.registerTileEntity(TE_IchorJar.class, "kekztech_ichorjar"); + } + + public static void init() { + sofc1 = new GTMTE_SOFuelCellMK1(13101, "multimachine.fuelcellmk1", "Solid-Oxide Fuel Cell Mk I"); + sofc2 = new GTMTE_SOFuelCellMK2(13102, "multimachine.fuelcellmk2", "Solid-Oxide Fuel Cell Mk II"); + mdr = new GTMTE_ModularNuclearReactor(13103, "multimachine.nuclearreactor", "Nuclear Reactor"); + fms = new GTMTE_FluidMultiStorage(13104, "multimachine.tf_fluidtank", "T.F.F.T"); + //is = new GTMTE_ItemServer(13105, "multimachine.itemserver", "Item Server"); + lsc = new GTMTE_LapotronicSuperCapacitor(13106, "multimachine.supercapacitor", "Lapotronic Supercapacitor"); + se = new GTMTE_SpaceElevator(13107, "multimachine.spaceelevator", "Space Elevator"); + } + +} diff --git a/src/main/java/kekztech/KekzCore.java b/src/main/java/kekztech/KekzCore.java index 10d9281c49..49f7cfa54e 100644 --- a/src/main/java/kekztech/KekzCore.java +++ b/src/main/java/kekztech/KekzCore.java @@ -3,11 +3,13 @@ package kekztech; import client.renderer.TESR_SECapacitor; import client.renderer.TESR_SETether; import common.Blocks; +import common.CommonProxy; import common.Recipes; import common.Researches; import common.tileentities.*; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; @@ -46,60 +48,21 @@ public class KekzCore { @Mod.Instance("kekztech") public static KekzCore instance; - public static GTMTE_SOFuelCellMK1 sofc1; - public static GTMTE_SOFuelCellMK2 sofc2; - public static GTMTE_ModularNuclearReactor mdr; - public static GTMTE_FluidMultiStorage fms; - public static GTMTE_ItemServer is; - public static GTMTE_LapotronicSuperCapacitor lsc; - public static GTMTE_SpaceElevator se; - + @SidedProxy(clientSide = "client.ClientProxy", serverSide = "kekztech.ServerProxy") + public static CommonProxy proxy; + @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { - // Items - ErrorItem.getInstance().registerItem(); - MetaItem_ReactorComponent.getInstance().registerItem(); - MetaItem_CraftingComponent.getInstance().registerItem(); - Items.registerOreDictNames(); - - Blocks.preInit(); - - // Register TileEntities - GameRegistry.registerTileEntity(TE_TFFTMultiHatch.class, "kekztech_tfftmultihatch_tile"); - //GameRegistry.registerTileEntity(TE_ItemServerIOPort.class, "kekztech_itemserverioport_tile"); - GameRegistry.registerTileEntity(TE_ItemProxyCable.class, "kekztech_itemproxycable_tile"); - GameRegistry.registerTileEntity(TE_ItemProxySource.class, "kekztech_itemproxysource_tile"); - GameRegistry.registerTileEntity(TE_ItemProxyEndpoint.class, "kekztech_itemproxyendpoint_tile"); - GameRegistry.registerTileEntity(TE_ThaumiumReinforcedJar.class, "kekztech_thaumiumreinforcedjar"); - GameRegistry.registerTileEntity(TE_IchorJar.class, "kekztech_ichorjar"); - - // Register guis - NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler()); - - // Register TESR - ClientRegistry.bindTileEntitySpecialRenderer(TE_SpaceElevatorTether.class, new TESR_SETether()); - ClientRegistry.bindTileEntitySpecialRenderer(TE_SpaceElevatorCapacitor.class, new TESR_SECapacitor()); - - Researches.preInit(); + proxy.preInit(event); } @Mod.EventHandler public void init(FMLInitializationEvent event) { - // Multiblock controllers - sofc1 = new GTMTE_SOFuelCellMK1(13101, "multimachine.fuelcellmk1", "Solid-Oxide Fuel Cell Mk I"); - sofc2 = new GTMTE_SOFuelCellMK2(13102, "multimachine.fuelcellmk2", "Solid-Oxide Fuel Cell Mk II"); - mdr = new GTMTE_ModularNuclearReactor(13103, "multimachine.nuclearreactor", "Nuclear Reactor"); - fms = new GTMTE_FluidMultiStorage(13104, "multimachine.tf_fluidtank", "T.F.F.T"); - //is = new GTMTE_ItemServer(13105, "multimachine.itemserver", "Item Server"); - lsc = new GTMTE_LapotronicSuperCapacitor(13106, "multimachine.supercapacitor", "Lapotronic Supercapacitor"); - se = new GTMTE_SpaceElevator(13107, "multimachine.spaceelevator", "Space Elevator"); - // Register renderer - //RenderingRegistry.registerBlockHandler(ConduitRenderer.getInstance()); + proxy.init(event); } @Mod.EventHandler public void postInit(FMLPostInitializationEvent event) { - Recipes.postInit(); - Researches.postInit(); + proxy.postInit(event); } } diff --git a/src/main/java/kekztech/ServerProxy.java b/src/main/java/kekztech/ServerProxy.java new file mode 100644 index 0000000000..0291cf687f --- /dev/null +++ b/src/main/java/kekztech/ServerProxy.java @@ -0,0 +1,7 @@ +package kekztech; + +import common.CommonProxy; + +public class ServerProxy extends CommonProxy { + +} -- cgit From 116452b6574d430b6a3fb685c9f63f2b0a9836df Mon Sep 17 00:00:00 2001 From: kekzdealer Date: Tue, 2 Jun 2020 02:41:25 +0200 Subject: version bump --- build.gradle | 2 +- src/main/java/kekztech/KekzCore.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main/java/kekztech') diff --git a/build.gradle b/build.gradle index 9449608a1a..15da6c830d 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ apply plugin: 'forge' sourceCompatibility = 1.8 targetCompatibility = 1.8 -version = "0.4.5" +version = "0.4.6" group= "kekztech" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "kekztech" diff --git a/src/main/java/kekztech/KekzCore.java b/src/main/java/kekztech/KekzCore.java index 49f7cfa54e..312559d633 100644 --- a/src/main/java/kekztech/KekzCore.java +++ b/src/main/java/kekztech/KekzCore.java @@ -41,7 +41,7 @@ public class KekzCore { public static final String NAME = "KekzTech"; public static final String MODID = "kekztech"; - public static final String VERSION = "0.4.5"; + public static final String VERSION = "0.4.6"; public static final Logger LOGGER = LogManager.getLogger(NAME); -- cgit From 76b15123238ca2f01c1bf46db8a4ea20dc7ced2b Mon Sep 17 00:00:00 2001 From: kekzdealer Date: Mon, 8 Jun 2020 02:50:03 +0200 Subject: Removed everything related to Item Server; Deprecated current TFFT Multi Hatch in favor of GTMTE version --- GregTech.lang | 10 + src/main/java/client/ClientProxy.java | 2 - src/main/java/client/renderer/HatchRenderer.java | 102 -- src/main/java/common/Blocks.java | 9 +- src/main/java/common/Recipes.java | 62 -- src/main/java/common/TileEntities.java | 15 +- .../java/common/blocks/Block_ItemServerDrive.java | 57 -- .../java/common/blocks/Block_ItemServerIOPort.java | 43 - .../common/blocks/Block_ItemServerRackCasing.java | 30 - .../java/common/blocks/Block_TFFTMultiHatch.java | 77 +- .../java/common/itemBlocks/IB_ItemServerDrive.java | 22 - .../common/itemBlocks/IB_ItemServerIOPort.java | 22 - .../common/itemBlocks/IB_ItemServerRackCasing.java | 22 - .../java/common/itemBlocks/IB_TFFTMultiHatch.java | 7 +- .../common/items/MetaItem_CraftingComponent.java | 3 +- .../tileentities/GTMTE_FluidMultiStorage.java | 1052 ++++++++++---------- .../java/common/tileentities/GTMTE_ItemServer.java | 393 -------- .../common/tileentities/GTMTE_TFFTMultiHatch.java | 196 ++++ .../common/tileentities/TE_ItemServerIOPort.java | 145 --- .../common/tileentities/TE_TFFTMultiHatch.java | 1 + src/main/java/kekztech/Items.java | 1 - src/main/java/kekztech/MultiFluidHandler.java | 5 +- src/main/java/kekztech/MultiItemHandler.java | 185 ---- src/main/resources/assets/kekztech/lang/en_US.lang | 22 +- 24 files changed, 751 insertions(+), 1732 deletions(-) delete mode 100644 src/main/java/client/renderer/HatchRenderer.java delete mode 100644 src/main/java/common/blocks/Block_ItemServerDrive.java delete mode 100644 src/main/java/common/blocks/Block_ItemServerIOPort.java delete mode 100644 src/main/java/common/blocks/Block_ItemServerRackCasing.java delete mode 100644 src/main/java/common/itemBlocks/IB_ItemServerDrive.java delete mode 100644 src/main/java/common/itemBlocks/IB_ItemServerIOPort.java delete mode 100644 src/main/java/common/itemBlocks/IB_ItemServerRackCasing.java delete mode 100644 src/main/java/common/tileentities/GTMTE_ItemServer.java create mode 100644 src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java delete mode 100644 src/main/java/common/tileentities/TE_ItemServerIOPort.java delete mode 100644 src/main/java/kekztech/MultiItemHandler.java (limited to 'src/main/java/kekztech') diff --git a/GregTech.lang b/GregTech.lang index a0cbff982a..227be0de63 100644 --- a/GregTech.lang +++ b/GregTech.lang @@ -3578,9 +3578,18 @@ languagefile { S:TileEntity_DESCRIPTION_13107_Index_4=----------------------------------------- S:TileEntity_DESCRIPTION_13107_Index_5=Hold §l[LSHIFT]§r§7 to display structure guidelines S:TileEntity_DESCRIPTION_13107_Index_6=Created by Kekzdealer + S:TileEntity_DESCRIPTION_13108_Index_0=All-in-one access for the T.F.F.T + S:TileEntity_DESCRIPTION_13108_Index_1=Right-click with a screwdriver to toggle auto-output + S:TileEntity_DESCRIPTION_13108_Index_2=Throughput: 2000L/s per fluid + S:TileEntity_DESCRIPTION_13109_Index_0=All-in-one access for the T.F.F.T + S:TileEntity_DESCRIPTION_13109_Index_1=Right-click with a screwdriver to toggle auto-output + S:TileEntity_DESCRIPTION_13109_Index_2=Throughput: 20000L/s per fluid S:TileEntity_DESCRIPTION_1310_Index_0=Max Voltage: %s S:TileEntity_DESCRIPTION_1310_Index_1=Max Amperage: %s S:TileEntity_DESCRIPTION_1310_Index_2=Loss/Meter/Ampere: %s EU-Volt + S:TileEntity_DESCRIPTION_13110_Index_0=All-in-one access for the T.F.F.T + S:TileEntity_DESCRIPTION_13110_Index_1=Right-click with a screwdriver to toggle auto-output + S:TileEntity_DESCRIPTION_13110_Index_2=Throughput: 200000L/s per fluid S:TileEntity_DESCRIPTION_1311_Index_0=Max Voltage: %s S:TileEntity_DESCRIPTION_1311_Index_1=Max Amperage: %s S:TileEntity_DESCRIPTION_1311_Index_2=Loss/Meter/Ampere: %s EU-Volt @@ -13169,6 +13178,7 @@ languagefile { S:gt.blockmachines.machine.avr.tier.12.name=UMV AVR Micro-controller S:gt.blockmachines.machine.dehydrator.tier.00.name=Basic Dehydrator I S:gt.blockmachines.machine.dehydrator.tier.01.name=Basic Dehydrator II + S:gt.blockmachines.machine.multihatch.name=T.F.F.T Multi I/O Hatch [HV] S:gt.blockmachines.machine.tt.buck.05.name=Insane Buck Converter S:gt.blockmachines.machine.tt.buck.06.name=Ludicrous Buck Converter S:gt.blockmachines.machine.tt.buck.07.name=ZPM Voltage Buck Converter diff --git a/src/main/java/client/ClientProxy.java b/src/main/java/client/ClientProxy.java index c863198976..f608861c0d 100644 --- a/src/main/java/client/ClientProxy.java +++ b/src/main/java/client/ClientProxy.java @@ -1,6 +1,5 @@ package client; -import client.renderer.HatchRenderer; import client.renderer.TESR_SECapacitor; import client.renderer.TESR_SETether; import common.CommonProxy; @@ -26,7 +25,6 @@ public class ClientProxy extends CommonProxy { super.init(e); // Register Simple Block Renderers //RenderingRegistry.registerBlockHandler(ConduitRenderer.getInstance()); - RenderingRegistry.registerBlockHandler(HatchRenderer.getInstance()); } } diff --git a/src/main/java/client/renderer/HatchRenderer.java b/src/main/java/client/renderer/HatchRenderer.java deleted file mode 100644 index b2670af76b..0000000000 --- a/src/main/java/client/renderer/HatchRenderer.java +++ /dev/null @@ -1,102 +0,0 @@ -package client.renderer; - -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.client.registry.RenderingRegistry; -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.world.IBlockAccess; -import org.lwjgl.opengl.GL11; - -public class HatchRenderer implements ISimpleBlockRenderingHandler { - - public static final int RID = RenderingRegistry.getNextAvailableRenderId(); - private static final HatchRenderer INSTANCE = new HatchRenderer(); - - private HatchRenderer() { - - } - - public static HatchRenderer getInstance() { - return INSTANCE; - } - - @Override - public void renderInventoryBlock(Block block, int meta, int modelId, RenderBlocks renderer) { - block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - renderer.setRenderBoundsFromBlock(block); - final Tessellator t = Tessellator.instance; - GL11.glTranslatef(-0.5F, -0.5F, -0.5F); - t.startDrawingQuads(); - t.setNormal(0.0F, -1.0F, 0.0F); - renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(0, meta)); - t.draw(); - t.startDrawingQuads(); - t.setNormal(0.0F, 1.0F, 0.0F); - renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(1, meta)); - t.draw(); - t.startDrawingQuads(); - t.setNormal(1.0F, 0.0F, 0.0F); - renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(2, meta)); - t.draw(); - t.startDrawingQuads(); - t.setNormal(-1.0F, 0.0F, 0.0F); - renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(3, meta)); - t.draw(); - t.startDrawingQuads(); - t.setNormal(0.0F, 0.0F, 1.0F); - renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(5, meta)); - t.draw(); - t.startDrawingQuads(); - t.setNormal(0.0F, 0.0F, -1.0F); - renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(6, meta)); - t.draw(); - GL11.glTranslatef(0.5F, 0.5F, 0.5F); - } - - @Override - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, - RenderBlocks renderer) { - final Tessellator t = Tessellator.instance; - // Set colour - int mb = block.getMixedBrightnessForBlock(world, x, y, z); - t.setBrightness(mb); - - block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - renderer.setRenderBoundsFromBlock(block); - - if (block.shouldSideBeRendered(world, x, y - 1, z, 6)) { - renderer.renderFaceYNeg(block, x, y, z, block.getIcon(world, x, y, z, 0)); - } - if (block.shouldSideBeRendered(world, x, y + 1, z, 6)) { - t.setNormal(0.0F, 1.0F, 0.0F); - renderer.renderFaceYPos(block, x, y, z, block.getIcon(world, x, y, z, 1)); - } - - if (block.shouldSideBeRendered(world, x, y, z - 1, 6)) { - renderer.renderFaceZNeg(block, x, y, z, block.getIcon(world, x, y, z, 2)); - } - if (block.shouldSideBeRendered(world, x, y, z + 1, 6)) { - renderer.renderFaceZPos(block, x, y, z, block.getIcon(world, x, y, z, 3)); - } - - if (block.shouldSideBeRendered(world, x - 1, y, z, 6)) { - renderer.renderFaceXNeg(block, x, y, z, block.getIcon(world, x, y, z, 4)); - } - if (block.shouldSideBeRendered(world, x + 1, y, z, 6)) { - renderer.renderFaceXPos(block, x, y, z, block.getIcon(world, x, y, z, 5)); - } - - return false; - } - - @Override - public boolean shouldRender3DInInventory(int modelId) { - return true; - } - - @Override - public int getRenderId() { - return HatchRenderer.RID; - } -} diff --git a/src/main/java/common/Blocks.java b/src/main/java/common/Blocks.java index 18725b6000..bc8b2ff573 100644 --- a/src/main/java/common/Blocks.java +++ b/src/main/java/common/Blocks.java @@ -44,7 +44,6 @@ public class Blocks { registerBlocks_SOFC(); registerBlocks_TFFT(); registerBlocks_Nuclear(); - //registerBlocks_ItemServer(); //registerBlocks_ItemProxy(); registerBlocks_Jars(); registerBlocks_LSC(); @@ -73,13 +72,7 @@ public class Blocks { reactorChamberON = Block_ReactorChamber_ON.registerBlock(); reactorControlRod = Block_ControlRod.registerBlock(); } - - private static void registerBlocks_ItemServer() { - itemServerDrive = Block_ItemServerDrive.registerBlock(); - itemServerRackCasing = Block_ItemServerRackCasing.registerBlock(); - itemServerIOPort = Block_ItemServerIOPort.registerBlock(); - } - + private static void registerBlocks_ItemProxy() { itemProxyCable = Block_ItemProxyCable.registerBlock(); itemProxySource = Block_ItemProxySource.registerBlock(); diff --git a/src/main/java/common/Recipes.java b/src/main/java/common/Recipes.java index eaaad88570..b694805c96 100644 --- a/src/main/java/common/Recipes.java +++ b/src/main/java/common/Recipes.java @@ -35,7 +35,6 @@ public class Recipes { registerRecipes_TFFT(); registerRecipes_SOFC(); registerRecipes_Nuclear(); - //registerRecipes_ItemServer(); registerRecipes_Jars(); registerRecipes_LSC(); registerRecipes_SpaceElevator(); @@ -329,67 +328,6 @@ public class Recipes { null, 1200, 7680); } - private static void registerRecipes_ItemServer() { - - final MetaItem_CraftingComponent craftingItem = MetaItem_CraftingComponent.getInstance(); - - // Controller - final Object[] is_recipe = { - "FRF", "CGC", "PZP", - 'F', GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1), - 'R', GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.TungstenSteel, 1), - 'C', ItemList.Conveyor_Module_LuV.get(1L), - 'G', ItemList.Field_Generator_EV.get(1L), - 'P', GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 1), - 'Z', GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Master, 1) - }; - GT_ModHandler.addCraftingRecipe(TileEntities.is.getStackForm(1), is_recipe); - - // Blocks - final Object[] is_rack_recipe = { - "BRB", "CFC", "BRB", - 'B', GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlueSteel, 1), - 'R', GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Aluminium, 1), - 'C', GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Platinum, 1), - 'F', GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1), - }; - GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.itemServerRackCasing), is_rack_recipe); - final ItemStack[] is_ioport = { - GT_Utility.getIntegratedCircuit(6), - new ItemStack(Blocks.itemServerRackCasing), - GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Platinum, 16), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Platinum, 2), - ItemList.Field_Generator_HV.get(1L), - ItemList.Robot_Arm_EV.get(4L) - }; - GT_Values.RA.addAssemblerRecipe( - is_ioport, - FluidRegistry.getFluidStack("molten.polytetrafluoroethylene", 144), - new ItemStack(Blocks.itemServerIOPort, 1), - 200, 7680); - final Object[] is_blade = { - "CRC", "CMC", "HPH", - 'C', GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Elite, 1), - 'R', GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Aluminium, 1), - 'P', GT_OreDictUnificator.get(OrePrefixes.cableGt08, Materials.Platinum, 1), - 'M', ItemList.Electric_Motor_EV.get(1L), - 'H', craftingItem.getStackFromDamage(Items.BoronArsenideHeatPipe.getMetaID()), - }; - GT_ModHandler.addCraftingRecipe(craftingItem.getStackOfAmountFromDamage(Items.ItemServerBlade.getMetaID(), 8), is_blade); - final ItemStack[] is_drive = { - GT_Utility.getIntegratedCircuit(6), - craftingItem.getStackOfAmountFromDamage(Items.ItemServerBlade.getMetaID(), 8), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlueSteel, 4), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Aluminium, 1), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Aluminium, 16) - }; - GT_Values.RA.addAssemblerRecipe( - is_drive, - FluidRegistry.getFluidStack("molten.polyethylene", 1152), - new ItemStack(Blocks.itemServerDrive, 1), - 200, 7680); - } - private static void registerRecipes_Jars() { // Thaumium Reinforced Jar diff --git a/src/main/java/common/TileEntities.java b/src/main/java/common/TileEntities.java index 9e3a648667..35ac65d2e6 100644 --- a/src/main/java/common/TileEntities.java +++ b/src/main/java/common/TileEntities.java @@ -5,17 +5,20 @@ import cpw.mods.fml.common.registry.GameRegistry; public class TileEntities { + // Multiblock controllers public static GTMTE_SOFuelCellMK1 sofc1; public static GTMTE_SOFuelCellMK2 sofc2; public static GTMTE_ModularNuclearReactor mdr; public static GTMTE_FluidMultiStorage fms; - public static GTMTE_ItemServer is; public static GTMTE_LapotronicSuperCapacitor lsc; public static GTMTE_SpaceElevator se; - + // Singleblocks + public static GTMTE_TFFTMultiHatch mhHV; + public static GTMTE_TFFTMultiHatch mhIV; + public static GTMTE_TFFTMultiHatch mhZPM; + public static void preInit() { GameRegistry.registerTileEntity(TE_TFFTMultiHatch.class, "kekztech_tfftmultihatch_tile"); - //GameRegistry.registerTileEntity(TE_ItemServerIOPort.class, "kekztech_itemserverioport_tile"); GameRegistry.registerTileEntity(TE_ItemProxyCable.class, "kekztech_itemproxycable_tile"); GameRegistry.registerTileEntity(TE_ItemProxySource.class, "kekztech_itemproxysource_tile"); GameRegistry.registerTileEntity(TE_ItemProxyEndpoint.class, "kekztech_itemproxyendpoint_tile"); @@ -25,13 +28,17 @@ public class TileEntities { } public static void init() { + // Multiblock controllers sofc1 = new GTMTE_SOFuelCellMK1(13101, "multimachine.fuelcellmk1", "Solid-Oxide Fuel Cell Mk I"); sofc2 = new GTMTE_SOFuelCellMK2(13102, "multimachine.fuelcellmk2", "Solid-Oxide Fuel Cell Mk II"); mdr = new GTMTE_ModularNuclearReactor(13103, "multimachine.nuclearreactor", "Nuclear Reactor"); fms = new GTMTE_FluidMultiStorage(13104, "multimachine.tf_fluidtank", "T.F.F.T"); - //is = new GTMTE_ItemServer(13105, "multimachine.itemserver", "Item Server"); lsc = new GTMTE_LapotronicSuperCapacitor(13106, "multimachine.supercapacitor", "Lapotronic Supercapacitor"); se = new GTMTE_SpaceElevator(13107, "multimachine.spaceelevator", "Space Elevator"); + // Singleblocks + mhHV = new GTMTE_TFFTMultiHatch(13108, "machine.multihatch", "T.F.F.T Multi I/O Hatch [HV]", 3); + mhIV = new GTMTE_TFFTMultiHatch(13109, "machine.multihatch", "T.F.F.T Multi I/O Hatch [IV]", 5); + mhZPM = new GTMTE_TFFTMultiHatch(13110, "machine.multihatch", "T.F.F.T Multi I/O Hatch [ZPM]", 7); } } diff --git a/src/main/java/common/blocks/Block_ItemServerDrive.java b/src/main/java/common/blocks/Block_ItemServerDrive.java deleted file mode 100644 index 63747a8598..0000000000 --- a/src/main/java/common/blocks/Block_ItemServerDrive.java +++ /dev/null @@ -1,57 +0,0 @@ -package common.blocks; - -import common.itemBlocks.IB_ItemServerDrive; -import cpw.mods.fml.common.registry.GameRegistry; -import kekztech.KekzCore; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.util.IIcon; - -public class Block_ItemServerDrive extends BaseGTUpdateableBlock{ - - private static Block_ItemServerDrive instance = new Block_ItemServerDrive(); - - private IIcon[] faces = new IIcon[6]; - - private Block_ItemServerDrive() { - super(Material.iron); - } - - public static Block registerBlock() { - final String blockName = "kekztech_itemserverdrive_block"; - instance.setBlockName(blockName); - instance.setCreativeTab(CreativeTabs.tabMisc); - instance.setHardness(5.0f); - instance.setResistance(6.0f); - GameRegistry.registerBlock(instance, IB_ItemServerDrive.class, blockName); - - return instance; - } - - @Override - public void registerBlockIcons(IIconRegister reg) { - for(int i = 0; i < 6; i++) { - if(i == 0) { - faces[i] = reg.registerIcon(KekzCore.MODID + ":" + "ItemServerDrive_BOTTOM"); - } else if(i == 1) { - faces[i] = reg.registerIcon(KekzCore.MODID + ":" + "ItemServerDrive_TOP"); - } else { - faces[i] = reg.registerIcon(KekzCore.MODID + ":" + "ItemServerDrive"); - } - - } - } - - @Override - public IIcon getIcon(int side, int meta) { - return faces[side]; - } - - @Override - public int getLightValue() { - return 7; - } - -} diff --git a/src/main/java/common/blocks/Block_ItemServerIOPort.java b/src/main/java/common/blocks/Block_ItemServerIOPort.java deleted file mode 100644 index 6af90b6e42..0000000000 --- a/src/main/java/common/blocks/Block_ItemServerIOPort.java +++ /dev/null @@ -1,43 +0,0 @@ -package common.blocks; - -import common.itemBlocks.IB_ItemServerIOPort; -import common.tileentities.TE_ItemServerIOPort; -import cpw.mods.fml.common.registry.GameRegistry; -import kekztech.KekzCore; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -public class Block_ItemServerIOPort extends BaseGTUpdateableBlock { - - private static Block_ItemServerIOPort instance = new Block_ItemServerIOPort(); - - private Block_ItemServerIOPort() { - super(Material.iron); - } - - public static Block registerBlock() { - final String blockName = "kekztech_itemserverioport_block"; - instance.setBlockName(blockName); - instance.setCreativeTab(CreativeTabs.tabMisc); - instance.setBlockTextureName(KekzCore.MODID + ":" + "ItemServerIOPort"); - instance.setHardness(5.0f); - instance.setResistance(6.0f); - GameRegistry.registerBlock(instance, IB_ItemServerIOPort.class, blockName); - - return instance; - } - - @Override - public boolean hasTileEntity(int metadata) { - return true; - } - - @Override - public TileEntity createTileEntity(World world, int metadata) { - return new TE_ItemServerIOPort(); - } - -} diff --git a/src/main/java/common/blocks/Block_ItemServerRackCasing.java b/src/main/java/common/blocks/Block_ItemServerRackCasing.java deleted file mode 100644 index db0ec9c3e6..0000000000 --- a/src/main/java/common/blocks/Block_ItemServerRackCasing.java +++ /dev/null @@ -1,30 +0,0 @@ -package common.blocks; - -import common.itemBlocks.IB_ItemServerRackCasing; -import cpw.mods.fml.common.registry.GameRegistry; -import kekztech.KekzCore; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.creativetab.CreativeTabs; - -public class Block_ItemServerRackCasing extends BaseGTUpdateableBlock { - - private static Block_ItemServerRackCasing instance = new Block_ItemServerRackCasing(); - - private Block_ItemServerRackCasing() { - super(Material.iron); - } - - public static Block registerBlock() { - final String blockName = "kekztech_itemserverrackcasing_block"; - instance.setBlockName(blockName); - instance.setCreativeTab(CreativeTabs.tabMisc); - instance.setBlockTextureName(KekzCore.MODID + ":" + "ItemServerRackCasing"); - instance.setHardness(5.0f); - instance.setResistance(6.0f); - GameRegistry.registerBlock(instance, IB_ItemServerRackCasing.class, blockName); - - return instance; - } - -} diff --git a/src/main/java/common/blocks/Block_TFFTMultiHatch.java b/src/main/java/common/blocks/Block_TFFTMultiHatch.java index d2780c8c4b..37f9e47bcc 100644 --- a/src/main/java/common/blocks/Block_TFFTMultiHatch.java +++ b/src/main/java/common/blocks/Block_TFFTMultiHatch.java @@ -1,11 +1,8 @@ package common.blocks; -import client.renderer.HatchRenderer; import common.itemBlocks.IB_TFFTMultiHatch; import common.tileentities.TE_TFFTMultiHatch; import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.GregTech_API; import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_Utility; @@ -13,20 +10,17 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; -import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import thaumcraft.common.tiles.TileJarFillable; import java.util.List; +@Deprecated public class Block_TFFTMultiHatch extends BaseGTUpdateableBlock { private static final Block_TFFTMultiHatch INSTANCE = new Block_TFFTMultiHatch(); @@ -96,43 +90,6 @@ public class Block_TFFTMultiHatch extends BaseGTUpdateableBlock { return casing; } } - // ========= Leagris stuff - @Override - public boolean isSideSolid(IBlockAccess world, int x, int y, int z, ForgeDirection side) { - return true; - } - - @Override - public int getLightOpacity(IBlockAccess world, int x, int y, int z) { - return 255; - } - - @Override - public int getLightValue() { - return 0; - } - - @Override - public boolean recolourBlock(World world, int x, int y, int z, ForgeDirection side, int colour) { - return false; - } - - //============== Leagris over - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public int getRenderBlockPass() { - return 0; - } - - @Override - public int getRenderType() { - return HatchRenderer.RID; - } @Override public TileEntity createTileEntity(World world, int meta) { @@ -172,36 +129,4 @@ public class Block_TFFTMultiHatch extends BaseGTUpdateableBlock { return false; } - public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase placer, ItemStack stack) { - final int yaw = MathHelper.floor_double((double)(placer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - final int pitch = MathHelper.floor_double((double)(placer.rotationPitch * 4.0F / 360.0F) + 0.5D) & 3; - final TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof TE_TFFTMultiHatch) { - if(pitch == 0 || pitch == 2) { - if (yaw == 0) { - ((TE_TFFTMultiHatch)te).setFacingToSide((byte) 2); - } - - if (yaw == 1) { - ((TE_TFFTMultiHatch)te).setFacingToSide((byte) 5); - } - - if (yaw == 2) { - ((TE_TFFTMultiHatch)te).setFacingToSide((byte) 3); - } - - if (yaw == 3) { - ((TE_TFFTMultiHatch)te).setFacingToSide((byte) 4); - } - } else { - if(pitch == 1) { - ((TE_TFFTMultiHatch)te).setFacingToSide((byte) 1); - } else { - ((TE_TFFTMultiHatch)te).setFacingToSide((byte) 0); - } - } - } - - } - } diff --git a/src/main/java/common/itemBlocks/IB_ItemServerDrive.java b/src/main/java/common/itemBlocks/IB_ItemServerDrive.java deleted file mode 100644 index a937230da5..0000000000 --- a/src/main/java/common/itemBlocks/IB_ItemServerDrive.java +++ /dev/null @@ -1,22 +0,0 @@ -package common.itemBlocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; - -public class IB_ItemServerDrive extends ItemBlock { - - public IB_ItemServerDrive(Block block) { - super(block); - } - - @SuppressWarnings({"unchecked"}) - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List lines, boolean advancedTooltips) { - lines.add(StatCollector.translateToLocal("tile.kekztech_itemserverdrive_block.0.desc")); - } -} diff --git a/src/main/java/common/itemBlocks/IB_ItemServerIOPort.java b/src/main/java/common/itemBlocks/IB_ItemServerIOPort.java deleted file mode 100644 index 10803af14c..0000000000 --- a/src/main/java/common/itemBlocks/IB_ItemServerIOPort.java +++ /dev/null @@ -1,22 +0,0 @@ -package common.itemBlocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; - -public class IB_ItemServerIOPort extends ItemBlock { - - public IB_ItemServerIOPort(Block block) { - super(block); - } - - @SuppressWarnings({"unchecked"}) - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List lines, boolean advancedTooltips) { - lines.add(StatCollector.translateToLocal("tile.kekztech_itemserverioport_block.0.desc")); - } -} diff --git a/src/main/java/common/itemBlocks/IB_ItemServerRackCasing.java b/src/main/java/common/itemBlocks/IB_ItemServerRackCasing.java deleted file mode 100644 index f1da1fcb5e..0000000000 --- a/src/main/java/common/itemBlocks/IB_ItemServerRackCasing.java +++ /dev/null @@ -1,22 +0,0 @@ -package common.itemBlocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; - -public class IB_ItemServerRackCasing extends ItemBlock { - - public IB_ItemServerRackCasing(Block block) { - super(block); - } - - @SuppressWarnings({"unchecked"}) - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List lines, boolean advancedTooltips) { - lines.add(StatCollector.translateToLocal("tile.kekztech_itemserverrackcasing_block.0.desc=")); - } -} diff --git a/src/main/java/common/itemBlocks/IB_TFFTMultiHatch.java b/src/main/java/common/itemBlocks/IB_TFFTMultiHatch.java index c5ecdca46d..f00c5ef0c2 100644 --- a/src/main/java/common/itemBlocks/IB_TFFTMultiHatch.java +++ b/src/main/java/common/itemBlocks/IB_TFFTMultiHatch.java @@ -9,6 +9,7 @@ import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; +@Deprecated public class IB_TFFTMultiHatch extends ItemBlock { public IB_TFFTMultiHatch(Block block) { @@ -33,12 +34,6 @@ public class IB_TFFTMultiHatch extends ItemBlock { @SuppressWarnings({"unchecked"}) @Override public void addInformation(ItemStack stack, EntityPlayer player, List lines, boolean advancedTooltips) { - final int outputPerSecond = (int) (TE_TFFTMultiHatch.BASE_OUTPUT_PER_SECOND * Math.pow(10, stack.getItemDamage())); - lines.add(StatCollector.translateToLocal("tile.kekztech_tfftmultihatch_block.0.desc")); - lines.add(StatCollector.translateToLocal("tile.kekztech_tfftmultihatch_block.1.desc")); - lines.add(StatCollector.translateToLocal("tile.kekztech_tfftmultihatch_block.2.desc")); - lines.add(StatCollector.translateToLocal("tile.kekztech_tfftmultihatch_block.3.desc" ) - + " " + outputPerSecond + "L/s"); } } diff --git a/src/main/java/common/items/MetaItem_CraftingComponent.java b/src/main/java/common/items/MetaItem_CraftingComponent.java index ac57222b79..2b1c989831 100644 --- a/src/main/java/common/items/MetaItem_CraftingComponent.java +++ b/src/main/java/common/items/MetaItem_CraftingComponent.java @@ -14,7 +14,7 @@ import net.minecraft.util.IIcon; public class MetaItem_CraftingComponent extends Item { private static final MetaItem_CraftingComponent INSTANCE = new MetaItem_CraftingComponent(); - private final IIcon[] icons = new IIcon[17]; + private final IIcon[] icons = new IIcon[16]; private MetaItem_CraftingComponent() { } @@ -54,7 +54,6 @@ public class MetaItem_CraftingComponent extends Item { icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "CeriaDust"); icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "YSZCeramicPlate"); icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "GDCCeramicPlate"); - icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "ItemServerBlade"); } @Override diff --git a/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java b/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java index 1c32525c4e..e06d1cc4a6 100644 --- a/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java +++ b/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java @@ -1,531 +1,523 @@ -package common.tileentities; - -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.gui.GT_GUIContainer_MultiMachine; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.objects.GT_RenderedTexture; -import kekztech.MultiFluidHandler; -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import org.lwjgl.input.Keyboard; - -import common.Blocks; -import common.blocks.*; -import util.MultiBlockTooltipBuilder; -import util.Vector3i; -import util.Vector3ic; - -import java.util.ArrayList; -import java.util.HashSet; - -public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase { - - private final static String glassNameIC2Reinforced = "blockAlloyGlass"; - private final static Block CASING = Blocks.tfftCasing; - private final static Block_TFFTStorageFieldBlockT1 STORAGE_FIELD1 = (Block_TFFTStorageFieldBlockT1) Blocks.tfftStorageField1; - private final static Block_TFFTStorageFieldBlockT2 STORAGE_FIELD2 = (Block_TFFTStorageFieldBlockT2) Blocks.tfftStorageField2; - private final static Block_TFFTStorageFieldBlockT3 STORAGE_FIELD3 = (Block_TFFTStorageFieldBlockT3) Blocks.tfftStorageField3; - private final static Block_TFFTStorageFieldBlockT4 STORAGE_FIELD4 = (Block_TFFTStorageFieldBlockT4) Blocks.tfftStorageField4; - private final static Block_TFFTStorageFieldBlockT5 STORAGE_FIELD5 = (Block_TFFTStorageFieldBlockT5) Blocks.tfftStorageField5; - private final static Block MULTI_HATCH = Blocks.tfftMultiHatch; - private final static int CASING_TEXTURE_ID = 176; - - private MultiFluidHandler mfh; - private HashSet multiHatches = new HashSet<>(); - - private int runningCost = 0; - private boolean doVoidExcess = false; - private byte fluidSelector = 0; - - public GTMTE_FluidMultiStorage(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GTMTE_FluidMultiStorage(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) { - return new GTMTE_FluidMultiStorage(super.mName); - } - - @Override - public String[] getDescription() { - final MultiBlockTooltipBuilder b = new MultiBlockTooltipBuilder(); - b.addInfo("High-Tech fluid tank that can hold up to 25 different fluids!") - .addInfo("Has 1/25th of the total capacity as capacity for each fluid.") - .addInfo("Right clicking the controller with a screwdriver will turn on excess voiding.") - .addInfo("Fluid storage amount and running cost depends on the storage field blocks used.") - .addSeparator() - .addInfo("Note on hatch locking:") - .addInfo("Use an Integrated Circuit in the GUI slot to limit which fluid is output.") - .addInfo("The index of a stored fluid can be obtained through the Tricorder.") - .addSeparator() - .beginStructureBlock(5, 9, 5) - .addController("Top Center") - .addEnergyHatch("Any top or bottom casing") - .addOtherStructurePart("Inner 3x7x3 solid pillar", "Storage Field Blocks") - .addOtherStructurePart("Outer 5x7x5 glass shell", "IC2 Reinforced Glass") - .addMaintenanceHatch("Any top or bottom casing") - .addIOHatches("Instead of any casing or glass, have to touch storage field.") - .signAndFinalize("Kekzdealer"); - if (!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { - return b.getInformation(); - } else { - return b.getStructureInformation(); - } - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, - boolean aActive, boolean aRedstone) { - return aSide == aFacing - ? new ITexture[]{BlockIcons.casingTexturePages[1][48], - new GT_RenderedTexture(aActive - ? BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE - : BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR)} - : new ITexture[]{BlockIcons.casingTexturePages[1][48]}; - } - - public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { - return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(), - "MultiblockDisplay.png"); - } - - @Override - public boolean isCorrectMachinePart(ItemStack var1) { - return true; - } - - @Override - public boolean checkRecipe(ItemStack guiSlotItem) { - - super.mEfficiency = 10000 - (super.getIdealStatus() - super.getRepairStatus()) * 1000; - super.mEfficiencyIncrease = 10000; - super.mEUt = runningCost; - super.mMaxProgresstime = 10; - - if(guiSlotItem != null && guiSlotItem.getUnlocalizedName().equals("gt.integrated_circuit")) { - this.fluidSelector = (byte) guiSlotItem.getItemDamage(); - } - - // If there are no basic I/O hatches, let multi hatches handle it and skip a lot of code! - if (multiHatches.size() > 0 && super.mInputHatches.size() == 0 && super.mOutputHatches.size() == 0) { - return true; - } - - // Suck in fluids - final ArrayList inputHatchFluids = super.getStoredFluids(); - if (inputHatchFluids.size() > 0) { - - for (FluidStack fluidStack : inputHatchFluids) { - - final int pushed = mfh.pushFluid(fluidStack, true); - final FluidStack toDeplete = fluidStack.copy(); - toDeplete.amount = pushed; - super.depleteInput(toDeplete); - } - } - - // Push out fluids - if (guiSlotItem != null && guiSlotItem.getUnlocalizedName().equals("gt.integrated_circuit")) { - final FluidStack storedFluid = mfh.getFluid(fluidSelector); - // Sum available output capacity - int possibleOutput = 0; - for (GT_MetaTileEntity_Hatch_Output outputHatch : super.mOutputHatches) { - if (outputHatch.isFluidLocked() && outputHatch.getLockedFluidName().equals(storedFluid.getUnlocalizedName())) { - possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); - } else if (outputHatch.getFluid() != null && outputHatch.getFluid().getUnlocalizedName().equals(storedFluid.getUnlocalizedName())) { - possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); - } else if (outputHatch.getFluid() == null) { - possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); - } - } - // Output as much as possible - final FluidStack tempStack = storedFluid.copy(); - tempStack.amount = possibleOutput; - tempStack.amount = mfh.pullFluid(tempStack, fluidSelector, true); - super.addOutput(tempStack); - - } else { - for (FluidStack storedFluid : mfh.getFluids()) { - // Sum available output capacity - int possibleOutput = 0; - for (GT_MetaTileEntity_Hatch_Output outputHatch : super.mOutputHatches) { - if (outputHatch.isFluidLocked() && outputHatch.getLockedFluidName().equals(storedFluid.getUnlocalizedName())) { - possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); - } else if (outputHatch.getFluid() != null && outputHatch.getFluid().getUnlocalizedName().equals(storedFluid.getUnlocalizedName())) { - possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); - } else if (outputHatch.getFluid() == null) { - possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); - } - } - // output as much as possible - final FluidStack tempStack = storedFluid.copy(); - tempStack.amount = possibleOutput; - // TODO possible concurrent modification exception as pullFluid calls remove() without an iterator - tempStack.amount = mfh.pullFluid(tempStack, true); - super.addOutput(tempStack); - } - } - - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - - if (mfh != null) { - mfh.setLock(!super.getBaseMetaTileEntity().isActive()); - mfh.setFluidSelector(fluidSelector); - mfh.setDoVoidExcess(doVoidExcess); - } - } - - public Vector3ic rotateOffsetVector(Vector3ic forgeDirection, int x, int y, int z) { - final Vector3i offset = new Vector3i(); - - // either direction on z-axis - if (forgeDirection.x() == 0 && forgeDirection.z() == -1) { - offset.x = x; - offset.y = y; - offset.z = z; - } - if (forgeDirection.x() == 0 && forgeDirection.z() == 1) { - offset.x = -x; - offset.y = y; - offset.z = -z; - } - // either direction on x-axis - if (forgeDirection.x() == -1 && forgeDirection.z() == 0) { - offset.x = z; - offset.y = y; - offset.z = -x; - } - if (forgeDirection.x() == 1 && forgeDirection.z() == 0) { - offset.x = -z; - offset.y = y; - offset.z = x; - } - // either direction on y-axis - if (forgeDirection.y() == -1) { - offset.x = x; - offset.y = z; - offset.z = y; - } - - return offset; - } - - @Override - public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) { - // Figure out the vector for the direction the back face of the controller is facing - final Vector3ic forgeDirection = new Vector3i( - ForgeDirection.getOrientation(thisController.getBackFacing()).offsetX, - ForgeDirection.getOrientation(thisController.getBackFacing()).offsetY, - ForgeDirection.getOrientation(thisController.getBackFacing()).offsetZ - ); - int minCasingAmount = 20; - boolean formationChecklist = true; // If this is still true at the end, machine is good to go :) - float runningCostAcc = 0; - double fluidCapacityAcc = 0; - - multiHatches.clear(); - - // Front segment - for (int X = -2; X <= 2; X++) { - for (int Y = -2; Y <= 2; Y++) { - if (X == 0 && Y == 0) { - continue; // Skip controller - } - - // Get next TE - final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, 0); - final IGregTechTileEntity currentTE = - thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z()); - - // Fluid hatches should touch the storage field. - // Maintenance/Energy hatch can go anywhere - if (X > -2 && X < 2 && Y > -2 && Y < 2) { - if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID) - && !super.addInputToMachineList(currentTE, CASING_TEXTURE_ID) - && !super.addOutputToMachineList(currentTE, CASING_TEXTURE_ID) - && !super.addEnergyInputToMachineList(currentTE, CASING_TEXTURE_ID)) { - - final Block b = thisController.getBlockOffset(offset.x(), offset.y(), offset.z()); - - // If it's not a hatch, is it the right casing for this machine? Check block and block meta. - // Also check for multi hatch - if (b == CASING) { - // Seems to be valid casing. Decrement counter. - minCasingAmount--; - } else if (b == MULTI_HATCH) { - final TE_TFFTMultiHatch mh = - (TE_TFFTMultiHatch) thisController.getWorld().getTileEntity( - thisController.getXCoord() + offset.x(), - thisController.getYCoord() + offset.y(), - thisController.getZCoord() + offset.z()); - multiHatches.add(mh); - } else { - formationChecklist = false; - } - } - } else { - if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID) - && !super.addEnergyInputToMachineList(currentTE, CASING_TEXTURE_ID)) { - - // If it's not a hatch, is it the right casing for this machine? Check block and block meta. - if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { - // Seems to be valid casing. Decrement counter. - minCasingAmount--; - } else { - formationChecklist = false; - } - } - } - } - } - - // Middle seven long segment - for (int X = -2; X <= 2; X++) { - for (int Y = -2; Y <= 2; Y++) { - for (int Z = -1; Z >= -7; Z--) { - final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, Z); - if (X > -2 && X < 2 && Y > -2 && Y < 2) { - if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName() - .equals(STORAGE_FIELD1.getUnlocalizedName())) { - runningCostAcc += 0.5f; - fluidCapacityAcc += (float) Block_TFFTStorageFieldBlockT1.getCapacity(); - } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName() - .equals(STORAGE_FIELD2.getUnlocalizedName())) { - runningCostAcc += 1.0f; - fluidCapacityAcc += (float) Block_TFFTStorageFieldBlockT2.getCapacity(); - } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName() - .equals(STORAGE_FIELD3.getUnlocalizedName())) { - runningCostAcc += 2.0f; - fluidCapacityAcc += (float) Block_TFFTStorageFieldBlockT3.getCapacity(); - } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName() - .equals(STORAGE_FIELD4.getUnlocalizedName())) { - runningCostAcc += 4.0f; - fluidCapacityAcc += (float) Block_TFFTStorageFieldBlockT4.getCapacity(); - } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName() - .equals(STORAGE_FIELD5.getUnlocalizedName())) { - runningCostAcc += 8.0f; - fluidCapacityAcc += (float) Block_TFFTStorageFieldBlockT5.getCapacity(); - } else { - formationChecklist = false; - } - continue; - } - - // Get next TE - final IGregTechTileEntity currentTE = - thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z()); - - // Corner allows only glass - if (X == -2 && Y == -2 || X == 2 && Y == 2 || X == -2 && Y == 2 || X == 2 && Y == -2) { - if (!(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName().equals(glassNameIC2Reinforced))) { - formationChecklist = false; - } - } else { - // Tries to add TE as either of those kinds of hatches. - // The number is the texture index number for the texture that needs to be painted over the hatch texture (TAE for GT++) - if (!super.addInputToMachineList(currentTE, CASING_TEXTURE_ID) - && !super.addOutputToMachineList(currentTE, CASING_TEXTURE_ID)) { - - // If it's not a hatch, is it the right casing for this machine? Check block and block meta. - // Also check for multi hatch - if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { - // Seems to be valid casing. Decrement counter. - minCasingAmount--; - } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == MULTI_HATCH) { - final TE_TFFTMultiHatch mh = - (TE_TFFTMultiHatch) thisController.getWorld().getTileEntity( - thisController.getXCoord() + offset.x(), - thisController.getYCoord() + offset.y(), - thisController.getZCoord() + offset.z()); - multiHatches.add(mh); - } else if (!thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName().equals(glassNameIC2Reinforced)) { - formationChecklist = false; - } - } - } - } - } - } - - // Back segment - for (int X = -2; X <= 2; X++) { - for (int Y = -2; Y <= 2; Y++) { - // Get next TE - final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, -8); - final IGregTechTileEntity currentTE = - thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z()); - - // Fluid hatches should touch the storage field. - // Maintenance/Energy hatch can go anywhere - if (X > -2 && X < 2 && Y > -2 && Y < 2) { - if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID) - && !super.addInputToMachineList(currentTE, CASING_TEXTURE_ID) - && !super.addOutputToMachineList(currentTE, CASING_TEXTURE_ID) - && !super.addEnergyInputToMachineList(currentTE, CASING_TEXTURE_ID)) { - - // If it's not a hatch, is it the right casing for this machine? Check block and block meta. - if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { - // Seems to be valid casing. Decrement counter. - minCasingAmount--; - } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == MULTI_HATCH) { - final TE_TFFTMultiHatch mh = - (TE_TFFTMultiHatch) thisController.getWorld().getTileEntity( - thisController.getXCoord() + offset.x(), - thisController.getYCoord() + offset.y(), - thisController.getZCoord() + offset.z()); - multiHatches.add(mh); - } else { - formationChecklist = false; - } - } - } else { - if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID) - && !super.addEnergyInputToMachineList(currentTE, CASING_TEXTURE_ID)) { - - // If it's not a hatch, is it the right casing for this machine? Check block and block meta. - if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { - // Seems to be valid casing. Decrement counter. - minCasingAmount--; - } else { - formationChecklist = false; - } - } - } - } - } - - if (this.mEnergyHatches.size() < 1) { - formationChecklist = false; - } - - if (this.mMaintenanceHatches.size() < 1) { - formationChecklist = false; - } - - if (minCasingAmount > 0) { - formationChecklist = false; - } - - if (formationChecklist) { - runningCost = Math.round(-runningCostAcc); - // Update MultiFluidHandler in case storage cells have been changed - final int capacityPerFluid = (int) Math.round(fluidCapacityAcc / 25.0f); - if (mfh == null) { - mfh = new MultiFluidHandler(capacityPerFluid); - } else { - if (mfh.getCapacity() != capacityPerFluid) { - mfh = new MultiFluidHandler(capacityPerFluid, mfh.getFluids()); - } - } - for (TE_TFFTMultiHatch mh : multiHatches) { - mh.setMultiFluidHandler(mfh); - } - } - - return formationChecklist; - } - - @Override - public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (doVoidExcess) { - doVoidExcess = false; - aPlayer.addChatComponentMessage(new ChatComponentText("Auto-voiding turned off")); - } else { - doVoidExcess = true; - aPlayer.addChatComponentMessage(new ChatComponentText("Auto-voiding turned on")); - } - } - - @Override - public String[] getInfoData() { - final ArrayList ll = mfh.getInfoData(); - - ll.add(EnumChatFormatting.YELLOW + "Operational Data:" + EnumChatFormatting.RESET); - ll.add("Auto-voiding: " + doVoidExcess); - ll.add("Per-Fluid Capacity: " + mfh.getCapacity() + "L"); - ll.add("Running Cost: " - // mEUt does not naturally reflect efficiency status. Do that here. - + ((-super.mEUt) * 10000 / Math.max(1000, super.mEfficiency)) + "EU/t"); - ll.add("Maintenance Status: " + ((super.getRepairStatus() == super.getIdealStatus()) - ? EnumChatFormatting.GREEN + "Working perfectly" + EnumChatFormatting.RESET - : EnumChatFormatting.RED + "Has Problems" + EnumChatFormatting.RESET)); - ll.add("---------------------------------------------"); - - final String[] a = new String[ll.size()]; - return ll.toArray(a); - } - - @Override - public void saveNBTData(NBTTagCompound nbt) { - nbt = (nbt == null) ? new NBTTagCompound() : nbt; - - nbt.setInteger("runningCost", runningCost); - nbt.setBoolean("doVoidExcess", doVoidExcess); - - nbt.setInteger("capacityPerFluid", mfh.getCapacity()); - nbt.setTag("fluids", mfh.saveNBTData(new NBTTagCompound())); - - super.saveNBTData(nbt); - } - - @Override - public void loadNBTData(NBTTagCompound nbt) { - nbt = (nbt == null) ? new NBTTagCompound() : nbt; - - runningCost = nbt.getInteger("runningCost"); - doVoidExcess = nbt.getBoolean("doVoidExcess"); - - mfh = new MultiFluidHandler(); - mfh.loadNBTData(nbt); - for (TE_TFFTMultiHatch mh : multiHatches) { - mh.setMultiFluidHandler(mfh); - } - super.loadNBTData(nbt); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack var1) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack var1) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack var1) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack var1) { - return false; - } +package common.tileentities; + +import common.Blocks; +import common.blocks.*; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.gui.GT_GUIContainer_MultiMachine; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.*; +import gregtech.api.objects.GT_RenderedTexture; +import kekztech.MultiFluidHandler; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import org.lwjgl.input.Keyboard; +import util.MultiBlockTooltipBuilder; +import util.Vector3i; +import util.Vector3ic; + +import java.util.ArrayList; +import java.util.HashSet; + +public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase { + + private final static String glassNameIC2Reinforced = "blockAlloyGlass"; + private final static Block CASING = Blocks.tfftCasing; + private final static Block_TFFTStorageFieldBlockT1 STORAGE_FIELD1 = (Block_TFFTStorageFieldBlockT1) Blocks.tfftStorageField1; + private final static Block_TFFTStorageFieldBlockT2 STORAGE_FIELD2 = (Block_TFFTStorageFieldBlockT2) Blocks.tfftStorageField2; + private final static Block_TFFTStorageFieldBlockT3 STORAGE_FIELD3 = (Block_TFFTStorageFieldBlockT3) Blocks.tfftStorageField3; + private final static Block_TFFTStorageFieldBlockT4 STORAGE_FIELD4 = (Block_TFFTStorageFieldBlockT4) Blocks.tfftStorageField4; + private final static Block_TFFTStorageFieldBlockT5 STORAGE_FIELD5 = (Block_TFFTStorageFieldBlockT5) Blocks.tfftStorageField5; + private final static int CASING_TEXTURE_ID = 176; + + private MultiFluidHandler mfh; + private final HashSet sMultiHatches = new HashSet<>(); + + private int runningCost = 0; + private boolean doVoidExcess = false; + private byte fluidSelector = 0; + + public GTMTE_FluidMultiStorage(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public GTMTE_FluidMultiStorage(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) { + return new GTMTE_FluidMultiStorage(super.mName); + } + + @Override + public String[] getDescription() { + final MultiBlockTooltipBuilder b = new MultiBlockTooltipBuilder(); + b.addInfo("High-Tech fluid tank that can hold up to 25 different fluids!") + .addInfo("Has 1/25th of the total capacity as capacity for each fluid.") + .addInfo("Right clicking the controller with a screwdriver will turn on excess voiding.") + .addInfo("Fluid storage amount and running cost depends on the storage field blocks used.") + .addSeparator() + .addInfo("Note on hatch locking:") + .addInfo("Use an Integrated Circuit in the GUI slot to limit which fluid is output.") + .addInfo("The index of a stored fluid can be obtained through the Tricorder.") + .addSeparator() + .beginStructureBlock(5, 9, 5) + .addController("Top Center") + .addEnergyHatch("Any top or bottom casing") + .addOtherStructurePart("Inner 3x7x3 solid pillar", "Storage Field Blocks") + .addOtherStructurePart("Outer 5x7x5 glass shell", "IC2 Reinforced Glass") + .addMaintenanceHatch("Any top or bottom casing") + .addIOHatches("Instead of any casing or glass, have to touch storage field.") + .signAndFinalize("Kekzdealer"); + if (!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { + return b.getInformation(); + } else { + return b.getStructureInformation(); + } + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, + boolean aActive, boolean aRedstone) { + return aSide == aFacing + ? new ITexture[]{BlockIcons.casingTexturePages[1][48], + new GT_RenderedTexture(aActive + ? BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE + : BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR)} + : new ITexture[]{BlockIcons.casingTexturePages[1][48]}; + } + + public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { + return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(), + "MultiblockDisplay.png"); + } + + @Override + public boolean isCorrectMachinePart(ItemStack var1) { + return true; + } + + @Override + public boolean checkRecipe(ItemStack guiSlotItem) { + + super.mEfficiency = 10000 - (super.getIdealStatus() - super.getRepairStatus()) * 1000; + super.mEfficiencyIncrease = 10000; + super.mEUt = runningCost; + super.mMaxProgresstime = 10; + + if(guiSlotItem != null && guiSlotItem.getUnlocalizedName().equals("gt.integrated_circuit")) { + this.fluidSelector = (byte) guiSlotItem.getItemDamage(); + } + + // If there are no basic I/O hatches, let multi hatches handle it and skip a lot of code! + if (sMultiHatches.size() > 0 && super.mInputHatches.size() == 0 && super.mOutputHatches.size() == 0) { + return true; + } + + // Suck in fluids + final ArrayList inputHatchFluids = super.getStoredFluids(); + if (inputHatchFluids.size() > 0) { + + for (FluidStack fluidStack : inputHatchFluids) { + + final int pushed = mfh.pushFluid(fluidStack, true); + final FluidStack toDeplete = fluidStack.copy(); + toDeplete.amount = pushed; + super.depleteInput(toDeplete); + } + } + + // Push out fluids + if (guiSlotItem != null && guiSlotItem.getUnlocalizedName().equals("gt.integrated_circuit")) { + final FluidStack storedFluid = mfh.getFluid(fluidSelector); + // Sum available output capacity + int possibleOutput = 0; + for (GT_MetaTileEntity_Hatch_Output outputHatch : super.mOutputHatches) { + if (outputHatch.isFluidLocked() && outputHatch.getLockedFluidName().equals(storedFluid.getUnlocalizedName())) { + possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); + } else if (outputHatch.getFluid() != null && outputHatch.getFluid().getUnlocalizedName().equals(storedFluid.getUnlocalizedName())) { + possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); + } else if (outputHatch.getFluid() == null) { + possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); + } + } + // Output as much as possible + final FluidStack tempStack = storedFluid.copy(); + tempStack.amount = possibleOutput; + tempStack.amount = mfh.pullFluid(tempStack, fluidSelector, true); + super.addOutput(tempStack); + + } else { + for (FluidStack storedFluid : mfh.getFluids()) { + // Sum available output capacity + int possibleOutput = 0; + for (GT_MetaTileEntity_Hatch_Output outputHatch : super.mOutputHatches) { + if (outputHatch.isFluidLocked() && outputHatch.getLockedFluidName().equals(storedFluid.getUnlocalizedName())) { + possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); + } else if (outputHatch.getFluid() != null && outputHatch.getFluid().getUnlocalizedName().equals(storedFluid.getUnlocalizedName())) { + possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); + } else if (outputHatch.getFluid() == null) { + possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); + } + } + // output as much as possible + final FluidStack tempStack = storedFluid.copy(); + tempStack.amount = possibleOutput; + // TODO possible concurrent modification exception as pullFluid calls remove() without an iterator + tempStack.amount = mfh.pullFluid(tempStack, true); + super.addOutput(tempStack); + } + } + + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + + if (mfh != null) { + mfh.setLock(!super.getBaseMetaTileEntity().isActive()); + mfh.setFluidSelector(fluidSelector); + mfh.setDoVoidExcess(doVoidExcess); + } + } + + public Vector3ic rotateOffsetVector(Vector3ic forgeDirection, int x, int y, int z) { + final Vector3i offset = new Vector3i(); + + // either direction on z-axis + if (forgeDirection.x() == 0 && forgeDirection.z() == -1) { + offset.x = x; + offset.y = y; + offset.z = z; + } + if (forgeDirection.x() == 0 && forgeDirection.z() == 1) { + offset.x = -x; + offset.y = y; + offset.z = -z; + } + // either direction on x-axis + if (forgeDirection.x() == -1 && forgeDirection.z() == 0) { + offset.x = z; + offset.y = y; + offset.z = -x; + } + if (forgeDirection.x() == 1 && forgeDirection.z() == 0) { + offset.x = -z; + offset.y = y; + offset.z = x; + } + // either direction on y-axis + if (forgeDirection.y() == -1) { + offset.x = x; + offset.y = z; + offset.z = y; + } + + return offset; + } + + @Override + public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) { + // Figure out the vector for the direction the back face of the controller is facing + final Vector3ic forgeDirection = new Vector3i( + ForgeDirection.getOrientation(thisController.getBackFacing()).offsetX, + ForgeDirection.getOrientation(thisController.getBackFacing()).offsetY, + ForgeDirection.getOrientation(thisController.getBackFacing()).offsetZ + ); + int minCasingAmount = 20; + boolean formationChecklist = true; // If this is still true at the end, machine is good to go :) + float runningCostAcc = 0; + double fluidCapacityAcc = 0; + + sMultiHatches.clear(); + + // Front segment + for (int X = -2; X <= 2; X++) { + for (int Y = -2; Y <= 2; Y++) { + if (X == 0 && Y == 0) { + continue; // Skip controller + } + + // Get next TE + final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, 0); + final IGregTechTileEntity currentTE = + thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z()); + + // Fluid hatches should touch the storage field. + // Maintenance/Energy hatch can go anywhere + if (X > -2 && X < 2 && Y > -2 && Y < 2) { + if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID) + && !super.addInputToMachineList(currentTE, CASING_TEXTURE_ID) + && !super.addOutputToMachineList(currentTE, CASING_TEXTURE_ID) + && !super.addEnergyInputToMachineList(currentTE, CASING_TEXTURE_ID) + && !addMultiHatchToMachineList(currentTE, CASING_TEXTURE_ID)) { + + // If it's not a hatch, is it the right casing for this machine? Check block and block meta. + // Also check for multi hatch + if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { + // Seems to be valid casing. Decrement counter. + minCasingAmount--; + } else { + formationChecklist = false; + } + } + } else { + if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID) + && !super.addEnergyInputToMachineList(currentTE, CASING_TEXTURE_ID)) { + + // If it's not a hatch, is it the right casing for this machine? Check block and block meta. + if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { + // Seems to be valid casing. Decrement counter. + minCasingAmount--; + } else { + formationChecklist = false; + } + } + } + } + } + + // Middle seven long segment + for (int X = -2; X <= 2; X++) { + for (int Y = -2; Y <= 2; Y++) { + for (int Z = -1; Z >= -7; Z--) { + final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, Z); + if (X > -2 && X < 2 && Y > -2 && Y < 2) { + if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName() + .equals(STORAGE_FIELD1.getUnlocalizedName())) { + runningCostAcc += 0.5f; + fluidCapacityAcc += (float) Block_TFFTStorageFieldBlockT1.getCapacity(); + } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName() + .equals(STORAGE_FIELD2.getUnlocalizedName())) { + runningCostAcc += 1.0f; + fluidCapacityAcc += (float) Block_TFFTStorageFieldBlockT2.getCapacity(); + } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName() + .equals(STORAGE_FIELD3.getUnlocalizedName())) { + runningCostAcc += 2.0f; + fluidCapacityAcc += (float) Block_TFFTStorageFieldBlockT3.getCapacity(); + } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName() + .equals(STORAGE_FIELD4.getUnlocalizedName())) { + runningCostAcc += 4.0f; + fluidCapacityAcc += (float) Block_TFFTStorageFieldBlockT4.getCapacity(); + } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName() + .equals(STORAGE_FIELD5.getUnlocalizedName())) { + runningCostAcc += 8.0f; + fluidCapacityAcc += (float) Block_TFFTStorageFieldBlockT5.getCapacity(); + } else { + formationChecklist = false; + } + continue; + } + + // Get next TE + final IGregTechTileEntity currentTE = + thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z()); + + // Corner allows only glass + if (X == -2 && Y == -2 || X == 2 && Y == 2 || X == -2 && Y == 2 || X == 2 && Y == -2) { + if (!(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName().equals(glassNameIC2Reinforced))) { + formationChecklist = false; + } + } else { + // Tries to add TE as either of those kinds of hatches. + // The number is the texture index number for the texture that needs to be painted over the hatch texture (TAE for GT++) + if (!super.addInputToMachineList(currentTE, CASING_TEXTURE_ID) + && !super.addOutputToMachineList(currentTE, CASING_TEXTURE_ID) + && !addMultiHatchToMachineList(currentTE, CASING_TEXTURE_ID)) { + + // If it's not a hatch, is it the right casing for this machine? Check block and block meta. + // Also check for multi hatch + if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { + // Seems to be valid casing. Decrement counter. + minCasingAmount--; + } else if (!thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName().equals(glassNameIC2Reinforced)) { + formationChecklist = false; + } + } + } + } + } + } + + // Back segment + for (int X = -2; X <= 2; X++) { + for (int Y = -2; Y <= 2; Y++) { + // Get next TE + final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, -8); + final IGregTechTileEntity currentTE = + thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z()); + + // Fluid hatches should touch the storage field. + // Maintenance/Energy hatch can go anywhere + if (X > -2 && X < 2 && Y > -2 && Y < 2) { + if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID) + && !super.addInputToMachineList(currentTE, CASING_TEXTURE_ID) + && !super.addOutputToMachineList(currentTE, CASING_TEXTURE_ID) + && !super.addEnergyInputToMachineList(currentTE, CASING_TEXTURE_ID) + && !addMultiHatchToMachineList(currentTE, CASING_TEXTURE_ID)) { + + // If it's not a hatch, is it the right casing for this machine? Check block and block meta. + if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { + // Seems to be valid casing. Decrement counter. + minCasingAmount--; + } else { + formationChecklist = false; + } + } + } else { + if (!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID) + && !super.addEnergyInputToMachineList(currentTE, CASING_TEXTURE_ID)) { + + // If it's not a hatch, is it the right casing for this machine? Check block and block meta. + if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { + // Seems to be valid casing. Decrement counter. + minCasingAmount--; + } else { + formationChecklist = false; + } + } + } + } + } + + if (this.mEnergyHatches.size() < 1) { + formationChecklist = false; + } + + if (this.mMaintenanceHatches.size() != 1) { + formationChecklist = false; + } + + if (minCasingAmount > 0) { + formationChecklist = false; + } + + if (formationChecklist) { + runningCost = Math.round(-runningCostAcc); + // Update MultiFluidHandler in case storage cells have been changed + final int capacityPerFluid = (int) Math.round(fluidCapacityAcc / 25.0f); + if (mfh == null) { + mfh = new MultiFluidHandler(capacityPerFluid); + } else { + if (mfh.getCapacity() != capacityPerFluid) { + mfh = new MultiFluidHandler(capacityPerFluid, mfh.getFluids()); + } + } + for (GTMTE_TFFTMultiHatch mh : sMultiHatches) { + mh.setMultiFluidHandler(mfh); + } + } + + return formationChecklist; + } + + public boolean addMultiHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } else if (aMetaTileEntity instanceof GTMTE_TFFTMultiHatch) { + ((GTMTE_TFFTMultiHatch)aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.sMultiHatches.add((GTMTE_TFFTMultiHatch)aMetaTileEntity); + } else { + return false; + } + } + } + + @Override + public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (doVoidExcess) { + doVoidExcess = false; + aPlayer.addChatComponentMessage(new ChatComponentText("Auto-voiding turned off")); + } else { + doVoidExcess = true; + aPlayer.addChatComponentMessage(new ChatComponentText("Auto-voiding turned on")); + } + } + + @Override + public String[] getInfoData() { + final ArrayList ll = mfh.getInfoData(); + + ll.add(EnumChatFormatting.YELLOW + "Operational Data:" + EnumChatFormatting.RESET); + ll.add("Auto-voiding: " + doVoidExcess); + ll.add("Per-Fluid Capacity: " + mfh.getCapacity() + "L"); + ll.add("Running Cost: " + // mEUt does not naturally reflect efficiency status. Do that here. + + ((-super.mEUt) * 10000 / Math.max(1000, super.mEfficiency)) + "EU/t"); + ll.add("Maintenance Status: " + ((super.getRepairStatus() == super.getIdealStatus()) + ? EnumChatFormatting.GREEN + "Working perfectly" + EnumChatFormatting.RESET + : EnumChatFormatting.RED + "Has Problems" + EnumChatFormatting.RESET)); + ll.add("---------------------------------------------"); + + final String[] a = new String[ll.size()]; + return ll.toArray(a); + } + + @Override + public void saveNBTData(NBTTagCompound nbt) { + nbt = (nbt == null) ? new NBTTagCompound() : nbt; + + nbt.setInteger("runningCost", runningCost); + nbt.setBoolean("doVoidExcess", doVoidExcess); + + nbt.setInteger("capacityPerFluid", mfh.getCapacity()); + nbt.setTag("fluids", mfh.saveNBTData(new NBTTagCompound())); + + super.saveNBTData(nbt); + } + + @Override + public void loadNBTData(NBTTagCompound nbt) { + nbt = (nbt == null) ? new NBTTagCompound() : nbt; + + runningCost = nbt.getInteger("runningCost"); + doVoidExcess = nbt.getBoolean("doVoidExcess"); + + mfh = new MultiFluidHandler(); + mfh.loadNBTData(nbt); + for (GTMTE_TFFTMultiHatch mh : sMultiHatches) { + mh.setMultiFluidHandler(mfh); + } + super.loadNBTData(nbt); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack var1) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack var1) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack var1) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack var1) { + return false; + } } \ No newline at end of file diff --git a/src/main/java/common/tileentities/GTMTE_ItemServer.java b/src/main/java/common/tileentities/GTMTE_ItemServer.java deleted file mode 100644 index cfff360ce4..0000000000 --- a/src/main/java/common/tileentities/GTMTE_ItemServer.java +++ /dev/null @@ -1,393 +0,0 @@ -package common.tileentities; - -import java.util.ArrayList; -import java.util.HashSet; - -import org.lwjgl.input.Keyboard; - -import common.Blocks; -import common.blocks.Block_ItemServerDrive; -import common.blocks.Block_ItemServerIOPort; -import common.blocks.Block_ItemServerRackCasing; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.gui.GT_GUIContainer_MultiMachine; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.objects.GT_RenderedTexture; -import kekztech.MultiItemHandler; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import util.MultiBlockTooltipBuilder; -import util.Vector3i; -import util.Vector3ic; - -public class GTMTE_ItemServer extends GT_MetaTileEntity_MultiBlockBase { - - private static final int BASE_SEGMENT_ENERGY_COST = 1; - private static final int BASE_PER_ITEM_CAPACITY = 1024; - private static final int BASE_ITEM_TYPES_PER_SEGMENT = 4; - - private final Block_ItemServerDrive DRIVE = (Block_ItemServerDrive) Blocks.itemServerDrive; - private final Block_ItemServerRackCasing CASING = (Block_ItemServerRackCasing) Blocks.itemServerRackCasing; - private final Block_ItemServerIOPort IO_PORT = (Block_ItemServerIOPort) Blocks.itemServerIOPort; - private final String ALU_FRAME_BOX_NAME = "gt.blockmachines"; - private final int ALU_FRAME_BOX_META = 6; - private final int CASING_TEXTURE_ID = 176; - - private MultiItemHandler mih; - private HashSet ioPorts = new HashSet<>(); - private int sliceCount = 0; - - public GTMTE_ItemServer(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GTMTE_ItemServer(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) { - return new GTMTE_ItemServer(super.mName); - } - - @Override - public String[] getDescription() { - final MultiBlockTooltipBuilder b = new MultiBlockTooltipBuilder(); - b.addInfo("[W.I.P - Probably doesn't work]") - .addInfo("High-Tech item storage!") - .addInfo("Variable length: Slices 2-4 can be repeated as long as the total length does not exceed 16 blocks.") - .addInfo("Each segment offers storage for 128 item types") - .addInfo("Storage capacity per item depends on the controller configuration.") - .addInfo("Insert an Integrated Circuit into the controller with your desired configuration.") - .addInfo("The base configuration (0) is 1024 items per type. For each higher level, the capacity quadruples.") - .addInfo("Each slice also adds 1EU/t of power consumption and doubles with rising configuration values.") - .addInfo("Valid config values are from zero to eight.") - .addSeparator() - .beginStructureBlock(3, 5, 4) - .addController("Front Bottom Center") - .addEnergyHatch("Any casing") - .addOtherStructurePart("Front slice", "3x5x1 Item Server Rack Casing") - .addOtherStructurePart("2nd and 3rd slice, center", "1x4x1 Aluminium Frame Box") - .addOtherStructurePart("2nd and 3rd slice, top", "3x1x1 Item Server Rack Casing") - .addOtherStructurePart("2nd and 3rd slice, sides", "2x 1x4x1 Item Server Drive") - .addOtherStructurePart("Back slice", "3x5x1 Item Server Rack Casing") - .signAndFinalize("Kekzdealer"); - if(!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { - return b.getInformation(); - } else { - return b.getStructureInformation(); - } - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, byte aSide, byte aFacing, byte aColorIndex, - boolean aActive, boolean aRedstone) { - return aSide == aFacing - ? new ITexture[]{BlockIcons.casingTexturePages[1][48], - new GT_RenderedTexture(aActive - ? BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE - : BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR)} - : new ITexture[]{BlockIcons.casingTexturePages[1][48]}; - } - - public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { - return new GT_GUIContainer_MultiMachine(aPlayerInventory, aBaseMetaTileEntity, this.getLocalName(), - "MultiblockDisplay.png"); - } - - @Override - public boolean isCorrectMachinePart(ItemStack var1) { - return true; - } - - @Override - public boolean checkRecipe(ItemStack guiSlotItem) { - final int config = (guiSlotItem != null && guiSlotItem.getUnlocalizedName().equals("gt.integrated_circuit")) - ? Math.min(8, guiSlotItem.getItemDamage()) : 0; - - this.mEfficiency = 10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000; - this.mEfficiencyIncrease = 10000; - this.mEUt = (int) -(BASE_SEGMENT_ENERGY_COST * sliceCount * Math.pow(2, config)); - super.mMaxProgresstime = 20; - - mih.setPerTypeCapacity((int) (BASE_PER_ITEM_CAPACITY * Math.pow(4, config))); - - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - - if(mih != null) { - mih.setLock(!super.getBaseMetaTileEntity().isActive()); - } - } - - public Vector3ic rotateOffsetVector(Vector3ic forgeDirection, int x, int y, int z) { - final Vector3i offset = new Vector3i(); - - // either direction on z-axis - if(forgeDirection.x() == 0 && forgeDirection.z() == -1) { - offset.x = x; - offset.y = y; - offset.z = z; - } - if(forgeDirection.x() == 0 && forgeDirection.z() == 1) { - offset.x = -x; - offset.y = y; - offset.z = -z; - } - // either direction on x-axis - if(forgeDirection.x() == -1 && forgeDirection.z() == 0) { - offset.x = z; - offset.y = y; - offset.z = -x; - } - if(forgeDirection.x() == 1 && forgeDirection.z() == 0) { - offset.x = -z; - offset.y = y; - offset.z = x; - } - - return offset; - } - - @Override - public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) { - // Figure out the vector for the direction the back face of the controller is facing - final Vector3ic forgeDirection = new Vector3i( - ForgeDirection.getOrientation(thisController.getBackFacing()).offsetX, - ForgeDirection.getOrientation(thisController.getBackFacing()).offsetY, - ForgeDirection.getOrientation(thisController.getBackFacing()).offsetZ - ); - boolean formationChecklist = true; - - // Front slice - for(int X = -1; X <= 1; X++) { - for(int Y = 0; Y <= 4; Y++) { - if(X == 0 && Y == 0) { - continue; // is controller - } - - // Get next TE - final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, 0); - IGregTechTileEntity currentTE = - thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z()); - - if(!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID) - && !super.addEnergyInputToMachineList(currentTE, CASING_TEXTURE_ID)) { - - // Is casing or IO port? - if(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { - // Is casing, but there's no casing requirements - } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == IO_PORT) { - final TE_ItemServerIOPort port = - (TE_ItemServerIOPort) thisController.getWorld().getTileEntity( - thisController.getXCoord() + offset.x(), - thisController.getYCoord() + offset.y(), - thisController.getZCoord() + offset.z()); - ioPorts.add(port); - } else { - formationChecklist = false; - } - } - } - } - - // Check slices - int segmentsFound = 0; - int zOffset = -1; // -1 is the first slice after the front one. It goes in negative direction. - - while(segmentsFound < 5) { - if(checkSegment(thisController, forgeDirection, zOffset)) { - segmentsFound++; - zOffset -= 3; // Each segment is 3 blocks long, so progress Z by -3 - - System.out.println("Item Server segment approved: " + segmentsFound); - } else { - System.out.println("Item Server segment rejected: " + (segmentsFound + 1)); - break; - } - } - - if(segmentsFound < 1) { - System.out.println("At least one slice required for storage"); - formationChecklist = false; - } - - if(this.mEnergyHatches.size() < 1) { - System.out.println("At least one energy hatch is required!"); - formationChecklist = false; - } - - if(this.mMaintenanceHatches.size() < 1) { - System.out.println("You need a maintenance hatch to do maintenance."); - formationChecklist = false; - } - - if(formationChecklist) { - sliceCount = segmentsFound; - - if(mih == null) { - mih = new MultiItemHandler(); - mih.setItemTypeCapacity(segmentsFound * BASE_ITEM_TYPES_PER_SEGMENT); - } - System.out.println("Configuring " + ioPorts.size() + " ports"); - for(TE_ItemServerIOPort port : ioPorts) { - port.setMultiItemHandler(mih); - } - } - - return formationChecklist; - } - - public boolean checkSegment(IGregTechTileEntity thisController, Vector3ic forgeDirection, int zOffset) { - boolean formationChecklist = true; - // Slice by slice - for(int Z = 0; Z >= -2; Z--) { - // Is not back slice - if(Z != -2) { - // Left to right - for(int X = -1; X <= 1; X++) { - // Bottom to top - for(int Y = 0; Y <= 4; Y++) { - final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, zOffset + Z); - - // Server rack roof - if(Y == 4) { - final IGregTechTileEntity currentTE = - thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z()); - - if(!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID) - && !super.addEnergyInputToMachineList(currentTE, CASING_TEXTURE_ID)) { - // Is casing or IO port? - if(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { - // Is casing, but there's no casing requirements - } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == IO_PORT) { - final TE_ItemServerIOPort port = - (TE_ItemServerIOPort) thisController.getWorld().getTileEntity( - thisController.getXCoord() + offset.x(), - thisController.getYCoord() + offset.y(), - thisController.getZCoord() + offset.z()); - ioPorts.add(port); - } else { - formationChecklist = false; - } - } - } - - // Middle wall is aluminium frame boxes - else if(Y <= 3 && X == 0) { - if(!(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()).getUnlocalizedName().equals(ALU_FRAME_BOX_NAME)) - || !(thisController.getMetaIDOffset(offset.x(), offset.y(), offset.z()) == ALU_FRAME_BOX_META)) { - formationChecklist = false; - } - } - - // Side walls are item server drives - else if(Y <= 3 && X != 0) { - if(!(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == DRIVE)) { - formationChecklist = false; - } - } - } - } - } else { - // Back slice - for(int X = -1; X <= 1; X++) { - for(int Y = 0; Y <= 4; Y++) { - - final Vector3ic offset = rotateOffsetVector(forgeDirection, X, Y, zOffset + Z); - IGregTechTileEntity currentTE = - thisController.getIGregTechTileEntityOffset(offset.x(), offset.y(), offset.z()); - - if(!super.addMaintenanceToMachineList(currentTE, CASING_TEXTURE_ID) - && !super.addEnergyInputToMachineList(currentTE, CASING_TEXTURE_ID)) { - // Is casing or IO port? - if(thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == CASING) { - // Is casing, but there's no casing requirements - } else if (thisController.getBlockOffset(offset.x(), offset.y(), offset.z()) == IO_PORT) { - final TE_ItemServerIOPort port = - (TE_ItemServerIOPort) thisController.getWorld().getTileEntity( - thisController.getXCoord() + offset.x(), - thisController.getYCoord() + offset.y(), - thisController.getZCoord() + offset.z()); - ioPorts.add(port); - } else { - formationChecklist = false; - } - } - } - } - } - } - - - return formationChecklist; - } - - @Override - public String[] getInfoData() { - final ArrayList ll = new ArrayList<>();//mfh.getInfoData(); - - ll.add(EnumChatFormatting.YELLOW + "Operational Data:" + EnumChatFormatting.RESET); - ll.add("Per-Item Capacity: " + mih.getPerTypeCapacity()); - ll.add("Item-Type Capacity: " + BASE_ITEM_TYPES_PER_SEGMENT * sliceCount); - ll.add("Running Cost: " - // mEUt does not naturally reflect efficiency status. Do that here. - + ((-super.mEUt) * 10000 / Math.max(1000, super.mEfficiency)) + "EU/t"); - ll.add("Maintenance Status: " + ((super.getRepairStatus() == super.getIdealStatus()) - ? EnumChatFormatting.GREEN + "Working perfectly" + EnumChatFormatting.RESET - : EnumChatFormatting.RED + "Has Problems" + EnumChatFormatting.RESET)); - ll.add("---------------------------------------------"); - - final String[] a = new String[ll.size()]; - return ll.toArray(a); - } - - @Override - public void saveNBTData(NBTTagCompound nbt) { - nbt = (nbt == null) ? new NBTTagCompound() : nbt; - - super.saveNBTData(nbt); - } - - @Override - public void loadNBTData(NBTTagCompound nbt) { - nbt = (nbt == null) ? new NBTTagCompound() : nbt; - - super.loadNBTData(nbt); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack var1) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack var1) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack var1) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack var1) { - return false; - } -} diff --git a/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java b/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java new file mode 100644 index 0000000000..529a948dbe --- /dev/null +++ b/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java @@ -0,0 +1,196 @@ +package common.tileentities; + +import gregtech.api.GregTech_API; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_Utility; +import kekztech.MultiFluidHandler; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import java.util.HashMap; + +public class GTMTE_TFFTMultiHatch extends GT_MetaTileEntity_Hatch { + + private static final HashMap vals = new HashMap<>(); + static { + vals.put(3, 2000); + vals.put(5, 20000); + vals.put(7, 200000); + } + private static final int INV_SLOT_COUNT = 2; + + private MultiFluidHandler mfh; + private boolean outputting = false; + + public GTMTE_TFFTMultiHatch(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, INV_SLOT_COUNT, new String[] { + "All-in-one access for the T.F.F.T", + "Right-click with a screwdriver to toggle auto-output", + "Throughput: " + vals.get(aTier) + "L/s per fluid"} + ); + } + + public GTMTE_TFFTMultiHatch(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, INV_SLOT_COUNT, aDescription, aTextures); + } + + public GTMTE_TFFTMultiHatch(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, INV_SLOT_COUNT, aDescription, aTextures); + } + + public void setMultiFluidHandler(MultiFluidHandler mfh) { + this.mfh = mfh; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("outputting", outputting); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + outputting = aNBT.getBoolean("outputting"); + } + + @Override + public ITexture[] getTexturesActive(ITexture iTexture) { + return new ITexture[0]; + } + + @Override + public ITexture[] getTexturesInactive(ITexture iTexture) { + return new ITexture[0]; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new GTMTE_TFFTMultiHatch(super.mName, super.mTier, super.mDescriptionArray, super.mTextures); + } + + @Override + public boolean isMachineBlockUpdateRecursive() { + return false; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (GT_Utility.isStackInList(aPlayer.getHeldItem(), GregTech_API.sScrewdriverList)) { + if (GT_ModHandler.damageOrDechargeItem(aPlayer.getHeldItem(), 1, 200, aPlayer)) { + outputting = !outputting; + GT_Utility.sendSoundToPlayers(aBaseMetaTileEntity.getWorld(), GregTech_API.sSoundList.get(100), + 1.0F, -1.0F, + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord() + ); + // Give chat feedback + GT_Utility.sendChatToPlayer(aPlayer, outputting ? "Auto-output enabled" : "Auto-output disabled"); + } + return true; + } + return false; + } + + @Override + public boolean doesFillContainers() { + return true; + } + + @Override + public boolean doesEmptyContainers() { + return true; + } + + @Override + public int getCapacity() { + return (mfh != null) ? mfh.getCapacity() : 0; + } + + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide() && mfh != null) { + // Handle emptying containers + final FluidStack fluidFromCell = GT_Utility.getFluidForFilledItem(super.mInventory[super.getInputSlot()], true); + // Check if fluid is not null, could be inserted, and if there is space for the empty container + if (fluidFromCell != null && mfh.couldPush(fluidFromCell) + && aBaseMetaTileEntity.addStackToSlot(super.getOutputSlot(), GT_Utility.getContainerItem(super.mInventory[super.getInputSlot()], true), 1)) { + // Consume one filled container if it was emptied successfully + if(mfh.pushFluid(fluidFromCell, true) == fluidFromCell.amount) { + aBaseMetaTileEntity.decrStackSize(this.getInputSlot(), 1); + } + } + // Handle filling containers. This will use the selected T.F.F.T fluid + final ItemStack cellFromFluid = GT_Utility.fillFluidContainer( + mfh.getFluid(mfh.getSelectedFluid()), super.mInventory[super.getInputSlot()], false, true); + // Check if cell is not null and if there is space for the filled container + if (cellFromFluid != null && aBaseMetaTileEntity.addStackToSlot(super.getOutputSlot(), cellFromFluid, 1)) { + // Convert back to FluidStack to learn the container capacity... + final FluidStack fluidCapacityStack = GT_Utility.getFluidForFilledItem(cellFromFluid, true); + // Consume one empty container if it was filled successfully + if(mfh.pullFluid(fluidCapacityStack, true) == fluidCapacityStack.amount) { + aBaseMetaTileEntity.decrStackSize(this.getInputSlot(), 1); + } + } + } + } + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { + return (mfh != null) ? mfh.pushFluid(resource, doFill) : 0; + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { + return (mfh != null) ? new FluidStack(resource.getFluid(), mfh.pullFluid(resource, doDrain)) : null; + } + + /** + * Drains fluid out of 0th internal tank. + * If the TFFT Controller contains an Integrated Circuit, drain fluid + * from the slot equal to the circuit configuration. + * + * @param from + * Orientation the fluid is drained to. + * @param maxDrain + * Maximum amount of fluid to drain. + * @param doDrain + * If false, drain will only be simulated. + * @return FluidStack representing the Fluid and amount that was (or would have been, if + * simulated) drained. + */ + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { + if(mfh != null) { + final FluidStack drain = mfh.getFluid(0); + if(drain != null) { + // If there's no integrated circuit in the T.F.F.T. controller, output slot 0 + final byte selectedSlot = (mfh.getSelectedFluid() == -1) ? 0 : mfh.getSelectedFluid(); + + return new FluidStack( + drain.getFluid(), + mfh.pullFluid(new FluidStack(drain.getFluid(), maxDrain), selectedSlot, doDrain) + ); + } + } + return null; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) { + return aSide == aBaseMetaTileEntity.getFrontFacing() && aIndex == super.getOutputSlot(); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) { + return aSide == aBaseMetaTileEntity.getFrontFacing() && aIndex == super.getInputSlot(); + } + +} diff --git a/src/main/java/common/tileentities/TE_ItemServerIOPort.java b/src/main/java/common/tileentities/TE_ItemServerIOPort.java deleted file mode 100644 index 0e96ff75b9..0000000000 --- a/src/main/java/common/tileentities/TE_ItemServerIOPort.java +++ /dev/null @@ -1,145 +0,0 @@ -package common.tileentities; - -import kekztech.MultiItemHandler; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; - -public class TE_ItemServerIOPort extends TileEntity implements ISidedInventory { - - private MultiItemHandler mih; - - private int tickCounter = 0; - - public void setMultiItemHandler(MultiItemHandler mih) { - this.mih = mih; - } - - @Override - public void updateEntity() { - if(mih != null) { - - tickCounter++; - if(tickCounter >= 40) { - mih.debugPrint(); - tickCounter = 0; - } - } - } - - @Override - public int getSizeInventory() { - return (mih != null) ? mih.getItemTypeCapacity() : 0; - } - - @Override - public ItemStack getStackInSlot(int slot) { - return (mih != null) ? mih.getStackInSlot(slot) : null; - } - - @Override - public ItemStack decrStackSize(int slot, int amount) { - if(mih != null) { - if(mih.getStackInSlot(slot) != null) { - final ItemStack obtained = mih.getStackInSlot(slot).copy(); - obtained.stackSize = mih.reduceStackInSlot(slot, amount); - super.markDirty(); - return obtained; - } else { - return null; - } - } else { - return null; - } - } - - @Override - public ItemStack getStackInSlotOnClosing(int slot) { - return null; - } - - @Override - public void setInventorySlotContents(int slot, ItemStack itemStack) { - System.out.println("Set slot: " + slot); - if(mih != null) { - if(itemStack == null) { - return; - } else { - if(!mih.insertStackInSlot(slot, itemStack)) { - final int delta = itemStack.stackSize - mih.getStackInSlot(slot).stackSize; - if(delta < 0) { - System.out.println("Set slot reduce: " + itemStack.getDisplayName()); - mih.reduceStackInSlot(slot, delta); - } else { - System.out.println("Set slot increase: " + itemStack.getDisplayName()); - mih.increaseStackInSlot(slot, delta); - } - - } else { - System.out.println("Allocated new slot for: " + itemStack.getDisplayName()); - } - super.markDirty(); - } - } - } - - @Override - public String getInventoryName() { - return "Item Server IO Port"; - } - - @Override - public boolean hasCustomInventoryName() { - return true; - } - - @Override - public int getInventoryStackLimit() { - return (mih != null) ? mih.getPerTypeCapacity() : 0; - } - - @Override - public boolean isUseableByPlayer(EntityPlayer player) { - return true; - } - - @Override - public void openInventory() { - - } - - @Override - public void closeInventory() { - - } - - @Override - public boolean isItemValidForSlot(int slot, ItemStack itemStack) { - return (mih != null) ? (mih.getStackInSlot(slot).isItemEqual(itemStack) || mih.getStackInSlot(slot) == null) : false; - } - - @Override - public int[] getAccessibleSlotsFromSide(int side) { - if(mih != null) { - final int[] as = new int[mih.getItemTypeCapacity()]; - for(int i = 0; i < mih.getItemTypeCapacity(); i++) { - as[i] = i; - } - return as; - } else { - return new int[1]; - } - } - - @Override - public boolean canInsertItem(int slot, ItemStack itemStack, int side) { - return isItemValidForSlot(slot, itemStack); - } - - @Override - public boolean canExtractItem(int slot, ItemStack itemStack, int side) { - return (mih != null) ? true : false; - } - -} diff --git a/src/main/java/common/tileentities/TE_TFFTMultiHatch.java b/src/main/java/common/tileentities/TE_TFFTMultiHatch.java index 161cad3110..823d456b56 100644 --- a/src/main/java/common/tileentities/TE_TFFTMultiHatch.java +++ b/src/main/java/common/tileentities/TE_TFFTMultiHatch.java @@ -14,6 +14,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; +@Deprecated public class TE_TFFTMultiHatch extends TileEntity implements IFluidHandler { public static final int BASE_OUTPUT_PER_SECOND = 2000; // L/s diff --git a/src/main/java/kekztech/Items.java b/src/main/java/kekztech/Items.java index 66a8f996e3..59873f88a0 100644 --- a/src/main/java/kekztech/Items.java +++ b/src/main/java/kekztech/Items.java @@ -40,7 +40,6 @@ public enum Items { YSZCeramicDust(9,1), GDCCeramicDust(10,1), YttriaDust(11,1), ZirconiaDust(12,1), CeriaDust(13,1), YSZCeramicPlate(14,1), GDCCeramicPlate(15,1), - ItemServerBlade(16,1), // Error Item Error(0,1), // Configurator diff --git a/src/main/java/kekztech/MultiFluidHandler.java b/src/main/java/kekztech/MultiFluidHandler.java index f1a527b2c0..1d8f4c2fea 100644 --- a/src/main/java/kekztech/MultiFluidHandler.java +++ b/src/main/java/kekztech/MultiFluidHandler.java @@ -70,14 +70,15 @@ public class MultiFluidHandler { public int getCapacity() { return capacityPerFluid; } - + + // TODO return deep copy instead public List getFluids(){ return (!locked) ? fluids : new ArrayList<>(); } public FluidStack getFluid(int slot) { return (!locked && fluids.size() > 0 && slot >= 0 && slot < MAX_DISTINCT_FLUIDS) - ? fluids.get(slot) : null; + ? fluids.get(slot).copy() : null; } public NBTTagCompound saveNBTData(NBTTagCompound nbt) { diff --git a/src/main/java/kekztech/MultiItemHandler.java b/src/main/java/kekztech/MultiItemHandler.java deleted file mode 100644 index 27d936efec..0000000000 --- a/src/main/java/kekztech/MultiItemHandler.java +++ /dev/null @@ -1,185 +0,0 @@ -package kekztech; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.item.ItemStack; - -public class MultiItemHandler { - - private int perTypeCapacity = 0; - - private boolean locked = true; - - private ItemStack[] items; - - public MultiItemHandler() { - - } - - public List debugPrint() { - if(items == null) { - return new ArrayList(); - } - final ArrayList slots = new ArrayList<>(); - - for(int i = 0; i < items.length; i++) { - slots.add("Slot " + i + " contains " + items[i].stackSize + " " + items[i].getDisplayName()); - } - - return slots; - } - - /** - * Adapts the internal storage to structure changes. - * In the event of structure down-sizing, all excess items - * will be dropped on the ground. - * - * @param itemTypeCapacity - */ - public void setItemTypeCapacity(int itemTypeCapacity) { - System.out.println("Configuring type capacity"); - if(items.length > itemTypeCapacity) { - // Generate new smaller backing array - final ItemStack[] newItems = new ItemStack[itemTypeCapacity]; - for(int i = 0; i < newItems.length; i++) { - newItems[i] = items[i]; - } - // Sort out item overflow - final ItemStack[] toDrop = new ItemStack[items.length - itemTypeCapacity]; - for(int i = 0; i < toDrop.length; i++) { - toDrop[i] = items[i + newItems.length - 1]; - } - // TODO drop overflow items to the ground - - // Swap array - items = newItems; - } else { - // Generate new larger backing array - final ItemStack[] newItems = new ItemStack[itemTypeCapacity]; - for(int i = 0; i < items.length; i++) { - newItems[i] = items[i]; - } - - // Swap array - items = newItems; - } - } - - public void setPerTypeCapacity(int perTypeCapacity) { - this.perTypeCapacity = perTypeCapacity; - } - - /** - * Lock internal storage in case Item Server is not running. - * - * @param state - * Lock state. - */ - public void setLock(boolean state) { - locked = state; - } - - public int getItemTypeCapacity() { - return items != null ? items.length : 0; - } - - public int getPerTypeCapacity() { - return perTypeCapacity; - } - - /** - * Returns the ItemStack from the specified slot. - * - * @param slot - * Storage slot number. Zero indexed. - * @return - * ItemStack from storage or null if - * storage is locked or invalid slot parameter. - */ - public ItemStack getStackInSlot(int slot) { - System.out.println("Stack in slot " + slot + " requested"); - if(locked || slot >= items.length) { - return null; - } else { - return items[slot]; - } - } - - /** - * Inserts a new ItemStack into storage, - * but only if the slot is still unassigned. - * - * @param slot - * Storage slot number. Zero indexed. - * @param itemStack - * ItemStack to insert. - * @return - * Operation success state. - */ - public boolean insertStackInSlot(int slot, ItemStack itemStack) { - System.out.println("Inserting " + itemStack.getDisplayName() + " into " + slot); - if(itemStack == null - || items[slot] != null - || locked - || slot >= items.length) { - return false; - } else { - items[slot] = itemStack; - return true; - } - } - - /** - * Tries to increase the item amount in a specified slot. - * - * @param slot - * Storage slot number. Zero indexed. - * @param amount - * Amount to increase by. - * @return - * Actual amount the item amount was increased by. - */ - public int increaseStackInSlot(int slot, int amount) { - System.out.println("Increasing item in slot " + slot + " by " + amount); - if(slot >= items.length - || locked - || amount <= 0) { - return 0; - } else { - final int space = perTypeCapacity - items[slot].stackSize; - final int fit = Math.min(space, amount); - items[slot].stackSize += fit; - return fit; - } - } - - /** - * Tries to reduce the item amount in a specified slot. - * - * @param slot - * Storage slot number. Zero indexed. - * @param amount - * Amount to decrease by. - * @return - * Actual amount the item amount was decreased by. - */ - public int reduceStackInSlot(int slot, int amount) { - System.out.println("Reducing item in slot " + slot + " by " + amount); - if(slot >= items.length - || locked - || amount <= 0) { - return 0; - } else { - final int available = items[slot].stackSize; - final int take = Math.min(available, amount); - items[slot].stackSize -= take; - if(take == available) { - items[slot] = null; - } - return take; - } - } - - -} diff --git a/src/main/resources/assets/kekztech/lang/en_US.lang b/src/main/resources/assets/kekztech/lang/en_US.lang index 16f7233e17..9d201e442a 100644 --- a/src/main/resources/assets/kekztech/lang/en_US.lang +++ b/src/main/resources/assets/kekztech/lang/en_US.lang @@ -117,24 +117,10 @@ tile.kekztech_tfftstoragefieldblock2_block.name=T.F.F.T Storage Field Block (Tie tile.kekztech_tfftstoragefieldblock3_block.name=T.F.F.T Storage Field Block (Tier III) tile.kekztech_tfftstoragefieldblock4_block.name=T.F.F.T Storage Field Block (Tier IV) tile.kekztech_tfftstoragefieldblock5_block.name=T.F.F.T Storage Field Block (Tier V) -tile.kekztech_tfftmultihatch_block.0.name=T.F.F.T Multi-Fluid I/O Hatch (Tier I) -tile.kekztech_tfftmultihatch_block.1.name=T.F.F.T Multi-Fluid I/O Hatch (Tier II) -tile.kekztech_tfftmultihatch_block.2.name=T.F.F.T Multi-Fluid I/O Hatch (Tier III) -tile.kekztech_tfftmultihatch_block.0.desc=Special hatch for the T.F.F.T -tile.kekztech_tfftmultihatch_block.1.desc=Allows for automated interaction with all stored fluids in a single place -tile.kekztech_tfftmultihatch_block.2.desc=Right-click with screwdriver to activate auto-output -tile.kekztech_tfftmultihatch_block.3.desc=Auto-output will try to output fluids into adjacent tanks at a per fluid rate of - -# -------- Item Server: Structure Blocks -tile.kekztech_itemserverdrive_block.name=Item Server Drive -tile.kekztech_itemserverdrive_block.0.desc=Item Server Storage Drive -tile.kekztech_itemserverrackcasing_block.name=Item Server Rack Casing -tile.kekztech_itemserverrackcasing_block.0.desc=Shiny new server rack -tile.kekztech_itemserverioport_block.name=Item Server I/O Port -tile.kekztech_itemserverioport_block.0.desc=I/O Port for interfacing with an Item Server - -# -------- Item Server: Crafting Components -item.kekztech_crafting_item.16.name=Item Server Blade +tile.kekztech_tfftmultihatch_block.0.name=[DEPRECATED] T.F.F.T Multi-Fluid I/O Hatch (Tier I) +tile.kekztech_tfftmultihatch_block.1.name=[DEPRECATED] T.F.F.T Multi-Fluid I/O Hatch (Tier II) +tile.kekztech_tfftmultihatch_block.2.name=[DEPRECATED] T.F.F.T Multi-Fluid I/O Hatch (Tier III) +tile.kekztech_tfftmultihatch_block.0.desc=Put in crafting field to change to update # -------- Item Proxy: Structure Blocks tile.kekztech_itemproxycable_block.name=Item Proxy Network Cable -- cgit From 0868ea42998ae6f8902b23f52110bcbc6f4bc3d5 Mon Sep 17 00:00:00 2001 From: kekzdealer Date: Thu, 11 Jun 2020 18:09:33 +0200 Subject: New multi hatch code cleanup; Added auto-output handler; Removed object exposing method from MultiFluidHandler --- .../common/tileentities/GTMTE_TFFTMultiHatch.java | 82 ++++++++++++++++------ .../common/tileentities/TE_TFFTMultiHatch.java | 21 +++--- src/main/java/kekztech/MultiFluidHandler.java | 5 -- 3 files changed, 71 insertions(+), 37 deletions(-) (limited to 'src/main/java/kekztech') diff --git a/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java b/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java index 529a948dbe..f34905ba14 100644 --- a/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java +++ b/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java @@ -11,8 +11,10 @@ import kekztech.MultiFluidHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidHandler; import java.util.HashMap; @@ -116,32 +118,72 @@ public class GTMTE_TFFTMultiHatch extends GT_MetaTileEntity_Hatch { } public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); if (aBaseMetaTileEntity.isServerSide() && mfh != null) { - // Handle emptying containers - final FluidStack fluidFromCell = GT_Utility.getFluidForFilledItem(super.mInventory[super.getInputSlot()], true); - // Check if fluid is not null, could be inserted, and if there is space for the empty container - if (fluidFromCell != null && mfh.couldPush(fluidFromCell) - && aBaseMetaTileEntity.addStackToSlot(super.getOutputSlot(), GT_Utility.getContainerItem(super.mInventory[super.getInputSlot()], true), 1)) { - // Consume one filled container if it was emptied successfully - if(mfh.pushFluid(fluidFromCell, true) == fluidFromCell.amount) { - aBaseMetaTileEntity.decrStackSize(this.getInputSlot(), 1); - } + emptyContainers(aBaseMetaTileEntity); + fillContainers(aBaseMetaTileEntity); + if(outputting && (aTick % 20 == 0)) { + doAutoOutputPerSecond(aBaseMetaTileEntity); } - // Handle filling containers. This will use the selected T.F.F.T fluid - final ItemStack cellFromFluid = GT_Utility.fillFluidContainer( - mfh.getFluid(mfh.getSelectedFluid()), super.mInventory[super.getInputSlot()], false, true); - // Check if cell is not null and if there is space for the filled container - if (cellFromFluid != null && aBaseMetaTileEntity.addStackToSlot(super.getOutputSlot(), cellFromFluid, 1)) { - // Convert back to FluidStack to learn the container capacity... - final FluidStack fluidCapacityStack = GT_Utility.getFluidForFilledItem(cellFromFluid, true); - // Consume one empty container if it was filled successfully - if(mfh.pullFluid(fluidCapacityStack, true) == fluidCapacityStack.amount) { - aBaseMetaTileEntity.decrStackSize(this.getInputSlot(), 1); - } + } + } + + /** + * Empty containers (cells, buckets, etc) from the GUI into the T.F.F.T + * @param aBaseMetaTileEntity + * this MetaTileEntity + */ + private void emptyContainers(IGregTechTileEntity aBaseMetaTileEntity) { + final FluidStack fluidFromCell = GT_Utility.getFluidForFilledItem(super.mInventory[super.getInputSlot()], true); + // Check if fluid is not null, could be inserted, and if there is space for the empty container + if (fluidFromCell != null && mfh.couldPush(fluidFromCell) + && aBaseMetaTileEntity.addStackToSlot(super.getOutputSlot(), GT_Utility.getContainerItem(super.mInventory[super.getInputSlot()], true), 1)) { + // Consume one filled container if it was emptied successfully + if(mfh.pushFluid(fluidFromCell, true) == fluidFromCell.amount) { + aBaseMetaTileEntity.decrStackSize(this.getInputSlot(), 1); + } + } + } + + /** + * Fill containers (cells, buckets, etc) in the GUI. The fluid used to fill containers will be the one that is + * selected through an Integrated Circuit in the T.F.F.T's controller GUI. + * @param aBaseMetaTileEntity + * this MetaTileEntity + */ + private void fillContainers(IGregTechTileEntity aBaseMetaTileEntity) { + final ItemStack cellFromFluid = GT_Utility.fillFluidContainer( + mfh.getFluid(mfh.getSelectedFluid()), super.mInventory[super.getInputSlot()], false, true); + // Check if cell is not null and if there is space for the filled container + if (cellFromFluid != null && aBaseMetaTileEntity.addStackToSlot(super.getOutputSlot(), cellFromFluid, 1)) { + // Convert back to FluidStack to learn the container capacity... + final FluidStack fluidCapacityStack = GT_Utility.getFluidForFilledItem(cellFromFluid, true); + // Consume one empty container if it was filled successfully + if(mfh.pullFluid(fluidCapacityStack, true) == fluidCapacityStack.amount) { + aBaseMetaTileEntity.decrStackSize(this.getInputSlot(), 1); } } } + /** + * Handle the Multi Hatch's auto-output feature. Should be called once per second only. + * @param aBaseMetaTileEntity + * this MetaTileEntity + */ + private void doAutoOutputPerSecond(IGregTechTileEntity aBaseMetaTileEntity) { + final ForgeDirection side = ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing()); + final TileEntity adjacentTE = aBaseMetaTileEntity.getTileEntityOffset(side.offsetX, side.offsetY, side.offsetZ); + if(adjacentTE instanceof IFluidHandler) { + final IFluidHandler adj = (IFluidHandler) adjacentTE; + final int outputPerSec = vals.get(super.mTier); + // Cycle through fluids + for(int i = 0; i < mfh.getInfoData().size(); i++) { + final FluidStack storedFluid = mfh.getFluid(i); + } + + } + } + @Override public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { return (mfh != null) ? mfh.pushFluid(resource, doFill) : 0; diff --git a/src/main/java/common/tileentities/TE_TFFTMultiHatch.java b/src/main/java/common/tileentities/TE_TFFTMultiHatch.java index 823d456b56..29370dc4f2 100644 --- a/src/main/java/common/tileentities/TE_TFFTMultiHatch.java +++ b/src/main/java/common/tileentities/TE_TFFTMultiHatch.java @@ -70,31 +70,28 @@ public class TE_TFFTMultiHatch extends TileEntity implements IFluidHandler { final IFluidHandler fh = (IFluidHandler) t; final int meta = t.getWorldObj().getBlockMetadata(t.xCoord, t.yCoord, t.zCoord); // Cycle through fluids - final Iterator volumes = mfh.getFluids().iterator(); - while(volumes.hasNext()) { - final FluidStack volume = volumes.next(); - + for (FluidStack volume : mfh.getFluids()) { // Remember for later final int oVolume = volume.amount; - + // Use API methods - if(fh.canFill(d.getOpposite(), volume.getFluid())) { - + if (fh.canFill(d.getOpposite(), volume.getFluid())) { + // Test how much can be output final FluidStack copy = volume.copy(); copy.amount = (int) Math.min(copy.amount, BASE_OUTPUT_PER_SECOND * Math.pow(10, meta)); - + // How much is drawn copy.amount = mfh.pullFluid(copy, false); - + // Test how much can be filled (and fill if possible) copy.amount = fh.fill(d.getOpposite(), copy, true); - + // Actually deplete storage mfh.pullFluid(copy, true); - + // Prevent ConcurrentModificationException - if(copy.amount >= oVolume) { + if (copy.amount >= oVolume) { break; } } diff --git a/src/main/java/kekztech/MultiFluidHandler.java b/src/main/java/kekztech/MultiFluidHandler.java index 1d8f4c2fea..b90d8a35bf 100644 --- a/src/main/java/kekztech/MultiFluidHandler.java +++ b/src/main/java/kekztech/MultiFluidHandler.java @@ -70,11 +70,6 @@ public class MultiFluidHandler { public int getCapacity() { return capacityPerFluid; } - - // TODO return deep copy instead - public List getFluids(){ - return (!locked) ? fluids : new ArrayList<>(); - } public FluidStack getFluid(int slot) { return (!locked && fluids.size() > 0 && slot >= 0 && slot < MAX_DISTINCT_FLUIDS) -- cgit From bed56a0bc6b45bc877ecd260177a664ab8a8e130 Mon Sep 17 00:00:00 2001 From: kekzdealer Date: Thu, 11 Jun 2020 18:27:12 +0200 Subject: Finished auto-output handler code; Removed/Deactivated deprecated code from old multi hatch TE --- .../tileentities/GTMTE_FluidMultiStorage.java | 2 +- .../common/tileentities/GTMTE_TFFTMultiHatch.java | 30 ++++-- .../common/tileentities/TE_TFFTMultiHatch.java | 114 +++------------------ src/main/java/kekztech/MultiFluidHandler.java | 20 +++- 4 files changed, 53 insertions(+), 113 deletions(-) (limited to 'src/main/java/kekztech') diff --git a/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java b/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java index e06d1cc4a6..bd992972a8 100644 --- a/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java +++ b/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java @@ -138,7 +138,7 @@ public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase { // Push out fluids if (guiSlotItem != null && guiSlotItem.getUnlocalizedName().equals("gt.integrated_circuit")) { - final FluidStack storedFluid = mfh.getFluid(fluidSelector); + final FluidStack storedFluid = mfh.getFluidCopy(fluidSelector); // Sum available output capacity int possibleOutput = 0; for (GT_MetaTileEntity_Hatch_Output outputHatch : super.mOutputHatches) { diff --git a/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java b/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java index f34905ba14..f93bafbead 100644 --- a/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java +++ b/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java @@ -153,7 +153,7 @@ public class GTMTE_TFFTMultiHatch extends GT_MetaTileEntity_Hatch { */ private void fillContainers(IGregTechTileEntity aBaseMetaTileEntity) { final ItemStack cellFromFluid = GT_Utility.fillFluidContainer( - mfh.getFluid(mfh.getSelectedFluid()), super.mInventory[super.getInputSlot()], false, true); + mfh.getFluidCopy(mfh.getSelectedFluid()), super.mInventory[super.getInputSlot()], false, true); // Check if cell is not null and if there is space for the filled container if (cellFromFluid != null && aBaseMetaTileEntity.addStackToSlot(super.getOutputSlot(), cellFromFluid, 1)) { // Convert back to FluidStack to learn the container capacity... @@ -171,14 +171,28 @@ public class GTMTE_TFFTMultiHatch extends GT_MetaTileEntity_Hatch { * this MetaTileEntity */ private void doAutoOutputPerSecond(IGregTechTileEntity aBaseMetaTileEntity) { - final ForgeDirection side = ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing()); - final TileEntity adjacentTE = aBaseMetaTileEntity.getTileEntityOffset(side.offsetX, side.offsetY, side.offsetZ); + final ForgeDirection outSide = ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing()); + final TileEntity adjacentTE = aBaseMetaTileEntity.getTileEntityOffset(outSide.offsetX, outSide.offsetY, outSide.offsetZ); if(adjacentTE instanceof IFluidHandler) { - final IFluidHandler adj = (IFluidHandler) adjacentTE; - final int outputPerSec = vals.get(super.mTier); + final IFluidHandler adjFH = (IFluidHandler) adjacentTE; // Cycle through fluids - for(int i = 0; i < mfh.getInfoData().size(); i++) { - final FluidStack storedFluid = mfh.getFluid(i); + for(int i = 0; i < mfh.getDistinctFluids(); i++) { + final FluidStack fluidCopy = mfh.getFluidCopy(i); + // Make sure the adjacent IFluidHandler can accept this fluid + if(adjFH.canFill(outSide.getOpposite(), fluidCopy.getFluid())) { + + // Limit to output rate + fluidCopy.amount = Math.min(fluidCopy.amount, vals.get(super.mTier)); + + // Test how much can be drawn + fluidCopy.amount = mfh.pullFluid(fluidCopy, false); + + // Test how much can be filled (and fill if possible) + fluidCopy.amount = adjFH.fill(outSide.getOpposite(), fluidCopy, true); + + // Actually deplete storage + mfh.pullFluid(fluidCopy, true); + } } } @@ -211,7 +225,7 @@ public class GTMTE_TFFTMultiHatch extends GT_MetaTileEntity_Hatch { @Override public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { if(mfh != null) { - final FluidStack drain = mfh.getFluid(0); + final FluidStack drain = mfh.getFluidCopy(0); if(drain != null) { // If there's no integrated circuit in the T.F.F.T. controller, output slot 0 final byte selectedSlot = (mfh.getSelectedFluid() == -1) ? 0 : mfh.getSelectedFluid(); diff --git a/src/main/java/common/tileentities/TE_TFFTMultiHatch.java b/src/main/java/common/tileentities/TE_TFFTMultiHatch.java index 29370dc4f2..de274bb15e 100644 --- a/src/main/java/common/tileentities/TE_TFFTMultiHatch.java +++ b/src/main/java/common/tileentities/TE_TFFTMultiHatch.java @@ -1,11 +1,6 @@ package common.tileentities; -import java.util.Iterator; -import java.util.List; - -import common.Blocks; import kekztech.MultiFluidHandler; -import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; @@ -48,88 +43,19 @@ public class TE_TFFTMultiHatch extends TileEntity implements IFluidHandler { @Override public void updateEntity() { - if(!autoOutput || mfh == null) { - return; - } - - tickCounter++; - if(tickCounter >= 20) { - - final ForgeDirection d = getOutwardsFacingDirection(); - if(d == ForgeDirection.UNKNOWN) { - return; - } - final TileEntity t = this.getWorldObj().getTileEntity( - this.xCoord + d.offsetX, - this.yCoord + d.offsetY, - this.zCoord + d.offsetZ - ); - - if(t instanceof IFluidHandler) { - - final IFluidHandler fh = (IFluidHandler) t; - final int meta = t.getWorldObj().getBlockMetadata(t.xCoord, t.yCoord, t.zCoord); - // Cycle through fluids - for (FluidStack volume : mfh.getFluids()) { - // Remember for later - final int oVolume = volume.amount; - - // Use API methods - if (fh.canFill(d.getOpposite(), volume.getFluid())) { - - // Test how much can be output - final FluidStack copy = volume.copy(); - copy.amount = (int) Math.min(copy.amount, BASE_OUTPUT_PER_SECOND * Math.pow(10, meta)); - - // How much is drawn - copy.amount = mfh.pullFluid(copy, false); - - // Test how much can be filled (and fill if possible) - copy.amount = fh.fill(d.getOpposite(), copy, true); - - // Actually deplete storage - mfh.pullFluid(copy, true); - - // Prevent ConcurrentModificationException - if (copy.amount >= oVolume) { - break; - } - } - } - } - - tickCounter = 0; - } - } - - private ForgeDirection getOutwardsFacingDirection() { - // TODO Revisit this once the hatch has a facing side - // Look up which side has the storage field block and choose the other side. - // This is important so the tank doesn't output into itself in case - // there is another hatch next to this one. - for(ForgeDirection direction : ForgeDirection.values()) { - - final Block b = this.getWorldObj().getBlock(this.xCoord + direction.offsetX, this.yCoord + direction.offsetY, this.zCoord + direction.offsetZ); - if(b != null && ( - b.equals(Blocks.tfftStorageField1) - || b.equals(Blocks.tfftStorageField2) - || b.equals(Blocks.tfftStorageField3) - || b.equals(Blocks.tfftStorageField4) - || b.equals(Blocks.tfftStorageField5))) { - return direction.getOpposite(); - } - } - return ForgeDirection.UNKNOWN; + // Removed deprecated code } @Override public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { - return (mfh != null) ? mfh.pushFluid(resource, doFill) : 0; + // Removed deprecated code + return 0; } @Override public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { - return (mfh != null) ? new FluidStack(resource.getFluid(), mfh.pullFluid(resource, doDrain)) : null; + // Removed deprecated code + return null; } /** @@ -148,42 +74,26 @@ public class TE_TFFTMultiHatch extends TileEntity implements IFluidHandler { */ @Override public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { - if(mfh != null) { - final FluidStack drain = mfh.getFluid(0); - if(drain != null) { - // If there's no integrated circuit in the T.F.F.T. controller, output slot 0 - final byte selectedSlot = (mfh.getSelectedFluid() == -1) ? 0 : mfh.getSelectedFluid(); - - return new FluidStack( - drain.getFluid(), - mfh.pullFluid(new FluidStack(drain.getFluid(), maxDrain), selectedSlot, doDrain) - ); - } - } + // Removed deprecated code return null; } @Override public boolean canFill(ForgeDirection from, Fluid fluid) { - return (mfh != null) && mfh.couldPush(new FluidStack(fluid, 1)); + // Removed deprecated code + return false; } @Override public boolean canDrain(ForgeDirection from, Fluid fluid) { - return (mfh != null) && mfh.contains(new FluidStack(fluid, 1)); + // Removed deprecated code + return false; } @Override public FluidTankInfo[] getTankInfo(ForgeDirection from) { - if(mfh == null) { - return null; - } - final List fluids = mfh.getFluids(); - final FluidTankInfo[] tankInfo = new FluidTankInfo[fluids.size()]; - for(int i = 0; i < tankInfo.length; i++) { - tankInfo[i] = new FluidTankInfo(fluids.get(i), mfh.getCapacity()); - } - return tankInfo; + // Removed deprecated code + return null; } @Override diff --git a/src/main/java/kekztech/MultiFluidHandler.java b/src/main/java/kekztech/MultiFluidHandler.java index b90d8a35bf..3e9bcfa0e5 100644 --- a/src/main/java/kekztech/MultiFluidHandler.java +++ b/src/main/java/kekztech/MultiFluidHandler.java @@ -70,11 +70,27 @@ public class MultiFluidHandler { public int getCapacity() { return capacityPerFluid; } - - public FluidStack getFluid(int slot) { + + /** + * Returns a deep copy of the the FluidStack in the requested slot + * @param slot + * requested slot + * @return + * deep copy of the requested FluidStack + */ + public FluidStack getFluidCopy(int slot) { return (!locked && fluids.size() > 0 && slot >= 0 && slot < MAX_DISTINCT_FLUIDS) ? fluids.get(slot).copy() : null; } + + /** + * Returns the amount of different fluids currently stored. + * @return + * amount of different fluids currently stored (0-25) + */ + public int getDistinctFluids() { + return fluids.size(); + } public NBTTagCompound saveNBTData(NBTTagCompound nbt) { nbt = (nbt == null) ? new NBTTagCompound() : nbt; -- cgit From cc664f07248872c2d44f7ef22ab3a9d520c19f8d Mon Sep 17 00:00:00 2001 From: kekzdealer Date: Thu, 11 Jun 2020 19:13:57 +0200 Subject: Refactored MultiFluidHandler initialization to use a custom initializer method that doesn't require leaking the stored fluid objects --- .../tileentities/GTMTE_FluidMultiStorage.java | 33 +++---- src/main/java/kekztech/MultiFluidHandler.java | 110 ++++++++++++++------- 2 files changed, 90 insertions(+), 53 deletions(-) (limited to 'src/main/java/kekztech') diff --git a/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java b/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java index bd992972a8..f2e88ef711 100644 --- a/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java +++ b/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java @@ -157,24 +157,22 @@ public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase { super.addOutput(tempStack); } else { - for (FluidStack storedFluid : mfh.getFluids()) { - // Sum available output capacity - int possibleOutput = 0; + for(int i = 0; i < mfh.getDistinctFluids(); i++) { + final FluidStack storedFluidCopy = mfh.getFluidCopy(i); + // Calculate how much capacity all available Output Hatches offer for (GT_MetaTileEntity_Hatch_Output outputHatch : super.mOutputHatches) { - if (outputHatch.isFluidLocked() && outputHatch.getLockedFluidName().equals(storedFluid.getUnlocalizedName())) { - possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); - } else if (outputHatch.getFluid() != null && outputHatch.getFluid().getUnlocalizedName().equals(storedFluid.getUnlocalizedName())) { - possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); + if (outputHatch.isFluidLocked() && outputHatch.getLockedFluidName().equals(storedFluidCopy.getUnlocalizedName())) { + storedFluidCopy.amount += outputHatch.getCapacity() - outputHatch.getFluidAmount(); + } else if (outputHatch.getFluid() != null && outputHatch.getFluid().getUnlocalizedName().equals(storedFluidCopy.getUnlocalizedName())) { + storedFluidCopy.amount += outputHatch.getCapacity() - outputHatch.getFluidAmount(); } else if (outputHatch.getFluid() == null) { - possibleOutput += outputHatch.getCapacity() - outputHatch.getFluidAmount(); + storedFluidCopy.amount += outputHatch.getCapacity() - outputHatch.getFluidAmount(); } } - // output as much as possible - final FluidStack tempStack = storedFluid.copy(); - tempStack.amount = possibleOutput; - // TODO possible concurrent modification exception as pullFluid calls remove() without an iterator - tempStack.amount = mfh.pullFluid(tempStack, true); - super.addOutput(tempStack); + // Test how much can actually be drained and drain that amount + storedFluidCopy.amount = mfh.pullFluid(storedFluidCopy, true); + // Add to output + super.addOutput(storedFluidCopy); } } @@ -408,10 +406,10 @@ public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase { // Update MultiFluidHandler in case storage cells have been changed final int capacityPerFluid = (int) Math.round(fluidCapacityAcc / 25.0f); if (mfh == null) { - mfh = new MultiFluidHandler(capacityPerFluid); + mfh = MultiFluidHandler.newInstance(25, capacityPerFluid); } else { if (mfh.getCapacity() != capacityPerFluid) { - mfh = new MultiFluidHandler(capacityPerFluid, mfh.getFluids()); + mfh = MultiFluidHandler.newAdjustedInstance(mfh, capacityPerFluid); } } for (GTMTE_TFFTMultiHatch mh : sMultiHatches) { @@ -488,8 +486,7 @@ public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase { runningCost = nbt.getInteger("runningCost"); doVoidExcess = nbt.getBoolean("doVoidExcess"); - mfh = new MultiFluidHandler(); - mfh.loadNBTData(nbt); + mfh = mfh.loadNBTData(nbt); for (GTMTE_TFFTMultiHatch mh : sMultiHatches) { mh.setMultiFluidHandler(mfh); } diff --git a/src/main/java/kekztech/MultiFluidHandler.java b/src/main/java/kekztech/MultiFluidHandler.java index 3e9bcfa0e5..ef65585a3b 100644 --- a/src/main/java/kekztech/MultiFluidHandler.java +++ b/src/main/java/kekztech/MultiFluidHandler.java @@ -1,34 +1,58 @@ package kekztech; -import java.util.ArrayList; -import java.util.List; - import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.fluids.FluidStack; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + public class MultiFluidHandler { - - public static final int MAX_DISTINCT_FLUIDS = 25; - - private final List fluids = new ArrayList<>(MAX_DISTINCT_FLUIDS); - private int capacityPerFluid; + + private final List fluids; + private final int maxDistinctFluids; + private final int capacityPerFluid; private boolean locked = true; private boolean doVoidExcess = false; private byte fluidSelector = -1; - public MultiFluidHandler() { - - } - - public MultiFluidHandler(int capacityPerFluid) { + private MultiFluidHandler(int maxDistinctFluids, int capacityPerFluid, List fluidsToAdd) { + this.maxDistinctFluids = maxDistinctFluids; + this.fluids = new ArrayList<>(maxDistinctFluids); + if(fluidsToAdd != null) { + this.fluids.addAll(fluidsToAdd); + } this.capacityPerFluid = capacityPerFluid; } - - public MultiFluidHandler(int capacityPerFluid, List fluids) { - this.capacityPerFluid = capacityPerFluid; - this.fluids.addAll(fluids); + + /** + * Initialize a new MultiFluidHandler object with the given parameters + * @param maxDistinctFluids + * How many different fluids can be stored + * @param capacityPerFluid + * How much capacity each fluid should have + * @param fluidsToAdd + * Fluids to add immediately + * @return + * A new instance + */ + public static MultiFluidHandler newInstance(int maxDistinctFluids, int capacityPerFluid, FluidStack...fluidsToAdd) { + return new MultiFluidHandler(maxDistinctFluids, capacityPerFluid, Arrays.asList(fluidsToAdd)); + } + + /** + * Deep copy a MultiFluidHandler instance with a new capacity + * @param toCopy + * The MultiFluidHandler that should be copied + * @param capacityPerFluid + * How much capacity each fluid should have + * @return + * A new instance + */ + public static MultiFluidHandler newAdjustedInstance(MultiFluidHandler toCopy, int capacityPerFluid) { + return new MultiFluidHandler(toCopy.maxDistinctFluids, capacityPerFluid, toCopy.fluids); } /** @@ -79,7 +103,7 @@ public class MultiFluidHandler { * deep copy of the requested FluidStack */ public FluidStack getFluidCopy(int slot) { - return (!locked && fluids.size() > 0 && slot >= 0 && slot < MAX_DISTINCT_FLUIDS) + return (!locked && fluids.size() > 0 && slot >= 0 && slot < maxDistinctFluids) ? fluids.get(slot).copy() : null; } @@ -91,7 +115,14 @@ public class MultiFluidHandler { public int getDistinctFluids() { return fluids.size(); } - + + /** + * Helper method to save a MultiFluidHandler to NBT data + * @param nbt + * The NBT Tag to write to + * @return + * Updated NBT Tag + */ public NBTTagCompound saveNBTData(NBTTagCompound nbt) { nbt = (nbt == null) ? new NBTTagCompound() : nbt; @@ -103,21 +134,30 @@ public class MultiFluidHandler { } return nbt; } - - public void loadNBTData(NBTTagCompound nbt) { + + /** + * Helper method to initialize a MultiFluidHandler from NBT data + * @param nbt + * The NBT Tag to read from + * @return + * A new Instance + */ + public MultiFluidHandler loadNBTData(NBTTagCompound nbt) { nbt = (nbt == null) ? new NBTTagCompound() : nbt; - capacityPerFluid = nbt.getInteger("capacityPerFluid"); - - fluids.clear(); + final int capacityPerFluid = nbt.getInteger("capacityPerFluid"); final NBTTagCompound fluidsTag = (NBTTagCompound) nbt.getTag("fluids"); - for(int i = 0; i < MultiFluidHandler.MAX_DISTINCT_FLUIDS; i++) { - final NBTTagCompound fnbt = (NBTTagCompound) fluidsTag.getTag("" + i); - if(fnbt == null) { + final ArrayList loadedFluids = new ArrayList<>(); + int distinctFluids = 0; + while(true) { + final NBTTagCompound fluidNBT = (NBTTagCompound) fluidsTag.getTag("" + distinctFluids); + if(fluidNBT == null) { break; } - fluids.add(FluidStack.loadFluidStackFromNBT(fnbt)); + loadedFluids.add(FluidStack.loadFluidStackFromNBT(fluidNBT)); + distinctFluids++; } + return new MultiFluidHandler(distinctFluids, capacityPerFluid, loadedFluids); } public ArrayList getInfoData() { @@ -145,10 +185,10 @@ public class MultiFluidHandler { if(locked) { return 0; } - if(fluids.size() == MAX_DISTINCT_FLUIDS && !contains(push)) { + if(fluids.size() == maxDistinctFluids && !contains(push)) { // Already contains 25 fluids and this isn't one of them return 0; - } else if (fluids.size() < MAX_DISTINCT_FLUIDS && !contains(push)) { + } else if (fluids.size() < maxDistinctFluids && !contains(push)) { // Add new fluid final int fit = Math.min(getCapacity(), push.amount); if(doPush) { @@ -183,7 +223,7 @@ public class MultiFluidHandler { if(locked) { return 0; } - if(slot < 0 || slot >= MAX_DISTINCT_FLUIDS) { + if(slot < 0 || slot >= maxDistinctFluids) { // Invalid slot return 0; } @@ -242,7 +282,7 @@ public class MultiFluidHandler { if(locked) { return 0; } - if(slot < 0 || slot >= MAX_DISTINCT_FLUIDS) { + if(slot < 0 || slot >= maxDistinctFluids) { return 0; } if(!fluids.get(slot).equals(pull)) { @@ -270,13 +310,13 @@ public class MultiFluidHandler { if(locked) { return false; } - if(fluids.size() == MAX_DISTINCT_FLUIDS && !contains(push)) { + if(fluids.size() == maxDistinctFluids && !contains(push)) { return false; - } else if (fluids.size() < MAX_DISTINCT_FLUIDS && !contains(push)) { + } else if (fluids.size() < maxDistinctFluids && !contains(push)) { return Math.min(getCapacity(), push.amount) > 0; } else { final int remcap = getCapacity() - fluids.get(fluids.indexOf(push)).amount; - return doVoidExcess ? true : (Math.min(remcap, push.amount) > 0); + return doVoidExcess || (Math.min(remcap, push.amount) > 0); } } } -- cgit From 56ccee58777de261857b16c958d07bc0fc7e0187 Mon Sep 17 00:00:00 2001 From: kekzdealer Date: Thu, 18 Jun 2020 20:35:16 +0200 Subject: Shortened screwdriver handling code related to TFFT; Fixed AOOB Exception when IC in TFFT GUI exceeds number of stored fluids --- .../common/tileentities/GTMTE_FluidMultiStorage.java | 10 +++------- .../common/tileentities/GTMTE_TFFTMultiHatch.java | 19 +++---------------- src/main/java/kekztech/MultiFluidHandler.java | 4 +++- 3 files changed, 9 insertions(+), 24 deletions(-) (limited to 'src/main/java/kekztech') diff --git a/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java b/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java index f2e88ef711..0b8eec616b 100644 --- a/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java +++ b/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java @@ -9,6 +9,7 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.*; import gregtech.api.objects.GT_RenderedTexture; +import gregtech.api.util.GT_Utility; import kekztech.MultiFluidHandler; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; @@ -438,13 +439,8 @@ public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase { @Override public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (doVoidExcess) { - doVoidExcess = false; - aPlayer.addChatComponentMessage(new ChatComponentText("Auto-voiding turned off")); - } else { - doVoidExcess = true; - aPlayer.addChatComponentMessage(new ChatComponentText("Auto-voiding turned on")); - } + doVoidExcess = !doVoidExcess; + GT_Utility.sendChatToPlayer(aPlayer, doVoidExcess ? "Auto-voiding enabled" : "Auto-voiding disabled"); } @Override diff --git a/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java b/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java index 0ad9e5c7a9..7a9d31582a 100644 --- a/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java +++ b/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java @@ -89,22 +89,9 @@ public class GTMTE_TFFTMultiHatch extends GT_MetaTileEntity_Hatch { } @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (GT_Utility.isStackInList(aPlayer.getHeldItem(), GregTech_API.sScrewdriverList)) { - if (GT_ModHandler.damageOrDechargeItem(aPlayer.getHeldItem(), 1, 200, aPlayer)) { - outputting = !outputting; - GT_Utility.sendSoundToPlayers(aBaseMetaTileEntity.getWorld(), GregTech_API.sSoundList.get(100), - 1.0F, -1.0F, - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord() - ); - // Give chat feedback - GT_Utility.sendChatToPlayer(aPlayer, outputting ? "Auto-output enabled" : "Auto-output disabled"); - } - return true; - } - return false; + public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { + outputting = !outputting; + GT_Utility.sendChatToPlayer(aPlayer, outputting ? "Auto-output enabled" : "Auto-output disabled"); } @Override diff --git a/src/main/java/kekztech/MultiFluidHandler.java b/src/main/java/kekztech/MultiFluidHandler.java index ef65585a3b..35c1316407 100644 --- a/src/main/java/kekztech/MultiFluidHandler.java +++ b/src/main/java/kekztech/MultiFluidHandler.java @@ -70,12 +70,14 @@ public class MultiFluidHandler { /** * Used to tell the MFH if a fluid is selected by * an Integrated Circuit in the controller. + * If the Integrate Circuit configuration exceeds + * the number of stored fluid, the configuration will be ignored. * * @param fluidSelector * Selected fluid or -1 if no fluid is selected */ public void setFluidSelector(byte fluidSelector) { - this.fluidSelector = fluidSelector; + this.fluidSelector = fluidSelector < fluids.size() ? fluidSelector : -1; } /** -- cgit From 7ffad0de1760b338bfc96e797bce18b7110ace6f Mon Sep 17 00:00:00 2001 From: kekzdealer Date: Sun, 21 Jun 2020 23:55:49 +0200 Subject: 0.5 version bump --- build.gradle | 2 +- src/main/java/kekztech/KekzCore.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main/java/kekztech') diff --git a/build.gradle b/build.gradle index 15da6c830d..e002b1ac54 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ apply plugin: 'forge' sourceCompatibility = 1.8 targetCompatibility = 1.8 -version = "0.4.6" +version = "0.5" group= "kekztech" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "kekztech" diff --git a/src/main/java/kekztech/KekzCore.java b/src/main/java/kekztech/KekzCore.java index 312559d633..1aed8315ce 100644 --- a/src/main/java/kekztech/KekzCore.java +++ b/src/main/java/kekztech/KekzCore.java @@ -41,7 +41,7 @@ public class KekzCore { public static final String NAME = "KekzTech"; public static final String MODID = "kekztech"; - public static final String VERSION = "0.4.6"; + public static final String VERSION = "0.5"; public static final Logger LOGGER = LogManager.getLogger(NAME); -- cgit From 8d955e04b43678c16c374679ab3e8b65141cef47 Mon Sep 17 00:00:00 2001 From: korneel vandamme Date: Sat, 10 Oct 2020 02:12:10 +0200 Subject: fix voiding and made fluid pos static --- .../tileentities/GTMTE_FluidMultiStorage.java | 11 +- src/main/java/kekztech/MultiFluidHandler.java | 194 +++++++++++++++------ 2 files changed, 153 insertions(+), 52 deletions(-) (limited to 'src/main/java/kekztech') diff --git a/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java b/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java index 0b8eec616b..894ad12415 100644 --- a/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java +++ b/src/main/java/common/tileentities/GTMTE_FluidMultiStorage.java @@ -158,8 +158,15 @@ public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase { super.addOutput(tempStack); } else { - for(int i = 0; i < mfh.getDistinctFluids(); i++) { + int tDistinct = mfh.getDistinctFluids(); + int tDistinctCount = 0; + int tMaxDistinct = mfh.getMaxDistinctFluids(); + for(int i = 0; i < tMaxDistinct && tDistinctCount< tDistinct;i++) { final FluidStack storedFluidCopy = mfh.getFluidCopy(i); + if (storedFluidCopy == null) + continue; + tDistinctCount++; + storedFluidCopy.amount = 0; // Calculate how much capacity all available Output Hatches offer for (GT_MetaTileEntity_Hatch_Output outputHatch : super.mOutputHatches) { if (outputHatch.isFluidLocked() && outputHatch.getLockedFluidName().equals(storedFluidCopy.getUnlocalizedName())) { @@ -482,7 +489,7 @@ public class GTMTE_FluidMultiStorage extends GT_MetaTileEntity_MultiBlockBase { runningCost = nbt.getInteger("runningCost"); doVoidExcess = nbt.getBoolean("doVoidExcess"); - mfh = mfh.loadNBTData(nbt); + mfh = MultiFluidHandler.loadNBTData(nbt); for (GTMTE_TFFTMultiHatch mh : sMultiHatches) { mh.setMultiFluidHandler(mfh); } diff --git a/src/main/java/kekztech/MultiFluidHandler.java b/src/main/java/kekztech/MultiFluidHandler.java index 35c1316407..c82a35cd5b 100644 --- a/src/main/java/kekztech/MultiFluidHandler.java +++ b/src/main/java/kekztech/MultiFluidHandler.java @@ -10,7 +10,7 @@ import java.util.List; public class MultiFluidHandler { - private final List fluids; + private final FluidStack[] fluids; private final int maxDistinctFluids; private final int capacityPerFluid; @@ -18,11 +18,14 @@ public class MultiFluidHandler { private boolean doVoidExcess = false; private byte fluidSelector = -1; - private MultiFluidHandler(int maxDistinctFluids, int capacityPerFluid, List fluidsToAdd) { + public MultiFluidHandler(int maxDistinctFluids, int capacityPerFluid, FluidStack[] fluidsToAdd) { this.maxDistinctFluids = maxDistinctFluids; - this.fluids = new ArrayList<>(maxDistinctFluids); + this.fluids = new FluidStack[maxDistinctFluids]; if(fluidsToAdd != null) { - this.fluids.addAll(fluidsToAdd); + int tFluidLengt = (maxDistinctFluids =0; } + + public int countFluids() + { + int tCount = 0; + for (int i = 0; i < fluids.length; i++) { + if (fluids[i] != null) + tCount++; + } + return tCount; + } + public int getCapacity() { return capacityPerFluid; } + public int getMaxDistinctFluids() { + return maxDistinctFluids; + } /** * Returns a deep copy of the the FluidStack in the requested slot @@ -105,8 +135,18 @@ public class MultiFluidHandler { * deep copy of the requested FluidStack */ public FluidStack getFluidCopy(int slot) { - return (!locked && fluids.size() > 0 && slot >= 0 && slot < maxDistinctFluids) - ? fluids.get(slot).copy() : null; + if (slot >= fluids.length) + return null; + if (!locked + && fluids.length > 0 + && slot >= 0 + && slot < maxDistinctFluids) + { + FluidStack tFluid = fluids[slot]; + if (tFluid != null) + return tFluid.copy(); + } + return null; } /** @@ -115,7 +155,12 @@ public class MultiFluidHandler { * amount of different fluids currently stored (0-25) */ public int getDistinctFluids() { - return fluids.size(); + int distinctFluids = 0; + for (FluidStack f : fluids) { + if (f != null) + distinctFluids++; + } + return distinctFluids; } /** @@ -129,9 +174,15 @@ public class MultiFluidHandler { nbt = (nbt == null) ? new NBTTagCompound() : nbt; nbt.setInteger("capacityPerFluid", getCapacity()); + nbt.setInteger("maxDistinctFluids",this.maxDistinctFluids); int c = 0; for(FluidStack f : fluids) { - nbt.setTag("" + c, f.writeToNBT(new NBTTagCompound())); + if (f == null) + { + c++; + continue; + } + nbt.setTag( String.valueOf(c), f.writeToNBT(new NBTTagCompound())); c++; } return nbt; @@ -144,31 +195,44 @@ public class MultiFluidHandler { * @return * A new Instance */ - public MultiFluidHandler loadNBTData(NBTTagCompound nbt) { + static public MultiFluidHandler loadNBTData(NBTTagCompound nbt) { nbt = (nbt == null) ? new NBTTagCompound() : nbt; final int capacityPerFluid = nbt.getInteger("capacityPerFluid"); final NBTTagCompound fluidsTag = (NBTTagCompound) nbt.getTag("fluids"); - final ArrayList loadedFluids = new ArrayList<>(); - int distinctFluids = 0; - while(true) { - final NBTTagCompound fluidNBT = (NBTTagCompound) fluidsTag.getTag("" + distinctFluids); - if(fluidNBT == null) { - break; + int distinctFluids = nbt.getInteger("maxDistinctFluids"); + if (!nbt.hasKey("maxDistinctFluids")) + distinctFluids = 25;// adding it so it doesent break on upgrading + final FluidStack[] loadedFluids = new FluidStack[distinctFluids]; + + if (fluidsTag != null) + { + for (int i = 0; i < distinctFluids; i++) { + final NBTTagCompound fluidNBT = (NBTTagCompound) fluidsTag.getTag("" + i); + if(fluidNBT == null) { + loadedFluids[i] = null; + } else { + loadedFluids[i] = FluidStack.loadFluidStackFromNBT(fluidNBT); + } } - loadedFluids.add(FluidStack.loadFluidStackFromNBT(fluidNBT)); - distinctFluids++; } return new MultiFluidHandler(distinctFluids, capacityPerFluid, loadedFluids); } public ArrayList getInfoData() { - final ArrayList lines = new ArrayList<>(fluids.size()); + final ArrayList lines = new ArrayList<>(fluids.length); lines.add(EnumChatFormatting.YELLOW + "Stored Fluids:" + EnumChatFormatting.RESET); - for(int i = 0; i < fluids.size(); i++) { - lines.add(i + " - " + fluids.get(i).getLocalizedName() + ": " - + fluids.get(i).amount + "L (" - + (Math.round(100.0f * fluids.get(i).amount / getCapacity())) + "%)"); + for(int i = 0; i < fluids.length; i++) { + FluidStack tFluid = fluids[i]; + if (tFluid == null) { + lines.add(i + " - " + "null" + ": " + + "0" + "L (" + + "0" + "%)"); + } else { + lines.add(i + " - " + tFluid.getLocalizedName() + ": " + + tFluid.amount + "L (" + + (Math.round(100.0f * tFluid.amount / getCapacity())) + "%)"); + } } return lines; @@ -187,20 +251,29 @@ public class MultiFluidHandler { if(locked) { return 0; } - if(fluids.size() == maxDistinctFluids && !contains(push)) { + int empty = getNullSlot(); + int fluidCount = countFluids(); + if(fluidCount >= maxDistinctFluids && !contains(push)) { // Already contains 25 fluids and this isn't one of them return 0; - } else if (fluids.size() < maxDistinctFluids && !contains(push)) { + } else if (empty < maxDistinctFluids && !contains(push)) { // Add new fluid final int fit = Math.min(getCapacity(), push.amount); if(doPush) { - fluids.add(new FluidStack(push.getFluid(), fit)); + empty = getNullSlot(); + if (empty == -1) + return 0; + else + fluids[empty] = new FluidStack(push.getFluid(), fit); } // If doVoidExcess, pretend all of it fit return doVoidExcess ? push.amount : fit; } else { - // Add to existing fluid - final FluidStack existing = fluids.get(fluids.indexOf(push)); + // Add to existing fluids + int index = getFluidPosistion(push); + if (index < 0) + return 0; + final FluidStack existing = fluids[index]; final int fit = Math.min(getCapacity() - existing.amount, push.amount); if(doPush) { existing.amount += fit; @@ -209,6 +282,16 @@ public class MultiFluidHandler { return doVoidExcess ? push.amount : fit; } } + + + public int getNullSlot() + { + for (int i = 0; i < fluids.length; i++) { + if (fluids[i] == null) + return i; + } + return -1; + } /** * Fill fluid into the specified tank. @@ -225,19 +308,25 @@ public class MultiFluidHandler { if(locked) { return 0; } + FluidStack tFluid = fluids[slot]; if(slot < 0 || slot >= maxDistinctFluids) { // Invalid slot return 0; } - if((fluids.get(slot) != null) && !fluids.get(slot).equals(push)) { + if((tFluid != null) && !tFluid.equals(push)) { // Selected slot is taken by a non-matching fluid return 0; } else { + int fit = 0; // Add to existing fluid - final FluidStack existing = fluids.get(slot); - final int fit = Math.min(getCapacity() - existing.amount, push.amount); - if(doPush) { - existing.amount += fit; + if (tFluid == null) { + fit = Math.min(getCapacity(),push.amount); + fluids[slot] = new FluidStack(push.getFluid(), fit); + } else { + fit = Math.min(getCapacity() - tFluid.amount, push.amount); + if(doPush) { + tFluid.amount += fit; + } } // If doVoidExcess, pretend all of it fit return doVoidExcess ? push.amount : fit; @@ -254,16 +343,19 @@ public class MultiFluidHandler { * @return Amount of fluid that was (or would have been, if simulated) pulled. */ public int pullFluid(FluidStack pull, boolean doPull) { - if (locked || !contains(pull)) { + if (locked) { return 0; } else { - final FluidStack src = fluids.get(fluids.indexOf(pull)); + int tIndex = getFluidPosistion(pull); + if (tIndex < 0) + return 0; + FluidStack src = fluids[tIndex]; final int rec = Math.min(pull.amount, src.amount); if (doPull) { src.amount -= rec; } if (src.amount == 0) { - fluids.remove(src); + fluids[tIndex]= null; } return rec; } @@ -281,22 +373,22 @@ public class MultiFluidHandler { * @return Amount of fluid that was (or would have been, if simulated) pulled. */ public int pullFluid(FluidStack pull, int slot, boolean doPull) { - if(locked) { + if(locked || slot >= fluids.length) { return 0; } if(slot < 0 || slot >= maxDistinctFluids) { return 0; } - if(!fluids.get(slot).equals(pull)) { + FluidStack tFluid = fluids[slot]; + if(tFluid == null && tFluid.equals(pull)) { return 0; } else { - final FluidStack src = fluids.get(slot); - final int rec = Math.min(pull.amount, src.amount); + final int rec = Math.min(pull.amount, tFluid.amount); if(doPull) { - src.amount -= rec; + tFluid.amount -= rec; } - if(src.amount == 0) { - fluids.remove(src); + if(tFluid.amount == 0) { + fluids[slot] = null; } return rec; } @@ -312,12 +404,14 @@ public class MultiFluidHandler { if(locked) { return false; } - if(fluids.size() == maxDistinctFluids && !contains(push)) { + int tFluidIndex = getFluidPosistion(push); + int fluidCount = countFluids(); + if(fluidCount >= maxDistinctFluids && !contains(push)) { return false; - } else if (fluids.size() < maxDistinctFluids && !contains(push)) { + } else if (fluidCount < maxDistinctFluids && !contains(push)) { return Math.min(getCapacity(), push.amount) > 0; } else { - final int remcap = getCapacity() - fluids.get(fluids.indexOf(push)).amount; + final int remcap = getCapacity() - fluids[tFluidIndex].amount; return doVoidExcess || (Math.min(remcap, push.amount) > 0); } } -- cgit From 50d3ea937dce9394566e4d2c9cd9c5f8387923a9 Mon Sep 17 00:00:00 2001 From: botn365 <42187820+botn365@users.noreply.github.com> Date: Mon, 12 Oct 2020 15:45:41 +0200 Subject: removed unnecessary getNull --- src/main/java/kekztech/MultiFluidHandler.java | 1 - 1 file changed, 1 deletion(-) (limited to 'src/main/java/kekztech') diff --git a/src/main/java/kekztech/MultiFluidHandler.java b/src/main/java/kekztech/MultiFluidHandler.java index c82a35cd5b..2c1eb2af1c 100644 --- a/src/main/java/kekztech/MultiFluidHandler.java +++ b/src/main/java/kekztech/MultiFluidHandler.java @@ -260,7 +260,6 @@ public class MultiFluidHandler { // Add new fluid final int fit = Math.min(getCapacity(), push.amount); if(doPush) { - empty = getNullSlot(); if (empty == -1) return 0; else -- cgit From bca89a3ed1c9bc4c46d318b316cd82c4837384a7 Mon Sep 17 00:00:00 2001 From: korneel vandamme Date: Tue, 15 Dec 2020 22:58:43 +0100 Subject: fix getTankInfo not geting the fluids --- src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java | 13 +++++++++++++ src/main/java/kekztech/MultiFluidHandler.java | 4 ++++ 2 files changed, 17 insertions(+) (limited to 'src/main/java/kekztech') diff --git a/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java b/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java index c8c987d7dc..408399b677 100644 --- a/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java +++ b/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java @@ -15,6 +15,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; import java.util.HashMap; @@ -180,6 +181,18 @@ public class GTMTE_TFFTMultiHatch extends GT_MetaTileEntity_Hatch { return null; } + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from) { + FluidStack[] fluids = mfh.getAllFluids(); + int length = fluids.length; + int maxCapcity = mfh.getCapacity(); + FluidTankInfo[] tankInfo = new FluidTankInfo[length]; + for (int i = 0; i < length; i++) { + tankInfo[i] = new FluidTankInfo(fluids[i],maxCapcity); + } + return tankInfo; + } + @Override public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) { return false; diff --git a/src/main/java/kekztech/MultiFluidHandler.java b/src/main/java/kekztech/MultiFluidHandler.java index 2c1eb2af1c..936ecf5042 100644 --- a/src/main/java/kekztech/MultiFluidHandler.java +++ b/src/main/java/kekztech/MultiFluidHandler.java @@ -92,6 +92,10 @@ public class MultiFluidHandler { return fluidSelector; } + public FluidStack[] getAllFluids() { + return fluids; + } + public int getFluidPosistion(FluidStack aFluid) { for (int i = 0; i < fluids.length; i++) -- cgit From 979129670881032a3047322b2b52a43845892431 Mon Sep 17 00:00:00 2001 From: korneel vandamme Date: Fri, 25 Dec 2020 01:31:31 +0100 Subject: fix nulpimter crash on null fluid --- src/main/java/kekztech/MultiFluidHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/kekztech') diff --git a/src/main/java/kekztech/MultiFluidHandler.java b/src/main/java/kekztech/MultiFluidHandler.java index 936ecf5042..399f9faa8b 100644 --- a/src/main/java/kekztech/MultiFluidHandler.java +++ b/src/main/java/kekztech/MultiFluidHandler.java @@ -383,7 +383,7 @@ public class MultiFluidHandler { return 0; } FluidStack tFluid = fluids[slot]; - if(tFluid == null && tFluid.equals(pull)) { + if(tFluid == null || !tFluid.equals(pull)) { return 0; } else { final int rec = Math.min(pull.amount, tFluid.amount); -- cgit From 3fa74247ea38efc082584e5bfe398d03386b5e90 Mon Sep 17 00:00:00 2001 From: Prometheus0000 Date: Tue, 13 Apr 2021 10:05:22 -0400 Subject: Clean up some things Fix localization of hex tile Hide unused blocks and items Switch capacitor block icons so they match the lapo used to make them --- src/main/java/common/Blocks.java | 12 ++++++------ src/main/java/common/Recipes.java | 10 +++++----- src/main/java/common/TileEntities.java | 12 ++++++------ .../java/common/items/MetaItem_CraftingComponent.java | 8 ++++---- .../java/common/items/MetaItem_ReactorComponent.java | 2 +- src/main/java/kekztech/Items.java | 2 ++ src/main/resources/assets/kekztech/lang/en_US.lang | 2 +- .../textures/blocks/LapotronicEnergyUnit2_side.png | Bin 279 -> 280 bytes .../textures/blocks/LapotronicEnergyUnit2_top.png | Bin 295 -> 296 bytes .../textures/blocks/LapotronicEnergyUnit3_side.png | Bin 279 -> 279 bytes .../textures/blocks/LapotronicEnergyUnit3_top.png | Bin 296 -> 295 bytes .../textures/blocks/LapotronicEnergyUnit4_side.png | Bin 280 -> 279 bytes .../textures/blocks/LapotronicEnergyUnit4_top.png | Bin 296 -> 296 bytes 13 files changed, 25 insertions(+), 23 deletions(-) (limited to 'src/main/java/kekztech') diff --git a/src/main/java/common/Blocks.java b/src/main/java/common/Blocks.java index 304af71460..8c145bd634 100644 --- a/src/main/java/common/Blocks.java +++ b/src/main/java/common/Blocks.java @@ -46,7 +46,7 @@ public class Blocks { registerBlocks_SOFC(); registerBlocks_TFFT(); - registerBlocks_Nuclear(); + //registerBlocks_Nuclear(); //registerBlocks_ItemProxy(); registerBlocks_Jars(); registerBlocks_LSC(); @@ -71,7 +71,7 @@ public class Blocks { tfftMultiHatch = Block_TFFTMultiHatch.registerBlock(); } - private static void registerBlocks_Nuclear() { + /*private static void registerBlocks_Nuclear() { reactorChamberOFF = Block_ReactorChamber_OFF.registerBlock(); reactorChamberON = Block_ReactorChamber_ON.registerBlock(); reactorControlRod = Block_ControlRod.registerBlock(); @@ -81,7 +81,7 @@ public class Blocks { itemProxyCable = Block_ItemProxyCable.registerBlock(); itemProxySource = Block_ItemProxySource.registerBlock(); itemProxyEndpoint = Block_ItemProxyEndpoint.registerBlock(); - } + }*/ private static void registerBlocks_Jars() { jarThaumiumReinforced = Block_ThaumiumReinforcedJar.registerBlock(); @@ -90,14 +90,14 @@ public class Blocks { private static void registerBlocks_LSC() { lscLapotronicEnergyUnit = Block_LapotronicEnergyUnit.registerBlock(); - beamTransmitter = Block_BeamTransmitter.registerBlock(); + //beamTransmitter = Block_BeamTransmitter.registerBlock(); } - private static void registerBlocks_SpaceElevator() { + /*private static void registerBlocks_SpaceElevator() { spaceElevatorStructure = Block_SpaceElevator.registerBlock(); spaceElevatorCapacitor = Block_SpaceElevatorCapacitor.registerBlock(); spaceElevatorTether = Block_SpaceElevatorTether.registerBlock(); - } + }*/ private static void registerBlocks_Cosmetics() { largeHexPlate = Block_LargeHexPlate.registerBlock(); diff --git a/src/main/java/common/Recipes.java b/src/main/java/common/Recipes.java index 9c100bb8e5..87b495cf1a 100644 --- a/src/main/java/common/Recipes.java +++ b/src/main/java/common/Recipes.java @@ -34,7 +34,7 @@ public class Recipes { registerRecipes_TFFT(); registerRecipes_SOFC(); - registerRecipes_Nuclear(); + //registerRecipes_Nuclear(); registerRecipes_Jars(); registerRecipes_LSC(); //registerRecipes_SpaceElevator(); @@ -255,7 +255,7 @@ public class Recipes { 400, 1920); } - private static void registerRecipes_Nuclear() { + /*private static void registerRecipes_Nuclear() { final MetaItem_CraftingComponent craftingItem = MetaItem_CraftingComponent.getInstance(); @@ -331,7 +331,7 @@ public class Recipes { craftingItem.getStackOfAmountFromDamage(Items.IsotopicallyPureDiamondCrystal.getMetaID(), 4), craftingItem.getStackFromDamage(Items.DiamondHeatPipe.getMetaID()), null, 1200, 7680); - } + }*/ private static void registerRecipes_Jars() { @@ -569,7 +569,7 @@ public class Recipes { ); } - private static void registerRecipes_SpaceElevator() { + /*private static void registerRecipes_SpaceElevator() { // Controller final Object[] se_recipe = { "BCB", "CPC", "BCB", @@ -593,7 +593,7 @@ public class Recipes { 'C', OrePrefixes.cableGt01.get(Materials.Aluminium) }; GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.spaceElevatorStructure, 1, 1), seCoilHolder_recipe); - } + }*/ private static void registerRecipes_Cosmetics() { diff --git a/src/main/java/common/TileEntities.java b/src/main/java/common/TileEntities.java index 9bb839feda..740b985b00 100644 --- a/src/main/java/common/TileEntities.java +++ b/src/main/java/common/TileEntities.java @@ -8,7 +8,7 @@ public class TileEntities { // Multiblock controllers public static GTMTE_SOFuelCellMK1 sofc1; public static GTMTE_SOFuelCellMK2 sofc2; - public static GTMTE_ModularNuclearReactor mdr; + //public static GTMTE_ModularNuclearReactor mdr; public static GTMTE_FluidMultiStorage fms; public static GTMTE_LapotronicSuperCapacitor lsc; public static GTMTE_SpaceElevator se; @@ -19,20 +19,20 @@ public class TileEntities { public static void preInit() { GameRegistry.registerTileEntity(TE_TFFTMultiHatch.class, "kekztech_tfftmultihatch_tile"); - GameRegistry.registerTileEntity(TE_ItemProxyCable.class, "kekztech_itemproxycable_tile"); - GameRegistry.registerTileEntity(TE_ItemProxySource.class, "kekztech_itemproxysource_tile"); - GameRegistry.registerTileEntity(TE_ItemProxyEndpoint.class, "kekztech_itemproxyendpoint_tile"); + //GameRegistry.registerTileEntity(TE_ItemProxyCable.class, "kekztech_itemproxycable_tile"); + //GameRegistry.registerTileEntity(TE_ItemProxySource.class, "kekztech_itemproxysource_tile"); + //GameRegistry.registerTileEntity(TE_ItemProxyEndpoint.class, "kekztech_itemproxyendpoint_tile"); GameRegistry.registerTileEntity(TE_ThaumiumReinforcedJar.class, "kekztech_thaumiumreinforcedjar"); GameRegistry.registerTileEntity(TE_IchorJar.class, "kekztech_ichorjar"); //GameRegistry.registerTileEntity(TE_SpaceElevatorCapacitor.class, "kekztech_secapacitor"); - GameRegistry.registerTileEntity(TE_BeamTransmitter.class, "kekztech_beamtransmitter"); + //GameRegistry.registerTileEntity(TE_BeamTransmitter.class, "kekztech_beamtransmitter"); } public static void init() { // Multiblock controllers sofc1 = new GTMTE_SOFuelCellMK1(13101, "multimachine.fuelcellmk1", "Solid-Oxide Fuel Cell Mk I"); sofc2 = new GTMTE_SOFuelCellMK2(13102, "multimachine.fuelcellmk2", "Solid-Oxide Fuel Cell Mk II"); - mdr = new GTMTE_ModularNuclearReactor(13103, "multimachine.nuclearreactor", "Nuclear Reactor"); + //mdr = new GTMTE_ModularNuclearReactor(13103, "multimachine.nuclearreactor", "Nuclear Reactor"); fms = new GTMTE_FluidMultiStorage(13104, "multimachine.tf_fluidtank", "T.F.F.T"); lsc = new GTMTE_LapotronicSuperCapacitor(13106, "multimachine.supercapacitor", "Lapotronic Supercapacitor"); //se = new GTMTE_SpaceElevator(13107, "multimachine.spaceelevator", "Space Elevator"); diff --git a/src/main/java/common/items/MetaItem_CraftingComponent.java b/src/main/java/common/items/MetaItem_CraftingComponent.java index 2b1c989831..ca1c3dee7b 100644 --- a/src/main/java/common/items/MetaItem_CraftingComponent.java +++ b/src/main/java/common/items/MetaItem_CraftingComponent.java @@ -33,9 +33,9 @@ public class MetaItem_CraftingComponent extends Item { @Override public void registerIcons(IIconRegister reg) { - int counter = 0; + int counter = 9; // Raw heat pipes - icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "CopperHeatPipe"); + /*icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "CopperHeatPipe"); icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "SilverHeatPipe"); icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "BoronArsenideHeatPipe"); icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "DiamondHeatPipe"); @@ -45,7 +45,7 @@ public class MetaItem_CraftingComponent extends Item { icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "AmineCarbamateDust"); // Crystal icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "BoronArsenideCrystal"); - icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "IsotopicallyPureDiamondCrystal"); + icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "IsotopicallyPureDiamondCrystal");*/ // Ceramics icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "YSZCeramicDust"); icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "GDCCeramicDust"); @@ -64,7 +64,7 @@ public class MetaItem_CraftingComponent extends Item { @SuppressWarnings({"unchecked"}) @Override public void getSubItems(Item item, CreativeTabs tab, List list) { - for(int i = 0; i < icons.length; i++) { + for(int i = 9; i < icons.length; i++) { list.add(new ItemStack(item, 1, i)); } } diff --git a/src/main/java/common/items/MetaItem_ReactorComponent.java b/src/main/java/common/items/MetaItem_ReactorComponent.java index 705c6e8693..9d364e7585 100644 --- a/src/main/java/common/items/MetaItem_ReactorComponent.java +++ b/src/main/java/common/items/MetaItem_ReactorComponent.java @@ -37,7 +37,7 @@ public class MetaItem_ReactorComponent extends Item { super.setUnlocalizedName(unlocalizedName); super.setCreativeTab(CreativeTabs.tabMisc); super.setMaxStackSize(1); - GameRegistry.registerItem(getInstance(), unlocalizedName); + //GameRegistry.registerItem(getInstance(), unlocalizedName); } @Override diff --git a/src/main/java/kekztech/Items.java b/src/main/java/kekztech/Items.java index 59873f88a0..50e56ced00 100644 --- a/src/main/java/kekztech/Items.java +++ b/src/main/java/kekztech/Items.java @@ -9,6 +9,7 @@ import util.Util; import java.util.Arrays; public enum Items { + /* // Heat Vents T1HeatVent(0,0), T2HeatVent(1,0), T3HeatVent(2,0), T4HeatVent(3,0), T1ComponentHeatVent(4,0), T2ComponentHeatVent(5,0), T3ComponentHeatVent(6,0), T4ComponentHeatVent(7,0), @@ -36,6 +37,7 @@ public enum Items { CopperHeatPipe(0,1), SilverHeatPipe(1,1), BoronArsenideHeatPipe(2,1), DiamondHeatPipe(3,1), BoronArsenideDust(4,1), IsotopicallyPureDiamondDust(5,1), AmineCarbamiteDust(6,1), BoronArsenideCrystal(7,1), IsotopicallyPureDiamondCrystal(8,1), + */ // Ceramics YSZCeramicDust(9,1), GDCCeramicDust(10,1), YttriaDust(11,1), ZirconiaDust(12,1), CeriaDust(13,1), diff --git a/src/main/resources/assets/kekztech/lang/en_US.lang b/src/main/resources/assets/kekztech/lang/en_US.lang index 3f50a5ee0e..174c4863b1 100644 --- a/src/main/resources/assets/kekztech/lang/en_US.lang +++ b/src/main/resources/assets/kekztech/lang/en_US.lang @@ -173,7 +173,7 @@ tile.kekztech_spaceelevatorcapacitor_block.desc=The see-through is good for your tile.kekztech_spaceelevatortether_block.name=Space Elevator Tether # -------- Cosmetic Blocks -tile.kekztech_largehextile_block=Large Hex Tile +tile.kekztech_largehextile_block.name=Large Hex Tile # -------- Beam Transmitter tile.kekztech_beamtransmitter_block=Beam Transmitter diff --git a/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit2_side.png b/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit2_side.png index a8894d382e..d462a774a1 100644 Binary files a/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit2_side.png and b/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit2_side.png differ diff --git a/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit2_top.png b/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit2_top.png index 96d56ac6a6..2f1f4299eb 100644 Binary files a/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit2_top.png and b/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit2_top.png differ diff --git a/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit3_side.png b/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit3_side.png index 3827b174c0..a8894d382e 100644 Binary files a/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit3_side.png and b/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit3_side.png differ diff --git a/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit3_top.png b/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit3_top.png index 68e03929d8..96d56ac6a6 100644 Binary files a/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit3_top.png and b/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit3_top.png differ diff --git a/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit4_side.png b/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit4_side.png index d462a774a1..3827b174c0 100644 Binary files a/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit4_side.png and b/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit4_side.png differ diff --git a/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit4_top.png b/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit4_top.png index 2f1f4299eb..68e03929d8 100644 Binary files a/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit4_top.png and b/src/main/resources/assets/kekztech/textures/blocks/LapotronicEnergyUnit4_top.png differ -- cgit