From a3784d1fe793ddf35a7defc0e41093abb039be3f Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Wed, 18 Jun 2014 21:05:32 +0200 Subject: [PATCH] More portable tank work, mainly on GUIs --- .../java/mekanism/client/ClientProxy.java | 3 + .../mekanism/client/gui/GuiPortableTank.java | 60 +++++++++ .../java/mekanism/client/gui/GuiSlot.java | 4 +- .../client/model/ModelPortableTank.java | 3 + .../ModelPressurizedReactionChamber.java | 3 + .../java/mekanism/common/CommonProxy.java | 3 + .../container/ContainerPortableTank.java | 123 ++++++++++++++++++ .../common/item/ItemBlockMachine.java | 23 +++- .../common/tile/TileEntityGasTank.java | 2 +- .../common/tile/TileEntityPortableTank.java | 44 +++++++ .../mekanism/gui/elements/GuiRecipeType.png | Bin 3790 -> 3071 bytes .../assets/mekanism/gui/elements/GuiSlot.png | Bin 873 -> 2836 bytes .../resources/assets/mekanism/lang/en_US.lang | 4 + 13 files changed, 269 insertions(+), 3 deletions(-) create mode 100644 src/main/java/mekanism/client/gui/GuiPortableTank.java create mode 100644 src/main/java/mekanism/common/inventory/container/ContainerPortableTank.java diff --git a/src/main/java/mekanism/client/ClientProxy.java b/src/main/java/mekanism/client/ClientProxy.java index 08fea90fe..e2e3aceda 100644 --- a/src/main/java/mekanism/client/ClientProxy.java +++ b/src/main/java/mekanism/client/ClientProxy.java @@ -30,6 +30,7 @@ import mekanism.client.gui.GuiOsmiumCompressor; import mekanism.client.gui.GuiPRC; import mekanism.client.gui.GuiPasswordEnter; import mekanism.client.gui.GuiPasswordModify; +import mekanism.client.gui.GuiPortableTank; import mekanism.client.gui.GuiPortableTeleporter; import mekanism.client.gui.GuiPrecisionSawmill; import mekanism.client.gui.GuiPurificationChamber; @@ -445,6 +446,8 @@ public class ClientProxy extends CommonProxy return new GuiSeismicVibrator(player.inventory, (TileEntitySeismicVibrator)tileEntity); case 40: return new GuiPRC(player.inventory, (TileEntityPRC)tileEntity); + case 41: + return new GuiPortableTank(player.inventory, (TileEntityPortableTank)tileEntity); } return null; diff --git a/src/main/java/mekanism/client/gui/GuiPortableTank.java b/src/main/java/mekanism/client/gui/GuiPortableTank.java new file mode 100644 index 000000000..3bc12108c --- /dev/null +++ b/src/main/java/mekanism/client/gui/GuiPortableTank.java @@ -0,0 +1,60 @@ +package mekanism.client.gui; + +import mekanism.client.gui.GuiFluidGauge.IFluidInfoHandler; +import mekanism.client.gui.GuiSlot.SlotOverlay; +import mekanism.client.gui.GuiSlot.SlotType; +import mekanism.common.inventory.container.ContainerPortableTank; +import mekanism.common.tile.TileEntityPortableTank; +import mekanism.common.util.MekanismUtils; +import mekanism.common.util.MekanismUtils.ResourceType; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraftforge.fluids.FluidTank; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GuiPortableTank extends GuiMekanism +{ + public TileEntityPortableTank tileEntity; + + public GuiPortableTank(InventoryPlayer inventory, TileEntityPortableTank tentity) + { + super(new ContainerPortableTank(inventory, tentity)); + tileEntity = tentity; + guiElements.add(new GuiRedstoneControl(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiPortableTank.png"))); + guiElements.add(new GuiFluidGauge(new IFluidInfoHandler() + { + @Override + public FluidTank getTank() + { + return tileEntity.fluidTank; + } + }, GuiFluidGauge.Type.WIDE, this, MekanismUtils.getResource(ResourceType.GUI, "GuiPortableTank.png"), 55, 18)); + guiElements.add(new GuiSlot(SlotType.NORMAL, this, MekanismUtils.getResource(ResourceType.GUI, "GuiPortableTank.png"), 16, 34).with(SlotOverlay.INPUT)); + guiElements.add(new GuiSlot(SlotType.NORMAL, this, MekanismUtils.getResource(ResourceType.GUI, "GuiPortableTank.png"), 142, 34).with(SlotOverlay.OUTPUT)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) + { + fontRendererObj.drawString(tileEntity.getInventoryName(), 43, 6, 0x404040); + fontRendererObj.drawString(MekanismUtils.localize("container.inventory"), 8, ySize - 96 + 2, 0x404040); + + super.drawGuiContainerForegroundLayer(mouseX, mouseY); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float partialTick, int mouseX, int mouseY) + { + mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiPortableTank.png")); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + int guiWidth = (width - xSize) / 2; + int guiHeight = (height - ySize) / 2; + drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize); + + super.drawGuiContainerBackgroundLayer(partialTick, mouseX, mouseY); + } +} diff --git a/src/main/java/mekanism/client/gui/GuiSlot.java b/src/main/java/mekanism/client/gui/GuiSlot.java index 6f2d22200..2e22eadbe 100644 --- a/src/main/java/mekanism/client/gui/GuiSlot.java +++ b/src/main/java/mekanism/client/gui/GuiSlot.java @@ -103,7 +103,9 @@ public class GuiSlot extends GuiElement { MINUS(18, 18, 0, 18), PLUS(18, 18, 18, 18), - POWER(18, 18, 36, 18); + POWER(18, 18, 36, 18), + INPUT(18, 18, 54, 18), + OUTPUT(18, 18, 72, 18); public int width; public int height; diff --git a/src/main/java/mekanism/client/model/ModelPortableTank.java b/src/main/java/mekanism/client/model/ModelPortableTank.java index 3e9faf40b..9e4ca8367 100644 --- a/src/main/java/mekanism/client/model/ModelPortableTank.java +++ b/src/main/java/mekanism/client/model/ModelPortableTank.java @@ -2,7 +2,10 @@ package mekanism.client.model; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +@SideOnly(Side.CLIENT) public class ModelPortableTank extends ModelBase { ModelRenderer Base; diff --git a/src/main/java/mekanism/client/model/ModelPressurizedReactionChamber.java b/src/main/java/mekanism/client/model/ModelPressurizedReactionChamber.java index 7e9c8ad59..5a8226c28 100644 --- a/src/main/java/mekanism/client/model/ModelPressurizedReactionChamber.java +++ b/src/main/java/mekanism/client/model/ModelPressurizedReactionChamber.java @@ -2,7 +2,10 @@ package mekanism.client.model; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +@SideOnly(Side.CLIENT) public class ModelPressurizedReactionChamber extends ModelBase { ModelRenderer Base; diff --git a/src/main/java/mekanism/common/CommonProxy.java b/src/main/java/mekanism/common/CommonProxy.java index 8e0a1d56c..86ca36dac 100644 --- a/src/main/java/mekanism/common/CommonProxy.java +++ b/src/main/java/mekanism/common/CommonProxy.java @@ -25,6 +25,7 @@ import mekanism.common.inventory.container.ContainerGasTank; import mekanism.common.inventory.container.ContainerMetallurgicInfuser; import mekanism.common.inventory.container.ContainerNull; import mekanism.common.inventory.container.ContainerPRC; +import mekanism.common.inventory.container.ContainerPortableTank; import mekanism.common.inventory.container.ContainerRobitCrafting; import mekanism.common.inventory.container.ContainerRobitInventory; import mekanism.common.inventory.container.ContainerRobitMain; @@ -412,6 +413,8 @@ public class CommonProxy return new ContainerSeismicVibrator(player.inventory, (TileEntitySeismicVibrator)tileEntity); case 40: return new ContainerPRC(player.inventory, (TileEntityPRC)tileEntity); + case 41: + return new ContainerPortableTank(player.inventory, (TileEntityPortableTank)tileEntity); } return null; diff --git a/src/main/java/mekanism/common/inventory/container/ContainerPortableTank.java b/src/main/java/mekanism/common/inventory/container/ContainerPortableTank.java new file mode 100644 index 000000000..98d8c4888 --- /dev/null +++ b/src/main/java/mekanism/common/inventory/container/ContainerPortableTank.java @@ -0,0 +1,123 @@ +package mekanism.common.inventory.container; + +import mekanism.common.inventory.slot.SlotOutput; +import mekanism.common.tile.TileEntityPortableTank; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidContainerRegistry; + +public class ContainerPortableTank extends Container +{ + private TileEntityPortableTank tileEntity; + + public ContainerPortableTank(InventoryPlayer inventory, TileEntityPortableTank tentity) + { + tileEntity = tentity; + addSlotToContainer(new Slot(tentity, 0, 146, 20)); + addSlotToContainer(new SlotOutput(tentity, 1, 146, 51)); + int slotX; + + for(slotX = 0; slotX < 3; ++slotX) + { + for(int slotY = 0; slotY < 9; ++slotY) + { + addSlotToContainer(new Slot(inventory, slotY + slotX * 9 + 9, 8 + slotY * 18, 84 + slotX * 18)); + } + } + + for(slotX = 0; slotX < 9; ++slotX) + { + addSlotToContainer(new Slot(inventory, slotX, 8 + slotX * 18, 142)); + } + + tileEntity.open(inventory.player); + tileEntity.openInventory(); + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + + tileEntity.close(entityplayer); + tileEntity.closeInventory(); + } + + @Override + public boolean canInteractWith(EntityPlayer entityplayer) + { + return tileEntity.isUseableByPlayer(entityplayer); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slotID) + { + ItemStack stack = null; + Slot currentSlot = (Slot)inventorySlots.get(slotID); + + if(currentSlot != null && currentSlot.getHasStack()) + { + ItemStack slotStack = currentSlot.getStack(); + stack = slotStack.copy(); + + if(FluidContainerRegistry.isEmptyContainer(slotStack) || FluidContainerRegistry.isFilledContainer(slotStack)) + { + if(slotID != 0 && slotID != 1) + { + if(!mergeItemStack(slotStack, 0, 1, false)) + { + return null; + } + } + else { + if(!mergeItemStack(slotStack, 2, inventorySlots.size(), true)) + { + return null; + } + } + } + else { + if(slotID >= 2 && slotID <= 8) + { + if(!mergeItemStack(slotStack, 29, inventorySlots.size(), false)) + { + return null; + } + } + else if(slotID > 28) + { + if(!mergeItemStack(slotStack, 2, 28, false)) + { + return null; + } + } + else { + if(!mergeItemStack(slotStack, 2, inventorySlots.size(), true)) + { + return null; + } + } + } + + if(slotStack.stackSize == 0) + { + currentSlot.putStack((ItemStack)null); + } + else { + currentSlot.onSlotChanged(); + } + + if(slotStack.stackSize == stack.stackSize) + { + return null; + } + + currentSlot.onPickupFromSlot(player, slotStack); + } + + return stack; + } +} diff --git a/src/main/java/mekanism/common/item/ItemBlockMachine.java b/src/main/java/mekanism/common/item/ItemBlockMachine.java index ee6049595..0e943c8f3 100644 --- a/src/main/java/mekanism/common/item/ItemBlockMachine.java +++ b/src/main/java/mekanism/common/item/ItemBlockMachine.java @@ -95,6 +95,9 @@ import cpw.mods.fml.relauncher.SideOnly; * 1:6: Chemical Dissolution Chamber * 1:7: Chemical Washer * 1:8: Chemical Crystallizer + * 1:9: Seismic Vibrator + * 1:10: Pressurized Reaction Chamber + * 1:11: Portable Tank * @author AidanBrady * */ @@ -151,6 +154,11 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, ISpec list.add(EnumColor.INDIGO + MekanismUtils.localize("tooltip.auth") + ": " + EnumColor.GREY + LangUtils.transYesNo(getAuthenticated(itemstack))); list.add(EnumColor.INDIGO + MekanismUtils.localize("tooltip.locked") + ": " + EnumColor.GREY + LangUtils.transYesNo(getLocked(itemstack))); } + + if(type == MachineType.PORTABLE_TANK) + { + list.add(EnumColor.INDIGO + MekanismUtils.localize("tooltip.portableTank.bucketMode") + ": " + EnumColor.GREY + LangUtils.transYesNo(getBucketMode(itemstack))); + } if(type.isElectric) { @@ -180,6 +188,19 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, ISpec list.addAll(MekanismUtils.splitLines(type.getDescription())); } } + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) + { + MachineType type = MachineType.get(stack); + + if(type == MachineType.PORTABLE_TANK && getBucketMode(stack)) + { + return false; + } + + return super.onItemUse(stack, player, world, x, y, z, side, hitX, hitY, hitZ); + } @Override public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata) @@ -448,7 +469,7 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, ISpec } else if(type == MachineType.PORTABLE_TANK) { - if(world.isRemote) + if(world != null && !world.isRemote) { float targetScale = (float)(getFluidStack(itemstack) != null ? getFluidStack(itemstack).amount : 0)/TileEntityPortableTank.MAX_FLUID; diff --git a/src/main/java/mekanism/common/tile/TileEntityGasTank.java b/src/main/java/mekanism/common/tile/TileEntityGasTank.java index 5e63643ca..ac90ace80 100644 --- a/src/main/java/mekanism/common/tile/TileEntityGasTank.java +++ b/src/main/java/mekanism/common/tile/TileEntityGasTank.java @@ -108,7 +108,7 @@ public class TileEntityGasTank extends TileEntityContainerBlock implements IGasH return itemstack.getItem() instanceof IGasItem && (gasTank.getGas() == null || ((IGasItem)itemstack.getItem()).canProvideGas(itemstack, gasTank.getGas().getGas())); } - return true; + return false; } @Override diff --git a/src/main/java/mekanism/common/tile/TileEntityPortableTank.java b/src/main/java/mekanism/common/tile/TileEntityPortableTank.java index b975733c6..ff947ab93 100644 --- a/src/main/java/mekanism/common/tile/TileEntityPortableTank.java +++ b/src/main/java/mekanism/common/tile/TileEntityPortableTank.java @@ -6,10 +6,12 @@ import java.util.ArrayList; import mekanism.api.Coord4D; import mekanism.api.IConfigurable; +import mekanism.api.gas.IGasItem; import mekanism.common.IActiveState; import mekanism.common.ISustainedTank; import mekanism.common.Mekanism; import mekanism.common.network.PacketTileEntity.TileEntityMessage; +import mekanism.common.util.InventoryUtils; import mekanism.common.util.MekanismUtils; import mekanism.common.util.PipeUtils; import net.minecraft.entity.player.EntityPlayer; @@ -205,6 +207,48 @@ public class TileEntityPortableTank extends TileEntityContainerBlock implements } } } + + @Override + public boolean canExtractItem(int slotID, ItemStack itemstack, int side) + { + if(slotID == 1) + { + return (itemstack.getItem() instanceof IGasItem && ((IGasItem)itemstack.getItem()).getGas(itemstack) == null); + } + else if(slotID == 0) + { + return (itemstack.getItem() instanceof IGasItem && ((IGasItem)itemstack.getItem()).getGas(itemstack) != null && + ((IGasItem)itemstack.getItem()).getGas(itemstack).amount == ((IGasItem)itemstack.getItem()).getMaxGas(itemstack)); + } + + return false; + } + + @Override + public boolean isItemValidForSlot(int slotID, ItemStack itemstack) + { + if(slotID == 0) + { + return FluidContainerRegistry.isContainer(itemstack); + } + + return false; + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) + { + if(side == 0) + { + return new int[] {1}; + } + else if(side == 1) + { + return new int[] {0}; + } + + return InventoryUtils.EMPTY; + } @Override public void writeToNBT(NBTTagCompound nbtTags) diff --git a/src/main/resources/assets/mekanism/gui/elements/GuiRecipeType.png b/src/main/resources/assets/mekanism/gui/elements/GuiRecipeType.png index eeaf1d8955a54c6ebcf6813f601ba35374786ca6..704d6097227f000095d049eb81041e6bbf51c0e1 100644 GIT binary patch literal 3071 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 diff --git a/src/main/resources/assets/mekanism/gui/elements/GuiSlot.png b/src/main/resources/assets/mekanism/gui/elements/GuiSlot.png index 183afdfe86c4e945e068d9ae5916c9bbb311d796..dc64827db380cee1e492cf6f49103a39a99abf02 100644 GIT binary patch literal 2836 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 o5vgC~mkGa;@PB>|H(?D8gCb z5n0T@z%2~Ij105pNB{-dOFVsD+3&G%3yWwRmYTAIfr06pr;B4q#jUq@4ZUO%CD_5bdjQ0D0?UR&K>?z_$Yd-toF*Cr$jW|pzbD_N`_=Iw%Wu|9-y(jrbXltPC($`_1AxVc*FEy*H2TsGkFYuUSIfM5&!tGbD_Ed2PoLipT2f2 m?AA8je?HN&48s?^doS+qW3hSbi&tMjp7eC}b6Mw<&;$T?Iw0`? diff --git a/src/main/resources/assets/mekanism/lang/en_US.lang b/src/main/resources/assets/mekanism/lang/en_US.lang index bc3142690..11ea8c315 100644 --- a/src/main/resources/assets/mekanism/lang/en_US.lang +++ b/src/main/resources/assets/mekanism/lang/en_US.lang @@ -471,6 +471,8 @@ tooltip.keysFound=Key(s) found tooltip.noKey=No key tooltip.hp=HP +tooltip.portableTank.bucketMode=Bucket Mode + tooltip.disassembler.normal=normal tooltip.disassembler.slow=slow tooltip.disassembler.fast=fast @@ -516,6 +518,8 @@ tooltip.ChemicalDissolutionChamber=An ultimate machine used to !nchemically diss tooltip.ChemicalWasher=An ultimate machine that cleans unprocessed !nslurry and prepares it for crystallization. tooltip.ChemicalCrystallizer=An ultimate machine used to crystallize !npurified ore slurry into ore crystals. tooltip.SeismicVibrator=A machine that uses seismic vibrations to !nprovide information on differing layers !nof the world. +tooltip.PressurizedReactionChamber=An advanced machine that processes a solid, liquid and gaseous mixture and creates both a gaseous and solid product. +tooltip.PortableTank=A handy, portable tank that lets you carry 14 !nbuckets of fluid wherever you !nplease. Also doubles as a bucket! tooltip.HeatGenerator=A generator that uses the heat of lava or !nother burnable resources to produce energy. tooltip.SolarGenerator=A generator that uses the power of the !nsun to produce energy.