src/main/java/viper/MotionSensorGUI.java aktualisiert

This commit is contained in:
2025-08-22 11:11:59 +00:00
parent dc173691a4
commit b6b44d25c5

View File

@@ -1,128 +1,153 @@
package viper; package viper;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.Inventory; import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.Arrays;
import java.util.Arrays;
public class MotionSensorGUI implements Listener {
private final ButtonControl plugin; public class MotionSensorGUI implements Listener {
private final DataManager dataManager; private final ButtonControl plugin;
private final ConfigManager configManager; private final DataManager dataManager;
private final String blockLocation; private final ConfigManager configManager;
private final String buttonId; private final String blockLocation;
private final Player player; private final String buttonId;
private final Player player;
public MotionSensorGUI(ButtonControl plugin, Player player, String blockLocation, String buttonId) { private final Inventory inv;
this.plugin = plugin;
this.dataManager = plugin.getDataManager(); public MotionSensorGUI(ButtonControl plugin, Player player, String blockLocation, String buttonId) {
this.configManager = plugin.getConfigManager(); this.plugin = plugin;
this.blockLocation = blockLocation; this.dataManager = plugin.getDataManager();
this.buttonId = buttonId; this.configManager = plugin.getConfigManager();
this.player = player; this.blockLocation = blockLocation;
plugin.getServer().getPluginManager().registerEvents(this, plugin); this.buttonId = buttonId;
} this.player = player;
this.inv = Bukkit.createInventory(player, 27, "Bewegungsmelder Einstellungen");
public void open() { plugin.getServer().getPluginManager().registerEvents(this, plugin);
Inventory inv = Bukkit.createInventory(player, 27, "Bewegungsmelder Einstellungen"); }
// Aktuelle Werte aus DataManager holen oder Standardwerte aus Config public void open() {
double radius = dataManager.getMotionSensorRadius(blockLocation); // Aktuelle Werte aus DataManager holen oder Standardwerte aus Config
if (radius == -1) radius = configManager.getConfig().getDouble("motion-detection-radius", 5.0); double radius = dataManager.getMotionSensorRadius(blockLocation);
long delay = dataManager.getMotionSensorDelay(blockLocation); if (radius == -1) radius = configManager.getConfig().getDouble("motion-detection-radius", 5.0);
if (delay == -1) delay = configManager.getConfig().getLong("motion-close-delay-ms", 5000L); long delay = dataManager.getMotionSensorDelay(blockLocation);
if (delay == -1) delay = configManager.getConfig().getLong("motion-close-delay-ms", 5000L);
// Items für die GUI
ItemStack radiusItem = new ItemStack(Material.COMPASS); // Füllitems für leere Slots (graue Glasscheiben)
ItemMeta radiusMeta = radiusItem.getItemMeta(); ItemStack filler = new ItemStack(Material.GRAY_STAINED_GLASS_PANE);
radiusMeta.setDisplayName(ChatColor.GREEN + "Erkennungsradius: " + radius + " Blöcke"); ItemMeta fillerMeta = filler.getItemMeta();
radiusMeta.setLore(Arrays.asList( fillerMeta.setDisplayName(ChatColor.RESET + "");
ChatColor.GRAY + "Linksklick: +0.5 Blöcke", filler.setItemMeta(fillerMeta);
ChatColor.GRAY + "Rechtsklick: -0.5 Blöcke" for (int i = 0; i < 27; i++) {
)); inv.setItem(i, filler);
radiusItem.setItemMeta(radiusMeta); }
ItemStack delayItem = new ItemStack(Material.CLOCK); // Items für die GUI
ItemMeta delayMeta = delayItem.getItemMeta(); ItemStack radiusItem = new ItemStack(Material.COMPASS);
delayMeta.setDisplayName(ChatColor.GREEN + "Schließverzögerung: " + (delay / 1000.0) + " Sekunden"); ItemMeta radiusMeta = radiusItem.getItemMeta();
delayMeta.setLore(Arrays.asList( radiusMeta.setDisplayName(ChatColor.GREEN + "Erkennungsradius: " + radius + " Blöcke");
ChatColor.GRAY + "Linksklick: +1 Sekunde", radiusMeta.setLore(Arrays.asList(
ChatColor.GRAY + "Rechtsklick: -1 Sekunde" ChatColor.GRAY + "Linksklick: +0.5 Blöcke",
)); ChatColor.GRAY + "Rechtsklick: -0.5 Blöcke"
delayItem.setItemMeta(delayMeta); ));
radiusItem.setItemMeta(radiusMeta);
ItemStack saveItem = new ItemStack(Material.EMERALD);
ItemMeta saveMeta = saveItem.getItemMeta(); ItemStack delayItem = new ItemStack(Material.CLOCK);
saveMeta.setDisplayName(ChatColor.GREEN + "Speichern und Schließen"); ItemMeta delayMeta = delayItem.getItemMeta();
saveItem.setItemMeta(saveMeta); delayMeta.setDisplayName(ChatColor.GREEN + "Schließverzögerung: " + (delay / 1000.0) + " Sekunden");
delayMeta.setLore(Arrays.asList(
// Items in die GUI setzen ChatColor.GRAY + "Linksklick: +1 Sekunde",
inv.setItem(11, radiusItem); ChatColor.GRAY + "Rechtsklick: -1 Sekunde"
inv.setItem(15, delayItem); ));
inv.setItem(22, saveItem); delayItem.setItemMeta(delayMeta);
player.openInventory(inv); ItemStack saveItem = new ItemStack(Material.EMERALD);
} ItemMeta saveMeta = saveItem.getItemMeta();
saveMeta.setDisplayName(ChatColor.GREEN + "Speichern und Schließen");
@EventHandler saveItem.setItemMeta(saveMeta);
public void onInventoryClick(InventoryClickEvent event) {
if (!event.getInventory().getHolder().equals(player)) return; // Items in die GUI setzen
if (event.getCurrentItem() == null) return; inv.setItem(11, radiusItem);
event.setCancelled(true); inv.setItem(15, delayItem);
inv.setItem(22, saveItem);
ItemStack clicked = event.getCurrentItem();
double radius = dataManager.getMotionSensorRadius(blockLocation); player.openInventory(inv);
if (radius == -1) radius = configManager.getConfig().getDouble("motion-detection-radius", 5.0); }
long delay = dataManager.getMotionSensorDelay(blockLocation);
if (delay == -1) delay = configManager.getConfig().getLong("motion-close-delay-ms", 5000L); @EventHandler
public void onInventoryClick(InventoryClickEvent event) {
if (clicked.getType() == Material.COMPASS) { if (!event.getInventory().equals(inv) || !event.getWhoClicked().equals(player)) return;
if (event.isLeftClick()) { if (event.getCurrentItem() == null) return;
radius = Math.min(radius + 0.5, 20.0); // Max. Radius: 20 Blöcke
} else if (event.isRightClick()) { event.setCancelled(true); // Alle Klicks standardmäßig abbrechen
radius = Math.max(radius - 0.5, 0.5); // Min. Radius: 0.5 Blöcke
} int slot = event.getRawSlot();
dataManager.setMotionSensorRadius(blockLocation, radius); ItemStack clicked = event.getCurrentItem();
ItemMeta meta = clicked.getItemMeta();
meta.setDisplayName(ChatColor.GREEN + "Erkennungsradius: " + radius + " Blöcke"); // Nur Klicks auf Slots 11, 15 und 22 verarbeiten
meta.setLore(Arrays.asList( if (slot != 11 && slot != 15 && slot != 22) return;
ChatColor.GRAY + "Linksklick: +0.5 Blöcke",
ChatColor.GRAY + "Rechtsklick: -0.5 Blöcke" double radius = dataManager.getMotionSensorRadius(blockLocation);
)); if (radius == -1) radius = configManager.getConfig().getDouble("motion-detection-radius", 5.0);
clicked.setItemMeta(meta); long delay = dataManager.getMotionSensorDelay(blockLocation);
} else if (clicked.getType() == Material.CLOCK) { if (delay == -1) delay = configManager.getConfig().getLong("motion-close-delay-ms", 5000L);
if (event.isLeftClick()) {
delay = Math.min(delay + 1000, 30000); // Max. Verzögerung: 30 Sekunden if (clicked.getType() == Material.COMPASS && slot == 11) {
} else if (event.isRightClick()) { if (event.isLeftClick()) {
delay = Math.max(delay - 1000, 1000); // Min. Verzögerung: 1 Sekunde radius = Math.min(radius + 0.5, 20.0); // Max. Radius: 20 Blöcke
} } else if (event.isRightClick()) {
dataManager.setMotionSensorDelay(blockLocation, delay); radius = Math.max(radius - 0.5, 0.5); // Min. Radius: 0.5 Blöcke
ItemMeta meta = clicked.getItemMeta(); }
meta.setDisplayName(ChatColor.GREEN + "Schließverzögerung: " + (delay / 1000.0) + " Sekunden"); dataManager.setMotionSensorRadius(blockLocation, radius);
meta.setLore(Arrays.asList( ItemMeta meta = clicked.getItemMeta();
ChatColor.GRAY + "Linksklick: +1 Sekunde", meta.setDisplayName(ChatColor.GREEN + "Erkennungsradius: " + radius + " Blöcke");
ChatColor.GRAY + "Rechtsklick: -1 Sekunde" meta.setLore(Arrays.asList(
)); ChatColor.GRAY + "Linksklick: +0.5 Blöcke",
clicked.setItemMeta(meta); ChatColor.GRAY + "Rechtsklick: -0.5 Blöcke"
} else if (clicked.getType() == Material.EMERALD) { ));
player.closeInventory(); clicked.setItemMeta(meta);
} inv.setItem(11, clicked);
} } else if (clicked.getType() == Material.CLOCK && slot == 15) {
if (event.isLeftClick()) {
@EventHandler delay = Math.min(delay + 1000, 30000); // Max. Verzögerung: 30 Sekunden
public void onInventoryClose(InventoryCloseEvent event) { } else if (event.isRightClick()) {
if (event.getPlayer().equals(player)) { delay = Math.max(delay - 1000, 1000); // Min. Verzögerung: 1 Sekunde
InventoryClickEvent.getHandlerList().unregister(this); }
InventoryCloseEvent.getHandlerList().unregister(this); dataManager.setMotionSensorDelay(blockLocation, delay);
} ItemMeta meta = clicked.getItemMeta();
} meta.setDisplayName(ChatColor.GREEN + "Schließverzögerung: " + (delay / 1000.0) + " Sekunden");
meta.setLore(Arrays.asList(
ChatColor.GRAY + "Linksklick: +1 Sekunde",
ChatColor.GRAY + "Rechtsklick: -1 Sekunde"
));
clicked.setItemMeta(meta);
inv.setItem(15, clicked);
} else if (clicked.getType() == Material.EMERALD && slot == 22) {
player.closeInventory();
}
}
@EventHandler
public void onInventoryDrag(InventoryDragEvent event) {
if (!event.getInventory().equals(inv) || !event.getWhoClicked().equals(player)) return;
event.setCancelled(true); // Verhindert Drag-and-Drop
}
@EventHandler
public void onInventoryClose(InventoryCloseEvent event) {
if (event.getPlayer().equals(player) && event.getInventory().equals(inv)) {
InventoryClickEvent.getHandlerList().unregister(this);
InventoryDragEvent.getHandlerList().unregister(this);
InventoryCloseEvent.getHandlerList().unregister(this);
}
}
} }