Add a base for GUI to manage aspects of the island
This commit is contained in:
parent
b7f5b15534
commit
ef411ac9a1
|
|
@ -3,6 +3,7 @@ package com.alttd.cometskyblock;
|
|||
import com.alttd.cometskyblock.commands.challenges.ChallengeCommand;
|
||||
import com.alttd.cometskyblock.commands.island.IslandCommand;
|
||||
import com.alttd.cometskyblock.configuration.*;
|
||||
import com.alttd.cometskyblock.gui.GUIListener;
|
||||
import com.alttd.cometskyblock.listeners.BedListener;
|
||||
import com.alttd.cometskyblock.listeners.CobbestoneGeneratorListener;
|
||||
import com.alttd.cometskyblock.listeners.PlayerJoinListener;
|
||||
|
|
@ -82,11 +83,11 @@ public class CometSkyBlockPlugin extends JavaPlugin implements CometSkyBlockAPI
|
|||
}
|
||||
|
||||
public void loadEventListeners() {
|
||||
// TODO - Use reflection to load all of these
|
||||
final PluginManager pm = getServer().getPluginManager();
|
||||
pm.registerEvents(new PlayerJoinListener(this), this);
|
||||
pm.registerEvents(new BedListener(this), this);
|
||||
pm.registerEvents(new CobbestoneGeneratorListener(this), this);
|
||||
pm.registerEvents(new GUIListener(this), this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
package com.alttd.cometskyblock.challenges;
|
||||
|
||||
import com.alttd.cometskyblock.gui.GUIInventory;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
public class ChallengesGUI extends GUIInventory {
|
||||
|
||||
public ChallengesGUI() {
|
||||
super();
|
||||
}
|
||||
@Override
|
||||
protected Inventory createInventory() { // TODO - config
|
||||
return Bukkit.createInventory(this, 54, MiniMessage.miniMessage().deserialize("<red>GUI"));
|
||||
}
|
||||
}
|
||||
15
plugin/src/main/java/com/alttd/cometskyblock/gui/GUI.java
Normal file
15
plugin/src/main/java/com/alttd/cometskyblock/gui/GUI.java
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
package com.alttd.cometskyblock.gui;
|
||||
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||
import org.bukkit.event.inventory.InventoryOpenEvent;
|
||||
|
||||
public interface GUI {
|
||||
|
||||
void onClick(InventoryClickEvent event);
|
||||
|
||||
void onOpen(InventoryOpenEvent event);
|
||||
|
||||
void onClose(InventoryCloseEvent event);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.alttd.cometskyblock.gui;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
@Getter
|
||||
public class GUIButton {
|
||||
|
||||
private Function<Player, ItemStack> iconCreator;
|
||||
private Consumer<InventoryClickEvent> eventConsumer;
|
||||
|
||||
public GUIButton creator(Function<Player, ItemStack> iconCreator) {
|
||||
this.iconCreator = iconCreator;
|
||||
return this;
|
||||
}
|
||||
|
||||
public GUIButton consumer(Consumer<InventoryClickEvent> eventConsumer) {
|
||||
this.eventConsumer = eventConsumer;
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
package com.alttd.cometskyblock.gui;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||
import org.bukkit.event.inventory.InventoryOpenEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public abstract class GUIInventory implements GUI, InventoryHolder {
|
||||
|
||||
private final Inventory inventory;
|
||||
private final Map<Integer, GUIButton> buttons = new HashMap<>();
|
||||
int currentSlot = 0;
|
||||
int pageIndex = 0;
|
||||
|
||||
public GUIInventory() {
|
||||
this.inventory = this.createInventory();
|
||||
}
|
||||
|
||||
protected abstract Inventory createInventory();
|
||||
|
||||
@Override
|
||||
public @NotNull Inventory getInventory() {
|
||||
return inventory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(InventoryClickEvent event) {
|
||||
int slot = event.getSlot();
|
||||
GUIButton button = this.buttons.get(slot);
|
||||
if (button != null) {
|
||||
event.setCancelled(true);
|
||||
button.eventConsumer().accept(event);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onOpen(InventoryOpenEvent event) {
|
||||
this.decorate((Player) event.getPlayer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClose(InventoryCloseEvent event) {
|
||||
|
||||
}
|
||||
|
||||
public void addButton(int slot, GUIButton button) {
|
||||
this.buttons.put(slot, button);
|
||||
}
|
||||
|
||||
public void decorate(Player player) {
|
||||
this.buttons.forEach((slot, button) -> {
|
||||
ItemStack icon = button.iconCreator().apply(player);
|
||||
this.inventory.setItem(slot, icon);
|
||||
});
|
||||
}
|
||||
|
||||
public GUIButton createMenuButton(Material material, String name, List<String> lore, Consumer<InventoryClickEvent> eventConsumer) {
|
||||
return new GUIButton()
|
||||
.creator(player -> createGuiItem(material, name, lore))
|
||||
.consumer(eventConsumer);
|
||||
}
|
||||
|
||||
public ItemStack createGuiItem(Material material, String name, List<String> lore) {
|
||||
ItemStack item = new ItemStack(material, 1);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ITEM_SPECIFICS, ItemFlag.HIDE_ENCHANTS);
|
||||
meta.displayName(MiniMessage.miniMessage().deserialize(name));
|
||||
|
||||
List<Component> metaLore = new ArrayList<>();
|
||||
for (String loreString : lore) {
|
||||
metaLore.add(MiniMessage.miniMessage().deserialize(loreString));
|
||||
}
|
||||
|
||||
meta.lore(metaLore);
|
||||
item.setItemMeta(meta);
|
||||
return item;
|
||||
}
|
||||
|
||||
void makeMenuBar() {
|
||||
for (int i = inventory.getSize() - 9; i < inventory.getSize(); ++i) {
|
||||
addButton(i, createMenuButton(Material.BLACK_STAINED_GLASS_PANE, "", new ArrayList<>(), event -> {}));
|
||||
}
|
||||
}
|
||||
|
||||
public void open(Player player) {
|
||||
if (player != null) {
|
||||
player.openInventory(inventory);
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean addItem(GUIButton guiButton) {
|
||||
if (currentSlot == inventory.getSize() - 9)
|
||||
return false;
|
||||
|
||||
addButton(currentSlot, guiButton);
|
||||
currentSlot++;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
package com.alttd.cometskyblock.gui;
|
||||
|
||||
import com.alttd.cometskyblock.CometSkyBlockPlugin;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||
import org.bukkit.event.inventory.InventoryOpenEvent;
|
||||
|
||||
/**
|
||||
* Basically a handler to redirect events to our GUI implementations
|
||||
*/
|
||||
public class GUIListener implements Listener {
|
||||
|
||||
protected final CometSkyBlockPlugin plugin;
|
||||
|
||||
public GUIListener(CometSkyBlockPlugin plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onClick(InventoryClickEvent event) {
|
||||
if (!(event.getWhoClicked() instanceof Player))
|
||||
return;
|
||||
|
||||
if (!(event.getView().getTopInventory().getHolder() instanceof GUIInventory gui))
|
||||
return;
|
||||
|
||||
if ((event.getView().getBottomInventory().equals(event.getClickedInventory())))
|
||||
return;
|
||||
|
||||
if (event.getClick() == ClickType.NUMBER_KEY) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
gui.onClick(event);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onOpen(InventoryOpenEvent event) {
|
||||
if (!(event.getPlayer() instanceof Player))
|
||||
return;
|
||||
|
||||
if (!(event.getView().getTopInventory().getHolder() instanceof GUIInventory gui))
|
||||
return;
|
||||
|
||||
gui.onOpen(event);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onClose(InventoryCloseEvent event) {
|
||||
if (!(event.getPlayer() instanceof Player))
|
||||
return;
|
||||
|
||||
if (!(event.getView().getTopInventory().getHolder() instanceof GUIInventory gui))
|
||||
return;
|
||||
|
||||
gui.onClose(event);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package com.alttd.cometskyblock.island.gui;
|
||||
|
||||
import com.alttd.cometskyblock.gui.GUIInventory;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
public class IslandGUI extends GUIInventory {
|
||||
|
||||
public IslandGUI() {
|
||||
super();
|
||||
}
|
||||
@Override
|
||||
protected Inventory createInventory() { // TODO - config
|
||||
return Bukkit.createInventory(this, 54, MiniMessage.miniMessage().deserialize("<red>GUI"));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package com.alttd.cometskyblock.island.gui;
|
||||
|
||||
import com.alttd.cometskyblock.gui.GUIInventory;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
public class MembersGUI extends GUIInventory {
|
||||
|
||||
public MembersGUI() {
|
||||
super();
|
||||
}
|
||||
@Override
|
||||
protected Inventory createInventory() { // TODO - config
|
||||
return Bukkit.createInventory(this, 54, MiniMessage.miniMessage().deserialize("<red>GUI"));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package com.alttd.cometskyblock.island.gui;
|
||||
|
||||
import com.alttd.cometskyblock.gui.GUIInventory;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
public class SettingsGUI extends GUIInventory {
|
||||
|
||||
public SettingsGUI() {
|
||||
super();
|
||||
}
|
||||
@Override
|
||||
protected Inventory createInventory() { // TODO - config
|
||||
return Bukkit.createInventory(this, 54, MiniMessage.miniMessage().deserialize("<red>GUI"));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package com.alttd.cometskyblock.island.gui;
|
||||
|
||||
import com.alttd.cometskyblock.gui.GUIInventory;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
public class UpgradesGUI extends GUIInventory {
|
||||
|
||||
public UpgradesGUI() {
|
||||
super();
|
||||
}
|
||||
@Override
|
||||
protected Inventory createInventory() { // TODO - config
|
||||
return Bukkit.createInventory(this, 54, MiniMessage.miniMessage().deserialize("<red>GUI"));
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user