Search in sources :

Example 1 with GuiIdProperty

use of org.spongepowered.api.item.inventory.property.GuiIdProperty in project SpongeCommon by SpongePowered.

the class InventoryArchetypeRegistryModule method registerDefaults.

@Override
public void registerDefaults() {
    InventoryArchetype SLOT = new SlotArchetype(ImmutableMap.of(CustomInventory.INVENTORY_DIMENSION, new InventoryDimension(1, 1)));
    InventoryArchetype MENU_ROW;
    InventoryArchetype MENU_COLUMN;
    InventoryArchetype MENU_GRID;
    InventoryArchetype CHEST;
    InventoryArchetype DOUBLE_CHEST;
    InventoryArchetype FURNACE;
    InventoryArchetype DISPENSER;
    InventoryArchetype WORKBENCH;
    InventoryArchetype BREWING_STAND;
    InventoryArchetype HOPPER;
    InventoryArchetype BEACON;
    InventoryArchetype ANVIL;
    InventoryArchetype ENCHANTING_TABLE;
    InventoryArchetype VILLAGER;
    InventoryArchetype HORSE;
    InventoryArchetype HORSE_WITH_CHEST;
    InventoryArchetype PLAYER;
    InventoryArchetype CRAFTING;
    InventoryArchetype UNKNOWN;
    final SpongeInventoryArchetypeBuilder builder = new SpongeInventoryArchetypeBuilder();
    for (int i = 0; i < 9; i++) {
        builder.with(new SpongeInventoryArchetypeBuilder().from(SLOT).property(SlotIndex.of(i)).build("minecraft:slot" + i, "Slot"));
    }
    MENU_ROW = builder.property(new InventoryDimension(9, 1)).build("sponge:menu_row", "Menu Row");
    MENU_COLUMN = builder.property(new InventoryDimension(9, 1)).build("sponge:menu_column", "Menu Column");
    MENU_GRID = builder.reset().with(MENU_ROW).with(MENU_ROW).with(MENU_ROW).property(new InventoryDimension(9, 3)).build("sponge:menu_grid", "Menu Grid");
    CHEST = builder.reset().with(MENU_GRID).property(InventoryTitle.of(Text.of(new SpongeTranslation("container.chest")))).property(new GuiIdProperty(GuiIds.CHEST)).container((i, p) -> new ContainerChest(p.inventory, i, p)).build("minecraft:chest", "Chest");
    DOUBLE_CHEST = builder.reset().with(CHEST).property(new InventoryDimension(9, 6)).property(InventoryTitle.of(Text.of(new SpongeTranslation("container.chestDouble")))).property(new GuiIdProperty(GuiIds.CHEST)).container((i, p) -> new ContainerChest(p.inventory, i, p)).build("minecraft:double_chest", "DoubleChest");
    FURNACE = builder.reset().with(new SpongeInventoryArchetypeBuilder().from(SLOT).property(new SlotIndex(0)).build("minecraft:furnace_input", "FurnaceInput")).with(new SpongeInventoryArchetypeBuilder().from(SLOT).property(new SlotIndex(1)).property(AcceptsItems.of()).build("minecraft:furnace_fuel", "FurnaceFuel")).with(new SpongeInventoryArchetypeBuilder().from(SLOT).property(new SlotIndex(2)).property(AcceptsItems.of()).build("minecraft:furnace_output", "FurnaceOutput")).property(new InventoryTitle(Text.of(new SpongeTranslation("container.furnace")))).property(new InventoryDimension(3, 1)).property(new GuiIdProperty(GuiIds.FURNACE)).container((i, p) -> new ContainerFurnace(p.inventory, i)).build("minecraft:furnace", "Furnace");
    DISPENSER = builder.reset().with(MENU_GRID).property(new InventoryDimension(3, 3)).property(InventoryTitle.of(Text.of(new SpongeTranslation("container.dispenser")))).property(new GuiIdProperty(GuiIds.DISPENSER)).container((i, p) -> new ContainerDispenser(p.inventory, i)).build("minecraft:dispenser", "Dispenser");
    WORKBENCH = builder.reset().with(new SpongeInventoryArchetypeBuilder().from(MENU_GRID).property(new InventoryDimension(3, 3)).build("minecraft:workbench_grid", "Workbench Grid")).with(SLOT).property(InventoryTitle.of(Text.of(new SpongeTranslation("container.crafting")))).property(new GuiIdProperty(GuiIds.CRAFTING_TABLE)).container((i, p) -> {
        ContainerWorkbench container = new ContainerWorkbench(p.inventory, p.getEntityWorld(), p.getPosition());
        // Pre-Fills the container input with the items from the inventory
        for (int index = 0; index < container.craftMatrix.getSizeInventory(); index++) {
            container.craftMatrix.setInventorySlotContents(index, i.getStackInSlot(index));
        }
        return container;
    }).build("minecraft:workbench", "Workbench");
    BREWING_STAND = builder.reset().with(MENU_ROW).property(new InventoryDimension(5, 1)).property(InventoryTitle.of(Text.of(new SpongeTranslation("container.brewing")))).property(new GuiIdProperty(GuiIds.BREWING_STAND)).container((i, p) -> new ContainerBrewingStand(p.inventory, i)).build("minecraft:brewing_stand", "BrewingStand");
    HOPPER = builder.reset().with(MENU_ROW).property(new InventoryDimension(5, 1)).property(InventoryTitle.of(Text.of(new SpongeTranslation("container.hopper")))).property(new GuiIdProperty(GuiIds.HOPPER)).container((i, p) -> new ContainerHopper(p.inventory, i, p)).build("minecraft:hopper", "Hopper");
    BEACON = builder.reset().with(SLOT).property(new InventoryDimension(1, 1)).property(InventoryTitle.of(Text.of(new SpongeTranslation("container.beacon")))).property(new GuiIdProperty(GuiIds.BEACON)).container((i, p) -> new ContainerBeacon(p.inventory, i)).build("minecraft:beacon", "Beacon");
    ENCHANTING_TABLE = builder.reset().with(SLOT).with(SLOT).property(new InventoryDimension(2, 1)).property(InventoryTitle.of(Text.of(new SpongeTranslation("container.enchant")))).property(new GuiIdProperty(GuiIds.ENCHANTING_TABLE)).container((i, p) -> {
        ContainerEnchantment container = new ContainerEnchantment(p.inventory, p.getEntityWorld(), p.getPosition());
        // Pre-Fills the container with the items from the inventory
        for (int index = 0; index < container.tableInventory.getSizeInventory(); index++) {
            container.tableInventory.setInventorySlotContents(index, i.getStackInSlot(index));
        }
        return container;
    }).build("minecraft:enchanting_table", "EnchantingTable");
    ANVIL = builder.reset().with(SLOT).with(SLOT).with(SLOT).property(new InventoryDimension(3, 1)).property(InventoryTitle.of(Text.of(new SpongeTranslation("container.repair")))).property(new GuiIdProperty(GuiIds.ANVIL)).container((i, p) -> {
        ContainerRepair container = new ContainerRepair(p.inventory, p.getEntityWorld(), p.getPosition(), p);
        // Pre-Fills the container input with the items from the inventory
        for (int index = 0; index < container.inputSlots.getSizeInventory(); index++) {
            container.inputSlots.setInventorySlotContents(index, i.getStackInSlot(index));
        }
        return container;
    }).build("minecraft:anvil", "Anvil");
    VILLAGER = builder.reset().with(SLOT).with(SLOT).with(SLOT).property(new InventoryDimension(3, 1)).property(new GuiIdProperty(GuiIds.VILLAGER)).container((i, p) -> {
        if (i instanceof CarriedInventory && ((CarriedInventory) i).getCarrier().isPresent() && ((CarriedInventory) i).getCarrier().get() instanceof IMerchant) {
            IMerchant merchant = ((IMerchant) ((CarriedInventory) i).getCarrier().get());
            ContainerMerchant container = new ContainerMerchant(p.inventory, merchant, p.getEntityWorld());
            // TODO Pre-Fill the Container?
            return container;
        }
        throw new IllegalArgumentException("Cannot open merchant inventory without a merchant as Carrier");
    }).build("minecraft:villager", "Villager");
    HORSE = builder.reset().with(SLOT).with(SLOT).property(new InventoryDimension(2, 1)).property(// hardcoded openGuiHorseInventory
    new GuiIdProperty(GuiIds.HORSE)).container((i, p) -> {
        if (i instanceof CarriedInventory && ((CarriedInventory) i).getCarrier().isPresent() && ((CarriedInventory) i).getCarrier().get() instanceof AbstractHorse) {
            AbstractHorse horse = ((AbstractHorse) ((CarriedInventory) i).getCarrier().get());
            return new ContainerHorseInventory(p.inventory, i, horse, p);
        }
        throw new IllegalArgumentException("Cannot open horse inventory without a horse as Carrier");
    }).build("minecraft:horse", "Horse");
    HORSE_WITH_CHEST = builder.reset().with(HORSE).with(new SpongeInventoryArchetypeBuilder().from(MENU_GRID).property(new InventoryDimension(5, 3)).build("horse_grid", "HorseGrid")).property(// hardcoded openGuiHorseInventory
    new GuiIdProperty(GuiIds.HORSE)).container((i, p) -> {
        if (i instanceof CarriedInventory && ((CarriedInventory) i).getCarrier().isPresent() && ((CarriedInventory) i).getCarrier().get() instanceof AbstractHorse) {
            AbstractHorse horse = ((AbstractHorse) ((CarriedInventory) i).getCarrier().get());
            // TODO size
            return new ContainerHorseInventory(p.inventory, i, horse, p);
        }
        throw new IllegalArgumentException("Cannot open horse inventory without a horse as Carrier");
    }).build("minecraft:horse_with_chest", "Horse with Chest");
    CRAFTING = builder.reset().with(SLOT).with(new SpongeInventoryArchetypeBuilder().from(MENU_GRID).property(new InventoryDimension(2, 2)).build("minecraft:crafting_grid", "Crafting Grid")).property(InventoryTitle.of(Text.of(new SpongeTranslation("container.crafting")))).build("minecraft:crafting", "Crafting");
    PLAYER = builder.reset().with(CRAFTING).with(new SpongeInventoryArchetypeBuilder().from(MENU_GRID).property(new InventoryDimension(1, 4)).build("minecraft:armor", "Armor")).with(new SpongeInventoryArchetypeBuilder().from(MENU_GRID).property(new InventoryDimension(9, 3)).build("minecraft:player_main", "Player Main")).with(new SpongeInventoryArchetypeBuilder().from(MENU_GRID).property(new InventoryDimension(9, 1)).build("minecraft:player_hotbar", "Player Hotbar")).with(new SpongeInventoryArchetypeBuilder().from(SLOT).property(new InventoryDimension(1, 1)).build("minecraft:player_offhand", "Player Offhand")).build("minecraft:player", "Player");
    UNKNOWN = builder.reset().build("minecraft:unknown", "UKNOWN");
    registerAdditionalCatalog(SLOT);
    registerAdditionalCatalog(MENU_ROW);
    registerAdditionalCatalog(MENU_COLUMN);
    registerAdditionalCatalog(MENU_GRID);
    registerAdditionalCatalog(CHEST);
    SpongeInventoryBuilder.registerInventory(TileEntityChest.class, CHEST);
    SpongeInventoryBuilder.registerContainer(ContainerChest.class, CHEST);
    registerAdditionalCatalog(DOUBLE_CHEST);
    registerAdditionalCatalog(FURNACE);
    SpongeInventoryBuilder.registerInventory(TileEntityFurnace.class, FURNACE);
    SpongeInventoryBuilder.registerContainer(ContainerFurnace.class, FURNACE);
    registerAdditionalCatalog(DISPENSER);
    SpongeInventoryBuilder.registerInventory(TileEntityDispenser.class, DISPENSER);
    SpongeInventoryBuilder.registerInventory(TileEntityDropper.class, DISPENSER);
    SpongeInventoryBuilder.registerContainer(ContainerDispenser.class, DISPENSER);
    registerAdditionalCatalog(WORKBENCH);
    SpongeInventoryBuilder.registerContainer(ContainerWorkbench.class, WORKBENCH);
    registerAdditionalCatalog(BREWING_STAND);
    SpongeInventoryBuilder.registerInventory(TileEntityBrewingStand.class, BREWING_STAND);
    SpongeInventoryBuilder.registerContainer(ContainerBrewingStand.class, BREWING_STAND);
    registerAdditionalCatalog(HOPPER);
    SpongeInventoryBuilder.registerInventory(TileEntityHopper.class, HOPPER);
    SpongeInventoryBuilder.registerContainer(ContainerHopper.class, HOPPER);
    registerAdditionalCatalog(BEACON);
    SpongeInventoryBuilder.registerInventory(TileEntityBeacon.class, BEACON);
    SpongeInventoryBuilder.registerContainer(ContainerBeacon.class, BEACON);
    registerAdditionalCatalog(ENCHANTING_TABLE);
    SpongeInventoryBuilder.registerContainer(ContainerEnchantment.class, ENCHANTING_TABLE);
    registerAdditionalCatalog(ANVIL);
    SpongeInventoryBuilder.registerContainer(ContainerRepair.class, ANVIL);
    registerAdditionalCatalog(VILLAGER);
    // TODO internal Villager Inventory? make Villager Carrier?
    SpongeInventoryBuilder.registerContainer(ContainerMerchant.class, VILLAGER);
    registerAdditionalCatalog(HORSE);
    // TODO Horse IInventory? SpongeInventoryBuilder.registerInventory(EntityHorse.class, HORSE);
    SpongeInventoryBuilder.registerContainer(ContainerHorseInventory.class, HORSE);
    registerAdditionalCatalog(HORSE_WITH_CHEST);
    registerAdditionalCatalog(CRAFTING);
    registerAdditionalCatalog(PLAYER);
    registerAdditionalCatalog(UNKNOWN);
    // Helper Archetypes for Menu
    InventoryArchetype MENU_ICON;
    InventoryArchetype MENU_BUTTON;
    InventoryArchetype MENU_CHECKBOX;
    InventoryArchetype MENU_SPINNER;
    MENU_ICON = builder.reset().with(SLOT).build("sponge:menu_icon", "Menu Icon");
    MENU_BUTTON = builder.reset().with(MENU_ICON).build("sponge:menu_button", "Menu Button");
    MENU_CHECKBOX = builder.reset().with(MENU_ICON).build("sponge:menu_checkbox", "Menu Checkbox");
    MENU_SPINNER = builder.reset().with(MENU_ICON).build("sponge:menu_spinner", "Menu Spinner");
    registerAdditionalCatalog(MENU_ICON);
    registerAdditionalCatalog(MENU_BUTTON);
    registerAdditionalCatalog(MENU_CHECKBOX);
    registerAdditionalCatalog(MENU_SPINNER);
}
Also used : SlotArchetype(org.spongepowered.common.item.inventory.archetype.SlotArchetype) AbstractHorse(net.minecraft.entity.passive.AbstractHorse) SpongeTranslation(org.spongepowered.common.text.translation.SpongeTranslation) GuiIdProperty(org.spongepowered.api.item.inventory.property.GuiIdProperty) CarriedInventory(org.spongepowered.api.item.inventory.type.CarriedInventory) ContainerDispenser(net.minecraft.inventory.ContainerDispenser) ContainerHopper(net.minecraft.inventory.ContainerHopper) ContainerBeacon(net.minecraft.inventory.ContainerBeacon) IMerchant(net.minecraft.entity.IMerchant) ContainerHorseInventory(net.minecraft.inventory.ContainerHorseInventory) ContainerBrewingStand(net.minecraft.inventory.ContainerBrewingStand) SpongeInventoryArchetypeBuilder(org.spongepowered.common.item.inventory.archetype.SpongeInventoryArchetypeBuilder) InventoryTitle(org.spongepowered.api.item.inventory.property.InventoryTitle) ContainerWorkbench(net.minecraft.inventory.ContainerWorkbench) ContainerRepair(net.minecraft.inventory.ContainerRepair) ContainerFurnace(net.minecraft.inventory.ContainerFurnace) ContainerChest(net.minecraft.inventory.ContainerChest) SlotIndex(org.spongepowered.api.item.inventory.property.SlotIndex) ContainerMerchant(net.minecraft.inventory.ContainerMerchant) InventoryDimension(org.spongepowered.api.item.inventory.property.InventoryDimension) InventoryArchetype(org.spongepowered.api.item.inventory.InventoryArchetype) ContainerEnchantment(net.minecraft.inventory.ContainerEnchantment)

