Added delay

Made particles dependent on player yaw
This commit is contained in:
Teriuihi 2022-02-23 03:54:02 +01:00
parent 5e13b9ed2d
commit 3ef9fb534e
10 changed files with 87 additions and 24 deletions

View File

@ -4,6 +4,8 @@ import com.alttd.AltitudeParticles;
import com.alttd.objects.APartType; import com.alttd.objects.APartType;
import com.alttd.objects.ParticleSet; import com.alttd.objects.ParticleSet;
import com.alttd.storage.PlayerSettings; import com.alttd.storage.PlayerSettings;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -11,6 +13,7 @@ import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import java.util.List; import java.util.List;
import java.util.UUID;
public class BlockBreakListener implements Listener { public class BlockBreakListener implements Listener {
@ -27,14 +30,18 @@ public class BlockBreakListener implements Listener {
new BukkitRunnable() { new BukkitRunnable() {
@Override @Override
public void run() { 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()) if (!playerSettings.hasActiveParticles())
return; return;
particlesToActivate.forEach(aPartType -> { particlesToActivate.forEach(aPartType -> {
ParticleSet particleSet = playerSettings.getParticles(aPartType); ParticleSet particleSet = playerSettings.getParticles(aPartType);
if (particleSet == null) if (particleSet == null)
return; return;
particleSet.run(event.getBlock().getLocation()); Location location = event.getBlock().getLocation();
location.setYaw(player.getLocation().getYaw());
particleSet.run(location, uuid);
}); });
} }
}.runTaskAsynchronously(AltitudeParticles.getInstance()); }.runTaskAsynchronously(AltitudeParticles.getInstance());

View File

@ -4,6 +4,8 @@ import com.alttd.AltitudeParticles;
import com.alttd.objects.APartType; import com.alttd.objects.APartType;
import com.alttd.objects.ParticleSet; import com.alttd.objects.ParticleSet;
import com.alttd.storage.PlayerSettings; import com.alttd.storage.PlayerSettings;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -11,6 +13,7 @@ import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import java.util.List; import java.util.List;
import java.util.UUID;
public class BlockPlaceListener implements Listener { public class BlockPlaceListener implements Listener {
@ -27,14 +30,18 @@ public class BlockPlaceListener implements Listener {
new BukkitRunnable() { new BukkitRunnable() {
@Override @Override
public void run() { 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()) if (!playerSettings.hasActiveParticles())
return; return;
particlesToActivate.forEach(aPartType -> { particlesToActivate.forEach(aPartType -> {
ParticleSet particleSet = playerSettings.getParticles(aPartType); ParticleSet particleSet = playerSettings.getParticles(aPartType);
if (particleSet == null) if (particleSet == null)
return; return;
particleSet.run(event.getBlock().getLocation()); Location location = event.getBlock().getLocation();
location.setYaw(player.getLocation().getYaw());
particleSet.run(location, uuid);
}); });
} }
}.runTaskAsynchronously(AltitudeParticles.getInstance()); }.runTaskAsynchronously(AltitudeParticles.getInstance());

View File

@ -12,6 +12,7 @@ import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import java.util.List; import java.util.List;
import java.util.UUID;
public class DeathListener implements Listener { public class DeathListener implements Listener {
@ -29,14 +30,15 @@ public class DeathListener implements Listener {
@Override @Override
public void run() { public void run() {
Player player = event.getPlayer(); Player player = event.getPlayer();
PlayerSettings playerSettings = PlayerSettings.getPlayer(player.getUniqueId()); UUID uuid = player.getUniqueId();
PlayerSettings playerSettings = PlayerSettings.getPlayer(uuid);
if (!playerSettings.hasActiveParticles()) if (!playerSettings.hasActiveParticles())
return; return;
particlesToActivate.forEach(aPartType -> { particlesToActivate.forEach(aPartType -> {
ParticleSet particleSet = playerSettings.getParticles(aPartType); ParticleSet particleSet = playerSettings.getParticles(aPartType);
if (particleSet == null) if (particleSet == null)
return; return;
particleSet.run(player.getLocation()); particleSet.run(player.getLocation(), uuid);
}); });
} }
}.runTaskAsynchronously(AltitudeParticles.getInstance()); }.runTaskAsynchronously(AltitudeParticles.getInstance());

View File

@ -4,6 +4,7 @@ import com.alttd.AltitudeParticles;
import com.alttd.objects.APartType; import com.alttd.objects.APartType;
import com.alttd.objects.ParticleSet; import com.alttd.objects.ParticleSet;
import com.alttd.storage.PlayerSettings; import com.alttd.storage.PlayerSettings;
import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
@ -12,6 +13,7 @@ import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import java.util.List; import java.util.List;
import java.util.UUID;
public class KillListener implements Listener { public class KillListener implements Listener {
private final List<APartType> particlesToActivate; private final List<APartType> particlesToActivate;
@ -30,14 +32,17 @@ public class KillListener implements Listener {
new BukkitRunnable() { new BukkitRunnable() {
@Override @Override
public void run() { public void run() {
PlayerSettings playerSettings = PlayerSettings.getPlayer(player.getUniqueId()); UUID uuid = player.getUniqueId();
PlayerSettings playerSettings = PlayerSettings.getPlayer(uuid);
if (!playerSettings.hasActiveParticles()) if (!playerSettings.hasActiveParticles())
return; return;
particlesToActivate.forEach(aPartType -> { particlesToActivate.forEach(aPartType -> {
ParticleSet particleSet = playerSettings.getParticles(aPartType); ParticleSet particleSet = playerSettings.getParticles(aPartType);
if (particleSet == null) if (particleSet == null)
return; return;
particleSet.run(event.getEntity().getLocation()); Location location = event.getEntity().getLocation();
location.setYaw(player.getLocation().getYaw());
particleSet.run(location, uuid);
}); });
} }
}.runTaskAsynchronously(AltitudeParticles.getInstance()); }.runTaskAsynchronously(AltitudeParticles.getInstance());

View File

@ -43,7 +43,7 @@ public class PlayerJoinListener implements Listener {
ParticleSet particleSet = finalPlayerSettings.getParticles(aPartType); ParticleSet particleSet = finalPlayerSettings.getParticles(aPartType);
if (particleSet == null) if (particleSet == null)
return; return;
particleSet.run(player, finalPlayerSettings); particleSet.run(player, finalPlayerSettings, uuid);
}); });
} }
}.runTaskAsynchronously(AltitudeParticles.getInstance()); }.runTaskAsynchronously(AltitudeParticles.getInstance());

