src/main/java/de/viper/survivalplus/listeners/SitListener.java aktualisiert
This commit is contained in:
@@ -1,128 +1,128 @@
|
|||||||
package de.viper.survivalplus.listeners;
|
package de.viper.survivalplus.listeners;
|
||||||
|
|
||||||
import de.viper.survivalplus.SurvivalPlus;
|
import de.viper.survivalplus.SurvivalPlus;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.ArmorStand;
|
import org.bukkit.entity.ArmorStand;
|
||||||
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.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.inventory.EquipmentSlot;
|
import org.bukkit.inventory.EquipmentSlot;
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
public class SitListener implements Listener {
|
public class SitListener implements Listener {
|
||||||
private final SurvivalPlus plugin;
|
private final SurvivalPlus plugin;
|
||||||
private final Map<UUID, ArmorStand> sittingPlayers = new HashMap<>();
|
private final Map<UUID, ArmorStand> sittingPlayers = new HashMap<>();
|
||||||
|
|
||||||
public SitListener(SurvivalPlus plugin) {
|
public SitListener(SurvivalPlus plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSitting(Player player) {
|
public boolean isSitting(Player player) {
|
||||||
return sittingPlayers.containsKey(player.getUniqueId());
|
return sittingPlayers.containsKey(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sitPlayer(Player player, Location location) {
|
public void sitPlayer(Player player, Location location) {
|
||||||
if (sittingPlayers.containsKey(player.getUniqueId())) {
|
if (sittingPlayers.containsKey(player.getUniqueId())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Erstelle einen unsichtbaren ArmorStand als Sitz
|
// Erstelle einen unsichtbaren ArmorStand als Sitz
|
||||||
ArmorStand armorStand = player.getWorld().spawn(location, ArmorStand.class);
|
ArmorStand armorStand = player.getWorld().spawn(location, ArmorStand.class);
|
||||||
armorStand.setGravity(false);
|
armorStand.setGravity(false);
|
||||||
armorStand.setMarker(true);
|
armorStand.setMarker(true);
|
||||||
armorStand.setInvisible(true);
|
armorStand.setInvisible(true);
|
||||||
armorStand.setInvulnerable(true);
|
armorStand.setInvulnerable(true);
|
||||||
armorStand.addPassenger(player);
|
armorStand.addPassenger(player);
|
||||||
|
|
||||||
sittingPlayers.put(player.getUniqueId(), armorStand);
|
sittingPlayers.put(player.getUniqueId(), armorStand);
|
||||||
FileConfiguration lang = plugin.getLangConfig();
|
FileConfiguration lang = plugin.getLangConfig();
|
||||||
player.sendMessage(lang.getString("sit.success", "§aDu hast dich hingesetzt!"));
|
player.sendMessage(lang.getString("sit.success", "§aDu hast dich hingesetzt!"));
|
||||||
plugin.getLogger().log(Level.FINE, "Spieler " + player.getName() + " sitzt bei " + locationToString(location));
|
plugin.getLogger().log(Level.FINE, "Spieler " + player.getName() + " sitzt bei " + locationToString(location));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void standUp(Player player) {
|
public void standUp(Player player) {
|
||||||
UUID playerId = player.getUniqueId();
|
UUID playerId = player.getUniqueId();
|
||||||
ArmorStand armorStand = sittingPlayers.remove(playerId);
|
ArmorStand armorStand = sittingPlayers.remove(playerId);
|
||||||
if (armorStand != null) {
|
if (armorStand != null) {
|
||||||
armorStand.remove();
|
armorStand.remove();
|
||||||
FileConfiguration lang = plugin.getLangConfig();
|
FileConfiguration lang = plugin.getLangConfig();
|
||||||
player.sendMessage(lang.getString("sit.stand-up", "§aDu bist aufgestanden!"));
|
player.sendMessage(lang.getString("sit.stand-up", "§aDu bist aufgestanden!"));
|
||||||
plugin.getLogger().log(Level.FINE, "Spieler " + player.getName() + " ist aufgestanden");
|
plugin.getLogger().log(Level.FINE, "Spieler " + player.getName() + " ist aufgestanden");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||||
if (event.getHand() != EquipmentSlot.HAND || event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
if (event.getHand() != EquipmentSlot.HAND || event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
FileConfiguration lang = plugin.getLangConfig();
|
FileConfiguration lang = plugin.getLangConfig();
|
||||||
|
|
||||||
if (!player.hasPermission("survivalplus.sit")) {
|
if (!player.hasPermission("survivalplus.sit")) {
|
||||||
player.sendMessage(lang.getString("no-permission", "§cDu hast keine Berechtigung für diesen Befehl!"));
|
player.sendMessage(lang.getString("no-permission", "§cDu hast keine Berechtigung für diesen Befehl!"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Block block = event.getClickedBlock();
|
Block block = event.getClickedBlock();
|
||||||
if (block == null || !isStair(block.getType())) {
|
if (block == null || !isStair(block.getType())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wenn der Spieler bereits sitzt, stehe auf
|
// Wenn der Spieler bereits sitzt, stehe auf
|
||||||
if (sittingPlayers.containsKey(player.getUniqueId())) {
|
if (sittingPlayers.containsKey(player.getUniqueId())) {
|
||||||
standUp(player);
|
standUp(player);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setze den Spieler genau auf der Treppenstufe
|
// Setze den Spieler genau auf der Treppenstufe
|
||||||
Location location = block.getLocation();
|
Location location = block.getLocation();
|
||||||
location.setX(location.getX() + 0.5);
|
location.setX(location.getX() + 0.5);
|
||||||
location.setY(location.getY() + 0.5); // Genau auf der Treppenstufe (halbe Blockhöhe)
|
location.setY(location.getY() + 0.5); // Genau auf der Treppenstufe (halbe Blockhöhe)
|
||||||
location.setZ(location.getZ() + 0.5);
|
location.setZ(location.getZ() + 0.5);
|
||||||
sitPlayer(player, location);
|
sitPlayer(player, location);
|
||||||
event.setCancelled(true); // Verhindere andere Interaktionen mit der Treppe
|
event.setCancelled(true); // Verhindere andere Interaktionen mit der Treppe
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerMove(PlayerMoveEvent event) {
|
public void onPlayerMove(PlayerMoveEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
UUID playerId = player.getUniqueId();
|
UUID playerId = player.getUniqueId();
|
||||||
if (!sittingPlayers.containsKey(playerId)) {
|
if (!sittingPlayers.containsKey(playerId)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prüfe, ob der Spieler sich bewegt hat (nur Positionsänderung, nicht Kopfbewegung)
|
// Prüfe, ob der Spieler sich bewegt hat (nur Positionsänderung, nicht Kopfbewegung)
|
||||||
Location from = event.getFrom();
|
Location from = event.getFrom();
|
||||||
Location to = event.getTo();
|
Location to = event.getTo();
|
||||||
if (from.getX() != to.getX() || from.getY() != to.getY() || from.getZ() != to.getZ()) {
|
if (from.getX() != to.getX() || from.getY() != to.getY() || from.getZ() != to.getZ()) {
|
||||||
standUp(player);
|
standUp(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
standUp(player);
|
standUp(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isStair(Material material) {
|
private boolean isStair(Material material) {
|
||||||
return material.name().endsWith("_STAIRS");
|
return material.name().endsWith("_STAIRS");
|
||||||
}
|
}
|
||||||
|
|
||||||
private String locationToString(Location loc) {
|
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());
|
return String.format("x=%.2f, y=%.2f, z=%.2f, world=%s", loc.getX(), loc.getY(), loc.getZ(), loc.getWorld().getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user