Skip to content

Instantly share code, notes, and snippets.

@Lanse505
Created March 10, 2020 19:58
Show Gist options
  • Save Lanse505/ce309a32a026ff0d902d5a02be92619a to your computer and use it in GitHub Desktop.
Save Lanse505/ce309a32a026ff0d902d5a02be92619a to your computer and use it in GitHub Desktop.
public class PortableCraftingInventory extends CraftingInventory {
private final InventoryComponent<?> component;
private final IInventory inventory;
private final NonNullList<ItemStack> stacks;
private final Container eventHandler;
public PortableCraftingInventory(Container eventHandlerIn, InventoryComponent<?> component) {
super(eventHandlerIn, component.getXSize(), component.getYSize());
this.eventHandler = eventHandlerIn;
this.component = component;
this.inventory = new RecipeWrapper(component);
this.stacks = NonNullList.create();
for (int i = 0; i < component.getSlots(); i++) {
stacks.add(component.getStackInSlot(i));
}
}
@Override
public int getSizeInventory() {
return this.component.getSlots();
}
@Override
public boolean isEmpty() {
for (int i = 0; i < this.component.getSlots() ; i++) {
ItemStack stack = getStackInSlot(i);
if (!stack.isEmpty()) {
return false;
}
}
return true;
}
@Override
public ItemStack getStackInSlot(int index) {
return index >= this.inventory.getSizeInventory() ? ItemStack.EMPTY : this.stacks.get(index);
}
@Override
public ItemStack removeStackFromSlot(int index) {
return ItemStackHelper.getAndRemove(this.stacks, index);
}
@Override
public ItemStack decrStackSize(int index, int count) {
ItemStack stack = ItemStackHelper.getAndSplit(this.stacks, index, count);
if (!stack.isEmpty()) {
this.eventHandler.onCraftMatrixChanged(this);
}
return stack;
}
@Override
public void setInventorySlotContents(int index, ItemStack stack) {
this.stacks.set(index, stack);
this.eventHandler.onCraftMatrixChanged(this);
}
@Override
public boolean isUsableByPlayer(PlayerEntity player) {
return true;
}
@Override
public void clear() {
this.stacks.clear();
}
@Override
public int getHeight() {
return this.component.getYSize();
}
@Override
public int getWidth() {
return this.component.getXSize();
}
@Override
public void fillStackedContents(RecipeItemHelper helper) {
for (ItemStack stack : this.stacks) {
helper.accountPlainStack(stack);
}
}
}
public class PortableCraftResultInventory extends CraftResultInventory {
private final InventoryComponent<?> component;
private final NonNullList<ItemStack> result;
private IRecipe<?> recipeUsed;
public PortableCraftResultInventory(InventoryComponent<?> component) {
this.component = component;
this.result = NonNullList.withSize(component.getSlots(), ItemStack.EMPTY);
}
@Override
public int getSizeInventory() {
return component.getSlots();
}
@Override
public boolean isEmpty() {
for (ItemStack stack : this.result) {
if (!stack.isEmpty()) {
return false;
}
}
return true;
}
@Override
public ItemStack getStackInSlot(int index) {
return this.component.getStackInSlot(index);
}
public List<ItemStack> getStacks() {
List<ItemStack> stacks = new ArrayList<>();
for (int i = 0; i < component.getSlots(); i++) {
stacks.add(component.getStackInSlot(i));
}
return stacks;
}
@Override
public ItemStack decrStackSize(int index, int count) {
return ItemStackHelper.getAndRemove(this.getStacks(), index);
}
@Override
public ItemStack removeStackFromSlot(int index) {
return ItemStackHelper.getAndRemove(this.getStacks(), index);
}
@Override
public void setInventorySlotContents(int index, ItemStack stack) {
this.getStacks().set(index, stack);
}
@Override
public boolean isUsableByPlayer(PlayerEntity player) {
return true;
}
@Override
public void clear() {
this.result.clear();
}
@Override
public void setRecipeUsed(IRecipe<?> recipeUsed) {
this.recipeUsed = recipeUsed;
}
@Nullable
@Override
public IRecipe<?> getRecipeUsed() {
return recipeUsed;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment