diff --git a/resources/assets/tinker/lang/en_US.xml b/resources/assets/tinker/lang/en_US.xml index 6527afc21a9..36ca636ef8d 100644 --- a/resources/assets/tinker/lang/en_US.xml +++ b/resources/assets/tinker/lang/en_US.xml @@ -464,6 +464,7 @@ Scythe Head Broad Axe Head Excavator Head + Shard Large Sword Blade Hammer Head Bowstring diff --git a/src/tconstruct/client/gui/SmelteryGui.java b/src/tconstruct/client/gui/SmelteryGui.java index 03ac11af851..f295b7ff1ba 100644 --- a/src/tconstruct/client/gui/SmelteryGui.java +++ b/src/tconstruct/client/gui/SmelteryGui.java @@ -1,5 +1,7 @@ package tconstruct.client.gui; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -9,6 +11,7 @@ import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.network.packet.Packet250CustomPayload; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.Icon; import net.minecraft.util.ResourceLocation; @@ -24,6 +27,7 @@ import tconstruct.blocks.logic.SmelteryLogic; import tconstruct.inventory.ActiveContainer; import tconstruct.inventory.SmelteryContainer; +import cpw.mods.fml.common.network.PacketDispatcher; public class SmelteryGui extends NewContainerGui { @@ -108,6 +112,7 @@ protected void drawGuiContainerForegroundLayer (int mouseX, int mouseY) int base = 0; int cornerX = (width - xSize) / 2 + 36; int cornerY = (height - ySize) / 2; + for (FluidStack liquid : logic.moltenMetal) { int basePos = 54; @@ -133,9 +138,9 @@ protected void drawGuiContainerForegroundLayer (int mouseX, int mouseY) if (mouseX >= leftX && mouseX <= leftX + sizeX && mouseY >= topY && mouseY < topY + sizeY) { drawFluidStackTooltip(liquid, mouseX - cornerX + 36, mouseY - cornerY); + } } - if (logic.fuelGague > 0) { int leftX = cornerX + 117; @@ -414,4 +419,72 @@ public void drawLiquidRect (int startU, int startV, Icon par3Icon, int endU, int tessellator.addVertexWithUV((double) (startU + 0), (double) (startV + 0), (double) this.zLevel, (double) par3Icon.getMinU(), (double) par3Icon.getMinV()); //Top left tessellator.draw(); } + + @Override + public void mouseClicked(int mouseX, int mouseY, int mouseButton) + { + super.mouseClicked(mouseX, mouseY, mouseButton); + + int base = 0; + int cornerX = (width - xSize) / 2 + 36; + int cornerY = (height - ySize) / 2; + int fluidToBeBroughtUp = -1; + + for (FluidStack liquid : logic.moltenMetal) + { + int basePos = 54; + int initialLiquidSize = 0; + int liquidSize = 0;//liquid.amount * 52 / liquidLayers; + if (logic.getCapacity() > 0) + { + int total = logic.getTotalLiquid(); + int liquidLayers = (total / 20000 + 1) * 20000; + if (liquidLayers > 0) + { + liquidSize = liquid.amount * 52 / liquidLayers; + if (liquidSize == 0) + liquidSize = 1; + base += liquidSize; + } + } + + int leftX = cornerX + basePos; + int topY = (cornerY + 68) - base; + int sizeX = 52; + int sizeY = liquidSize; + if (mouseX >= leftX && mouseX <= leftX + sizeX && mouseY >= topY && mouseY < topY + sizeY) + { + fluidToBeBroughtUp = liquid.fluidID; + + Packet250CustomPayload packet = new Packet250CustomPayload(); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(bos); + + try + { + dos.write(11); + + dos.writeInt(logic.worldObj.provider.dimensionId); + dos.writeInt(logic.xCoord); + dos.writeInt(logic.yCoord); + dos.writeInt(logic.zCoord); + + dos.writeBoolean(this.isShiftKeyDown()); + + dos.writeInt(fluidToBeBroughtUp); + } + catch (Exception e) + { + e.printStackTrace(); + } + + packet.channel = "TConstruct"; + packet.data = bos.toByteArray(); + packet.length = bos.size(); + + PacketDispatcher.sendPacketToServer(packet); + } + } + } } diff --git a/src/tconstruct/common/TContent.java b/src/tconstruct/common/TContent.java index 5c3365ed7d7..b26c5454f28 100644 --- a/src/tconstruct/common/TContent.java +++ b/src/tconstruct/common/TContent.java @@ -1178,6 +1178,7 @@ void addCraftingRecipes() tableCasting.addCastingRecipe(new ItemStack(materials, 1, 15), new FluidStack(moltenAlumiteFluid, TConstruct.ingotLiquidValue), ingotcast, 80); //alumite tableCasting.addCastingRecipe(new ItemStack(materials, 1, 18), new FluidStack(moltenObsidianFluid, TConstruct.ingotLiquidValue), ingotcast, 80); //obsidian tableCasting.addCastingRecipe(new ItemStack(materials, 1, 16), new FluidStack(moltenSteelFluid, TConstruct.ingotLiquidValue), ingotcast, 80); //steel + tableCasting.addCastingRecipe(new ItemStack(materials, 1, 2), new FluidStack(moltenStoneFluid, TConstruct.ingotLiquidValue), ingotcast, 80); //steel //Buckets ItemStack bucket = new ItemStack(Item.bucketEmpty); diff --git a/src/tconstruct/util/network/TPacketHandler.java b/src/tconstruct/util/network/TPacketHandler.java index 954af76cab0..970332ac833 100644 --- a/src/tconstruct/util/network/TPacketHandler.java +++ b/src/tconstruct/util/network/TPacketHandler.java @@ -13,13 +13,16 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.fluids.FluidStack; import tconstruct.TConstruct; import tconstruct.blocks.logic.DrawbridgeLogic; +import tconstruct.blocks.logic.SmelteryLogic; import tconstruct.blocks.logic.ToolForgeLogic; import tconstruct.blocks.logic.ToolStationLogic; import tconstruct.library.blocks.InventoryLogic; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.network.IPacketHandler; +import cpw.mods.fml.common.network.PacketDispatcher; import cpw.mods.fml.common.network.Player; import cpw.mods.fml.relauncher.Side; @@ -137,13 +140,50 @@ else if (packetID == 5) //Drawbridge ((DrawbridgeLogic) te).setPlacementDirection(direction); } } - + else if (packetID == 10) //Double jump { //String user = inputStream.readUTF(); //EntityPlayer player = TConstruct.playerTracker.getEntityPlayer(user); player.fallDistance = 0; } + + else if (packetID == 11) //Smeltery + { + int dimension = inputStream.readInt(); + World world = DimensionManager.getWorld(dimension); + int x = inputStream.readInt(); + int y = inputStream.readInt(); + int z = inputStream.readInt(); + + boolean isShiftPressed = inputStream.readBoolean(); + int fluidID = inputStream.readInt(); + + TileEntity te = world.getBlockTileEntity(x, y, z); + + if (te instanceof SmelteryLogic) + { + FluidStack temp = null; + + for(FluidStack liquid : ((SmelteryLogic) te).moltenMetal) + { + if (liquid.fluidID == fluidID) + { + temp = liquid; + } + } + + if (temp != null) + { + ((SmelteryLogic) te).moltenMetal.remove(temp); + if (isShiftPressed) + ((SmelteryLogic) te).moltenMetal.add(temp); + else + ((SmelteryLogic) te).moltenMetal.add(0, temp); + } + PacketDispatcher.sendPacketToAllInDimension(te.getDescriptionPacket(), dimension); + } + } } catch (IOException e) {