85 lines
2.0 KiB
Java
85 lines
2.0 KiB
Java
package com.thebrokenrail.twine.util;
|
|
|
|
import net.minecraft.entity.player.PlayerEntity;
|
|
import net.minecraft.inventory.Inventories;
|
|
import net.minecraft.inventory.Inventory;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.util.collection.DefaultedList;
|
|
|
|
public abstract class ItemInventory implements Inventory {
|
|
private final int size;
|
|
private final ItemStack stack;
|
|
private final DefaultedList<ItemStack> inv;
|
|
|
|
public ItemInventory(int size, ItemStack stack) {
|
|
this.size = size;
|
|
this.stack = stack;
|
|
inv = load();
|
|
}
|
|
|
|
protected ItemStack getHolder() {
|
|
return stack;
|
|
}
|
|
|
|
private DefaultedList<ItemStack> load() {
|
|
DefaultedList<ItemStack> list = DefaultedList.ofSize(size, ItemStack.EMPTY);
|
|
Inventories.fromTag(stack.getOrCreateTag().getCompound("BlockEntityTag"), list);
|
|
return list;
|
|
}
|
|
|
|
private void save(DefaultedList<ItemStack> list) {
|
|
Inventories.toTag(stack.getOrCreateTag().getCompound("BlockEntityTag"), list);
|
|
}
|
|
|
|
@Override
|
|
public int size() {
|
|
return size;
|
|
}
|
|
|
|
@Override
|
|
public boolean isEmpty() {
|
|
for (ItemStack item : inv) {
|
|
if (item != ItemStack.EMPTY) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public ItemStack getStack(int slot) {
|
|
return inv.get(slot);
|
|
}
|
|
|
|
@Override
|
|
public ItemStack removeStack(int slot, int amount) {
|
|
return inv.get(slot).split(amount);
|
|
}
|
|
|
|
@Override
|
|
public ItemStack removeStack(int slot) {
|
|
ItemStack item = inv.get(slot);
|
|
return item.split(item.getCount());
|
|
}
|
|
|
|
@Override
|
|
public void setStack(int slot, ItemStack stack) {
|
|
inv.set(slot, stack);
|
|
}
|
|
|
|
@Override
|
|
public void markDirty() {
|
|
save(inv);
|
|
}
|
|
|
|
@Override
|
|
public abstract boolean canPlayerUse(PlayerEntity player);
|
|
|
|
@Override
|
|
public void clear() {
|
|
for (int i = 0; i < size; i++) {
|
|
inv.set(i, ItemStack.EMPTY);
|
|
}
|
|
}
|
|
}
|