2012-11-05 20:29:04 +01:00
|
|
|
package mekanism.common;
|
2012-08-15 22:41:41 +02:00
|
|
|
|
2014-06-02 16:52:13 +02:00
|
|
|
import io.netty.buffer.ByteBuf;
|
2012-10-14 03:48:29 +02:00
|
|
|
|
2014-06-02 16:52:13 +02:00
|
|
|
import java.util.ArrayList;
|
2014-06-11 11:57:49 +02:00
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import mekanism.common.network.PacketBoxBlacklist;
|
|
|
|
import mekanism.common.network.PacketBoxBlacklist.BoxBlacklistMessage;
|
|
|
|
import mekanism.common.network.PacketConfigSync;
|
|
|
|
import mekanism.common.network.PacketConfigSync.ConfigSyncMessage;
|
|
|
|
import mekanism.common.network.PacketConfigurationUpdate;
|
|
|
|
import mekanism.common.network.PacketConfigurationUpdate.ConfigurationUpdateMessage;
|
|
|
|
import mekanism.common.network.PacketConfiguratorState;
|
|
|
|
import mekanism.common.network.PacketConfiguratorState.ConfiguratorStateMessage;
|
|
|
|
import mekanism.common.network.PacketDataRequest;
|
|
|
|
import mekanism.common.network.PacketDataRequest.DataRequestMessage;
|
|
|
|
import mekanism.common.network.PacketDigitUpdate;
|
|
|
|
import mekanism.common.network.PacketDigitUpdate.DigitUpdateMessage;
|
|
|
|
import mekanism.common.network.PacketDigitalMinerGui;
|
|
|
|
import mekanism.common.network.PacketDigitalMinerGui.DigitalMinerGuiMessage;
|
|
|
|
import mekanism.common.network.PacketEditFilter;
|
|
|
|
import mekanism.common.network.PacketEditFilter.EditFilterMessage;
|
|
|
|
import mekanism.common.network.PacketElectricBowState;
|
|
|
|
import mekanism.common.network.PacketElectricBowState.ElectricBowStateMessage;
|
|
|
|
import mekanism.common.network.PacketElectricChest;
|
|
|
|
import mekanism.common.network.PacketElectricChest.ElectricChestMessage;
|
|
|
|
import mekanism.common.network.PacketJetpackData;
|
|
|
|
import mekanism.common.network.PacketJetpackData.JetpackDataMessage;
|
|
|
|
import mekanism.common.network.PacketKey;
|
|
|
|
import mekanism.common.network.PacketKey.KeyMessage;
|
|
|
|
import mekanism.common.network.PacketLogisticalSorterGui;
|
|
|
|
import mekanism.common.network.PacketLogisticalSorterGui.LogisticalSorterGuiMessage;
|
|
|
|
import mekanism.common.network.PacketNewFilter;
|
|
|
|
import mekanism.common.network.PacketNewFilter.NewFilterMessage;
|
|
|
|
import mekanism.common.network.PacketPortableTeleport;
|
|
|
|
import mekanism.common.network.PacketPortableTeleport.PortableTeleportMessage;
|
|
|
|
import mekanism.common.network.PacketPortalFX;
|
|
|
|
import mekanism.common.network.PacketPortalFX.PortalFXMessage;
|
|
|
|
import mekanism.common.network.PacketRedstoneControl;
|
|
|
|
import mekanism.common.network.PacketRedstoneControl.RedstoneControlMessage;
|
|
|
|
import mekanism.common.network.PacketRemoveUpgrade;
|
|
|
|
import mekanism.common.network.PacketRemoveUpgrade.RemoveUpgradeMessage;
|
|
|
|
import mekanism.common.network.PacketRobit;
|
|
|
|
import mekanism.common.network.PacketRobit.RobitMessage;
|
|
|
|
import mekanism.common.network.PacketScubaTankData;
|
|
|
|
import mekanism.common.network.PacketScubaTankData.ScubaTankDataMessage;
|
|
|
|
import mekanism.common.network.PacketSimpleGui;
|
|
|
|
import mekanism.common.network.PacketSimpleGui.SimpleGuiMessage;
|
|
|
|
import mekanism.common.network.PacketStatusUpdate;
|
|
|
|
import mekanism.common.network.PacketStatusUpdate.StatusUpdateMessage;
|
|
|
|
import mekanism.common.network.PacketTileEntity;
|
|
|
|
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
|
|
|
|
import mekanism.common.network.PacketTransmitterUpdate;
|
|
|
|
import mekanism.common.network.PacketTransmitterUpdate.TransmitterUpdateMessage;
|
|
|
|
import mekanism.common.network.PacketWalkieTalkieState;
|
|
|
|
import mekanism.common.network.PacketWalkieTalkieState.WalkieTalkieStateMessage;
|
|
|
|
import net.minecraft.client.Minecraft;
|
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
|
|
|
import net.minecraft.server.MinecraftServer;
|
|
|
|
import net.minecraft.util.AxisAlignedBB;
|
|
|
|
import net.minecraft.util.Vec3;
|
|
|
|
import cpw.mods.fml.common.network.NetworkRegistry;
|
|
|
|
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
|
|
|
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
|
|
|
import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper;
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
2012-09-03 18:11:25 +02:00
|
|
|
|
|
|
|
/**
|
2012-11-05 20:29:04 +01:00
|
|
|
* Mekanism packet handler. As always, use packets sparingly!
|
2012-09-03 18:11:25 +02:00
|
|
|
* @author AidanBrady
|
|
|
|
*
|
|
|
|
*/
|
2014-06-08 12:01:08 +02:00
|
|
|
public class PacketHandler
|
2012-08-15 22:41:41 +02:00
|
|
|
{
|
2014-06-11 11:57:49 +02:00
|
|
|
public SimpleNetworkWrapper netHandler = NetworkRegistry.INSTANCE.newSimpleChannel("MEK");
|
|
|
|
|
|
|
|
private int packetsRegistered = 0;
|
|
|
|
|
|
|
|
public void initialize()
|
|
|
|
{
|
|
|
|
netHandler.registerMessage(PacketRobit.class, RobitMessage.class, 0, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketTransmitterUpdate.class, TransmitterUpdateMessage.class, 1, Side.CLIENT);
|
|
|
|
netHandler.registerMessage(PacketElectricChest.class, ElectricChestMessage.class, 2, Side.CLIENT);
|
|
|
|
netHandler.registerMessage(PacketElectricChest.class, ElectricChestMessage.class, 2, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketElectricBowState.class, ElectricBowStateMessage.class, 3, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketConfiguratorState.class, ConfiguratorStateMessage.class, 4, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketTileEntity.class, TileEntityMessage.class, 5, Side.CLIENT);
|
|
|
|
netHandler.registerMessage(PacketTileEntity.class, TileEntityMessage.class, 5, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketPortalFX.class, PortalFXMessage.class, 6, Side.CLIENT);
|
|
|
|
netHandler.registerMessage(PacketDataRequest.class, DataRequestMessage.class, 7, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketStatusUpdate.class, StatusUpdateMessage.class, 8, Side.CLIENT);
|
|
|
|
netHandler.registerMessage(PacketDigitUpdate.class, DigitUpdateMessage.class, 9, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketPortableTeleport.class, PortableTeleportMessage.class, 10, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketRemoveUpgrade.class, RemoveUpgradeMessage.class, 11, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketRedstoneControl.class, RedstoneControlMessage.class, 12, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketWalkieTalkieState.class, WalkieTalkieStateMessage.class, 13, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketLogisticalSorterGui.class, LogisticalSorterGuiMessage.class, 14, Side.CLIENT);
|
|
|
|
netHandler.registerMessage(PacketLogisticalSorterGui.class, LogisticalSorterGuiMessage.class, 14, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketNewFilter.class, NewFilterMessage.class, 15, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketEditFilter.class, EditFilterMessage.class, 16, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketConfigurationUpdate.class, ConfigurationUpdateMessage.class, 17, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketSimpleGui.class, SimpleGuiMessage.class, 18, Side.CLIENT);
|
|
|
|
netHandler.registerMessage(PacketSimpleGui.class, SimpleGuiMessage.class, 18, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketDigitalMinerGui.class, DigitalMinerGuiMessage.class, 19, Side.CLIENT);
|
|
|
|
netHandler.registerMessage(PacketDigitalMinerGui.class, DigitalMinerGuiMessage.class, 19, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketJetpackData.class, JetpackDataMessage.class, 20, Side.CLIENT);
|
|
|
|
netHandler.registerMessage(PacketJetpackData.class, JetpackDataMessage.class, 20, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketKey.class, KeyMessage.class, 21, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketScubaTankData.class, ScubaTankDataMessage.class, 22, Side.CLIENT);
|
|
|
|
netHandler.registerMessage(PacketScubaTankData.class, ScubaTankDataMessage.class, 22, Side.SERVER);
|
|
|
|
netHandler.registerMessage(PacketConfigSync.class, ConfigSyncMessage.class, 23, Side.CLIENT);
|
|
|
|
netHandler.registerMessage(PacketBoxBlacklist.class, BoxBlacklistMessage.class, 24, Side.CLIENT);
|
|
|
|
}
|
|
|
|
|
2013-06-15 17:05:14 +02:00
|
|
|
/**
|
|
|
|
* Encodes an Object[] of data into a DataOutputStream.
|
|
|
|
* @param dataValues - an Object[] of data to encode
|
|
|
|
* @param output - the output stream to write to
|
2014-06-02 16:52:13 +02:00
|
|
|
*/
|
|
|
|
public static void encode(Object[] dataValues, ByteBuf output)
|
2013-06-07 17:16:47 +02:00
|
|
|
{
|
|
|
|
try {
|
2014-03-08 02:00:25 +01:00
|
|
|
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)
|
|
|
|
{
|
2014-06-02 16:52:13 +02:00
|
|
|
writeString(output, (String)data);
|
2014-03-08 02:00:25 +01:00
|
|
|
}
|
|
|
|
else if(data instanceof Byte)
|
|
|
|
{
|
|
|
|
output.writeByte((Byte)data);
|
|
|
|
}
|
|
|
|
else if(data instanceof int[])
|
|
|
|
{
|
|
|
|
for(int i : (int[])data)
|
|
|
|
{
|
|
|
|
output.writeInt(i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if(data instanceof byte[])
|
|
|
|
{
|
|
|
|
for(byte b : (byte[])data)
|
|
|
|
{
|
|
|
|
output.writeByte(b);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if(data instanceof ArrayList)
|
|
|
|
{
|
|
|
|
encode(((ArrayList)data).toArray(), output);
|
|
|
|
}
|
|
|
|
}
|
2013-06-07 17:16:47 +02:00
|
|
|
} catch(Exception e) {
|
2014-06-03 08:46:03 +02:00
|
|
|
Mekanism.logger.error("Error while encoding packet data.");
|
2014-03-08 02:00:25 +01:00
|
|
|
e.printStackTrace();
|
2013-06-07 17:16:47 +02:00
|
|
|
}
|
|
|
|
}
|
2014-06-02 16:52:13 +02:00
|
|
|
|
|
|
|
public static void writeString(ByteBuf output, String s)
|
|
|
|
{
|
|
|
|
output.writeInt(s.getBytes().length);
|
|
|
|
output.writeBytes(s.getBytes());
|
|
|
|
}
|
|
|
|
|
|
|
|
public static String readString(ByteBuf input)
|
|
|
|
{
|
|
|
|
return new String(input.readBytes(input.readInt()).array());
|
|
|
|
}
|
2014-06-11 11:57:49 +02:00
|
|
|
|
|
|
|
public static EntityPlayer getPlayer(MessageContext context)
|
|
|
|
{
|
|
|
|
if(context.side.isClient())
|
|
|
|
{
|
|
|
|
return Minecraft.getMinecraft().thePlayer;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return context.getServerHandler().playerEntity;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Send this message to everyone.
|
|
|
|
* @param message - the message to send
|
|
|
|
*/
|
|
|
|
public void sendToAll(IMessage message)
|
|
|
|
{
|
|
|
|
netHandler.sendToAll(message);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Send this message to the specified player.
|
|
|
|
* @param message - the message to send
|
|
|
|
* @param player - the player to send it to
|
|
|
|
*/
|
|
|
|
public void sendTo(IMessage message, EntityPlayerMP player)
|
|
|
|
{
|
|
|
|
netHandler.sendTo(message, player);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Send this message to everyone within a certain range of a point.
|
|
|
|
*
|
|
|
|
* @param message - the message to send
|
|
|
|
* @param point - the TargetPoint around which to send
|
|
|
|
*/
|
|
|
|
public void sendToAllAround(IMessage message, NetworkRegistry.TargetPoint point)
|
|
|
|
{
|
|
|
|
netHandler.sendToAllAround(message, point);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Send this message to everyone within the supplied dimension.
|
|
|
|
* @param message - the message to send
|
|
|
|
* @param dimensionId - the dimension id to target
|
|
|
|
*/
|
|
|
|
public void sendToDimension(IMessage message, int dimensionId)
|
|
|
|
{
|
|
|
|
netHandler.sendToDimension(message, dimensionId);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Send this message to the server.
|
|
|
|
* @param message - the message to send
|
|
|
|
*/
|
|
|
|
public void sendToServer(IMessage message)
|
|
|
|
{
|
|
|
|
netHandler.sendToServer(message);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Send this message to all players within a defined AABB cuboid.
|
|
|
|
* @param message - the message to send
|
|
|
|
* @param cuboid - the AABB cuboid to send the packet in
|
|
|
|
* @param dimId - the dimension the cuboid is in
|
|
|
|
*/
|
|
|
|
public void sendToCuboid(IMessage message, AxisAlignedBB cuboid, int dimId)
|
|
|
|
{
|
|
|
|
MinecraftServer server = MinecraftServer.getServer();
|
|
|
|
|
|
|
|
if(server != null && cuboid != null)
|
|
|
|
{
|
|
|
|
for(EntityPlayerMP player : (List<EntityPlayerMP>)server.getConfigurationManager().playerEntityList)
|
|
|
|
{
|
2014-06-14 13:49:47 +02:00
|
|
|
if(player.dimension == dimId && cuboid.isVecInside(Vec3.createVectorHelper(player.posX, player.posY, player.posZ)))
|
2014-06-11 11:57:49 +02:00
|
|
|
{
|
|
|
|
sendTo(message, player);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2012-08-15 22:41:41 +02:00
|
|
|
}
|