diff --git a/src/main/java/de/studiocode/invui/InvUI.java b/src/main/java/de/studiocode/invui/InvUI.java index 8b64b45..c01496a 100644 --- a/src/main/java/de/studiocode/invui/InvUI.java +++ b/src/main/java/de/studiocode/invui/InvUI.java @@ -17,27 +17,21 @@ public class InvUI implements Listener { private static InvUI instance; private final List disableHandlers = new ArrayList<>(); - private Plugin plugin; + private final Plugin plugin; + + public InvUI() { + plugin = ReflectionUtils.getFieldValue(PLUGIN_CLASS_LOADER_PLUGIN_FIELD, getClass().getClassLoader()); + Bukkit.getPluginManager().registerEvents(this, plugin); + } public static InvUI getInstance() { return instance == null ? instance = new InvUI() : instance; } public Plugin getPlugin() { - if (plugin == null) { - System.out.println("[InvUI] Retrieving plugin from PluginClassLoader... This may cause issues!"); - setPlugin(ReflectionUtils.getFieldValue(PLUGIN_CLASS_LOADER_PLUGIN_FIELD, getClass().getClassLoader())); - } return plugin; } - public void setPlugin(Plugin plugin) { - if (this.plugin != null) - throw new IllegalStateException("The plugin is already set!"); - this.plugin = plugin; - Bukkit.getPluginManager().registerEvents(this, plugin); - } - public void addDisableHandler(Runnable runnable) { disableHandlers.add(runnable); } diff --git a/src/main/java/de/studiocode/invui/gui/GUI.java b/src/main/java/de/studiocode/invui/gui/GUI.java index ea44771..55770e8 100644 --- a/src/main/java/de/studiocode/invui/gui/GUI.java +++ b/src/main/java/de/studiocode/invui/gui/GUI.java @@ -5,6 +5,7 @@ import de.studiocode.invui.gui.builder.GUIBuilder; import de.studiocode.invui.gui.impl.*; import de.studiocode.invui.gui.structure.Structure; import de.studiocode.invui.item.Item; +import de.studiocode.invui.item.ItemBuilder; import de.studiocode.invui.virtualinventory.VirtualInventory; import de.studiocode.invui.window.Window; import org.bukkit.entity.Player; @@ -163,6 +164,21 @@ public interface GUI extends GUIParent { */ void addItems(@NotNull Item... items); + /** + * Sets the {@link ItemBuilder} that will be used if nothing else + * is placed on a slot. + * @param itemBuilder The {@link ItemBuilder} + */ + void setBackground(@Nullable ItemBuilder itemBuilder); + + /** + * Gets the {@link ItemBuilder} that will used if nothing else + * is placed on a slot. + * + * @return The {@link ItemBuilder} + */ + ItemBuilder getBackground(); + /** * Removes an {@link Item} by its coordinates. * diff --git a/src/main/java/de/studiocode/invui/gui/impl/IndexedGUI.java b/src/main/java/de/studiocode/invui/gui/impl/IndexedGUI.java index 23bb925..0765a15 100644 --- a/src/main/java/de/studiocode/invui/gui/impl/IndexedGUI.java +++ b/src/main/java/de/studiocode/invui/gui/impl/IndexedGUI.java @@ -9,6 +9,7 @@ import de.studiocode.invui.gui.SlotElement.LinkedSlotElement; import de.studiocode.invui.gui.SlotElement.VISlotElement; import de.studiocode.invui.gui.structure.Structure; import de.studiocode.invui.item.Item; +import de.studiocode.invui.item.ItemBuilder; import de.studiocode.invui.util.ArrayUtils; import de.studiocode.invui.virtualinventory.VirtualInventory; import de.studiocode.invui.virtualinventory.event.ItemUpdateEvent; @@ -37,6 +38,8 @@ abstract class IndexedGUI implements GUI { private SlotElement[] animationElements; private Animation animation; + private ItemBuilder background; + public IndexedGUI(int size) { this.size = size; slotElements = new SlotElement[size]; @@ -397,6 +400,16 @@ abstract class IndexedGUI implements GUI { return null; } + @Override + public void setBackground(ItemBuilder itemBuilder) { + this.background = itemBuilder; + } + + @Override + public ItemBuilder getBackground() { + return background; + } + @Override public void remove(int index) { setSlotElement(index, null); diff --git a/src/main/java/de/studiocode/invui/window/impl/BaseWindow.java b/src/main/java/de/studiocode/invui/window/impl/BaseWindow.java index 4e7cd99..ead04d7 100644 --- a/src/main/java/de/studiocode/invui/window/impl/BaseWindow.java +++ b/src/main/java/de/studiocode/invui/window/impl/BaseWindow.java @@ -7,6 +7,7 @@ import de.studiocode.invui.gui.SlotElement; import de.studiocode.invui.gui.SlotElement.ItemSlotElement; import de.studiocode.invui.gui.SlotElement.VISlotElement; import de.studiocode.invui.item.Item; +import de.studiocode.invui.item.ItemBuilder; import de.studiocode.invui.util.ArrayUtils; import de.studiocode.invui.util.Pair; import de.studiocode.invui.virtualinventory.VirtualInventory; @@ -46,7 +47,11 @@ public abstract class BaseWindow implements Window { protected void redrawItem(int index, SlotElement element, boolean setItem) { // put ItemStack in inventory - ItemStack itemStack = element == null ? null : element.getItemStack(viewerUUID); + ItemStack itemStack; + if (element == null) { + ItemBuilder background = getGuiAt(index).getFirst().getBackground(); + itemStack = background == null ? null : background.buildFor(viewerUUID); + } else itemStack = element.getItemStack(viewerUUID); setInvItem(index, itemStack); if (setItem) { diff --git a/src/main/java/de/studiocode/invui/window/impl/merged/MergedWindow.java b/src/main/java/de/studiocode/invui/window/impl/merged/MergedWindow.java index 7754b45..6a24621 100644 --- a/src/main/java/de/studiocode/invui/window/impl/merged/MergedWindow.java +++ b/src/main/java/de/studiocode/invui/window/impl/merged/MergedWindow.java @@ -35,14 +35,14 @@ public abstract class MergedWindow extends BaseWindow { protected void initUpperItems() { for (int i = 0; i < upperInventory.getSize(); i++) { SlotElement element = getSlotElement(i); - if (element != null) redrawItem(i, element, true); + redrawItem(i, element, true); } } private void initPlayerItems() { for (int i = upperInventory.getSize(); i < upperInventory.getSize() + 36; i++) { SlotElement element = getSlotElement(i); - if (element != null) redrawItem(i, element, true); + redrawItem(i, element, true); } } diff --git a/src/main/java/de/studiocode/invui/window/impl/single/SingleWindow.java b/src/main/java/de/studiocode/invui/window/impl/single/SingleWindow.java index ca51b66..86fd348 100644 --- a/src/main/java/de/studiocode/invui/window/impl/single/SingleWindow.java +++ b/src/main/java/de/studiocode/invui/window/impl/single/SingleWindow.java @@ -36,7 +36,7 @@ public abstract class SingleWindow extends BaseWindow { protected void initItems() { for (int i = 0; i < size; i++) { SlotElement element = gui.getSlotElement(i); - if (element != null) redrawItem(i, element, true); + redrawItem(i, element, true); } }