Fixed background not working for nested GUIs

This commit is contained in:
NichtStudioCode 2022-04-23 18:18:46 +02:00
parent bba2a419b1
commit 11dab1eba7
2 changed files with 29 additions and 0 deletions

@ -5,6 +5,8 @@ import de.studiocode.invui.item.ItemProvider;
import de.studiocode.invui.virtualinventory.VirtualInventory;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public interface SlotElement {
@ -119,6 +121,20 @@ public interface SlotElement {
}
}
public List<GUI> getGuiList() {
ArrayList<GUI> guis = new ArrayList<>();
LinkedSlotElement element = this;
while (true) {
guis.add(element.getGui());
SlotElement below = element.getGui().getSlotElement(element.getSlotIndex());
if (below instanceof LinkedSlotElement)
element = (LinkedSlotElement) below;
else break;
}
return guis;
}
@Override
public ItemStack getItemStack(UUID viewerUUID) {
SlotElement holdingElement = getHoldingElement();

@ -5,6 +5,7 @@ import de.studiocode.invui.InvUI;
import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.SlotElement;
import de.studiocode.invui.gui.SlotElement.ItemSlotElement;
import de.studiocode.invui.gui.SlotElement.LinkedSlotElement;
import de.studiocode.invui.gui.SlotElement.VISlotElement;
import de.studiocode.invui.item.Item;
import de.studiocode.invui.item.ItemProvider;
@ -73,6 +74,18 @@ public abstract class BaseWindow implements Window {
}
} else if (element == null || (element instanceof VISlotElement && element.getItemStack(viewerUUID) == null)) {
ItemProvider background = getGuiAt(index).getFirst().getBackground();
itemStack = background == null ? null : background.getFor(viewerUUID);
} else if (element instanceof LinkedSlotElement && element.getHoldingElement() == null) {
ItemProvider background = null;
List<GUI> guis = ((LinkedSlotElement) element).getGuiList();
guis.add(0, getGuiAt(index).getFirst());
for (int i = guis.size() - 1; i >= 0; i--) {
background = guis.get(i).getBackground();
if (background != null) break;
}
itemStack = background == null ? null : background.getFor(viewerUUID);
} else itemStack = element.getItemStack(viewerUUID);
setInvItem(index, itemStack);