Fix a NPE trying to get effects/styles for an offline player

This commit is contained in:
Esophose 2021-01-19 15:43:11 -07:00
parent 3d5fd84822
commit f51fae2f63
2 changed files with 14 additions and 5 deletions

View file

@ -12,6 +12,7 @@ import dev.esophose.playerparticles.styles.DefaultStyles;
import dev.esophose.playerparticles.styles.ParticleStyle; import dev.esophose.playerparticles.styles.ParticleStyle;
import dev.esophose.playerparticles.util.ParticleUtils; import dev.esophose.playerparticles.util.ParticleUtils;
import dev.esophose.playerparticles.util.StringPlaceholders; import dev.esophose.playerparticles.util.StringPlaceholders;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
@ -308,8 +309,16 @@ public class ParticlePair {
*/ */
public static ParticlePair getNextDefault(PPlayer pplayer) { public static ParticlePair getNextDefault(PPlayer pplayer) {
PermissionManager permissionManager = PlayerParticles.getInstance().getManager(PermissionManager.class); PermissionManager permissionManager = PlayerParticles.getInstance().getManager(PermissionManager.class);
List<ParticleEffect> effects = permissionManager.getEffectsUserHasPermissionFor(pplayer);
List<ParticleStyle> styles = permissionManager.getStylesUserHasPermissionFor(pplayer); List<ParticleEffect> effects;
List<ParticleStyle> styles;
if (pplayer.getPlayer() == null) {
effects = Collections.emptyList();
styles = Collections.emptyList();
} else {
effects = permissionManager.getEffectsUserHasPermissionFor(pplayer);
styles = permissionManager.getStylesUserHasPermissionFor(pplayer);
}
return new ParticlePair(pplayer.getUniqueId(), // @formatter:off return new ParticlePair(pplayer.getUniqueId(), // @formatter:off
pplayer.getNextActiveParticleId(), pplayer.getNextActiveParticleId(),

View file

@ -64,11 +64,11 @@ public class ParticleStyleCelebration extends DefaultParticleStyle {
if (player != null && (NMSUtil.getVersionNumber() < 8 || player.getGameMode() != GameMode.SPECTATOR) && permissionManager.isWorldEnabled(player.getWorld().getName())) if (player != null && (NMSUtil.getVersionNumber() < 8 || player.getGameMode() != GameMode.SPECTATOR) && permissionManager.isWorldEnabled(player.getWorld().getName()))
for (ParticlePair particle : pplayer.getActiveParticles()) for (ParticlePair particle : pplayer.getActiveParticles())
if (particle.getStyle() == this) if (particle.getStyle() == this)
this.spawnFirework(player.getLocation(), pplayer, pplayer.getPlayer(), particle, random); this.spawnFirework(player.getLocation(), pplayer, particle, random);
for (FixedParticleEffect fixedEffect : pplayer.getFixedParticles()) for (FixedParticleEffect fixedEffect : pplayer.getFixedParticles())
if (fixedEffect.getParticlePair().getStyle() == this && permissionManager.isWorldEnabled(fixedEffect.getLocation().getWorld().getName())) if (fixedEffect.getParticlePair().getStyle() == this && permissionManager.isWorldEnabled(fixedEffect.getLocation().getWorld().getName()))
this.spawnFirework(fixedEffect.getLocation(), pplayer, null, fixedEffect.getParticlePair(), random); this.spawnFirework(fixedEffect.getLocation(), pplayer, fixedEffect.getParticlePair(), random);
} }
} }
} }
@ -109,7 +109,7 @@ public class ParticleStyleCelebration extends DefaultParticleStyle {
this.fuseEffect = ParticleEffect.FIREWORK; this.fuseEffect = ParticleEffect.FIREWORK;
} }
private void spawnFirework(final Location location, final PPlayer pplayer, final Player player, final ParticlePair particle, final Random random) { private void spawnFirework(final Location location, final PPlayer pplayer, final ParticlePair particle, final Random random) {
double angle = random.nextDouble() * Math.PI * 2; double angle = random.nextDouble() * Math.PI * 2;
double distanceFrom = this.baseDistanceFrom + random.nextDouble() * this.distanceFromRandomizer; double distanceFrom = this.baseDistanceFrom + random.nextDouble() * this.distanceFromRandomizer;
double dx = MathL.sin(angle) * distanceFrom; double dx = MathL.sin(angle) * distanceFrom;