Search in sources :

Example 1 with SlotLensImpl

use of org.spongepowered.common.item.inventory.lens.impl.slots.SlotLensImpl in project SpongeCommon by SpongePowered.

the class InventoryUtil method toSpongeInventory.

public static CraftingGridInventory toSpongeInventory(InventoryCrafting inv) {
    IInventoryFabric fabric = new IInventoryFabric(inv);
    CraftingGridInventoryLens lens = new CraftingGridInventoryLensImpl(0, inv.getWidth(), inv.getHeight(), inv.getWidth(), SlotLensImpl::new);
    return new CraftingGridInventoryAdapter(fabric, lens);
}
Also used : CraftingGridInventoryLens(org.spongepowered.common.item.inventory.lens.comp.CraftingGridInventoryLens) IInventoryFabric(org.spongepowered.common.item.inventory.lens.impl.fabric.IInventoryFabric) SlotLensImpl(org.spongepowered.common.item.inventory.lens.impl.slots.SlotLensImpl) CraftingGridInventoryAdapter(org.spongepowered.common.item.inventory.adapter.impl.comp.CraftingGridInventoryAdapter) CraftingGridInventoryLensImpl(org.spongepowered.common.item.inventory.lens.impl.comp.CraftingGridInventoryLensImpl)

Example 2 with SlotLensImpl

use of org.spongepowered.common.item.inventory.lens.impl.slots.SlotLensImpl in project SpongeCommon by SpongePowered.

the class MixinSlot method onConstructed.

@Inject(method = "<init>", at = @At("RETURN"))
public void onConstructed(CallbackInfo ci) {
    this.fabric = MinecraftFabric.of(this);
    this.slots = new SlotCollection.Builder().add(1).build();
    this.lens = new SlotLensImpl(0);
}
Also used : SlotCollection(org.spongepowered.common.item.inventory.lens.impl.collections.SlotCollection) SlotLensImpl(org.spongepowered.common.item.inventory.lens.impl.slots.SlotLensImpl) Inject(org.spongepowered.asm.mixin.injection.Inject)

Example 3 with SlotLensImpl

use of org.spongepowered.common.item.inventory.lens.impl.slots.SlotLensImpl in project SpongeCommon by SpongePowered.

the class LargeChestInventoryLens method initLargeChest.

private void initLargeChest(SlotProvider<IInventory, ItemStack> slots) {
    // add grids
    int base = 0;
    this.addSpanningChild(new GridInventoryLensImpl(base, 9, this.upperChest / 9, 9, (Class) TileEntityChest.class, slots));
    base += this.upperChest;
    this.addSpanningChild(new GridInventoryLensImpl(base, 9, this.lowerChest / 9, 9, (Class) TileEntityChest.class, slots));
    base += this.lowerChest;
    this.addChild(new GridInventoryLensImpl(0, 9, (this.upperChest + this.lowerChest) / 9, 9, slots));
    // add slot childs for grids
    for (int ord = 0, slot = this.base; ord < base; ord++, slot++) {
        this.addChild(slots.getSlot(slot), new SlotIndex(ord));
    }
    // handle possible extension by mods:
    for (int i = base; i < this.slotCount(); i++) {
        this.addSpanningChild(new SlotLensImpl(i), SlotIndex.of(i));
    }
}
Also used : SlotLensImpl(org.spongepowered.common.item.inventory.lens.impl.slots.SlotLensImpl) SlotIndex(org.spongepowered.api.item.inventory.property.SlotIndex) GridInventoryLensImpl(org.spongepowered.common.item.inventory.lens.impl.comp.GridInventoryLensImpl)

Example 4 with SlotLensImpl

use of org.spongepowered.common.item.inventory.lens.impl.slots.SlotLensImpl in project SpongeCommon by SpongePowered.

the class ContainerUtil method generateLens.

/**
 * Generates a fallback lens for given Container
 *
 * @param container The Container to generate a lens for
 * @param slots The slots of the Container
 * @return The generated fallback lens
 */
