Files
refinedstorage/src/main/java/storagecraft/tile/TileStorage.java
2016-01-31 15:01:15 +01:00

275 lines
5.1 KiB
Java

package storagecraft.tile;
import io.netty.buffer.ByteBuf;
import java.util.List;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import storagecraft.StorageCraft;
import storagecraft.block.BlockStorage;
import storagecraft.block.EnumStorageType;
import storagecraft.inventory.InventorySimple;
import storagecraft.network.MessageStoragePriorityUpdate;
import storagecraft.storage.IStorage;
import storagecraft.storage.IStorageGui;
import storagecraft.storage.IStorageProvider;
import storagecraft.storage.NBTStorage;
import storagecraft.storage.StorageItem;
import storagecraft.util.InventoryUtils;
public class TileStorage extends TileMachine implements IStorageProvider, IStorage, IStorageGui, ICompareSetting, IModeSetting
{
public static final String NBT_STORAGE = "Storage";
public static final String NBT_PRIORITY = "Priority";
public static final String NBT_COMPARE = "Compare";
public static final String NBT_MODE = "Mode";
private InventorySimple inventory = new InventorySimple("storage", 9);
private NBTTagCompound tag = NBTStorage.getBaseNBT();
private int priority = 0;
private int compare = 0;
private int mode = 0;
@SideOnly(Side.CLIENT)
private int stored;
@Override
public int getEnergyUsage()
{
return 1;
}
@Override
public void updateMachine()
{
}
@Override
public void addStorages(List<IStorage> storages)
{
storages.add(this);
}
@Override
public void readFromNBT(NBTTagCompound nbt)
{
super.readFromNBT(nbt);
InventoryUtils.restoreInventory(inventory, nbt);
if (nbt.hasKey(NBT_STORAGE))
{
tag = nbt.getCompoundTag(NBT_STORAGE);
}
if (nbt.hasKey(NBT_PRIORITY))
{
priority = nbt.getInteger(NBT_PRIORITY);
}
if (nbt.hasKey(NBT_COMPARE))
{
compare = nbt.getInteger(NBT_COMPARE);
}
if (nbt.hasKey(NBT_MODE))
{
mode = nbt.getInteger(NBT_MODE);
}
}
@Override
public void writeToNBT(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
InventoryUtils.saveInventory(inventory, nbt);
nbt.setTag(NBT_STORAGE, tag);
nbt.setInteger(NBT_PRIORITY, priority);
nbt.setInteger(NBT_COMPARE, compare);
nbt.setInteger(NBT_MODE, mode);
}
public EnumStorageType getType()
{
return ((EnumStorageType) worldObj.getBlockState(pos).getValue(BlockStorage.TYPE));
}
@Override
public void toBytes(ByteBuf buf)
{
super.toBytes(buf);
buf.writeInt(NBTStorage.getStored(tag));
buf.writeInt(priority);
buf.writeInt(compare);
buf.writeInt(mode);
}
@Override
public void fromBytes(ByteBuf buf)
{
super.fromBytes(buf);
stored = buf.readInt();
priority = buf.readInt();
compare = buf.readInt();
mode = buf.readInt();
}
@Override
public void addItems(List<StorageItem> items)
{
getStorage().addItems(items);
markDirty();
}
@Override
public void push(ItemStack stack)
{
getStorage().push(stack);
markDirty();
}
@Override
public ItemStack take(ItemStack stack, int flags)
{
ItemStack result = getStorage().take(stack, flags);
markDirty();
return result;
}
@Override
public boolean canPush(ItemStack stack)
{
return getStorage().canPush(stack);
}
@Override
public int getCompare()
{
return compare;
}
@Override
public void setCompare(int compare)
{
this.compare = compare;
}
@Override
public boolean isWhitelist()
{
return mode == 0;
}
@Override
public boolean isBlacklist()
{
return mode == 1;
}
@Override
public void setToWhitelist()
{
this.mode = 0;
}
@Override
public void setToBlacklist()
{
this.mode = 1;
}
@Override
public String getName()
{
return "block.storagecraft:storage." + getType().getId() + ".name";
}
@Override
public IInventory getInventory()
{
return inventory;
}
@Override
public IRedstoneModeSetting getRedstoneModeSetting()
{
return this;
}
@Override
public ICompareSetting getCompareSetting()
{
return this;
}
@Override
public IModeSetting getWhitelistBlacklistSetting()
{
return this;
}
@Override
public IPriorityHandler getPriorityHandler()
{
return new IPriorityHandler()
{
@Override
public void onPriorityChanged(int priority)
{
StorageCraft.NETWORK.sendToServer(new MessageStoragePriorityUpdate(pos, priority));
}
};
}
@Override
public NBTStorage getStorage()
{
return new NBTStorage(tag, getCapacity(), priority);
}
@Override
public int getPriority()
{
return priority;
}
public void setPriority(int priority)
{
this.priority = priority;
}
@Override
public int getStored()
{
return stored;
}
public int getStoredScaled(int scale)
{
if (getType() == EnumStorageType.TYPE_CREATIVE)
{
return 0;
}
return (int) ((float) getStored() / (float) getCapacity() * (float) scale);
}
@Override
public int getCapacity()
{
return getType().getCapacity();
}
}