2025-11-24 22:52:51 +03:00

168 lines
6.3 KiB
Java

/*
* Decompiled with CFR 0.152.
*/
package net.minecraft.client.particle;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.particle.Particle;
import net.minecraft.client.particle.ParticleProvider;
import net.minecraft.client.particle.SingleQuadParticle;
import net.minecraft.client.particle.SpriteSet;
import net.minecraft.core.particles.SimpleParticleType;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
public class GlowParticle
extends SingleQuadParticle {
private final SpriteSet sprites;
private GlowParticle(ClientLevel level, double x, double y, double z, double xa, double ya, double za, SpriteSet sprites) {
super(level, x, y, z, xa, ya, za, sprites.first());
this.friction = 0.96f;
this.speedUpWhenYMotionIsBlocked = true;
this.sprites = sprites;
this.quadSize *= 0.75f;
this.hasPhysics = false;
this.setSpriteFromAge(sprites);
}
@Override
public SingleQuadParticle.Layer getLayer() {
return SingleQuadParticle.Layer.TRANSLUCENT;
}
@Override
public int getLightColor(float a) {
float l = ((float)this.age + a) / (float)this.lifetime;
l = Mth.clamp(l, 0.0f, 1.0f);
int br = super.getLightColor(a);
int br1 = br & 0xFF;
int br2 = br >> 16 & 0xFF;
if ((br1 += (int)(l * 15.0f * 16.0f)) > 240) {
br1 = 240;
}
return br1 | br2 << 16;
}
@Override
public void tick() {
super.tick();
this.setSpriteFromAge(this.sprites);
}
public static class ScrapeProvider
implements ParticleProvider<SimpleParticleType> {
private static final double SPEED_FACTOR = 0.01;
private final SpriteSet sprite;
public ScrapeProvider(SpriteSet sprite) {
this.sprite = sprite;
}
@Override
public Particle createParticle(SimpleParticleType options, ClientLevel level, double x, double y, double z, double xAux, double yAux, double zAux, RandomSource random) {
GlowParticle glowParticle = new GlowParticle(level, x, y, z, 0.0, 0.0, 0.0, this.sprite);
if (random.nextBoolean()) {
glowParticle.setColor(0.29f, 0.58f, 0.51f);
} else {
glowParticle.setColor(0.43f, 0.77f, 0.62f);
}
glowParticle.setParticleSpeed(xAux * 0.01, yAux * 0.01, zAux * 0.01);
int minLifespan = 10;
int maxLifespan = 40;
glowParticle.setLifetime(random.nextInt(30) + 10);
return glowParticle;
}
}
public static class ElectricSparkProvider
implements ParticleProvider<SimpleParticleType> {
private static final double SPEED_FACTOR = 0.25;
private final SpriteSet sprite;
public ElectricSparkProvider(SpriteSet sprite) {
this.sprite = sprite;
}
@Override
public Particle createParticle(SimpleParticleType options, ClientLevel level, double x, double y, double z, double xAux, double yAux, double zAux, RandomSource random) {
GlowParticle glowParticle = new GlowParticle(level, x, y, z, 0.0, 0.0, 0.0, this.sprite);
glowParticle.setColor(1.0f, 0.9f, 1.0f);
glowParticle.setParticleSpeed(xAux * 0.25, yAux * 0.25, zAux * 0.25);
int minLifespan = 2;
int maxLifespan = 4;
glowParticle.setLifetime(random.nextInt(2) + 2);
return glowParticle;
}
}
public static class WaxOffProvider
implements ParticleProvider<SimpleParticleType> {
private static final double SPEED_FACTOR = 0.01;
private final SpriteSet sprite;
public WaxOffProvider(SpriteSet sprite) {
this.sprite = sprite;
}
@Override
public Particle createParticle(SimpleParticleType options, ClientLevel level, double x, double y, double z, double xAux, double yAux, double zAux, RandomSource random) {
GlowParticle glowParticle = new GlowParticle(level, x, y, z, 0.0, 0.0, 0.0, this.sprite);
glowParticle.setColor(1.0f, 0.9f, 1.0f);
glowParticle.setParticleSpeed(xAux * 0.01 / 2.0, yAux * 0.01, zAux * 0.01 / 2.0);
int minLifespan = 10;
int maxLifespan = 40;
glowParticle.setLifetime(random.nextInt(30) + 10);
return glowParticle;
}
}
public static class WaxOnProvider
implements ParticleProvider<SimpleParticleType> {
private static final double SPEED_FACTOR = 0.01;
private final SpriteSet sprite;
public WaxOnProvider(SpriteSet sprite) {
this.sprite = sprite;
}
@Override
public Particle createParticle(SimpleParticleType options, ClientLevel level, double x, double y, double z, double xAux, double yAux, double zAux, RandomSource random) {
GlowParticle glowParticle = new GlowParticle(level, x, y, z, 0.0, 0.0, 0.0, this.sprite);
glowParticle.setColor(0.91f, 0.55f, 0.08f);
glowParticle.setParticleSpeed(xAux * 0.01 / 2.0, yAux * 0.01, zAux * 0.01 / 2.0);
int minLifespan = 10;
int maxLifespan = 40;
glowParticle.setLifetime(random.nextInt(30) + 10);
return glowParticle;
}
}
public static class GlowSquidProvider
implements ParticleProvider<SimpleParticleType> {
private final SpriteSet sprite;
public GlowSquidProvider(SpriteSet sprite) {
this.sprite = sprite;
}
@Override
public Particle createParticle(SimpleParticleType options, ClientLevel level, double x, double y, double z, double xAux, double yAux, double zAux, RandomSource random) {
GlowParticle glowParticle = new GlowParticle(level, x, y, z, 0.5 - random.nextDouble(), yAux, 0.5 - random.nextDouble(), this.sprite);
if (random.nextBoolean()) {
glowParticle.setColor(0.6f, 1.0f, 0.8f);
} else {
glowParticle.setColor(0.08f, 0.4f, 0.4f);
}
glowParticle.yd *= (double)0.2f;
if (xAux == 0.0 && zAux == 0.0) {
glowParticle.xd *= (double)0.1f;
glowParticle.zd *= (double)0.1f;
}
glowParticle.setLifetime((int)(8.0 / (random.nextDouble() * 0.8 + 0.2)));
return glowParticle;
}
}
}