mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-08 06:26:43 +01:00
Fixed changeling particles appearing as regular magic particles
This commit is contained in:
parent
b364111df6
commit
e83c552d93
4 changed files with 38 additions and 88 deletions
|
@ -9,17 +9,30 @@ import com.minelittlepony.unicopia.client.particle.SphereParticle;
|
||||||
import com.minelittlepony.unicopia.particle.UParticles;
|
import com.minelittlepony.unicopia.particle.UParticles;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry;
|
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.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.render.entity.FlyingItemEntityRenderer;
|
||||||
|
import net.minecraft.client.world.ClientWorld;
|
||||||
|
import net.minecraft.particle.ParticleEffect;
|
||||||
|
|
||||||
public interface URenderers {
|
public interface URenderers {
|
||||||
static void bootstrap() {
|
static void bootstrap() {
|
||||||
ParticleFactoryRegistry.getInstance().register(UParticles.UNICORN_MAGIC, MagicParticle.Factory::new);
|
ParticleFactoryRegistry.getInstance().register(UParticles.UNICORN_MAGIC, createFactory(MagicParticle::new));
|
||||||
ParticleFactoryRegistry.getInstance().register(UParticles.CHANGELING_MAGIC, ChangelingMagicParticle.Factory::new);
|
ParticleFactoryRegistry.getInstance().register(UParticles.CHANGELING_MAGIC, createFactory(ChangelingMagicParticle::new));
|
||||||
ParticleFactoryRegistry.getInstance().register(UParticles.RAIN_DROPS, RaindropsParticle.Factory::new);
|
ParticleFactoryRegistry.getInstance().register(UParticles.RAIN_DROPS, createFactory(RaindropsParticle::new));
|
||||||
ParticleFactoryRegistry.getInstance().register(UParticles.SPHERE, SphereParticle::new);
|
ParticleFactoryRegistry.getInstance().register(UParticles.SPHERE, SphereParticle::new);
|
||||||
ParticleFactoryRegistry.getInstance().register(UParticles.DISK, DiskParticle::new);
|
ParticleFactoryRegistry.getInstance().register(UParticles.DISK, DiskParticle::new);
|
||||||
|
|
||||||
EntityRendererRegistry.INSTANCE.register(UEntities.THROWN_ITEM, (manager, context) -> new FlyingItemEntityRenderer<>(manager, context.getItemRenderer()));
|
EntityRendererRegistry.INSTANCE.register(UEntities.THROWN_ITEM, (manager, context) -> new FlyingItemEntityRenderer<>(manager, context.getItemRenderer()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static <T extends ParticleEffect> PendingParticleFactory<T> createFactory(ParticleSupplier<T> supplier) {
|
||||||
|
return provider -> (effect, world, x, y, z, dx, dy, dz) -> supplier.get(provider, world, x, y, z, dx, dy, dz);
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ParticleSupplier<T extends ParticleEffect> {
|
||||||
|
Particle get(SpriteProvider provider, ClientWorld world, double x, double y, double z, double dx, double dy, double dz);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,14 @@
|
||||||
package com.minelittlepony.unicopia.client.particle;
|
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.particle.SpriteProvider;
|
||||||
import net.minecraft.client.world.ClientWorld;
|
import net.minecraft.client.world.ClientWorld;
|
||||||
import net.minecraft.particle.DefaultParticleType;
|
|
||||||
|
|
||||||
public class ChangelingMagicParticle extends MagicParticle {
|
public class ChangelingMagicParticle extends MagicParticle {
|
||||||
|
|
||||||
private final SpriteProvider provider;
|
private final SpriteProvider provider;
|
||||||
|
|
||||||
public ChangelingMagicParticle(SpriteProvider provider, ClientWorld world, double x, double y, double z, double dx, double dy, double dz) {
|
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;
|
this.provider = provider;
|
||||||
|
|
||||||
float intensity = random.nextFloat() * 0.6F + 0.4F;
|
float intensity = random.nextFloat() * 0.6F + 0.4F;
|
||||||
|
@ -26,23 +21,6 @@ public class ChangelingMagicParticle extends MagicParticle {
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void tick() {
|
||||||
setSpriteForAge(provider);
|
setSpriteForAge(provider);
|
||||||
|
|
||||||
super.tick();
|
super.tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Environment(EnvType.CLIENT)
|
|
||||||
public static class Factory implements ParticleFactory<DefaultParticleType> {
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,8 @@
|
||||||
package com.minelittlepony.unicopia.client.particle;
|
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.ParticleTextureSheet;
|
||||||
import net.minecraft.client.particle.SpriteBillboardParticle;
|
import net.minecraft.client.particle.SpriteBillboardParticle;
|
||||||
|
import net.minecraft.client.particle.SpriteProvider;
|
||||||
import net.minecraft.client.world.ClientWorld;
|
import net.minecraft.client.world.ClientWorld;
|
||||||
|
|
||||||
public class MagicParticle extends SpriteBillboardParticle {
|
public class MagicParticle extends SpriteBillboardParticle {
|
||||||
|
@ -16,8 +10,10 @@ public class MagicParticle extends SpriteBillboardParticle {
|
||||||
private double startY;
|
private double startY;
|
||||||
private double startZ;
|
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);
|
super(w, x, y, z);
|
||||||
|
setSprite(provider);
|
||||||
|
|
||||||
velocityX = vX;
|
velocityX = vX;
|
||||||
velocityY = vY;
|
velocityY = vY;
|
||||||
velocityZ = vZ;
|
velocityZ = vZ;
|
||||||
|
@ -32,8 +28,8 @@ public class MagicParticle extends SpriteBillboardParticle {
|
||||||
colorBlue = b;
|
colorBlue = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
MagicParticle(ClientWorld w, double x, double y, double z, double vX, double vY, double vZ) {
|
public MagicParticle(SpriteProvider provider, 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);
|
this(provider, w, x, y, z, vX, vY, vZ, 1, 1, 1);
|
||||||
|
|
||||||
colorAlpha = 0.7F;
|
colorAlpha = 0.7F;
|
||||||
colorGreen *= 0.3F;
|
colorGreen *= 0.3F;
|
||||||
|
@ -67,16 +63,14 @@ public class MagicParticle extends SpriteBillboardParticle {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getColorMultiplier(float p_70070_1_) {
|
public int getColorMultiplier(float tint) {
|
||||||
int i = super.getColorMultiplier(p_70070_1_);
|
int light = super.getColorMultiplier(tint);
|
||||||
float f1 = (float)age / (float)maxAge;
|
float timer = (float)age / (float)maxAge;
|
||||||
f1 *= f1;
|
|
||||||
f1 *= f1;
|
int v = light >> 16 & 255;
|
||||||
int j = i & 255;
|
v = (int)Math.min(v + Math.pow(timer, 4) * 240, 240);
|
||||||
int k = i >> 16 & 255;
|
|
||||||
k += f1 * 15 * 16;
|
return (light & 255) | v << 16;
|
||||||
if (k > 240) k = 240;
|
|
||||||
return j | k << 16;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -85,33 +79,16 @@ public class MagicParticle extends SpriteBillboardParticle {
|
||||||
prevPosY = y;
|
prevPosY = y;
|
||||||
prevPosZ = z;
|
prevPosZ = z;
|
||||||
|
|
||||||
if (this.age++ >= this.maxAge) {
|
if (age++ >= maxAge) {
|
||||||
this.markDead();
|
markDead();
|
||||||
} else {
|
} else {
|
||||||
float var1 = (float)age / (float)maxAge;
|
float timer = (float)age / (float)maxAge;
|
||||||
var1 = 1 + var1 - var1 * var1 * 2;
|
timer = 1 + timer - timer * timer * 2;
|
||||||
|
|
||||||
x = startX + velocityX * var1;
|
x = startX + velocityX * timer;
|
||||||
y = startY + velocityY;
|
y = startY + velocityY;
|
||||||
z = startZ + velocityZ * var1;
|
z = startZ + velocityZ * timer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Environment(EnvType.CLIENT)
|
|
||||||
public static class Factory implements ParticleFactory<MagicParticleEffect> {
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,12 @@
|
||||||
package com.minelittlepony.unicopia.client.particle;
|
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.RainSplashParticle;
|
||||||
import net.minecraft.client.particle.SpriteProvider;
|
import net.minecraft.client.particle.SpriteProvider;
|
||||||
import net.minecraft.client.world.ClientWorld;
|
import net.minecraft.client.world.ClientWorld;
|
||||||
import net.minecraft.particle.DefaultParticleType;
|
|
||||||
|
|
||||||
public class RaindropsParticle extends RainSplashParticle {
|
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);
|
super(world, x, y, z);
|
||||||
velocityY = -0.1;
|
velocityY = -0.1;
|
||||||
maxAge += 19;
|
maxAge += 19;
|
||||||
|
@ -25,19 +22,4 @@ public class RaindropsParticle extends RainSplashParticle {
|
||||||
velocityZ *= 0.30000001192092896D;
|
velocityZ *= 0.30000001192092896D;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Factory implements ParticleFactory<DefaultParticleType> {
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue