From 7461f6a5173fdc5b3a20dc413ea7ce658fb820f2 Mon Sep 17 00:00:00 2001 From: Christina Berchtold Date: Sat, 9 Nov 2019 18:13:35 +0100 Subject: UI for Item Distribution Network Node --- config/CodeChickenLib.cfg | 2 +- config/IC2.ini | 336 ++++++++++----------- config/splash.properties | 2 +- mods/CodeChickenCore-1.7.10-1.0.7.47-universal.jar | Bin 0 -> 145782 bytes .../java/blocks/Block_ItemDistributionNode.java | 15 + .../container/Container_ItemDistributionNode.java | 68 +++++ .../java/container/Gui_ItemDistributionNode.java | 49 +++ src/main/java/kekztech/GTRecipe.java | 104 ------- src/main/java/kekztech/GuiHandler.java | 35 +++ .../ItemDistributionNetworkController.java | 45 ++- src/main/java/kekztech/KekzCore.java | 11 + .../java/kekztech/MultiBlockTooltipBuilder.java | 160 ---------- src/main/java/kekztech/TFFTFluidHandler.java | 7 - .../java/tileentities/GTMTE_FluidMultiStorage.java | 2 +- .../tileentities/GTMTE_ModularNuclearReactor.java | 2 +- .../java/tileentities/GTMTE_SOFuelCellMK1.java | 2 +- .../java/tileentities/GTMTE_SOFuelCellMK2.java | 2 +- .../tileentities/TE_ItemDistributionCable.java | 20 +- .../java/tileentities/TE_ItemDistributionNode.java | 48 ++- src/main/java/util/MultiBlockTooltipBuilder.java | 160 ++++++++++ .../kekztech/textures/gui/ItemDistributorNode.png | Bin 0 -> 3659 bytes 21 files changed, 610 insertions(+), 460 deletions(-) create mode 100644 mods/CodeChickenCore-1.7.10-1.0.7.47-universal.jar create mode 100644 src/main/java/container/Container_ItemDistributionNode.java create mode 100644 src/main/java/container/Gui_ItemDistributionNode.java delete mode 100644 src/main/java/kekztech/GTRecipe.java create mode 100644 src/main/java/kekztech/GuiHandler.java delete mode 100644 src/main/java/kekztech/MultiBlockTooltipBuilder.java delete mode 100644 src/main/java/kekztech/TFFTFluidHandler.java create mode 100644 src/main/java/util/MultiBlockTooltipBuilder.java create mode 100644 src/main/resources/assets/kekztech/textures/gui/ItemDistributorNode.png diff --git a/config/CodeChickenLib.cfg b/config/CodeChickenLib.cfg index 947513c59e..94d4c170a5 100644 --- a/config/CodeChickenLib.cfg +++ b/config/CodeChickenLib.cfg @@ -3,6 +3,6 @@ dump_asm=true #Path to directory holding packaged.srg, fields.csv and methods.csv for mcp remapping -mappingDir=/home/kekzdealer/.gradle/caches/minecraft/net/minecraftforge/forge/1.7.10-10.13.4.1614-1.7.10/unpacked/conf +mappingDir=C:\Users\Kekzdealer\.gradle\caches\minecraft\net\minecraftforge\forge\1.7.10-10.13.4.1614-1.7.10\unpacked\conf textify=true diff --git a/config/IC2.ini b/config/IC2.ini index bfd80df245..f1f5ebb5e1 100644 --- a/config/IC2.ini +++ b/config/IC2.ini @@ -1,168 +1,168 @@ -; ic2 general config -; created Oct 22, 2019 11:53:16 PM -;--- - -[worldgen] -; Enable generation of rubber trees in the world. -rubberTree = true -; Enable generation of copper in the world. -copperOre = true -; Enable generation of tin in the world. -tinOre = true -; Enable generation of uranium in the world. -uraniumOre = true -; Enable generation of Lead in the world. -leadOre = true -; Factor scaling the IC2 ore generation quantity. -oreDensityFactor = 1.0 - -[protection] -; Enable logging of players when they remove a machine using a wrench. -wrenchLogging = true -; Maximum Explosion power of a nuke, where TNT is 4. -nukeExplosionPowerLimit = 60 -; Maximum explosion power of a nuclear reactor, where TNT is 4. -reactorExplosionPowerLimit = 45 -; Enable the nuke -enableNuke = true - -[balance] -; Maximum battery tier usable by the miner. -; 1 = batteries, 2 = lead batteries, 3 = energy crystals, 4 = lapotron crystals -minerDischargeTier = 1 -; Increase the energy use by the player's inventory weight when going through a teleporter. -teleporterUseInventoryWeight = true -; Ratio of energy retained inside energy storage block Items when wrenched. -; 0 (nothing) ... 1 (100%), default 0.8 (80 %) -energyRetainedInStorageBlockDrops = 0.8 -; Factor to scale the UU-Matter production energy requirement. -uuEnergyFactor = 1.0 -; Disable the vanilla ender chest, removing existing ones from the world as well. -disableEnderChest = false -; Comma separated list of blocks and items which should not be turned into scrap by the recycler. -; Format: [@metadata], metadata * matches any. -; Ore dictionary entries can be specified with OreDict: as the name. -recyclerBlacklist = minecraft:glass_pane, minecraft:stick, minecraft:snowball, minecraft:snow_layer, minecraft:snow, IC2:blockScaffold -; Whitelist for blocks/items allowed to be recycled. -; The whitelist will be used instead of the blacklist approach if it's non-empty, disallowing everything else. -; The format is the same as the blacklist. -recyclerWhitelist = -; Allow to pick blocks up using just a pickaxe instead of needing a wrench. -ignoreWrenchRequirement = false - -; Base energy generation factors - increase for higher energy yield. -[balance / energy / generator] -generator = 1.0 -geothermal = 1.0 -; Deprecated, because of Kinetic Watermill -water = 1.0 -solar = 1.0 -; Deprecated, because of Kinetic Windmill -wind = 1.0 -nuclear = 1.0 -semiFluidOil = 1.0 -semiFluidFuel = 1.0 -semiFluidBiomass = 1.0 -semiFluidBioethanol = 1.0 -semiFluidBiogas = 1.0 -Stirling = 1.0 -Kinetic = 1.0 -radioisotope = 1.0 - -; Base heat generation factors - increase for higher heat yield. -[balance / energy / heatgenerator] -semiFluidOil = 1.0 -semiFluidFuel = 1.0 -semiFluidBiomass = 1.0 -semiFluidBioethanol = 1.0 -semiFluidBiogas = 1.0 -solid = 1.0 -radioisotope = 1.0 -electric = 1.0 - -; Base kinetic generation factors - increase for higher kinetic energy yield. -[balance / energy / kineticgenerator] -water = 1.0 -wind = 1.0 -manual = 1.0 -steam = 1.0 -electric = 1.0 - -; Basically the amount of hU the conversion of one mB of Liquid takes/gives -[balance / energy / fluidconversion] -; Lava -> PahoehoeLava -heatExchangerLava = 1.0 -; Hot Coolant <-> Cold Coolant -heatExchangerHotCoolant = 1.0 -; Hot Water <- Water -heatExchangerWater = 1.0 - -; Base Coolant conversion rate for FluidReactors. -[balance / energy / FluidReactor] -outputModifier = 1.0 - -; Balace Value for Turbine Livetime in sec. Default 86400sec = 24h -[balance / SteamKineticGenerator] -rotorlivetime = 86400 - -; Balace Values for calcification default 100.000mB Water -> to failure -[balance / steamgenerator / calcification] -maxcalcification = 100000 - -; Balance Values for Fermenter -[balance / fermenter] -need_amount_biomass_per_run = 10 -output_amount_biogas_per_run = 200 -hU_per_run = 8000 -biomass_per_fertilizier = 500 - -; Additional initial uu values, a value of 1 equals cobblestone. -; Recipes may cause the final value be lower than the one specified here. -; Format: [@metadata] = -[balance / uu-values / predefined] -IC2:itemOreIridium = 12000 - -[recipes] -; To modify recipes or add custom recipes, copy the corresponding .ini file to -; "minecraft/config/ic2" and modify it. -; -; Disable IC2 crafting recipes with the specified output, comma separated list. -; Recipes in the additional section below aren't affected. -; Format: [@metadata], e.g. minecraft:bucket to disable IC2's bucket recipe from tin. -disable = -; Purge crafting recipes with the specified output, including vanilla and mod ones, comma separated list. -; Recipes in the additional section below aren't affected. -; Format: [@metadata], e.g. minecraft:tnt to disable crafting tnt. -purge = -; Enable crafting of IC2 coins, otherwise they have to be spawned in and are thus limited. -allowCoinCrafting = true -; Allow only IC2 circuits to be used in IC2's recipes. -requireIc2Circuits = false -; Adjust smelting recipes to always output IC2 items if available. -smeltToIc2Items = false -; Ignore invalid recipes. -ignoreInvalidRecipes = false - -[misc] -; Enable IC2's custom sound system. -enableIc2Audio = true -; Maximum number of active audio sources, only change it if you know what you're doing. -maxAudioSourceCount = 32 -; Enable hiding of secret recipes in CraftGuide/NEI. -hideSecretRecipes = true -; Enable activation of the quantum leggings' speed boost when sprinting instead of holding the boost key. -quantumSpeedOnSprint = true -; Enable burning of scrap in a generator. -allowBurningScrap = true -; Comma separated list with ores the miner should harvest. -; Format: [@metadata], e.g. minecraft:torch, minecraft:chest -; The metadata * will match any, e.g. minecraft:log@*. -; Ore dictionary entries can be specified with OreDict: as the name. -additionalValuableOres = -; Use the new highly experimental current + voltage energy net model with energy loss. -; Only set this to true if you know what you are doing. -useLinearTransferModel = false -; Potion ID of radiation potion. -; Do not change this after you created a world... -radiationPotionID = 24 - +; ic2 general config +; created Nov 9, 2019 6:10:47 PM +;--- + +[worldgen] +; Enable generation of rubber trees in the world. +rubberTree = true +; Enable generation of copper in the world. +copperOre = true +; Enable generation of tin in the world. +tinOre = true +; Enable generation of uranium in the world. +uraniumOre = true +; Enable generation of Lead in the world. +leadOre = true +; Factor scaling the IC2 ore generation quantity. +oreDensityFactor = 1.0 + +[protection] +; Enable logging of players when they remove a machine using a wrench. +wrenchLogging = true +; Maximum Explosion power of a nuke, where TNT is 4. +nukeExplosionPowerLimit = 60 +; Maximum explosion power of a nuclear reactor, where TNT is 4. +reactorExplosionPowerLimit = 45 +; Enable the nuke +enableNuke = true + +[balance] +; Maximum battery tier usable by the miner. +; 1 = batteries, 2 = lead batteries, 3 = energy crystals, 4 = lapotron crystals +minerDischargeTier = 1 +; Increase the energy use by the player's inventory weight when going through a teleporter. +teleporterUseInventoryWeight = true +; Ratio of energy retained inside energy storage block Items when wrenched. +; 0 (nothing) ... 1 (100%), default 0.8 (80 %) +energyRetainedInStorageBlockDrops = 0.8 +; Factor to scale the UU-Matter production energy requirement. +uuEnergyFactor = 1.0 +; Disable the vanilla ender chest, removing existing ones from the world as well. +disableEnderChest = false +; Comma separated list of blocks and items which should not be turned into scrap by the recycler. +; Format: [@metadata], metadata * matches any. +; Ore dictionary entries can be specified with OreDict: as the name. +recyclerBlacklist = minecraft:glass_pane, minecraft:stick, minecraft:snowball, minecraft:snow_layer, minecraft:snow, IC2:blockScaffold +; Whitelist for blocks/items allowed to be recycled. +; The whitelist will be used instead of the blacklist approach if it's non-empty, disallowing everything else. +; The format is the same as the blacklist. +recyclerWhitelist = +; Allow to pick blocks up using just a pickaxe instead of needing a wrench. +ignoreWrenchRequirement = false + +; Base energy generation factors - increase for higher energy yield. +[balance / energy / generator] +generator = 1.0 +geothermal = 1.0 +; Deprecated, because of Kinetic Watermill +water = 1.0 +solar = 1.0 +; Deprecated, because of Kinetic Windmill +wind = 1.0 +nuclear = 1.0 +semiFluidOil = 1.0 +semiFluidFuel = 1.0 +semiFluidBiomass = 1.0 +semiFluidBioethanol = 1.0 +semiFluidBiogas = 1.0 +Stirling = 1.0 +Kinetic = 1.0 +radioisotope = 1.0 + +; Base heat generation factors - increase for higher heat yield. +[balance / energy / heatgenerator] +semiFluidOil = 1.0 +semiFluidFuel = 1.0 +semiFluidBiomass = 1.0 +semiFluidBioethanol = 1.0 +semiFluidBiogas = 1.0 +solid = 1.0 +radioisotope = 1.0 +electric = 1.0 + +; Base kinetic generation factors - increase for higher kinetic energy yield. +[balance / energy / kineticgenerator] +water = 1.0 +wind = 1.0 +manual = 1.0 +steam = 1.0 +electric = 1.0 + +; Basically the amount of hU the conversion of one mB of Liquid takes/gives +[balance / energy / fluidconversion] +; Lava -> PahoehoeLava +heatExchangerLava = 1.0 +; Hot Coolant <-> Cold Coolant +heatExchangerHotCoolant = 1.0 +; Hot Water <- Water +heatExchangerWater = 1.0 + +; Base Coolant conversion rate for FluidReactors. +[balance / energy / FluidReactor] +outputModifier = 1.0 + +; Balace Value for Turbine Livetime in sec. Default 86400sec = 24h +[balance / SteamKineticGenerator] +rotorlivetime = 86400 + +; Balace Values for calcification default 100.000mB Water -> to failure +[balance / steamgenerator / calcification] +maxcalcification = 100000 + +; Balance Values for Fermenter +[balance / fermenter] +need_amount_biomass_per_run = 10 +output_amount_biogas_per_run = 200 +hU_per_run = 8000 +biomass_per_fertilizier = 500 + +; Additional initial uu values, a value of 1 equals cobblestone. +; Recipes may cause the final value be lower than the one specified here. +; Format: [@metadata] = +[balance / uu-values / predefined] +IC2:itemOreIridium = 12000 + +[recipes] +; To modify recipes or add custom recipes, copy the corresponding .ini file to +; "minecraft/config/ic2" and modify it. +; +; Disable IC2 crafting recipes with the specified output, comma separated list. +; Recipes in the additional section below aren't affected. +; Format: [@metadata], e.g. minecraft:bucket to disable IC2's bucket recipe from tin. +disable = +; Purge crafting recipes with the specified output, including vanilla and mod ones, comma separated list. +; Recipes in the additional section below aren't affected. +; Format: [@metadata], e.g. minecraft:tnt to disable crafting tnt. +purge = +; Enable crafting of IC2 coins, otherwise they have to be spawned in and are thus limited. +allowCoinCrafting = true +; Allow only IC2 circuits to be used in IC2's recipes. +requireIc2Circuits = false +; Adjust smelting recipes to always output IC2 items if available. +smeltToIc2Items = false +; Ignore invalid recipes. +ignoreInvalidRecipes = false + +[misc] +; Enable IC2's custom sound system. +enableIc2Audio = true +; Maximum number of active audio sources, only change it if you know what you're doing. +maxAudioSourceCount = 32 +; Enable hiding of secret recipes in CraftGuide/NEI. +hideSecretRecipes = true +; Enable activation of the quantum leggings' speed boost when sprinting instead of holding the boost key. +quantumSpeedOnSprint = true +; Enable burning of scrap in a generator. +allowBurningScrap = true +; Comma separated list with ores the miner should harvest. +; Format: [@metadata], e.g. minecraft:torch, minecraft:chest +; The metadata * will match any, e.g. minecraft:log@*. +; Ore dictionary entries can be specified with OreDict: as the name. +additionalValuableOres = +; Use the new highly experimental current + voltage energy net model with energy loss. +; Only set this to true if you know what you are doing. +useLinearTransferModel = false +; Potion ID of radiation potion. +; Do not change this after you created a world... +radiationPotionID = 24 + diff --git a/config/splash.properties b/config/splash.properties index 655e362f26..708e73fd10 100644 --- a/config/splash.properties +++ b/config/splash.properties @@ -1,5 +1,5 @@ #Splash screen properties -#Tue Oct 22 23:53:07 CEST 2019 +#Sat Nov 09 18:10:34 CET 2019 logoTexture=textures/gui/title/mojang.png background=0xFFFFFF font=0x0 diff --git a/mods/CodeChickenCore-1.7.10-1.0.7.47-universal.jar b/mods/CodeChickenCore-1.7.10-1.0.7.47-universal.jar new file mode 100644 index 0000000000..93c29f42c8 Binary files /dev/null and b/mods/CodeChickenCore-1.7.10-1.0.7.47-universal.jar differ diff --git a/src/main/java/blocks/Block_ItemDistributionNode.java b/src/main/java/blocks/Block_ItemDistributionNode.java index 11d9e22b39..07fd988445 100644 --- a/src/main/java/blocks/Block_ItemDistributionNode.java +++ b/src/main/java/blocks/Block_ItemDistributionNode.java @@ -6,6 +6,7 @@ import kekztech.KekzCore; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import tileentities.TE_ItemDistributionNode; @@ -32,6 +33,20 @@ public class Block_ItemDistributionNode extends BlockContainer { GameRegistry.registerBlock(getInstance(), IB_ItemDistributionNode.class, blockName); } + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float lx, float ly, float lz) { + if(world.isRemote) { + return true; + } + + final TileEntity te = world.getTileEntity(x, y, z); + if(te != null && te instanceof TE_ItemDistributionNode) { + player.openGui(KekzCore.instance, 0, world, x, y, z); + return true; + } + return false; + } + @Override public TileEntity createNewTileEntity(World world, int p_149915_2_) { return new TE_ItemDistributionNode(); diff --git a/src/main/java/container/Container_ItemDistributionNode.java b/src/main/java/container/Container_ItemDistributionNode.java new file mode 100644 index 0000000000..08096bc80f --- /dev/null +++ b/src/main/java/container/Container_ItemDistributionNode.java @@ -0,0 +1,68 @@ +package container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import tileentities.TE_ItemDistributionNode; + +public class Container_ItemDistributionNode extends Container { + + private final TE_ItemDistributionNode te; + + private int slotID = 0; + + public Container_ItemDistributionNode(TE_ItemDistributionNode te, EntityPlayer player) { + this.te = te; + + // Networked Storage + for(int i = 0; i < 4; i++) { + for(int j = 0; j < 4; j++) { + super.addSlotToContainer(new Slot(te, slotID++, 18 * j + 20, 19 * i + 20)); + } + } + + //Inventory + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 9; j++) { + addSlotToContainer(new Slot(player.inventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + // Hotbar + for (int i = 0; i < 9; i++) { + addSlotToContainer(new Slot(player.inventory, i, 8 + i * 18, 142)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slotRaw) { + ItemStack stack = null; + final Slot slot = (Slot) inventorySlots.get(slotRaw); + + if (slot != null && slot.getHasStack()) { + final ItemStack stackInSlot = slot.getStack(); + stack = stackInSlot.copy(); + + if (slotRaw < 3 * 9) { + if (!mergeItemStack(stackInSlot, 3 * 9, inventorySlots.size(), true)) { + return null; + } + } else if (!mergeItemStack(stackInSlot, 0, 3 * 9, false)) { + return null; + } + + if (stackInSlot.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + return stack; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return te.isUseableByPlayer(player); + } + +} diff --git a/src/main/java/container/Gui_ItemDistributionNode.java b/src/main/java/container/Gui_ItemDistributionNode.java new file mode 100644 index 0000000000..08f530fce8 --- /dev/null +++ b/src/main/java/container/Gui_ItemDistributionNode.java @@ -0,0 +1,49 @@ +package container; + +import org.lwjgl.opengl.GL11; + +import kekztech.KekzCore; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; +import tileentities.TE_ItemDistributionNode; + +public class Gui_ItemDistributionNode extends GuiContainer { + + private final ResourceLocation texture = new ResourceLocation(KekzCore.MODID, "textures/gui/ItemDistributionNode.png"); + + private final InventoryPlayer inventory; + private final TE_ItemDistributionNode te; + + public Gui_ItemDistributionNode(TE_ItemDistributionNode te, EntityPlayer player) { + super(new Container_ItemDistributionNode(te, player)); + inventory = player.inventory; + this.te = te; + + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + + Minecraft.getMinecraft().renderEngine.bindTexture(texture); + GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + + final int x = (super.width - super.xSize) / 2; + final int y = (super.height - super.ySize) / 2; + + super.drawTexturedModalRect(x, y, 0, 0, super.xSize, super.ySize); + } + + @Override + protected void drawGuiContainerForegroundLayer(int p1, int p2) { + super.fontRendererObj.drawString( + I18n.format(te.getInventoryName()), + (super.xSize / 2) - (fontRendererObj.getStringWidth(I18n.format(te.getInventoryName())) / 2), + 6, 4210752, false); + super.fontRendererObj.drawString( + I18n.format(inventory.getInventoryName()), 8, super.ySize - 96 + 2, 4210752); + } +} diff --git a/src/main/java/kekztech/GTRecipe.java b/src/main/java/kekztech/GTRecipe.java deleted file mode 100644 index 1939afc8ff..0000000000 --- a/src/main/java/kekztech/GTRecipe.java +++ /dev/null @@ -1,104 +0,0 @@ -package kekztech; - -import java.util.ArrayList; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; -import util.Util; - -public class GTRecipe { - - private int euPerTick = 0; - private int duration = 0; - - private ArrayList inputItems; - private ArrayList inputFluids; - private ArrayList outputItems; - private ArrayList outputFluids; - - public int getEuPerTick() { - return euPerTick; - } - public int getDuration() { - return duration; - } - public ItemStack[] getInputItems() { - return Util.toItemStackArray(inputItems); - } - public FluidStack[] getInputFluids() { - return Util.toFluidStackArray(inputFluids); - } - public ItemStack[] getOutputItems() { - return Util.toItemStackArray(outputItems); - } - public FluidStack[] getOutputFluids() { - return Util.toFluidStackArray(outputFluids); - } - public ItemStack getInputItem() { - final ItemStack[] s = Util.toItemStackArray(inputItems); - return s[0]; - } - public FluidStack getInputFluid() { - final FluidStack[] s = Util.toFluidStackArray(inputFluids); - return s[0]; - } - public ItemStack getOutputItem() { - final ItemStack[] s = Util.toItemStackArray(outputItems); - return s[0]; - } - public FluidStack getOutputFluid() { - final FluidStack[] s = Util.toFluidStackArray(outputFluids); - return s[0]; - } - - public GTRecipe addInputItem(ItemStack inputItem) { - if(inputItems == null) { - inputItems = new ArrayList(); - inputItems.add(inputItem); - } else { - inputItems.add(inputItem); - } - return this; - } - - public GTRecipe addOutputItem(ItemStack outputItem) { - if(outputItems == null) { - outputItems = new ArrayList(); - outputItems.add(outputItem); - } else { - outputItems.add(outputItem); - } - return this; - } - - public GTRecipe addInputFluid(FluidStack inputFluid) { - if(inputFluids == null) { - inputFluids = new ArrayList(); - inputFluids.add(inputFluid); - } else { - inputFluids.add(inputFluid); - } - return this; - } - - public GTRecipe addOutputFluid(FluidStack outputFluid) { - if(outputFluids == null) { - outputFluids = new ArrayList(); - outputFluids.add(outputFluid); - } else { - outputFluids.add(outputFluid); - } - return this; - } - - public GTRecipe setEUPerTick(int euPerTick) { - this.euPerTick = euPerTick; - return this; - } - - public GTRecipe setDuration(int duration) { - this.duration = duration; - return this; - } - -} diff --git a/src/main/java/kekztech/GuiHandler.java b/src/main/java/kekztech/GuiHandler.java new file mode 100644 index 0000000000..21ad5c95ae --- /dev/null +++ b/src/main/java/kekztech/GuiHandler.java @@ -0,0 +1,35 @@ +package kekztech; + +import container.Container_ItemDistributionNode; +import container.Gui_ItemDistributionNode; +import cpw.mods.fml.common.network.IGuiHandler; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import tileentities.TE_ItemDistributionNode; + +public class GuiHandler implements IGuiHandler { + + @Override + public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + final TileEntity te = world.getTileEntity(x, y, z); + if(te != null) { + if(ID == 0) { + return new Container_ItemDistributionNode((TE_ItemDistributionNode) te, player); + } + } + return null; + } + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + final TileEntity te = world.getTileEntity(x, y, z); + if(te != null) { + if(ID == 0) { + return new Gui_ItemDistributionNode((TE_ItemDistributionNode) te, player); + } + } + return null; + } + +} diff --git a/src/main/java/kekztech/ItemDistributionNetworkController.java b/src/main/java/kekztech/ItemDistributionNetworkController.java index e188cb0d26..bf976898e5 100644 --- a/src/main/java/kekztech/ItemDistributionNetworkController.java +++ b/src/main/java/kekztech/ItemDistributionNetworkController.java @@ -6,6 +6,7 @@ import java.util.HashSet; import java.util.LinkedList; import java.util.UUID; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -15,7 +16,9 @@ public class ItemDistributionNetworkController implements Comparable conduits = new LinkedList<>(); - private final HashMap sources = new HashMap<>(); // k = resource name, v = source conduit + private final boolean[] slotDirections = new boolean[15]; + private final ItemStack[] networkedItemStacks = new ItemStack[15]; + //private final HashMap sources = new HashMap<>(); // k = resource name, v = source conduit public ItemDistributionNetworkController() { @@ -125,6 +128,46 @@ public class ItemDistributionNetworkController implements Comparable= slotDirections.length) { + return false; + } + return slotDirections[slot]; + } + + /** + * Return the ItemStack that is contained in the given slot number. + * + * Slots are numbered left to right, then top to bottom and start at zero. + * For example, the second slot in the second row, would have a slot number of five. + * + * @param slot: + * Slot number. + * @return ItemStack at given slot number. + */ + public ItemStack getStackInSlot(int slot) { + if(slot >= networkedItemStacks.length) { + return null; + } + return networkedItemStacks[slot]; + } + + public void setStackInSlot(int slot, ItemStack itemStack) { + if(slot < networkedItemStacks.length && isInputSlot(slot)) { + networkedItemStacks[slot] = itemStack; + } + } + /** * Register a new conduit to this network. * diff --git a/src/main/java/kekztech/KekzCore.java b/src/main/java/kekztech/KekzCore.java index 3b88a9074d..f93b5a9802 100644 --- a/src/main/java/kekztech/KekzCore.java +++ b/src/main/java/kekztech/KekzCore.java @@ -2,6 +2,8 @@ package kekztech; import blocks.Block_ControlRod; import blocks.Block_GDCUnit; +import blocks.Block_ItemDistributionCable; +import blocks.Block_ItemDistributionNode; import blocks.Block_ReactorChamber_OFF; import blocks.Block_ReactorChamber_ON; import blocks.Block_TFFTCasing; @@ -16,6 +18,7 @@ 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 gregtech.api.enums.GT_Values; import gregtech.api.enums.ItemList; @@ -33,6 +36,8 @@ import tileentities.GTMTE_FluidMultiStorage; import tileentities.GTMTE_ModularNuclearReactor; import tileentities.GTMTE_SOFuelCellMK1; import tileentities.GTMTE_SOFuelCellMK2; +import tileentities.TE_ItemDistributionCable; +import tileentities.TE_ItemDistributionNode; import tileentities.TE_TFFTMultiHatch; import util.Util; @@ -82,8 +87,14 @@ public class KekzCore { Block_ReactorChamber_OFF.getInstance().registerBlock(); Block_ReactorChamber_ON.getInstance().registerBlock(); Block_ControlRod.getInstance().registerBlock(); + Block_ItemDistributionCable.getInstance().registerBlock(); + Block_ItemDistributionNode.getInstance().registerBlock(); // Register TileEntities GameRegistry.registerTileEntity(TE_TFFTMultiHatch.class, "kekztech_tfftmultihatch_tile"); + GameRegistry.registerTileEntity(TE_ItemDistributionCable.class, "kekztech_itemdistributioncable_tile"); + GameRegistry.registerTileEntity(TE_ItemDistributionNode.class, "kekztech_itemdistributionnode_tile"); + // Register a GUI? + NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler()); } @Mod.EventHandler diff --git a/src/main/java/kekztech/MultiBlockTooltipBuilder.java b/src/main/java/kekztech/MultiBlockTooltipBuilder.java deleted file mode 100644 index 6e2e7669a8..0000000000 --- a/src/main/java/kekztech/MultiBlockTooltipBuilder.java +++ /dev/null @@ -1,160 +0,0 @@ -package kekztech; - -import java.util.LinkedList; -import java.util.List; - -import net.minecraft.util.EnumChatFormatting; - -/** - * Have you ever felt like your tooltips just aren't enterprise enough? Use this! - * - * @author kekzdealer - * - */ -public class MultiBlockTooltipBuilder { - - private static final String TAB = " "; - - private final List iLines; - private final List sLines; - - private String[] iArray; - private String[] sArray; - - public MultiBlockTooltipBuilder() { - iLines = new LinkedList<>(); - sLines = new LinkedList<>(); - } - - /** - * Add a basic line of information about this structure - * - * @param line - * The line to be added. - * @return Instance this method was called on. - */ - public MultiBlockTooltipBuilder addInfo(String info) { - iLines.add(info); - return this; - } - - /** - * Add a separator line like this:
- * ------------------------------- - * - * @return Instance this method was called on. - */ - public MultiBlockTooltipBuilder addSeparator() { - iLines.add("-----------------------------------------"); - return this; - } - - /** - * Begin adding structural information by adding a line about the structure's dimensions - * and then inserting a "Structure:" line. - * - * @param w - * Structure width. - * @param h - * Structure height. - * @param l - * Structure depth/length. - * @return Instance this method was called on. - */ - public MultiBlockTooltipBuilder beginStructureBlock(int w, int h, int l) { - sLines.add("Dimensions: " + w + "x" + h + "x" + l + " (WxHxL)"); - sLines.add("Structure:"); - return this; - } - - public MultiBlockTooltipBuilder addController(String info) { - sLines.add(TAB + "Controller: " + info); - return this; - } - - public MultiBlockTooltipBuilder addCasingInfo(String casingName, int minCount) { - sLines.add(TAB + minCount +"x " + casingName + " (at least)"); - return this; - } - - public MultiBlockTooltipBuilder addEnergyHatch(String info) { - sLines.add(TAB + "Energy Hatch: " + info); - return this; - } - - public MultiBlockTooltipBuilder addDynamoHatch(String info) { - sLines.add(TAB + "Dynamo Hatch: " + info); - return this; - } - - public MultiBlockTooltipBuilder addMaintenanceHatch(String info) { - sLines.add(TAB + "Maintenance Hatch: " + info); - return this; - } - - public MultiBlockTooltipBuilder addIOHatches(String info) { - sLines.add(TAB + "I/O Hatches: " + info); - return this; - } - - public MultiBlockTooltipBuilder addInputBus(String info) { - sLines.add(TAB + "Input Bus/ses: " + info); - return this; - } - - public MultiBlockTooltipBuilder addInputHatch(String info) { - sLines.add(TAB + "Input Hatch/es: " + info); - return this; - } - - public MultiBlockTooltipBuilder addOutputBus(String info) { - sLines.add(TAB + "Output Bus/ses: " + info); - return this; - } - - public MultiBlockTooltipBuilder addOutputHatch(String info) { - sLines.add(TAB + "Output Hatch/es: " + info); - return this; - } - - /** - * Use this method to add a structural part that isn't covered by the builders capabilities. - * - * @param name - * Name of the hatch or other component. - * @param info - * Positional information. - * @return Instance this method was called on. - */ - public MultiBlockTooltipBuilder addOtherStructurePart(String name, String info) { - sLines.add(TAB + name + ": " + info); - return this; - } - - /** - * Call at the very end.
- * Adds a final line with the authors name and information on how to display the structure guidelines.
- * Ends the building process. - * - * @param author - * Name of the creator of this Machine - * - * @return The result of all build calls. - */ - public void signAndFinalize(String author) { - iLines.add("Hold " + EnumChatFormatting.BOLD + "[LSHIFT]" + EnumChatFormatting.RESET + EnumChatFormatting.GRAY + " to display structure guidelines"); - iLines.add("Created by " + author); - iArray = new String[iLines.size()]; - sArray = new String[sLines.size()]; - iLines.toArray(iArray); - sLines.toArray(sArray); - } - - public String[] getInformation() { - return iArray; - } - - public String[] getStructureInformation() { - return sArray; - } -} diff --git a/src/main/java/kekztech/TFFTFluidHandler.java b/src/main/java/kekztech/TFFTFluidHandler.java deleted file mode 100644 index 2ed5eac798..0000000000 --- a/src/main/java/kekztech/TFFTFluidHandler.java +++ /dev/null @@ -1,7 +0,0 @@ -package kekztech; - -public class TFFTFluidHandler { - - - -} diff --git a/src/main/java/tileentities/GTMTE_FluidMultiStorage.java b/src/main/java/tileentities/GTMTE_FluidMultiStorage.java index e4ab4e574e..61b8e558f5 100644 --- a/src/main/java/tileentities/GTMTE_FluidMultiStorage.java +++ b/src/main/java/tileentities/GTMTE_FluidMultiStorage.java @@ -21,7 +21,6 @@ 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.MultiBlockTooltipBuilder; import kekztech.MultiFluidHandler; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; @@ -32,6 +31,7 @@ import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; +import util.MultiBlockTooltipBuilder; import util.Vector3i; import util.Vector3ic; diff --git a/src/main/java/tileentities/GTMTE_ModularNuclearReactor.java b/src/main/java/tileentities/GTMTE_ModularNuclearReactor.java index a6b91a60ca..14941e489d 100644 --- a/src/main/java/tileentities/GTMTE_ModularNuclearReactor.java +++ b/src/main/java/tileentities/GTMTE_ModularNuclearReactor.java @@ -15,11 +15,11 @@ 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.MultiBlockTooltipBuilder; import net.minecraft.block.Block; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.ForgeDirection; +import util.MultiBlockTooltipBuilder; public class GTMTE_ModularNuclearReactor extends GT_MetaTileEntity_MultiBlockBase { diff --git a/src/main/java/tileentities/GTMTE_SOFuelCellMK1.java b/src/main/java/tileentities/GTMTE_SOFuelCellMK1.java index 549bc19f72..9aa0a5c01d 100644 --- a/src/main/java/tileentities/GTMTE_SOFuelCellMK1.java +++ b/src/main/java/tileentities/GTMTE_SOFuelCellMK1.java @@ -19,13 +19,13 @@ import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; -import kekztech.MultiBlockTooltipBuilder; import gregtech.api.util.GT_Recipe.GT_Recipe_Map; import net.minecraft.block.Block; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; +import util.MultiBlockTooltipBuilder; import util.Vector3i; import util.Vector3ic; diff --git a/src/main/java/tileentities/GTMTE_SOFuelCellMK2.java b/src/main/java/tileentities/GTMTE_SOFuelCellMK2.java index 8d1f996cb8..3ecba204ce 100644 --- a/src/main/java/tileentities/GTMTE_SOFuelCellMK2.java +++ b/src/main/java/tileentities/GTMTE_SOFuelCellMK2.java @@ -19,13 +19,13 @@ import gregtech.api.objects.GT_RenderedTexture; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; import gregtech.api.util.GT_Recipe.GT_Recipe_Map; -import kekztech.MultiBlockTooltipBuilder; import net.minecraft.block.Block; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; +import util.MultiBlockTooltipBuilder; import util.Vector3i; import util.Vector3ic; diff --git a/src/main/java/tileentities/TE_ItemDistributionCable.java b/src/main/java/tileentities/TE_ItemDistributionCable.java index 153ed139b5..325d04c211 100644 --- a/src/main/java/tileentities/TE_ItemDistributionCable.java +++ b/src/main/java/tileentities/TE_ItemDistributionCable.java @@ -1,7 +1,25 @@ package tileentities; +import kekztech.IConduit; +import kekztech.ItemDistributionNetworkController; import net.minecraft.tileentity.TileEntity; -public class TE_ItemDistributionCable extends TileEntity { +public class TE_ItemDistributionCable extends TileEntity implements IConduit { + + private ItemDistributionNetworkController network; + + public TE_ItemDistributionCable() { + ItemDistributionNetworkController.placeConduit(this); + } + + @Override + public void setNetwork(ItemDistributionNetworkController network) { + this.network = network; + } + + @Override + public ItemDistributionNetworkController getNetwork() { + return network; + } } diff --git a/src/main/java/tileentities/TE_ItemDistributionNode.java b/src/main/java/tileentities/TE_ItemDistributionNode.java index 4da94ea5f5..25d7b64680 100644 --- a/src/main/java/tileentities/TE_ItemDistributionNode.java +++ b/src/main/java/tileentities/TE_ItemDistributionNode.java @@ -5,7 +5,10 @@ import kekztech.ItemDistributionNetworkController; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.Constants; public class TE_ItemDistributionNode extends TileEntity implements IConduit, IInventory { @@ -31,38 +34,58 @@ private ItemDistributionNetworkController network; @Override public ItemStack getStackInSlot(int slot) { - // TODO Auto-generated method stub - return null; + return network.getStackInSlot(slot); } @Override public ItemStack decrStackSize(int slot, int amount) { - // TODO Auto-generated method stub + + if(network.getStackInSlot(slot) != null) { + if(network.getStackInSlot(slot).stackSize == amount) { + final ItemStack itemStack = network.getStackInSlot(slot); + network.setStackInSlot(slot, null); + super.markDirty(); + return itemStack; + } else { + final ItemStack itemStack = network.getStackInSlot(slot).splitStack(amount); + if(network.getStackInSlot(slot).stackSize == 0) { + network.setStackInSlot(slot, null); + } + super.markDirty(); + return itemStack; + } + } + return null; } @Override public ItemStack getStackInSlotOnClosing(int slot) { - // TODO Auto-generated method stub + if(network.getStackInSlot(slot) != null) { + final ItemStack itemStack = network.getStackInSlot(slot); + network.setStackInSlot(slot, null); + return itemStack; + } return null; } @Override public void setInventorySlotContents(int slot, ItemStack itemStack) { - // TODO Auto-generated method stub - + if(itemStack.stackSize > getInventoryStackLimit()) { + itemStack.stackSize = getInventoryStackLimit(); + } + network.setStackInSlot(slot, itemStack); + super.markDirty(); } @Override public String getInventoryName() { - // TODO Auto-generated method stub - return null; + return network.getUUID().toString(); } @Override public boolean hasCustomInventoryName() { - // TODO Auto-generated method stub - return false; + return true; } @Override @@ -88,9 +111,8 @@ private ItemDistributionNetworkController network; } @Override - public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) { - // TODO Auto-generated method stub - return false; + public boolean isItemValidForSlot(int slot, ItemStack itemStack) { + return network.isInputSlot(slot) && network.getStackInSlot(slot).isItemEqual(itemStack); } } diff --git a/src/main/java/util/MultiBlockTooltipBuilder.java b/src/main/java/util/MultiBlockTooltipBuilder.java new file mode 100644 index 0000000000..329220272a --- /dev/null +++ b/src/main/java/util/MultiBlockTooltipBuilder.java @@ -0,0 +1,160 @@ +package util; + +import java.util.LinkedList; +import java.util.List; + +import net.minecraft.util.EnumChatFormatting; + +/** + * Have you ever felt like your tooltips just aren't enterprise enough? Use this! + * + * @author kekzdealer + * + */ +public class MultiBlockTooltipBuilder { + + private static final String TAB = " "; + + private final List iLines; + private final List sLines; + + private String[] iArray; + private String[] sArray; + + public MultiBlockTooltipBuilder() { + iLines = new LinkedList<>(); + sLines = new LinkedList<>(); + } + + /** + * Add a basic line of information about this structure + * + * @param line + * The line to be added. + * @return Instance this method was called on. + */ + public MultiBlockTooltipBuilder addInfo(String info) { + iLines.add(info); + return this; + } + + /** + * Add a separator line like this:
+ * ------------------------------- + * + * @return Instance this method was called on. + */ + public MultiBlockTooltipBuilder addSeparator() { + iLines.add("-----------------------------------------"); + return this; + } + + /** + * Begin adding structural information by adding a line about the structure's dimensions + * and then inserting a "Structure:" line. + * + * @param w + * Structure width. + * @param h + * Structure height. + * @param l + * Structure depth/length. + * @return Instance this method was called on. + */ + public MultiBlockTooltipBuilder beginStructureBlock(int w, int h, int l) { + sLines.add("Dimensions: " + w + "x" + h + "x" + l + " (WxHxL)"); + sLines.add("Structure:"); + return this; + } + + public MultiBlockTooltipBuilder addController(String info) { + sLines.add(TAB + "Controller: " + info); + return this; + } + + public MultiBlockTooltipBuilder addCasingInfo(String casingName, int minCount) { + sLines.add(TAB + minCount +"x " + casingName + " (at least)"); + return this; + } + + public MultiBlockTooltipBuilder addEnergyHatch(String info) { + sLines.add(TAB + "Energy Hatch: " + info); + return this; + } + + public MultiBlockTooltipBuilder addDynamoHatch(String info) { + sLines.add(TAB + "Dynamo Hatch: " + info); + return this; + } + + public MultiBlockTooltipBuilder addMaintenanceHatch(String info) { + sLines.add(TAB + "Maintenance Hatch: " + info); + return this; + } + + public MultiBlockTooltipBuilder addIOHatches(String info) { + sLines.add(TAB + "I/O Hatches: " + info); + return this; + } + + public MultiBlockTooltipBuilder addInputBus(String info) { + sLines.add(TAB + "Input Bus/ses: " + info); + return this; + } + + public MultiBlockTooltipBuilder addInputHatch(String info) { + sLines.add(TAB + "Input Hatch/es: " + info); + return this; + } + + public MultiBlockTooltipBuilder addOutputBus(String info) { + sLines.add(TAB + "Output Bus/ses: " + info); + return this; + } + + public MultiBlockTooltipBuilder addOutputHatch(String info) { + sLines.add(TAB + "Output Hatch/es: " + info); + return this; + } + + /** + * Use this method to add a structural part that isn't covered by the builders capabilities. + * + * @param name + * Name of the hatch or other component. + * @param info + * Positional information. + * @return Instance this method was called on. + */ + public MultiBlockTooltipBuilder addOtherStructurePart(String name, String info) { + sLines.add(TAB + name + ": " + info); + return this; + } + + /** + * Call at the very end.
+ * Adds a final line with the authors name and information on how to display the structure guidelines.
+ * Ends the building process. + * + * @param author + * Name of the creator of this Machine + * + * @return The result of all build calls. + */ + public void signAndFinalize(String author) { + iLines.add("Hold " + EnumChatFormatting.BOLD + "[LSHIFT]" + EnumChatFormatting.RESET + EnumChatFormatting.GRAY + " to display structure guidelines"); + iLines.add("Created by " + author); + iArray = new String[iLines.size()]; + sArray = new String[sLines.size()]; + iLines.toArray(iArray); + sLines.toArray(sArray); + } + + public String[] getInformation() { + return iArray; + } + + public String[] getStructureInformation() { + return sArray; + } +} diff --git a/src/main/resources/assets/kekztech/textures/gui/ItemDistributorNode.png b/src/main/resources/assets/kekztech/textures/gui/ItemDistributorNode.png new file mode 100644 index 0000000000..b01d9b444f Binary files /dev/null and b/src/main/resources/assets/kekztech/textures/gui/ItemDistributorNode.png differ -- cgit