From 5a87f9be640ea197a14791f0a946215093ab316c Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 12 Sep 2022 23:21:39 +0200 Subject: [PATCH] crucible GUI, smeltable material definitions --- .../hbm/blocks/machine/MachineCrucible.java | 6 ++ .../container/ContainerCrucible.java | 73 ++++++++++++++++++ .../com/hbm/inventory/gui/GUICrucible.java | 46 +++++++++++ .../java/com/hbm/inventory/material/Mats.java | 12 +++ .../hbm/inventory/material/NTMMaterial.java | 25 +++++- .../machine/TileEntityCrucible.java | 52 ++++++++++++- .../hbm/textures/gui/machine/gui_crucible.png | Bin 7412 -> 0 bytes .../textures/gui/processing/gui_crucible.png | Bin 0 -> 7853 bytes .../gui_crucible_base.png | Bin .../gui_crucible_brighten_21.png | Bin .../gui_crucible_multiply_100.png | Bin .../hbm/textures/items/crucible_template.png | Bin 0 -> 233 bytes 12 files changed, 207 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/container/ContainerCrucible.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUICrucible.java delete mode 100644 src/main/resources/assets/hbm/textures/gui/machine/gui_crucible.png create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_crucible.png rename src/main/resources/assets/hbm/textures/gui/{machine => processing}/gui_crucible_base.png (100%) rename src/main/resources/assets/hbm/textures/gui/{machine => processing}/gui_crucible_brighten_21.png (100%) rename src/main/resources/assets/hbm/textures/gui/{machine => processing}/gui_crucible_multiply_100.png (100%) create mode 100644 src/main/resources/assets/hbm/textures/items/crucible_template.png diff --git a/src/main/java/com/hbm/blocks/machine/MachineCrucible.java b/src/main/java/com/hbm/blocks/machine/MachineCrucible.java index d4618952c..d9d0285b4 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineCrucible.java +++ b/src/main/java/com/hbm/blocks/machine/MachineCrucible.java @@ -4,6 +4,7 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.tileentity.machine.TileEntityCrucible; import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -21,6 +22,11 @@ public class MachineCrucible extends BlockDummyable { 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 this.standardOpenBehavior(world, x, y, z, player, 0); + } @Override public int[] getDimensions() { diff --git a/src/main/java/com/hbm/inventory/container/ContainerCrucible.java b/src/main/java/com/hbm/inventory/container/ContainerCrucible.java new file mode 100644 index 000000000..3f9fb375f --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerCrucible.java @@ -0,0 +1,73 @@ +package com.hbm.inventory.container; + +import com.hbm.tileentity.machine.TileEntityCrucible; + +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; + +public class ContainerCrucible extends Container { + + protected TileEntityCrucible crucible; + + public ContainerCrucible(InventoryPlayer invPlayer, TileEntityCrucible crucible) { + this.crucible = crucible; + + //input + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 3; j++) { + this.addSlotToContainer(new Slot(crucible, j + i * 3, 107 + j * 18, 18 + i * 18)); + } + } + + //template + this.addSlotToContainer(new Slot(crucible, 9, 107, 81)); + + 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, 132 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 190)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack originalStack = slot.getStack(); + stack = originalStack.copy(); + + if(index <= 9) { + if(!this.mergeItemStack(originalStack, 10, this.inventorySlots.size(), true)) { + return null; + } + + slot.onSlotChange(originalStack, stack); + + } else if(!this.mergeItemStack(originalStack, 0, 10, false)) { + return null; + } + + if(originalStack.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return crucible.isUseableByPlayer(player); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUICrucible.java b/src/main/java/com/hbm/inventory/gui/GUICrucible.java new file mode 100644 index 000000000..61345bd6c --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUICrucible.java @@ -0,0 +1,46 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerCrucible; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityCrucible; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUICrucible extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_crucible.png"); + private TileEntityCrucible crucible; + + public GUICrucible(InventoryPlayer invPlayer, TileEntityCrucible tedf) { + super(new ContainerCrucible(invPlayer, tedf)); + crucible = tedf; + + this.xSize = 176; + this.ySize = 214; + } + + @Override + public void drawScreen(int x, int y, float interp) { + super.drawScreen(x, y, interp); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.crucible.hasCustomInventoryName() ? this.crucible.getInventoryName() : I18n.format(this.crucible.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 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); + } +} diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index 065c7da19..d89b7e858 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -1,5 +1,17 @@ package com.hbm.inventory.material; +/* with every new rewrite, optimization and improvement, the code becomes more gregian */ public class Mats { + public static NTMMaterial + + IRON = make("Iron"), + GOLD = make("Gold"), + STEEL = make("Steel"), + TUNGSTEN = make("Tungsten"), + COPPER = make("Copper"); + + public static NTMMaterial make(String... names) { + return new NTMMaterial(names); + } } diff --git a/src/main/java/com/hbm/inventory/material/NTMMaterial.java b/src/main/java/com/hbm/inventory/material/NTMMaterial.java index 38bf7fec2..d013df374 100644 --- a/src/main/java/com/hbm/inventory/material/NTMMaterial.java +++ b/src/main/java/com/hbm/inventory/material/NTMMaterial.java @@ -10,24 +10,41 @@ public class NTMMaterial { public String[] names; public MaterialShapes[] shapes = new MaterialShapes[0]; public boolean omitItemGen = false; - public boolean smeltable = false; + public SmeltingBehavior smeltable = SmeltingBehavior.NOT_SMELTABLE; + public int moltenColor = 0xFF4A00; public NTMMaterial(String... names) { this.names = names; } + /** Shapes for autogen */ public NTMMaterial setShapes(MaterialShapes... shapes) { this.shapes = shapes; return this; } - public NTMMaterial omit() { + /** Turn off autogen for this material, use this for vanilla stuff */ + public NTMMaterial omitAutoGen() { this.omitItemGen = true; return this; } - public NTMMaterial smeltable() { - this.smeltable = true; + /** Defines smelting behavior */ + public NTMMaterial smeltable(SmeltingBehavior behavior) { + this.smeltable = behavior; return this; } + + public NTMMaterial setMoltenColor(int color) { + this.moltenColor = color; + return this; + } + + public static enum SmeltingBehavior { + NOT_SMELTABLE, //anything that can't be smelted or otherwise doesn't belong in a smelter, like diamond + VAPORIZES, //can't be smelted because the material would skadoodle + BREAKS, //can't be smelted because the material doesn't survive the temperatures + SMELTABLE, //metal, mostly + ADDITIVE //stuff like coal which isn't smeltable but can be put in a crucible anyway + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java index 50514d291..8f366ba37 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java @@ -1,16 +1,27 @@ package com.hbm.tileentity.machine; +import com.hbm.inventory.container.ContainerCrucible; +import com.hbm.inventory.gui.GUICrucible; +import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; -public class TileEntityCrucible extends TileEntityMachineBase { +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.util.AxisAlignedBB; +import net.minecraft.world.World; + +public class TileEntityCrucible extends TileEntityMachineBase implements IGUIProvider { public TileEntityCrucible() { - super(1); + super(10); } @Override public String getName() { - return null; + return "container.machineCrucible"; } @Override @@ -18,4 +29,39 @@ public class TileEntityCrucible extends TileEntityMachineBase { } + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerCrucible(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUICrucible(player.inventory, this); + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 1, + yCoord, + zCoord - 1, + xCoord + 2, + yCoord + 2, + zCoord + 2 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } } diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_crucible.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_crucible.png deleted file mode 100644 index fc2435ad62a362456de0aad0607a01f667c08238..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7412 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 F{~wZYBo_bx diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_crucible.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_crucible.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa4a1287aa77690941a067fe3f0f60ddf72cf64 GIT binary patch literal 7853 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_crucible_base.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_crucible_base.png similarity index 100% rename from src/main/resources/assets/hbm/textures/gui/machine/gui_crucible_base.png rename to src/main/resources/assets/hbm/textures/gui/processing/gui_crucible_base.png diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_crucible_brighten_21.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_crucible_brighten_21.png similarity index 100% rename from src/main/resources/assets/hbm/textures/gui/machine/gui_crucible_brighten_21.png rename to src/main/resources/assets/hbm/textures/gui/processing/gui_crucible_brighten_21.png diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_crucible_multiply_100.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_crucible_multiply_100.png similarity index 100% rename from src/main/resources/assets/hbm/textures/gui/machine/gui_crucible_multiply_100.png rename to src/main/resources/assets/hbm/textures/gui/processing/gui_crucible_multiply_100.png diff --git a/src/main/resources/assets/hbm/textures/items/crucible_template.png b/src/main/resources/assets/hbm/textures/items/crucible_template.png new file mode 100644 index 0000000000000000000000000000000000000000..959edefae489c46405e021fdd7d2dcf03409ca92 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf)Z4KKDmG!9;o}?#K{1a4SOg^u%H8}wYPQ0)?QjnHs(59%f zBWIPrbH?h;R;w@iBo(wo?JfOo^BEc#D3}~N@XW45I{_$D@oysI zQSKLdEBrSnJA6|+V{Nhbg2ihAH;Dx12r%motHJsMPcGh6aaT5S=)W|Pi-AwaS$pR3 S$q#^TW$<+Mb6Mw<&;$U}#8|li literal 0 HcmV?d00001