From b6e58c411a8b2b24bfebd32a27718f1a298708a6 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Sat, 28 Jun 2025 18:31:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=B2=92=E5=AD=90=E5=B1=9E?= =?UTF-8?q?=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/particle/BulletDecalOption.java | 47 +++++++++++++++++-- .../client/particle/BulletDecalParticle.java | 16 ++++--- .../entity/projectile/ProjectileEntity.java | 3 +- 3 files changed, 54 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/particle/BulletDecalOption.java b/src/main/java/com/atsuishio/superbwarfare/client/particle/BulletDecalOption.java index a89b8881b..0486fea59 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/particle/BulletDecalOption.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/particle/BulletDecalOption.java @@ -17,7 +17,10 @@ public class BulletDecalOption implements ParticleOptions { public static final Codec CODEC = RecordCodecBuilder.create(builder -> builder.group( Codec.INT.fieldOf("dir").forGetter(option -> option.direction.ordinal()), - Codec.LONG.fieldOf("pos").forGetter(option -> option.pos.asLong()) + Codec.LONG.fieldOf("pos").forGetter(option -> option.pos.asLong()), + Codec.FLOAT.fieldOf("r").forGetter(option -> option.red), + Codec.FLOAT.fieldOf("g").forGetter(option -> option.green), + Codec.FLOAT.fieldOf("b").forGetter(option -> option.blue) ).apply(builder, BulletDecalOption::new)); @SuppressWarnings("deprecation") @@ -28,26 +31,45 @@ public class BulletDecalOption implements ParticleOptions { int dir = reader.readInt(); reader.expect(' '); long pos = reader.readLong(); - return new BulletDecalOption(dir, pos); + reader.expect(' '); + float r = reader.readFloat(); + reader.expect(' '); + float g = reader.readFloat(); + reader.expect(' '); + float b = reader.readFloat(); + return new BulletDecalOption(dir, pos, r, g, b); } @Override public BulletDecalOption fromNetwork(ParticleType particleType, FriendlyByteBuf buffer) { - return new BulletDecalOption(buffer.readVarInt(), buffer.readLong()); + return new BulletDecalOption(buffer.readVarInt(), buffer.readLong(), buffer.readFloat(), buffer.readFloat(), buffer.readFloat()); } }; private final Direction direction; private final BlockPos pos; + private final float red; + private final float green; + private final float blue; public BulletDecalOption(int dir, long pos) { - this.direction = Direction.values()[dir]; - this.pos = BlockPos.of(pos); + this(Direction.values()[dir], BlockPos.of(pos), 0f, 0f, 0f); + } + + public BulletDecalOption(int dir, long pos, float r, float g, float b) { + this(Direction.values()[dir], BlockPos.of(pos), r, g, b); } public BulletDecalOption(Direction dir, BlockPos pos) { + this(dir, pos, 0f, 0f, 0f); + } + + public BulletDecalOption(Direction dir, BlockPos pos, float r, float g, float b) { this.direction = dir; this.pos = pos; + this.red = r; + this.green = g; + this.blue = b; } public Direction getDirection() { @@ -58,6 +80,18 @@ public class BulletDecalOption implements ParticleOptions { return this.pos; } + public float getRed() { + return red; + } + + public float getGreen() { + return green; + } + + public float getBlue() { + return blue; + } + @Override public ParticleType getType() { return ModParticleTypes.BULLET_DECAL.get(); @@ -67,6 +101,9 @@ public class BulletDecalOption implements ParticleOptions { public void writeToNetwork(FriendlyByteBuf buffer) { buffer.writeEnum(this.direction); buffer.writeBlockPos(this.pos); + buffer.writeFloat(this.red); + buffer.writeFloat(this.green); + buffer.writeFloat(this.blue); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/client/particle/BulletDecalParticle.java b/src/main/java/com/atsuishio/superbwarfare/client/particle/BulletDecalParticle.java index 6d1c94146..86959c8df 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/particle/BulletDecalParticle.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/particle/BulletDecalParticle.java @@ -37,8 +37,12 @@ public class BulletDecalParticle extends TextureSheetParticle { private int vOffset; private float textureDensity; - public BulletDecalParticle(ClientLevel world, double x, double y, double z, Direction direction, BlockPos pos) { - super(world, x, y, z); + public BulletDecalParticle(ClientLevel level, double x, double y, double z, Direction direction, BlockPos pos) { + this(level, x, y, z, direction, pos, 0f, 0f, 0f); + } + + public BulletDecalParticle(ClientLevel level, double x, double y, double z, Direction direction, BlockPos pos, float rCol, float gCol, float bCol) { + super(level, x, y, z); this.setSprite(this.getSprite(pos)); this.direction = direction; this.pos = pos; @@ -51,9 +55,9 @@ public class BulletDecalParticle extends TextureSheetParticle { this.remove(); } - this.rCol = 0; - this.gCol = 0; - this.bCol = 0; + this.rCol = rCol; + this.gCol = gCol; + this.bCol = bCol; this.alpha = 0.9F; } @@ -184,7 +188,7 @@ public class BulletDecalParticle extends TextureSheetParticle { @Override public BulletDecalParticle createParticle(@NotNull BulletDecalOption option, @NotNull ClientLevel world, double x, double y, double z, double pXSpeed, double pYSpeed, double pZSpeed) { - return new BulletDecalParticle(world, x, y, z, option.getDirection(), option.getPos()); + return new BulletDecalParticle(world, x, y, z, option.getDirection(), option.getPos(), option.getRed(), option.getGreen(), option.getBlue()); } } } \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/ProjectileEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/ProjectileEntity.java index 065e234cf..6cfdfd971 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/ProjectileEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/ProjectileEntity.java @@ -510,7 +510,8 @@ public class ProjectileEntity extends Projectile implements IEntityWithComplexSp if (this.beast) { ParticleTool.sendParticle(serverLevel, ParticleTypes.END_ROD, location.x, location.y, location.z, 15, 0.1, 0.1, 0.1, 0.05, true); } else { - BulletDecalOption bulletDecalOption = new BulletDecalOption(result.getDirection(), result.getBlockPos()); + BulletDecalOption bulletDecalOption = new BulletDecalOption(result.getDirection(), result.getBlockPos(), + this.entityData.get(COLOR_R), this.entityData.get(COLOR_G), this.entityData.get(COLOR_B)); serverLevel.sendParticles(bulletDecalOption, location.x, location.y, location.z, 1, 0, 0, 0, 0); ParticleTool.sendParticle(serverLevel, ParticleTypes.SMOKE, location.x, location.y, location.z, 3, vx, vy, vz, 0.01, true);