package noppes.npcs; import io.netty.buffer.ByteBuf; import kamkeel.npcs.util.ByteBufUtils; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraft.village.MerchantRecipeList; import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Map; public class Server { public static boolean fillBuffer(ByteBuf buffer, Enum enu, Object... obs) throws IOException { buffer.writeInt(enu.ordinal()); for (Object ob : obs) { if (ob == null) continue; if (ob instanceof Map) { Map map = (Map) ob; buffer.writeInt(map.size()); for (String key : map.keySet()) { int value = map.get(key); buffer.writeInt(value); ByteBufUtils.writeString(buffer, key); } } else if (ob instanceof MerchantRecipeList) ((MerchantRecipeList) ob).func_151391_a(new PacketBuffer(buffer)); else if (ob instanceof List) { List list = (List) ob; buffer.writeInt(list.size()); for (String s : list) ByteBufUtils.writeString(buffer, s); } else if (ob instanceof Enum) buffer.writeInt(((Enum) ob).ordinal()); else if (ob instanceof Integer) buffer.writeInt((Integer) ob); else if (ob instanceof Boolean) buffer.writeBoolean((Boolean) ob); else if (ob instanceof String) ByteBufUtils.writeString(buffer, (String) ob); else if (ob instanceof Float) buffer.writeFloat((Float) ob); else if (ob instanceof Long) buffer.writeLong((Long) ob); else if (ob instanceof Double) buffer.writeDouble((Double) ob); else if (ob instanceof byte[]) { // Write byte array length followed by bytes byte[] byteArray = (byte[]) ob; buffer.writeShort((short) byteArray.length); buffer.writeBytes(byteArray); } else if (ob instanceof NBTTagCompound) ByteBufUtils.writeNBT(buffer, (NBTTagCompound) ob); } if (buffer.array().length >= 32767) { LogWriter.error("Packet " + enu + " was too big to be send"); LogWriter.script("Issue occurred with the following Packet - " + enu + ":\n" + Arrays.toString(obs)); return false; } return true; } }