diff --git a/src/main/java/de/fanta/challenges/Bingo.java b/src/main/java/de/fanta/challenges/Bingo.java index f71c77e..278894d 100644 --- a/src/main/java/de/fanta/challenges/Bingo.java +++ b/src/main/java/de/fanta/challenges/Bingo.java @@ -49,7 +49,7 @@ this.running = running; } - public boolean addDiscoveredItem(Player player, ItemStack itemStack) { + public void addDiscoveredItem(Player player, ItemStack itemStack) { UUID uuid = player.getUniqueId(); Material material = itemStack.getType(); if (this.materials.contains(material)) { @@ -67,16 +67,14 @@ if(plugin.getScoreManager().getScore(player) == materials.size()){ ChatUtil.sendNormalMessage(player, "Wuhuu du hast gewonnen :>"); plugin.getTimer().stopTimer(); - GUIUtils.sendTitleToAll("Event", player.getName() + " hat alle Items gefunden!", ChatUtil.PLAYER); + GUIUtils.sendTitleToAll("Event", ChatUtil.PLAYER + player.getName() + ChatUtil.NORMAL + " hat alle Items gefunden!", ChatUtil.PLAYER); for (Player pp : Bukkit.getOnlinePlayers()) { ChatUtil.sendNormalMessage(pp, ChatUtil.PLAYER + player.getName() + ChatUtil.NORMAL + " hat alle Items gefunden!"); pp.setGameMode(GameMode.SPECTATOR); } } - return true; } } - return false; } } diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index adc676a..7da4175 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -277,10 +277,6 @@ return bingo; } - public void setBingo(Bingo bingo) { - this.bingo = bingo; - } - 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 d170c3b..f21de90 100644 --- a/src/main/java/de/fanta/challenges/Timer.java +++ b/src/main/java/de/fanta/challenges/Timer.java @@ -79,7 +79,9 @@ sendTimerActionBar(ChatColor.GREEN); } }, 20L, 20L); - + if (!plugin.getConfig().getBoolean("firsttimerstart")) { + GUIUtils.setConfig("firsttimerstart", true); + } Bukkit.getPluginManager().callEvent(new TimerChangedEvent(true)); } @@ -129,6 +131,10 @@ return color + StringUtil.formatTimespan((long) time * 1000L, " Tag/e ", "", "", "", ":", ":", false, true); } + public String formatTime() { + return StringUtil.formatTimespan((long) time * 1000L, " Tag/e ", "", "", "", ":", ":", false, true); + } + public void reverseTimer() { this.reverse = !this.reverse; } diff --git a/src/main/java/de/fanta/challenges/commands/BackpackCommand.java b/src/main/java/de/fanta/challenges/commands/BackpackCommand.java index 1460de3..75d16c3 100644 --- a/src/main/java/de/fanta/challenges/commands/BackpackCommand.java +++ b/src/main/java/de/fanta/challenges/commands/BackpackCommand.java @@ -22,7 +22,11 @@ return true; } Player p = (Player) sender; - plugin.getBackpack().open(p); + if (!plugin.getBingo().isRunning()) { + plugin.getBackpack().open(p); + } else { + ChatUtil.sendWarningMessage(p, "Bei einem Bingo Event kannst du den Backpack nicht Nutzen!"); + } return true; } } diff --git a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java index 5c838d4..031c0b6 100644 --- a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java +++ b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java @@ -32,7 +32,6 @@ import de.fanta.challenges.commands.timer.TimerSetCommand; import de.fanta.challenges.commands.timer.TimerStartCommand; import de.iani.cubesideutils.bukkit.commands.CommandRouter; -import org.bukkit.material.Command; public class CommandRegistration { private final Challenges plugin; @@ -50,7 +49,6 @@ challengesRouter.addCommandMapping(new ChallengesHelpCommand(plugin), "help"); challengesRouter.addCommandMapping(new ChallengesKickCommand(plugin), "kick"); - CommandRouter resetRouter = new CommandRouter(plugin.getCommand("reset")); resetRouter.addCommandMapping(new ResetCommand(plugin)); resetRouter.addCommandMapping(new ResetConfirmCommand(plugin), "confirm"); @@ -100,5 +98,8 @@ CommandRouter bingoRouter = new CommandRouter(plugin.getCommand("bingo")); bingoRouter.addCommandMapping(new BingoCommand(plugin)); + + CommandRouter villageRouter = new CommandRouter(plugin.getCommand("village")); + villageRouter.addCommandMapping(new VillageCommand(plugin)); } } diff --git a/src/main/java/de/fanta/challenges/commands/VillageCommand.java b/src/main/java/de/fanta/challenges/commands/VillageCommand.java new file mode 100644 index 0000000..5b5b2b0 --- /dev/null +++ b/src/main/java/de/fanta/challenges/commands/VillageCommand.java @@ -0,0 +1,53 @@ +package de.fanta.challenges.commands; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.Bukkit; +import org.bukkit.HeightMap; +import org.bukkit.Location; +import org.bukkit.StructureType; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class VillageCommand extends SubCommand { + + private final Challenges plugin; + + public VillageCommand(Challenges plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { + Player p = (Player) sender; + Location village = Bukkit.getWorlds().get(0).locateNearestStructure(p.getLocation(), StructureType.VILLAGE, 10000, true); + int x = village.getBlockX(); + int z = village.getBlockZ(); + Location villagetop = village.getWorld().getHighestBlockAt(x, z, HeightMap.MOTION_BLOCKING).getLocation().add(0, 1, 0); + int y = villagetop.getBlockY(); + Bukkit.getWorlds().get(0).setSpawnLocation(villagetop); + ChatUtil.sendNormalMessage(p, "Dorf: " + ChatUtil.PLAYER + x + " " + y + " " + z); + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.teleport(villagetop); + ChatUtil.sendNormalMessage(pp, "Dorfspawn gesetzt!"); + } + return true; + } else if (plugin.getCurrentEditor() != null) { + ChatUtil.sendErrorMessage(sender, "Du bist kein Editor! nur" + plugin.getCurrentEditor().getName() + " kann nach Dörfern suchen"); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Aktuell gibt es keinen Editor!"); + ChatUtil.sendErrorMessage(sender, "Um selbst Editor zu werden musst du dir im Freebuild VIP Kaufen!"); + return true; + } + } +} \ No newline at end of file diff --git a/src/main/java/de/fanta/challenges/listeners/BlockCreateListener.java b/src/main/java/de/fanta/challenges/listeners/BlockCreateListener.java index 1dd3f0b..f3eb1c2 100644 --- a/src/main/java/de/fanta/challenges/listeners/BlockCreateListener.java +++ b/src/main/java/de/fanta/challenges/listeners/BlockCreateListener.java @@ -9,7 +9,7 @@ public class BlockCreateListener implements Listener { - private Challenges plugin = Challenges.getPlugin(); + private final Challenges plugin = Challenges.getPlugin(); @EventHandler public void onBlockPlace(BlockPlaceEvent e) { diff --git a/src/main/java/de/fanta/challenges/listeners/DeathListener.java b/src/main/java/de/fanta/challenges/listeners/DeathListener.java index f61de08..fe78e18 100644 --- a/src/main/java/de/fanta/challenges/listeners/DeathListener.java +++ b/src/main/java/de/fanta/challenges/listeners/DeathListener.java @@ -48,19 +48,21 @@ @EventHandler public void DragonDeath(EntityDeathEvent e) { - if ((e.getEntity() instanceof EnderDragon && plugin.getConfig().getBoolean("target")) || (e.getEntity() instanceof Wither && !plugin.getConfig().getBoolean("target"))) { + if (!plugin.getConfig().getBoolean("event.enabled")) { + if ((e.getEntity() instanceof EnderDragon && plugin.getConfig().getBoolean("target")) || (e.getEntity() instanceof Wither && !plugin.getConfig().getBoolean("target"))) { 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>> §7Der §2§l" + e.getEntity().getName().toLowerCase() + " §7wurde besiegt."); + Bukkit.broadcastMessage(Challenges.PREFIX + " §8>> §7Der §2§l" + e.getEntity().getName().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/PlayerListener.java b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java index eb1a206..f148da1 100644 --- a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java +++ b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java @@ -3,6 +3,10 @@ import de.fanta.challenges.Bingo; import de.fanta.challenges.Challenges; import de.fanta.challenges.guis.eventgui.EventItemsGui; +import de.fanta.challenges.utils.ChatUtil; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -11,7 +15,12 @@ import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerAttemptPickupItemEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerBucketFillEvent; +import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -53,6 +62,21 @@ } @EventHandler + public void onPickItem(PlayerPickupItemEvent e) { + if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { + e.setCancelled(true); + } + } + + @EventHandler + public void onDropItem(PlayerDropItemEvent e) { + Player p = (Player) e.getPlayer(); + if (!plugin.getTimer().isRunning() && p.getGameMode() == GameMode.SURVIVAL) { + e.setCancelled(true); + } + } + + @EventHandler public void onInventoryClick(InventoryClickEvent e) { if (e.getClickedInventory() == null) return; @@ -68,4 +92,43 @@ bingo.addDiscoveredItem(player, itemStack); } } + + @EventHandler + public void onPayerMove(PlayerMoveEvent e) { + Player player = e.getPlayer(); + if (!plugin.getConfig().getBoolean("firsttimerstart")) { + if (!plugin.getTimer().isRunning() && player.getGameMode() == GameMode.SURVIVAL) { + Location spawn = Bukkit.getWorlds().get(0).getSpawnLocation(); + Location playerloc = player.getLocation(); + if (playerloc.distance(spawn) > 20) { + player.teleport(spawn); + ChatUtil.sendWarningMessage(player, "Du kommst erst vom Spawn weg wenn die Challenge gestartet wurde!"); + } + } + } + } + + @EventHandler + public void onBucketFill(PlayerBucketFillEvent e) { + ItemStack itemStack = e.getItemStack(); + Player player = e.getPlayer(); + Bingo bingo = plugin.getBingo(); + if (bingo.isRunning()) { + if (itemStack != null) { + bingo.addDiscoveredItem(player, itemStack); + } + } + } + + @EventHandler + public void onBucketEmpty(PlayerBucketEmptyEvent e) { + ItemStack itemStack = e.getItemStack(); + Player player = e.getPlayer(); + Bingo bingo = plugin.getBingo(); + if (bingo.isRunning()) { + if (itemStack != null) { + bingo.addDiscoveredItem(player, itemStack); + } + } + } } diff --git a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java index 0f5e7c3..d69e230 100644 --- a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java +++ b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java @@ -41,7 +41,7 @@ p.setHealth(rp.getHealth()); } - this.plugin.getSBManager().setScoreboard(p); + plugin.getSBManager().setScoreboard(p); if (plugin.getCurrentEditor() == null) { Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java index 33aa6d2..12e36ff 100644 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java @@ -50,6 +50,11 @@ p.setScoreboard(scoreboard); } + public void addScoreboard(Player p) { + team.addEntry(p.getName()); + p.setScoreboard(scoreboard); + } + public void updateTabHP() { if (plugin.getConfig().getBoolean("tabhp")) { if (this.tabHP == null) { diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java index d2bf25e..4611c11 100644 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java @@ -54,6 +54,7 @@ sb.append('\n'); sb.append("Erstellt von: ").append(ownerName).append('\n'); sb.append("Erstellt am: ").append(formatter.format(currentTime)).append('\n'); + sb.append("Timer: ").append(plugin.getTimer().formatTime()).append('\n'); sb.append("=".repeat(20)); sb.append('\n'); Map participants = getScores(); @@ -62,7 +63,7 @@ if (this.scores.isEmpty()) { sb.append(" Das Event hatte keine Teilnehmer!\n"); } else { - Set> sorted = this.scores.entrySet().stream().sorted((o1, o2) -> o1.getValue().compareTo(o2.getValue())*-1).collect(Collectors.toCollection(LinkedHashSet::new)); + Set> sorted = this.scores.entrySet().stream().sorted((o1, o2) -> o1.getValue().compareTo(o2.getValue()) * -1).collect(Collectors.toCollection(LinkedHashSet::new)); int i = 1; for (Map.Entry entry : sorted) { sb.append(i++).append(". ").append(entry.getKey()).append(" ").append(entry.getValue()).append("\n"); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 45fe634..8957dbd 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -22,6 +22,7 @@ killall: false maxtime: 600 timertime: 0 +firsttimerstart: false Saved_Locations: {} World_Name: world World_Reset: false diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 7c7fbef..8db992f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -49,4 +49,8 @@ usage: Use /event bingo: description: Bingo - usage: Use /bingo \ No newline at end of file + usage: Use /bingo + village: + description: Village + usage: /village + aliases: [dorf] \ No newline at end of file