Added VISlotElementSupplier

This commit is contained in:
NichtStudioCode 2021-09-01 13:10:35 +02:00
parent 6da906fbc4
commit 5fcd728008
3 changed files with 43 additions and 0 deletions

@ -6,6 +6,7 @@ import de.studiocode.invui.gui.builder.guitype.GUIType;
import de.studiocode.invui.gui.structure.Structure;
import de.studiocode.invui.item.Item;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.virtualinventory.VirtualInventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.ShapedRecipe;
import org.jetbrains.annotations.NotNull;
@ -54,6 +55,11 @@ public class GUIBuilder<G extends GUI> {
return this;
}
public GUIBuilder<G> addIngredient(char key, @NotNull VirtualInventory inventory) {
context.getStructure().addIngredient(key, inventory);
return this;
}
public GUIBuilder<G> addIngredient(char key, @NotNull SlotElement element) {
context.getStructure().addIngredient(key, element);
return this;

@ -7,6 +7,7 @@ import de.studiocode.invui.item.Item;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.item.ItemWrapper;
import de.studiocode.invui.item.impl.SimpleItem;
import de.studiocode.invui.virtualinventory.VirtualInventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.ShapedRecipe;
import org.jetbrains.annotations.NotNull;
@ -76,6 +77,11 @@ public class Structure implements Cloneable {
return addIngredient(key, new ItemSlotElement(item));
}
public Structure addIngredient(char key, @NotNull VirtualInventory inventory) {
if (ingredientList != null) throw new UnsupportedOperationException("Structure is locked");
return addIngredientElementSupplier(key, new VISlotElementSupplier(inventory));
}
public Structure addIngredient(char key, @NotNull SlotElement element) {
if (ingredientList != null) throw new UnsupportedOperationException("Structure is locked");
ingredientMap.put(key, new Ingredient(element));

@ -0,0 +1,31 @@
package de.studiocode.invui.gui.structure;
import de.studiocode.invui.gui.SlotElement.VISlotElement;
import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.virtualinventory.VirtualInventory;
import java.util.function.Supplier;
public class VISlotElementSupplier implements Supplier<VISlotElement> {
private final VirtualInventory inventory;
private final ItemProvider background;
private int slot = -1;
public VISlotElementSupplier(VirtualInventory inventory) {
this.inventory = inventory;
this.background = null;
}
public VISlotElementSupplier(VirtualInventory inventory, ItemProvider background) {
this.inventory = inventory;
this.background = background;
}
@Override
public VISlotElement get() {
if (++slot == inventory.getSize()) slot = 0;
return new VISlotElement(inventory, slot, background);
}
}