From 3ef9fb534ebda3cca35e770ef8ed021768a5d925 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Wed, 23 Feb 2022 03:54:02 +0100 Subject: [PATCH] Added delay Made particles dependent on player yaw --- .../alttd/listeners/BlockBreakListener.java | 11 ++++++-- .../alttd/listeners/BlockPlaceListener.java | 11 ++++++-- .../com/alttd/listeners/DeathListener.java | 6 +++-- .../com/alttd/listeners/KillListener.java | 9 +++++-- .../alttd/listeners/PlayerJoinListener.java | 2 +- .../alttd/listeners/RightClickListener.java | 6 +++-- .../listeners/TeleportArriveListener.java | 7 ++++-- .../java/com/alttd/objects/APartType.java | 25 ++++++++++++------- .../java/com/alttd/objects/ParticleSet.java | 20 +++++++++++++-- .../com/alttd/storage/PlayerSettings.java | 14 +++++++++++ 10 files changed, 87 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/alttd/listeners/BlockBreakListener.java b/src/main/java/com/alttd/listeners/BlockBreakListener.java index 613a8dd..95611e0 100644 --- a/src/main/java/com/alttd/listeners/BlockBreakListener.java +++ b/src/main/java/com/alttd/listeners/BlockBreakListener.java @@ -4,6 +4,8 @@ import com.alttd.AltitudeParticles; import com.alttd.objects.APartType; import com.alttd.objects.ParticleSet; import com.alttd.storage.PlayerSettings; +import org.bukkit.Location; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -11,6 +13,7 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.scheduler.BukkitRunnable; import java.util.List; +import java.util.UUID; public class BlockBreakListener implements Listener { @@ -27,14 +30,18 @@ public class BlockBreakListener implements Listener { new BukkitRunnable() { @Override public void run() { - PlayerSettings playerSettings = PlayerSettings.getPlayer(event.getPlayer().getUniqueId()); + Player player = event.getPlayer(); + UUID uuid = player.getUniqueId(); + PlayerSettings playerSettings = PlayerSettings.getPlayer(uuid); if (!playerSettings.hasActiveParticles()) return; particlesToActivate.forEach(aPartType -> { ParticleSet particleSet = playerSettings.getParticles(aPartType); if (particleSet == null) return; - particleSet.run(event.getBlock().getLocation()); + Location location = event.getBlock().getLocation(); + location.setYaw(player.getLocation().getYaw()); + particleSet.run(location, uuid); }); } }.runTaskAsynchronously(AltitudeParticles.getInstance()); diff --git a/src/main/java/com/alttd/listeners/BlockPlaceListener.java b/src/main/java/com/alttd/listeners/BlockPlaceListener.java index 3046f5c..c8c4076 100644 --- a/src/main/java/com/alttd/listeners/BlockPlaceListener.java +++ b/src/main/java/com/alttd/listeners/BlockPlaceListener.java @@ -4,6 +4,8 @@ import com.alttd.AltitudeParticles; import com.alttd.objects.APartType; import com.alttd.objects.ParticleSet; import com.alttd.storage.PlayerSettings; +import org.bukkit.Location; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -11,6 +13,7 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.scheduler.BukkitRunnable; import java.util.List; +import java.util.UUID; public class BlockPlaceListener implements Listener { @@ -27,14 +30,18 @@ public class BlockPlaceListener implements Listener { new BukkitRunnable() { @Override public void run() { - PlayerSettings playerSettings = PlayerSettings.getPlayer(event.getPlayer().getUniqueId()); + Player player = event.getPlayer(); + UUID uuid = player.getUniqueId(); + PlayerSettings playerSettings = PlayerSettings.getPlayer(uuid); if (!playerSettings.hasActiveParticles()) return; particlesToActivate.forEach(aPartType -> { ParticleSet particleSet = playerSettings.getParticles(aPartType); if (particleSet == null) return; - particleSet.run(event.getBlock().getLocation()); + Location location = event.getBlock().getLocation(); + location.setYaw(player.getLocation().getYaw()); + particleSet.run(location, uuid); }); } }.runTaskAsynchronously(AltitudeParticles.getInstance()); diff --git a/src/main/java/com/alttd/listeners/DeathListener.java b/src/main/java/com/alttd/listeners/DeathListener.java index a64aea2..0383f23 100644 --- a/src/main/java/com/alttd/listeners/DeathListener.java +++ b/src/main/java/com/alttd/listeners/DeathListener.java @@ -12,6 +12,7 @@ import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.scheduler.BukkitRunnable; import java.util.List; +import java.util.UUID; public class DeathListener implements Listener { @@ -29,14 +30,15 @@ public class DeathListener implements Listener { @Override public void run() { Player player = event.getPlayer(); - PlayerSettings playerSettings = PlayerSettings.getPlayer(player.getUniqueId()); + UUID uuid = player.getUniqueId(); + PlayerSettings playerSettings = PlayerSettings.getPlayer(uuid); if (!playerSettings.hasActiveParticles()) return; particlesToActivate.forEach(aPartType -> { ParticleSet particleSet = playerSettings.getParticles(aPartType); if (particleSet == null) return; - particleSet.run(player.getLocation()); + particleSet.run(player.getLocation(), uuid); }); } }.runTaskAsynchronously(AltitudeParticles.getInstance()); diff --git a/src/main/java/com/alttd/listeners/KillListener.java b/src/main/java/com/alttd/listeners/KillListener.java index d47c8a6..0060c7d 100644 --- a/src/main/java/com/alttd/listeners/KillListener.java +++ b/src/main/java/com/alttd/listeners/KillListener.java @@ -4,6 +4,7 @@ import com.alttd.AltitudeParticles; import com.alttd.objects.APartType; import com.alttd.objects.ParticleSet; import com.alttd.storage.PlayerSettings; +import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -12,6 +13,7 @@ import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.scheduler.BukkitRunnable; import java.util.List; +import java.util.UUID; public class KillListener implements Listener { private final List particlesToActivate; @@ -30,14 +32,17 @@ public class KillListener implements Listener { new BukkitRunnable() { @Override public void run() { - PlayerSettings playerSettings = PlayerSettings.getPlayer(player.getUniqueId()); + UUID uuid = player.getUniqueId(); + PlayerSettings playerSettings = PlayerSettings.getPlayer(uuid); if (!playerSettings.hasActiveParticles()) return; particlesToActivate.forEach(aPartType -> { ParticleSet particleSet = playerSettings.getParticles(aPartType); if (particleSet == null) return; - particleSet.run(event.getEntity().getLocation()); + Location location = event.getEntity().getLocation(); + location.setYaw(player.getLocation().getYaw()); + particleSet.run(location, uuid); }); } }.runTaskAsynchronously(AltitudeParticles.getInstance()); diff --git a/src/main/java/com/alttd/listeners/PlayerJoinListener.java b/src/main/java/com/alttd/listeners/PlayerJoinListener.java index 4da2e06..ba91f43 100644 --- a/src/main/java/com/alttd/listeners/PlayerJoinListener.java +++ b/src/main/java/com/alttd/listeners/PlayerJoinListener.java @@ -43,7 +43,7 @@ public class PlayerJoinListener implements Listener { ParticleSet particleSet = finalPlayerSettings.getParticles(aPartType); if (particleSet == null) return; - particleSet.run(player, finalPlayerSettings); + particleSet.run(player, finalPlayerSettings, uuid); }); } }.runTaskAsynchronously(AltitudeParticles.getInstance()); diff --git a/src/main/java/com/alttd/listeners/RightClickListener.java b/src/main/java/com/alttd/listeners/RightClickListener.java index 11b86d4..82e1a21 100644 --- a/src/main/java/com/alttd/listeners/RightClickListener.java +++ b/src/main/java/com/alttd/listeners/RightClickListener.java @@ -17,6 +17,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import java.util.List; +import java.util.UUID; public class RightClickListener implements Listener { @@ -42,14 +43,15 @@ public class RightClickListener implements Listener { @Override public void run() { Player player = event.getPlayer(); - PlayerSettings playerSettings = PlayerSettings.getPlayer(player.getUniqueId()); + UUID uuid = player.getUniqueId(); + PlayerSettings playerSettings = PlayerSettings.getPlayer(uuid); if (!playerSettings.hasActiveParticles()) return; particlesToActivate.forEach(aPartType -> { ParticleSet particleSet = playerSettings.getParticles(aPartType); if (particleSet == null) return; - particleSet.run(player.getLocation()); + particleSet.run(player.getLocation(), uuid); }); } }.runTaskAsynchronously(AltitudeParticles.getInstance()); diff --git a/src/main/java/com/alttd/listeners/TeleportArriveListener.java b/src/main/java/com/alttd/listeners/TeleportArriveListener.java index fb5571c..36b6f3d 100644 --- a/src/main/java/com/alttd/listeners/TeleportArriveListener.java +++ b/src/main/java/com/alttd/listeners/TeleportArriveListener.java @@ -4,6 +4,7 @@ import com.alttd.AltitudeParticles; import com.alttd.objects.APartType; import com.alttd.objects.ParticleSet; import com.alttd.storage.PlayerSettings; +import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -12,6 +13,7 @@ import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.scheduler.BukkitRunnable; import java.util.List; +import java.util.UUID; public class TeleportArriveListener implements Listener { private final List particlesToActivate; @@ -28,14 +30,15 @@ public class TeleportArriveListener implements Listener { @Override public void run() { Player player = event.getPlayer(); - PlayerSettings playerSettings = PlayerSettings.getPlayer(player.getUniqueId()); + UUID uuid = player.getUniqueId(); + PlayerSettings playerSettings = PlayerSettings.getPlayer(uuid); if (!playerSettings.hasActiveParticles()) return; particlesToActivate.forEach(aPartType -> { ParticleSet particleSet = playerSettings.getParticles(aPartType); if (particleSet == null) return; - particleSet.run(event.getTo()); + particleSet.run(event.getTo(), uuid); }); } }.runTaskAsynchronously(AltitudeParticles.getInstance()); diff --git a/src/main/java/com/alttd/objects/APartType.java b/src/main/java/com/alttd/objects/APartType.java index f9d9e74..7798c7a 100644 --- a/src/main/java/com/alttd/objects/APartType.java +++ b/src/main/java/com/alttd/objects/APartType.java @@ -3,18 +3,21 @@ package com.alttd.objects; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import java.util.concurrent.TimeUnit; + public enum APartType { //TODO add description? - HEAD("HEAD", "Head", Material.PLAYER_HEAD, null, false), - TRAIL("TRAIL", "Trail", Material.GOLD_INGOT, null, false), - BREAK_PLACE_BLOCK("BREAK_PLACE_BLOCK", "Break/place block", Material.GRASS_BLOCK, null, true), - DEATH("DEATH", "Death", Material.SKELETON_SKULL, null, true), - KILL("KILL", "Kill", Material.DIAMOND_SWORD, null, true), - CLICK_BLOCK("CLICK_BLOCK", "Right click block", Material.DIAMOND_BLOCK, null, true), - TELEPORT_ARRIVE("TELEPORT", "Teleport", Material.DRAGON_EGG, null, true); + HEAD("HEAD", "Head", Material.PLAYER_HEAD, 0,null, false), + TRAIL("TRAIL", "Trail", Material.GOLD_INGOT, 0, null, false), + BREAK_PLACE_BLOCK("BREAK_PLACE_BLOCK", "Break/place block", Material.GRASS_BLOCK, TimeUnit.SECONDS.toMillis(5), null, true), + DEATH("DEATH", "Death", Material.SKELETON_SKULL, TimeUnit.SECONDS.toMillis(30), null, true), + KILL("KILL", "Kill", Material.DIAMOND_SWORD, TimeUnit.SECONDS.toMillis(5), null, true), + CLICK_BLOCK("CLICK_BLOCK", "Right click block", Material.DIAMOND_BLOCK, TimeUnit.SECONDS.toMillis(60), null, true), + TELEPORT_ARRIVE("TELEPORT", "Teleport", Material.DRAGON_EGG, TimeUnit.SECONDS.toMillis(5), null, true); private final String name; private final String displayName; private final Material material; + private final long delay; private ItemStack itemStack; private final boolean event; @@ -30,6 +33,10 @@ public enum APartType { //TODO add description? return material; } + public long getDelay() { + return delay; + } + public ItemStack getItemStack() { return itemStack; } @@ -42,12 +49,12 @@ public enum APartType { //TODO add description? return event; } - APartType(String name, String displayName, Material material, ItemStack itemStack, boolean event) { + APartType(String name, String displayName, Material material, long delay, ItemStack itemStack, boolean event) { this.name = name; this.displayName = displayName; this.material = material; + this.delay = delay; this.itemStack = itemStack; this.event = event; } - } diff --git a/src/main/java/com/alttd/objects/ParticleSet.java b/src/main/java/com/alttd/objects/ParticleSet.java index 90ec686..b7aab2a 100644 --- a/src/main/java/com/alttd/objects/ParticleSet.java +++ b/src/main/java/com/alttd/objects/ParticleSet.java @@ -11,6 +11,8 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import java.util.List; +import java.util.UUID; +import java.util.concurrent.TimeUnit; public class ParticleSet { @@ -32,18 +34,32 @@ public class ParticleSet { this.itemStack = itemStack; } - public void run(Location location) { + public void run(Location location, UUID uuid) { + if (tooSoon(uuid)) + return; FrameSpawnerLocation frameSpawnerLocation = new FrameSpawnerLocation(repeat, repeatDelay, frames, location); frameSpawnerLocation.runTaskTimerAsynchronously(AltitudeParticles.getInstance(), 0, frameDelay); } - public void run(Player player, PlayerSettings playerSettings) { + public void run(Player player, PlayerSettings playerSettings, UUID uuid) { + if (tooSoon(uuid)) + return; if (Config.DEBUG) Logger.info("Starting particle set % for %.", uniqueId, player.getName()); FrameSpawnerPlayer frameSpawnerPlayer = new FrameSpawnerPlayer(repeat, repeatDelay, frames, player, playerSettings, aPartType, uniqueId); frameSpawnerPlayer.runTaskTimerAsynchronously(AltitudeParticles.getInstance(), 0, frameDelay); } + private boolean tooSoon(UUID uuid) { + PlayerSettings ps = PlayerSettings.getPlayer(uuid); + if (ps.canRun(aPartType)) + { + ps.run(aPartType); + return false; + } + return true; + } + public APartType getAPartType() { return aPartType; } diff --git a/src/main/java/com/alttd/storage/PlayerSettings.java b/src/main/java/com/alttd/storage/PlayerSettings.java index fb46930..591990e 100644 --- a/src/main/java/com/alttd/storage/PlayerSettings.java +++ b/src/main/java/com/alttd/storage/PlayerSettings.java @@ -4,6 +4,7 @@ import com.alttd.database.Queries; import com.alttd.objects.APartType; import com.alttd.objects.ParticleSet; +import java.util.Date; import java.util.HashMap; import java.util.UUID; @@ -14,6 +15,7 @@ public class PlayerSettings { private boolean particlesActive, seeingParticles; private final UUID uuid; private final HashMap particles; + private final HashMap lastUsed; public PlayerSettings(boolean particlesActive, boolean seeingParticles, UUID uuid, HashMap particles) { this.particlesActive = particlesActive; @@ -22,6 +24,7 @@ public class PlayerSettings { this.particles = particles; playerSettingsMap.put(uuid, this); + lastUsed = new HashMap<>(); } public PlayerSettings(boolean particlesActive, boolean seeingParticles, UUID uuid) { @@ -31,6 +34,7 @@ public class PlayerSettings { this.particles = new HashMap<>(); playerSettingsMap.put(uuid, this); + lastUsed = new HashMap<>(); } public static PlayerSettings getPlayer(UUID uuid) { @@ -83,4 +87,14 @@ public class PlayerSettings { particles.clear(); Queries.clearParticles(uuid); } + + public boolean canRun(APartType aPartType) { + if (!lastUsed.containsKey(aPartType)) + return true; + return (lastUsed.get(aPartType) < new Date().getTime() - aPartType.getDelay()); + } + + public void run(APartType aPartType) { + lastUsed.put(aPartType, new Date().getTime()); + } }