GUI Background

This commit is contained in:
NichtStudioCode 2021-02-28 19:36:51 +01:00
parent a22e33cf64
commit da96b415a9
6 changed files with 44 additions and 16 deletions

@ -17,27 +17,21 @@ public class InvUI implements Listener {
private static InvUI instance; private static InvUI instance;
private final List<Runnable> disableHandlers = new ArrayList<>(); private final List<Runnable> 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() { public static InvUI getInstance() {
return instance == null ? instance = new InvUI() : instance; return instance == null ? instance = new InvUI() : instance;
} }
public Plugin getPlugin() { 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; 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) { public void addDisableHandler(Runnable runnable) {
disableHandlers.add(runnable); disableHandlers.add(runnable);
} }

@ -5,6 +5,7 @@ import de.studiocode.invui.gui.builder.GUIBuilder;
import de.studiocode.invui.gui.impl.*; import de.studiocode.invui.gui.impl.*;
import de.studiocode.invui.gui.structure.Structure; import de.studiocode.invui.gui.structure.Structure;
import de.studiocode.invui.item.Item; import de.studiocode.invui.item.Item;
import de.studiocode.invui.item.ItemBuilder;
import de.studiocode.invui.virtualinventory.VirtualInventory; import de.studiocode.invui.virtualinventory.VirtualInventory;
import de.studiocode.invui.window.Window; import de.studiocode.invui.window.Window;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -163,6 +164,21 @@ public interface GUI extends GUIParent {
*/ */
void addItems(@NotNull Item... items); 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. * Removes an {@link Item} by its coordinates.
* *

@ -9,6 +9,7 @@ import de.studiocode.invui.gui.SlotElement.LinkedSlotElement;
import de.studiocode.invui.gui.SlotElement.VISlotElement; import de.studiocode.invui.gui.SlotElement.VISlotElement;
import de.studiocode.invui.gui.structure.Structure; import de.studiocode.invui.gui.structure.Structure;
import de.studiocode.invui.item.Item; import de.studiocode.invui.item.Item;
import de.studiocode.invui.item.ItemBuilder;
import de.studiocode.invui.util.ArrayUtils; import de.studiocode.invui.util.ArrayUtils;
import de.studiocode.invui.virtualinventory.VirtualInventory; import de.studiocode.invui.virtualinventory.VirtualInventory;
import de.studiocode.invui.virtualinventory.event.ItemUpdateEvent; import de.studiocode.invui.virtualinventory.event.ItemUpdateEvent;
@ -37,6 +38,8 @@ abstract class IndexedGUI implements GUI {
private SlotElement[] animationElements; private SlotElement[] animationElements;
private Animation animation; private Animation animation;
private ItemBuilder background;
public IndexedGUI(int size) { public IndexedGUI(int size) {
this.size = size; this.size = size;
slotElements = new SlotElement[size]; slotElements = new SlotElement[size];
@ -397,6 +400,16 @@ abstract class IndexedGUI implements GUI {
return null; return null;
} }
@Override
public void setBackground(ItemBuilder itemBuilder) {
this.background = itemBuilder;
}
@Override
public ItemBuilder getBackground() {
return background;
}
@Override @Override
public void remove(int index) { public void remove(int index) {
setSlotElement(index, null); setSlotElement(index, null);

@ -7,6 +7,7 @@ import de.studiocode.invui.gui.SlotElement;
import de.studiocode.invui.gui.SlotElement.ItemSlotElement; import de.studiocode.invui.gui.SlotElement.ItemSlotElement;
import de.studiocode.invui.gui.SlotElement.VISlotElement; import de.studiocode.invui.gui.SlotElement.VISlotElement;
import de.studiocode.invui.item.Item; import de.studiocode.invui.item.Item;
import de.studiocode.invui.item.ItemBuilder;
import de.studiocode.invui.util.ArrayUtils; import de.studiocode.invui.util.ArrayUtils;
import de.studiocode.invui.util.Pair; import de.studiocode.invui.util.Pair;
import de.studiocode.invui.virtualinventory.VirtualInventory; 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) { protected void redrawItem(int index, SlotElement element, boolean setItem) {
// put ItemStack in inventory // 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); setInvItem(index, itemStack);
if (setItem) { if (setItem) {

@ -35,14 +35,14 @@ public abstract class MergedWindow extends BaseWindow {
protected void initUpperItems() { protected void initUpperItems() {
for (int i = 0; i < upperInventory.getSize(); i++) { for (int i = 0; i < upperInventory.getSize(); i++) {
SlotElement element = getSlotElement(i); SlotElement element = getSlotElement(i);
if (element != null) redrawItem(i, element, true); redrawItem(i, element, true);
} }
} }
private void initPlayerItems() { private void initPlayerItems() {
for (int i = upperInventory.getSize(); i < upperInventory.getSize() + 36; i++) { for (int i = upperInventory.getSize(); i < upperInventory.getSize() + 36; i++) {
SlotElement element = getSlotElement(i); SlotElement element = getSlotElement(i);
if (element != null) redrawItem(i, element, true); redrawItem(i, element, true);
} }
} }

@ -36,7 +36,7 @@ public abstract class SingleWindow extends BaseWindow {
protected void initItems() { protected void initItems() {
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
SlotElement element = gui.getSlotElement(i); SlotElement element = gui.getSlotElement(i);
if (element != null) redrawItem(i, element, true); redrawItem(i, element, true);
} }
} }