package advancedsystemsmanager.network;
import advancedsystemsmanager.containers.ContainerBase;
import advancedsystemsmanager.reference.Reference;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import cpw.mods.fml.common.network.internal.FMLProxyPacket;
import cpw.mods.fml.relauncher.Side;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.PacketBuffer;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import static advancedsystemsmanager.AdvancedSystemsManager.packetHandler;
public class ASMPacket extends PacketBuffer
{
List<EntityPlayerMP> players;
Side side;
public ASMPacket()
{
this(10);
}
public ASMPacket(int size)
{
super(Unpooled.buffer(size));
}
public ASMPacket(ByteBuf buffer, Side side)
{
super(buffer);
this.side = side;
}
public Side getSide()
{
return side;
}
public void setPlayer(EntityPlayerMP player)
{
if (players == null) players = new ArrayList<EntityPlayerMP>();
players.add(player);
}
public List<EntityPlayerMP> getPlayers()
{
return this.players;
}
public void setPlayers(List<EntityPlayerMP> players)
{
this.players = players;
}
public void sendResponse()
{
FMLProxyPacket packet = getPacket();
for (EntityPlayerMP player : players)
{
packetHandler.sendTo(packet, player);
}
}
public FMLProxyPacket getPacket()
{
return new FMLProxyPacket(this, Reference.NETWORK_ID);
}
public void sendPlayerPackets(double x, double y, double z, double r, int dimension)
{
packetHandler.sendToAllAround(getPacket(), new TargetPoint(dimension, x, y, z, r));
}
public void sendPlayerPacket(EntityPlayerMP player)
{
packetHandler.sendTo(getPacket(), player);
}
public void sendToAll()
{
packetHandler.sendToAll(getPacket());
}
public void sendServerPacket()
{
packetHandler.sendToServer(getPacket());
}
public void sendPlayerPackets(boolean reply, ContainerBase container)
{
FMLProxyPacket packet = getPacket();
for (Object crafting : container.getCrafters())
{
if (crafting instanceof EntityPlayerMP && (players == null || players.contains(crafting) == reply))
{
packetHandler.sendTo(packet, (EntityPlayerMP)crafting);
}
}
}
public void writeNBTTagCompoundToBuffer(NBTTagCompound tag)
{
try
{
super.writeNBTTagCompoundToBuffer(tag);
} catch (IOException ignored)
{
}
}
public NBTTagCompound readNBTTagCompoundFromBuffer()
{
try
{
return super.readNBTTagCompoundFromBuffer();
} catch (IOException e)
{
return null;
}
}
@Override
public void writeItemStackToBuffer(ItemStack stack)
{
try
{
super.writeItemStackToBuffer(stack);
} catch (IOException ignored)
{
}
}
@Override
public ItemStack readItemStackFromBuffer()
{
try
{
return super.readItemStackFromBuffer();
} catch (IOException e)
{
return null;
}
}
@Override
public String readStringFromBuffer(int maxLength)
{
try
{
return super.readStringFromBuffer(maxLength);
} catch (IOException e)
{
return null;
}
}
@Override
public void writeStringToBuffer(String string)
{
try
{
super.writeStringToBuffer(string);
} catch (IOException ignored)
{
}
}
public ASMPacket copy()
{
return new ASMPacket(super.copy(), this.side);
}
public void writeBooleanArray(boolean... val)
{
int b = 0;
for (boolean aVal : val)
{
b <<= 1;
if (aVal) b |= 1;
}
writeVarIntToBuffer(b);
}
public boolean[] readBooleanArray(int size)
{
boolean[] result = new boolean[size];
int b = readVarIntFromBuffer();
for (int i = 1; i <= size; i++)
{
if ((b & 1) != 0) result[size - i] = true;
b >>= 1;
}
return result;
}
public String readStringFromBuffer()
{
return readStringFromBuffer(32);
}
public void writeUUID(UUID id)
{
this.writeLong(id.getMostSignificantBits());
this.writeLong(id.getLeastSignificantBits());
}
public UUID readUUID()
{
return new UUID(this.readLong(), this.readLong());
}
}