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 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 <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;
|
||||
|
||||
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<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;
|
||||
|
||||
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<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;
|
||||
|
||||
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<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