This commit is contained in:
Calclavia 2013-08-03 00:02:56 -04:00
commit 717ef201fd
4 changed files with 131 additions and 16 deletions

View file

@ -3,29 +3,126 @@
*/ */
package resonantinduction; 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.INetworkManager;
import net.minecraft.network.packet.Packet250CustomPayload; 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.IPacketHandler;
import cpw.mods.fml.common.network.PacketDispatcher;
import cpw.mods.fml.common.network.Player; import cpw.mods.fml.common.network.Player;
import cpw.mods.fml.relauncher.Side;
/** /**
* @author Calclavia * @author AidanBrady
* *
*/ */
public class PacketHandler implements IPacketHandler 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 @Override
public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player) 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
}
} }

View file

@ -0,0 +1,8 @@
package resonantinduction.base;
import com.google.common.io.ByteArrayDataInput;
public interface IPacketReceiver
{
public void handle(ByteArrayDataInput input);
}

View file

@ -30,13 +30,11 @@ public class BlockEMContractor extends BlockBase implements ITileEntityProvider
@Override @Override
public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) 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())
{ {
//debug
TileEntityEMContractor contractor = (TileEntityEMContractor)par1World.getBlockTileEntity(par2, par3, par4); TileEntityEMContractor contractor = (TileEntityEMContractor)par1World.getBlockTileEntity(par2, par3, par4);
int toSet = contractor.facing.ordinal() < 5 ? contractor.facing.ordinal()+1 : 0; contractor.incrementFacing();
contractor.facing = ForgeDirection.getOrientation(toSet);
System.out.println(contractor.facing.ordinal());
return true; return true;
} }

View file

@ -6,4 +6,16 @@ import net.minecraftforge.common.ForgeDirection;
public class TileEntityEMContractor extends TileEntity public class TileEntityEMContractor extends TileEntity
{ {
public ForgeDirection facing = ForgeDirection.UP; public ForgeDirection facing = ForgeDirection.UP;
@Override
public void updateEntity()
{
}
public void incrementFacing()
{
int newOrdinal = facing.ordinal() < 5 ? facing.ordinal()+1 : 0;
facing = ForgeDirection.getOrientation(newOrdinal);
}
} }