From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> Date: Sat, 26 Oct 2024 00:06:04 +0800 Subject: [PATCH] Optimize Brain diff --git a/src/main/java/net/minecraft/world/entity/ai/Brain.java b/src/main/java/net/minecraft/world/entity/ai/Brain.java index afbb027021acfbe25d534a84f1750e420bbde6e0..2e0859cd62fd064d43aaf3ac24269d159a6bd49e 100644 --- a/src/main/java/net/minecraft/world/entity/ai/Brain.java +++ b/src/main/java/net/minecraft/world/entity/ai/Brain.java @@ -45,14 +45,18 @@ public class Brain { static final Logger LOGGER = LogUtils.getLogger(); private final Supplier>> codec; private static final int SCHEDULE_UPDATE_DELAY = 20; - private final Map, Optional>> memories = Maps.newHashMap(); - private final Map>, Sensor> sensors = Maps.newLinkedHashMap(); - private final Map>>> availableBehaviorsByPriority = Maps.newTreeMap(); + // Leaf start - Optimize Brain + private final Map, Optional>> memories = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(); + private final Map>, Sensor> sensors = new it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap<>(); + private final Map>>> availableBehaviorsByPriority = new it.unimi.dsi.fastutil.objects.Object2ObjectRBTreeMap<>(); + // Leaf end - Optimize Brain private Schedule schedule = Schedule.EMPTY; - private final Map, MemoryStatus>>> activityRequirements = Maps.newHashMap(); - private final Map>> activityMemoriesToEraseWhenStopped = Maps.newHashMap(); - private Set coreActivities = Sets.newHashSet(); - private final Set activeActivities = Sets.newHashSet(); + // Leaf start - Optimize Brain + private final Map, MemoryStatus>>> activityRequirements = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(); + private final Map>> activityMemoriesToEraseWhenStopped = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(); + private Set coreActivities = new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(); + private final Set activeActivities = new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(); + // Leaf end - Optimize Brain private Activity defaultActivity = Activity.IDLE; private long lastScheduleUpdate = -9999L; @@ -69,17 +73,21 @@ public class Brain { mutableObject.setValue( (new MapCodec>() { public Stream keys(DynamicOps dynamicOps) { - return memoryModules.stream() - .flatMap( - memoryType -> memoryType.getCodec() - .map(codec -> BuiltInRegistries.MEMORY_MODULE_TYPE.getKey((MemoryModuleType)memoryType)) - .stream() - ) - .map(id -> dynamicOps.createString(id.toString())); + // Leaf start - Optimize Brain + List results = new java.util.ArrayList<>(); + for (MemoryModuleType memoryType : memoryModules) { + Optional codecOptional = memoryType.getCodec(); + if (codecOptional.isPresent()) { + net.minecraft.resources.ResourceLocation id = BuiltInRegistries.MEMORY_MODULE_TYPE.getKey(memoryType); + results.add(id.toString()); + } + } + return results.stream().map(dynamicOps::createString); + // Leaf end - Optimize Brain } public DataResult> decode(DynamicOps dynamicOps, MapLike mapLike) { - MutableObject>>> mutableObject = new MutableObject<>( + MutableObject>>> mutableObject2 = new MutableObject<>( // Leaf - Decompile fix DataResult.success(ImmutableList.builder()) ); mapLike.entries() @@ -91,10 +99,10 @@ public class Brain { DataResult> dataResult2 = dataResult.flatMap( memoryType -> this.captureRead((MemoryModuleType)memoryType, dynamicOps, (T)pair.getSecond()) ); - mutableObject.setValue(mutableObject.getValue().apply2(Builder::add, dataResult2)); + mutableObject2.setValue(mutableObject2.getValue().apply2(Builder::add, dataResult2)); // Leaf - Decompile fix } ); - ImmutableList> immutableList = mutableObject.getValue() + ImmutableList> immutableList = mutableObject2.getValue() // Leaf - Decompile fix .resultOrPartial(Brain.LOGGER::error) .map(Builder::build) .orElseGet(ImmutableList::of); @@ -152,7 +160,13 @@ public class Brain { } Stream> memories() { - return this.memories.entrySet().stream().map(entry -> Brain.MemoryValue.createUnchecked(entry.getKey(), entry.getValue())); + // Leaf start - Optimize Brain + List> result = new java.util.ArrayList<>(); + for (Entry, Optional>> entry : this.memories.entrySet()) { + result.add(Brain.MemoryValue.createUnchecked(entry.getKey(), entry.getValue())); + } + return result.stream(); + // Leaf end - Optimize Brain } public boolean hasMemoryValue(MemoryModuleType type) { @@ -194,14 +208,14 @@ public class Brain { if (optional == null) { throw new IllegalStateException("Unregistered memory fetched: " + type); } else { - return optional.map(ExpirableValue::getValue); + return (Optional) optional.map(ExpirableValue::getValue); // Leaf - Decompile fix } } @Nullable public Optional getMemoryInternal(MemoryModuleType type) { Optional> optional = this.memories.get(type); - return optional == null ? null : optional.map(ExpirableValue::getValue); + return optional == null ? null : (Optional) optional.map(ExpirableValue::getValue); // Leaf - Decompile fix } public long getTimeUntilExpiry(MemoryModuleType type) {