Package powercrystals.core.net

Source Code of powercrystals.core.net.PacketWrapper

package powercrystals.core.net;

import java.io.*;
import java.util.*;

import net.minecraft.network.packet.Packet250CustomPayload;

/**
* @author AtomicStryker
*
* Utility class offering convenience methods to deal with recurring Packet stuff.
*/
public final class PacketWrapper
{
  /**
   * Create a new Packet250CustomPayload and encode the Objects you provide in it
   *
   * @param channel String name of the packet channel to use
   * @param packetID Integer value to be prefixed to the data array so you can distinguish packets
   * @param input Object Array to be encoded to the packet byte array.
   */ 
  public static Packet250CustomPayload createPacket(String channel, int packetID, Object[] input)
  {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    DataOutputStream data = new DataOutputStream(bytes);
    try
    {
      data.write(packetID);

      if (input != null)
      {
        for (Object obj : input)
        {
          writeObjectToStream(obj, data);
        }
      }

    }
    catch (IOException e)
    {
      e.printStackTrace();
    }

    Packet250CustomPayload packet = new Packet250CustomPayload();
    packet.channel = channel;
    packet.data = bytes.toByteArray();
    packet.length = packet.data.length;

    return packet;
  }

  /**
   * Decodes a (packet's) byte array as Object Array of Class Instances you provide
   *
   * @param data byte array input
   * @param packetDataTypes array of class types to decode the byte array as
   */
  @SuppressWarnings({ "rawtypes", "unchecked" })
  public static Object[] readPacketData(DataInputStream data, Class[] packetDataTypes)
  {
    List result = new ArrayList<Object>();

    try
    {
      for (Class curClass : packetDataTypes)
      {
        result.add(readObjectFromStream(data, curClass));
      }
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }

    return result.toArray();
  }

  @SuppressWarnings("rawtypes")
  private static void writeObjectToStream(Object obj, DataOutputStream data) throws IOException
  {
    Class objClass = obj.getClass();

    if (objClass.equals(Boolean.class))
    {
      data.writeBoolean((Boolean) obj);
    }
    else if (objClass.equals(Byte.class))
    {
      data.writeByte((Byte) obj);
    }
    else if (objClass.equals(Integer.class))
    {
      data.writeInt((Integer) obj);
    }
    else if (objClass.equals(String.class))
    {
      data.writeUTF((String) obj);
    }
    else if (objClass.equals(Double.class))
    {
      data.writeDouble((Double) obj);
    }
    else if (objClass.equals(Float.class))
    {
      data.writeFloat((Float) obj);
    }
    else if (objClass.equals(Long.class))
    {
      data.writeLong((Long) obj);
    }
    else if (objClass.equals(Short.class))
    {
      data.writeShort((Short) obj);
    }
  }

  @SuppressWarnings("rawtypes")
  private static Object readObjectFromStream(DataInputStream data, Class curClass) throws IOException
  {
    if (curClass.equals(Boolean.class))
    {
      return data.readBoolean();
    }
    else if (curClass.equals(Byte.class))
    {
      return data.readByte();
    }
    else if (curClass.equals(Integer.class))
    {
      return data.readInt();
    }
    else if (curClass.equals(String.class))
    {
      return data.readUTF();
    }
    else if (curClass.equals(Double.class))
    {
      return data.readDouble();
    }
    else if (curClass.equals(Float.class))
    {
      return data.readFloat();
    }
    else if (curClass.equals(Long.class))
    {
      return data.readLong();
    }
    else if (curClass.equals(Short.class))
    {
      return data.readShort();
    }

    return null;
  }

  public static int readPacketID(DataInputStream data)
  {
    int result = -1;

    try
    {
      result = data.read();
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }

    return result;
  }
}
TOP

Related Classes of powercrystals.core.net.PacketWrapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.