nxminetilities.network.MinetilitiesPacket.java Source code

Java tutorial

Introduction

Here is the source code for nxminetilities.network.MinetilitiesPacket.java

Source

/**
 * This work is licensed under the Creative Commons
 * Attribution-ShareAlike 3.0 Unported License. To view a copy of this
 * license, visit http://creativecommons.org/licenses/by-sa/3.0/.
 */

package nxminetilities.network;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.network.packet.Packet;

import com.google.common.collect.BiMap;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;

import cpw.mods.fml.common.network.PacketDispatcher;
import cpw.mods.fml.relauncher.Side;

public abstract class MinetilitiesPacket {

    public static final String CHANNEL = "nxMinetilities";
    private static final BiMap<Integer, Class<? extends MinetilitiesPacket>> idMap;

    static {
        ImmutableBiMap.Builder<Integer, Class<? extends MinetilitiesPacket>> builder = ImmutableBiMap.builder();

        builder.put(Integer.valueOf(0), MultilightPacket.class);
        builder.put(Integer.valueOf(1), MultilightToolPacket.class);

        idMap = builder.build();
    }

    public static MinetilitiesPacket constructPacket(int packetId)
            throws ProtocolException, ReflectiveOperationException {
        Class<? extends MinetilitiesPacket> clazz = idMap.get(Integer.valueOf(packetId));
        if (clazz == null) {
            throw new ProtocolException("Unknown Packet Id!");
        } else {
            return clazz.newInstance();
        }
    }

    @SuppressWarnings("serial")
    public static class ProtocolException extends Exception {

        public ProtocolException() {
        }

        public ProtocolException(String message, Throwable cause) {
            super(message, cause);
        }

        public ProtocolException(String message) {
            super(message);
        }

        public ProtocolException(Throwable cause) {
            super(cause);
        }
    }

    public final int getPacketId() {
        if (idMap.inverse().containsKey(getClass())) {
            return idMap.inverse().get(getClass()).intValue();
        } else {
            throw new RuntimeException("Packet " + getClass().getSimpleName() + " is missing a mapping!");
        }
    }

    public final Packet makePacket() {
        ByteArrayDataOutput out = ByteStreams.newDataOutput();
        out.writeByte(getPacketId());
        write(out);
        return PacketDispatcher.getPacket(CHANNEL, out.toByteArray());
    }

    public abstract void write(ByteArrayDataOutput out);

    public abstract void read(ByteArrayDataInput in) throws ProtocolException;

    public abstract void execute(EntityPlayer player, Side side) throws ProtocolException;
}