From 19efceae9212fe0645830d7d3c5fd283c2722518 Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Fri, 2 Aug 2013 23:36:56 -0400 Subject: [PATCH 1/2] Easy way to increment facing --- src/resonantinduction/contractor/BlockEMContractor.java | 6 ++---- .../contractor/TileEntityEMContractor.java | 6 ++++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/resonantinduction/contractor/BlockEMContractor.java b/src/resonantinduction/contractor/BlockEMContractor.java index f216588f..da35219b 100644 --- a/src/resonantinduction/contractor/BlockEMContractor.java +++ b/src/resonantinduction/contractor/BlockEMContractor.java @@ -32,11 +32,9 @@ public class BlockEMContractor extends BlockBase implements ITileEntityProvider { if(par1World.isRemote) { - //debug TileEntityEMContractor contractor = (TileEntityEMContractor)par1World.getBlockTileEntity(par2, par3, par4); - int toSet = contractor.facing.ordinal() < 5 ? contractor.facing.ordinal()+1 : 0; - contractor.facing = ForgeDirection.getOrientation(toSet); - System.out.println(contractor.facing.ordinal()); + contractor.incrementFacing(); + return true; } diff --git a/src/resonantinduction/contractor/TileEntityEMContractor.java b/src/resonantinduction/contractor/TileEntityEMContractor.java index 5ac6cfab..a7bbe664 100644 --- a/src/resonantinduction/contractor/TileEntityEMContractor.java +++ b/src/resonantinduction/contractor/TileEntityEMContractor.java @@ -6,4 +6,10 @@ import net.minecraftforge.common.ForgeDirection; public class TileEntityEMContractor extends TileEntity { public ForgeDirection facing = ForgeDirection.UP; + + public void incrementFacing() + { + int newOrdinal = facing.ordinal() < 5 ? facing.ordinal()+1 : 0; + facing = ForgeDirection.getOrientation(newOrdinal); + } } From f27aaa3c4ba49bda41befe3b83c2220d08267af1 Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Fri, 2 Aug 2013 23:59:39 -0400 Subject: [PATCH 2/2] PacketHandler! --- src/resonantinduction/PacketHandler.java | 119 ++++++++++++++++-- .../base/IPacketReceiver.java | 8 ++ .../contractor/BlockEMContractor.java | 2 +- .../contractor/TileEntityEMContractor.java | 6 + 4 files changed, 123 insertions(+), 12 deletions(-) create mode 100644 src/resonantinduction/base/IPacketReceiver.java diff --git a/src/resonantinduction/PacketHandler.java b/src/resonantinduction/PacketHandler.java index c4e5e2a0..7bb8700d 100644 --- a/src/resonantinduction/PacketHandler.java +++ b/src/resonantinduction/PacketHandler.java @@ -3,29 +3,126 @@ */ package resonantinduction; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.util.ArrayList; + +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.INetworkManager; import net.minecraft.network.packet.Packet250CustomPayload; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import resonantinduction.base.IPacketReceiver; + +import com.google.common.io.ByteArrayDataInput; +import com.google.common.io.ByteStreams; + 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; /** - * @author Calclavia + * @author AidanBrady * */ public class PacketHandler implements IPacketHandler { - - /* - * (non-Javadoc) - * - * @see - * cpw.mods.fml.common.network.IPacketHandler#onPacketData(net.minecraft.network.INetworkManager - * , net.minecraft.network.packet.Packet250CustomPayload, cpw.mods.fml.common.network.Player) - */ @Override public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player) { - + if(packet.channel == ResonantInduction.CHANNEL) + { + ByteArrayDataInput dataStream = ByteStreams.newDataInput(packet.data); + EntityPlayer entityplayer = (EntityPlayer)player; + World world = entityplayer.worldObj; + + try { + int packetType = dataStream.readInt(); + + if(packetType == PacketType.TILE.ordinal()) + { + int x = dataStream.readInt(); + int y = dataStream.readInt(); + int z = dataStream.readInt(); + + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + + if(tileEntity instanceof IPacketReceiver) + { + ((IPacketReceiver)tileEntity).handle(dataStream); + } + } + } catch(Exception e) {} + } + } + + public static void encode(Object[] dataValues, DataOutputStream output) + { + try { + for(Object data : dataValues) + { + if(data instanceof Integer) + { + output.writeInt((Integer)data); + } + else if(data instanceof Boolean) + { + output.writeBoolean((Boolean)data); + } + else if(data instanceof Double) + { + output.writeDouble((Double)data); + } + else if(data instanceof Float) + { + output.writeFloat((Float)data); + } + else if(data instanceof String) + { + output.writeUTF((String)data); + } + else if(data instanceof Byte) + { + output.writeByte((Byte)data); + } + } + } catch(Exception e) {} + } + + public void sendTileEntityPacketToServer(TileEntity tileEntity, Object... dataValues) + { + PacketDispatcher.sendPacketToServer(getTileEntityPacket(tileEntity, dataValues)); + } + + public void sendTileEntityPacketToClients(TileEntity tileEntity, Object... dataValues) + { + PacketDispatcher.sendPacketToAllPlayers(getTileEntityPacket(tileEntity, dataValues)); + } + + public Packet250CustomPayload getTileEntityPacket(TileEntity tileEntity, Object... dataValues) + { + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + DataOutputStream data = new DataOutputStream(bytes); + + try { + data.writeInt(tileEntity.xCoord); + data.writeInt(tileEntity.yCoord); + data.writeInt(tileEntity.zCoord); + + encode(dataValues, data); + } catch(Exception e) {} + + Packet250CustomPayload packet = new Packet250CustomPayload(); + packet.channel = ResonantInduction.CHANNEL; + packet.data = bytes.toByteArray(); + packet.length = packet.data.length; + + return packet; + } + + public static enum PacketType + { + TILE } - } diff --git a/src/resonantinduction/base/IPacketReceiver.java b/src/resonantinduction/base/IPacketReceiver.java new file mode 100644 index 00000000..12683075 --- /dev/null +++ b/src/resonantinduction/base/IPacketReceiver.java @@ -0,0 +1,8 @@ +package resonantinduction.base; + +import com.google.common.io.ByteArrayDataInput; + +public interface IPacketReceiver +{ + public void handle(ByteArrayDataInput input); +} diff --git a/src/resonantinduction/contractor/BlockEMContractor.java b/src/resonantinduction/contractor/BlockEMContractor.java index da35219b..b6d63bde 100644 --- a/src/resonantinduction/contractor/BlockEMContractor.java +++ b/src/resonantinduction/contractor/BlockEMContractor.java @@ -30,7 +30,7 @@ public class BlockEMContractor extends BlockBase implements ITileEntityProvider @Override public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) { - if(par1World.isRemote) + if(par1World.isRemote && !par5EntityPlayer.isSneaking()) { TileEntityEMContractor contractor = (TileEntityEMContractor)par1World.getBlockTileEntity(par2, par3, par4); contractor.incrementFacing(); diff --git a/src/resonantinduction/contractor/TileEntityEMContractor.java b/src/resonantinduction/contractor/TileEntityEMContractor.java index a7bbe664..6d0a8d2e 100644 --- a/src/resonantinduction/contractor/TileEntityEMContractor.java +++ b/src/resonantinduction/contractor/TileEntityEMContractor.java @@ -7,6 +7,12 @@ public class TileEntityEMContractor extends TileEntity { public ForgeDirection facing = ForgeDirection.UP; + @Override + public void updateEntity() + { + + } + public void incrementFacing() { int newOrdinal = facing.ordinal() < 5 ? facing.ordinal()+1 : 0;