2016-06-22 23:49:47 -04:00
|
|
|
/*
|
2022-02-28 13:41:23 -08:00
|
|
|
* Minecraft Forge - Forge Development LLC
|
|
|
|
|
* SPDX-License-Identifier: LGPL-2.1-only
|
2016-06-22 23:49:47 -04:00
|
|
|
*/
|
|
|
|
|
|
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);
|
2016-03-24 13:14:39 +03:00
|
|
|
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
|
2021-03-09 13:37:23 -08:00
|
|
|
public boolean mayPlace(@Nonnull ItemStack stack)
|
2016-01-17 16:41:34 +00:00
|
|
|
{
|
2019-03-11 14:41:31 -07:00
|
|
|
if (stack.isEmpty())
|
2016-01-17 16:41:34 +00:00
|
|
|
return false;
|
2019-03-11 14:41:31 -07:00
|
|
|
return itemHandler.isItemValid(index, stack);
|
2016-01-17 16:41:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
2016-11-13 17:09:54 -05:00
|
|
|
@Nonnull
|
2021-03-09 13:37:23 -08:00
|
|
|
public ItemStack getItem()
|
2016-01-17 16:41:34 +00:00
|
|
|
{
|
2016-03-24 13:14:39 +03:00
|
|
|
return this.getItemHandler().getStackInSlot(index);
|
2016-01-17 16:41:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Override if your IItemHandler does not implement IItemHandlerModifiable
|
|
|
|
|
@Override
|
2021-03-09 13:37:23 -08:00
|
|
|
public void set(@Nonnull ItemStack stack)
|
2016-01-17 16:41:34 +00:00
|
|
|
{
|
2016-03-24 13:14:39 +03:00
|
|
|
((IItemHandlerModifiable) this.getItemHandler()).setStackInSlot(index, stack);
|
2021-03-09 13:37:23 -08:00
|
|
|
this.setChanged();
|
2016-01-17 16:41:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
2021-03-09 13:37:23 -08:00
|
|
|
public void onQuickCraft(@Nonnull ItemStack oldStackIn, @Nonnull ItemStack newStackIn)
|
2016-01-17 16:41:34 +00:00
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2016-12-05 12:54:08 -08:00
|
|
|
@Override
|
2021-03-09 13:37:23 -08:00
|
|
|
public int getMaxStackSize()
|
2016-12-05 12:54:08 -08:00
|
|
|
{
|
|
|
|
|
return this.itemHandler.getSlotLimit(this.index);
|
|
|
|
|
}
|
|
|
|
|
|
2016-01-17 16:41:34 +00:00
|
|
|
@Override
|
2021-03-09 13:37:23 -08:00
|
|
|
public int getMaxStackSize(@Nonnull ItemStack stack)
|
2016-01-17 16:41:34 +00:00
|
|
|
{
|
|
|
|
|
ItemStack maxAdd = stack.copy();
|
2016-10-24 20:44:56 +01:00
|
|
|
int maxInput = stack.getMaxStackSize();
|
2016-12-21 15:52:30 -08:00
|
|
|
maxAdd.setCount(maxInput);
|
2016-10-24 20:44:56 +01:00
|
|
|
|
|
|
|
|
IItemHandler handler = this.getItemHandler();
|
|
|
|
|
ItemStack currentStack = handler.getStackInSlot(index);
|
|
|
|
|
if (handler instanceof IItemHandlerModifiable) {
|
|
|
|
|
IItemHandlerModifiable handlerModifiable = (IItemHandlerModifiable) handler;
|
|
|
|
|
|
2016-12-21 15:52:30 -08:00
|
|
|
handlerModifiable.setStackInSlot(index, ItemStack.EMPTY);
|
2016-10-24 20:44:56 +01:00
|
|
|
|
|
|
|
|
ItemStack remainder = handlerModifiable.insertItem(index, maxAdd, true);
|
|
|
|
|
|
|
|
|
|
handlerModifiable.setStackInSlot(index, currentStack);
|
|
|
|
|
|
2016-12-21 15:52:30 -08:00
|
|
|
return maxInput - remainder.getCount();
|
2016-10-24 20:44:56 +01:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ItemStack remainder = handler.insertItem(index, maxAdd, true);
|
2016-01-17 16:41:34 +00:00
|
|
|
|
2016-12-21 15:52:30 -08:00
|
|
|
int current = currentStack.getCount();
|
|
|
|
|
int added = maxInput - remainder.getCount();
|
2016-10-24 20:44:56 +01:00
|
|
|
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
|
|
|
{
|
2016-12-21 15:52:30 -08: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
|
2021-03-09 13:37:23 -08:00
|
|
|
public ItemStack remove(int amount)
|
2016-01-17 16:41:34 +00:00
|
|
|
{
|
2016-03-24 13:14:39 +03: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
|
|
|
}*/
|
2016-11-27 09:49:06 +00:00
|
|
|
}
|