Files
MinecraftForge/src/main/java/net/minecraftforge/items/SlotItemHandler.java
T

116 lines
3.2 KiB
Java
Raw Normal View History

/*
* Minecraft Forge - Forge Development LLC
* SPDX-License-Identifier: LGPL-2.1-only
*/
2016-01-17 16:41:34 +00:00
package net.minecraftforge.items;
2021-07-17 00:08:49 -05:00
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.Container;
import net.minecraft.world.SimpleContainer;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.item.ItemStack;
2016-11-13 17:09:54 -05:00
import javax.annotation.Nonnull;
2016-01-17 16:41:34 +00:00
public class SlotItemHandler extends Slot
{
2021-07-17 00:08:49 -05:00
private static Container emptyInventory = new SimpleContainer(0);
private final IItemHandler itemHandler;
2016-01-17 16:41:34 +00:00
private final int index;
public SlotItemHandler(IItemHandler itemHandler, int index, int xPosition, int yPosition)
{
super(emptyInventory, index, xPosition, yPosition);
this.itemHandler = itemHandler;
this.index = index;
}
@Override
public boolean mayPlace(@Nonnull ItemStack stack)
2016-01-17 16:41:34 +00:00
{
if (stack.isEmpty())
2016-01-17 16:41:34 +00:00
return false;
return itemHandler.isItemValid(index, stack);
2016-01-17 16:41:34 +00:00
}
@Override
2016-11-13 17:09:54 -05:00
@Nonnull
public ItemStack getItem()
2016-01-17 16:41:34 +00:00
{
return this.getItemHandler().getStackInSlot(index);
2016-01-17 16:41:34 +00:00
}
// Override if your IItemHandler does not implement IItemHandlerModifiable
@Override
public void set(@Nonnull ItemStack stack)
2016-01-17 16:41:34 +00:00
{
((IItemHandlerModifiable) this.getItemHandler()).setStackInSlot(index, stack);
this.setChanged();
2016-01-17 16:41:34 +00:00
}
@Override
public void onQuickCraft(@Nonnull ItemStack oldStackIn, @Nonnull ItemStack newStackIn)
2016-01-17 16:41:34 +00:00
{
}
@Override
public int getMaxStackSize()
{
return this.itemHandler.getSlotLimit(this.index);
}
2016-01-17 16:41:34 +00:00
@Override
public int getMaxStackSize(@Nonnull ItemStack stack)
2016-01-17 16:41:34 +00:00
{
ItemStack maxAdd = stack.copy();
int maxInput = stack.getMaxStackSize();
maxAdd.setCount(maxInput);
IItemHandler handler = this.getItemHandler();
ItemStack currentStack = handler.getStackInSlot(index);
if (handler instanceof IItemHandlerModifiable) {
IItemHandlerModifiable handlerModifiable = (IItemHandlerModifiable) handler;
handlerModifiable.setStackInSlot(index, ItemStack.EMPTY);
ItemStack remainder = handlerModifiable.insertItem(index, maxAdd, true);
handlerModifiable.setStackInSlot(index, currentStack);
return maxInput - remainder.getCount();
}
else
{
ItemStack remainder = handler.insertItem(index, maxAdd, true);
2016-01-17 16:41:34 +00:00
int current = currentStack.getCount();
int added = maxInput - remainder.getCount();
return current + added;
}
2016-01-17 16:41:34 +00:00
}
@Override
2021-07-17 00:08:49 -05:00
public boolean mayPickup(Player playerIn)
2016-01-17 16:41:34 +00:00
{
return !this.getItemHandler().extractItem(index, 1, true).isEmpty();
2016-01-17 16:41:34 +00:00
}
@Override
2016-11-13 17:09:54 -05:00
@Nonnull
public ItemStack remove(int amount)
2016-01-17 16:41:34 +00:00
{
return this.getItemHandler().extractItem(index, amount, false);
}
public IItemHandler getItemHandler()
{
return itemHandler;
2016-01-17 16:41:34 +00:00
}
2018-09-14 12:30:56 -04:00
/* TODO Slot patches
2016-06-04 03:26:51 +03:00
@Override
public boolean isSameInventory(Slot other)
{
return other instanceof SlotItemHandler && ((SlotItemHandler) other).getItemHandler() == this.itemHandler;
2018-09-14 12:30:56 -04:00
}*/
}