From 0bc33ea86259d24d162859840b0b2e3041c67e4d Mon Sep 17 00:00:00 2001 From: Brian Ricketts Date: Fri, 28 Dec 2012 14:40:02 -0600 Subject: [PATCH] Finished the Rejector rendering code...now renders filter contents above it when the player is within 5 blocks --- .../client/render/RenderSorter.java | 22 ++- .../common/machine/TileEntityRejector.java | 164 +++++++++++------- .../prefab/network/PacketManager.java | 19 ++ 3 files changed, 139 insertions(+), 66 deletions(-) diff --git a/src/minecraft/assemblyline/client/render/RenderSorter.java b/src/minecraft/assemblyline/client/render/RenderSorter.java index 056a15d8..b9419125 100644 --- a/src/minecraft/assemblyline/client/render/RenderSorter.java +++ b/src/minecraft/assemblyline/client/render/RenderSorter.java @@ -1,6 +1,10 @@ package assemblyline.client.render; +import java.util.ArrayList; + +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -48,14 +52,20 @@ public class RenderSorter extends TileEntitySpecialRenderer model.renderMain(0.0625F); model.renderPiston(0.0625F, pos); GL11.glPopMatrix(); - - ItemStack filter = tileEntity.getFilter(); - if (filter != null) + + EntityPlayer p = Minecraft.getMinecraft().thePlayer; + double dist = p.getDistance(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + System.out.println(dist); + if (dist < 5) { - ItemStack filterItem = ItemFilter.getFilters(filter).get(0); - if (filterItem != null) + ItemStack filter = tileEntity.getFilter(); + if (filter != null) { - RenderHelper.renderFloatingText(filterItem.getDisplayName(), (float) x + 0.5f, (float) y, (float) z + 0.5f); + ArrayList filters = ItemFilter.getFilters(filter); + for (int i = 0; i < filters.size(); i++) + { + RenderHelper.renderFloatingText(filters.get(i).getDisplayName(), (float) x + 0.5f, ((float) y + (i * 0.25f)) - 1f, (float) z + 0.5f); + } } } } diff --git a/src/minecraft/assemblyline/common/machine/TileEntityRejector.java b/src/minecraft/assemblyline/common/machine/TileEntityRejector.java index e9d3d8fb..026d522b 100644 --- a/src/minecraft/assemblyline/common/machine/TileEntityRejector.java +++ b/src/minecraft/assemblyline/common/machine/TileEntityRejector.java @@ -1,6 +1,10 @@ package assemblyline.common.machine; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; @@ -10,6 +14,7 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.INetworkManager; @@ -23,13 +28,16 @@ import universalelectricity.prefab.TranslationHelper; import universalelectricity.prefab.implement.IRotatable; import universalelectricity.prefab.network.IPacketReceiver; import universalelectricity.prefab.network.PacketManager; +import universalelectricity.prefab.network.PacketManager.PacketType; import assemblyline.api.IFilterable; import assemblyline.common.AssemblyLine; import assemblyline.common.machine.filter.ItemFilter; import com.google.common.io.ByteArrayDataInput; +import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.network.PacketDispatcher; +import cpw.mods.fml.relauncher.Side; /** * @@ -106,8 +114,11 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo */ if (!this.worldObj.isRemote && flag) { - Packet packet = PacketManager.getPacket(AssemblyLine.CHANNEL, this, this.getPacketData(PacketTypes.ANIMATION)); - PacketManager.sendPacketToClients(packet, this.worldObj, new Vector3(this), 30); + // Packet packet = PacketManager.getPacket(AssemblyLine.CHANNEL, this, + // this.getPacketData(PacketTypes.ANIMATION)); + // PacketManager.sendPacketToClients(packet, this.worldObj, new Vector3(this), + // 30); + PacketManager.sendPacketToClients(getDescriptionPacket()); } } @@ -116,18 +127,18 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo e.printStackTrace(); } - if (!this.worldObj.isRemote && this.playerUsing > 0) + if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER && this.playerUsing > 0) { PacketManager.sendPacketToClients(this.getDescriptionPacket(), this.worldObj, new Vector3(this), 10); } } } - @Override - public Packet getDescriptionPacket() - { - return PacketManager.getPacket(AssemblyLine.CHANNEL, this, this.getPacketData(PacketTypes.INVENTORY)); - } + /* + * @Override public Packet getDescriptionPacket() { return + * PacketManager.getPacket(AssemblyLine.CHANNEL, this, + * this.getPacketData(PacketTypes.INVENTORY)); } + */ /** * Used to move after it has been rejected @@ -142,6 +153,8 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo entity.motionX = (double) side.offsetX * 0.1; entity.motionY += 0.10000000298023224D; entity.motionZ = (double) side.offsetZ * 0.1; + + PacketManager.sendPacketToClients(getDescriptionPacket()); } public boolean canEntityBeThrow(Entity entity) @@ -198,55 +211,28 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo } } - public Object[] getPacketData(PacketTypes id) - { - if (id == PacketTypes.ANIMATION) { return new Object[] { id.ordinal(), this.firePiston }; } - if (id == PacketTypes.INVENTORY) - { - Object[] da = new Object[this.guiButtons.length + 1]; - da[0] = id.ordinal(); + /* + * public Object[] getPacketData(PacketTypes id) { if (id == PacketTypes.ANIMATION) { return new + * Object[] { id.ordinal(), this.firePiston }; } if (id == PacketTypes.INVENTORY) { Object[] da + * = new Object[this.guiButtons.length + 1]; da[0] = id.ordinal(); + * + * for (int i = 0; i < this.guiButtons.length; i++) { da[i + 1] = guiButtons[i]; } return da; } + * return new Object[] { id.ordinal() }; } + */ - for (int i = 0; i < this.guiButtons.length; i++) - { - da[i + 1] = guiButtons[i]; - } - return da; - } - return new Object[] { id.ordinal() }; - } - - @Override - public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) - { - try - { - int id = dataStream.readInt(); - PacketTypes pID = PacketTypes.values()[id]; - DataInputStream inputStream = new DataInputStream((InputStream) dataStream); - - if (pID == PacketTypes.ANIMATION) - { - this.firePiston = dataStream.readBoolean(); - } - else if (pID == PacketTypes.INVENTORY) - { - for (int i = 0; i < this.guiButtons.length; i++) - { - this.guiButtons[i] = dataStream.readBoolean(); - } - } - else if (pID == PacketTypes.SETTINGON) - { - int num = dataStream.readInt(); - this.changeOnOff(num); - } - - } - catch (Exception e) - { - e.printStackTrace(); - } - } + /* + * @Override public void handlePacketData(INetworkManager network, int packetType, + * Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) { try { + * int id = dataStream.readInt(); PacketTypes pID = PacketTypes.values()[id]; DataInputStream + * inputStream = new DataInputStream((InputStream) dataStream); + * + * if (pID == PacketTypes.ANIMATION) { this.firePiston = dataStream.readBoolean(); } else if + * (pID == PacketTypes.INVENTORY) { for (int i = 0; i < this.guiButtons.length; i++) { + * this.guiButtons[i] = dataStream.readBoolean(); } } else if (pID == PacketTypes.SETTINGON) { + * int num = dataStream.readInt(); this.changeOnOff(num); } + * + * } catch (Exception e) { e.printStackTrace(); } } + */ /** * inventory methods @@ -364,7 +350,7 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo { super.readFromNBT(nbt); - for (int i = 0; i < this.guiButtons.length; i++) + /*for (int i = 0; i < this.guiButtons.length; i++) { this.guiButtons[i] = nbt.getBoolean("guiButton" + i); } @@ -381,7 +367,11 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo { this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); } - } + }*/ + + NBTTagCompound filter = nbt.getCompoundTag("filter"); + setInventorySlotContents(0, ItemStack.loadItemStackFromNBT(filter)); + firePiston = nbt.getBoolean("piston"); } /** @@ -392,7 +382,7 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo { super.writeToNBT(nbt); - for (int i = 0; i < this.guiButtons.length; i++) + /*for (int i = 0; i < this.guiButtons.length; i++) { nbt.setBoolean("guiButton" + i, this.guiButtons[i]); } @@ -408,7 +398,12 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo var2.appendTag(var4); } } - nbt.setTag("Items", var2); + nbt.setTag("Items", var2);*/ + NBTTagCompound filter = new NBTTagCompound(); + if (getStackInSlot(0) != null) + getStackInSlot(0).writeToNBT(filter); + nbt.setCompoundTag("filter", filter); + nbt.setBoolean("piston", firePiston); } @Override @@ -421,6 +416,7 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo public void setFilter(ItemStack filter) { this.setInventorySlotContents(0, filter); + PacketManager.sendPacketToClients(getDescriptionPacket()); } @Override @@ -440,4 +436,52 @@ public class TileEntityRejector extends TileEntityAssemblyNetwork implements IRo { this.worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, facingDirection.ordinal()); } + + @Override + public Packet getDescriptionPacket() + { + Packet250CustomPayload packet = new Packet250CustomPayload(); + packet.channel = AssemblyLine.CHANNEL; + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(bos); + try + { + dos.writeInt(PacketType.TILEENTITY.ordinal()); + dos.writeInt(xCoord); + dos.writeInt(yCoord); + dos.writeInt(zCoord); + NBTTagCompound tag = new NBTTagCompound(); + writeToNBT(tag); + PacketManager.writeNBTTagCompound(tag, dos); + packet.data = bos.toByteArray(); + packet.length = bos.size(); + return packet; + } + catch (IOException e) + { + e.printStackTrace(); + } + return null; + } + + @Override + public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) + { + ByteArrayInputStream bis = new ByteArrayInputStream(packet.data); + DataInputStream dis = new DataInputStream(bis); + int id, x, y, z; + try + { + id = dis.readInt(); + x = dis.readInt(); + y = dis.readInt(); + z = dis.readInt(); + NBTTagCompound tag = Packet.readNBTTagCompound(dis); + readFromNBT(tag); + } + catch (IOException e) + { + e.printStackTrace(); + } + } } diff --git a/src/minecraft/universalelectricity/prefab/network/PacketManager.java b/src/minecraft/universalelectricity/prefab/network/PacketManager.java index 3227cc17..b8a49a3a 100644 --- a/src/minecraft/universalelectricity/prefab/network/PacketManager.java +++ b/src/minecraft/universalelectricity/prefab/network/PacketManager.java @@ -5,6 +5,8 @@ import java.io.DataOutputStream; import java.io.IOException; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.INetworkManager; import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.Packet250CustomPayload; @@ -43,6 +45,23 @@ public class PacketManager implements IPacketHandler, IPacketReceiver return UNSPECIFIED; } } + + /** + * Writes a compressed NBTTagCompound to the OutputStream + */ + public static void writeNBTTagCompound(NBTTagCompound tag, DataOutputStream stream) throws IOException + { + if (tag == null) + { + stream.writeShort(-1); + } + else + { + byte[] var2 = CompressedStreamTools.compress(tag); + stream.writeShort((short)var2.length); + stream.write(var2); + } + } @SuppressWarnings("resource") public static Packet getPacketWithID(String channelName, int id, Object... sendData)