From 4e571f2114e64aaa18732d22e9c11e156bd9d2bc Mon Sep 17 00:00:00 2001 From: Esophose Date: Wed, 15 Apr 2020 13:23:06 -0600 Subject: [PATCH] Added style 'fishing' --- .../playerparticles/styles/DefaultStyles.java | 3 + .../styles/ParticleStyleFishing.java | 82 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 src/main/java/dev/esophose/playerparticles/styles/ParticleStyleFishing.java diff --git a/src/main/java/dev/esophose/playerparticles/styles/DefaultStyles.java b/src/main/java/dev/esophose/playerparticles/styles/DefaultStyles.java index 59d18ac..cd47af8 100644 --- a/src/main/java/dev/esophose/playerparticles/styles/DefaultStyles.java +++ b/src/main/java/dev/esophose/playerparticles/styles/DefaultStyles.java @@ -24,6 +24,7 @@ public class DefaultStyles implements Listener { public static final ParticleStyle COMPANION = new ParticleStyleCompanion(); public static final ParticleStyle CUBE = new ParticleStyleCube(); public static final ParticleStyle FEET = new ParticleStyleFeet(); + public static final ParticleStyle FISHING = new ParticleStyleFishing(); public static final ParticleStyle HALO = new ParticleStyleHalo(); public static final ParticleStyle HURT = new ParticleStyleHurt(); public static final ParticleStyle INVOCATION = new ParticleStyleInvocation(); @@ -62,6 +63,7 @@ public class DefaultStyles implements Listener { pluginManager.registerEvents((Listener) ARROWS, playerParticles); pluginManager.registerEvents((Listener) BLOCKBREAK, playerParticles); pluginManager.registerEvents((Listener) BLOCKPLACE, playerParticles); + pluginManager.registerEvents((Listener) FISHING, playerParticles); pluginManager.registerEvents((Listener) HURT, playerParticles); pluginManager.registerEvents((Listener) MOVE, playerParticles); pluginManager.registerEvents((Listener) SWORDS, playerParticles); @@ -81,6 +83,7 @@ public class DefaultStyles implements Listener { event.registerStyle(COMPANION); event.registerStyle(CUBE); event.registerStyle(FEET); + event.registerStyle(FISHING); event.registerStyle(HALO); event.registerEventStyle(HURT); event.registerStyle(INVOCATION); diff --git a/src/main/java/dev/esophose/playerparticles/styles/ParticleStyleFishing.java b/src/main/java/dev/esophose/playerparticles/styles/ParticleStyleFishing.java new file mode 100644 index 0000000..8fb093e --- /dev/null +++ b/src/main/java/dev/esophose/playerparticles/styles/ParticleStyleFishing.java @@ -0,0 +1,82 @@ +package dev.esophose.playerparticles.styles; + +import dev.esophose.playerparticles.config.CommentedFileConfiguration; +import dev.esophose.playerparticles.particles.PParticle; +import dev.esophose.playerparticles.particles.ParticlePair; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import org.bukkit.Location; +import org.bukkit.entity.FishHook; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.player.PlayerFishEvent; +import org.bukkit.event.player.PlayerFishEvent.State; + +public class ParticleStyleFishing extends DefaultParticleStyle implements Listener { + + private List projectiles; + + public ParticleStyleFishing() { + super("fishing", false, false, 0); + + this.projectiles = Collections.synchronizedList(new ArrayList<>()); + } + + @Override + public List getParticles(ParticlePair particle, Location location) { + List particles = new ArrayList<>(); + + List listCopy = new ArrayList<>(this.projectiles); // Copy in case of modification while looping due to async + for (FishHook fishHook : listCopy) + particles.add(new PParticle(fishHook.getLocation(), 0.05F, 0.05F, 0.05F, 0.0F)); + + return particles; + } + + /** + * Removes all fish hooks that are considered dead + */ + @Override + public void updateTimers() { + this.projectiles.removeIf(x -> !x.isValid()); + } + + @Override + protected List getGuiIconMaterialNames() { + return Collections.singletonList("FISHING_ROD"); + } + + @Override + public boolean hasLongRangeVisibility() { + return false; + } + + @EventHandler + public void onPlayerFish(PlayerFishEvent event) { + switch (event.getState()) { + case FISHING: + this.projectiles.add(event.getHook()); + break; + case CAUGHT_FISH: + case REEL_IN: + this.projectiles.remove(event.getHook()); + break; + } + } + + @Override + protected void setDefaultSettings(CommentedFileConfiguration config) { + + } + + @Override + protected void loadSettings(CommentedFileConfiguration config) { + + } + +}