Example 2 with GuiIdProperty

use of org.spongepowered.api.item.inventory.property.GuiIdProperty in project SpongeCommon by SpongePowered.

the class CustomInventory method getGuiID.

@Override
public String getGuiID() {
    String key = AbstractInventoryProperty.getDefaultKey(GuiIdProperty.class).toString();
    InventoryProperty<?, ?> property = this.properties.get(key);
    if (property instanceof GuiIdProperty) {
        if (property.getValue() instanceof SpongeGuiId) {
            // Handle Vanilla EntityHorse GuiId
            return ((SpongeGuiId) property.getValue()).getInternalId();
        }
        return ((GuiIdProperty) property).getValue().getId();
    }
    GuiId guiId = this.archetype.getProperty(GuiIdProperty.class, key).map(GuiIdProperty::getValue).orElse(GuiIds.CHEST);
    if (guiId instanceof SpongeGuiId) {
        // Handle Vanilla EntityHorse GuiId
        return ((SpongeGuiId) guiId).getInternalId();
    }
    return guiId.getId();
}
Also used : GuiIdProperty(org.spongepowered.api.item.inventory.property.GuiIdProperty) SpongeGuiId(org.spongepowered.common.data.type.SpongeGuiId) SpongeGuiId(org.spongepowered.common.data.type.SpongeGuiId) GuiId(org.spongepowered.api.item.inventory.property.GuiId)

