From 94e1aa6b66c36deb272af0fc09291f01eadb843f Mon Sep 17 00:00:00 2001 From: Esophose Date: Tue, 22 Mar 2022 21:45:39 -0600 Subject: [PATCH] Added setting toggle-on-combat-include-mobs, fix reload error with GUIs --- build.gradle | 12 +++++------ changelog.txt | 6 ++++++ .../manager/CommandManager.java | 7 ++++++- .../manager/ConfigurationManager.java | 1 + .../playerparticles/manager/GuiManager.java | 21 +++++++++---------- .../listener/PPlayerCombatListener.java | 13 ++++++------ 6 files changed, 36 insertions(+), 24 deletions(-) diff --git a/build.gradle b/build.gradle index 36cefa7..10720f3 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ sourceCompatibility = 1.8 targetCompatibility = 1.8 compileJava.options.encoding = 'UTF-8' group = 'dev.esophose' -version = '8.0-DEV-2-SNAPSHOT' +version = '8.0-SNAPSHOT' java { withJavadocJar() @@ -27,12 +27,12 @@ repositories { } dependencies { - compileOnly 'org.spigotmc:spigot-api:1.18.1-R0.1-SNAPSHOT' - compileOnly 'org.jetbrains:annotations:16.0.2' + compileOnly 'org.spigotmc:spigot-api:1.18.2-R0.1-SNAPSHOT' + compileOnly 'org.jetbrains:annotations:23.0.0' compileOnly 'me.clip:placeholderapi:2.10.4' - compileOnly 'org.xerial:sqlite-jdbc:3.23.1' - api 'org.slf4j:slf4j-api:1.7.25' - api 'org.slf4j:slf4j-nop:1.7.25' + compileOnly 'org.xerial:sqlite-jdbc:3.36.0.3' + api 'org.slf4j:slf4j-api:1.7.36' + api 'org.slf4j:slf4j-nop:1.7.36' api 'com.zaxxer:HikariCP:3.2.0' api 'org.bstats:bstats-bukkit-lite:1.7' api 'org.codemc.worldguardwrapper:worldguardwrapper:1.2.0-SNAPSHOT' diff --git a/changelog.txt b/changelog.txt index 94a47a7..d16829f 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,9 @@ +=== v8.0 === ++ Added support for Particle Packs ++ Added setting toggle-on-combat-include-mobs +* Fixed particle effects now save the pitch/yaw of the player when they are created +* Fixed an error when doing /pp reload if a player has the GUI open +* The icosphere style now fades between dust colors when using the dust_color_transition effect === v7.24 === * Fixed configs not generating properly on newer versions of 1.18.1 === v7.23 === diff --git a/src/main/java/dev/esophose/playerparticles/manager/CommandManager.java b/src/main/java/dev/esophose/playerparticles/manager/CommandManager.java index 1669270..a91793f 100644 --- a/src/main/java/dev/esophose/playerparticles/manager/CommandManager.java +++ b/src/main/java/dev/esophose/playerparticles/manager/CommandManager.java @@ -23,6 +23,7 @@ import dev.esophose.playerparticles.command.ToggleCommandModule; import dev.esophose.playerparticles.command.UseCommandModule; import dev.esophose.playerparticles.command.VersionCommandModule; import dev.esophose.playerparticles.command.WorldsCommandModule; +import dev.esophose.playerparticles.hook.PlaceholderAPIHook; import dev.esophose.playerparticles.particles.PPlayer; import dev.esophose.playerparticles.util.ParticleUtils; import java.util.ArrayList; @@ -178,7 +179,11 @@ public class CommandManager extends Manager implements CommandExecutor, TabCompl return true; } else if (cmd.getName().equalsIgnoreCase("ppo")) { - Bukkit.getScheduler().runTask(this.playerParticles, () -> this.ppoCommand.onCommandExecute(sender, args)); + String[] replacedArgs = new String[args.length]; + Player player = sender instanceof Player ? (Player) sender : null; + for (int i = 0; i < args.length; i++) + replacedArgs[i] = PlaceholderAPIHook.applyPlaceholders(player, args[i]); + Bukkit.getScheduler().runTask(this.playerParticles, () -> this.ppoCommand.onCommandExecute(sender, replacedArgs)); } return true; diff --git a/src/main/java/dev/esophose/playerparticles/manager/ConfigurationManager.java b/src/main/java/dev/esophose/playerparticles/manager/ConfigurationManager.java index 8b8bbd3..63a10d9 100644 --- a/src/main/java/dev/esophose/playerparticles/manager/ConfigurationManager.java +++ b/src/main/java/dev/esophose/playerparticles/manager/ConfigurationManager.java @@ -48,6 +48,7 @@ public class ConfigurationManager extends Manager { TOGGLE_ON_MOVE_DELAY("toggle-on-move-delay", 9, "The time (in ticks) a player has to be standing still before they are considered to be stopped", "This setting has no effect if toggle-on-move is set to false", "The value must be a positive whole number"), TOGGLE_ON_COMBAT("toggle-on-combat", false, "If true, particles will be completely disabled while the player is in combat", "Note: You can change what styles follow this setting in their individual setting files"), TOGGLE_ON_COMBAT_DELAY("toggle-on-combat-delay", 15, "The time (in seconds) a player has to not be damaged/attacked to be considered out of combat", "This setting has no effect if toggle-on-combat is set to false", "The value must be a positive whole number"), + TOGGLE_ON_COMBAT_INCLUDE_MOBS("toggle-on-combat-include-mobs", false, "If true, mobs will be included in the combat check in addition to players"), DISABLED_WORLDS("disabled-worlds", Collections.singletonList("disabled_world_name"), "A list of worlds that the plugin is disabled in"), CHECK_PERMISSIONS_ON_LOGIN("check-permissions-on-login", false, "Should particles a player no longer has permission to use be removed on login?"), MAX_PARTICLES("max-particles", 3, "The maximum number of particles a player can apply at once", "The GUI will only display up to 21, don't set this any higher than that"), diff --git a/src/main/java/dev/esophose/playerparticles/manager/GuiManager.java b/src/main/java/dev/esophose/playerparticles/manager/GuiManager.java index 6a2cd69..5088637 100644 --- a/src/main/java/dev/esophose/playerparticles/manager/GuiManager.java +++ b/src/main/java/dev/esophose/playerparticles/manager/GuiManager.java @@ -94,22 +94,21 @@ public class GuiManager extends Manager implements Listener, Runnable { * Used for when the plugin unloads so players can't take items from the GUI */ public void forceCloseAllOpenGUIs() { - Runnable task = () -> { - for (Player player : Bukkit.getOnlinePlayers()) { - for (GuiInventory inventory : this.guiInventories) { - if (inventory.getPPlayer().getUniqueId().equals(player.getUniqueId()) && inventory.getInventory().equals(player.getOpenInventory().getTopInventory())) { - player.closeInventory(); - break; - } + List toClose = new ArrayList<>(); + for (Player player : Bukkit.getOnlinePlayers()) { + for (GuiInventory inventory : this.guiInventories) { + if (inventory.getPPlayer().getUniqueId().equals(player.getUniqueId()) && inventory.getInventory().equals(player.getOpenInventory().getTopInventory())) { + toClose.add(player); + break; } } - this.guiInventories.clear(); - }; + } + this.guiInventories.clear(); if (Bukkit.isPrimaryThread()) { - task.run(); + toClose.forEach(Player::closeInventory); } else { - Bukkit.getScheduler().runTask(this.playerParticles, task); + Bukkit.getScheduler().runTask(this.playerParticles, x -> toClose.forEach(Player::closeInventory)); } } diff --git a/src/main/java/dev/esophose/playerparticles/particles/listener/PPlayerCombatListener.java b/src/main/java/dev/esophose/playerparticles/particles/listener/PPlayerCombatListener.java index 35a4f8a..8157741 100644 --- a/src/main/java/dev/esophose/playerparticles/particles/listener/PPlayerCombatListener.java +++ b/src/main/java/dev/esophose/playerparticles/particles/listener/PPlayerCombatListener.java @@ -21,7 +21,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; public class PPlayerCombatListener implements Listener { private static final int CHECK_INTERVAL = 20; - private Map timeSinceCombat = new HashMap<>(); + private final Map timeSinceCombat = new HashMap<>(); public PPlayerCombatListener() { DataManager dataManager = PlayerParticles.getInstance().getManager(DataManager.class); @@ -31,7 +31,6 @@ public class PPlayerCombatListener implements Listener { return; List toRemove = new ArrayList<>(); - for (UUID uuid : this.timeSinceCombat.keySet()) { PPlayer pplayer = dataManager.getPPlayer(uuid); if (pplayer == null) { @@ -50,13 +49,15 @@ public class PPlayerCombatListener implements Listener { } /** - * Used to detect if the player is moving + * Used to detect if the player is in combat * * @param event The event */ @EventHandler(priority = EventPriority.MONITOR) public void onPlayerAttack(EntityDamageByEntityEvent event) { - if (event.getEntity().getType() != EntityType.PLAYER) + boolean attackedIsPlayer = event.getEntity().getType() == EntityType.PLAYER; + boolean includeMobs = Setting.TOGGLE_ON_COMBAT_INCLUDE_MOBS.getBoolean(); + if (!attackedIsPlayer && !includeMobs) return; Player attacker; @@ -70,10 +71,10 @@ public class PPlayerCombatListener implements Listener { attacker = (Player) event.getDamager(); } else return; - Player damaged = (Player) event.getEntity(); + if (attackedIsPlayer) + this.markInCombat((Player) event.getEntity()); this.markInCombat(attacker); - this.markInCombat(damaged); } /**