Yatopia/patches/server/0029-Optimize-BehaviorController.patch
Ivan Pekov 5620825b39
Upstream update & more
Dropped hopper optimizations patch by tr7zw. Sorry buddy, but the patch was making more
problems than it was solving. By no means this is an unneded patch, we will reimplement
it in the future the way it should've been implemented. Fixes #148
2020-08-26 09:17:38 +03:00

110 lines
6.5 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MrIvanPlays <ivan@mrivanplays.com>
Date: Sun, 9 Aug 2020 22:27:52 +0300
Subject: [PATCH] Optimize BehaviorController
diff --git a/src/main/java/net/minecraft/server/BehaviorController.java b/src/main/java/net/minecraft/server/BehaviorController.java
index ae2905b403a63396d9cdc61444586ea5548f2974..4ad7f42158bb945088a4d1c574c63dd6c15fa53c 100644
--- a/src/main/java/net/minecraft/server/BehaviorController.java
+++ b/src/main/java/net/minecraft/server/BehaviorController.java
@@ -53,13 +53,16 @@ public class BehaviorController<E extends EntityLiving> {
mutableobject.setValue((new MapCodec<BehaviorController<E>>() {
public <T> Stream<T> keys(DynamicOps<T> dynamicops) {
- return collection.stream().flatMap((memorymoduletype) -> {
- return SystemUtils.a(memorymoduletype.getSerializer().map((codec) -> {
- return IRegistry.MEMORY_MODULE_TYPE.getKey(memorymoduletype);
- }));
- }).map((minecraftkey) -> {
- return dynamicops.createString(minecraftkey.toString());
- });
+ // Yatopia start
+ // about previous impl: WHY ? WHO DID THIS TO YOU?
+ Collection<T> candidates = new java.util.ArrayList<>();
+ for (MemoryModuleType<?> moduleType : collection) {
+ moduleType.getSerializer()
+ .map(c -> IRegistry.MEMORY_MODULE_TYPE.getKey(moduleType))
+ .ifPresent(key -> candidates.add(dynamicops.createString(key.toString())));
+ }
+ return candidates.stream();
+ // Yatopia end
}
public <T> DataResult<BehaviorController<E>> decode(DynamicOps<T> dynamicops, MapLike<T> maplike) {
@@ -71,23 +74,17 @@ public class BehaviorController<E extends EntityLiving> {
return this.a(memorymoduletype, dynamicops, pair.getSecond());
});
- mutableobject1.setValue(((DataResult) mutableobject1.getValue()).apply2(Builder::add, dataresult1));
+ mutableobject1.setValue((mutableobject1.getValue()).apply2(Builder::add, dataresult1)); // Yatopia - decompile fix
});
- DataResult dataresult = (DataResult) mutableobject1.getValue();
- Logger logger = BehaviorController.LOGGER;
+ DataResult<ImmutableList.Builder<BehaviorController.a<?>>> dataresult = mutableobject1.getValue(); // Yatopia - decompile fix
- logger.getClass();
- ImmutableList<BehaviorController.a<?>> immutablelist = (ImmutableList) dataresult.resultOrPartial(logger::error).map(Builder::build).orElseGet(ImmutableList::of);
- Collection collection2 = collection;
- Collection collection3 = collection1;
- MutableObject mutableobject2 = mutableobject;
+ ImmutableList<BehaviorController.a<?>> immutablelist = dataresult.resultOrPartial(BehaviorController.LOGGER::error).map(Builder::build).orElseGet(ImmutableList::of); // Yatopia - decompile fix
- mutableobject.getClass();
- return DataResult.success(new BehaviorController<>(collection2, collection3, immutablelist, mutableobject2::getValue));
+ return DataResult.success(new BehaviorController<>(collection, collection1, immutablelist, mutableobject::getValue)); // Yatopia - decompile fix
}
private <T, U> DataResult<BehaviorController.a<U>> a(MemoryModuleType<U> memorymoduletype, DynamicOps<T> dynamicops, T t0) {
- return ((DataResult) memorymoduletype.getSerializer().map(DataResult::success).orElseGet(() -> {
+ return (memorymoduletype.getSerializer().map(DataResult::success).orElseGet(() -> { // Yatopia - decompile fix
return DataResult.error("No codec for memory: " + memorymoduletype);
})).flatMap((codec) -> {
return codec.parse(dynamicops, t0);
@@ -97,9 +94,9 @@ public class BehaviorController<E extends EntityLiving> {
}
public <T> RecordBuilder<T> encode(BehaviorController<E> behaviorcontroller, DynamicOps<T> dynamicops, RecordBuilder<T> recordbuilder) {
- behaviorcontroller.j().forEach((behaviorcontroller_a) -> {
+ for (BehaviorController.a<?> behaviorcontroller_a : behaviorcontroller.memoriesList()) { // Yatopia
behaviorcontroller_a.a(dynamicops, recordbuilder);
- });
+ } // Yatopia
return recordbuilder;
}
}).fieldOf("memories").codec());
@@ -158,6 +155,15 @@ public class BehaviorController<E extends EntityLiving> {
return ((Codec) this.b.get()).encodeStart(dynamicops, this);
}
+ // Yatopia start
+ private List<BehaviorController.a<?>> memoriesList() {
+ List<BehaviorController.a<?>> ret = new java.util.ArrayList<>();
+ for (Map.Entry<MemoryModuleType<?>, Optional<? extends ExpirableMemory<?>>> entry : memories.entrySet()) {
+ ret.add(BehaviorController.a.b(entry.getKey(), (Optional) entry.getValue()));
+ }
+ return ret;
+ }
+ // Yatopia end
private Stream<BehaviorController.a<?>> j() {
return this.memories.entrySet().stream().map((entry) -> {
return BehaviorController.a.b((MemoryModuleType) entry.getKey(), (Optional) entry.getValue());
@@ -196,7 +202,7 @@ public class BehaviorController<E extends EntityLiving> {
}
public <U> Optional<U> getMemory(MemoryModuleType<U> memorymoduletype) {
- return ((Optional) this.memories.get(memorymoduletype)).map(ExpirableMemory::c);
+ return (Optional<U>) this.memories.get(memorymoduletype).map(ExpirableMemory::c); // Yatopia - Decompile fix
}
public <U> boolean b(MemoryModuleType<U> memorymoduletype, U u0) {
@@ -535,7 +541,7 @@ public class BehaviorController<E extends EntityLiving> {
private final MemoryModuleType<U> a;
private final Optional<? extends ExpirableMemory<U>> b;
- private static <U> BehaviorController.a<U> b(MemoryModuleType<U> memorymoduletype, Optional<? extends ExpirableMemory<?>> optional) {
+ private static <U> BehaviorController.a<U> b(MemoryModuleType<U> memorymoduletype, Optional<? extends ExpirableMemory<U>> optional) { // Yatopia - decompile fix
return new BehaviorController.a<>(memorymoduletype, optional);
}