diff --git a/src/de/steamwar/lobby/LobbySystem.java b/src/de/steamwar/lobby/LobbySystem.java index 197b62e..243d307 100644 --- a/src/de/steamwar/lobby/LobbySystem.java +++ b/src/de/steamwar/lobby/LobbySystem.java @@ -19,6 +19,7 @@ package de.steamwar.lobby; +import de.steamwar.lobby.commands.FlyCommand; import de.steamwar.lobby.listener.*; import org.bukkit.Bukkit; import org.bukkit.plugin.PluginManager; @@ -33,7 +34,6 @@ public class LobbySystem extends JavaPlugin { instance = this; PluginManager pm = Bukkit.getPluginManager(); - pm.registerEvents(new PlayerMoveListener(), instance); pm.registerEvents(new PlayerConnectionListener(), instance); pm.registerEvents(new PlayerInventoryListener(), instance); @@ -41,6 +41,8 @@ public class LobbySystem extends JavaPlugin { pm.registerEvents(new DoubleJumpListener(), instance); pm.registerEvents(new ParticleListener(), instance); pm.registerEvents(new EnderPearlListener(), instance); + + getCommand("fly").setExecutor(new FlyCommand()); } diff --git a/src/de/steamwar/lobby/commands/FlyCommand.java b/src/de/steamwar/lobby/commands/FlyCommand.java new file mode 100644 index 0000000..4d1fb69 --- /dev/null +++ b/src/de/steamwar/lobby/commands/FlyCommand.java @@ -0,0 +1,55 @@ +/* + This file is a part of the SteamWar software. + + Copyright (C) 2020 SteamWar.de-Serverteam + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +package de.steamwar.lobby.commands; + +import de.steamwar.lobby.utils.LobbyPlayer; +import de.steamwar.sql.SteamwarUser; +import de.steamwar.sql.UserGroup; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class FlyCommand implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) return false; + + Player player = (Player) sender; + SteamwarUser steamwarUser = SteamwarUser.get(player.getUniqueId()); + UserGroup userGroup = steamwarUser.getUserGroup(); + + if (userGroup == UserGroup.Member) { + player.sendMessage("§cUnbekannter Befehl."); + return false; + } + + LobbyPlayer lobbyPlayer = LobbyPlayer.getLobbyPlayer(player); + boolean newFlightState = !lobbyPlayer.isFlying(); + + lobbyPlayer.setFly(newFlightState); + player.setAllowFlight(newFlightState); + player.setFlying(newFlightState); + player.sendMessage("§7Du kannst jetzt " + (newFlightState ? "§afliegen§7." : "§cnicht §7mehr fliegen.")); + return false; + } + +} \ No newline at end of file diff --git a/src/de/steamwar/lobby/listener/DoubleJumpListener.java b/src/de/steamwar/lobby/listener/DoubleJumpListener.java index d094c5a..612b5e9 100644 --- a/src/de/steamwar/lobby/listener/DoubleJumpListener.java +++ b/src/de/steamwar/lobby/listener/DoubleJumpListener.java @@ -19,6 +19,7 @@ package de.steamwar.lobby.listener; +import de.steamwar.lobby.utils.LobbyPlayer; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.Sound; @@ -47,6 +48,9 @@ public class DoubleJumpListener implements Listener { if (player.getGameMode() != GameMode.ADVENTURE && player.getGameMode() != GameMode.SURVIVAL) { return; } + if (LobbyPlayer.getLobbyPlayer(player).isFlying()) { + return; + } event.setCancelled(true); player.setAllowFlight(false); @@ -65,8 +69,8 @@ public class DoubleJumpListener implements Listener { public void handlePlayerMove(PlayerMoveEvent event) { Player player = event.getPlayer(); - if(player.getLocation().add(0, -1, 0).getBlock().getType() == Material.AIR) - return; + if(player.getLocation().add(0, -1, 0).getBlock().getType() == Material.AIR) return; + if (LobbyPlayer.getLobbyPlayer(player).isFlying()) return; player.setAllowFlight(true); if (player.getGameMode() == GameMode.ADVENTURE || player.getGameMode() == GameMode.SURVIVAL) { diff --git a/src/de/steamwar/lobby/utils/LobbyPlayer.java b/src/de/steamwar/lobby/utils/LobbyPlayer.java index 96a0292..70f7b48 100644 --- a/src/de/steamwar/lobby/utils/LobbyPlayer.java +++ b/src/de/steamwar/lobby/utils/LobbyPlayer.java @@ -20,6 +20,7 @@ package de.steamwar.lobby.utils; import org.bukkit.Particle; +import org.bukkit.entity.Player; import java.util.HashMap; import java.util.Map; @@ -37,11 +38,20 @@ public class LobbyPlayer { private double particle_time = 0.001; private boolean enderPearlUsed; + private boolean fly; private LobbyPlayer(UUID uuid) { cache.put(uuid, this); } + public boolean isFlying() { + return fly; + } + + public void setFly(boolean fly) { + this.fly = fly; + } + public Particle getParticle() { return particle; } @@ -97,4 +107,8 @@ public class LobbyPlayer { LobbyPlayer lobbyPlayer = cache.get(uuid); return lobbyPlayer == null ? new LobbyPlayer(uuid) : lobbyPlayer; } + + public static LobbyPlayer getLobbyPlayer(Player player) { + return getLobbyPlayer(player.getUniqueId()); + } } diff --git a/src/plugin.yml b/src/plugin.yml index 488c080..31633be 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -4,4 +4,7 @@ author: Yaruma3341 depend: - SpigotCore main: de.steamwar.lobby.LobbySystem -api-version: "1.13" \ No newline at end of file +api-version: "1.13" + +commands: + fly: \ No newline at end of file