|
1 | 1 | --- a/net/minecraft/core/particles/BlockParticleOption.java
|
2 | 2 | +++ 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 | ++ ); |
6 | 27 | }
|
| 28 | + |
| 29 | + public BlockParticleOption(ParticleType<BlockParticleOption> p_123629_, BlockState p_123630_) { |
| 30 | ++ this(p_123629_, p_123630_, null); |
| 31 | ++ } |
7 | 32 | +
|
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_; |
11 | 40 | + this.pos = pos;
|
12 |
| -+ return this; |
| 41 | + } |
| 42 | + |
| 43 | + @Override |
| 44 | +@@ -36,5 +_,13 @@ |
| 45 | + |
| 46 | + public BlockState getState() { |
| 47 | + return this.state; |
13 | 48 | + }
|
14 | 49 | +
|
| 50 | ++ /** |
| 51 | ++ * Neo: returns the position of the block this particle was spawned for, if available |
| 52 | ++ */ |
| 53 | ++ @org.jetbrains.annotations.Nullable |
15 | 54 | + public net.minecraft.core.BlockPos getPos() {
|
16 | 55 | + return pos;
|
17 |
| -+ } |
| 56 | + } |
18 | 57 | }
|
0 commit comments