Example 3 with GuiIdProperty

use of org.spongepowered.api.item.inventory.property.GuiIdProperty in project SpongeCommon by SpongePowered.

the class CustomInventoryTest method onPunchEntity.

@Listener
public void onPunchEntity(InteractEntityEvent.Primary event, @Root Player player) {
    if (!player.get(Keys.IS_SNEAKING).orElse(false)) {
        return;
    }
    if (event.getTargetEntity() instanceof Mule) {
        Inventory.Builder builder;
        if (((Mule) event.getTargetEntity()).getInventory().capacity() <= 2) {
            builder = Inventory.builder().of(InventoryArchetypes.HORSE);
        } else {
            builder = Inventory.builder().of(InventoryArchetypes.HORSE_WITH_CHEST);
        }
        Inventory inventory = builder.property(InventoryTitle.PROPERTY_NAME, InventoryTitle.of(Text.of("Custom Mule"))).withCarrier(((Horse) event.getTargetEntity())).build(this);
        int i = 1;
        for (Inventory slot : inventory.slots()) {
            slot.set(ItemStack.of(ItemTypes.APPLE, i++));
        }
        Sponge.getCauseStackManager().pushCause(player);
        player.openInventory(inventory);
        Sponge.getCauseStackManager().popCause();
        event.setCancelled(true);
    } else if (event.getTargetEntity() instanceof Llama) {
        Inventory.Builder builder;
        if (((Llama) event.getTargetEntity()).getInventory().capacity() <= 2) {
            builder = Inventory.builder().of(InventoryArchetypes.HORSE);
        } else {
            builder = Inventory.builder().of(InventoryArchetypes.HORSE_WITH_CHEST);
        }
        Inventory inventory = builder.property(InventoryTitle.PROPERTY_NAME, InventoryTitle.of(Text.of("Custom Llama"))).withCarrier(((Horse) event.getTargetEntity())).build(this);
        int i = 1;
        for (Inventory slot : inventory.slots()) {
            slot.set(ItemStack.of(ItemTypes.APPLE, i++));
        }
        Sponge.getCauseStackManager().pushCause(player);
        player.openInventory(inventory);
        Sponge.getCauseStackManager().popCause();
        event.setCancelled(true);
    } else if (event.getTargetEntity() instanceof Horse) {
        Inventory inventory = Inventory.builder().of(InventoryArchetypes.HORSE).property(InventoryTitle.PROPERTY_NAME, InventoryTitle.of(Text.of("Custom Horse"))).withCarrier(((Horse) event.getTargetEntity())).build(this);
        int i = 1;
        for (Inventory slot : inventory.slots()) {
            slot.set(ItemStack.of(ItemTypes.APPLE, i++));
        }
        Sponge.getCauseStackManager().pushCause(player);
        player.openInventory(inventory);
        Sponge.getCauseStackManager().popCause();
        event.setCancelled(true);
    }
    if (event.getTargetEntity() instanceof Slime) {
        Inventory inventory = Inventory.builder().of(InventoryArchetypes.MENU_GRID).property(InventoryDimension.of(1, 9)).property(InventoryTitle.of(Text.of("Slime Content"))).property(new Identifiable()).property(new GuiIdProperty(GuiIds.DISPENSER)).build(this);
        ItemStack flard = ItemStack.of(ItemTypes.SLIME, 1);
        flard.offer(Keys.DISPLAY_NAME, Text.of("Flard?"));
        for (Inventory slot : inventory.slots()) {
            slot.set(flard);
        }
        Sponge.getCauseStackManager().pushCause(player);
        player.openInventory(inventory);
        Sponge.getCauseStackManager().popCause();
    }
}
Also used : GuiIdProperty(org.spongepowered.api.item.inventory.property.GuiIdProperty) Llama(org.spongepowered.api.entity.living.animal.Llama) Mule(org.spongepowered.api.entity.living.animal.Mule) Horse(org.spongepowered.api.entity.living.animal.Horse) Slime(org.spongepowered.api.entity.living.monster.Slime) ItemStack(org.spongepowered.api.item.inventory.ItemStack) Inventory(org.spongepowered.api.item.inventory.Inventory) CarriedInventory(org.spongepowered.api.item.inventory.type.CarriedInventory) Identifiable(org.spongepowered.api.item.inventory.property.Identifiable) Listener(org.spongepowered.api.event.Listener)

