diff --git a/Challenge/pom.xml b/Challenge/pom.xml index 3130134..07ab086 100644 --- a/Challenge/pom.xml +++ b/Challenge/pom.xml @@ -31,9 +31,9 @@ provided - com.github.Jumper251 + me.Jumper251 AdvancedReplay - master-bdb2aab5be-1 + 1.8.7 provided diff --git a/Challenge/src/main/java/de/fanta/challenge/Challenge.java b/Challenge/src/main/java/de/fanta/challenge/Challenge.java index 15696df..1556210 100644 --- a/Challenge/src/main/java/de/fanta/challenge/Challenge.java +++ b/Challenge/src/main/java/de/fanta/challenge/Challenge.java @@ -333,7 +333,7 @@ ReplayAPI replayAPI = ReplayAPI.getInstance(); Replay replay = DeathrunChallengeEventMonth.currentReplay; if (replay != null) { - replayAPI.stopReplay(replay.getId(), true); + replayAPI.stopReplay(replay.getId(), true, false, true); } } diff --git a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEventMonth.java b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEventMonth.java index 76ea1ee..650c040 100644 --- a/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEventMonth.java +++ b/Challenge/src/main/java/de/fanta/challenge/challenges/ChallengeEvents/DeathrunChallengeEventMonth.java @@ -7,6 +7,7 @@ import de.fanta.challenge.score.ChallengePlayer; import de.fanta.challenge.score.Scorable; import de.fanta.challenge.score.ScoreManager; +import de.fanta.challenge.scoreboard.ChallengeScoreboardTeam; import de.fanta.challenge.utils.Config; import de.fanta.challenge.utils.CoordsTargeter; import de.fanta.challenge.utils.CustomFontUtil; @@ -25,6 +26,7 @@ import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; @@ -37,7 +39,6 @@ import org.bukkit.entity.Animals; import org.bukkit.entity.Boat; import org.bukkit.entity.ChestBoat; -import org.bukkit.entity.Horse; import org.bukkit.entity.Monster; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -57,7 +58,11 @@ import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.vehicle.VehicleDamageEvent; +import org.bukkit.event.world.ChunkLoadEvent; +import org.bukkit.event.world.ChunkUnloadEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ShapelessRecipe; +import org.bukkit.inventory.meta.SuspiciousStewMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; import org.bukkit.potion.PotionEffect; @@ -111,6 +116,7 @@ private static final ConcurrentHashMap deathScore = new ConcurrentHashMap<>(); private static ChallengeScoreboard challengeScoreboard; + private static ChallengeScoreboardTeam challengeScoreboardTeam; private static final HashMap positionColors = new HashMap<>(); private static ReplayAPI replayAPI; @@ -317,6 +323,7 @@ public void onPlayerJoin(PlayerJoinEvent e) { if (Objects.equals(Config.getString("event.type"), "deathrunMonth")) { challengeScoreboard.addPlayer(e.getPlayer()); + challengeScoreboardTeam.addEntry(e.getPlayer().getName()); e.getPlayer().setResourcePack(TexturePackUrl, ""); loadingTexturePackPlayer.add(e.getPlayer().getUniqueId()); @@ -331,6 +338,7 @@ blockBreakEvent.callEvent(); block.setType(Material.AIR); } + giveStewRecipeToPlayer(e.getPlayer()); } } @@ -340,6 +348,8 @@ CoordsTargeter.removeLocation(e.getPlayer().getUniqueId()); loadingTexturePackPlayer.remove(e.getPlayer().getUniqueId()); deniedTexturePackPlayer.remove(e.getPlayer().getUniqueId()); + challengeScoreboard.removePlayer(e.getPlayer()); + challengeScoreboardTeam.removeEntry(e.getPlayer().getName()); } } @@ -367,6 +377,7 @@ plugin.getComponentUtil().sendErrorMessage(e.getPlayer(), "Du hast das Texturanpacket abgelehnt. Alle Stats findest du in der Lobby bei /tt deathrun-monat"); plugin.getComponentUtil().sendErrorMessage(e.getPlayer(), "Du hast das Texturanpacket abgelehnt. Alle Stats findest du in der Lobby bei /tt deathrun-monat"); challengeScoreboard.removePlayer(e.getPlayer()); + challengeScoreboardTeam.removeEntry(e.getPlayer().getName()); deniedTexturePackPlayer.add(e.getPlayer().getUniqueId()); loadingTexturePackPlayer.remove(e.getPlayer().getUniqueId()); BossBar bossBar = bossBarMap.remove(e.getPlayer()); @@ -414,6 +425,17 @@ startReplayScheduler(); } + ItemStack suspiciousStew = new ItemStack(Material.SUSPICIOUS_STEW); + SuspiciousStewMeta stewMeta = (SuspiciousStewMeta) suspiciousStew.getItemMeta(); + stewMeta.addCustomEffect(new PotionEffect(PotionEffectType.REGENERATION, 8 * 20, 1), true); + suspiciousStew.setItemMeta(stewMeta); + NamespacedKey key = new NamespacedKey(plugin, "heal_suspicious_stew"); + ShapelessRecipe recipe = new ShapelessRecipe(key, suspiciousStew); + recipe.addIngredient(Material.BROWN_MUSHROOM); + recipe.addIngredient(Material.RED_MUSHROOM); + recipe.addIngredient(Material.BOWL); + recipe.addIngredient(Material.OXEYE_DAISY); + Bukkit.addRecipe(recipe); world = playerWold; @@ -422,6 +444,8 @@ positionColors.put(3, TextColor.fromHexString("#93FF8F")); challengeScoreboard = new ChallengeScoreboard(); + challengeScoreboardTeam = challengeScoreboard.registerNewTeam("player"); + challengeScoreboardTeam.setColor(ChatColor.GREEN); challengeScoreboard.setSidebarTitle(Component.text(CustomFontUtil.deathRunLogo)); Statistics statistics = plugin.getStatistics(); @@ -451,14 +475,21 @@ plugin.getServer().getOnlinePlayers().forEach(player1 -> { player1.setResourcePack(TexturePackUrl, "", true); challengeScoreboard.addPlayer(player1); + challengeScoreboardTeam.addEntry(player1.getName()); ScoreManager scoreManager = plugin.getScoreManager(); ChallengePlayer cp = new ChallengePlayer(player1.getUniqueId()); scoreManager.join(cp); scoreManager.updateScore(cp, 0); + giveStewRecipeToPlayer(player1); }); } + private static void giveStewRecipeToPlayer(Player player) { + NamespacedKey key = new NamespacedKey(plugin, "heal_suspicious_stew"); + player.discoverRecipe(key); + } + private static void startReplayScheduler() { long delay = getTicksUntilNextHour(); long oneHourInTicks = 20 * 60 * 60; @@ -474,7 +505,7 @@ private static void saveAndStartNewReplay() { if (currentReplay != null) { - replayAPI.stopReplay(currentReplay.getId(), true, true); + replayAPI.stopReplay(currentReplay.getId(), true, true, true); } startNewReplay(); } @@ -527,6 +558,9 @@ } private void updateScore() { + if (!plugin.getTimer().isRunning()) { + return; + } plugin.getVanish().getPlayerListWithoutVanishPlayers().forEach(player -> { if (player.isDead()) { return; @@ -661,7 +695,7 @@ } private Component getScorebordLine(String pos, String playerName, Style nameTextStyle, String score) { - return Component.text(pos + ". ").append(Component.text(playerName, nameTextStyle)).append(Component.text(" " + score, Color.BLUE)); + return Component.text(pos + ". ").append(Component.text(playerName, nameTextStyle)).append(Component.text(" " + score, Color.YELLOW)); } private void updateBossBar() { diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/CommandRegistration.java b/Challenge/src/main/java/de/fanta/challenge/commands/CommandRegistration.java index 906656d..4391e4d 100644 --- a/Challenge/src/main/java/de/fanta/challenge/commands/CommandRegistration.java +++ b/Challenge/src/main/java/de/fanta/challenge/commands/CommandRegistration.java @@ -2,6 +2,7 @@ import de.fanta.challenge.Challenge; import de.fanta.challenge.commands.challenges.ChallengeMaxPlayersCommand; +import de.fanta.challenge.commands.challenges.ChallengesAddTrashPickupItemCommand; import de.fanta.challenge.commands.challenges.ChallengesBanCommand; import de.fanta.challenge.commands.challenges.ChallengesCommand; import de.fanta.challenge.commands.challenges.ChallengesEnderSeeCommand; @@ -11,6 +12,7 @@ import de.fanta.challenge.commands.challenges.ChallengesMemoryCommand; import de.fanta.challenge.commands.challenges.ChallengesPingCommand; import de.fanta.challenge.commands.challenges.ChallengesPortScoreCommand; +import de.fanta.challenge.commands.challenges.ChallengesRemoveTrashPickupItemCommand; import de.fanta.challenge.commands.challenges.ChallengesSaveCommand; import de.fanta.challenge.commands.event.EventSaveScoresCommand; import de.fanta.challenge.commands.challenges.ChallengesUnBanCommand; @@ -72,6 +74,8 @@ challengesRouter.addCommandMapping(new ChallengesInvSeeCommand(plugin), "invsee"); challengesRouter.addCommandMapping(new ChallengesEnderSeeCommand(plugin), "endersee"); challengesRouter.addCommandMapping(new ChallengesPortScoreCommand(plugin), "portscore"); + challengesRouter.addCommandMapping(new ChallengesAddTrashPickupItemCommand(plugin), "addTrashPickupItem"); + challengesRouter.addCommandMapping(new ChallengesRemoveTrashPickupItemCommand(plugin), "removeTrashPickupItem"); CommandRouter resetRouter = new CommandRouter(plugin.getCommand("reset")); resetRouter.addCommandMapping(new ResetCommand(plugin)); diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesAddTrashPickupItemCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesAddTrashPickupItemCommand.java new file mode 100644 index 0000000..b2295be --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesAddTrashPickupItemCommand.java @@ -0,0 +1,76 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.Challenge; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import io.papermc.paper.registry.RegistryAccess; +import io.papermc.paper.registry.RegistryKey; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemType; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class ChallengesAddTrashPickupItemCommand extends SubCommand { + + private final Challenge plugin; + + public ChallengesAddTrashPickupItemCommand(Challenge plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + plugin.getComponentUtil().sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (!args.hasNext()) { + plugin.getComponentUtil().sendErrorMessage(player, "Du musst ein Material angeben!"); + return true; + } + + String materialStringKey = args.getNext(); + + RegistryAccess registryAccess = RegistryAccess.registryAccess(); + @NotNull Registry itemRegistry = registryAccess.getRegistry(RegistryKey.ITEM); + ItemType itemType = itemRegistry.get(NamespacedKey.fromString(materialStringKey)); + if (itemType == null) { + plugin.getComponentUtil().sendErrorMessage(player, materialStringKey + " gibt es nicht!"); + return true; + } + List materielStringKeys = Config.getStringList("TrashPickup." + player.getUniqueId()); + if (!materielStringKeys.contains(materialStringKey)) { + materielStringKeys.add(itemType.getKey().asString()); + Config.setValue("TrashPickup." + player.getUniqueId(), materielStringKeys); + plugin.getComponentUtil().sendNormalMessage(player, materialStringKey + " kann nun nicht mehr aufgehoben werden!"); + } else { + plugin.getComponentUtil().sendErrorMessage(player, materialStringKey + " steht schon in deiner Liste!"); + } + + + return true; + } + + @Override + public boolean hasRequiredPermission(CommandSender sender) { + return Config.getBoolean("TrashPickup.enable"); + } + + @Override + public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { + Collection tabs = new ArrayList<>(); + RegistryAccess registryAccess = RegistryAccess.registryAccess(); + @NotNull Registry itemRegistry = registryAccess.getRegistry(RegistryKey.ITEM); + itemRegistry.forEach(itemType -> tabs.add(itemType.getKey().asString())); + return tabs; + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesPortScoreCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesPortScoreCommand.java index 310a08d..4c8db69 100644 --- a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesPortScoreCommand.java +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesPortScoreCommand.java @@ -2,10 +2,8 @@ import de.fanta.challenge.Challenge; import de.fanta.challenge.challenges.ChallengeEvents.DeathrunChallengeEventMonth; -import de.fanta.challengeutils.Color; import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.commands.ArgsParser; -import net.kyori.adventure.text.Component; import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -26,20 +24,16 @@ return true; } - if (player.hasPermission("Challenges.editor.override")) { - int score = DeathrunChallengeEventMonth.getCurrentRunScore(player.getUniqueId()); - Location portLocation = player.getWorld().getSpawnLocation(); - if (score <= 0) { - portLocation = portLocation.toHighestLocation(); - } else { - portLocation.setX(score + 1000); - portLocation.toHighestLocation(); - } - - player.teleport(portLocation); - plugin.getComponentUtil().sendNormalMessage(player, "Du wurdest zu deinem Score Teleportiert."); - return true; + int score = DeathrunChallengeEventMonth.getCurrentRunScore(player.getUniqueId()); + Location portLocation = player.getWorld().getSpawnLocation(); + if (score > 0) { + portLocation.setX(score + 1000); } + portLocation = portLocation.toHighestLocation(); + portLocation = portLocation.add(0, 1, 0); + + player.teleport(portLocation); + plugin.getComponentUtil().sendNormalMessage(player, "Du wurdest zu deinem Score Teleportiert."); return true; } diff --git a/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesRemoveTrashPickupItemCommand.java b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesRemoveTrashPickupItemCommand.java new file mode 100644 index 0000000..b3f1a9f --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/commands/challenges/ChallengesRemoveTrashPickupItemCommand.java @@ -0,0 +1,62 @@ +package de.fanta.challenge.commands.challenges; + +import de.fanta.challenge.Challenge; +import de.fanta.challenge.utils.Config; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class ChallengesRemoveTrashPickupItemCommand extends SubCommand { + + private final Challenge plugin; + + public ChallengesRemoveTrashPickupItemCommand(Challenge plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + plugin.getComponentUtil().sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + + if (!args.hasNext()) { + plugin.getComponentUtil().sendErrorMessage(player, "Du musst ein Material angeben!"); + return true; + } + + String materialStringKey = args.getNext(); + + List materielStringKeys = Config.getStringList("TrashPickup." + player.getUniqueId()); + if (materielStringKeys.contains(materialStringKey)) { + materielStringKeys.remove(materialStringKey); + Config.setValue("TrashPickup." + player.getUniqueId(), materielStringKeys); + plugin.getComponentUtil().sendNormalMessage(player, materialStringKey + " kann nun wieder aufgehoben werden!"); + } else { + plugin.getComponentUtil().sendErrorMessage(player, materialStringKey + " steht nicht in deiner Liste!"); + } + + + return true; + } + + @Override + public boolean hasRequiredPermission(CommandSender sender) { + return Config.getBoolean("TrashPickup.enable"); + } + + @Override + public Collection onTabComplete(CommandSender sender, Command command, String alias, ArgsParser args) { + if (!(sender instanceof Player player)) { + return Collections.emptyList(); + } + return Config.getStringList("TrashPickup." + player.getUniqueId()); + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/OtherSettingsGui.java b/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/OtherSettingsGui.java index 720acf2..1155801 100644 --- a/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/OtherSettingsGui.java +++ b/Challenge/src/main/java/de/fanta/challenge/guis/settingsgui/OtherSettingsGui.java @@ -33,6 +33,7 @@ private static final int BACKPACK_INDEX = 25; private static final int GRAVESTONE_INDEX = 28; + private static final int PICKUP_TRASH_INDEX = 29; public OtherSettingsGui(Player player) { super(player, Bukkit.createInventory(null, INVENTORY_SIZE, plugin.getGuiPrefix().append(Component.text(" >> Other Settings")))); @@ -122,6 +123,15 @@ Config.setValue("gravestone", true); } } + case PICKUP_TRASH_INDEX -> { + if (Config.getBoolean("TrashPickup.enable")) { + plugin.getComponentUtil().sendTitleToAll(Component.text("Einstellungen"), Component.text("TrashPickup deaktiviert", Color.RED)); + Config.setValue("TrashPickup.enable", false); + } else { + plugin.getComponentUtil().sendTitleToAll(Component.text("Einstellungen"), Component.text("TrashPickup aktiviert", Color.GREEN)); + Config.setValue("TrashPickup.enable", true); + } + } default -> { } } @@ -200,6 +210,14 @@ item = ItemUtils.createGuiItem(Material.HOPPER, Component.text("Grabstein deaktiviert", Color.RED)); } } + + case PICKUP_TRASH_INDEX -> { + if (Config.getBoolean("TrashPickup.enable")) { + item = ItemUtils.createGuiItem(Material.ROTTEN_FLESH, Component.text("TrashPickup aktiviert", Color.GREEN), true); + } else { + item = ItemUtils.createGuiItem(Material.ROTTEN_FLESH, Component.text("TrashPickup deaktiviert", Color.RED)); + } + } default -> item = ItemUtils.EMPTY_ICON; } this.getInventory().setItem(i, item); diff --git a/Challenge/src/main/java/de/fanta/challenge/listeners/EventRegistration.java b/Challenge/src/main/java/de/fanta/challenge/listeners/EventRegistration.java index 4b2152d..fc0bc2f 100644 --- a/Challenge/src/main/java/de/fanta/challenge/listeners/EventRegistration.java +++ b/Challenge/src/main/java/de/fanta/challenge/listeners/EventRegistration.java @@ -55,6 +55,7 @@ pM.registerEvents(new DeathListener(), plugin); pM.registerEvents(new PlayerListener(), plugin); pM.registerEvents(new MinimapListener(), plugin); + pM.registerEvents(new PickupTrashListener(), plugin); pM.registerEvents(new BingoItemsGui(), plugin); pM.registerEvents(new ContainerListener(), plugin); diff --git a/Challenge/src/main/java/de/fanta/challenge/listeners/PickupTrashListener.java b/Challenge/src/main/java/de/fanta/challenge/listeners/PickupTrashListener.java new file mode 100644 index 0000000..d05ed36 --- /dev/null +++ b/Challenge/src/main/java/de/fanta/challenge/listeners/PickupTrashListener.java @@ -0,0 +1,23 @@ +package de.fanta.challenge.listeners; + +import de.fanta.challenge.utils.Config; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerAttemptPickupItemEvent; + +import java.util.List; + +public class PickupTrashListener implements Listener { + @EventHandler + public void onTryPickUp(PlayerAttemptPickupItemEvent e) { + if (Config.getBoolean("TrashPickup.enable")) { + List materielStringKeys = Config.getStringList("TrashPickup." + e.getPlayer().getUniqueId()); + if (!materielStringKeys.isEmpty()) { + String materialKey = e.getItem().getItemStack().getType().getKey().asString(); + if (materielStringKeys.contains(materialKey)) { + e.setCancelled(true); + } + } + } + } +} diff --git a/Challenge/src/main/java/de/fanta/challenge/listeners/QuitJoinListener.java b/Challenge/src/main/java/de/fanta/challenge/listeners/QuitJoinListener.java index 7e392b2..0f6fb6c 100644 --- a/Challenge/src/main/java/de/fanta/challenge/listeners/QuitJoinListener.java +++ b/Challenge/src/main/java/de/fanta/challenge/listeners/QuitJoinListener.java @@ -97,7 +97,6 @@ } } } - } if (plugin.isPlayerBanned(e.getPlayer().getUniqueId())) { @@ -138,7 +137,7 @@ } if (!plugin.getVanish().isVanish(player)) { e.quitMessage(null); - plugin.getComponentUtil().sendBrodCastMessage(plugin.getPrefixComponent().append(player.name().color(Color.BLUE).append(Component.text(" hat die Lobby verlassen! ", Color.RED).append(Component.text("[" + (Bukkit.getServer().getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers() - 1) + "/" + Bukkit.getServer().getMaxPlayers() + "]", Color.YELLOW))))); + plugin.getComponentUtil().sendBrodCastMessage(player.name().color(Color.BLUE).append(Component.text(" hat die Lobby verlassen! ", Color.RED).append(Component.text("[" + (Bukkit.getServer().getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers() - 1) + "/" + Bukkit.getServer().getMaxPlayers() + "]", Color.YELLOW)))); //TODO SCOREBORDthis.plugin.getSBManager().removeScoreboard(player); Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers() - 1)); diff --git a/Challenge/src/main/resources/config.yml b/Challenge/src/main/resources/config.yml index 7990a1d..a7cb042 100644 --- a/Challenge/src/main/resources/config.yml +++ b/Challenge/src/main/resources/config.yml @@ -64,4 +64,5 @@ item: AIR money: 100 nether: - enabled: false \ No newline at end of file + enabled: false +TrashPickup: false \ No newline at end of file