@SuppressWarnings({ "unchecked", "rawtypes" })
private static Lens<IInventory, ItemStack> generateLens(net.minecraft.inventory.Container container, SlotProvider<IInventory, ItemStack> slots) {
    // Get all inventories viewed in the Container & count slots & retain order
    Map<Optional<IInventory>, List<Slot>> viewed = container.inventorySlots.stream().collect(Collectors.groupingBy(i -> Optional.<IInventory>ofNullable(i.inventory), LinkedHashMap::new, Collectors.toList()));
    // Count the index
    int index = 0;
    CraftingInventoryData crafting = new CraftingInventoryData();
    List<Lens<IInventory, ItemStack>> lenses = new ArrayList<>();
    for (Map.Entry<Optional<IInventory>, List<Slot>> entry : viewed.entrySet()) {
        List<Slot> slotList = entry.getValue();
        int slotCount = slotList.size();
        IInventory subInventory = entry.getKey().orElse(null);
        // Generate Lens based on existing InventoryAdapter
        Lens<IInventory, ItemStack> lens = generateAdapterLens(slots, index, crafting, slotList, subInventory);
        // Check if sub-inventory is LensProvider
        if (lens == null && subInventory instanceof LensProvider) {
            Fabric<IInventory> keyFabric = MinecraftFabric.of(subInventory);
            lens = ((LensProvider) subInventory).rootLens(keyFabric, new VanillaAdapter(keyFabric, container));
        }
        // Unknown Inventory or Inventory size <> Lens size
        if (lens == null || lens.slotCount() != slotCount) {
            if (subInventory instanceof InventoryCraftResult) {
                // InventoryCraftResult is a Slot
                Slot slot = slotList.get(0);
                lens = new CraftingOutputSlotLensImpl(index, item -> slot.isItemValid(((ItemStack) item)), itemType -> (slot.isItemValid((ItemStack) org.spongepowered.api.item.inventory.ItemStack.of(itemType, 1))));
            } else if (subInventory instanceof InventoryCrafting) {
                // InventoryCrafting has width and height and is Input
                InventoryCrafting craftGrid = (InventoryCrafting) subInventory;
                lens = new GridInventoryLensImpl(index, craftGrid.getWidth(), craftGrid.getHeight(), craftGrid.getWidth(), InputSlot.class, slots);
            } else if (slotCount == 1) {
                // Unknown - A single Slot
                lens = new SlotLensImpl(index);
            } else if (subInventory instanceof InventoryBasic && subInventory.getClass().isAnonymousClass()) {
                // Anonymous InventoryBasic -> Check for Vanilla Containers:
                switch(subInventory.getName()) {
                    // Container InputSlots
                    case "Enchant":
                    case // Container InputSlots
                    "Repair":
                        lens = new OrderedInventoryLensImpl(index, slotCount, 1, InputSlot.class, slots);
                        break;
                    default:
                        // Unknown
                        lens = new OrderedInventoryLensImpl(index, slotCount, 1, slots);
                }
            } else {
                // Unknown - fallback to OrderedInventory
                lens = new OrderedInventoryLensImpl(index, slotCount, 1, slots);
            }
        }
        lenses.add(lens);
        index += slotCount;
    }
    List<Lens<IInventory, ItemStack>> additional = new ArrayList<>();
    try {
        if (crafting.out != null && crafting.base != null && crafting.grid != null) {
            additional.add(new CraftingInventoryLensImpl(crafting.out, crafting.base, crafting.grid.getWidth(), crafting.grid.getHeight(), slots));
        }
    } catch (Exception e) {
        SpongeImpl.getLogger().error("Error while creating CraftingInventoryLensImpl for " + container.getClass().getName(), e);
    }
    // Lens containing/delegating to other lenses
    return new ContainerLens((InventoryAdapter<IInventory, ItemStack>) container, slots, lenses, additional);
}
Also used : MainPlayerInventoryLensImpl(org.spongepowered.common.item.inventory.lens.impl.comp.MainPlayerInventoryLensImpl) MinecraftFabric(org.spongepowered.common.item.inventory.lens.impl.MinecraftFabric) LargeChestInventoryLens(org.spongepowered.common.item.inventory.lens.impl.minecraft.LargeChestInventoryLens) Random(java.util.Random) ContainerChest(net.minecraft.inventory.ContainerChest) ContainerWorkbench(net.minecraft.inventory.ContainerWorkbench) EntityPlayerMP(net.minecraft.entity.player.EntityPlayerMP) DelegatingLens(org.spongepowered.common.item.inventory.lens.impl.DelegatingLens) PhaseData(org.spongepowered.common.event.tracking.PhaseData) CustomContainer(org.spongepowered.common.item.inventory.custom.CustomContainer) BlockCarrier(org.spongepowered.api.item.inventory.BlockCarrier) Map(java.util.Map) InventoryArchetypes(org.spongepowered.api.item.inventory.InventoryArchetypes) AbstractChestHorse(net.minecraft.entity.passive.AbstractChestHorse) EntityItem(net.minecraft.entity.item.EntityItem) IPhaseState(org.spongepowered.common.event.tracking.IPhaseState) CraftingOutputSlotLensImpl(org.spongepowered.common.item.inventory.lens.impl.slots.CraftingOutputSlotLensImpl) ContainerBeacon(net.minecraft.inventory.ContainerBeacon) Location(org.spongepowered.api.world.Location) InventoryAdapter(org.spongepowered.common.item.inventory.adapter.InventoryAdapter) InventoryHelper(net.minecraft.inventory.InventoryHelper) Collection(java.util.Collection) GridInventoryLens(org.spongepowered.common.item.inventory.lens.comp.GridInventoryLens) Carrier(org.spongepowered.api.item.inventory.Carrier) Collectors(java.util.stream.Collectors) SlotCrafting(net.minecraft.inventory.SlotCrafting) InventoryArchetype(org.spongepowered.api.item.inventory.InventoryArchetype) InventoryBasic(net.minecraft.inventory.InventoryBasic) BrewingStandInventoryLens(org.spongepowered.common.item.inventory.lens.impl.minecraft.BrewingStandInventoryLens) List(java.util.List) ContainerLens(org.spongepowered.common.item.inventory.lens.impl.minecraft.container.ContainerLens) PhaseContext(org.spongepowered.common.event.tracking.PhaseContext) CraftingOutputAdapter(org.spongepowered.common.item.inventory.adapter.impl.slots.CraftingOutputAdapter) EntityPlayer(net.minecraft.entity.player.EntityPlayer) ContainerDispenser(net.minecraft.inventory.ContainerDispenser) CarriedInventory(org.spongepowered.api.item.inventory.type.CarriedInventory) Lens(org.spongepowered.common.item.inventory.lens.Lens) Optional(java.util.Optional) MixinInventoryHelper(org.spongepowered.common.mixin.core.inventory.MixinInventoryHelper) LensProvider(org.spongepowered.common.item.inventory.lens.LensProvider) ContainerRepair(net.minecraft.inventory.ContainerRepair) PlayerInventoryLens(org.spongepowered.common.item.inventory.lens.impl.minecraft.PlayerInventoryLens) ContainerMerchant(net.minecraft.inventory.ContainerMerchant) SpongeImpl(org.spongepowered.common.SpongeImpl) GridInventoryLensImpl(org.spongepowered.common.item.inventory.lens.impl.comp.GridInventoryLensImpl) AbstractHorse(net.minecraft.entity.passive.AbstractHorse) VanillaAdapter(org.spongepowered.common.item.inventory.adapter.impl.VanillaAdapter) SpongeImplHooks(org.spongepowered.common.SpongeImplHooks) ContainerHopper(net.minecraft.inventory.ContainerHopper) InventoryCraftResult(net.minecraft.inventory.InventoryCraftResult) Multimap(com.google.common.collect.Multimap) TileEntityChest(net.minecraft.tileentity.TileEntityChest) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) ItemStack(net.minecraft.item.ItemStack) InputSlot(org.spongepowered.api.item.inventory.slot.InputSlot) Inventory2DLensImpl(org.spongepowered.common.item.inventory.lens.impl.comp.Inventory2DLensImpl) ContainerEnchantment(net.minecraft.inventory.ContainerEnchantment) DefaultEmptyLens(org.spongepowered.common.item.inventory.lens.impl.DefaultEmptyLens) InventoryLargeChest(net.minecraft.inventory.InventoryLargeChest) ContainerFurnace(net.minecraft.inventory.ContainerFurnace) IMixinContainer(org.spongepowered.common.interfaces.IMixinContainer) ContainerBrewingStand(net.minecraft.inventory.ContainerBrewingStand) WorldServer(net.minecraft.world.WorldServer) Nullable(javax.annotation.Nullable) FurnaceInventoryLens(org.spongepowered.common.item.inventory.lens.impl.minecraft.FurnaceInventoryLens) Fabric(org.spongepowered.common.item.inventory.lens.Fabric) Inventory2DLens(org.spongepowered.common.item.inventory.lens.comp.Inventory2DLens) SlotProvider(org.spongepowered.common.item.inventory.lens.SlotProvider) ContainerHorseInventory(net.minecraft.inventory.ContainerHorseInventory) World(net.minecraft.world.World) BlockPos(net.minecraft.util.math.BlockPos) IMixinSingleBlockCarrier(org.spongepowered.common.interfaces.IMixinSingleBlockCarrier) PhaseTracker(org.spongepowered.common.event.tracking.PhaseTracker) CraftingInventoryLens(org.spongepowered.common.item.inventory.lens.comp.CraftingInventoryLens) CraftingInventoryLensImpl(org.spongepowered.common.item.inventory.lens.impl.comp.CraftingInventoryLensImpl) ContainerPlayer(net.minecraft.inventory.ContainerPlayer) Container(org.spongepowered.api.item.inventory.Container) SlotLensImpl(org.spongepowered.common.item.inventory.lens.impl.slots.SlotLensImpl) IInventory(net.minecraft.inventory.IInventory) Slot(net.minecraft.inventory.Slot) OrderedInventoryLensImpl(org.spongepowered.common.item.inventory.lens.impl.comp.OrderedInventoryLensImpl) VecHelper(org.spongepowered.common.util.VecHelper) ItemDropData(org.spongepowered.common.event.tracking.context.ItemDropData) TileEntity(net.minecraft.tileentity.TileEntity) SlotCollection(org.spongepowered.common.item.inventory.lens.impl.collections.SlotCollection) Collections(java.util.Collections) InventoryCrafting(net.minecraft.inventory.InventoryCrafting) ArrayList(java.util.ArrayList) InventoryCrafting(net.minecraft.inventory.InventoryCrafting) GridInventoryLensImpl(org.spongepowered.common.item.inventory.lens.impl.comp.GridInventoryLensImpl) CraftingOutputSlotLensImpl(org.spongepowered.common.item.inventory.lens.impl.slots.CraftingOutputSlotLensImpl) List(java.util.List) ArrayList(java.util.ArrayList) IInventory(net.minecraft.inventory.IInventory) Optional(java.util.Optional) OrderedInventoryLensImpl(org.spongepowered.common.item.inventory.lens.impl.comp.OrderedInventoryLensImpl) CraftingInventoryLensImpl(org.spongepowered.common.item.inventory.lens.impl.comp.CraftingInventoryLensImpl) ContainerLens(org.spongepowered.common.item.inventory.lens.impl.minecraft.container.ContainerLens) InventoryCraftResult(net.minecraft.inventory.InventoryCraftResult) LensProvider(org.spongepowered.common.item.inventory.lens.LensProvider) VanillaAdapter(org.spongepowered.common.item.inventory.adapter.impl.VanillaAdapter) CraftingOutputSlotLensImpl(org.spongepowered.common.item.inventory.lens.impl.slots.CraftingOutputSlotLensImpl) SlotLensImpl(org.spongepowered.common.item.inventory.lens.impl.slots.SlotLensImpl) InputSlot(org.spongepowered.api.item.inventory.slot.InputSlot) Slot(net.minecraft.inventory.Slot) LargeChestInventoryLens(org.spongepowered.common.item.inventory.lens.impl.minecraft.LargeChestInventoryLens) DelegatingLens(org.spongepowered.common.item.inventory.lens.impl.DelegatingLens) GridInventoryLens(org.spongepowered.common.item.inventory.lens.comp.GridInventoryLens) BrewingStandInventoryLens(org.spongepowered.common.item.inventory.lens.impl.minecraft.BrewingStandInventoryLens) ContainerLens(org.spongepowered.common.item.inventory.lens.impl.minecraft.container.ContainerLens) Lens(org.spongepowered.common.item.inventory.lens.Lens) PlayerInventoryLens(org.spongepowered.common.item.inventory.lens.impl.minecraft.PlayerInventoryLens) DefaultEmptyLens(org.spongepowered.common.item.inventory.lens.impl.DefaultEmptyLens) FurnaceInventoryLens(org.spongepowered.common.item.inventory.lens.impl.minecraft.FurnaceInventoryLens) Inventory2DLens(org.spongepowered.common.item.inventory.lens.comp.Inventory2DLens) CraftingInventoryLens(org.spongepowered.common.item.inventory.lens.comp.CraftingInventoryLens) ItemStack(net.minecraft.item.ItemStack) Map(java.util.Map) LinkedHashMap(java.util.LinkedHashMap) InventoryBasic(net.minecraft.inventory.InventoryBasic)

Aggregations

SlotLensImpl (org.spongepowered.common.item.inventory.lens.impl.slots.SlotLensImpl)4 SlotCollection (org.spongepowered.common.item.inventory.lens.impl.collections.SlotCollection)2 GridInventoryLensImpl (org.spongepowered.common.item.inventory.lens.impl.comp.GridInventoryLensImpl)2 Multimap (com.google.common.collect.Multimap)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 LinkedHashMap (java.util.LinkedHashMap)1 List (java.util.List)1 Map (java.util.Map)1 Optional (java.util.Optional)1 Random (java.util.Random)1 Collectors (java.util.stream.Collectors)1 Nullable (javax.annotation.Nullable)1 EntityItem (net.minecraft.entity.item.EntityItem)1 AbstractChestHorse (net.minecraft.entity.passive.AbstractChestHorse)1 AbstractHorse (net.minecraft.entity.passive.AbstractHorse)1 EntityPlayer (net.minecraft.entity.player.EntityPlayer)1 EntityPlayerMP (net.minecraft.entity.player.EntityPlayerMP)1 ContainerBeacon (net.minecraft.inventory.ContainerBeacon)1