Skip to content

Commit 29c1c12

Browse files
committed
Add back sentinel filtering removed in previous commit
1 parent 2886705 commit 29c1c12

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

  • common/src/main/java/net/caffeinemc/mods/lithium/mixin/ai/useless_behaviors

common/src/main/java/net/caffeinemc/mods/lithium/mixin/ai/useless_behaviors/BrainMixin.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,36 @@
55
import com.google.common.collect.UnmodifiableIterator;
66
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
77
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
8+
import com.mojang.datafixers.util.Pair;
9+
import net.caffeinemc.mods.lithium.common.ai.useless_behaviors.LithiumEmptyBehavior;
810
import net.minecraft.world.entity.LivingEntity;
911
import net.minecraft.world.entity.ai.Brain;
12+
import net.minecraft.world.entity.ai.behavior.BehaviorControl;
1013
import org.jspecify.annotations.Nullable;
1114
import org.spongepowered.asm.mixin.Mixin;
1215
import org.spongepowered.asm.mixin.injection.At;
1316

1417
import java.util.Iterator;
1518

1619
@Mixin(Brain.class)
17-
public abstract class BrainMixin<E extends LivingEntity> {
20+
public abstract class BrainMixin<T extends LivingEntity> {
1821

1922
/**
2023
* @author jcw780, 2No2Name
2124
* @reason Prevent EMPTY_BEHAVIOR_SENTINEL from being added - those are what useless behaviors are replaced with.
2225
*/
2326
@WrapOperation(method = "addActivityAndRemoveMemoriesWhenStopped",
2427
at = @At(value = "INVOKE", target = "Lcom/google/common/collect/ImmutableList;iterator()Lcom/google/common/collect/UnmodifiableIterator;"))
25-
private UnmodifiableIterator<E> filterSentinels(ImmutableList<E> instance, Operation<UnmodifiableIterator<E>> original) {
28+
private <E extends Pair<Integer, ? extends BehaviorControl<? super T>>> UnmodifiableIterator<E> filterSentinels(ImmutableList<E> instance, Operation<UnmodifiableIterator<E>> original) {
2629
Iterator<E> wrapped = original.call(instance);
2730
return new AbstractIterator<>() {
2831
@Override
2932
protected @Nullable E computeNext() {
30-
if (wrapped.hasNext()) {
31-
return wrapped.next();
33+
while (wrapped.hasNext()) {
34+
E next = wrapped.next();
35+
if (next.getSecond() != LithiumEmptyBehavior.EMPTY_BEHAVIOR_SENTINEL) {
36+
return next;
37+
}
3238
}
3339
return this.endOfData();
3440
}

0 commit comments

Comments
 (0)