Example 4 with GuiIdProperty

use of org.spongepowered.api.item.inventory.property.GuiIdProperty in project LanternServer by LanternPowered.

the class LanternChest method getDoubleChestInventory.

@Override
public Optional<Inventory> getDoubleChestInventory() {
    if (!isValid()) {
        return Optional.empty();
    }
    final Location<World> location = getLocation();
    for (Direction directionToCheck : HORIZONTAL_DIRECTIONS) {
        final Location<World> loc = location.getRelative(directionToCheck);
        if (loc.getBlock().getType() != getBlock().getType()) {
            continue;
        }
        final Optional<TileEntity> optTileEntity = location.getRelative(directionToCheck).getTileEntity();
        if (optTileEntity.isPresent() && optTileEntity.get() instanceof LanternChest) {
            final LanternChest otherChest = (LanternChest) optTileEntity.get();
            final AbstractGridInventory.RowsViewBuilder<DoubleChestInventory> doubleChestBuilder = AbstractGridInventory.rowsViewBuilder().shiftClickBehavior(SimpleContainerShiftClickBehavior.INSTANCE).title(tr("container.chestDouble")).property(new GuiIdProperty(GuiIds.CHEST)).type(DoubleChestInventory.class).withCarrier(new DoubleChestBlockCarrier(Arrays.asList(this, otherChest)));
            if (directionToCheck != Direction.WEST && directionToCheck != Direction.NORTH) {
                doubleChestBuilder.grid(0, this.inventory).grid(3, otherChest.inventory).withCarrier(new DoubleChestBlockCarrier(Arrays.asList(this, otherChest)));
            } else {
                doubleChestBuilder.grid(0, otherChest.inventory).grid(3, this.inventory).withCarrier(new DoubleChestBlockCarrier(Arrays.asList(otherChest, this)));
            }
            final DoubleChestInventory doubleChestInventory = doubleChestBuilder.build();
            doubleChestInventory.addViewListener(this);
            doubleChestInventory.addViewListener(otherChest);
            return Optional.of(doubleChestInventory);
        }
    }
    return Optional.empty();
}
Also used : TileEntity(org.spongepowered.api.block.tileentity.TileEntity) AbstractGridInventory(org.lanternpowered.server.inventory.AbstractGridInventory) GuiIdProperty(org.spongepowered.api.item.inventory.property.GuiIdProperty) World(org.spongepowered.api.world.World) Direction(org.spongepowered.api.util.Direction)

