mirror of
https://github.com/Shiewk/SModeration.git
synced 2026-04-28 05:54:16 +02:00
Support for custom inventories
This commit is contained in:
@@ -3,6 +3,7 @@ package de.shiewk.smoderation;
|
|||||||
import de.shiewk.smoderation.command.BanCommand;
|
import de.shiewk.smoderation.command.BanCommand;
|
||||||
import de.shiewk.smoderation.command.KickCommand;
|
import de.shiewk.smoderation.command.KickCommand;
|
||||||
import de.shiewk.smoderation.command.MuteCommand;
|
import de.shiewk.smoderation.command.MuteCommand;
|
||||||
|
import de.shiewk.smoderation.event.CustomInventoryEvents;
|
||||||
import de.shiewk.smoderation.listener.PunishmentListener;
|
import de.shiewk.smoderation.listener.PunishmentListener;
|
||||||
import de.shiewk.smoderation.storage.PunishmentContainer;
|
import de.shiewk.smoderation.storage.PunishmentContainer;
|
||||||
import org.bukkit.command.PluginCommand;
|
import org.bukkit.command.PluginCommand;
|
||||||
@@ -23,6 +24,7 @@ public final class SModeration extends JavaPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
getPluginManager().registerEvents(new PunishmentListener(), this);
|
getPluginManager().registerEvents(new PunishmentListener(), this);
|
||||||
|
getPluginManager().registerEvents(new CustomInventoryEvents(), this);
|
||||||
|
|
||||||
final PluginCommand mute = getCommand("mute");
|
final PluginCommand mute = getCommand("mute");
|
||||||
assert mute != null;
|
assert mute != null;
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package de.shiewk.smoderation.event;
|
||||||
|
|
||||||
|
import de.shiewk.smoderation.inventory.CustomInventory;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
|
|
||||||
|
public class CustomInventoryEvents implements Listener {
|
||||||
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
|
public void onInventoryClick(InventoryClickEvent event){
|
||||||
|
if (event.getInventory().getHolder() instanceof CustomInventory customInventory){
|
||||||
|
customInventory.click(event.getCurrentItem());
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package de.shiewk.smoderation.inventory;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.TextDecoration;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public interface CustomInventory extends InventoryHolder {
|
||||||
|
|
||||||
|
void refresh();
|
||||||
|
void open();
|
||||||
|
void click(ItemStack stack);
|
||||||
|
|
||||||
|
default ItemStack createEmptyStack(){
|
||||||
|
ItemStack stack = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
|
||||||
|
stack.editMeta(meta -> meta.displayName(Component.empty()));
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
default Component applyFormatting(Component component){
|
||||||
|
return component.decoration(TextDecoration.ITALIC, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
package de.shiewk.smoderation.inventory;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public abstract class PageableCustomInventory implements CustomInventory {
|
||||||
|
public abstract int lastPage();
|
||||||
|
public abstract void switchPage();
|
||||||
|
private ItemStack previousStack = null;
|
||||||
|
private ItemStack nextStack = null;
|
||||||
|
private int page = 0;
|
||||||
|
|
||||||
|
public int getPage(){
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void click(ItemStack stack) {
|
||||||
|
if (stack != null){
|
||||||
|
if (stack.equals(previousStack)){
|
||||||
|
previousPage();
|
||||||
|
} else if (stack.equals(nextStack)) {
|
||||||
|
nextPage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void nextPage(){
|
||||||
|
if (page < lastPage()){
|
||||||
|
page++;
|
||||||
|
switchPage();
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void previousPage(){
|
||||||
|
if (page > 0){
|
||||||
|
page--;
|
||||||
|
switchPage();
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack createPreviousPageStack(){
|
||||||
|
boolean allowed = page > 0;
|
||||||
|
TextColor color = allowed ? NamedTextColor.GREEN : NamedTextColor.RED;
|
||||||
|
int skip = allowed ? page : page+1;
|
||||||
|
ItemStack stack = new ItemStack(allowed ? Material.GREEN_STAINED_GLASS_PANE : Material.RED_STAINED_GLASS_PANE);
|
||||||
|
stack.editMeta(meta -> meta.displayName(applyFormatting(Component.text("Previous page (%s/%s)".formatted(skip, lastPage()+1)).color(color))));
|
||||||
|
previousStack = stack;
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack createNextPageStack(){
|
||||||
|
boolean allowed = page < lastPage();
|
||||||
|
TextColor color = allowed ? NamedTextColor.GREEN : NamedTextColor.RED;
|
||||||
|
int skip = allowed ? page+2 : page+1;
|
||||||
|
ItemStack stack = new ItemStack(allowed ? Material.GREEN_STAINED_GLASS_PANE : Material.RED_STAINED_GLASS_PANE);
|
||||||
|
stack.editMeta(meta -> meta.displayName(applyFormatting(Component.text("Next page (%s/%s)".formatted(skip, lastPage()+1)).color(color))));
|
||||||
|
nextStack = stack;
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user