mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 16:27:47 +00:00
Update according to suggestions
This commit is contained in:
1 parent
30db41be9a
commit
dabb17f869
7 files changed
+100
-152
No files matched your search
@@ -4,29 +4,14 @@ import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.EntityEquipmentSlot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class PlayerArmorInvWrapper extends InvWrapper
|
||||
public class PlayerArmorInvWrapper extends RangedWrapper
|
||||
{
|
||||
public final InventoryPlayer inventoryPlayer;
|
||||
private final int offset;
|
||||
|
||||
public PlayerArmorInvWrapper(InventoryPlayer inv)
|
||||
{
|
||||
super(inv);
|
||||
|
||||
super(new InvWrapper(inv), inv.mainInventory.length, inv.mainInventory.length + inv.armorInventory.length);
|
||||
inventoryPlayer = inv;
|
||||
offset = inventoryPlayer.mainInventory.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSlots()
|
||||
{
|
||||
return inventoryPlayer.armorInventory.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlot(int slot)
|
||||
{
|
||||
return super.getStackInSlot(slot + offset);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -44,20 +29,8 @@ public class PlayerArmorInvWrapper extends InvWrapper
|
||||
// check if it's valid for the armor slot
|
||||
if (slot < 4 && stack != null && stack.getItem().isValidArmor(stack, equ, inventoryPlayer.player))
|
||||
{
|
||||
return super.insertItem(slot + offset, stack, simulate);
|
||||
return super.insertItem(slot, stack, simulate);
|
||||
}
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStackInSlot(int slot, ItemStack stack)
|
||||
{
|
||||
super.setStackInSlot(slot + offset, stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack extractItem(int slot, int amount, boolean simulate)
|
||||
{
|
||||
return super.extractItem(slot + offset, amount, simulate);
|
||||
}
|
||||
}
|
||||
@@ -8,54 +8,19 @@ import net.minecraft.item.ItemStack;
|
||||
* Exposes the player inventory WITHOUT the armor inventory as IItemHandler.
|
||||
* Also takes core of inserting/extracting having the same logic as picking up items.
|
||||
*/
|
||||
public class PlayerMainInvWrapper extends InvWrapper
|
||||
public class PlayerMainInvWrapper extends RangedWrapper
|
||||
{
|
||||
public final InventoryPlayer inventoryPlayer;
|
||||
|
||||
public PlayerMainInvWrapper(InventoryPlayer inv)
|
||||
{
|
||||
super(inv);
|
||||
|
||||
super(new InvWrapper(inv), 0, inv.mainInventory.length);
|
||||
inventoryPlayer = inv;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSlots()
|
||||
{
|
||||
return inventoryPlayer.mainInventory.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStackInSlot(int slot, ItemStack stack)
|
||||
{
|
||||
// prevent setting of armor and offhand
|
||||
if (slot > getSlots())
|
||||
{
|
||||
return;
|
||||
}
|
||||
super.setStackInSlot(slot, stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlot(int slot)
|
||||
{
|
||||
// prevent getting of armor and offhand
|
||||
if (slot > getSlots())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return super.getStackInSlot(slot);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate)
|
||||
{
|
||||
// prevent inserting into armor and offhand
|
||||
if (slot > getSlots())
|
||||
{
|
||||
return stack;
|
||||
}
|
||||
|
||||
ItemStack rest = super.insertItem(slot, stack, simulate);
|
||||
if (rest == null || rest.stackSize != stack.stackSize)
|
||||
{
|
||||
@@ -74,15 +39,4 @@ public class PlayerMainInvWrapper extends InvWrapper
|
||||
}
|
||||
return rest;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack extractItem(int slot, int amount, boolean simulate)
|
||||
{
|
||||
// prevent extraction from armor and offhand
|
||||
if (slot > getSlots())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return super.extractItem(slot, amount, simulate);
|
||||
}
|
||||
}
|
||||
@@ -3,47 +3,11 @@ package net.minecraftforge.items.wrapper;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class PlayerOffhandInvWrapper extends InvWrapper
|
||||
public class PlayerOffhandInvWrapper extends RangedWrapper
|
||||
{
|
||||
public final InventoryPlayer inventoryPlayer;
|
||||
private final int offset;
|
||||
|
||||
public PlayerOffhandInvWrapper(InventoryPlayer inv)
|
||||
{
|
||||
super(inv);
|
||||
|
||||
inventoryPlayer = inv;
|
||||
offset = inventoryPlayer.mainInventory.length + inventoryPlayer.armorInventory.length;
|
||||
super(new InvWrapper(inv), inv.mainInventory.length + inv.armorInventory.length,
|
||||
inv.mainInventory.length + inv.armorInventory.length + inv.offHandInventory.length);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSlots()
|
||||
{
|
||||
return inventoryPlayer.offHandInventory.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlot(int slot)
|
||||
{
|
||||
return super.getStackInSlot(slot + offset);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate)
|
||||
{
|
||||
return super.insertItem(slot + offset, stack, simulate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStackInSlot(int slot, ItemStack stack)
|
||||
{
|
||||
super.setStackInSlot(slot + offset, stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack extractItem(int slot, int amount, boolean simulate)
|
||||
{
|
||||
return super.extractItem(slot + offset, amount, simulate);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package net.minecraftforge.items.wrapper;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
|
||||
/**
|
||||
* A wrapper that composes another IItemHandlerModifiable, exposing only a range of the composed slots.
|
||||
* Shifting of slot indices is handled automatically for you.
|
||||
*/
|
||||
public class RangedWrapper implements IItemHandlerModifiable {
|
||||
|
||||
private final IItemHandlerModifiable compose;
|
||||
private final int minSlot;
|
||||
private final int maxSlot;
|
||||
|
||||
public RangedWrapper(IItemHandlerModifiable compose, int minSlot, int maxSlotExclusive)
|
||||
{
|
||||
Preconditions.checkArgument(maxSlotExclusive > minSlot, "Max slot must be greater than min slot");
|
||||
this.compose = compose;
|
||||
this.minSlot = minSlot;
|
||||
this.maxSlot = maxSlotExclusive;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSlots()
|
||||
{
|
||||
return maxSlot - minSlot;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackInSlot(int slot)
|
||||
{
|
||||
if (checkSlot(slot))
|
||||
{
|
||||
return compose.getStackInSlot(slot + minSlot);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate)
|
||||
{
|
||||
if (checkSlot(slot))
|
||||
{
|
||||
return compose.insertItem(slot + minSlot, stack, simulate);
|
||||
}
|
||||
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack extractItem(int slot, int amount, boolean simulate)
|
||||
{
|
||||
if (checkSlot(slot))
|
||||
{
|
||||
return compose.extractItem(slot + minSlot, amount, simulate);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStackInSlot(int slot, ItemStack stack)
|
||||
{
|
||||
if (checkSlot(slot))
|
||||
{
|
||||
compose.setStackInSlot(slot + minSlot, stack);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkSlot(int localSlot)
|
||||
{
|
||||
return localSlot + minSlot < maxSlot;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user