buildcraft.core.lib.network.command.PacketCommand.java Source code

Java tutorial

Introduction

Here is the source code for buildcraft.core.lib.network.command.PacketCommand.java

Source

/**
 * Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team
 * http://www.mod-buildcraft.com
 * <p/>
 * BuildCraft is distributed under the terms of the Minecraft Mod Public
 * License 1.0, or MMPL. Please check the contents of the license located in
 * http://www.mod-buildcraft.com/MMPL-1.0.txt
 */
package buildcraft.core.lib.network.command;

import java.util.ArrayList;

import io.netty.buffer.ByteBuf;

import net.minecraft.entity.player.EntityPlayer;

import cpw.mods.fml.common.FMLCommonHandler;

import buildcraft.core.lib.network.Packet;
import buildcraft.core.lib.utils.NetworkUtils;
import buildcraft.core.network.PacketIds;

public class PacketCommand extends Packet {
    public static final ArrayList<CommandTarget> targets;
    public ByteBuf stream;
    public String command;
    public Object target;
    public CommandTarget handler;
    private CommandWriter writer;

    static {
        targets = new ArrayList<CommandTarget>();
        targets.add(new CommandTargetTile());
        targets.add(new CommandTargetEntity());
        targets.add(new CommandTargetContainer());
    }

    public PacketCommand() {
    }

    public PacketCommand(Object target, String command, CommandWriter writer) {
        super();

        this.target = target;
        this.command = command;
        this.writer = writer;

        this.isChunkDataPacket = true;

        // Find the valid handler
        for (CommandTarget c : targets) {
            if (c.getHandledClass().isAssignableFrom(target.getClass())) {
                this.handler = c;
                break;
            }
        }
    }

    public void handle(EntityPlayer player) {
        if (handler != null) {
            ICommandReceiver receiver = handler.handle(player, stream, player.worldObj);
            if (receiver != null) {
                receiver.receiveCommand(command, FMLCommonHandler.instance().getEffectiveSide(), player, stream);
            }
        }
    }

    @Override
    public void writeData(ByteBuf data) {
        NetworkUtils.writeUTF(data, command);
        data.writeByte(targets.indexOf(handler));
        handler.write(data, target);
        if (writer != null) {
            writer.write(data);
        }
    }

    @Override
    public void readData(ByteBuf data) {
        command = NetworkUtils.readUTF(data);
        handler = targets.get(data.readUnsignedByte());
        stream = data; // for further reading
    }

    @Override
    public int getID() {
        return PacketIds.COMMAND;
    }
}