use of org.spongepowered.common.item.inventory.lens.impl.minecraft.PlayerInventoryLens in project SpongeCommon by SpongePowered.
the class ContainerUtil method generateAdapterLens.
@Nullable
private static Lens<IInventory, ItemStack> generateAdapterLens(SlotProvider<IInventory, ItemStack> slots, int index, CraftingInventoryData crafting, List<Slot> slotList, @Nullable IInventory subInventory) {
if (!(subInventory instanceof InventoryAdapter)) {
return null;
}
Lens<IInventory, ItemStack> adapterLens = ((InventoryAdapter) subInventory).getRootLens();
if (adapterLens == null) {
return null;
}
if (subInventory.getSizeInventory() == 0) {
return new DefaultEmptyLens<>(((InventoryAdapter) subInventory));
}
if (adapterLens instanceof PlayerInventoryLens) {
if (slotList.size() == 36) {
return new DelegatingLens(index, new MainPlayerInventoryLensImpl(index, slots, true), slots);
}
return null;
}
// For Crafting Result we need the Slot to get Filter logic
if (subInventory instanceof InventoryCraftResult) {
Slot slot = slotList.get(0);
adapterLens = new CraftingOutputSlotLensImpl(index, item -> slot.isItemValid(((ItemStack) item)), itemType -> (slot.isItemValid((ItemStack) org.spongepowered.api.item.inventory.ItemStack.of(itemType, 1))));
crafting.out = index;
if (slot instanceof SlotCrafting) {
if (crafting.base == null) {
// In case we do not find the InventoryCrafting later assume it is directly after the SlotCrafting
// e.g. for IC2 ContainerIndustrialWorkbench
crafting.base = index + 1;
crafting.grid = ((SlotCrafting) slot).craftMatrix;
}
}
}
if (subInventory instanceof InventoryCrafting) {
crafting.base = index;
crafting.grid = ((InventoryCrafting) subInventory);
}
return new DelegatingLens(index, adapterLens, slots);
}
use of org.spongepowered.common.item.inventory.lens.impl.minecraft.PlayerInventoryLens in project SpongeCommon by SpongePowered.
the class MixinInventoryPlayer method onConstructed.
@Inject(method = "<init>*", at = @At("RETURN"), remap = false)
private void onConstructed(EntityPlayer playerIn, CallbackInfo ci) {
// Find offhand slot
for (NonNullList<ItemStack> inventory : this.allInventories) {
if (inventory == this.offHandInventory) {
break;
}
this.offhandIndex += inventory.size();
}
// Set Carrier if we got a real Player
if (playerIn instanceof EntityPlayerMP) {
this.carrier = (Player) playerIn;
this.inventory = new IInventoryFabric((IInventory) this);
Class clazz = this.getClass();
if (clazz == InventoryPlayer.class) {
// Build Player Lens
// We only care about Server inventories
this.slots = new SlotCollection.Builder().add(this.mainInventory.size()).add(this.offHandInventory.size()).add(EquipmentSlotAdapter.class, index -> new EquipmentSlotLensImpl(index, i -> true, t -> true, e -> e == EquipmentTypes.BOOTS)).add(EquipmentSlotAdapter.class, index -> new EquipmentSlotLensImpl(index, i -> true, t -> true, e -> e == EquipmentTypes.LEGGINGS)).add(EquipmentSlotAdapter.class, index -> new EquipmentSlotLensImpl(index, i -> true, t -> true, e -> e == EquipmentTypes.CHESTPLATE)).add(EquipmentSlotAdapter.class, index -> new EquipmentSlotLensImpl(index, i -> true, t -> true, e -> e == EquipmentTypes.HEADWEAR)).add(this.armorInventory.size() - 4, EquipmentSlotAdapter.class).add(this.getSizeInventory() - this.mainInventory.size() - this.offHandInventory.size() - this.armorInventory.size()).build();
this.lens = new PlayerInventoryLens(this, this.slots);
} else if (this.getSizeInventory() != 0) {
// Fallback OrderedLens when not 0 sized inventory
this.slots = new SlotCollection.Builder().add(this.getSizeInventory()).build();
this.lens = new OrderedInventoryLensImpl(0, this.getSizeInventory(), 1, slots);
}
}
}
use of org.spongepowered.common.item.inventory.lens.impl.minecraft.PlayerInventoryLens in project SpongeCommon by SpongePowered.
the class MixinSpongeUserInventory method onConstructed.
@Inject(method = "<init>*", at = @At("RETURN"), remap = false)
private void onConstructed(SpongeUser playerIn, CallbackInfo ci) {
// We only care about Server inventories
this.inventory = new IInventoryFabric((IInventory) this);
this.slots = new SlotCollection.Builder().add(this.mainInventory.size()).add(this.offHandInventory.size()).add(this.armorInventory.size(), EquipmentSlotAdapter.class).add(this.getSizeInventory() - this.mainInventory.size() - this.offHandInventory.size() - this.armorInventory.size()).build();
this.carrier = ((User) playerIn);
this.lens = new PlayerInventoryLens(this, this.slots);
}
Aggregations