View File

@ -17,6 +17,7 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import java.util.List; import java.util.List;
import java.util.UUID;
public class RightClickListener implements Listener { public class RightClickListener implements Listener {
@ -42,14 +43,15 @@ public class RightClickListener implements Listener {
@Override @Override
public void run() { public void run() {
Player player = event.getPlayer(); Player player = event.getPlayer();
PlayerSettings playerSettings = PlayerSettings.getPlayer(player.getUniqueId()); UUID uuid = player.getUniqueId();
PlayerSettings playerSettings = PlayerSettings.getPlayer(uuid);
if (!playerSettings.hasActiveParticles()) if (!playerSettings.hasActiveParticles())
return; return;
particlesToActivate.forEach(aPartType -> { particlesToActivate.forEach(aPartType -> {
ParticleSet particleSet = playerSettings.getParticles(aPartType); ParticleSet particleSet = playerSettings.getParticles(aPartType);
if (particleSet == null) if (particleSet == null)
return; return;
particleSet.run(player.getLocation()); particleSet.run(player.getLocation(), uuid);
}); });
} }
}.runTaskAsynchronously(AltitudeParticles.getInstance()); }.runTaskAsynchronously(AltitudeParticles.getInstance());

View File

@ -4,6 +4,7 @@ import com.alttd.AltitudeParticles;
import com.alttd.objects.APartType; import com.alttd.objects.APartType;
import com.alttd.objects.ParticleSet; import com.alttd.objects.ParticleSet;
import com.alttd.storage.PlayerSettings; import com.alttd.storage.PlayerSettings;
import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
@ -12,6 +13,7 @@ import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import java.util.List; import java.util.List;
import java.util.UUID;
public class TeleportArriveListener implements Listener { public class TeleportArriveListener implements Listener {
private final List<APartType> particlesToActivate; private final List<APartType> particlesToActivate;
@ -28,14 +30,15 @@ public class TeleportArriveListener implements Listener {
@Override @Override
public void run() { public void run() {
Player player = event.getPlayer(); Player player = event.getPlayer();
PlayerSettings playerSettings = PlayerSettings.getPlayer(player.getUniqueId()); UUID uuid = player.getUniqueId();
PlayerSettings playerSettings = PlayerSettings.getPlayer(uuid);
if (!playerSettings.hasActiveParticles()) if (!playerSettings.hasActiveParticles())
return; return;
particlesToActivate.forEach(aPartType -> { particlesToActivate.forEach(aPartType -> {
ParticleSet particleSet = playerSettings.getParticles(aPartType); ParticleSet particleSet = playerSettings.getParticles(aPartType);
if (particleSet == null) if (particleSet == null)
return; return;
particleSet.run(event.getTo()); particleSet.run(event.getTo(), uuid);
}); });
} }
}.runTaskAsynchronously(AltitudeParticles.getInstance()); }.runTaskAsynchronously(AltitudeParticles.getInstance());

View File

@ -3,18 +3,21 @@ package com.alttd.objects;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.concurrent.TimeUnit;
public enum APartType { //TODO add description? public enum APartType { //TODO add description?
HEAD("HEAD", "Head", Material.PLAYER_HEAD, null, false), HEAD("HEAD", "Head", Material.PLAYER_HEAD, 0,null, false),
TRAIL("TRAIL", "Trail", Material.GOLD_INGOT, null, false), TRAIL("TRAIL", "Trail", Material.GOLD_INGOT, 0, null, false),
BREAK_PLACE_BLOCK("BREAK_PLACE_BLOCK", "Break/place block", Material.GRASS_BLOCK, null, true), BREAK_PLACE_BLOCK("BREAK_PLACE_BLOCK", "Break/place block", Material.GRASS_BLOCK, TimeUnit.SECONDS.toMillis(5), null, true),
DEATH("DEATH", "Death", Material.SKELETON_SKULL, null, true), DEATH("DEATH", "Death", Material.SKELETON_SKULL, TimeUnit.SECONDS.toMillis(30), null, true),
KILL("KILL", "Kill", Material.DIAMOND_SWORD, null, true), KILL("KILL", "Kill", Material.DIAMOND_SWORD, TimeUnit.SECONDS.toMillis(5), null, true),
CLICK_BLOCK("CLICK_BLOCK", "Right click block", Material.DIAMOND_BLOCK, 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, null, true); TELEPORT_ARRIVE("TELEPORT", "Teleport", Material.DRAGON_EGG, TimeUnit.SECONDS.toMillis(5), null, true);
private final String name; private final String name;
private final String displayName; private final String displayName;
private final Material material; private final Material material;
private final long delay;
private ItemStack itemStack; private ItemStack itemStack;
private final boolean event; private final boolean event;
@ -30,6 +33,10 @@ public enum APartType { //TODO add description?
return material; return material;
} }
public long getDelay() {
return delay;
}
public ItemStack getItemStack() { public ItemStack getItemStack() {
return itemStack; return itemStack;
} }
@ -42,12 +49,12 @@ public enum APartType { //TODO add description?
return event; 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.name = name;
this.displayName = displayName; this.displayName = displayName;
this.material = material; this.material = material;
this.delay = delay;
this.itemStack = itemStack; this.itemStack = itemStack;
this.event = event; this.event = event;
} }
} }

