Added GUI's

Added player settings
Added commands
This commit is contained in:
2022-01-11 23:02:04 +01:00
parent 71c5b76d88
commit bc74d35faa
27 changed files with 750 additions and 21 deletions
@@ -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;
}
}
+20
View File
@@ -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);
}
}