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.KickCommand;
|
||||
import de.shiewk.smoderation.command.MuteCommand;
|
||||
import de.shiewk.smoderation.event.CustomInventoryEvents;
|
||||
import de.shiewk.smoderation.listener.PunishmentListener;
|
||||
import de.shiewk.smoderation.storage.PunishmentContainer;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
@@ -23,6 +24,7 @@ public final class SModeration extends JavaPlugin {
|
||||
@Override
|
||||
public void onEnable() {
|
||||
getPluginManager().registerEvents(new PunishmentListener(), this);
|
||||
getPluginManager().registerEvents(new CustomInventoryEvents(), this);
|
||||
|
||||
final PluginCommand mute = getCommand("mute");
|
||||
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