From 24a017d794903926d6f6852702f00a7ee9ca6374 Mon Sep 17 00:00:00 2001 From: M_Viper Date: Wed, 6 Aug 2025 17:59:05 +0000 Subject: [PATCH] src/main/java/de/viper/survivalplus/listeners/SitListener.java aktualisiert --- .../survivalplus/listeners/SitListener.java | 256 +++++++++--------- 1 file changed, 128 insertions(+), 128 deletions(-) diff --git a/src/main/java/de/viper/survivalplus/listeners/SitListener.java b/src/main/java/de/viper/survivalplus/listeners/SitListener.java index 66c232d..a816ca5 100644 --- a/src/main/java/de/viper/survivalplus/listeners/SitListener.java +++ b/src/main/java/de/viper/survivalplus/listeners/SitListener.java @@ -1,128 +1,128 @@ -package de.viper.survivalplus.listeners; - -import de.viper.survivalplus.SurvivalPlus; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.event.block.Action; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; -import java.util.logging.Level; - -public class SitListener implements Listener { - private final SurvivalPlus plugin; - private final Map sittingPlayers = new HashMap<>(); - - public SitListener(SurvivalPlus plugin) { - this.plugin = plugin; - } - - public boolean isSitting(Player player) { - return sittingPlayers.containsKey(player.getUniqueId()); - } - - public void sitPlayer(Player player, Location location) { - if (sittingPlayers.containsKey(player.getUniqueId())) { - return; - } - - // Erstelle einen unsichtbaren ArmorStand als Sitz - ArmorStand armorStand = player.getWorld().spawn(location, ArmorStand.class); - armorStand.setGravity(false); - armorStand.setMarker(true); - armorStand.setInvisible(true); - armorStand.setInvulnerable(true); - armorStand.addPassenger(player); - - sittingPlayers.put(player.getUniqueId(), armorStand); - FileConfiguration lang = plugin.getLangConfig(); - player.sendMessage(lang.getString("sit.success", "§aDu hast dich hingesetzt!")); - plugin.getLogger().log(Level.FINE, "Spieler " + player.getName() + " sitzt bei " + locationToString(location)); - } - - public void standUp(Player player) { - UUID playerId = player.getUniqueId(); - ArmorStand armorStand = sittingPlayers.remove(playerId); - if (armorStand != null) { - armorStand.remove(); - FileConfiguration lang = plugin.getLangConfig(); - player.sendMessage(lang.getString("sit.stand-up", "§aDu bist aufgestanden!")); - plugin.getLogger().log(Level.FINE, "Spieler " + player.getName() + " ist aufgestanden"); - } - } - - @EventHandler - public void onPlayerInteract(PlayerInteractEvent event) { - if (event.getHand() != EquipmentSlot.HAND || event.getAction() != Action.RIGHT_CLICK_BLOCK) { - return; - } - - Player player = event.getPlayer(); - FileConfiguration lang = plugin.getLangConfig(); - - if (!player.hasPermission("survivalplus.sit")) { - player.sendMessage(lang.getString("no-permission", "§cDu hast keine Berechtigung für diesen Befehl!")); - return; - } - - Block block = event.getClickedBlock(); - if (block == null || !isStair(block.getType())) { - return; - } - - // Wenn der Spieler bereits sitzt, stehe auf - if (sittingPlayers.containsKey(player.getUniqueId())) { - standUp(player); - event.setCancelled(true); - return; - } - - // Setze den Spieler genau auf der Treppenstufe - Location location = block.getLocation(); - location.setX(location.getX() + 0.5); - location.setY(location.getY() + 0.5); // Genau auf der Treppenstufe (halbe Blockhöhe) - location.setZ(location.getZ() + 0.5); - sitPlayer(player, location); - event.setCancelled(true); // Verhindere andere Interaktionen mit der Treppe - } - - @EventHandler - public void onPlayerMove(PlayerMoveEvent event) { - Player player = event.getPlayer(); - UUID playerId = player.getUniqueId(); - if (!sittingPlayers.containsKey(playerId)) { - return; - } - - // Prüfe, ob der Spieler sich bewegt hat (nur Positionsänderung, nicht Kopfbewegung) - Location from = event.getFrom(); - Location to = event.getTo(); - if (from.getX() != to.getX() || from.getY() != to.getY() || from.getZ() != to.getZ()) { - standUp(player); - } - } - - @EventHandler - public void onPlayerQuit(PlayerQuitEvent event) { - Player player = event.getPlayer(); - standUp(player); - } - - private boolean isStair(Material material) { - return material.name().endsWith("_STAIRS"); - } - - private String locationToString(Location loc) { - return String.format("x=%.2f, y=%.2f, z=%.2f, world=%s", loc.getX(), loc.getY(), loc.getZ(), loc.getWorld().getName()); - } -} \ No newline at end of file +package de.viper.survivalplus.listeners; + +import de.viper.survivalplus.SurvivalPlus; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.event.block.Action; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.logging.Level; + +public class SitListener implements Listener { + private final SurvivalPlus plugin; + private final Map sittingPlayers = new HashMap<>(); + + public SitListener(SurvivalPlus plugin) { + this.plugin = plugin; + } + + public boolean isSitting(Player player) { + return sittingPlayers.containsKey(player.getUniqueId()); + } + + public void sitPlayer(Player player, Location location) { + if (sittingPlayers.containsKey(player.getUniqueId())) { + return; + } + + // Erstelle einen unsichtbaren ArmorStand als Sitz + ArmorStand armorStand = player.getWorld().spawn(location, ArmorStand.class); + armorStand.setGravity(false); + armorStand.setMarker(true); + armorStand.setInvisible(true); + armorStand.setInvulnerable(true); + armorStand.addPassenger(player); + + sittingPlayers.put(player.getUniqueId(), armorStand); + FileConfiguration lang = plugin.getLangConfig(); + player.sendMessage(lang.getString("sit.success", "§aDu hast dich hingesetzt!")); + plugin.getLogger().log(Level.FINE, "Spieler " + player.getName() + " sitzt bei " + locationToString(location)); + } + + public void standUp(Player player) { + UUID playerId = player.getUniqueId(); + ArmorStand armorStand = sittingPlayers.remove(playerId); + if (armorStand != null) { + armorStand.remove(); + FileConfiguration lang = plugin.getLangConfig(); + player.sendMessage(lang.getString("sit.stand-up", "§aDu bist aufgestanden!")); + plugin.getLogger().log(Level.FINE, "Spieler " + player.getName() + " ist aufgestanden"); + } + } + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) { + if (event.getHand() != EquipmentSlot.HAND || event.getAction() != Action.RIGHT_CLICK_BLOCK) { + return; + } + + Player player = event.getPlayer(); + FileConfiguration lang = plugin.getLangConfig(); + + if (!player.hasPermission("survivalplus.sit")) { + player.sendMessage(lang.getString("no-permission", "§cDu hast keine Berechtigung für diesen Befehl!")); + return; + } + + Block block = event.getClickedBlock(); + if (block == null || !isStair(block.getType())) { + return; + } + + // Wenn der Spieler bereits sitzt, stehe auf + if (sittingPlayers.containsKey(player.getUniqueId())) { + standUp(player); + event.setCancelled(true); + return; + } + + // Setze den Spieler genau auf der Treppenstufe + Location location = block.getLocation(); + location.setX(location.getX() + 0.5); + location.setY(location.getY() + 0.5); // Genau auf der Treppenstufe (halbe Blockhöhe) + location.setZ(location.getZ() + 0.5); + sitPlayer(player, location); + event.setCancelled(true); // Verhindere andere Interaktionen mit der Treppe + } + + @EventHandler + public void onPlayerMove(PlayerMoveEvent event) { + Player player = event.getPlayer(); + UUID playerId = player.getUniqueId(); + if (!sittingPlayers.containsKey(playerId)) { + return; + } + + // Prüfe, ob der Spieler sich bewegt hat (nur Positionsänderung, nicht Kopfbewegung) + Location from = event.getFrom(); + Location to = event.getTo(); + if (from.getX() != to.getX() || from.getY() != to.getY() || from.getZ() != to.getZ()) { + standUp(player); + } + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + Player player = event.getPlayer(); + standUp(player); + } + + private boolean isStair(Material material) { + return material.name().endsWith("_STAIRS"); + } + + private String locationToString(Location loc) { + return String.format("x=%.2f, y=%.2f, z=%.2f, world=%s", loc.getX(), loc.getY(), loc.getZ(), loc.getWorld().getName()); + } +}