140 lines
3.2 KiB
Java
140 lines
3.2 KiB
Java
package mekanism.common.network;
|
|
|
|
import mekanism.common.Mekanism;
|
|
import mekanism.common.PacketHandler;
|
|
import mekanism.common.item.ItemJetpack;
|
|
import mekanism.common.item.ItemJetpack.JetpackMode;
|
|
import mekanism.common.network.PacketJetpackData.JetpackDataMessage;
|
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.item.ItemStack;
|
|
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
|
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
|
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
|
|
|
import io.netty.buffer.ByteBuf;
|
|
|
|
public class PacketJetpackData implements IMessageHandler<JetpackDataMessage, IMessage>
|
|
{
|
|
@Override
|
|
public IMessage onMessage(JetpackDataMessage message, MessageContext context)
|
|
{
|
|
EntityPlayer player = PacketHandler.getPlayer(context);
|
|
|
|
if(message.packetType == JetpackPacket.UPDATE)
|
|
{
|
|
if(message.value)
|
|
{
|
|
Mekanism.jetpackOn.add(message.username);
|
|
}
|
|
else {
|
|
Mekanism.jetpackOn.remove(message.username);
|
|
}
|
|
|
|
if(!player.worldObj.isRemote)
|
|
{
|
|
Mekanism.packetHandler.sendToDimension(new JetpackDataMessage(JetpackPacket.UPDATE, message.username, message.value), player.worldObj.provider.dimensionId);
|
|
}
|
|
}
|
|
else if(message.packetType == JetpackPacket.MODE)
|
|
{
|
|
ItemStack stack = player.getEquipmentInSlot(3);
|
|
|
|
if(stack != null && stack.getItem() instanceof ItemJetpack)
|
|
{
|
|
if(!message.value)
|
|
{
|
|
((ItemJetpack)stack.getItem()).incrementMode(stack);
|
|
}
|
|
else {
|
|
((ItemJetpack)stack.getItem()).setMode(stack, JetpackMode.DISABLED);
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public static class JetpackDataMessage implements IMessage
|
|
{
|
|
public JetpackPacket packetType;
|
|
|
|
public String username;
|
|
public boolean value;
|
|
|
|
public JetpackDataMessage() {}
|
|
|
|
public JetpackDataMessage(JetpackPacket type, String name, boolean state)
|
|
{
|
|
packetType = type;
|
|
value = state;
|
|
|
|
if(packetType == JetpackPacket.UPDATE)
|
|
{
|
|
username = name;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void toBytes(ByteBuf dataStream)
|
|
{
|
|
dataStream.writeInt(packetType.ordinal());
|
|
|
|
if(packetType == JetpackPacket.MODE)
|
|
{
|
|
dataStream.writeBoolean(value);
|
|
}
|
|
else if(packetType == JetpackPacket.UPDATE)
|
|
{
|
|
PacketHandler.writeString(dataStream, username);
|
|
dataStream.writeBoolean(value);
|
|
}
|
|
else if(packetType == JetpackPacket.FULL)
|
|
{
|
|
dataStream.writeInt(Mekanism.jetpackOn.size());
|
|
|
|
synchronized(Mekanism.jetpackOn)
|
|
{
|
|
for (String username : Mekanism.jetpackOn)
|
|
{
|
|
PacketHandler.writeString(dataStream, username);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void fromBytes(ByteBuf dataStream)
|
|
{
|
|
packetType = JetpackPacket.values()[dataStream.readInt()];
|
|
|
|
if(packetType == JetpackPacket.MODE)
|
|
{
|
|
value = dataStream.readBoolean();
|
|
}
|
|
else if(packetType == JetpackPacket.UPDATE)
|
|
{
|
|
username = PacketHandler.readString(dataStream);
|
|
value = dataStream.readBoolean();
|
|
}
|
|
else if(packetType == JetpackPacket.FULL)
|
|
{
|
|
Mekanism.jetpackOn.clear();
|
|
|
|
int amount = dataStream.readInt();
|
|
|
|
for(int i = 0; i < amount; i++)
|
|
{
|
|
Mekanism.jetpackOn.add(PacketHandler.readString(dataStream));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static enum JetpackPacket
|
|
{
|
|
UPDATE,
|
|
FULL,
|
|
MODE;
|
|
}
|
|
}
|