mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
204 lines
5.4 KiB
Java
204 lines
5.4 KiB
Java
package com.hbm.tileentity.network;
|
|
|
|
import com.hbm.inventory.container.ContainerCraneRouter;
|
|
import com.hbm.inventory.gui.GUICraneRouter;
|
|
import com.hbm.module.ModulePatternMatcher;
|
|
import com.hbm.tileentity.IControlReceiverFilter;
|
|
import com.hbm.tileentity.IGUIProvider;
|
|
import com.hbm.tileentity.TileEntityMachineBase;
|
|
|
|
import com.hbm.util.BufferUtil;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import io.netty.buffer.ByteBuf;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.inventory.Container;
|
|
import net.minecraft.inventory.IInventory;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.nbt.NBTTagList;
|
|
import net.minecraft.util.Vec3;
|
|
import net.minecraft.world.World;
|
|
|
|
public class TileEntityCraneRouter extends TileEntityMachineBase implements IGUIProvider, IControlReceiverFilter {
|
|
|
|
public ModulePatternMatcher[] patterns = new ModulePatternMatcher[6]; //why did i make six matchers???
|
|
public int[] modes = new int[6];
|
|
public static final int MODE_NONE = 0;
|
|
public static final int MODE_WHITELIST = 1;
|
|
public static final int MODE_BLACKLIST = 2;
|
|
public static final int MODE_WILDCARD = 3;
|
|
|
|
public TileEntityCraneRouter() {
|
|
super(5 * 6);
|
|
|
|
for(int i = 0; i < patterns.length; i++) {
|
|
patterns[i] = new ModulePatternMatcher(5);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String getName() {
|
|
return "container.craneRouter";
|
|
}
|
|
|
|
@Override
|
|
public void updateEntity() {
|
|
|
|
if(!worldObj.isRemote) {
|
|
|
|
this.networkPackNT(15);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void serialize(ByteBuf buf) {
|
|
super.serialize(buf);
|
|
for (ModulePatternMatcher pattern : patterns) {
|
|
pattern.serialize(buf);
|
|
}
|
|
|
|
BufferUtil.writeIntArray(buf, this.modes);
|
|
}
|
|
|
|
@Override
|
|
public void deserialize(ByteBuf buf) {
|
|
super.deserialize(buf);
|
|
for (ModulePatternMatcher pattern : patterns) {
|
|
pattern.deserialize(buf);
|
|
}
|
|
|
|
this.modes = BufferUtil.readIntArray(buf);
|
|
}
|
|
|
|
@Override
|
|
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
|
return new ContainerCraneRouter(player.inventory, this);
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
|
return new GUICraneRouter(player.inventory, this);
|
|
}
|
|
|
|
@Override
|
|
public void nextMode(int index) {
|
|
|
|
int matcher = index / 5;
|
|
int mIndex = index % 5;
|
|
|
|
this.patterns[matcher].nextMode(worldObj, slots[index], mIndex);
|
|
}
|
|
|
|
public void initPattern(ItemStack stack, int index) {
|
|
|
|
int matcher = index / 5;
|
|
int mIndex = index % 5;
|
|
|
|
this.patterns[matcher].initPatternSmart(worldObj, stack, mIndex);
|
|
}
|
|
|
|
@Override
|
|
public void readFromNBT(NBTTagCompound nbt) {
|
|
super.readFromNBT(nbt);
|
|
|
|
for(int i = 0; i < patterns.length; i++) {
|
|
NBTTagCompound compound = nbt.getCompoundTag("pattern" + i);
|
|
patterns[i].readFromNBT(compound);
|
|
}
|
|
this.modes = nbt.getIntArray("modes");
|
|
}
|
|
|
|
@Override
|
|
public void writeToNBT(NBTTagCompound nbt) {
|
|
super.writeToNBT(nbt);
|
|
|
|
for(int i = 0; i < patterns.length; i++) {
|
|
NBTTagCompound compound = new NBTTagCompound();
|
|
patterns[i].writeToNBT(compound);
|
|
nbt.setTag("pattern" + i, compound);
|
|
}
|
|
nbt.setIntArray("modes", this.modes);
|
|
}
|
|
|
|
@Override
|
|
public boolean hasPermission(EntityPlayer player) {
|
|
return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20;
|
|
}
|
|
|
|
@Override
|
|
public int[] getFilterSlots() {
|
|
return new int[]{0, slots.length};
|
|
}
|
|
|
|
@Override
|
|
public void receiveControl(NBTTagCompound data) {
|
|
if(data.hasKey("toggle")) {
|
|
int i = data.getInteger("toggle");
|
|
modes[i]++;
|
|
if (modes[i] > 3)
|
|
modes[i] = 0;
|
|
}
|
|
if(data.hasKey("slot")){
|
|
setFilterContents(data);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public NBTTagCompound getSettings(World world, int x, int y, int z) {
|
|
IInventory inv = (IInventory) this;
|
|
NBTTagCompound nbt = new NBTTagCompound();
|
|
NBTTagList tags = new NBTTagList();
|
|
|
|
int count = 0;
|
|
for (int i = getFilterSlots()[0]; i < getFilterSlots()[1]; i++) {
|
|
NBTTagCompound slotNBT = new NBTTagCompound();
|
|
if (inv.getStackInSlot(i) != null) {
|
|
slotNBT.setByte("slot", (byte) count);
|
|
inv.getStackInSlot(i).writeToNBT(slotNBT);
|
|
tags.appendTag(slotNBT);
|
|
}
|
|
count++;
|
|
}
|
|
|
|
nbt.setTag("items", tags);
|
|
nbt.setIntArray("modes", modes);
|
|
|
|
return nbt;
|
|
}
|
|
|
|
@Override
|
|
public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) {
|
|
|
|
NBTTagList items = nbt.getTagList("items", 10);
|
|
int listSize = items.tagCount();
|
|
|
|
if(listSize > 0 && nbt.hasKey("modes")) {
|
|
for (int i = 0; i < listSize; i++) {
|
|
NBTTagCompound slotNBT = items.getCompoundTagAt(i);
|
|
byte slot = slotNBT.getByte("slot");
|
|
ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT);
|
|
|
|
if (loadedStack != null && slot > index * 5 && slot < Math.min(index * 5 + 5, 30)) {
|
|
this.setInventorySlotContents(slot, ItemStack.loadItemStackFromNBT(slotNBT));
|
|
nextMode(slot);
|
|
this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this);
|
|
}
|
|
}
|
|
modes = nbt.getIntArray("modes");
|
|
} else {
|
|
IControlReceiverFilter.super.pasteSettings(nbt, index, world, player, x, y, z);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String[] infoForDisplay(World world, int x, int y, int z) {
|
|
String[] options = new String[patterns.length];
|
|
for (int i = 0; i < options.length; i++) {
|
|
options[i] = "copytool.pattern" + i;
|
|
}
|
|
return options;
|
|
}
|
|
}
|