diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index 0134080..0a9e5a4 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -9,14 +9,15 @@ import de.fanta.challenges.challenges.RandomDrops; import de.fanta.challenges.challenges.SBManager; import de.fanta.challenges.commands.CommandRegistration; -import de.fanta.challenges.events.BlockCreateListener; -import de.fanta.challenges.events.BlockDestroyListener; -import de.fanta.challenges.events.DamageListener; -import de.fanta.challenges.events.DeathListener; -import de.fanta.challenges.events.InteractListener; -import de.fanta.challenges.events.InventoryClickListener; -import de.fanta.challenges.events.PlayerListener; -import de.fanta.challenges.events.QuitJoinListener; +import de.fanta.challenges.events.ServerStatusChangedEvent; +import de.fanta.challenges.listeners.BlockCreateListener; +import de.fanta.challenges.listeners.BlockDestroyListener; +import de.fanta.challenges.listeners.DamageListener; +import de.fanta.challenges.listeners.DeathListener; +import de.fanta.challenges.listeners.InteractListener; +import de.fanta.challenges.listeners.InventoryClickListener; +import de.fanta.challenges.listeners.PlayerListener; +import de.fanta.challenges.listeners.QuitJoinListener; import de.fanta.challenges.guis.ResetGui; import de.fanta.challenges.guis.TimerGui; import de.fanta.challenges.guis.settingsgui.MainGui; @@ -135,6 +136,8 @@ this.rndDrops.loadItems(); this.backpack.loadInventoryFromConfig(); } + + Bukkit.getPluginManager().callEvent(new ServerStatusChangedEvent(true)); } @Override @@ -149,6 +152,8 @@ getConfig().set("timertime", timer.getTime()); saveConfig(); getLogger().info("Plugin unloaded"); + + Bukkit.getPluginManager().callEvent(new ServerStatusChangedEvent(false)); } public RandomDrops getRandomDropsManager() { diff --git a/src/main/java/de/fanta/challenges/Timer.java b/src/main/java/de/fanta/challenges/Timer.java index b442489..103c574 100644 --- a/src/main/java/de/fanta/challenges/Timer.java +++ b/src/main/java/de/fanta/challenges/Timer.java @@ -1,5 +1,6 @@ package de.fanta.challenges; +import de.fanta.challenges.events.TimerChangedEvent; import de.fanta.challenges.utils.ChatUtil; import de.iani.cubesideutils.StringUtil; import net.md_5.bungee.api.ChatColor; @@ -70,6 +71,8 @@ sendTimerActionBar(ChatColor.GREEN); } }, 20L, 20L); + + Bukkit.getPluginManager().callEvent(new TimerChangedEvent(true)); } public void stopTimer() { @@ -78,6 +81,8 @@ actionBarTaskId = -1; sendIdleActionBar(); } + + Bukkit.getPluginManager().callEvent(new TimerChangedEvent(false)); } private void sendIdleActionBar() { diff --git a/src/main/java/de/fanta/challenges/events/BlockCreateListener.java b/src/main/java/de/fanta/challenges/events/BlockCreateListener.java deleted file mode 100644 index 6063bb0..0000000 --- a/src/main/java/de/fanta/challenges/events/BlockCreateListener.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.fanta.challenges.events; - -import de.fanta.challenges.Challenges; -import org.bukkit.GameMode; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.player.PlayerBucketEmptyEvent; - -public class BlockCreateListener implements Listener { - - private Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onBlockPlace(BlockPlaceEvent e) { - if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { - e.setCancelled(true); - } - } - - @EventHandler - public void onBucketPlace(PlayerBucketEmptyEvent e) { - if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { - e.setCancelled(true); - } - } -} diff --git a/src/main/java/de/fanta/challenges/events/BlockDestroyListener.java b/src/main/java/de/fanta/challenges/events/BlockDestroyListener.java deleted file mode 100644 index 77a8028..0000000 --- a/src/main/java/de/fanta/challenges/events/BlockDestroyListener.java +++ /dev/null @@ -1,57 +0,0 @@ -package de.fanta.challenges.events; - - - -import de.fanta.challenges.Challenges; -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockExplodeEvent; -import org.bukkit.event.entity.EntityExplodeEvent; -import org.bukkit.inventory.ItemStack; - -public class BlockDestroyListener implements Listener { - - private Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onBlockBreak(BlockBreakEvent e) { - if (this.plugin.getConfig().getBoolean("rnddrops") && plugin.getTimer().isRunning()) { - e.setDropItems(false); - e.getBlock().getWorld().dropItem(e.getBlock().getLocation().add(0.5D, 0.5D, 0.5D), new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(e.getBlock()))); - } - if ((!plugin.getTimer().isRunning()) && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { - e.setCancelled(true); - } - } - - @EventHandler - public void onBlockExplode(BlockExplodeEvent e) { - if (this.plugin.getConfig().getBoolean("rnddrops")) { - e.blockList().forEach(block -> { - if(!block.getType().isAir()){ - block.getWorld().dropItem(block.getLocation().add(0.5D, 0.5D, 0.5D),new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(block))); - block.setType(Material.AIR); - } - }); - e.blockList().clear(); - } - } - - @EventHandler - public void onEntityExplode(EntityExplodeEvent e) { - if (this.plugin.getConfig().getBoolean("rnddrops")) { - e.blockList().forEach(block -> { - if(!block.getType().isAir()){ - block.getWorld().dropItem(block.getLocation().add(0.5D, 0.5D, 0.5D),new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(block))); - block.setType(Material.AIR); - } - }); - e.blockList().clear(); - } - } - -} - diff --git a/src/main/java/de/fanta/challenges/events/DamageListener.java b/src/main/java/de/fanta/challenges/events/DamageListener.java deleted file mode 100644 index 11bf83a..0000000 --- a/src/main/java/de/fanta/challenges/events/DamageListener.java +++ /dev/null @@ -1,208 +0,0 @@ -package de.fanta.challenges.events; - -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; -import org.bukkit.Sound; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.entity.TNTPrimed; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.player.PlayerExpChangeEvent; -import org.bukkit.event.player.PlayerToggleSneakEvent; -import org.bukkit.event.player.PlayerToggleSprintEvent; - -public class DamageListener implements Listener { - - private Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onDamage(EntityDamageEvent e) { - 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) { - if (plugin.getConfig().getBoolean("deathonfall")) { - if (plugin.getConfig().getBoolean("dmginchat")) { - Bukkit.broadcastMessage(Challenges.PREFIX + "§6 " + p.getName() + " §chat §4" + p.getHealth() + " §cHP Schaden genommen durch §4" + e.getCause()); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - p.setHealth(0); - } - }, 1); - } else if (plugin.getConfig().getBoolean("dmginchat") && (plugin.getTimer().isRunning())) { - Bukkit.broadcastMessage(Challenges.PREFIX + "§6 " + p.getName() + " §chat §4" + dmg + " §cHP Schaden genommen durch §4" + e.getCause()); - } - } else if (e.getCause() == DamageCause.CUSTOM) { - if (!p.isSneaking() && (plugin.getConfig().getBoolean("dmginchat"))) { - Bukkit.broadcastMessage(Challenges.PREFIX + "§6 " + p.getName() + " §chat §4" + plugin.getConfig().getDouble("sneakdmg") + " §cHP Schaden genommen durch §4SNEAKING"); - } - } else if (e.getCause() == DamageCause.ENTITY_ATTACK || e.getCause() == DamageCause.ENTITY_EXPLOSION) { - - } else if (plugin.getConfig().getBoolean("dmginchat") && (plugin.getTimer().isRunning())) { - Bukkit.broadcastMessage(Challenges.PREFIX + "§6 " + p.getName() + " §chat §4" + dmg + " §cHP Schaden genommen durch §4" + e.getCause()); - } - 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.getTimer().isRunning()) { - e.setCancelled(true); - } - } - - @EventHandler - public void onEntityDamage(EntityDamageByEntityEvent e) { - if ((e.getEntity() instanceof Player) && (e.getFinalDamage() > 0) && (plugin.getTimer().isRunning())) { - Player p = (Player) e.getEntity(); - String dmg = new DecimalFormat("#.##").format(e.getFinalDamage()); - if ((e.getCause() == DamageCause.ENTITY_ATTACK || e.getCause() == DamageCause.ENTITY_EXPLOSION) && plugin.getConfig().getBoolean("dmginchat")) { - Bukkit.broadcastMessage(Challenges.PREFIX + "§6 " + p.getName() + " §chat §4" + dmg + " §cHP Schaden genommen durch §4" + e.getDamager().getName()); - } - } - if (!plugin.getTimer().isRunning()) { - e.setCancelled(true); - } - } - - @EventHandler - public void onPlayerSneak(PlayerToggleSneakEvent e) { - Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { - 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); - EntityType tnt = EntityType.PRIMED_TNT; - Location loc = pp.getLocation(); - TNTPrimed PRIME_TNT = (TNTPrimed) pp.getWorld().spawnEntity(loc, tnt); - PRIME_TNT.setCustomName("§c§lNUKE"); - PRIME_TNT.setFuseTicks(15); - PRIME_TNT.setYield(120); - PRIME_TNT.setIsIncendiary(true); - } - } else { - p.damage(plugin.getConfig().getDouble("sneakdmg")); - } - } - } - } - } - - @EventHandler - public void onPlayerSprint(PlayerToggleSprintEvent e) { - Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { - if (!p.isSprinting()) { - if (plugin.getConfig().getBoolean("deathonsprint")) { - if (plugin.getConfig().getBoolean("tntdeath")) { - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.sendTitle("§c" + p.getName() + " §aist gesprintet!", "§bBOOOM :>", 5, 50, 5); - EntityType tnt = EntityType.PRIMED_TNT; - Location loc = pp.getLocation(); - TNTPrimed PRIME_TNT = (TNTPrimed) pp.getWorld().spawnEntity(loc, tnt); - PRIME_TNT.setCustomName("§c§lNUKE"); - PRIME_TNT.setFuseTicks(15); - PRIME_TNT.setYield(120); - PRIME_TNT.setIsIncendiary(true); - } - } else { - p.setHealth(0); - } - } - } - } - } - - @EventHandler - public void onPlayerJump(PlayerJumpEvent e) { - Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { - if (plugin.getConfig().getBoolean("deathonjump")) { - if (plugin.getConfig().getBoolean("tntdeath")) { - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.sendTitle("§c" + p.getName() + " §aist gesprungen!", "§bBOOOM :>", 5, 50, 5); - EntityType tnt = EntityType.PRIMED_TNT; - Location loc = pp.getLocation(); - TNTPrimed PRIME_TNT = (TNTPrimed) pp.getWorld().spawnEntity(loc, tnt); - PRIME_TNT.setCustomName("§c§lNUKE"); - PRIME_TNT.setFuseTicks(15); - PRIME_TNT.setYield(120); - PRIME_TNT.setIsIncendiary(true); - } - } else { - p.setHealth(0); - } - } - } - } - - @EventHandler - public void onDamageclear(EntityDamageEvent e) { - if (e.getEntity() instanceof Player) { - Player p = (Player) e.getEntity(); - if (e.getEntity() instanceof Player) { - if (plugin.getConfig().getBoolean("clinvdmg")) { - if (plugin.getTimer().isRunning() && p.getGameMode() == GameMode.SURVIVAL) { - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.getInventory().clear(); - ChatUtil.sendNormalMessage(pp, p.getName() + " hat Schaden bekommen! Alle Inventare wurden gelöscht!"); - - } - } - } - } - } - } - - @EventHandler - public void onPlayerGetXP(PlayerExpChangeEvent e) { - Player p = e.getPlayer(); - if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { - if (plugin.getConfig().getBoolean("xpdeath")) { - if (plugin.getConfig().getBoolean("tntdeath")) { - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.sendTitle("§c" + p.getName() + " §ahat XP eingesammelt!", "§bPling :>", 5, 50, 5); - EntityType tnt = EntityType.PRIMED_TNT; - Location loc = pp.getLocation(); - TNTPrimed PRIME_TNT = (TNTPrimed) pp.getWorld().spawnEntity(loc, tnt); - PRIME_TNT.setCustomName("§c§lNUKE"); - PRIME_TNT.setFuseTicks(15); - PRIME_TNT.setYield(120); - PRIME_TNT.setIsIncendiary(true); - } - } else { - p.setHealth(0); - } - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/events/DeathListener.java b/src/main/java/de/fanta/challenges/events/DeathListener.java deleted file mode 100644 index 2799e2f..0000000 --- a/src/main/java/de/fanta/challenges/events/DeathListener.java +++ /dev/null @@ -1,74 +0,0 @@ -package de.fanta.challenges.events; - - - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import net.md_5.bungee.api.ChatColor; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.entity.EnderDragon; -import org.bukkit.entity.Player; -import org.bukkit.entity.Wither; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerRespawnEvent; - -public class DeathListener implements Listener { - - private Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (plugin.getConfig().getBoolean("onelife")) { - plugin.getTimer().stopTimer(); - for (Player p : Bukkit.getOnlinePlayers()) { - p.setGameMode(GameMode.SPECTATOR); - } - e.setDeathMessage("§6" + e.getEntity().getName() + " §cist gestorben!"); - Bukkit.broadcastMessage("§cVerschwendete Zeit §6" + plugin.getTimer().formatTime(ChatColor.GOLD)); - Bukkit.broadcastMessage("§aWelt Seed: §b" + Bukkit.getWorlds().get(0).getSeed()); - Bukkit.broadcastMessage("§6Um alle wiederzubeleben benutze §c/revive ALL"); - } else { - e.setDeathMessage("§6" + e.getEntity().getName() + " §cist gestorben! §6(" + e.getEntity().getWorld().getName() + " " + e.getEntity().getLocation().getBlockX() + " " + e.getEntity().getLocation().getBlockY() + " " + e.getEntity().getLocation().getBlockZ() + "§c)"); - if (!plugin.getConfig().getBoolean("respawn")) { - Player editor = plugin.getCurrentEditor(); - ChatUtil.sendNormalMessage(editor, "§6Benutze §c/revive " + e.getEntity().getName() + " [world] [x] [y] [z] §6um ihn wiederzubeleben!"); - } - } - } - - @EventHandler - public void onPlayerRespawn(PlayerRespawnEvent e) { - if (!plugin.getConfig().getBoolean("respawn")) { - e.getPlayer().sendTitle("§cDu bist gestorben!", "§4Du bist nun Zuschauer", 10, 80, 10); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - e.getPlayer().setGameMode(GameMode.SPECTATOR); - } - }, 1); - } - } - - @EventHandler - public void DragonDeath(EntityDeathEvent e) { - if ((e.getEntity() instanceof EnderDragon && plugin.getConfig().getBoolean("dragon")) || (e.getEntity() instanceof Wither && plugin.getConfig().getBoolean("wither"))) { - plugin.getTimer().stopTimer(); - Bukkit.broadcastMessage(Challenges.PREFIX + ChatColor.GREEN + ChatColor.BOLD + ChatColor.MAGIC + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); - Bukkit.broadcastMessage(Challenges.PREFIX); - Bukkit.broadcastMessage(Challenges.PREFIX); - Bukkit.broadcastMessage(Challenges.PREFIX); - Bukkit.broadcastMessage(Challenges.PREFIX + " §8>> §aDie Challenge wurde §2§lerfolgreich §aabgeschlossen."); - Bukkit.broadcastMessage(Challenges.PREFIX + " §8>> §7Der §2§l" + e.getEntity().toString().toLowerCase() + " §7wurde besiegt."); - Bukkit.broadcastMessage(Challenges.PREFIX + " §8>> §7Benötigte Zeit: §2§l" + plugin.getTimer().formatTime(ChatColor.GREEN) + "§7!"); - Bukkit.broadcastMessage(Challenges.PREFIX + " §8>> §7Seed: §2§l" + Bukkit.getWorlds().get(0).getSeed()); - Bukkit.broadcastMessage(Challenges.PREFIX); - Bukkit.broadcastMessage(Challenges.PREFIX); - Bukkit.broadcastMessage(Challenges.PREFIX); - Bukkit.broadcastMessage(Challenges.PREFIX + ChatColor.GREEN + ChatColor.BOLD + ChatColor.MAGIC + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); - } - } -} diff --git a/src/main/java/de/fanta/challenges/events/InteractListener.java b/src/main/java/de/fanta/challenges/events/InteractListener.java deleted file mode 100644 index 11156bf..0000000 --- a/src/main/java/de/fanta/challenges/events/InteractListener.java +++ /dev/null @@ -1,45 +0,0 @@ -package de.fanta.challenges.events; - - - -import de.fanta.challenges.Challenges; -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.entity.EntityType; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.player.PlayerInteractEntityEvent; -import org.bukkit.event.player.PlayerInteractEvent; - -public class InteractListener implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - @EventHandler - public void onBlockClick(PlayerInteractEvent e) { - if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { - if (e.getClickedBlock().getType() == Material.CRAFTING_TABLE) { - if (!plugin.getConfig().getBoolean("craftingtable")) { - e.setCancelled(true); - } - } - if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() != GameMode.CREATIVE) { - e.setCancelled(true); - } - } - } - - @EventHandler - public void onEntityClick(PlayerInteractEntityEvent e) { - if (e.getRightClicked().getType() == EntityType.VILLAGER) { - if (!plugin.getConfig().getBoolean("allowtrading")) { - e.setCancelled(true); - } - } - if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() != GameMode.CREATIVE) { - e.setCancelled(true); - } - } -} - diff --git a/src/main/java/de/fanta/challenges/events/InventoryClickListener.java b/src/main/java/de/fanta/challenges/events/InventoryClickListener.java deleted file mode 100644 index 3fc8726..0000000 --- a/src/main/java/de/fanta/challenges/events/InventoryClickListener.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.fanta.challenges.events; - - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.commands.coords.CoordsCommand; -import de.fanta.challenges.commands.coords.CoordsDeleteCommand; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; - -public class InventoryClickListener implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - - @EventHandler - public void InvClick(InventoryClickEvent e) { - String invname = e.getView().getTitle(); - Player p = (Player) e.getWhoClicked(); - int slot = e.getRawSlot(); - if (invname.equals(CoordsCommand.CGUIN)) { - e.setCancelled(true); - if (slot >= 0 && slot <= 44) { - if (CoordsCommand.CoordsGUI.getItem(slot) != null && p.hasPermission("challenges.coords.delete")) { - p.performCommand("coords delete " + e.getCurrentItem().getItemMeta().getDisplayName()); - } - } - } - if (invname.equals(CoordsDeleteCommand.CDGUIN)) { - e.setCancelled(true); - if (slot == 0) { - String cname = CoordsDeleteCommand.CoordsDeleteGUI.getItem(4).getItemMeta().getDisplayName(); - plugin.getConfig().set("Saved_Locations." + cname, null); - plugin.saveConfig(); - ChatUtil.sendNormalMessage(p, "Position " + cname + " wurde gelöscht!"); - p.closeInventory(); - } - if (slot == 8) { - p.performCommand("coords"); - } - } - } -} - diff --git a/src/main/java/de/fanta/challenges/events/PlayerListener.java b/src/main/java/de/fanta/challenges/events/PlayerListener.java deleted file mode 100644 index 76cc55a..0000000 --- a/src/main/java/de/fanta/challenges/events/PlayerListener.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.fanta.challenges.events; - -import de.fanta.challenges.Challenges; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityTargetLivingEntityEvent; -import org.bukkit.event.entity.FoodLevelChangeEvent; - -public class PlayerListener implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - - @EventHandler - public void onEntityTarget(EntityTargetLivingEntityEvent e) { - if (!plugin.getTimer().isRunning()) { - e.setCancelled(true); - } - } - - @EventHandler - public void onFoodChange(FoodLevelChangeEvent e) { - if (!plugin.getTimer().isRunning()) { - e.setCancelled(true); - } - } -} diff --git a/src/main/java/de/fanta/challenges/events/QuitJoinListener.java b/src/main/java/de/fanta/challenges/events/QuitJoinListener.java deleted file mode 100644 index f7d97a9..0000000 --- a/src/main/java/de/fanta/challenges/events/QuitJoinListener.java +++ /dev/null @@ -1,96 +0,0 @@ -package de.fanta.challenges.events; - -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.utils.ChatUtil; -import net.md_5.bungee.api.ChatColor; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -public class QuitJoinListener implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - private int resetTaskId = -1; - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent e) { - if (resetTaskId > 0) { - Bukkit.getScheduler().cancelTask(resetTaskId); - resetTaskId = -1; - } - - Player p = e.getPlayer(); - Bukkit.broadcastMessage(Challenges.PREFIX + " " + ChatColor.of("#3D98DC") + p.getName() + ChatColor.of("#1FFF00") + " hat die Lobby betreten! " + ChatColor.of("#E4E737") + "[" + Bukkit.getServer().getOnlinePlayers().size() + "/" + Bukkit.getServer().getMaxPlayers() + "]"); - e.setJoinMessage(null); - if (plugin.getConfig().getBoolean("sharedmg")) { - int rnd = new Random().nextInt(Bukkit.getOnlinePlayers().size()); - Player rp = (Player) Bukkit.getServer().getOnlinePlayers().toArray()[rnd]; - p.setHealth(rp.getHealth()); - } - if (this.plugin.getConfig().getBoolean("tabhp")) { - this.plugin.getSBManager().createScoreboard(p); - } - - if (plugin.getCurrentEditor() == null) { - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { - if (p.hasPermission("Challenges.editor")) { - plugin.setCurrentEditor(p); - ChatUtil.sendNormalMessage(p, "Du bist nun der Editor dieser Lobby!"); - } else { - ChatUtil.sendWarningMessage(p, "Es ist aktuell kein Editor in dieser Lobby"); - ChatUtil.sendWarningMessage(p, "Um selbst Editor zu werden musst du VIP sein!"); - } - }, 1L); - } else { - ChatUtil.sendNormalMessage(p, plugin.getCurrentEditor().getName() + " ist der Editor dieser Lobby!"); - } - } - - @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() + "]"); - e.setQuitMessage(null); - - if (Bukkit.getOnlinePlayers().size() == 1) { - plugin.getTimer().stopTimer(); - } - - if (plugin.getCurrentEditor() != null && player.getUniqueId().equals(plugin.getCurrentEditor().getUniqueId())) { - if (Bukkit.getServer().getOnlinePlayers().size() - 1 > 0) { - Random random = new Random(); - Player randomPlayer; - - List onlinePlayersWithPermission = Bukkit.getOnlinePlayers().stream().filter(p -> p.hasPermission("Challenges.editor")).distinct().collect(Collectors.toList()); - onlinePlayersWithPermission.remove(player); - if (onlinePlayersWithPermission.size() > 0) { - int rnd = random.nextInt(onlinePlayersWithPermission.size()); - randomPlayer = onlinePlayersWithPermission.get(rnd); - } else { - List onlinePlayers = new ArrayList<>(Bukkit.getOnlinePlayers()); - onlinePlayers.remove(player); - int rnd = random.nextInt(onlinePlayers.size()); - randomPlayer = onlinePlayers.get(rnd); - } - plugin.setCurrentEditor(randomPlayer); - ChatUtil.sendNormalMessage(randomPlayer, "Du bist nun der Editor dieser Lobby!"); - Bukkit.broadcastMessage(Challenges.PREFIX + " " + ChatColor.GREEN + randomPlayer.getName() + " ist nun der Editor dieser Lobby!"); - } else { - plugin.setCurrentEditor(null); - - resetTaskId = Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { - Bukkit.dispatchCommand(Bukkit.getConsoleSender() ,"reset confirm"); - }, 10 * 60 * 20); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/listeners/BlockCreateListener.java b/src/main/java/de/fanta/challenges/listeners/BlockCreateListener.java new file mode 100644 index 0000000..3345b7d --- /dev/null +++ b/src/main/java/de/fanta/challenges/listeners/BlockCreateListener.java @@ -0,0 +1,27 @@ +package de.fanta.challenges.listeners; + +import de.fanta.challenges.Challenges; +import org.bukkit.GameMode; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; + +public class BlockCreateListener implements Listener { + + private Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onBlockPlace(BlockPlaceEvent e) { + if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { + e.setCancelled(true); + } + } + + @EventHandler + public void onBucketPlace(PlayerBucketEmptyEvent e) { + if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { + e.setCancelled(true); + } + } +} diff --git a/src/main/java/de/fanta/challenges/listeners/BlockDestroyListener.java b/src/main/java/de/fanta/challenges/listeners/BlockDestroyListener.java new file mode 100644 index 0000000..98e66af --- /dev/null +++ b/src/main/java/de/fanta/challenges/listeners/BlockDestroyListener.java @@ -0,0 +1,57 @@ +package de.fanta.challenges.listeners; + + + +import de.fanta.challenges.Challenges; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockExplodeEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.inventory.ItemStack; + +public class BlockDestroyListener implements Listener { + + private Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onBlockBreak(BlockBreakEvent e) { + if (this.plugin.getConfig().getBoolean("rnddrops") && plugin.getTimer().isRunning()) { + e.setDropItems(false); + e.getBlock().getWorld().dropItem(e.getBlock().getLocation().add(0.5D, 0.5D, 0.5D), new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(e.getBlock()))); + } + if ((!plugin.getTimer().isRunning()) && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { + e.setCancelled(true); + } + } + + @EventHandler + public void onBlockExplode(BlockExplodeEvent e) { + if (this.plugin.getConfig().getBoolean("rnddrops")) { + e.blockList().forEach(block -> { + if(!block.getType().isAir()){ + block.getWorld().dropItem(block.getLocation().add(0.5D, 0.5D, 0.5D),new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(block))); + block.setType(Material.AIR); + } + }); + e.blockList().clear(); + } + } + + @EventHandler + public void onEntityExplode(EntityExplodeEvent e) { + if (this.plugin.getConfig().getBoolean("rnddrops")) { + e.blockList().forEach(block -> { + if(!block.getType().isAir()){ + block.getWorld().dropItem(block.getLocation().add(0.5D, 0.5D, 0.5D),new ItemStack(this.plugin.getRandomDropsManager().getMaterialFromBlock(block))); + block.setType(Material.AIR); + } + }); + e.blockList().clear(); + } + } + +} + diff --git a/src/main/java/de/fanta/challenges/listeners/DamageListener.java b/src/main/java/de/fanta/challenges/listeners/DamageListener.java new file mode 100644 index 0000000..cec3a4c --- /dev/null +++ b/src/main/java/de/fanta/challenges/listeners/DamageListener.java @@ -0,0 +1,208 @@ +package de.fanta.challenges.listeners; + +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; +import org.bukkit.Sound; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.entity.TNTPrimed; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.player.PlayerExpChangeEvent; +import org.bukkit.event.player.PlayerToggleSneakEvent; +import org.bukkit.event.player.PlayerToggleSprintEvent; + +public class DamageListener implements Listener { + + private Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onDamage(EntityDamageEvent e) { + 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) { + if (plugin.getConfig().getBoolean("deathonfall")) { + if (plugin.getConfig().getBoolean("dmginchat")) { + Bukkit.broadcastMessage(Challenges.PREFIX + "§6 " + p.getName() + " §chat §4" + p.getHealth() + " §cHP Schaden genommen durch §4" + e.getCause()); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + p.setHealth(0); + } + }, 1); + } else if (plugin.getConfig().getBoolean("dmginchat") && (plugin.getTimer().isRunning())) { + Bukkit.broadcastMessage(Challenges.PREFIX + "§6 " + p.getName() + " §chat §4" + dmg + " §cHP Schaden genommen durch §4" + e.getCause()); + } + } else if (e.getCause() == DamageCause.CUSTOM) { + if (!p.isSneaking() && (plugin.getConfig().getBoolean("dmginchat"))) { + Bukkit.broadcastMessage(Challenges.PREFIX + "§6 " + p.getName() + " §chat §4" + plugin.getConfig().getDouble("sneakdmg") + " §cHP Schaden genommen durch §4SNEAKING"); + } + } else if (e.getCause() == DamageCause.ENTITY_ATTACK || e.getCause() == DamageCause.ENTITY_EXPLOSION) { + + } else if (plugin.getConfig().getBoolean("dmginchat") && (plugin.getTimer().isRunning())) { + Bukkit.broadcastMessage(Challenges.PREFIX + "§6 " + p.getName() + " §chat §4" + dmg + " §cHP Schaden genommen durch §4" + e.getCause()); + } + 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.getTimer().isRunning()) { + e.setCancelled(true); + } + } + + @EventHandler + public void onEntityDamage(EntityDamageByEntityEvent e) { + if ((e.getEntity() instanceof Player) && (e.getFinalDamage() > 0) && (plugin.getTimer().isRunning())) { + Player p = (Player) e.getEntity(); + String dmg = new DecimalFormat("#.##").format(e.getFinalDamage()); + if ((e.getCause() == DamageCause.ENTITY_ATTACK || e.getCause() == DamageCause.ENTITY_EXPLOSION) && plugin.getConfig().getBoolean("dmginchat")) { + Bukkit.broadcastMessage(Challenges.PREFIX + "§6 " + p.getName() + " §chat §4" + dmg + " §cHP Schaden genommen durch §4" + e.getDamager().getName()); + } + } + if (!plugin.getTimer().isRunning()) { + e.setCancelled(true); + } + } + + @EventHandler + public void onPlayerSneak(PlayerToggleSneakEvent e) { + Player p = e.getPlayer(); + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { + 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); + EntityType tnt = EntityType.PRIMED_TNT; + Location loc = pp.getLocation(); + TNTPrimed PRIME_TNT = (TNTPrimed) pp.getWorld().spawnEntity(loc, tnt); + PRIME_TNT.setCustomName("§c§lNUKE"); + PRIME_TNT.setFuseTicks(15); + PRIME_TNT.setYield(120); + PRIME_TNT.setIsIncendiary(true); + } + } else { + p.damage(plugin.getConfig().getDouble("sneakdmg")); + } + } + } + } + } + + @EventHandler + public void onPlayerSprint(PlayerToggleSprintEvent e) { + Player p = e.getPlayer(); + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { + if (!p.isSprinting()) { + if (plugin.getConfig().getBoolean("deathonsprint")) { + if (plugin.getConfig().getBoolean("tntdeath")) { + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.sendTitle("§c" + p.getName() + " §aist gesprintet!", "§bBOOOM :>", 5, 50, 5); + EntityType tnt = EntityType.PRIMED_TNT; + Location loc = pp.getLocation(); + TNTPrimed PRIME_TNT = (TNTPrimed) pp.getWorld().spawnEntity(loc, tnt); + PRIME_TNT.setCustomName("§c§lNUKE"); + PRIME_TNT.setFuseTicks(15); + PRIME_TNT.setYield(120); + PRIME_TNT.setIsIncendiary(true); + } + } else { + p.setHealth(0); + } + } + } + } + } + + @EventHandler + public void onPlayerJump(PlayerJumpEvent e) { + Player p = e.getPlayer(); + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { + if (plugin.getConfig().getBoolean("deathonjump")) { + if (plugin.getConfig().getBoolean("tntdeath")) { + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.sendTitle("§c" + p.getName() + " §aist gesprungen!", "§bBOOOM :>", 5, 50, 5); + EntityType tnt = EntityType.PRIMED_TNT; + Location loc = pp.getLocation(); + TNTPrimed PRIME_TNT = (TNTPrimed) pp.getWorld().spawnEntity(loc, tnt); + PRIME_TNT.setCustomName("§c§lNUKE"); + PRIME_TNT.setFuseTicks(15); + PRIME_TNT.setYield(120); + PRIME_TNT.setIsIncendiary(true); + } + } else { + p.setHealth(0); + } + } + } + } + + @EventHandler + public void onDamageclear(EntityDamageEvent e) { + if (e.getEntity() instanceof Player) { + Player p = (Player) e.getEntity(); + if (e.getEntity() instanceof Player) { + if (plugin.getConfig().getBoolean("clinvdmg")) { + if (plugin.getTimer().isRunning() && p.getGameMode() == GameMode.SURVIVAL) { + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.getInventory().clear(); + ChatUtil.sendNormalMessage(pp, p.getName() + " hat Schaden bekommen! Alle Inventare wurden gelöscht!"); + + } + } + } + } + } + } + + @EventHandler + public void onPlayerGetXP(PlayerExpChangeEvent e) { + Player p = e.getPlayer(); + if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { + if (plugin.getConfig().getBoolean("xpdeath")) { + if (plugin.getConfig().getBoolean("tntdeath")) { + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.sendTitle("§c" + p.getName() + " §ahat XP eingesammelt!", "§bPling :>", 5, 50, 5); + EntityType tnt = EntityType.PRIMED_TNT; + Location loc = pp.getLocation(); + TNTPrimed PRIME_TNT = (TNTPrimed) pp.getWorld().spawnEntity(loc, tnt); + PRIME_TNT.setCustomName("§c§lNUKE"); + PRIME_TNT.setFuseTicks(15); + PRIME_TNT.setYield(120); + PRIME_TNT.setIsIncendiary(true); + } + } else { + p.setHealth(0); + } + } + } + } +} diff --git a/src/main/java/de/fanta/challenges/listeners/DeathListener.java b/src/main/java/de/fanta/challenges/listeners/DeathListener.java new file mode 100644 index 0000000..79f43e1 --- /dev/null +++ b/src/main/java/de/fanta/challenges/listeners/DeathListener.java @@ -0,0 +1,74 @@ +package de.fanta.challenges.listeners; + + + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.utils.ChatUtil; +import net.md_5.bungee.api.ChatColor; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.entity.EnderDragon; +import org.bukkit.entity.Player; +import org.bukkit.entity.Wither; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerRespawnEvent; + +public class DeathListener implements Listener { + + private Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (plugin.getConfig().getBoolean("onelife")) { + plugin.getTimer().stopTimer(); + for (Player p : Bukkit.getOnlinePlayers()) { + p.setGameMode(GameMode.SPECTATOR); + } + e.setDeathMessage("§6" + e.getEntity().getName() + " §cist gestorben!"); + Bukkit.broadcastMessage("§cVerschwendete Zeit §6" + plugin.getTimer().formatTime(ChatColor.GOLD)); + Bukkit.broadcastMessage("§aWelt Seed: §b" + Bukkit.getWorlds().get(0).getSeed()); + Bukkit.broadcastMessage("§6Um alle wiederzubeleben benutze §c/revive ALL"); + } else { + e.setDeathMessage("§6" + e.getEntity().getName() + " §cist gestorben! §6(" + e.getEntity().getWorld().getName() + " " + e.getEntity().getLocation().getBlockX() + " " + e.getEntity().getLocation().getBlockY() + " " + e.getEntity().getLocation().getBlockZ() + "§c)"); + if (!plugin.getConfig().getBoolean("respawn")) { + Player editor = plugin.getCurrentEditor(); + ChatUtil.sendNormalMessage(editor, "§6Benutze §c/revive " + e.getEntity().getName() + " [world] [x] [y] [z] §6um ihn wiederzubeleben!"); + } + } + } + + @EventHandler + public void onPlayerRespawn(PlayerRespawnEvent e) { + if (!plugin.getConfig().getBoolean("respawn")) { + e.getPlayer().sendTitle("§cDu bist gestorben!", "§4Du bist nun Zuschauer", 10, 80, 10); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + e.getPlayer().setGameMode(GameMode.SPECTATOR); + } + }, 1); + } + } + + @EventHandler + public void DragonDeath(EntityDeathEvent e) { + if ((e.getEntity() instanceof EnderDragon && plugin.getConfig().getBoolean("dragon")) || (e.getEntity() instanceof Wither && plugin.getConfig().getBoolean("wither"))) { + plugin.getTimer().stopTimer(); + Bukkit.broadcastMessage(Challenges.PREFIX + ChatColor.GREEN + ChatColor.BOLD + ChatColor.MAGIC + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + Bukkit.broadcastMessage(Challenges.PREFIX); + Bukkit.broadcastMessage(Challenges.PREFIX); + Bukkit.broadcastMessage(Challenges.PREFIX); + Bukkit.broadcastMessage(Challenges.PREFIX + " §8>> §aDie Challenge wurde §2§lerfolgreich §aabgeschlossen."); + Bukkit.broadcastMessage(Challenges.PREFIX + " §8>> §7Der §2§l" + e.getEntity().toString().toLowerCase() + " §7wurde besiegt."); + Bukkit.broadcastMessage(Challenges.PREFIX + " §8>> §7Benötigte Zeit: §2§l" + plugin.getTimer().formatTime(ChatColor.GREEN) + "§7!"); + Bukkit.broadcastMessage(Challenges.PREFIX + " §8>> §7Seed: §2§l" + Bukkit.getWorlds().get(0).getSeed()); + Bukkit.broadcastMessage(Challenges.PREFIX); + Bukkit.broadcastMessage(Challenges.PREFIX); + Bukkit.broadcastMessage(Challenges.PREFIX); + Bukkit.broadcastMessage(Challenges.PREFIX + ChatColor.GREEN + ChatColor.BOLD + ChatColor.MAGIC + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + } + } +} diff --git a/src/main/java/de/fanta/challenges/listeners/InteractListener.java b/src/main/java/de/fanta/challenges/listeners/InteractListener.java new file mode 100644 index 0000000..1626246 --- /dev/null +++ b/src/main/java/de/fanta/challenges/listeners/InteractListener.java @@ -0,0 +1,45 @@ +package de.fanta.challenges.listeners; + + + +import de.fanta.challenges.Challenges; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.entity.EntityType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; + +public class InteractListener implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onBlockClick(PlayerInteractEvent e) { + if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (e.getClickedBlock().getType() == Material.CRAFTING_TABLE) { + if (!plugin.getConfig().getBoolean("craftingtable")) { + e.setCancelled(true); + } + } + if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() != GameMode.CREATIVE) { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onEntityClick(PlayerInteractEntityEvent e) { + if (e.getRightClicked().getType() == EntityType.VILLAGER) { + if (!plugin.getConfig().getBoolean("allowtrading")) { + e.setCancelled(true); + } + } + if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() != GameMode.CREATIVE) { + e.setCancelled(true); + } + } +} + diff --git a/src/main/java/de/fanta/challenges/listeners/InventoryClickListener.java b/src/main/java/de/fanta/challenges/listeners/InventoryClickListener.java new file mode 100644 index 0000000..e04bf8f --- /dev/null +++ b/src/main/java/de/fanta/challenges/listeners/InventoryClickListener.java @@ -0,0 +1,46 @@ +package de.fanta.challenges.listeners; + + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.utils.ChatUtil; +import de.fanta.challenges.commands.coords.CoordsCommand; +import de.fanta.challenges.commands.coords.CoordsDeleteCommand; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +public class InventoryClickListener implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + + @EventHandler + public void InvClick(InventoryClickEvent e) { + String invname = e.getView().getTitle(); + Player p = (Player) e.getWhoClicked(); + int slot = e.getRawSlot(); + if (invname.equals(CoordsCommand.CGUIN)) { + e.setCancelled(true); + if (slot >= 0 && slot <= 44) { + if (CoordsCommand.CoordsGUI.getItem(slot) != null && p.hasPermission("challenges.coords.delete")) { + p.performCommand("coords delete " + e.getCurrentItem().getItemMeta().getDisplayName()); + } + } + } + if (invname.equals(CoordsDeleteCommand.CDGUIN)) { + e.setCancelled(true); + if (slot == 0) { + String cname = CoordsDeleteCommand.CoordsDeleteGUI.getItem(4).getItemMeta().getDisplayName(); + plugin.getConfig().set("Saved_Locations." + cname, null); + plugin.saveConfig(); + ChatUtil.sendNormalMessage(p, "Position " + cname + " wurde gelöscht!"); + p.closeInventory(); + } + if (slot == 8) { + p.performCommand("coords"); + } + } + } +} + diff --git a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java new file mode 100644 index 0000000..0af1d84 --- /dev/null +++ b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java @@ -0,0 +1,27 @@ +package de.fanta.challenges.listeners; + +import de.fanta.challenges.Challenges; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityTargetLivingEntityEvent; +import org.bukkit.event.entity.FoodLevelChangeEvent; + +public class PlayerListener implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + + @EventHandler + public void onEntityTarget(EntityTargetLivingEntityEvent e) { + if (!plugin.getTimer().isRunning()) { + e.setCancelled(true); + } + } + + @EventHandler + public void onFoodChange(FoodLevelChangeEvent e) { + if (!plugin.getTimer().isRunning()) { + e.setCancelled(true); + } + } +} diff --git a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java new file mode 100644 index 0000000..b1771f0 --- /dev/null +++ b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java @@ -0,0 +1,101 @@ +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.utils.ChatUtil; +import net.md_5.bungee.api.ChatColor; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +public class QuitJoinListener implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + private int resetTaskId = -1; + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent e) { + if (resetTaskId > 0) { + Bukkit.getScheduler().cancelTask(resetTaskId); + resetTaskId = -1; + } + + Player p = e.getPlayer(); + Bukkit.broadcastMessage(Challenges.PREFIX + " " + ChatColor.of("#3D98DC") + p.getName() + ChatColor.of("#1FFF00") + " hat die Lobby betreten! " + ChatColor.of("#E4E737") + "[" + Bukkit.getServer().getOnlinePlayers().size() + "/" + Bukkit.getServer().getMaxPlayers() + "]"); + e.setJoinMessage(null); + if (plugin.getConfig().getBoolean("sharedmg")) { + int rnd = new Random().nextInt(Bukkit.getOnlinePlayers().size()); + Player rp = (Player) Bukkit.getServer().getOnlinePlayers().toArray()[rnd]; + p.setHealth(rp.getHealth()); + } + if (this.plugin.getConfig().getBoolean("tabhp")) { + this.plugin.getSBManager().createScoreboard(p); + } + + if (plugin.getCurrentEditor() == null) { + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { + if (p.hasPermission("Challenges.editor")) { + plugin.setCurrentEditor(p); + ChatUtil.sendNormalMessage(p, "Du bist nun der Editor dieser Lobby!"); + } else { + ChatUtil.sendWarningMessage(p, "Es ist aktuell kein Editor in dieser Lobby"); + ChatUtil.sendWarningMessage(p, "Um selbst Editor zu werden musst du VIP sein!"); + } + }, 1L); + } else { + ChatUtil.sendNormalMessage(p, plugin.getCurrentEditor().getName() + " ist der Editor dieser Lobby!"); + } + + Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size())); + } + + @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() + "]"); + e.setQuitMessage(null); + + if (Bukkit.getOnlinePlayers().size() == 1) { + plugin.getTimer().stopTimer(); + } + + if (plugin.getCurrentEditor() != null && player.getUniqueId().equals(plugin.getCurrentEditor().getUniqueId())) { + if (Bukkit.getServer().getOnlinePlayers().size() - 1 > 0) { + Random random = new Random(); + Player randomPlayer; + + List onlinePlayersWithPermission = Bukkit.getOnlinePlayers().stream().filter(p -> p.hasPermission("Challenges.editor")).distinct().collect(Collectors.toList()); + onlinePlayersWithPermission.remove(player); + if (onlinePlayersWithPermission.size() > 0) { + int rnd = random.nextInt(onlinePlayersWithPermission.size()); + randomPlayer = onlinePlayersWithPermission.get(rnd); + } else { + List onlinePlayers = new ArrayList<>(Bukkit.getOnlinePlayers()); + onlinePlayers.remove(player); + int rnd = random.nextInt(onlinePlayers.size()); + randomPlayer = onlinePlayers.get(rnd); + } + plugin.setCurrentEditor(randomPlayer); + ChatUtil.sendNormalMessage(randomPlayer, "Du bist nun der Editor dieser Lobby!"); + Bukkit.broadcastMessage(Challenges.PREFIX + " " + ChatColor.GREEN + randomPlayer.getName() + " ist nun der Editor dieser Lobby!"); + } else { + plugin.setCurrentEditor(null); + + resetTaskId = Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { + Bukkit.dispatchCommand(Bukkit.getConsoleSender() ,"reset confirm"); + }, 10 * 60 * 20); + } + } + + Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - 1)); + } +}