Death Particle Style (#79)

* Death Style
* Update ParticleStyleDeath.java
* Move duration check
This commit is contained in:
Oribuin 2021-05-23 11:19:00 +01:00 committed by GitHub
parent 32d0995289
commit 70c398c41e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 109 additions and 1 deletions

View file

@ -23,6 +23,7 @@ public class DefaultStyles implements Listener {
public static final ParticleStyle CHAINS = new ParticleStyleChains();
public static final ParticleStyle COMPANION = new ParticleStyleCompanion();
public static final ParticleStyle CUBE = new ParticleStyleCube();
public static final ParticleStyle DEATH = new ParticleStyleDeath();
public static final ParticleStyle FEET = new ParticleStyleFeet();
public static final ParticleStyle FISHING = new ParticleStyleFishing();
public static final ParticleStyle HALO = new ParticleStyleHalo();
@ -65,6 +66,7 @@ public class DefaultStyles implements Listener {
pluginManager.registerEvents((Listener) ARROWS, playerParticles);
pluginManager.registerEvents((Listener) BLOCKBREAK, playerParticles);
pluginManager.registerEvents((Listener) BLOCKPLACE, playerParticles);
pluginManager.registerEvents((Listener) DEATH, playerParticles);
pluginManager.registerEvents((Listener) FISHING, playerParticles);
pluginManager.registerEvents((Listener) HURT, playerParticles);
pluginManager.registerEvents((Listener) MOVE, playerParticles);
@ -84,6 +86,7 @@ public class DefaultStyles implements Listener {
event.registerStyle(CHAINS);
event.registerStyle(COMPANION);
event.registerStyle(CUBE);
event.registerEventStyle(DEATH);
event.registerStyle(FEET);
event.registerStyle(FISHING);
event.registerStyle(HALO);

View file

@ -0,0 +1,104 @@
package dev.esophose.playerparticles.styles;
import dev.esophose.playerparticles.PlayerParticles;
import dev.esophose.playerparticles.config.CommentedFileConfiguration;
import dev.esophose.playerparticles.manager.ConfigurationManager;
import dev.esophose.playerparticles.manager.DataManager;
import dev.esophose.playerparticles.manager.ParticleManager;
import dev.esophose.playerparticles.particles.PParticle;
import dev.esophose.playerparticles.particles.PPlayer;
import dev.esophose.playerparticles.particles.ParticlePair;
import org.bukkit.Location;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class ParticleStyleDeath extends DefaultParticleStyle implements Listener {
private String style;
private List<EntityDamageEvent.DamageCause> causes;
private int targetDuration;
private final long ticksPerParticle = ConfigurationManager.Setting.TICKS_PER_PARTICLE.getLong();
protected ParticleStyleDeath() {
super("death", false, false, 0);
}
@Override
public List<PParticle> getParticles(ParticlePair particle, Location location) {
ParticleStyle style = ParticleStyle.fromName(this.style);
if (style == null || style == this)
style = DefaultStyles.WHIRL;
return style.getParticles(particle, location);
}
@Override
public void updateTimers() {
}
@Override
protected List<String> getGuiIconMaterialNames() {
return Arrays.asList("TOTEM_OF_UNDYING", "TOTEM", "BED");
}
@Override
protected void setDefaultSettings(CommentedFileConfiguration config) {
this.setIfNotExists("style", "whirl", "The name of the style to be displayed.");
this.setIfNotExists("target-duration", 60, "How long to display the particles for.");
this.setIfNotExists("disabled-causes", Collections.singletonList("DROWNING"), "What damage types shouldn't spawn particles?");
}
@Override
protected void loadSettings(CommentedFileConfiguration config) {
this.style = config.getString("style");
this.targetDuration = config.getInt("target-duration");
// Nicole you may wanna clean this up a bit
this.causes = config.getStringList("disabled-causes").stream()
.map(s -> EntityDamageEvent.DamageCause.valueOf(s.toUpperCase()))
.collect(Collectors.toList());
}
@EventHandler(priority = EventPriority.MONITOR)
public void onDeath(PlayerDeathEvent event) {
final EntityDamageEvent damageEvent = event.getEntity().getLastDamageCause();
if (damageEvent == null) return;
if (causes.contains(damageEvent.getCause())) return;
ParticleManager particleManager = PlayerParticles.getInstance().getManager(ParticleManager.class);
PPlayer pplayer = PlayerParticles.getInstance().getManager(DataManager.class).getPPlayer(event.getEntity().getUniqueId());
new BukkitRunnable() {
private int totalDuration = 0;
final Location loc = event.getEntity().getLocation().clone().add(0, 1, 0);
@Override
public void run() {
for (ParticlePair particle : pplayer.getActiveParticlesForStyle(DefaultStyles.DEATH)) {
particleManager.displayParticles(pplayer, event.getEntity().getWorld(), particle, DefaultStyles.DEATH.getParticles(particle, loc), false);
}
this.totalDuration += ticksPerParticle;
if (this.totalDuration > targetDuration)
this.cancel();
}
}.runTaskTimer(PlayerParticles.getInstance(), 0, ticksPerParticle);
}
}

View file

@ -4,6 +4,7 @@ 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;
@ -34,7 +35,7 @@ public class ParticleStyleFeet extends DefaultParticleStyle {
@Override
protected List<String> getGuiIconMaterialNames() {
return Collections.singletonList("GRASS");
return Arrays.asList("GRASS_BLOCK", "GRASS");
}
@Override