diff --git a/src/main/java/de/fanta/challenges/challenges/ForceItemChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ForceItemChallengeEvent.java index 36ef06f..8715e39 100644 --- a/src/main/java/de/fanta/challenges/challenges/ForceItemChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ForceItemChallengeEvent.java @@ -38,14 +38,17 @@ import org.bukkit.event.player.PlayerBucketEntityEvent; import org.bukkit.event.player.PlayerBucketFillEvent; import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerGameModeChangeEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerSwapHandItemsEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataType; +import org.kitteh.vanish.event.VanishStatusChangeEvent; import java.util.ArrayList; import java.util.Collection; @@ -122,7 +125,6 @@ setRunning(true); } else { stopUpdateTask(); - setRunning(false); for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { pp.setGameMode(GameMode.SPECTATOR); @@ -137,6 +139,53 @@ ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + scorable.getName() + ChatUtil.GREEN + " hat " + plugin.getScoreManager().getScore(scorable) + " Items gesammelt und hat damit gewonnen!", ChatUtil.BLUE); } } + + setRunning(false); + } + } + } + + @EventHandler + public void onGameModeSwitch(PlayerGameModeChangeEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + if (e.getNewGameMode() == GameMode.SPECTATOR) { + if (entityList.containsKey(player.getUniqueId())) { + entityList.get(e.getPlayer().getUniqueId()).remove(); + } + } else { + mountArmorStand(player); + if (itemByPlayerList.get(player.getUniqueId()) != null) { + updateArmorStand(player, itemByPlayerList.get(player.getUniqueId())); + } else { + updateItem(player); + } + } + } + } + + @EventHandler + public void onToggleVanish(VanishStatusChangeEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + if (e.isVanishing()) { + if (entityList.containsKey(player.getUniqueId())) { + entityList.get(e.getPlayer().getUniqueId()).remove(); + } + } else { + if (plugin.getScoreManager().getScores().containsKey(new ChallengePlayer(player))) { + plugin.getScoreManager().join(new ChallengePlayer(player)); + } + + mountArmorStand(player); + if (itemByPlayerList.get(player.getUniqueId()) != null) { + updateArmorStand(player, itemByPlayerList.get(player.getUniqueId())); + } else { + plugin.getScoreManager().join(new ChallengePlayer(player)); + updateItem(player); + updateBossBar(); + player.getInventory().setItem(8, skipItem); + } } } } @@ -154,10 +203,13 @@ } } - @EventHandler + @EventHandler(priority = EventPriority.MONITOR) public void onPlayerJoin(PlayerJoinEvent e) { if (isRunning()) { Player player = e.getPlayer(); + if (plugin.getVanish().isVanish(player)) { + return; + } plugin.getScoreManager().join(new ChallengePlayer(player)); mountArmorStand(player); if (itemByPlayerList.get(player.getUniqueId()) != null) { @@ -324,6 +376,23 @@ } } } + + if (entityList.containsKey(e.getEntity().getUniqueId())) { + entityList.get(e.getPlayer().getUniqueId()).remove(); + } + } + } + + @EventHandler + public void onRespawn(PlayerRespawnEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + mountArmorStand(player); + if (itemByPlayerList.get(player.getUniqueId()) != null) { + updateArmorStand(player, itemByPlayerList.get(player.getUniqueId())); + } else { + updateItem(player); + } } } @@ -372,13 +441,18 @@ if (block.getType() == Material.NETHER_PORTAL || block.getType() == Material.END_PORTAL || block.getType() == Material.END_GATEWAY) { if (!player.getPassengers().isEmpty()) { - Location standLocation = location.clone().add(0, 500, 0); - entityList.get(player.getUniqueId()).teleport(standLocation); + if (entityList.containsKey(player.getUniqueId())) { + entityList.get(player.getUniqueId()).remove(); + } } } else { if (player.getPassengers().isEmpty()) { - entityList.get(player.getUniqueId()).teleport(player.getLocation()); - player.addPassenger(entityList.get(player.getUniqueId())); + mountArmorStand(player); + if (itemByPlayerList.get(player.getUniqueId()) != null) { + updateArmorStand(player, itemByPlayerList.get(player.getUniqueId())); + } else { + updateItem(player); + } } }