Skip to content

Commit d508732

Browse files
committed
Fix dummy brain mixin
1 parent e05369d commit d508732

3 files changed

Lines changed: 25 additions & 26 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package net.caffeinemc.mods.lithium.common.ai.brain;
2+
3+
public interface BrainExtended {
4+
void lithium$pretendAllMemoryTypesRegistered();
5+
}
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.caffeinemc.mods.lithium.common.client;
22

3+
import net.caffeinemc.mods.lithium.common.ai.brain.BrainExtended;
34
import net.minecraft.world.entity.ai.Brain;
45
import org.spongepowered.asm.mixin.Unique;
56

@@ -8,5 +9,11 @@
89
public class SharedFields {
910
public static final AtomicInteger MAXIMUM_BIOME_PARTICLE_CHANCE = new AtomicInteger(Float.floatToIntBits(0.0F)); //Using atomic integer as replacement for atomic float
1011
@Unique
11-
public static final Brain<?> DUMMY_BRAIN = new Brain<>();
12+
public static final Brain<?> DUMMY_BRAIN;
13+
14+
static {
15+
var brain = new Brain<>();
16+
((BrainExtended) brain).lithium$pretendAllMemoryTypesRegistered();
17+
DUMMY_BRAIN = brain;
18+
}
1219
}

common/src/main/java/net/caffeinemc/mods/lithium/mixin/experimental/client_tick/entity/unused_brain/BrainMixin.java

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,37 @@
11
package net.caffeinemc.mods.lithium.mixin.experimental.client_tick.entity.unused_brain;
22

3-
import com.google.common.collect.ImmutableList;
43
import it.unimi.dsi.fastutil.objects.AbstractReference2ObjectFunction;
54
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;
6-
import net.caffeinemc.mods.lithium.common.util.collections.DummyList;
5+
import net.caffeinemc.mods.lithium.common.ai.brain.BrainExtended;
76
import net.minecraft.world.entity.ai.Brain;
87
import net.minecraft.world.entity.ai.memory.ExpirableValue;
98
import net.minecraft.world.entity.ai.memory.MemoryModuleType;
109
import org.spongepowered.asm.mixin.Final;
1110
import org.spongepowered.asm.mixin.Mixin;
1211
import org.spongepowered.asm.mixin.Mutable;
1312
import org.spongepowered.asm.mixin.Shadow;
14-
import org.spongepowered.asm.mixin.injection.At;
15-
import org.spongepowered.asm.mixin.injection.Inject;
16-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1713

18-
import java.util.Collection;
1914
import java.util.Map;
2015
import java.util.Optional;
21-
import java.util.function.Supplier;
2216

23-
@Mixin(value = Brain.class, priority = 1010)
24-
//Apply after collections.brain.BrainMixin, which replaces the brain collections, deleting the default return value
25-
public class BrainMixin {
17+
@Mixin(value = Brain.class)
18+
public class BrainMixin implements BrainExtended {
2619

2720
@Mutable
2821
@Shadow
2922
@Final
3023
private Map<MemoryModuleType<?>, Optional<? extends ExpirableValue<?>>> memories;
3124

3225

33-
@Inject(
34-
method = "<init>(Ljava/util/Collection;Ljava/util/Collection;Lcom/google/common/collect/ImmutableList;Ljava/util/function/Supplier;)V",
35-
at = @At("RETURN")
36-
)
37-
private void pretendMemoryTypeRegisteredInDummyBrain(Collection<?> memories, Collection<?> sensors, ImmutableList<?> memoryEntries, Supplier<?> codecSupplier, CallbackInfo ci) {
38-
if (memories instanceof DummyList<?>) {
39-
if (this.memories instanceof AbstractReference2ObjectFunction<?, ?> memoryCollection) {
40-
//noinspection unchecked
41-
((AbstractReference2ObjectFunction<MemoryModuleType<?>, Optional<? extends ExpirableValue<?>>>) memoryCollection).defaultReturnValue(Optional.empty());
42-
} else {
43-
Reference2ObjectOpenHashMap<MemoryModuleType<?>, Optional<? extends ExpirableValue<?>>> memoryCollection = new Reference2ObjectOpenHashMap<>(this.memories);
44-
memoryCollection.defaultReturnValue(Optional.empty());
45-
this.memories = memoryCollection;
46-
}
47-
26+
@Override
27+
public void lithium$pretendAllMemoryTypesRegistered() {
28+
if (this.memories instanceof AbstractReference2ObjectFunction<?, ?> memoryCollection) {
29+
//noinspection unchecked
30+
((AbstractReference2ObjectFunction<MemoryModuleType<?>, Optional<? extends ExpirableValue<?>>>) memoryCollection).defaultReturnValue(Optional.empty());
31+
} else {
32+
Reference2ObjectOpenHashMap<MemoryModuleType<?>, Optional<? extends ExpirableValue<?>>> memoryCollection = new Reference2ObjectOpenHashMap<>(this.memories);
33+
memoryCollection.defaultReturnValue(Optional.empty());
34+
this.memories = memoryCollection;
4835
}
4936
}
5037

0 commit comments

Comments
 (0)