Skip to content

Commit 709add9

Browse files
authored
[1.21.4] Fix BlockParticleOption#pos not getting sent to the client (#1673)
1 parent 52733f5 commit 709add9

File tree

3 files changed

+50
-11
lines changed

3 files changed

+50
-11
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,57 @@
11
--- a/net/minecraft/core/particles/BlockParticleOption.java
22
+++ b/net/minecraft/core/particles/BlockParticleOption.java
3-
@@ -37,4 +_,15 @@
4-
public BlockState getState() {
5-
return this.state;
3+
@@ -15,18 +_,39 @@
4+
);
5+
private final ParticleType<BlockParticleOption> type;
6+
private final BlockState state;
7+
+ /** Neo: Position of the block this particle was spawned for, if available, to provide model data for the particle texture selection */
8+
+ @org.jetbrains.annotations.Nullable
9+
+ private final net.minecraft.core.BlockPos pos;
10+
11+
public static MapCodec<BlockParticleOption> codec(ParticleType<BlockParticleOption> p_123635_) {
12+
return BLOCK_STATE_CODEC.xmap(p_123638_ -> new BlockParticleOption(p_123635_, p_123638_), p_123633_ -> p_123633_.state).fieldOf("block_state");
13+
}
14+
15+
public static StreamCodec<? super RegistryFriendlyByteBuf, BlockParticleOption> streamCodec(ParticleType<BlockParticleOption> p_320740_) {
16+
- return ByteBufCodecs.idMapper(Block.BLOCK_STATE_REGISTRY).map(p_319424_ -> new BlockParticleOption(p_320740_, p_319424_), p_319425_ -> p_319425_.state);
17+
+ return StreamCodec.composite(
18+
+ ByteBufCodecs.idMapper(Block.BLOCK_STATE_REGISTRY),
19+
+ option -> option.state,
20+
+ net.neoforged.neoforge.network.codec.NeoForgeStreamCodecs.connectionAware(
21+
+ ByteBufCodecs.optional(net.minecraft.core.BlockPos.STREAM_CODEC),
22+
+ net.neoforged.neoforge.network.codec.NeoForgeStreamCodecs.uncheckedUnit(java.util.Optional.empty())
23+
+ ),
24+
+ option -> java.util.Optional.ofNullable(option.pos),
25+
+ (state, pos) -> new BlockParticleOption(p_320740_, state, pos.orElse(null))
26+
+ );
627
}
28+
29+
public BlockParticleOption(ParticleType<BlockParticleOption> p_123629_, BlockState p_123630_) {
30+
+ this(p_123629_, p_123630_, null);
31+
+ }
732
+
8-
+ //FORGE: Add a source pos property, so we can provide models with additional model data
9-
+ private net.minecraft.core.BlockPos pos;
10-
+ public BlockParticleOption setPos(net.minecraft.core.BlockPos pos) {
33+
+ /**
34+
+ * Neo: construct a {@link BlockParticleOption} for the given type and {@link BlockState} and optionally the position
35+
+ * of the block this particle is being spawned for
36+
+ */
37+
+ public BlockParticleOption(ParticleType<BlockParticleOption> p_123629_, BlockState p_123630_, @org.jetbrains.annotations.Nullable net.minecraft.core.BlockPos pos) {
38+
this.type = p_123629_;
39+
this.state = p_123630_;
1140
+ this.pos = pos;
12-
+ return this;
41+
}
42+
43+
@Override
44+
@@ -36,5 +_,13 @@
45+
46+
public BlockState getState() {
47+
return this.state;
1348
+ }
1449
+
50+
+ /**
51+
+ * Neo: returns the position of the block this particle was spawned for, if available
52+
+ */
53+
+ @org.jetbrains.annotations.Nullable
1554
+ public net.minecraft.core.BlockPos getPos() {
1655
+ return pos;
17-
+ }
56+
}
1857
}

patches/net/minecraft/world/entity/Entity.java.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@
166166
}
167167

168168
- this.level().addParticle(new BlockParticleOption(ParticleTypes.BLOCK, blockstate), d0, this.getY() + 0.1, d1, vec3.x * -4.0, 1.5, vec3.z * -4.0);
169-
+ this.level().addParticle(new BlockParticleOption(ParticleTypes.BLOCK, blockstate).setPos(blockpos), d0, this.getY() + 0.1, d1, vec3.x * -4.0, 1.5, vec3.z * -4.0);
169+
+ this.level().addParticle(new BlockParticleOption(ParticleTypes.BLOCK, blockstate, blockpos), d0, this.getY() + 0.1, d1, vec3.x * -4.0, 1.5, vec3.z * -4.0);
170170
}
171171
}
172172

patches/net/minecraft/world/entity/LivingEntity.java.patch

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@
5252
double d4 = Math.min((double)(0.2F + f / 15.0F), 2.5);
5353
int i = (int)(150.0 * d4);
5454
- serverlevel.sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, p_20992_), d0, d1, d2, i, 0.0, 0.0, 0.0, 0.15F);
55-
+ if (!p_20992_.addLandingEffects((ServerLevel) this.level(), p_20993_, p_20992_, this, i))
56-
+ ((ServerLevel)this.level()).sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, p_20992_).setPos(p_20993_), d0, d1, d2, i, 0.0, 0.0, 0.0, 0.15F);
55+
+ if (!p_20992_.addLandingEffects(serverlevel, p_20993_, p_20992_, this, i))
56+
+ serverlevel.sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, p_20992_, p_20993_), d0, d1, d2, i, 0.0, 0.0, 0.0, 0.15F);
5757
}
5858
}
5959

0 commit comments

Comments
 (0)