Example 5 with GuiIdProperty

use of org.spongepowered.api.item.inventory.property.GuiIdProperty in project LanternServer by LanternPowered.

the class TestInventoryPlugin method onInit.

@Listener
public void onInit(GameInitializationEvent event) {
    this.myArchetype = InventoryArchetype.builder().with(InventoryArchetypes.MENU_ROW).title(Text.of("My Fancy Title")).property(InventoryDimension.of(9, 1)).property(new GuiIdProperty(GuiIds.CHEST)).build("inventory_test:test", "Test Inventory");
    Sponge.getCommandManager().register(this, CommandSpec.builder().executor((src, args) -> {
        if (!(src instanceof Player)) {
            throw new CommandException(t("Only players may use this command."));
        }
        final Inventory inventory = Inventory.builder().of(this.myArchetype).withCarrier((Carrier) src).build(this);
        System.out.println(inventory.getClass().getName());
        final ItemStack itemStack = ItemStack.of(ItemTypes.LOG, 64);
        itemStack.offer(Keys.TREE_TYPE, TreeTypes.JUNGLE);
        inventory.offer(itemStack);
        ((Player) src).openInventory(inventory);
        return CommandResult.success();
    }).build(), "test-a-inv");
    Keys.COAL_TYPE.registerEvent(ItemStack.class, event1 -> {
        final DataTransactionResult result = event1.getEndResult();
        final List<ImmutableValue<?>> newSuccessfulData = new ArrayList<>(result.getSuccessfulData());
        Iterator<ImmutableValue<?>> it = newSuccessfulData.iterator();
        while (it.hasNext()) {
            final ImmutableValue<?> value = it.next();
            if (value.getKey() == Keys.COAL_TYPE) {
                System.out.println("Changed coal type to: " + ((CoalType) value.get()).getId() + ", but this not allowed");
                it.remove();
                break;
            }
        }
        final List<ImmutableValue<?>> newReplacedData = new ArrayList<>(result.getReplacedData());
        it = newSuccessfulData.iterator();
        while (it.hasNext()) {
            final ImmutableValue<?> value = it.next();
            if (value.getKey() == Keys.COAL_TYPE) {
                it.remove();
                break;
            }
        }
        event1.proposeChanges(DataTransactionResult.builder().result(result.getType()).reject(result.getRejectedData()).replace(newReplacedData).success(newSuccessfulData).build());
    });
}
Also used : GuiIdProperty(org.spongepowered.api.item.inventory.property.GuiIdProperty) Player(org.spongepowered.api.entity.living.player.Player) ImmutableValue(org.spongepowered.api.data.value.immutable.ImmutableValue) ArrayList(java.util.ArrayList) DataTransactionResult(org.spongepowered.api.data.DataTransactionResult) CommandException(org.spongepowered.api.command.CommandException) Carrier(org.spongepowered.api.item.inventory.Carrier) ItemStack(org.spongepowered.api.item.inventory.ItemStack) Inventory(org.spongepowered.api.item.inventory.Inventory) Listener(org.spongepowered.api.event.Listener)