View File

@ -11,6 +11,8 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.List; import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
public class ParticleSet { public class ParticleSet {
@ -32,18 +34,32 @@ public class ParticleSet {
this.itemStack = itemStack; 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 frameSpawnerLocation = new FrameSpawnerLocation(repeat, repeatDelay, frames, location);
frameSpawnerLocation.runTaskTimerAsynchronously(AltitudeParticles.getInstance(), 0, frameDelay); 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) if (Config.DEBUG)
Logger.info("Starting particle set % for %.", uniqueId, player.getName()); Logger.info("Starting particle set % for %.", uniqueId, player.getName());
FrameSpawnerPlayer frameSpawnerPlayer = new FrameSpawnerPlayer(repeat, repeatDelay, frames, player, playerSettings, aPartType, uniqueId); FrameSpawnerPlayer frameSpawnerPlayer = new FrameSpawnerPlayer(repeat, repeatDelay, frames, player, playerSettings, aPartType, uniqueId);
frameSpawnerPlayer.runTaskTimerAsynchronously(AltitudeParticles.getInstance(), 0, frameDelay); 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() { public APartType getAPartType() {
return aPartType; return aPartType;
} }

View File

@ -4,6 +4,7 @@ import com.alttd.database.Queries;
import com.alttd.objects.APartType; import com.alttd.objects.APartType;
import com.alttd.objects.ParticleSet; import com.alttd.objects.ParticleSet;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.UUID; import java.util.UUID;
@ -14,6 +15,7 @@ public class PlayerSettings {
private boolean particlesActive, seeingParticles; private boolean particlesActive, seeingParticles;
private final UUID uuid; private final UUID uuid;
private final HashMap<APartType, ParticleSet> particles; private final HashMap<APartType, ParticleSet> particles;
private final HashMap<APartType, Long> lastUsed;
public PlayerSettings(boolean particlesActive, boolean seeingParticles, UUID uuid, HashMap<APartType, ParticleSet> particles) { public PlayerSettings(boolean particlesActive, boolean seeingParticles, UUID uuid, HashMap<APartType, ParticleSet> particles) {
this.particlesActive = particlesActive; this.particlesActive = particlesActive;
@ -22,6 +24,7 @@ public class PlayerSettings {
this.particles = particles; this.particles = particles;
playerSettingsMap.put(uuid, this); playerSettingsMap.put(uuid, this);
lastUsed = new HashMap<>();
} }
public PlayerSettings(boolean particlesActive, boolean seeingParticles, UUID uuid) { public PlayerSettings(boolean particlesActive, boolean seeingParticles, UUID uuid) {
@ -31,6 +34,7 @@ public class PlayerSettings {
this.particles = new HashMap<>(); this.particles = new HashMap<>();
playerSettingsMap.put(uuid, this); playerSettingsMap.put(uuid, this);
lastUsed = new HashMap<>();
} }
public static PlayerSettings getPlayer(UUID uuid) { public static PlayerSettings getPlayer(UUID uuid) {
@ -83,4 +87,14 @@ public class PlayerSettings {
particles.clear(); particles.clear();
Queries.clearParticles(uuid); 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());
}
} }