Added GUI's
Added player settings Added commands
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package com.alttd.gui;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.Merchant;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
public class DefaultGUI implements GUI {
|
||||
|
||||
protected final Inventory inventory;
|
||||
protected final HashMap<Integer, GUIAction> actions;
|
||||
|
||||
public DefaultGUI(Component name) {
|
||||
inventory = Bukkit.createInventory(null, InventoryType.CHEST, name);
|
||||
actions = new HashMap<>();
|
||||
}
|
||||
|
||||
public void setItem(int slot, @NotNull ItemStack item, @Nullable GUIAction action) {
|
||||
inventory.setItem(slot, item);
|
||||
if (action != null)
|
||||
actions.put(slot, action);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void open(Player player) {
|
||||
player.openInventory(inventory);
|
||||
GUIByUUID.put(player.getUniqueId(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GUIAction getAction(int slot) {
|
||||
return actions.get(slot);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Inventory getInventory() {
|
||||
return inventory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Merchant getMerchant() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.alttd.gui;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.Merchant;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.UUID;
|
||||
|
||||
public interface GUI {
|
||||
HashMap<UUID, GUI> GUIByUUID = new HashMap<>();
|
||||
|
||||
void open(Player player);
|
||||
|
||||
com.alttd.gui.GUIAction getAction(int slot);
|
||||
|
||||
Inventory getInventory();
|
||||
|
||||
Merchant getMerchant();
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.alttd.gui;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public interface GUIAction {
|
||||
void click(Player player);
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.alttd.gui;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
public class GUIListener implements Listener {
|
||||
|
||||
/**
|
||||
* Handles clicking inside a gui
|
||||
* @param event gui click event
|
||||
*/
|
||||
@EventHandler
|
||||
public void onClick(InventoryClickEvent event){
|
||||
if (!(event.getWhoClicked() instanceof Player player)){
|
||||
return;
|
||||
}
|
||||
|
||||
GUI gui = GUI.GUIByUUID.get(player.getUniqueId());
|
||||
if (gui == null || gui.getInventory() == null)
|
||||
return;
|
||||
if (!gui.getInventory().equals(event.getInventory()))
|
||||
return;
|
||||
event.setCancelled(true);
|
||||
GUIAction action = gui.getAction(event.getSlot());
|
||||
|
||||
if (action != null){
|
||||
action.click(player);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onClose(InventoryCloseEvent event) {
|
||||
GUI.GUIByUUID.remove(event.getPlayer().getUniqueId());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onQuit(PlayerQuitEvent event){
|
||||
GUI.GUIByUUID.remove(event.getPlayer().getUniqueId());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.alttd.gui.actions;
|
||||
|
||||
import com.alttd.gui.GUIAction;
|
||||
import com.alttd.gui.windows.ChooseParticleGUI;
|
||||
import com.alttd.objects.APartType;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class EnterParticleMenu implements GUIAction {
|
||||
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
|
||||
|
||||
private final APartType aPartType;
|
||||
|
||||
public EnterParticleMenu(APartType aPartType) {
|
||||
this.aPartType = aPartType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void click(Player player) {
|
||||
ChooseParticleGUI chooseParticleGUI = new ChooseParticleGUI(aPartType, miniMessage.deserialize(aPartType.getName()));
|
||||
chooseParticleGUI.open(player);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.alttd.gui.actions;
|
||||
|
||||
import com.alttd.gui.GUIAction;
|
||||
import com.alttd.gui.windows.OpenParticleGUI;
|
||||
import com.alttd.storage.PlayerSettings;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class ToggleParticlesActive implements GUIAction {
|
||||
|
||||
OpenParticleGUI openParticleGUI;
|
||||
PlayerSettings playerSettings;
|
||||
|
||||
public ToggleParticlesActive(OpenParticleGUI openParticleGUI, PlayerSettings playerSettings) {
|
||||
this.openParticleGUI = openParticleGUI;
|
||||
this.playerSettings = playerSettings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void click(Player player) {
|
||||
playerSettings.toggleParticlesActive();
|
||||
openParticleGUI.updateSettingSlots(playerSettings);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.alttd.gui.actions;
|
||||
|
||||
import com.alttd.gui.GUIAction;
|
||||
import com.alttd.gui.windows.OpenParticleGUI;
|
||||
import com.alttd.storage.PlayerSettings;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class ToggleSeeParticles implements GUIAction {
|
||||
|
||||
OpenParticleGUI openParticleGUI;
|
||||
PlayerSettings playerSettings;
|
||||
|
||||
public ToggleSeeParticles(OpenParticleGUI openParticleGUI, PlayerSettings playerSettings) {
|
||||
this.openParticleGUI = openParticleGUI;
|
||||
this.playerSettings = playerSettings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void click(Player player) {
|
||||
playerSettings.toggleSeeingParticles();
|
||||
openParticleGUI.updateSettingSlots(playerSettings);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.alttd.gui.windows;
|
||||
|
||||
import com.alttd.gui.DefaultGUI;
|
||||
import com.alttd.objects.APartType;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
public class ChooseParticleGUI extends DefaultGUI {
|
||||
public ChooseParticleGUI(APartType aPartType, Component name) {
|
||||
super(name);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package com.alttd.gui.windows;
|
||||
|
||||
import com.alttd.config.Config;
|
||||
import com.alttd.gui.DefaultGUI;
|
||||
import com.alttd.gui.actions.EnterParticleMenu;
|
||||
import com.alttd.gui.actions.ToggleParticlesActive;
|
||||
import com.alttd.gui.actions.ToggleSeeParticles;
|
||||
import com.alttd.objects.APartType;
|
||||
import com.alttd.storage.PlayerSettings;
|
||||
import com.alttd.util.Logger;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.minimessage.Template;
|
||||
import net.kyori.adventure.text.minimessage.template.TemplateResolver;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class OpenParticleGUI extends DefaultGUI {
|
||||
|
||||
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
|
||||
private static final Component GUIName;
|
||||
private static final ItemStack seeOthersOn, seeOthersOff, particlesOn, particlesOff;
|
||||
|
||||
public OpenParticleGUI(Player player) {
|
||||
super(GUIName);
|
||||
int i = 10;
|
||||
for (APartType particlesType : APartType.values()) {
|
||||
if (i > 25) {
|
||||
Logger.warning("Unable to add the rest of the particles to the GUI (ran out of space)");
|
||||
break;
|
||||
}
|
||||
if (i == 17)
|
||||
i = 19;
|
||||
setItem(i++, particlesType.getItemStack(), new EnterParticleMenu(particlesType));
|
||||
}
|
||||
PlayerSettings playerSettings = PlayerSettings.getPlayer(player.getUniqueId());
|
||||
if (playerSettings == null)
|
||||
return;
|
||||
setItem(17, playerSettings.isSeeingParticles() ? seeOthersOn : seeOthersOff, new ToggleSeeParticles(this, playerSettings));
|
||||
setItem(26, playerSettings.hasActiveParticles() ? particlesOn : particlesOff, new ToggleParticlesActive(this, playerSettings));
|
||||
}
|
||||
|
||||
public void updateSettingSlots(PlayerSettings playerSettings) {
|
||||
setItem(17, playerSettings.isSeeingParticles() ? seeOthersOn : seeOthersOff, new ToggleSeeParticles(this, playerSettings));
|
||||
setItem(26, playerSettings.hasActiveParticles() ? particlesOn : particlesOff, new ToggleParticlesActive(this, playerSettings));
|
||||
}
|
||||
|
||||
static { //Init gui name
|
||||
GUIName = miniMessage.deserialize(Config.PARTICLE_TYPE_GUI_NAME);
|
||||
}
|
||||
|
||||
static { //init APart items
|
||||
Arrays.stream(APartType.values()).forEach(particlesType -> {
|
||||
ItemStack itemStack = new ItemStack(particlesType.getMaterial());
|
||||
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||
itemMeta.displayName(miniMessage.deserialize(Config.PARTICLE_TYPE_BUTTON_NAME,
|
||||
TemplateResolver.resolving(Template.template("name", particlesType.getName()))));
|
||||
itemStack.setItemMeta(itemMeta);
|
||||
particlesType.setItemStack(itemStack);
|
||||
});
|
||||
}
|
||||
|
||||
static { //init setting buttons
|
||||
ItemMeta itemMeta;
|
||||
|
||||
seeOthersOn = new ItemStack(Material.PLAYER_HEAD);
|
||||
itemMeta = seeOthersOn.getItemMeta();
|
||||
itemMeta.displayName(miniMessage.deserialize(Config.SEE_OTHERS_ON));
|
||||
itemMeta.displayName(miniMessage.deserialize(Config.SEE_OTHERS_ON_DESC));
|
||||
seeOthersOn.setItemMeta(itemMeta);
|
||||
|
||||
seeOthersOff = new ItemStack(Material.SKELETON_SKULL);
|
||||
itemMeta = seeOthersOff.getItemMeta();
|
||||
itemMeta.displayName(miniMessage.deserialize(Config.SEE_OTHERS_OFF));
|
||||
itemMeta.displayName(miniMessage.deserialize(Config.SEE_OTHERS_OFF_DESC));
|
||||
seeOthersOff.setItemMeta(itemMeta);
|
||||
|
||||
particlesOn = new ItemStack(Material.PLAYER_HEAD);
|
||||
itemMeta = particlesOn.getItemMeta();
|
||||
itemMeta.displayName(miniMessage.deserialize(Config.PARTICLES_ON));
|
||||
itemMeta.displayName(miniMessage.deserialize(Config.PARTICLES_ON_DESC));
|
||||
particlesOn.setItemMeta(itemMeta);
|
||||
|
||||
particlesOff = new ItemStack(Material.PLAYER_HEAD);
|
||||
itemMeta = particlesOff.getItemMeta();
|
||||
itemMeta.displayName(miniMessage.deserialize(Config.PARTICLES_OFF));
|
||||
itemMeta.displayName(miniMessage.deserialize(Config.PARTICLES_OFF_DESC));
|
||||
particlesOff.setItemMeta(itemMeta);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user