This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
Twine/src/main/java/com/thebrokenrail/twine/util/inventory/ItemInventory.java

87 lines
2.0 KiB
Java

package com.thebrokenrail.twine.util.inventory;
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 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 boolean canPlayerUse(PlayerEntity player) {
return true;
}
@Override
public void clear() {
for (int i = 0; i < size; i++) {
inv.set(i, ItemStack.EMPTY);
}
}
}