Files
Paper/paper-server/patches/sources/net/minecraft/world/entity/InsideBlockEffectApplier.java.patch
Nassim Jahnke f00727c57e 1.21.5
Co-authored-by: Bjarne Koll <git@lynxplay.dev>
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
Co-authored-by: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com>
Co-authored-by: MiniDigger | Martin <admin@minidigger.dev>
Co-authored-by: Nassim Jahnke <nassim@njahnke.dev>
Co-authored-by: Noah van der Aa <ndvdaa@gmail.com>
Co-authored-by: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>
Co-authored-by: Shane Freeder <theboyetronic@gmail.com>
Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com>
Co-authored-by: Tamion <70228790+notTamion@users.noreply.github.com>
Co-authored-by: Warrior <50800980+Warriorrrr@users.noreply.github.com>
2025-04-12 17:27:00 +02:00

67 lines
3.3 KiB
Diff

--- a/net/minecraft/world/entity/InsideBlockEffectApplier.java
+++ b/net/minecraft/world/entity/InsideBlockEffectApplier.java
@@ -32,7 +_,7 @@
public static class StepBasedCollector implements InsideBlockEffectApplier {
private static final InsideBlockEffectType[] APPLY_ORDER = InsideBlockEffectType.values();
private static final int NO_STEP = -1;
- private final Set<InsideBlockEffectType> effectsInStep = EnumSet.noneOf(InsideBlockEffectType.class);
+ private final Map<InsideBlockEffectType, Consumer<Entity>> effectsInStep = new java.util.EnumMap<>(InsideBlockEffectType.class); // Paper - track position inside effect was triggered on
private final Map<InsideBlockEffectType, List<Consumer<Entity>>> beforeEffectsInStep = Util.makeEnumMap(
InsideBlockEffectType.class, insideBlockEffectType -> new ArrayList<>()
);
@@ -42,7 +_,8 @@
private final List<Consumer<Entity>> finalEffects = new ArrayList<>();
private int lastStep = -1;
- public void advanceStep(int step) {
+ public void advanceStep(int step, net.minecraft.core.BlockPos pos) { // Paper - track position inside effect was triggered on
+ this.currentBlockPos = pos; // Paper - track position inside effect was triggered on
if (this.lastStep != step) {
this.lastStep = step;
this.flushStep();
@@ -69,8 +_,8 @@
List<Consumer<Entity>> list = this.beforeEffectsInStep.get(insideBlockEffectType);
this.finalEffects.addAll(list);
list.clear();
- if (this.effectsInStep.remove(insideBlockEffectType)) {
- this.finalEffects.add(insideBlockEffectType.effect());
+ if (this.effectsInStep.remove(insideBlockEffectType) instanceof final Consumer<Entity> recordedEffect) { // Paper - track position inside effect was triggered on - better than null check to avoid diff.
+ this.finalEffects.add(recordedEffect); // Paper - track position inside effect was triggered on
}
List<Consumer<Entity>> list1 = this.afterEffectsInStep.get(insideBlockEffectType);
@@ -81,7 +_,7 @@
@Override
public void apply(InsideBlockEffectType type) {
- this.effectsInStep.add(type);
+ this.effectsInStep.put(type, recorded(type)); // Paper - track position inside effect was triggered on
}
@Override
@@ -93,5 +_,24 @@
public void runAfter(InsideBlockEffectType type, Consumer<Entity> effect) {
this.afterEffectsInStep.get(type).add(effect);
}
+
+ // Paper start - track position inside effect was triggered on
+ private net.minecraft.core.BlockPos currentBlockPos;
+
+ private Consumer<Entity> recorded(final InsideBlockEffectType type) {
+ return new RecordedEffect(this.currentBlockPos, type.effect());
+ }
+
+ record RecordedEffect(
+ net.minecraft.core.BlockPos blockPos,
+ InsideBlockEffectType.Applier applier
+ ) implements Consumer<Entity> {
+
+ @Override
+ public void accept(final Entity entity) {
+ this.applier.affect(entity, blockPos);
+ }
+ }
+ // Paper end - track position inside effect was triggered on
}
}