From 61cb71997ea11ffab231603760bed1474a70ba4e Mon Sep 17 00:00:00 2001 From: cervinakuy <16023430+cervinakuy@users.noreply.github.com> Date: Sun, 1 Aug 2021 17:43:56 -0700 Subject: [PATCH 1/8] Witch ability no longer requires the kit name to be Witch --- .../kitpvp/command/MainCommand.java | 2 ++ .../kitpvp/listener/ItemListener.java | 18 +++++++----------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/planetgallium/kitpvp/command/MainCommand.java b/src/main/java/com/planetgallium/kitpvp/command/MainCommand.java index 1c7672f..0031541 100644 --- a/src/main/java/com/planetgallium/kitpvp/command/MainCommand.java +++ b/src/main/java/com/planetgallium/kitpvp/command/MainCommand.java @@ -488,6 +488,8 @@ public class MainCommand implements CommandExecutor { private void clearKit(Player p) { + CacheManager.getWitchPotionUsers().remove(p.getName()); + p.getInventory().setArmorContents(null); p.getInventory().clear(); diff --git a/src/main/java/com/planetgallium/kitpvp/listener/ItemListener.java b/src/main/java/com/planetgallium/kitpvp/listener/ItemListener.java index 33e367c..4b9e8a7 100644 --- a/src/main/java/com/planetgallium/kitpvp/listener/ItemListener.java +++ b/src/main/java/com/planetgallium/kitpvp/listener/ItemListener.java @@ -496,7 +496,7 @@ public class ItemListener implements Listener { int slot = shooter.getInventory().getHeldItemSlot(); Kit playerKit = arena.getKits().getKitOfPlayer(shooter.getName()); - if (playerKit != null && playerKit.getName().equalsIgnoreCase("Witch")) { + if (playerKit != null) { Potion potion = new Potion(pickPotion(), 1); potion.setSplash(true); @@ -509,22 +509,18 @@ public class ItemListener implements Listener { public void run() { if (!arena.getKits().hasKit(shooter.getName()) || - !arena.getKits().getKitOfPlayer(shooter.getName()).getName().equals("Witch")) { + !CacheManager.getWitchPotionUsers().contains(shooter.getName())) { return; } - if (CacheManager.getWitchPotionUsers().contains(shooter.getName())) { - - shooter.getInventory().setItem(slot, potionStack); - - if (abilities.getBoolean("Abilities.Witch.Message.Enabled")) { - shooter.sendMessage(Toolkit.translate(abilities.getString("Abilities.Witch.Message.Message"))); - } - - XSound.play(shooter, abilities.getString("Abilities.Witch.Sound.Sound") + ", 1, " + abilities.getInt("Abliities.Witch.Sound.Pitch")); + shooter.getInventory().setItem(slot, potionStack); + if (abilities.getBoolean("Abilities.Witch.Message.Enabled")) { + shooter.sendMessage(Toolkit.translate(abilities.getString("Abilities.Witch.Message.Message"))); } + XSound.play(shooter, abilities.getString("Abilities.Witch.Sound.Sound") + ", 1, " + abilities.getInt("Abliities.Witch.Sound.Pitch")); + } }.runTaskLater(Game.getInstance(), 5 * 20); From 6ff4cff9a953beccce337f713c08be137e40b4e4 Mon Sep 17 00:00:00 2001 From: cervinakuy <16023430+cervinakuy@users.noreply.github.com> Date: Tue, 3 Aug 2021 21:19:17 -0700 Subject: [PATCH 2/8] Updated to next version --- pom.xml | 2 +- src/main/resources/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 4c0b990..8b81f47 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.planetgallium KitPvP - 2.1.8 + 2.1.9 jar ${project.artifactId} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 9aee87a..d85a30f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: KitPvP author: Cervinakuy main: com.planetgallium.kitpvp.Game -version: 2.1.8 +version: 2.1.9 description: The ultimate all-in-one KitPvP plugin. website: https://www.spigotmc.org/resources/27107/ softdepend: [PlaceholderAPI, WorldGuard] From 17ddc042d13c9cbcbd2d942b19f224abdc75976c Mon Sep 17 00:00:00 2001 From: cervinakuy <16023430+cervinakuy@users.noreply.github.com> Date: Tue, 3 Aug 2021 21:20:24 -0700 Subject: [PATCH 3/8] Fix ArrayIndexOutOfBoundsException --- .../java/com/planetgallium/kitpvp/game/Leaderboards.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/planetgallium/kitpvp/game/Leaderboards.java b/src/main/java/com/planetgallium/kitpvp/game/Leaderboards.java index 6487bdd..7eca702 100644 --- a/src/main/java/com/planetgallium/kitpvp/game/Leaderboards.java +++ b/src/main/java/com/planetgallium/kitpvp/game/Leaderboards.java @@ -36,6 +36,11 @@ public class Leaderboards { if (!isValidCacheType(key)) return; List leaderboard = getLeaderboard(key); + + if (leaderboard.size() == 0) { + return; + } + PlayerEntry lowestRankingPlayer = leaderboard.get(leaderboard.size() - 1); // If updated player entry has a higher data value than the lowest ranking player in a leaderboard From 004788905b9bddeb0fd2a5be7f33e8898a9a02e7 Mon Sep 17 00:00:00 2001 From: cervinakuy <16023430+cervinakuy@users.noreply.github.com> Date: Tue, 3 Aug 2021 21:20:55 -0700 Subject: [PATCH 4/8] Fixed being unable to gain more than 15 experience --- src/main/java/com/planetgallium/kitpvp/game/Stats.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/planetgallium/kitpvp/game/Stats.java b/src/main/java/com/planetgallium/kitpvp/game/Stats.java index 6101f6e..3a4640e 100644 --- a/src/main/java/com/planetgallium/kitpvp/game/Stats.java +++ b/src/main/java/com/planetgallium/kitpvp/game/Stats.java @@ -50,9 +50,10 @@ public class Stats { } } - public void addExperience(Player p, int experience) { + public void addExperience(Player p, int experienceToAdd) { if (levels.getBoolean("Levels.Levels.Enabled")) { - setStat("experience", p.getName(), experience); + int currentExperience = getStat("experience", p.getName()); + setStat("experience", p.getName(), currentExperience + experienceToAdd); if (getStat("experience", p.getName()) >= getRegularOrRelativeNeededExperience(p.getName())) { levelUp(p); Bukkit.getPluginManager().callEvent(new PlayerLevelUpEvent(p, getStat("level", p.getName()))); From 2a3cd5e81eebcea4836b41d6a24abddafda721f2 Mon Sep 17 00:00:00 2001 From: cervinakuy <16023430+cervinakuy@users.noreply.github.com> Date: Wed, 11 Aug 2021 00:14:37 -0700 Subject: [PATCH 5/8] Fixed Witch ability being triggered by any splash potion --- .../kitpvp/command/MainCommand.java | 2 - .../com/planetgallium/kitpvp/game/Arena.java | 1 - .../kitpvp/listener/ItemListener.java | 44 ++++++++++--------- .../kitpvp/util/CacheManager.java | 5 +-- 4 files changed, 25 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/planetgallium/kitpvp/command/MainCommand.java b/src/main/java/com/planetgallium/kitpvp/command/MainCommand.java index 0031541..1c7672f 100644 --- a/src/main/java/com/planetgallium/kitpvp/command/MainCommand.java +++ b/src/main/java/com/planetgallium/kitpvp/command/MainCommand.java @@ -488,8 +488,6 @@ public class MainCommand implements CommandExecutor { private void clearKit(Player p) { - CacheManager.getWitchPotionUsers().remove(p.getName()); - p.getInventory().setArmorContents(null); p.getInventory().clear(); diff --git a/src/main/java/com/planetgallium/kitpvp/game/Arena.java b/src/main/java/com/planetgallium/kitpvp/game/Arena.java index 8dd06a0..b50344f 100644 --- a/src/main/java/com/planetgallium/kitpvp/game/Arena.java +++ b/src/main/java/com/planetgallium/kitpvp/game/Arena.java @@ -95,7 +95,6 @@ public class Arena { public void removePlayer(Player p) { CacheManager.getPlayerAbilityCooldowns(p.getName()).clear(); - CacheManager.getWitchPotionUsers().remove(p.getName()); for (PotionEffect effect : p.getActivePotionEffects()) { p.removePotionEffect(effect.getType()); diff --git a/src/main/java/com/planetgallium/kitpvp/listener/ItemListener.java b/src/main/java/com/planetgallium/kitpvp/listener/ItemListener.java index 4b9e8a7..892e243 100644 --- a/src/main/java/com/planetgallium/kitpvp/listener/ItemListener.java +++ b/src/main/java/com/planetgallium/kitpvp/listener/ItemListener.java @@ -1,11 +1,12 @@ package com.planetgallium.kitpvp.listener; +import java.util.ArrayList; +import java.util.List; import java.util.Random; import com.cryptomorin.xseries.XMaterial; import com.cryptomorin.xseries.XSound; import com.planetgallium.kitpvp.api.Kit; -import com.planetgallium.kitpvp.util.CacheManager; import com.planetgallium.kitpvp.util.Resource; import org.bukkit.*; import org.bukkit.configuration.ConfigurationSection; @@ -84,18 +85,7 @@ public class ItemListener implements Listener { if (isAbilityItem(p, "Witch", item)) { - Potion potion = new Potion(pickPotion(), 1); - potion.setSplash(true); - - ItemStack potionStack = potion.toItemStack(1); -// ItemMeta potionMeta = potionStack.getItemMeta(); -// -// potionMeta.setLocalizedName("WitchPotion"); -// potionStack.setItemMeta(potionMeta); - - CacheManager.getWitchPotionUsers().add(p.getName()); - - Toolkit.setMainHandItem(p, potionStack); + Toolkit.setMainHandItem(p, createWitchPotion()); } @@ -491,25 +481,22 @@ public class ItemListener implements Listener { if (e.getEntity().getType() == EntityType.SPLASH_POTION) { - if (CacheManager.getWitchPotionUsers().contains(shooter.getName())) { + if (itemThrown.hasItemMeta() && itemThrown.getItemMeta().hasLore() && + itemThrown.getItemMeta().getLore().get(0).equals("ยง8X")) { int slot = shooter.getInventory().getHeldItemSlot(); Kit playerKit = arena.getKits().getKitOfPlayer(shooter.getName()); if (playerKit != null) { - Potion potion = new Potion(pickPotion(), 1); - potion.setSplash(true); - - ItemStack potionStack = potion.toItemStack(1); + ItemStack potionStack = createWitchPotion(); new BukkitRunnable() { @Override public void run() { - if (!arena.getKits().hasKit(shooter.getName()) || - !CacheManager.getWitchPotionUsers().contains(shooter.getName())) { + if (!arena.getKits().hasKit(shooter.getName())) { return; } @@ -545,6 +532,23 @@ public class ItemListener implements Listener { } } + + private ItemStack createWitchPotion() { + + Potion potion = new Potion(pickPotion(), 1); + potion.setSplash(true); + + ItemStack potionStack = potion.toItemStack(1); + ItemMeta potionMeta = potionStack.getItemMeta(); + + List lore = new ArrayList<>(); + lore.add(Toolkit.translate("&8X")); + potionMeta.setLore(lore); + + potionStack.setItemMeta(potionMeta); + return potionStack; + + } @EventHandler public void onShot(EntityDamageByEntityEvent e) { diff --git a/src/main/java/com/planetgallium/kitpvp/util/CacheManager.java b/src/main/java/com/planetgallium/kitpvp/util/CacheManager.java index aefe203..f0d9388 100644 --- a/src/main/java/com/planetgallium/kitpvp/util/CacheManager.java +++ b/src/main/java/com/planetgallium/kitpvp/util/CacheManager.java @@ -11,7 +11,6 @@ public class CacheManager { private static final Map previewMenuCache = new HashMap<>(); private static final Set compassUsers = new HashSet<>(); private static final Map> abilityCooldowns = new HashMap<>(); - private static final Set witchPotionUsers = new HashSet<>(); private static final Map statsCache = new HashMap<>(); public static Map getUUIDCache() { return usernameToUUID; } @@ -22,8 +21,6 @@ public class CacheManager { public static Set getCompassUsers() { return compassUsers; } - public static Set getWitchPotionUsers() { return witchPotionUsers; } - public static Map getStatsCache() { return statsCache; } public static Map getPlayerAbilityCooldowns(String username) { @@ -41,7 +38,7 @@ public class CacheManager { previewMenuCache.clear(); compassUsers.clear(); abilityCooldowns.clear(); - // stats, usernameToUUID, and witchPotionUsers cache isn't here as of right now + // stats, usernameToUUID, and cache isn't here as of right now } } From 2d136ece4994cbddda1ed11530f0c75db2e94318 Mon Sep 17 00:00:00 2001 From: cervinakuy <16023430+cervinakuy@users.noreply.github.com> Date: Wed, 11 Aug 2021 00:15:16 -0700 Subject: [PATCH 6/8] Fixed kd PAPI placeholder, added unknown placeholder message --- .../java/com/planetgallium/kitpvp/util/Placeholders.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/planetgallium/kitpvp/util/Placeholders.java b/src/main/java/com/planetgallium/kitpvp/util/Placeholders.java index 8a86220..4bd711d 100644 --- a/src/main/java/com/planetgallium/kitpvp/util/Placeholders.java +++ b/src/main/java/com/planetgallium/kitpvp/util/Placeholders.java @@ -23,7 +23,7 @@ public class Placeholders extends PlaceholderExpansion { placeholderAPItoBuiltIn.put("stats_kills", "%kills%"); placeholderAPItoBuiltIn.put("stats_deaths", "%deaths%"); - placeholderAPItoBuiltIn.put("stats_kdr", "%kdr%"); + placeholderAPItoBuiltIn.put("stats_kd", "%kd%"); placeholderAPItoBuiltIn.put("stats_experience", "%xp%"); placeholderAPItoBuiltIn.put("stats_level", "%level%"); placeholderAPItoBuiltIn.put("player_killstreak", "%streak%"); @@ -64,6 +64,12 @@ public class Placeholders extends PlaceholderExpansion { public String translatePlaceholderAPIPlaceholders(String placeholderAPIIdentifier, String username) { + if (!placeholderAPItoBuiltIn.containsKey(placeholderAPIIdentifier)) { + Toolkit.printToConsole(String.format("&7[&b&lKIT-PVP&7] &cUnknown placeholder identifier [%s]. Please see plugin page.", + placeholderAPIIdentifier)); + return "invalid-placeholder"; + } + return arena.replaceBuiltInPlaceholdersIfPresent(placeholderAPItoBuiltIn.get(placeholderAPIIdentifier), username); } From 0ab2bf2a6b762220e9f64467b204c81e2af2ea4f Mon Sep 17 00:00:00 2001 From: cervinakuy <16023430+cervinakuy@users.noreply.github.com> Date: Sat, 14 Aug 2021 18:49:45 -0700 Subject: [PATCH 7/8] Refactored PlayerTracker code; added RefreshOnlyWhenHeld option; fixed compass not working after respawning --- .../kitpvp/listener/TrackerListener.java | 115 +++++++++--------- src/main/resources/config.yml | 1 + 2 files changed, 59 insertions(+), 57 deletions(-) diff --git a/src/main/java/com/planetgallium/kitpvp/listener/TrackerListener.java b/src/main/java/com/planetgallium/kitpvp/listener/TrackerListener.java index 7127223..5670a8f 100644 --- a/src/main/java/com/planetgallium/kitpvp/listener/TrackerListener.java +++ b/src/main/java/com/planetgallium/kitpvp/listener/TrackerListener.java @@ -1,9 +1,7 @@ package com.planetgallium.kitpvp.listener; import com.cryptomorin.xseries.XMaterial; -import com.planetgallium.kitpvp.util.CacheManager; import com.planetgallium.kitpvp.util.Resources; -import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -17,81 +15,84 @@ import com.planetgallium.kitpvp.util.Toolkit; public class TrackerListener implements Listener { - private Resources resources; + private final Game plugin; + private final Resources resources; public TrackerListener(Game plugin) { + this.plugin = plugin; this.resources = plugin.getResources(); } @EventHandler public void onCompassHeld(PlayerItemHeldEvent event) { - + + if (!Toolkit.inArena(event.getPlayer())) { + return; + } + Player player = event.getPlayer(); - - if (Toolkit.inArena(player)) { + ItemStack itemHeld = player.getInventory().getItem(event.getNewSlot()); - ItemStack item = player.getInventory().getItem(event.getNewSlot()); + if (itemHeld != null && itemHeld.getType() == XMaterial.COMPASS.parseMaterial()) { - if (item != null && item.getType() == XMaterial.COMPASS.parseMaterial()) { + new BukkitRunnable() { - if (!CacheManager.getCompassUsers().contains(player.getName())) { + @Override + public void run() { - new BukkitRunnable() { - - @Override - public void run() { - - if (!player.isOnline()) { - CacheManager.getCompassUsers().remove(player.getName()); - cancel(); - return; - } - - String[] nearestData = Toolkit.getNearestPlayer(player, resources.getConfig().getInt("PlayerTracker.TrackBelowY")); - - if (player.getWorld().getPlayers().size() > 1 && nearestData != null) { - - Player nearestPlayer = Bukkit.getPlayer(nearestData[0]); - double nearestDistance = Double.parseDouble(nearestData[1]); - - if (nearestPlayer == null || !nearestPlayer.isOnline()) { - CacheManager.getCompassUsers().remove(player.getName()); - cancel(); - return; - } - - nearestDistance = Math.round(nearestDistance * 10.0) / 10.0; - - ItemMeta meta = item.getItemMeta(); - meta.setDisplayName(resources.getConfig().getString("PlayerTracker.Message") - .replace("%nearestplayer%", nearestPlayer.getName()) - .replace("%distance%", String.valueOf(nearestDistance))); - item.setItemMeta(meta); - - player.setCompassTarget(nearestPlayer.getLocation()); - - CacheManager.getCompassUsers().add(player.getName()); - - } else { - - ItemMeta meta = item.getItemMeta(); - meta.setDisplayName(resources.getConfig().getString("PlayerTracker.NoneOnline")); - item.setItemMeta(meta); - - cancel(); - - } + if (!player.isOnline()) { // if the player using the compass leaves the server + cancel(); + return; + } + if (resources.getConfig().getBoolean("PlayerTracker.RefreshOnlyWhenHeld")) { + ItemStack itemInHand = Toolkit.getMainHandItem(player); + if (itemInHand == null || itemInHand.getType() != XMaterial.COMPASS.parseMaterial()) { + cancel(); + return; } + } - }.runTaskTimer(Game.getInstance(), 0L, 20L); + String[] nearestPlayerData = null; + + if (player.getWorld().getPlayers().size() == 1) { + cancel(); + } else { + nearestPlayerData = Toolkit.getNearestPlayer(player, + resources.getConfig().getInt("PlayerTracker.TrackBelowY")); + } + + updateTrackingCompass(player, itemHeld, nearestPlayerData); } - } - + }.runTaskTimer(plugin, 0L, 20L); + } } + + private void updateTrackingCompass(Player player, ItemStack compass, String[] nearestPlayerData) { + + ItemMeta compassMeta = compass.getItemMeta(); + + if (nearestPlayerData != null) { + Player nearestPlayer = Toolkit.getPlayer(player.getWorld(), nearestPlayerData[0]); + double nearestPlayerDistance = Toolkit.round(Double.parseDouble(nearestPlayerData[1]), 1); + + if (nearestPlayer != null && nearestPlayer.isOnline()) { + compassMeta.setDisplayName(resources.getConfig().getString("PlayerTracker.Message") + .replace("%nearestplayer%", nearestPlayer.getName()) + .replace("%distance%", String.valueOf(nearestPlayerDistance))); + + player.setCompassTarget(nearestPlayer.getLocation()); + } + } else { + compassMeta.setDisplayName(resources.getConfig().getString("PlayerTracker.NoneOnline")); + } + + compass.setItemMeta(compassMeta); + + } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 68d93da..a624324 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -69,6 +69,7 @@ PlayerTracker: Message: '&b&lTarget: &3%nearestplayer% &b&lDistance: &3%distance%' NoneOnline: '&cNo Players Online' TrackBelowY: 128 + RefreshOnlyWhenHeld: true Soups: Name: '&aRegenerative Soups &7(Right Click)' RegenAmount: 6 From 258047d5b91049302411d2e29b5069281133eecc Mon Sep 17 00:00:00 2001 From: cervinakuy <16023430+cervinakuy@users.noreply.github.com> Date: Sat, 14 Aug 2021 19:08:49 -0700 Subject: [PATCH 8/8] Removed now unnecessary Compass Users cache --- .../com/planetgallium/kitpvp/listener/TrackerListener.java | 6 +++++- .../java/com/planetgallium/kitpvp/util/CacheManager.java | 4 ---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/planetgallium/kitpvp/listener/TrackerListener.java b/src/main/java/com/planetgallium/kitpvp/listener/TrackerListener.java index 5670a8f..7f0a337 100644 --- a/src/main/java/com/planetgallium/kitpvp/listener/TrackerListener.java +++ b/src/main/java/com/planetgallium/kitpvp/listener/TrackerListener.java @@ -1,6 +1,7 @@ package com.planetgallium.kitpvp.listener; import com.cryptomorin.xseries.XMaterial; +import com.planetgallium.kitpvp.game.Arena; import com.planetgallium.kitpvp.util.Resources; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -16,10 +17,12 @@ import com.planetgallium.kitpvp.util.Toolkit; public class TrackerListener implements Listener { private final Game plugin; + private final Arena arena; private final Resources resources; public TrackerListener(Game plugin) { this.plugin = plugin; + this.arena = plugin.getArena(); this.resources = plugin.getResources(); } @@ -40,7 +43,8 @@ public class TrackerListener implements Listener { @Override public void run() { - if (!player.isOnline()) { // if the player using the compass leaves the server + // if the player using the compass leaves the server or no longer has a kit + if (!player.isOnline() || !arena.getKits().hasKit(player.getName())) { cancel(); return; } diff --git a/src/main/java/com/planetgallium/kitpvp/util/CacheManager.java b/src/main/java/com/planetgallium/kitpvp/util/CacheManager.java index f0d9388..fba7aa4 100644 --- a/src/main/java/com/planetgallium/kitpvp/util/CacheManager.java +++ b/src/main/java/com/planetgallium/kitpvp/util/CacheManager.java @@ -9,7 +9,6 @@ public class CacheManager { private static final Map usernameToUUID = new HashMap<>(); private static final Map kitCache = new HashMap<>(); private static final Map previewMenuCache = new HashMap<>(); - private static final Set compassUsers = new HashSet<>(); private static final Map> abilityCooldowns = new HashMap<>(); private static final Map statsCache = new HashMap<>(); @@ -19,8 +18,6 @@ public class CacheManager { public static Map getPreviewMenuCache() { return previewMenuCache; } - public static Set getCompassUsers() { return compassUsers; } - public static Map getStatsCache() { return statsCache; } public static Map getPlayerAbilityCooldowns(String username) { @@ -36,7 +33,6 @@ public class CacheManager { public static void clearCaches() { kitCache.clear(); previewMenuCache.clear(); - compassUsers.clear(); abilityCooldowns.clear(); // stats, usernameToUUID, and cache isn't here as of right now }