Fix some crashes when triggering the shield ability

This commit is contained in:
Sollace 2020-04-24 21:25:45 +02:00
parent 5b0326c501
commit 408b6f153d
3 changed files with 7 additions and 14 deletions

View file

@ -121,17 +121,12 @@ public class SphereParticle extends Particle implements AttachableParticle {
} }
public static class Factory implements ParticleFactory<DefaultParticleType> { public static class Factory implements ParticleFactory<DefaultParticleType> {
private final SpriteProvider provider;
public Factory(SpriteProvider provider) { public Factory(SpriteProvider provider) {
this.provider = provider;
} }
@Override @Override
public Particle createParticle(DefaultParticleType type, World world, double x, double y, double z, double dx, double dy, double dz) { public Particle createParticle(DefaultParticleType type, World world, double x, double y, double z, double dx, double dy, double dz) {
RaindropsParticle particle = new RaindropsParticle(world, x, y, z, dx, dy, dz); return new RaindropsParticle(world, x, y, z, dx, dy, dz);
particle.setSprite(provider);
return particle;
} }
} }
} }

View file

@ -52,12 +52,10 @@ public class ShieldSpell extends AbstractSpell.RangedAreaSpell implements Attach
source.addParticle(new MagicParticleEffect(getTint()), pos, Vec3d.ZERO); source.addParticle(new MagicParticleEffect(getTint()), pos, Vec3d.ZERO);
}); });
particlEffect particlEffect.ifMissing(source, () -> {
.ifMissing(source, () -> { source.addParticle(UParticles.SPHERE, source.getOriginVector(), Vec3d.ZERO);
source.addParticle(UParticles.SPHERE, source.getOriginVector(), Vec3d.ZERO); return null; // XXX: Attachables
return null; // XXX: Attachables }).ifPresent(p -> p.setAttribute(0, radius)); // 1, getTint(), 10
}) // 1, getTint(), 10
.ifPresent(p -> p.setAttribute(0, radius));
} }
@Override @Override

View file

@ -12,9 +12,9 @@ public class ParticleConnection {
private Optional<AttachableParticle> particleEffect = Optional.empty(); private Optional<AttachableParticle> particleEffect = Optional.empty();
public Optional<AttachableParticle> ifMissing(Caster<?> source, Supplier<Optional<AttachableParticle>> constructor) { public Optional<AttachableParticle> ifMissing(Caster<?> source, Supplier<AttachableParticle> constructor) {
particleEffect.filter(AttachableParticle::isStillAlive).orElseGet(() -> { particleEffect.filter(AttachableParticle::isStillAlive).orElseGet(() -> {
particleEffect = constructor.get(); particleEffect = Optional.ofNullable(constructor.get());
particleEffect.ifPresent(p -> p.attachTo(source)); particleEffect.ifPresent(p -> p.attachTo(source));
return null; return null;
}); });