blob: e1e4e1f341de845fb969e680d2863b46504bed7a [file] [log] [blame] [raw]
package mekanism.common.network;
import io.netty.buffer.ByteBuf;
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.inventory.EntityEquipmentSlot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
public class PacketJetpackData implements IMessageHandler<JetpackDataMessage, IMessage>
{
@Override
public IMessage onMessage(JetpackDataMessage message, MessageContext context)
{
EntityPlayer player = PacketHandler.getPlayer(context);
PacketHandler.handlePacket(new Runnable() {
@Override
public void run()
{
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.getDimension());
}
}
else if(message.packetType == JetpackPacket.MODE)
{
ItemStack stack = player.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
if(stack != null && stack.getItem() instanceof ItemJetpack)
{
if(!message.value)
{
((ItemJetpack)stack.getItem()).incrementMode(stack);
}
else {
((ItemJetpack)stack.getItem()).setMode(stack, JetpackMode.DISABLED);
}
}
}
}
}, player.worldObj);
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;
}
}