Aggregations

GuiIdProperty (org.spongepowered.api.item.inventory.property.GuiIdProperty)5 Listener (org.spongepowered.api.event.Listener)2 Inventory (org.spongepowered.api.item.inventory.Inventory)2 ItemStack (org.spongepowered.api.item.inventory.ItemStack)2 CarriedInventory (org.spongepowered.api.item.inventory.type.CarriedInventory)2 ArrayList (java.util.ArrayList)1 IMerchant (net.minecraft.entity.IMerchant)1 AbstractHorse (net.minecraft.entity.passive.AbstractHorse)1 ContainerBeacon (net.minecraft.inventory.ContainerBeacon)1 ContainerBrewingStand (net.minecraft.inventory.ContainerBrewingStand)1 ContainerChest (net.minecraft.inventory.ContainerChest)1 ContainerDispenser (net.minecraft.inventory.ContainerDispenser)1 ContainerEnchantment (net.minecraft.inventory.ContainerEnchantment)1 ContainerFurnace (net.minecraft.inventory.ContainerFurnace)1 ContainerHopper (net.minecraft.inventory.ContainerHopper)1 ContainerHorseInventory (net.minecraft.inventory.ContainerHorseInventory)1 ContainerMerchant (net.minecraft.inventory.ContainerMerchant)1 ContainerRepair (net.minecraft.inventory.ContainerRepair)1 ContainerWorkbench (net.minecraft.inventory.ContainerWorkbench)1 AbstractGridInventory (org.lanternpowered.server.inventory.AbstractGridInventory)1