From e83c552d93f7cdd8abb78aa1d162eb80d9be7793 Mon Sep 17 00:00:00 2001 From: Sollace Date: Sun, 27 Sep 2020 17:44:39 +0200 Subject: [PATCH] Fixed changeling particles appearing as regular magic particles --- .../unicopia/client/URenderers.java | 19 +++++- .../particle/ChangelingMagicParticle.java | 24 +------ .../client/particle/MagicParticle.java | 63 ++++++------------- .../client/particle/RaindropsParticle.java | 20 +----- 4 files changed, 38 insertions(+), 88 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java index aca098ad..0505ee2a 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/URenderers.java +++ b/src/main/java/com/minelittlepony/unicopia/client/URenderers.java @@ -9,17 +9,30 @@ import com.minelittlepony.unicopia.client.particle.SphereParticle; import com.minelittlepony.unicopia.particle.UParticles; import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; +import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry.PendingParticleFactory; import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.SpriteProvider; import net.minecraft.client.render.entity.FlyingItemEntityRenderer; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.particle.ParticleEffect; public interface URenderers { static void bootstrap() { - ParticleFactoryRegistry.getInstance().register(UParticles.UNICORN_MAGIC, MagicParticle.Factory::new); - ParticleFactoryRegistry.getInstance().register(UParticles.CHANGELING_MAGIC, ChangelingMagicParticle.Factory::new); - ParticleFactoryRegistry.getInstance().register(UParticles.RAIN_DROPS, RaindropsParticle.Factory::new); + ParticleFactoryRegistry.getInstance().register(UParticles.UNICORN_MAGIC, createFactory(MagicParticle::new)); + ParticleFactoryRegistry.getInstance().register(UParticles.CHANGELING_MAGIC, createFactory(ChangelingMagicParticle::new)); + ParticleFactoryRegistry.getInstance().register(UParticles.RAIN_DROPS, createFactory(RaindropsParticle::new)); ParticleFactoryRegistry.getInstance().register(UParticles.SPHERE, SphereParticle::new); ParticleFactoryRegistry.getInstance().register(UParticles.DISK, DiskParticle::new); EntityRendererRegistry.INSTANCE.register(UEntities.THROWN_ITEM, (manager, context) -> new FlyingItemEntityRenderer<>(manager, context.getItemRenderer())); } + + static PendingParticleFactory createFactory(ParticleSupplier supplier) { + return provider -> (effect, world, x, y, z, dx, dy, dz) -> supplier.get(provider, world, x, y, z, dx, dy, dz); + } + + interface ParticleSupplier { + Particle get(SpriteProvider provider, ClientWorld world, double x, double y, double z, double dx, double dy, double dz); + } } diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/ChangelingMagicParticle.java b/src/main/java/com/minelittlepony/unicopia/client/particle/ChangelingMagicParticle.java index 9a08ee99..3327800a 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/ChangelingMagicParticle.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/ChangelingMagicParticle.java @@ -1,19 +1,14 @@ package com.minelittlepony.unicopia.client.particle; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.particle.Particle; -import net.minecraft.client.particle.ParticleFactory; import net.minecraft.client.particle.SpriteProvider; import net.minecraft.client.world.ClientWorld; -import net.minecraft.particle.DefaultParticleType; public class ChangelingMagicParticle extends MagicParticle { private final SpriteProvider provider; public ChangelingMagicParticle(SpriteProvider provider, ClientWorld world, double x, double y, double z, double dx, double dy, double dz) { - super(world, x, y, z, dx, dy, dz, 1, 1, 1); + super(provider, world, x, y, z, dx, dy, dz, 1, 1, 1); this.provider = provider; float intensity = random.nextFloat() * 0.6F + 0.4F; @@ -26,23 +21,6 @@ public class ChangelingMagicParticle extends MagicParticle { @Override public void tick() { setSpriteForAge(provider); - super.tick(); } - - @Environment(EnvType.CLIENT) - public static class Factory implements ParticleFactory { - private final SpriteProvider provider; - - public Factory(SpriteProvider provider) { - this.provider = provider; - } - - @Override - public Particle createParticle(DefaultParticleType effect, ClientWorld world, double x, double y, double z, double dx, double dy, double dz) { - MagicParticle particle = new MagicParticle(world, x, y, z, dx, dy, dz); - particle.setSprite(provider); - return particle; - } - } } diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/MagicParticle.java b/src/main/java/com/minelittlepony/unicopia/client/particle/MagicParticle.java index 252e2f9a..fa97eb73 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/MagicParticle.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/MagicParticle.java @@ -1,14 +1,8 @@ package com.minelittlepony.unicopia.client.particle; -import com.minelittlepony.unicopia.particle.MagicParticleEffect; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.client.particle.v1.FabricSpriteProvider; -import net.minecraft.client.particle.Particle; -import net.minecraft.client.particle.ParticleFactory; import net.minecraft.client.particle.ParticleTextureSheet; import net.minecraft.client.particle.SpriteBillboardParticle; +import net.minecraft.client.particle.SpriteProvider; import net.minecraft.client.world.ClientWorld; public class MagicParticle extends SpriteBillboardParticle { @@ -16,8 +10,10 @@ public class MagicParticle extends SpriteBillboardParticle { private double startY; private double startZ; - MagicParticle(ClientWorld w, double x, double y, double z, double vX, double vY, double vZ, float r, float g, float b) { + MagicParticle(SpriteProvider provider, ClientWorld w, double x, double y, double z, double vX, double vY, double vZ, float r, float g, float b) { super(w, x, y, z); + setSprite(provider); + velocityX = vX; velocityY = vY; velocityZ = vZ; @@ -32,8 +28,8 @@ public class MagicParticle extends SpriteBillboardParticle { colorBlue = b; } - MagicParticle(ClientWorld w, double x, double y, double z, double vX, double vY, double vZ) { - this(w, x, y, z, vX, vY, vZ, 1, 1, 1); + public MagicParticle(SpriteProvider provider, ClientWorld w, double x, double y, double z, double vX, double vY, double vZ) { + this(provider, w, x, y, z, vX, vY, vZ, 1, 1, 1); colorAlpha = 0.7F; colorGreen *= 0.3F; @@ -67,16 +63,14 @@ public class MagicParticle extends SpriteBillboardParticle { } @Override - public int getColorMultiplier(float p_70070_1_) { - int i = super.getColorMultiplier(p_70070_1_); - float f1 = (float)age / (float)maxAge; - f1 *= f1; - f1 *= f1; - int j = i & 255; - int k = i >> 16 & 255; - k += f1 * 15 * 16; - if (k > 240) k = 240; - return j | k << 16; + public int getColorMultiplier(float tint) { + int light = super.getColorMultiplier(tint); + float timer = (float)age / (float)maxAge; + + int v = light >> 16 & 255; + v = (int)Math.min(v + Math.pow(timer, 4) * 240, 240); + + return (light & 255) | v << 16; } @Override @@ -85,33 +79,16 @@ public class MagicParticle extends SpriteBillboardParticle { prevPosY = y; prevPosZ = z; - if (this.age++ >= this.maxAge) { - this.markDead(); + if (age++ >= maxAge) { + markDead(); } else { - float var1 = (float)age / (float)maxAge; - var1 = 1 + var1 - var1 * var1 * 2; + float timer = (float)age / (float)maxAge; + timer = 1 + timer - timer * timer * 2; - x = startX + velocityX * var1; + x = startX + velocityX * timer; y = startY + velocityY; - z = startZ + velocityZ * var1; + z = startZ + velocityZ * timer; } } - @Environment(EnvType.CLIENT) - public static class Factory implements ParticleFactory { - private final FabricSpriteProvider provider; - - public Factory(FabricSpriteProvider provider) { - this.provider = provider; - } - - @Override - public Particle createParticle(MagicParticleEffect effect, ClientWorld world, double x, double y, double z, double dx, double dy, double dz) { - MagicParticle particle = effect.hasTint() ? - new MagicParticle(world, x, y, z, dx, dy, dz, effect.getRed(), effect.getGreen(), effect.getBlue()) - : new MagicParticle(world, x, y, z, dx, dy, dz); - particle.setSprite(provider); - return particle; - } - } } diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/RaindropsParticle.java b/src/main/java/com/minelittlepony/unicopia/client/particle/RaindropsParticle.java index c82277e3..37572dd8 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/RaindropsParticle.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/RaindropsParticle.java @@ -1,15 +1,12 @@ package com.minelittlepony.unicopia.client.particle; -import net.minecraft.client.particle.Particle; -import net.minecraft.client.particle.ParticleFactory; import net.minecraft.client.particle.RainSplashParticle; import net.minecraft.client.particle.SpriteProvider; import net.minecraft.client.world.ClientWorld; -import net.minecraft.particle.DefaultParticleType; public class RaindropsParticle extends RainSplashParticle { - public RaindropsParticle(ClientWorld world, double x, double y, double z, double dx, double dy, double dz) { + public RaindropsParticle(SpriteProvider provider, ClientWorld world, double x, double y, double z, double dx, double dy, double dz) { super(world, x, y, z); velocityY = -0.1; maxAge += 19; @@ -25,19 +22,4 @@ public class RaindropsParticle extends RainSplashParticle { velocityZ *= 0.30000001192092896D; } } - - public static class Factory implements ParticleFactory { - private final SpriteProvider provider; - - public Factory(SpriteProvider provider) { - this.provider = provider; - } - - @Override - public Particle createParticle(DefaultParticleType defaultParticleType_1, ClientWorld world, double x, double y, double z, double dx, double dy, double dz) { - RaindropsParticle particle = new RaindropsParticle(world, x, y, z, dx, dy, dz); - particle.setSprite(provider); - return particle; - } - } }