From f39b5a0e2c9ceee39c865d8e240573c936177d2f Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 20 May 2024 19:28:46 +0200 Subject: [PATCH] crushin' crushin' (the second) --- src/main/java/com/hbm/blocks/ModBlocks.java | 2 +- .../com/hbm/inventory/OreDictManager.java | 2 + .../ContainerMachineArcFurnaceLarge.java | 15 +- .../gui/GUIMachineArcFurnaceLarge.java | 73 +++++++ .../inventory/recipes/ArcFurnaceRecipes.java | 14 +- .../hbm/items/machine/ItemArcElectrode.java | 16 +- .../render/tileentity/RenderArcFurnace.java | 76 ++++++- .../TileEntityMachineArcFurnaceLarge.java | 189 +++++++++++++++++- .../textures/models/machines/arc_furnace.png | Bin 11214 -> 28461 bytes 9 files changed, 357 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 23498e084..e6df1b0ab 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1839,7 +1839,7 @@ public class ModBlocks { machine_electric_furnace_on = new MachineElectricFurnace(true).setBlockName("machine_electric_furnace_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F); machine_arc_furnace_off = new MachineArcFurnace(false).setBlockName("machine_arc_furnace_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_arc_furnace_on = new MachineArcFurnace(true).setBlockName("machine_arc_furnace_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F); - machine_arc_furnace = new MachineArcFurnaceLarge().setBlockName("machine_arc_furnace").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_arc_furnace = new MachineArcFurnaceLarge().setBlockName("machine_arc_furnace").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_microwave = new MachineMicrowave(Material.iron).setBlockName("machine_microwave").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_microwave"); machine_battery_potato = new MachineBattery(Material.iron, 10_000).setBlockName("machine_battery_potato").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 8a66a671f..fee550554 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -113,6 +113,7 @@ public class OreDictManager { public static final DictFrame LAPIS = new DictFrame("Lapis"); public static final DictFrame REDSTONE = new DictFrame("Redstone"); public static final DictFrame NETHERQUARTZ = new DictFrame("NetherQuartz"); + public static final DictFrame QUARTZ = new DictFrame("Quartz"); public static final DictFrame DIAMOND = new DictFrame("Diamond"); public static final DictFrame EMERALD = new DictFrame("Emerald"); /* @@ -324,6 +325,7 @@ public class OreDictManager { GOLD.plate(plate_gold).dust(powder_gold).ore(ore_gneiss_gold); LAPIS.dust(powder_lapis); NETHERQUARTZ.gem(Items.quartz).dust(powder_quartz).ore(Blocks.quartz_ore); + QUARTZ.dust(powder_quartz); DIAMOND.dust(powder_diamond).ore(gravel_diamond, ore_sellafield_diamond); EMERALD.dust(powder_emerald).ore(ore_sellafield_emerald); diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java b/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java index 27feec13f..6354c6afc 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java @@ -6,6 +6,7 @@ import com.hbm.tileentity.machine.TileEntityMachineArcFurnaceLarge; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; @@ -23,7 +24,7 @@ public class ContainerMachineArcFurnaceLarge extends Container { //Upgrade this.addSlotToContainer(new Slot(tile, 4, 152, 108)); //Inputs - for(int i = 0; i < 4; i++) for(int j = 0; j < 5; j++) this.addSlotToContainer(new SlotNonRetarded(tile, 5 + j + i * 5, 44 + j * 18, 54 + i * 18)); + for(int i = 0; i < 4; i++) for(int j = 0; j < 5; j++) this.addSlotToContainer(new SlotArcFurnace(tile, 5 + j + i * 5, 44 + j * 18, 54 + i * 18)); for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) { @@ -45,4 +46,16 @@ public class ContainerMachineArcFurnaceLarge extends Container { public boolean canInteractWith(EntityPlayer player) { return furnace.isUseableByPlayer(player); } + + public static class SlotArcFurnace extends SlotNonRetarded { + + public SlotArcFurnace(IInventory inventory, int id, int x, int y) { + super(inventory, id, x, y); + } + + @Override + public int getSlotStackLimit() { + return this.getHasStack() ? this.getStack().stackSize : 1; + } + } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java b/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java index d31a35f7a..f1fdb4d91 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java @@ -1,14 +1,28 @@ package com.hbm.inventory.gui; +import java.awt.Color; +import java.util.ArrayList; +import java.util.List; + +import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachineArcFurnaceLarge; +import com.hbm.inventory.material.Mats; +import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.lib.RefStrings; +import com.hbm.packet.NBTControlPacket; +import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.machine.TileEntityMachineArcFurnaceLarge; +import com.hbm.util.I18nUtil; import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; public class GUIMachineArcFurnaceLarge extends GuiInfoContainer { @@ -27,10 +41,24 @@ public class GUIMachineArcFurnaceLarge extends GuiInfoContainer { @Override public void drawScreen(int x, int y, float interp) { super.drawScreen(x, y, interp); + + drawStackInfo(arc.liquids, x, y, 152, 36); this.drawElectricityInfo(this, x, y, guiLeft + 8, guiTop + 36, 7, 70, arc.getPower(), arc.getMaxPower()); } + @Override + protected void mouseClicked(int x, int y, int k) { + super.mouseClicked(x, y, k); + + if(this.checkClick(x, y, 151, 17, 18, 18)) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + NBTTagCompound data = new NBTTagCompound(); + data.setBoolean("liquid", true); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, arc.xCoord, arc.yCoord, arc.zCoord)); + } + } + @Override protected void drawGuiContainerForegroundLayer(int i, int j) { String name = this.arc.hasCustomInventoryName() ? this.arc.getInventoryName() : I18n.format(this.arc.getInventoryName()); @@ -43,11 +71,56 @@ public class GUIMachineArcFurnaceLarge extends GuiInfoContainer { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + if(arc.liquidMode) drawTexturedModalRect(guiLeft + 151, guiTop + 17, 190, 18, 18, 18); + if(arc.isProgressing) drawTexturedModalRect(guiLeft + 7, guiTop + 17, 190, 0, 18, 18); int p = (int) (arc.power * 70 / arc.maxPower); drawTexturedModalRect(guiLeft + 8, guiTop + 106 - p, 176, 70 - p, 7, p); int o = (int) (arc.progress * 70); drawTexturedModalRect(guiLeft + 17, guiTop + 106 - o, 183, 70 - o, 7, o); + + drawStack(arc.liquids, arc.maxLiquid, 152, 106); + } + + protected void drawStackInfo(List stack, int mouseX, int mouseY, int x, int y) { + List list = new ArrayList(); + if(stack.isEmpty()) list.add(EnumChatFormatting.RED + "Empty"); + for(MaterialStack sta : stack) list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey(sta.material.getUnlocalizedName()) + ": " + Mats.formatAmount(sta.amount, Keyboard.isKeyDown(Keyboard.KEY_LSHIFT))); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + x, guiTop + y, 16, 70, mouseX, mouseY, list); + } + + protected void drawStack(List stack, int capacity, int x, int y) { + + if(stack.isEmpty()) return; + + int lastHeight = 0; + int lastQuant = 0; + + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + + for(MaterialStack sta : stack) { + + int targetHeight = (lastQuant + sta.amount) * 70 / capacity; + + if(lastHeight == targetHeight) continue; //skip draw calls that would be 0 pixels high + + int hex = sta.material.moltenColor; + //hex = 0xC18336; + Color color = new Color(hex); + GL11.glColor3f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F); + drawTexturedModalRect(guiLeft + x, guiTop + y - targetHeight, 208, 70 - targetHeight, 16, targetHeight - lastHeight); + GL11.glEnable(GL11.GL_BLEND); + GL11.glColor4f(1F, 1F, 1F, 0.3F); + drawTexturedModalRect(guiLeft + x, guiTop + y - targetHeight, 208, 70 - targetHeight, 16, targetHeight - lastHeight); + GL11.glDisable(GL11.GL_BLEND); + + lastQuant += sta.amount; + lastHeight = targetHeight; + } + + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor3f(255, 255, 255); } } diff --git a/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java b/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java index c36a387ed..bdb2408e0 100644 --- a/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java @@ -25,12 +25,12 @@ public class ArcFurnaceRecipes extends SerializableRecipe { @Override public void registerDefaults() { - recipes.put(new OreDictStack(KEY_SAND), new ArcFurnaceRecipe().solid(new ItemStack(ModItems.nugget_silicon)) .fluid(new MaterialStack(Mats.MAT_SILICON, MaterialShapes.NUGGET.q(1)))); - recipes.put(new OreDictStack(NETHERQUARTZ.gem()), new ArcFurnaceRecipe().solid(new ItemStack(ModItems.nugget_silicon, 3)) .fluid(new MaterialStack(Mats.MAT_SILICON, MaterialShapes.NUGGET.q(3)))); - recipes.put(new OreDictStack(NETHERQUARTZ.dust()), new ArcFurnaceRecipe().solid(new ItemStack(ModItems.nugget_silicon, 3)) .fluid(new MaterialStack(Mats.MAT_SILICON, MaterialShapes.NUGGET.q(3)))); - recipes.put(new OreDictStack(NETHERQUARTZ.block()), new ArcFurnaceRecipe().solid(new ItemStack(ModItems.nugget_silicon, 12)) .fluid(new MaterialStack(Mats.MAT_SILICON, MaterialShapes.NUGGET.q(12)))); - recipes.put(new OreDictStack(FIBER.ingot()), new ArcFurnaceRecipe().solid(new ItemStack(ModItems.nugget_silicon, 4)) .fluid(new MaterialStack(Mats.MAT_SILICON, MaterialShapes.INGOT.q(1, 2)))); - recipes.put(new OreDictStack(FIBER.block()), new ArcFurnaceRecipe().solid(new ItemStack(ModItems.nugget_silicon, 40)) .fluid(new MaterialStack(Mats.MAT_SILICON, MaterialShapes.INGOT.q(9, 2)))); + recipes.put(new OreDictStack(KEY_SAND), new ArcFurnaceRecipe().solid(new ItemStack(ModItems.nugget_silicon)) .fluid(new MaterialStack(Mats.MAT_SILICON, MaterialShapes.NUGGET.q(1)))); + recipes.put(new OreDictStack(QUARTZ.gem()), new ArcFurnaceRecipe().solid(new ItemStack(ModItems.nugget_silicon, 3)) .fluid(new MaterialStack(Mats.MAT_SILICON, MaterialShapes.NUGGET.q(3)))); + recipes.put(new OreDictStack(QUARTZ.dust()), new ArcFurnaceRecipe().solid(new ItemStack(ModItems.nugget_silicon, 3)) .fluid(new MaterialStack(Mats.MAT_SILICON, MaterialShapes.NUGGET.q(3)))); + recipes.put(new OreDictStack(QUARTZ.block()), new ArcFurnaceRecipe().solid(new ItemStack(ModItems.nugget_silicon, 12)) .fluid(new MaterialStack(Mats.MAT_SILICON, MaterialShapes.NUGGET.q(12)))); + recipes.put(new OreDictStack(FIBER.ingot()), new ArcFurnaceRecipe().solid(new ItemStack(ModItems.nugget_silicon, 4)) .fluid(new MaterialStack(Mats.MAT_SILICON, MaterialShapes.INGOT.q(1, 2)))); + recipes.put(new OreDictStack(FIBER.block()), new ArcFurnaceRecipe().solid(new ItemStack(ModItems.nugget_silicon, 40)) .fluid(new MaterialStack(Mats.MAT_SILICON, MaterialShapes.INGOT.q(9, 2)))); } public static ArcFurnaceRecipe getOutput(ItemStack stack) { @@ -43,7 +43,7 @@ public class ArcFurnaceRecipes extends SerializableRecipe { return recipes.get(comp); for(Entry entry : recipes.entrySet()) { - if(entry.getKey().isApplicable(stack)) return entry.getValue(); + if(entry.getKey().matchesRecipe(stack, true)) return entry.getValue(); } return null; diff --git a/src/main/java/com/hbm/items/machine/ItemArcElectrode.java b/src/main/java/com/hbm/items/machine/ItemArcElectrode.java index a4c417383..5df1e4729 100644 --- a/src/main/java/com/hbm/items/machine/ItemArcElectrode.java +++ b/src/main/java/com/hbm/items/machine/ItemArcElectrode.java @@ -4,6 +4,7 @@ import com.hbm.items.ItemEnumMulti; import com.hbm.util.EnumUtil; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; public class ItemArcElectrode extends ItemEnumMulti { @@ -18,7 +19,18 @@ public class ItemArcElectrode extends ItemEnumMulti { return stack.stackTagCompound.getInteger("durability"); } - public static int getMaxtDurability(ItemStack stack) { + public static boolean damage(ItemStack stack) { + if(!stack.hasTagCompound()) { + stack.stackTagCompound = new NBTTagCompound(); + } + + int durability = stack.stackTagCompound.getInteger("durability"); + durability++; + stack.stackTagCompound.setInteger("durability", durability); + return durability >= getMaxDurability(stack); + } + + public static int getMaxDurability(ItemStack stack) { EnumElectrodeType num = EnumUtil.grabEnumSafely(EnumElectrodeType.class, stack.getItemDamage()); return num.durability; } @@ -30,7 +42,7 @@ public class ItemArcElectrode extends ItemEnumMulti { @Override public double getDurabilityForDisplay(ItemStack stack) { - return (double) getDurability(stack) / (double) getMaxtDurability(stack); + return (double) getDurability(stack) / (double) getMaxDurability(stack); } public static enum EnumElectrodeType { diff --git a/src/main/java/com/hbm/render/tileentity/RenderArcFurnace.java b/src/main/java/com/hbm/render/tileentity/RenderArcFurnace.java index c8da57b7a..3b01b6f5b 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderArcFurnace.java +++ b/src/main/java/com/hbm/render/tileentity/RenderArcFurnace.java @@ -8,6 +8,7 @@ import com.hbm.main.ResourceManager; import com.hbm.render.item.ItemRenderBase; import com.hbm.tileentity.machine.TileEntityMachineArcFurnaceLarge; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; @@ -35,21 +36,78 @@ public class RenderArcFurnace extends TileEntitySpecialRenderer implements IItem GL11.glShadeModel(GL11.GL_SMOOTH); bindTexture(ResourceManager.arc_furnace_tex); ResourceManager.arc_furnace.renderPart("Furnace"); + + if(!arc.liquids.isEmpty()) { + fullbright(true); + GL11.glTranslated(0, -1.75 + arc.getStackAmount(arc.liquids) * 1.75 / arc.maxLiquid, 0); + ResourceManager.arc_furnace.renderPart("ContentsHot"); + fullbright(false); + } else if(arc.hasMaterial) { + ResourceManager.arc_furnace.renderPart("ContentsCold"); + } + GL11.glTranslated(0, 2 * lift, 0); + if(arc.isProgressing) GL11.glTranslated(0, 0, Math.sin((arc.getWorldObj().getTotalWorldTime() + interp)) * 0.005); ResourceManager.arc_furnace.renderPart("Lid"); - ResourceManager.arc_furnace.renderPart("Ring1"); - ResourceManager.arc_furnace.renderPart("Ring2"); - ResourceManager.arc_furnace.renderPart("Ring3"); - ResourceManager.arc_furnace.renderPart("Electrode1"); - ResourceManager.arc_furnace.renderPart("Electrode2"); - ResourceManager.arc_furnace.renderPart("Electrode3"); - ResourceManager.arc_furnace.renderPart("Cable1"); - ResourceManager.arc_furnace.renderPart("Cable2"); - ResourceManager.arc_furnace.renderPart("Cable3"); + if(arc.electrodes[0] == arc.ELECTRODE_FRESH) ResourceManager.arc_furnace.renderPart("Electrode1"); + if(arc.electrodes[1] == arc.ELECTRODE_FRESH) ResourceManager.arc_furnace.renderPart("Electrode2"); + if(arc.electrodes[2] == arc.ELECTRODE_FRESH) ResourceManager.arc_furnace.renderPart("Electrode3"); + fullbright(true); + if(arc.electrodes[0] == arc.ELECTRODE_USED) ResourceManager.arc_furnace.renderPart("Electrode1Hot"); + if(arc.electrodes[1] == arc.ELECTRODE_USED) ResourceManager.arc_furnace.renderPart("Electrode2Hot"); + if(arc.electrodes[2] == arc.ELECTRODE_USED) ResourceManager.arc_furnace.renderPart("Electrode3Hot"); + if(arc.electrodes[0] == arc.ELECTRODE_DEPLETED) ResourceManager.arc_furnace.renderPart("Electrode1Short"); + if(arc.electrodes[1] == arc.ELECTRODE_DEPLETED) ResourceManager.arc_furnace.renderPart("Electrode2Short"); + if(arc.electrodes[2] == arc.ELECTRODE_DEPLETED) ResourceManager.arc_furnace.renderPart("Electrode3Short"); + fullbright(false); + if(arc.electrodes[0] != arc.ELECTRODE_NONE) ResourceManager.arc_furnace.renderPart("Ring1"); + if(arc.electrodes[1] != arc.ELECTRODE_NONE) ResourceManager.arc_furnace.renderPart("Ring2"); + if(arc.electrodes[2] != arc.ELECTRODE_NONE) ResourceManager.arc_furnace.renderPart("Ring3"); + + if(arc.electrodes[0] != arc.ELECTRODE_NONE) { + GL11.glPushMatrix(); + GL11.glTranslated(0, 5.5, 0.5); + if(arc.isProgressing) GL11.glRotated(Math.sin((arc.getWorldObj().getTotalWorldTime() + interp) / 2) * 30, 1, 0, 0); + GL11.glTranslated(0, -5.5, -0.5); + ResourceManager.arc_furnace.renderPart("Cable1"); + GL11.glPopMatrix(); + } + if(arc.electrodes[1] != arc.ELECTRODE_NONE) { + GL11.glPushMatrix(); + GL11.glTranslated(0, 5.5, 0); + if(arc.isProgressing) GL11.glRotated(Math.sin((arc.getWorldObj().getTotalWorldTime() + interp) / 2) * 30, 1, 0, 0); + GL11.glTranslated(0, -5.5, 0); + ResourceManager.arc_furnace.renderPart("Cable2"); + GL11.glPopMatrix(); + } + if(arc.electrodes[2] != arc.ELECTRODE_NONE) { + GL11.glPushMatrix(); + GL11.glTranslated(0, 5.5, -0.5); + if(arc.isProgressing) GL11.glRotated(Math.sin((arc.getWorldObj().getTotalWorldTime() + interp) / 2) * 30, 1, 0, 0); + GL11.glTranslated(0, -5.5, 0.5); + ResourceManager.arc_furnace.renderPart("Cable3"); + GL11.glPopMatrix(); + } + GL11.glShadeModel(GL11.GL_FLAT); GL11.glPopMatrix(); } + + public static void fullbright(boolean on) { + + if(on) { + GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_LIGHTING_BIT); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + } else { + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glPopAttrib(); + GL11.glPopMatrix(); + } + } @Override public Item getItemForRenderer() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java index 8b3a7c108..fcb379405 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java @@ -3,18 +3,28 @@ package com.hbm.tileentity.machine; import java.util.ArrayList; import java.util.List; +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerMachineArcFurnaceLarge; import com.hbm.inventory.gui.GUIMachineArcFurnaceLarge; +import com.hbm.inventory.material.MaterialShapes; +import com.hbm.inventory.material.Mats; import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.inventory.recipes.ArcFurnaceRecipes; import com.hbm.inventory.recipes.ArcFurnaceRecipes.ArcFurnaceRecipe; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemArcElectrode; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.CrucibleUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IEnergyReceiverMK2; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; @@ -22,22 +32,34 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase implements IEnergyReceiverMK2, IGUIProvider { +public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase implements IEnergyReceiverMK2, IControlReceiver, IGUIProvider { public long power; public static final long maxPower = 10_000_000; public boolean liquidMode = false; public float progress; + public boolean isProgressing; + public boolean hasMaterial; + public int delay; public float lid; public float prevLid; public int approachNum; public float syncLid; + public byte[] electrodes = new byte[3]; + public static final byte ELECTRODE_NONE = 0; + public static final byte ELECTRODE_FRESH = 1; + public static final byte ELECTRODE_USED = 2; + public static final byte ELECTRODE_DEPLETED = 3; + + public static final int maxLiquid = MaterialShapes.BLOCK.q(24); public List liquids = new ArrayList(); public TileEntityMachineArcFurnaceLarge() { @@ -49,17 +71,13 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl return "container.machineArcFurnaceLarge"; } - @Override - public int getInventoryStackLimit() { - return 1; - } - @Override public void updateEntity() { if(!worldObj.isRemote) { this.power = Library.chargeTEFromItems(slots, 3, power, maxPower); + this.isProgressing = false; for(DirPos pos : getConPos()) this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); @@ -68,27 +86,61 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl boolean ingredients = this.hasIngredients(); boolean electrodes = this.hasElectrodes(); - if(ingredients && electrodes) { + UpgradeManager.eval(slots, 4, 4); + int upgrade = UpgradeManager.getLevel(UpgradeType.SPEED); + + if(ingredients && electrodes && delay <= 0 && this.liquids.isEmpty()) { if(lid > 0) { lid -= 1F/60F; if(lid < 0) lid = 0; this.progress = 0; } else { - this.progress += 1F/100F; + int duration = 400 / (upgrade * 2 + 1); + this.progress += 1F / duration; + this.isProgressing = true; if(this.progress >= 1F) { this.process(); this.progress = 0; + this.delay = 120; } } } else { + if(this.delay > 0) delay--; this.progress = 0; - if(lid < 1) { + if(lid < 1 && this.electrodes[0] != 0 && this.electrodes[1] != 0 && this.electrodes[2] != 0) { lid += 1F/60F; if(lid > 1) lid = 1; } } + + hasMaterial = ingredients; } + this.decideElectrodeState(); + + if(!hasMaterial) hasMaterial = this.hasIngredients(); + + if(!this.liquids.isEmpty() && this.lid >= 1F) { + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + + Vec3 impact = Vec3.createVectorHelper(0, 0, 0); + MaterialStack didPour = CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 2.875D, yCoord + 1.25D, zCoord + 0.5D + dir.offsetZ * 2.875D, 6, true, this.liquids, MaterialShapes.INGOT.q(1, 2), impact); + + if(didPour != null) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "foundry"); + data.setInteger("color", didPour.material.moltenColor); + data.setByte("dir", (byte) dir.ordinal()); + data.setFloat("off", 0.625F); + data.setFloat("base", 0.625F); + data.setFloat("len", Math.max(1F, yCoord + 1 - (float) (Math.ceil(impact.yCoord) - 0.875))); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, xCoord + 0.5D + dir.offsetX * 2.875D, yCoord + 1, zCoord + 0.5D + dir.offsetZ * 2.875D), new TargetPoint(worldObj.provider.dimensionId, xCoord + 0.5, yCoord + 1, zCoord + 0.5, 50)); + } + } + + this.liquids.removeIf(o -> o.amount <= 0); + this.networkPackNT(150); } else { @@ -103,15 +155,49 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl } } + public void decideElectrodeState() { + for(int i = 0; i < 3; i++) { + + if(slots[i] != null) { + if(slots[i].getItem() == ModItems.arc_electrode_burnt) { this.electrodes[i] = this.ELECTRODE_DEPLETED; continue; } + if(slots[i].getItem() == ModItems.arc_electrode) { + if(this.isProgressing || ItemArcElectrode.getDurability(slots[i]) > 0) this.electrodes[i] = this.ELECTRODE_USED; + else this.electrodes[i] = this.ELECTRODE_FRESH; + continue; + } + } + this.electrodes[i] = this.ELECTRODE_NONE; + } + } + public void process() { for(int i = 5; i < 25; i++) { if(slots[i] == null) continue; ArcFurnaceRecipe recipe = ArcFurnaceRecipes.getOutput(slots[i]); + if(recipe == null) continue; if(!liquidMode && recipe.solidOutput != null) { slots[i] = recipe.solidOutput.copy(); } + + if(liquidMode && recipe.fluidOutput != null) { + int liquid = this.getStackAmount(liquids); + int toAdd = this.getStackAmount(recipe.fluidOutput); + + if(liquid + toAdd <= this.maxLiquid) { + slots[i] = null; + for(MaterialStack stack : recipe.fluidOutput) { + this.addToStack(stack); + } + } + } + } + + for(int i = 0; i < 3; i++) { + if(ItemArcElectrode.damage(slots[i])) { + slots[i] = new ItemStack(ModItems.arc_electrode_burnt, 1, slots[i].getItemDamage()); + } } } @@ -135,12 +221,58 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl return true; } + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return new int[] { 0, 1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24}; + } + + @Override + public boolean canInsertItem(int slot, ItemStack stack, int side) { + return this.isItemValidForSlot(slot, stack) && stack.stackSize <= 1; + } + @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { if(slot < 3) return stack.getItem() == ModItems.arc_electrode; - if(slot > 4) return lid > 0; + if(slot > 4) { + if(lid <= 0 || slots[slot] != null) return false; + ArcFurnaceRecipe recipe = ArcFurnaceRecipes.getOutput(stack); + if(recipe == null) return false; + return liquidMode ? recipe.fluidOutput != null : recipe.solidOutput != null; + } return false; } + + @Override + public boolean canExtractItem(int slot, ItemStack stack, int side) { + if(slot < 3) return lid >= 1 && stack.getItem() != ModItems.arc_electrode; + if(slot > 4) return lid > 0 && ArcFurnaceRecipes.getOutput(stack) == null; + return false; + } + + public void addToStack(MaterialStack matStack) { + + for(MaterialStack mat : liquids) { + if(mat.material == matStack.material) { + mat.amount += matStack.amount; + return; + } + } + + liquids.add(matStack.copy()); + } + + public static int getStackAmount(List stack) { + int amount = 0; + for(MaterialStack mat : stack) amount += mat.amount; + return amount; + } + + public static int getStackAmount(MaterialStack[] stack) { + int amount = 0; + for(MaterialStack mat : stack) amount += mat.amount; + return amount; + } protected DirPos[] getConPos() { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); @@ -162,6 +294,18 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl buf.writeLong(power); buf.writeFloat(progress); buf.writeFloat(lid); + buf.writeBoolean(isProgressing); + buf.writeBoolean(liquidMode); + buf.writeBoolean(hasMaterial); + + for(int i = 0; i < 3; i++) buf.writeByte(electrodes[i]); + + buf.writeShort(liquids.size()); + + for(MaterialStack mat : liquids) { + buf.writeInt(mat.material.id); + buf.writeInt(mat.amount); + } } @Override @@ -170,6 +314,18 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl this.power = buf.readLong(); this.progress = buf.readFloat(); this.syncLid = buf.readFloat(); + this.isProgressing = buf.readBoolean(); + this.liquidMode = buf.readBoolean(); + this.hasMaterial = buf.readBoolean(); + + for(int i = 0; i < 3; i++) electrodes[i] = buf.readByte(); + + int mats = buf.readShort(); + + this.liquids.clear(); + for(int i = 0; i < mats; i++) { + liquids.add(new MaterialStack(Mats.matById.get(buf.readInt()), buf.readInt())); + } this.approachNum = 2; } @@ -224,4 +380,17 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineArcFurnaceLarge(player.inventory, this); } + + @Override + public boolean hasPermission(EntityPlayer player) { + return this.isUseableByPlayer(player); + } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.getBoolean("liquid")) { + this.liquidMode = !this.liquidMode; + this.markDirty(); + } + } } diff --git a/src/main/resources/assets/hbm/textures/models/machines/arc_furnace.png b/src/main/resources/assets/hbm/textures/models/machines/arc_furnace.png index 3ad6b5d0f70b9a8f495bc98519df8e4707bca96f..8200d30296bcc99322f05e76bcd6f9b0a0017184 100644 GIT binary patch literal 28461 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
(qZu8lb+Kma>T|=9$v6x^k3)`2~FJI_?;KB-H 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 CzfuDL literal 11214 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 D<9z4i