From 68393dda9e6b843d34052e4158be30188d0b8e23 Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 6 Mar 2023 21:11:09 +0100 Subject: [PATCH] catalytic reformer GUI --- .../machine/MachineCatalyticReformer.java | 21 ++- .../ContainerMachineCatalyticReformer.java | 96 ++++++++++++ .../gui/GUIMachineCatalyticReformer.java | 60 ++++++++ .../TileEntityMachineCatalyticReformer.java | 145 +++++++++++++++++- .../oil/TileEntityMachineVacuumDistill.java | 5 + .../gui/processing/gui_catalytic_reformer.png | Bin 0 -> 5181 bytes 6 files changed, 323 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/container/ContainerMachineCatalyticReformer.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIMachineCatalyticReformer.java create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_catalytic_reformer.png diff --git a/src/main/java/com/hbm/blocks/machine/MachineCatalyticReformer.java b/src/main/java/com/hbm/blocks/machine/MachineCatalyticReformer.java index 04beefef1..ecfcd9be1 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCatalyticReformer.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCatalyticReformer.java @@ -1,11 +1,14 @@ package com.hbm.blocks.machine; import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.oil.TileEntityMachineCatalyticReformer; import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class MachineCatalyticReformer extends BlockDummyable { @@ -15,11 +18,25 @@ public class MachineCatalyticReformer extends BlockDummyable { @Override public TileEntity createNewTileEntity(World world, int meta) { - if(meta >= 12) return new TileEntityMachineCatalyticReformer(); - + if(meta >= 6) return new TileEntityProxyCombo().fluid().power(); return null; } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return standardOpenBehavior(world, x, y, z, player, side); + } + + @Override + protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + this.makeExtra(world, x - dir.offsetX + 1, y, z - dir.offsetZ + 1); + this.makeExtra(world, x - dir.offsetX + 1, y, z - dir.offsetZ - 1); + this.makeExtra(world, x - dir.offsetX - 1, y, z - dir.offsetZ + 1); + this.makeExtra(world, x - dir.offsetX - 1, y, z - dir.offsetZ - 1); + } @Override public int[] getDimensions() { diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineCatalyticReformer.java b/src/main/java/com/hbm/inventory/container/ContainerMachineCatalyticReformer.java new file mode 100644 index 000000000..ceb23c863 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineCatalyticReformer.java @@ -0,0 +1,96 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotMachineOutput; +import com.hbm.tileentity.machine.oil.TileEntityMachineCatalyticReformer; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineCatalyticReformer extends Container { + + private TileEntityMachineCatalyticReformer reformer; + + public ContainerMachineCatalyticReformer(InventoryPlayer invPlayer, TileEntityMachineCatalyticReformer tedf) { + + reformer = tedf; + + //Battery + this.addSlotToContainer(new Slot(tedf, 0, 17, 90)); + //Canister Input + this.addSlotToContainer(new Slot(tedf, 1, 35, 90)); + //Canister Output + this.addSlotToContainer(new SlotMachineOutput(tedf, 2, 35, 108)); + //Reformate Input + this.addSlotToContainer(new Slot(tedf, 3, 107, 90)); + //Reformate Output + this.addSlotToContainer(new SlotMachineOutput(tedf, 4, 107, 108)); + //Gas Input + this.addSlotToContainer(new Slot(tedf, 5, 125, 90)); + //Gas Output + this.addSlotToContainer(new SlotMachineOutput(tedf, 6, 125, 108)); + //Hydrogen Input + this.addSlotToContainer(new Slot(tedf, 7, 143, 90)); + //Hydrogen Oil Output + this.addSlotToContainer(new SlotMachineOutput(tedf, 8, 143, 108)); + //Fluid ID + this.addSlotToContainer(new Slot(tedf, 9, 17, 108)); + //Catalyst + this.addSlotToContainer(new Slot(tedf, 10, 71, 36)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 156 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 214)); + } + } + + @Override + public void addCraftingToCrafters(ICrafting crafting) { + super.addCraftingToCrafters(crafting); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(par2); + + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if(par2 <= 10) { + if(!this.mergeItemStack(var5, 11, this.inventorySlots.size(), true)) { + return null; + } + } else if(!this.mergeItemStack(var5, 0, 1, false)) + if(!this.mergeItemStack(var5, 1, 2, false)) + if(!this.mergeItemStack(var5, 3, 4, false)) + if(!this.mergeItemStack(var5, 5, 6, false)) + if(!this.mergeItemStack(var5, 7, 8, false)) + if(!this.mergeItemStack(var5, 9, 11, false)) { + return null; + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack) null); + } else { + var4.onSlotChanged(); + } + } + + return var3; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return reformer.isUseableByPlayer(player); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineCatalyticReformer.java b/src/main/java/com/hbm/inventory/gui/GUIMachineCatalyticReformer.java new file mode 100644 index 000000000..0c0508acd --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineCatalyticReformer.java @@ -0,0 +1,60 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachineCatalyticReformer; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.oil.TileEntityMachineCatalyticReformer; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineCatalyticReformer extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_catalytic_reformer.png"); + private TileEntityMachineCatalyticReformer refinery; + + public GUIMachineCatalyticReformer(InventoryPlayer invPlayer, TileEntityMachineCatalyticReformer tedf) { + super(new ContainerMachineCatalyticReformer(invPlayer, tedf)); + refinery = tedf; + + this.xSize = 176; + this.ySize = 238; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + refinery.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 44, guiTop + 70 - 52, 16, 52); + refinery.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 70 - 52, 16, 52); + refinery.tanks[2].renderTankInfo(this, mouseX, mouseY, guiLeft + 98, guiTop + 70 - 52, 16, 52); + refinery.tanks[3].renderTankInfo(this, mouseX, mouseY, guiLeft + 116, guiTop + 70 - 52, 16, 52); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 26, guiTop + 70 - 52, 16, 52, refinery.power, refinery.maxPower); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.refinery.hasCustomInventoryName() ? this.refinery.getInventoryName() : I18n.format(this.refinery.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 5, 0xffffff); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int j = (int) (refinery.power * 54 / refinery.maxPower); + drawTexturedModalRect(guiLeft + 26, guiTop + 70 - j, 176, 52 - j, 16, j); + + refinery.tanks[0].renderTank(guiLeft + 44, guiTop + 70, this.zLevel, 16, 52); + refinery.tanks[1].renderTank(guiLeft + 80, guiTop + 70, this.zLevel, 16, 52); + refinery.tanks[2].renderTank(guiLeft + 98, guiTop + 70, this.zLevel, 16, 52); + refinery.tanks[3].renderTank(guiLeft + 116, guiTop + 70, this.zLevel, 16, 52); + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java index 87487cf78..e5c6f3c5c 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java @@ -1,11 +1,41 @@ package com.hbm.tileentity.machine.oil; +import com.hbm.inventory.container.ContainerMachineCatalyticReformer; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIMachineCatalyticReformer; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; -public class TileEntityMachineCatalyticReformer extends TileEntityMachineBase { +import api.hbm.energy.IEnergyUser; +import api.hbm.fluid.IFluidStandardTransceiver; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityMachineCatalyticReformer extends TileEntityMachineBase implements IEnergyUser, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider { + + public long power; + public static final long maxPower = 1_000_000; + + public FluidTank[] tanks; public TileEntityMachineCatalyticReformer() { - super(0); + super(11); + + this.tanks = new FluidTank[4]; + this.tanks[0] = new FluidTank(Fluids.NAPHTHA, 64_000); + this.tanks[1] = new FluidTank(Fluids.REFORMATE, 24_000); + this.tanks[2] = new FluidTank(Fluids.PETROLEUM, 24_000); + this.tanks[3] = new FluidTank(Fluids.HYDROGEN, 24_000); } @Override @@ -17,5 +47,116 @@ public class TileEntityMachineCatalyticReformer extends TileEntityMachineBase { public void updateEntity() { } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + power = nbt.getLong("power"); + tanks[0].readFromNBT(nbt, "input"); + tanks[1].readFromNBT(nbt, "o1"); + tanks[2].readFromNBT(nbt, "o2"); + tanks[3].readFromNBT(nbt, "o3"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setLong("power", power); + tanks[0].writeToNBT(nbt, "input"); + tanks[1].writeToNBT(nbt, "o1"); + tanks[2].writeToNBT(nbt, "o2"); + tanks[3].writeToNBT(nbt, "o3"); + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 2, + yCoord, + zCoord - 2, + xCoord + 3, + yCoord + 7, + zCoord + 3 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override + public long getPower() { + return power; + } + + @Override + public void setPower(long power) { + this.power = power; + } + + @Override + public long getMaxPower() { + return maxPower; + } + + @Override + public FluidTank[] getAllTanks() { + return tanks; + } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] {tanks[1], tanks[2], tanks[3], tanks[4]}; + } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[] {tanks[0]}; + } + + @Override + public boolean canConnect(ForgeDirection dir) { + return dir != ForgeDirection.UNKNOWN && dir != ForgeDirection.DOWN; + } + + @Override + public boolean canConnect(FluidType type, ForgeDirection dir) { + return dir != ForgeDirection.UNKNOWN && dir != ForgeDirection.DOWN; + } + + @Override + public void writeNBT(NBTTagCompound nbt) { + if(tanks[0].getFill() == 0 && tanks[1].getFill() == 0 && tanks[2].getFill() == 0 && tanks[3].getFill() == 0 && tanks[4].getFill() == 0) return; + NBTTagCompound data = new NBTTagCompound(); + for(int i = 0; i < 4; i++) this.tanks[i].writeToNBT(data, "" + i); + nbt.setTag(NBT_PERSISTENT_KEY, data); + } + + @Override + public void readNBT(NBTTagCompound nbt) { + NBTTagCompound data = nbt.getCompoundTag(NBT_PERSISTENT_KEY); + for(int i = 0; i < 4; i++) this.tanks[i].readFromNBT(data, "" + i); + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerMachineCatalyticReformer(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIMachineCatalyticReformer(player.inventory, this); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java index da23b73fe..0c9d8fcf2 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java @@ -199,6 +199,11 @@ public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implem return new FluidTank[] {tanks[0]}; } + @Override + public boolean canConnect(ForgeDirection dir) { + return dir != ForgeDirection.UNKNOWN && dir != ForgeDirection.DOWN; + } + @Override public boolean canConnect(FluidType type, ForgeDirection dir) { return dir != ForgeDirection.UNKNOWN && dir != ForgeDirection.DOWN; diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_catalytic_reformer.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_catalytic_reformer.png new file mode 100644 index 0000000000000000000000000000000000000000..31abebbce5c600437dfa45a58189be5cef326678 GIT binary patch literal 5181 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 literal 0 HcmV?d00001