buildcraft.core.list.ContainerListNew.java Source code

Java tutorial

Introduction

Here is the source code for buildcraft.core.list.ContainerListNew.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.list;

import io.netty.buffer.ByteBuf;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;

import cpw.mods.fml.relauncher.Side;

import buildcraft.BuildCraftCore;
import buildcraft.core.ItemList;
import buildcraft.core.lib.gui.BuildCraftContainer;
import buildcraft.core.lib.network.command.CommandWriter;
import buildcraft.core.lib.network.command.ICommandReceiver;
import buildcraft.core.lib.network.command.PacketCommand;
import buildcraft.core.lib.utils.NetworkUtils;

public class ContainerListNew extends BuildCraftContainer implements ICommandReceiver {
    public ListHandlerNew.Line[] lines;
    private EntityPlayer player;

    public ContainerListNew(EntityPlayer iPlayer) {
        super(iPlayer.inventory.getSizeInventory());

        player = iPlayer;

        lines = ListHandlerNew.getLines(player.getCurrentEquippedItem());

        for (int sy = 0; sy < 3; sy++) {
            for (int sx = 0; sx < 9; sx++) {
                addSlotToContainer(new Slot(player.inventory, sx + sy * 9 + 9, 8 + sx * 18, 103 + sy * 18));
            }
        }

        for (int sx = 0; sx < 9; sx++) {
            addSlotToContainer(new Slot(player.inventory, sx, 8 + sx * 18, 161));
        }
    }

    @Override
    public boolean canInteractWith(EntityPlayer player) {
        return true;
    }

    public void setStack(final int lineIndex, final int slotIndex, final ItemStack stack) {
        lines[lineIndex].setStack(slotIndex, stack);
        ListHandlerNew.saveLines(player.getCurrentEquippedItem(), lines);

        if (player.worldObj.isRemote) {
            BuildCraftCore.instance.sendToServer(new PacketCommand(this, "setStack", new CommandWriter() {
                public void write(ByteBuf data) {
                    data.writeByte(lineIndex);
                    data.writeByte(slotIndex);
                    NetworkUtils.writeStack(data, stack);
                }
            }));
        }
    }

    public void switchButton(final int lineIndex, final int button) {
        lines[lineIndex].toggleOption(button);
        ListHandlerNew.saveLines(player.getCurrentEquippedItem(), lines);

        if (player.worldObj.isRemote) {
            BuildCraftCore.instance.sendToServer(new PacketCommand(this, "switchButton", new CommandWriter() {
                public void write(ByteBuf data) {
                    data.writeByte(lineIndex);
                    data.writeByte(button);
                }
            }));
        }
    }

    public void setLabel(final String text) {
        ItemList.saveLabel(player.getCurrentEquippedItem(), text);

        if (player.worldObj.isRemote) {
            BuildCraftCore.instance.sendToServer(new PacketCommand(this, "setLabel", new CommandWriter() {
                public void write(ByteBuf data) {
                    NetworkUtils.writeUTF(data, text);
                }
            }));
        }
    }

    @Override
    public void receiveCommand(String command, Side side, Object sender, ByteBuf stream) {
        if (side.isServer()) {
            if ("setLabel".equals(command)) {
                setLabel(NetworkUtils.readUTF(stream));
            } else if ("switchButton".equals(command)) {
                switchButton(stream.readUnsignedByte(), stream.readUnsignedByte());
            } else if ("setStack".equals(command)) {
                setStack(stream.readUnsignedByte(), stream.readUnsignedByte(), NetworkUtils.readStack(stream));
            }
        }
    }
}