diff --git a/pom.xml b/pom.xml index 07e11cf..a0663aa 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 de.fanta.challenges Challenges - 1.16.1.2-DEV + 1.16.2-DEV UTF-8 UTF-8 @@ -24,7 +24,7 @@ com.destroystokyo.paper paper-api - 1.16.1-R0.1-SNAPSHOT + 1.16.2-R0.1-SNAPSHOT provided @@ -39,6 +39,12 @@ 3.20.1 provided + + org.jetbrains + annotations + RELEASE + compile + diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index 2370c34..4e40433 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -1,8 +1,3 @@ -/*TODO -Backpack Reset -Gamerule Buttons -*/ - package de.fanta.challenges; import de.fanta.challenges.challenges.RandomDrops; @@ -31,6 +26,7 @@ import de.fanta.challenges.listeners.QuitJoinListener; import de.fanta.challenges.scoreboard.ScoreManager; import de.fanta.challenges.utils.ChatUtil; +import de.fanta.challenges.utils.VanishUtils; import de.fanta.challenges.utils.guiutils.GUIUtils; import net.md_5.bungee.api.ChatColor; import org.bukkit.BanList; @@ -71,6 +67,8 @@ private RIPBoden ripboden; + private VanishUtils vanish; + private BackpackGui backpack; private ScoreBoardManager sbManager; @@ -98,6 +96,7 @@ this.bingo = new Bingo(); this.scoreManager = new ScoreManager(this); + this.vanish = new VanishUtils(this); this.backpack = new BackpackGui(getConfig().getInt("backpack_size") * 9); @@ -158,7 +157,7 @@ Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> { pM.callEvent(new ServerStatusChangedEvent(true)); pM.callEvent(new TimerChangedEvent(timer.isRunning())); - pM.callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size())); + pM.callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); }, 200L); } @@ -283,6 +282,10 @@ return ripboden; } + public VanishUtils getVanish() { + return vanish; + } + public boolean isWaitingForShutdown() { return waitingForShutdown; } diff --git a/src/main/java/de/fanta/challenges/Timer.java b/src/main/java/de/fanta/challenges/Timer.java index f21de90..e4f64d7 100644 --- a/src/main/java/de/fanta/challenges/Timer.java +++ b/src/main/java/de/fanta/challenges/Timer.java @@ -98,9 +98,11 @@ private void sendIdleActionBar() { idleActionBarTaskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, () -> { for (Player p : Bukkit.getOnlinePlayers()) { - p.sendActionBar(ChatColor.RED + "" + ChatColor.BOLD + "Der Timer ist pausiert."); - if (p.getGameMode() != GameMode.SPECTATOR) { - p.getWorld().playEffect(p.getLocation(), Effect.ENDER_SIGNAL, 2); + if (!plugin.getVanish().isVanish(p)) { + p.sendActionBar(ChatColor.RED + "" + ChatColor.BOLD + "Der Timer ist pausiert."); + if (p.getGameMode() != GameMode.SPECTATOR) { + p.getWorld().playEffect(p.getLocation(), Effect.ENDER_SIGNAL, 2); + } } } }, 20L, 20L); @@ -123,7 +125,9 @@ private void sendTimerActionBar(ChatColor color) { for (Player p : Bukkit.getOnlinePlayers()) { - p.sendActionBar(formatTime(color)); + if (!plugin.getVanish().isVanish(p)) { + p.sendActionBar(formatTime(color)); + } } } diff --git a/src/main/java/de/fanta/challenges/events/PlayerCountChangedEvent.java b/src/main/java/de/fanta/challenges/events/PlayerCountChangedEvent.java index d94336f..d008a3d 100644 --- a/src/main/java/de/fanta/challenges/events/PlayerCountChangedEvent.java +++ b/src/main/java/de/fanta/challenges/events/PlayerCountChangedEvent.java @@ -7,7 +7,7 @@ private static final HandlerList handlers = new HandlerList(); - private int count; + private final int count; public PlayerCountChangedEvent(int count) { this.count = count; diff --git a/src/main/java/de/fanta/challenges/events/ServerStatusChangedEvent.java b/src/main/java/de/fanta/challenges/events/ServerStatusChangedEvent.java index 52c306f..a44cdaf 100644 --- a/src/main/java/de/fanta/challenges/events/ServerStatusChangedEvent.java +++ b/src/main/java/de/fanta/challenges/events/ServerStatusChangedEvent.java @@ -7,7 +7,7 @@ private static final HandlerList handlers = new HandlerList(); - private boolean online; + private final boolean online; public ServerStatusChangedEvent(boolean online) { this.online = online; diff --git a/src/main/java/de/fanta/challenges/events/TimerChangedEvent.java b/src/main/java/de/fanta/challenges/events/TimerChangedEvent.java index 22a0aa0..446ee53 100644 --- a/src/main/java/de/fanta/challenges/events/TimerChangedEvent.java +++ b/src/main/java/de/fanta/challenges/events/TimerChangedEvent.java @@ -7,7 +7,7 @@ private static final HandlerList handlers = new HandlerList(); - private boolean running; + private final boolean running; public TimerChangedEvent(boolean running) { this.running = running; diff --git a/src/main/java/de/fanta/challenges/listeners/DamageListener.java b/src/main/java/de/fanta/challenges/listeners/DamageListener.java index 0cf86c7..e9a229e 100644 --- a/src/main/java/de/fanta/challenges/listeners/DamageListener.java +++ b/src/main/java/de/fanta/challenges/listeners/DamageListener.java @@ -3,8 +3,6 @@ import com.destroystokyo.paper.event.player.PlayerJumpEvent; import de.fanta.challenges.Challenges; import de.fanta.challenges.utils.ChatUtil; -import java.text.DecimalFormat; - import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; @@ -21,6 +19,8 @@ import org.bukkit.event.player.PlayerToggleSneakEvent; import org.bukkit.event.player.PlayerToggleSprintEvent; +import java.text.DecimalFormat; + public class DamageListener implements Listener { private Challenges plugin = Challenges.getPlugin(); @@ -29,6 +29,12 @@ public void onDamage(EntityDamageEvent e) { if (e.getEntity() instanceof Player) { Player p = (Player) e.getEntity(); + if (plugin.getVanish().isVanish(p)) { + return; + } + } + if (e.getEntity() instanceof Player) { + Player p = (Player) e.getEntity(); String dmg = new DecimalFormat("#.##").format(e.getFinalDamage()); if (e.getFinalDamage() > 0) { if (e.getCause() == DamageCause.FALL) { @@ -52,17 +58,19 @@ if (plugin.getConfig().getBoolean("sharedmg") && plugin.getTimer().isRunning()) { for (Player pp : Bukkit.getOnlinePlayers()) { if (pp != p) { - double health = pp.getHealth() - e.getFinalDamage(); - if (health < 0) { - pp.setHealth(0); - } else { - if (pp.getGameMode() == GameMode.SURVIVAL) { - pp.setHealth(health); - pp.getWorld().playSound(pp.getLocation(), Sound.ENTITY_PLAYER_HURT, 1, 1); + if (!plugin.getVanish().isVanish(pp)) { + double health = pp.getHealth() - e.getFinalDamage(); + if (health < 0) { + pp.setHealth(0); + } else { + if (pp.getGameMode() == GameMode.SURVIVAL) { + pp.setHealth(health); + pp.getWorld().playSound(pp.getLocation(), Sound.ENTITY_PLAYER_HURT, 1, 1); + } + } } - } } } @@ -75,6 +83,12 @@ @EventHandler public void onEntityDamage(EntityDamageByEntityEvent e) { + if (e.getEntity() instanceof Player) { + Player p = (Player) e.getEntity(); + if (plugin.getVanish().isVanish(p)) { + return; + } + } if ((e.getEntity() instanceof Player) && (e.getFinalDamage() > 0) && (plugin.getTimer().isRunning())) { Player p = (Player) e.getEntity(); String dmg = new DecimalFormat("#.##").format(e.getFinalDamage()); @@ -90,12 +104,12 @@ @EventHandler public void onPlayerSneak(PlayerToggleSneakEvent e) { Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { if (!p.isSneaking()) { if (plugin.getConfig().getBoolean("damageonsneak")) { if (plugin.getConfig().getBoolean("tntdeath")) { for (Player pp : Bukkit.getOnlinePlayers()) { - pp.sendTitle("§c" + p.getName() + " §ahat gesneakt!", "§b:>", 5, 50, 5); + pp.sendTitle("§c" + p.getName() + " §ahat gesneakt!", "§b:>", 5, 50, 5); EntityType tnt = EntityType.PRIMED_TNT; Location loc = pp.getLocation(); TNTPrimed PRIME_TNT = (TNTPrimed) pp.getWorld().spawnEntity(loc, tnt); @@ -115,7 +129,7 @@ @EventHandler public void onPlayerSprint(PlayerToggleSprintEvent e) { Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { if (!p.isSprinting()) { if (plugin.getConfig().getBoolean("deathonsprint")) { if (plugin.getConfig().getBoolean("tntdeath")) { @@ -140,7 +154,7 @@ @EventHandler public void onPlayerJump(PlayerJumpEvent e) { Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { if (plugin.getConfig().getBoolean("deathonjump")) { if (plugin.getConfig().getBoolean("tntdeath")) { for (Player pp : Bukkit.getOnlinePlayers()) { @@ -166,7 +180,7 @@ Player p = (Player) e.getEntity(); if (e.getEntity() instanceof Player) { if (plugin.getConfig().getBoolean("clinvdmg")) { - if (plugin.getTimer().isRunning() && p.getGameMode() == GameMode.SURVIVAL) { + if (plugin.getTimer().isRunning() && p.getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { for (Player pp : Bukkit.getOnlinePlayers()) { pp.getInventory().clear(); ChatUtil.sendNormalMessage(pp, ChatUtil.PLAYER + p.getName() + ChatUtil.WARNING + " hat Schaden bekommen! Alle Inventare wurden gelöscht!"); @@ -181,7 +195,7 @@ @EventHandler public void onPlayerGetXP(PlayerExpChangeEvent e) { Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { if (plugin.getConfig().getBoolean("xpdeath")) { if (plugin.getConfig().getBoolean("tntdeath")) { for (Player pp : Bukkit.getOnlinePlayers()) { diff --git a/src/main/java/de/fanta/challenges/listeners/DeathListener.java b/src/main/java/de/fanta/challenges/listeners/DeathListener.java index fe78e18..8a19262 100644 --- a/src/main/java/de/fanta/challenges/listeners/DeathListener.java +++ b/src/main/java/de/fanta/challenges/listeners/DeathListener.java @@ -16,7 +16,7 @@ public class DeathListener implements Listener { - private Challenges plugin = Challenges.getPlugin(); + private final Challenges plugin = Challenges.getPlugin(); @EventHandler public void onPlayerDeath(PlayerDeathEvent e) { diff --git a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java index f148da1..90ac88d 100644 --- a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java +++ b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java @@ -23,6 +23,7 @@ import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.kitteh.vanish.event.VanishStatusChangeEvent; import java.util.Objects; @@ -131,4 +132,16 @@ } } } + + @EventHandler + public void vanishToggle(VanishStatusChangeEvent e) { + Player p = e.getPlayer(); + if (!e.isVanishing()) { + plugin.getSBManager().setScoreboard(p); + if (plugin.getCurrentEditor() == null) { + plugin.setCurrentEditor(p); + } + } + + } } diff --git a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java index d69e230..f6e0913 100644 --- a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java +++ b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java @@ -1,12 +1,6 @@ package de.fanta.challenges.listeners; import de.fanta.challenges.Challenges; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import java.util.stream.Collectors; - import de.fanta.challenges.events.PlayerCountChangedEvent; import de.fanta.challenges.events.ServerStatusChangedEvent; import de.fanta.challenges.utils.ChatUtil; @@ -18,6 +12,12 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.kitteh.vanish.event.VanishStatusChangeEvent; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.stream.Collectors; public class QuitJoinListener implements Listener { @@ -26,14 +26,18 @@ @EventHandler public void onPlayerJoin(PlayerJoinEvent e) { - Player p = e.getPlayer();; + Player p = e.getPlayer(); if (resetTaskId > 0) { Bukkit.getScheduler().cancelTask(resetTaskId); resetTaskId = -1; } - - Bukkit.broadcastMessage(Challenges.PREFIX + " " + ChatUtil.PLAYER + p.getName() + ChatUtil.NORMAL + " hat die Lobby betreten! " + ChatColor.of("#E4E737") + "[" + Bukkit.getServer().getOnlinePlayers().size() + "/" + Bukkit.getServer().getMaxPlayers() + "]"); + if (plugin.getVanish().isVanish(p)) { + ChatUtil.sendNormalMessage(p, "Du bist im Vanish, niemand weiß das du in der Lobby bist"); + return; + } + Bukkit.broadcastMessage( + Challenges.PREFIX + " " + ChatUtil.PLAYER + p.getName() + ChatUtil.NORMAL + " hat die Lobby betreten! " + ChatColor.of("#E4E737") + "[" + (Bukkit.getServer().getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers()) + "/" + Bukkit.getServer().getMaxPlayers() + "]"); e.setJoinMessage(null); if (plugin.getConfig().getBoolean("sharedmg")) { int rnd = new Random().nextInt(Bukkit.getOnlinePlayers().size()); @@ -69,7 +73,7 @@ ChatUtil.sendNormalMessage(p, plugin.getCurrentEditor().getName() + " ist der Editor dieser Lobby!"); } - Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size())); + Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); } @EventHandler @@ -83,10 +87,18 @@ @EventHandler public void onPlayerQuit(PlayerQuitEvent e) { Player player = e.getPlayer(); - Bukkit.broadcastMessage(Challenges.PREFIX + " " + ChatColor.of("#3D98DC") + player.getName() + ChatColor.of("#C45B3D") + " hat die Lobby verlassen! " + ChatColor.of("#E4E737") + "[" + (Bukkit.getServer().getOnlinePlayers().size() - 1) + "/" + Bukkit.getServer().getMaxPlayers() + "]"); + + if (plugin.getVanish().isVanish(player)) { + if (Bukkit.getOnlinePlayers().size() == 1) { + plugin.getTimer().stopTimer(); + return; + } + } + + Bukkit.broadcastMessage(Challenges.PREFIX + " " + ChatColor.of("#3D98DC") + player.getName() + ChatColor.of("#C45B3D") + " hat die Lobby verlassen! " + ChatColor.of("#E4E737") + "[" + (Bukkit.getServer().getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers() - 1) + "/" + Bukkit.getServer().getMaxPlayers() + "]"); e.setQuitMessage(null); - if (Bukkit.getOnlinePlayers().size() == 1) { + if (Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers() == 1) { plugin.getTimer().stopTimer(); } @@ -105,6 +117,7 @@ } else { List onlinePlayers = new ArrayList<>(Bukkit.getOnlinePlayers()); onlinePlayers.remove(player); + onlinePlayers.remove(plugin.getVanish().VanishPlayerList()); int rnd = random.nextInt(onlinePlayers.size()); randomPlayer = onlinePlayers.get(rnd); } @@ -115,12 +128,12 @@ plugin.setCurrentEditor(null); resetTaskId = Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { - Bukkit.dispatchCommand(Bukkit.getConsoleSender() ,"reset confirm"); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm"); }, 10 * 60 * 20); } } - Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - 1)); + Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers() - 1)); if (plugin.isWaitingForShutdown() && Bukkit.getOnlinePlayers().size() == 1) { Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { diff --git a/src/main/java/de/fanta/challenges/utils/VanishUtils.java b/src/main/java/de/fanta/challenges/utils/VanishUtils.java index 4d2e12f..2fa465b 100644 --- a/src/main/java/de/fanta/challenges/utils/VanishUtils.java +++ b/src/main/java/de/fanta/challenges/utils/VanishUtils.java @@ -1,4 +1,30 @@ package de.fanta.challenges.utils; +import de.fanta.challenges.Challenges; +import org.bukkit.entity.Player; +import org.kitteh.vanish.VanishPlugin; + +import java.util.ArrayList; +import java.util.List; + public class VanishUtils { + + private final VanishPlugin vanish; + + public VanishUtils(Challenges plugin) { + vanish = (VanishPlugin) plugin.getServer().getPluginManager().getPlugin("VanishNoPacket"); + } + + public boolean isVanish(Player player) { + return vanish.getManager().isVanished(player); + } + + public int countVanishPlayers() { + return vanish.getManager().getVanishedPlayers().size(); + } + + public List VanishPlayerList() { + return new ArrayList<>(vanish.getManager().getVanishedPlayers()); + } + }