diff --git a/pom.xml b/pom.xml index af2f6a6..6fe2771 100644 --- a/pom.xml +++ b/pom.xml @@ -108,7 +108,7 @@ maven-compiler-plugin - 3.8.1 + 3.10.1 17 diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index e1d6621..50453f9 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -5,6 +5,7 @@ import de.fanta.challenges.challenges.MLGChallenge; import de.fanta.challenges.challenges.RandomDropsChallenge; import de.fanta.challenges.commands.CommandRegistration; +import de.fanta.challenges.events.ChallengeEventStatusChangedEvent; import de.fanta.challenges.events.EventStatusChangedEvent; import de.fanta.challenges.events.PlayerCountChangedEvent; import de.fanta.challenges.events.ServerStatusChangedEvent; @@ -288,6 +289,7 @@ if (getConfig().getBoolean("event.enabled")) { Config.setValue("event.enabled", false); Bukkit.getPluginManager().callEvent(new EventStatusChangedEvent(false)); + Bukkit.getPluginManager().callEvent(new ChallengeEventStatusChangedEvent(false)); getScoreManager().saveScores(null); } if (texturepackid != null) { diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BingoChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BingoChallengeEvent.java index f05abbc..d1e6e0f 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BingoChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BingoChallengeEvent.java @@ -204,16 +204,6 @@ for (Player pp : Bukkit.getOnlinePlayers()) { pp.setGameMode(GameMode.SPECTATOR); } - return; - } - } - - if (!items.isEmpty()) { - for (ItemStack stack : player.getInventory().getContents()) { - if (stack != null && items.contains(stack.getType())) { - addDiscoveredItem(player, stack); - break; - } } } } else { @@ -254,15 +244,6 @@ } return; } - - if (!items.isEmpty()) { - for (ItemStack stack : player.getInventory().getContents()) { - if (stack != null && items.contains(stack.getType())) { - addDiscoveredItem(player, stack); - break; - } - } - } } } } diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java index 40bb1e2..82148bd 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java @@ -204,8 +204,8 @@ ScoreManager scoreManager = plugin.getScoreManager(); int score = scoreManager.getScore(new ChallengePlayer(placer.getUniqueId())); - if (e.getBlock().getX() == score + 1) { - scoreManager.updateScore(new ChallengePlayer(placer.getUniqueId()), 1); + if (e.getBlock().getX() >= score) { + scoreManager.setScore(new ChallengePlayer(placer.getUniqueId()), e.getBlock().getX()); } updateBossBar(); diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DifferentItemsChallenge.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DifferentItemsChallenge.java new file mode 100644 index 0000000..98c61e4 --- /dev/null +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DifferentItemsChallenge.java @@ -0,0 +1,160 @@ +package de.fanta.challenges.challenges.ChallengeEvents; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.events.ChallengeEventStatusChangedEvent; +import de.fanta.challenges.guis.eventgui.BingoItemsGui; +import de.fanta.challenges.scoreboard.ChallengePlayer; +import de.fanta.challenges.scoreboard.ScoreManager; +import de.fanta.challenges.utils.ChatUtil; +import de.fanta.challenges.utils.Config; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerAttemptPickupItemEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerBucketEntityEvent; +import org.bukkit.event.player.PlayerBucketFillEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; + +public class DifferentItemsChallenge implements Listener { + private static boolean running; + private static final Challenges plugin = Challenges.getPlugin(); + private final HashMap> playerMaterials = new HashMap<>(); + private static final Map bossBarMap = new HashMap<>(); + + @EventHandler + public void onActivation(ChallengeEventStatusChangedEvent event) { + if (Objects.equals(Config.getString("event.type"), "differentitems")) { + if (event.isRunning()) { + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + plugin.getScoreManager().join(new ChallengePlayer(pp.getUniqueId())); + } + updateBossBar(); + setRunning(true); + } else { + setRunning(false); + } + } + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + Player player = (Player) e.getWhoClicked(); + Inventory playerInv = BingoItemsGui.getPlayerInvs().get(player.getUniqueId()); + if (e.getClickedInventory() == null) { + return; + } + if (!isRunning()) { + return; + } + if (playerInv != null && playerInv.equals(e.getClickedInventory())) { + return; + } + ItemStack itemStack = e.getCurrentItem(); + if (itemStack != null && itemStack.getType() != Material.AIR) { + addDiscoveredItem(player, itemStack); + } + } + + @EventHandler + public void onPickUpItem(PlayerAttemptPickupItemEvent e) { + ItemStack itemStack = e.getItem().getItemStack(); + Player player = e.getPlayer(); + if (isRunning()) { + addDiscoveredItem(player, itemStack); + } + } + + @EventHandler + public void onBucketFill(PlayerBucketFillEvent e) { + ItemStack itemStack = e.getItemStack(); + Player player = e.getPlayer(); + if (isRunning()) { + if (itemStack != null) { + addDiscoveredItem(player, itemStack); + } + } + } + + @EventHandler + public void onBucketChatchFish(PlayerBucketEntityEvent e) { + ItemStack itemStack = e.getEntityBucket(); + if (isRunning()) { + addDiscoveredItem(e.getPlayer(), itemStack); + } + } + + @EventHandler + public void onBucketEmpty(PlayerBucketEmptyEvent e) { + ItemStack itemStack = e.getItemStack(); + Player player = e.getPlayer(); + if (isRunning()) { + if (itemStack != null) { + addDiscoveredItem(player, itemStack); + } + } + } + + @EventHandler + public void onJoin(PlayerJoinEvent e) { + if (isRunning()) { + plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer().getUniqueId())); + updateBossBar(); + } + } + + private void addDiscoveredItem(Player player, ItemStack itemStack) { + List playerMaterialList; + if (playerMaterials.containsKey(player.getUniqueId())) { + playerMaterialList = playerMaterials.get(player.getUniqueId()); + } else { + playerMaterialList = new ArrayList<>(); + } + + if (!playerMaterialList.contains(itemStack.getType())) { + playerMaterialList.add(itemStack.getType()); + playerMaterials.put(player.getUniqueId(), playerMaterialList); + plugin.getScoreManager().updateScore(new ChallengePlayer(player.getUniqueId()), 1); + ChatUtil.sendNormalMessage(player, "Item: " + ChatUtil.BLUE + itemStack.getI18NDisplayName() + ChatUtil.GREEN + " wurde Registriert"); + player.playSound(player, Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); + updateBossBar(); + } + } + + private void updateBossBar() { + ScoreManager scoreManager = plugin.getScoreManager(); + for (Player p : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + BossBar bossBar = bossBarMap.computeIfAbsent(p, player -> { + BossBar newBossBar = Bukkit.createBossBar(ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + scoreManager.getPosition(new ChallengePlayer(p.getUniqueId())) + ChatUtil.RED + " | " + ChatUtil.GREEN + "Score: " + ChatUtil.BLUE + scoreManager.getScore(new ChallengePlayer(p.getUniqueId())) + " Items", BarColor.GREEN, BarStyle.SOLID); + newBossBar.setVisible(true); + newBossBar.addPlayer(p); + return newBossBar; + }); + bossBar.setTitle(ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + scoreManager.getPosition(new ChallengePlayer(p.getUniqueId())) + ChatUtil.RED + " | " + ChatUtil.GREEN + "Score: " + ChatUtil.BLUE + scoreManager.getScore(new ChallengePlayer(p.getUniqueId())) + " Items"); + } + } + + private static void setRunning(boolean run) { + running = run; + } + + public static boolean isRunning() { + return running; + } +} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/SammelFieberChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/SammelFieberChallengeEvent.java index 2173895..c7032eb 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/SammelFieberChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/SammelFieberChallengeEvent.java @@ -17,6 +17,7 @@ import org.bukkit.boss.BarStyle; import org.bukkit.boss.BossBar; import org.bukkit.entity.Player; +import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; @@ -25,12 +26,16 @@ import org.bukkit.event.inventory.InventoryPickupItemEvent; import org.bukkit.event.player.PlayerAttemptPickupItemEvent; import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MerchantRecipe; import org.bukkit.inventory.meta.ItemMeta; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Objects; import java.util.UUID; @@ -301,4 +306,21 @@ } } + @EventHandler + public void onEntityClick(PlayerInteractEntityEvent e) { + if (!isRunning()) { + return; + } + if (e.getRightClicked() instanceof Villager villager) { + List trades = new ArrayList<>(); + for (MerchantRecipe trade : villager.getRecipes()) { + ItemStack stack = trade.getResult(); + if (stack.getType() != material) { + trades.add(trade); + } + } + villager.setRecipes(trades); + } + } + } diff --git a/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java index 439187e..93ec441 100644 --- a/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java +++ b/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java @@ -2,6 +2,7 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.ServerType; +import de.fanta.challenges.events.ChallengeEventStatusChangedEvent; import de.fanta.challenges.scoreboard.ChallengePlayer; import de.fanta.challenges.teams.ChallengeTeam; import de.fanta.challenges.teams.TeamUtils; @@ -68,6 +69,7 @@ } } } + Bukkit.getPluginManager().callEvent(new ChallengeEventStatusChangedEvent(true)); } }, 10, 20); diff --git a/src/main/java/de/fanta/challenges/commands/event/EventToggleCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventToggleCommand.java index f68ff37..5720294 100644 --- a/src/main/java/de/fanta/challenges/commands/event/EventToggleCommand.java +++ b/src/main/java/de/fanta/challenges/commands/event/EventToggleCommand.java @@ -1,6 +1,7 @@ package de.fanta.challenges.commands.event; import de.fanta.challenges.Challenges; +import de.fanta.challenges.events.ChallengeEventStatusChangedEvent; import de.fanta.challenges.events.EventStatusChangedEvent; import de.fanta.challenges.utils.ChatUtil; import de.fanta.challenges.utils.Config; @@ -41,6 +42,7 @@ if (Config.getBoolean("event.enabled")) { Config.setValue("event.enabled", false); Bukkit.getPluginManager().callEvent(new EventStatusChangedEvent(false)); + Bukkit.getPluginManager().callEvent(new ChallengeEventStatusChangedEvent(false)); plugin.getTimer().stopTimer(); ChatUtil.sendTitleToAll("Event", "Event-Modus deaktiviert", ChatUtil.RED); } else { diff --git a/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java b/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java index a3dadc7..57a5a70 100644 --- a/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java +++ b/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java @@ -2,13 +2,13 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.ServerType; +import de.fanta.challenges.events.ChallengeEventStatusChangedEvent; import de.fanta.challenges.events.EventStatusChangedEvent; import de.fanta.challenges.utils.ChatUtil; import de.fanta.challenges.utils.Config; import de.fanta.challenges.utils.SaveWorldUtils; import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.commands.ArgsParser; -import de.speedy64.globalport.GlobalApi; import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -44,6 +44,7 @@ plugin.getTimer().stopTimer(); plugin.getTimer().setTime(0); Bukkit.getPluginManager().callEvent(new EventStatusChangedEvent(false)); + Bukkit.getPluginManager().callEvent(new ChallengeEventStatusChangedEvent(false)); for (Player p : Bukkit.getOnlinePlayers()) { if (plugin.getServerType() == ServerType.CHALLENGE || plugin.getServerType() == ServerType.CHALLENGE_LOAD || plugin.getServerType() == ServerType.CHALLENGE_EVENT) { p.sendTitle(ChatUtil.BLUE + "Server wird zurückgesetzt!", ChatUtil.RED + "Bitte warte einen Moment" + ChatUtil.BLUE + "." + ChatUtil.GREEN + "." + ChatUtil.YELLOW + ".", 10, 220, 10); @@ -61,6 +62,7 @@ Config.setValue("Saved_Locations." + key, null, false); } plugin.saveConfig(); + plugin.getBackpack().saveInventoryToConfig(); if (Config.getBoolean("firsttimerstart")) { SaveWorldUtils.saveWorld(plugin.getFirstEditor().getUniqueId().toString(), true); } diff --git a/src/main/java/de/fanta/challenges/events/ChallengeEventStatusChangedEvent.java b/src/main/java/de/fanta/challenges/events/ChallengeEventStatusChangedEvent.java new file mode 100644 index 0000000..800b24d --- /dev/null +++ b/src/main/java/de/fanta/challenges/events/ChallengeEventStatusChangedEvent.java @@ -0,0 +1,27 @@ +package de.fanta.challenges.events; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class ChallengeEventStatusChangedEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private final boolean running; + + public ChallengeEventStatusChangedEvent(boolean event) { + this.running = event; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + public boolean isRunning() { + return running; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } +} diff --git a/src/main/java/de/fanta/challenges/guis/BackpackGui.java b/src/main/java/de/fanta/challenges/guis/BackpackGui.java index b34da27..b6498cf 100644 --- a/src/main/java/de/fanta/challenges/guis/BackpackGui.java +++ b/src/main/java/de/fanta/challenges/guis/BackpackGui.java @@ -63,7 +63,16 @@ } public void clearConfig() { - Challenges.getPlugin().getBackpackConfigFile().delete(); + for (String section : Challenges.getPlugin().getBackpackConfig().getKeys(false)) { + if (section != null) { + Challenges.getPlugin().getBackpackConfig().set(section, null); + } + try { + Challenges.getPlugin().getBackpackConfig().save(Challenges.getPlugin().getBackpackConfigFile()); + } catch (IOException e) { + Bukkit.getLogger().log(Level.SEVERE, "Could not save backpack config", e); + } + } } public void saveInventoryToConfig() { diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java b/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java index 54b8550..0c96921 100644 --- a/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java +++ b/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java @@ -19,7 +19,7 @@ public class EventGui extends AbstractWindow { private static final Challenges plugin = Challenges.getPlugin(); - public static final int INVENTORY_SIZE = 36; + public static final int INVENTORY_SIZE = 54; private static final int NULL_EVENT_INDEX = 0; private static final int TEAM_INDEX = 8; @@ -35,8 +35,10 @@ private static final int FORCE_ITEM_SETTINGS_INDEX = 21; private static final int SAMMEL_FIEBER_SETTINGS_INDEX = 22; - private static final int EVENT_SETTINGS_INDEX = 27; - private static final int CLOSE_IDEX = 35; + private static final int DIFFERENT_ITEMS_INDEX = 28; + + private static final int EVENT_SETTINGS_INDEX = 45; + private static final int CLOSE_IDEX = 54; public EventGui(Player player) { super(player, Bukkit.createInventory(player, INVENTORY_SIZE, plugin.getGUIPREFIX() + " >> Event Settings")); @@ -125,6 +127,13 @@ item = GUIUtils.EMPTY_ICON; } } + case DIFFERENT_ITEMS_INDEX -> { + if (Objects.equals(Config.getString("event.type"), "differentitems")) { + item = GUIUtils.createGuiItem(Material.CRAFTING_TABLE, ChatUtil.GREEN + "DifferentItems", true, ChatUtil.GREEN + "Sammel so viele verschiedene Items wie möglich."); + } else { + item = GUIUtils.createGuiItem(Material.CRAFTING_TABLE, ChatUtil.RED + "DifferentItems", ChatUtil.GREEN + "Sammel so viele verschiedene Items wie möglich."); + } + } case EVENT_SETTINGS_INDEX -> item = GUIUtils.createGuiItem(Material.CHAIN_COMMAND_BLOCK, ChatUtil.BLUE + "Event Settings"); @@ -215,6 +224,14 @@ ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); } } + case DIFFERENT_ITEMS_INDEX -> { + if (!Objects.equals(Config.getString("event.type"), "differentitems")) { + Config.setValue("event.type", "differentitems"); + ChatUtil.sendTitleToAll("Event", "Different Items", ChatUtil.GREEN); + } else { + ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); + } + } } rebuildInventory(); diff --git a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java index 4dbf3bd..6cf283c 100644 --- a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java +++ b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java @@ -6,6 +6,7 @@ import de.fanta.challenges.challenges.ChallengeEvents.BingoChallengeEvent; import de.fanta.challenges.challenges.ChallengeEvents.BridgeRaceChallengeEvent; import de.fanta.challenges.challenges.ChallengeEvents.DeathrunChallengeEvent; +import de.fanta.challenges.challenges.ChallengeEvents.DifferentItemsChallenge; import de.fanta.challenges.challenges.ChallengeEvents.ForceItemChallengeEvent; import de.fanta.challenges.challenges.ChallengeEvents.OreBattleChallengeEvent; import de.fanta.challenges.challenges.ChallengeEvents.SammelFieberChallengeEvent; @@ -90,6 +91,7 @@ pM.registerEvents(new AllAdvancementsChallenge(), plugin); pM.registerEvents(new MobRemoveWorldChallenge(), plugin); pM.registerEvents(new BridgeRaceChallengeEvent(), plugin); + pM.registerEvents(new DifferentItemsChallenge(), plugin); pM.registerEvents(new MLGChallenge(), plugin); if (plugin.getProtocolVersion() >= 759) {