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.challenges.ChallengeCommand;
|
||||||
import com.alttd.cometskyblock.commands.island.IslandCommand;
|
import com.alttd.cometskyblock.commands.island.IslandCommand;
|
||||||
import com.alttd.cometskyblock.configuration.*;
|
import com.alttd.cometskyblock.configuration.*;
|
||||||
|
import com.alttd.cometskyblock.gui.GUIListener;
|
||||||
import com.alttd.cometskyblock.listeners.BedListener;
|
import com.alttd.cometskyblock.listeners.BedListener;
|
||||||
import com.alttd.cometskyblock.listeners.CobbestoneGeneratorListener;
|
import com.alttd.cometskyblock.listeners.CobbestoneGeneratorListener;
|
||||||
import com.alttd.cometskyblock.listeners.PlayerJoinListener;
|
import com.alttd.cometskyblock.listeners.PlayerJoinListener;
|
||||||
|
|
@ -82,11 +83,11 @@ public class CometSkyBlockPlugin extends JavaPlugin implements CometSkyBlockAPI
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadEventListeners() {
|
public void loadEventListeners() {
|
||||||
// TODO - Use reflection to load all of these
|
|
||||||
final PluginManager pm = getServer().getPluginManager();
|
final PluginManager pm = getServer().getPluginManager();
|
||||||
pm.registerEvents(new PlayerJoinListener(this), this);
|
pm.registerEvents(new PlayerJoinListener(this), this);
|
||||||
pm.registerEvents(new BedListener(this), this);
|
pm.registerEvents(new BedListener(this), this);
|
||||||
pm.registerEvents(new CobbestoneGeneratorListener(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