Yatopia/patches/server/0029-Optimize-BehaviorController.patch
Ivan Pekov d065d41c0e
Drop this unsafe shit
Apparently caused issues we werent aware of.
Unfortunately there's no way to improve it without blocking the main thread.
2020-10-02 17:00:13 +03:00

110 lines
6.6 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..6b8da8303a19bbd65a4b38c664c49a6a8ac646a4 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 net.yatopia.server.list.GlueList<>();
+ 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 net.yatopia.server.list.GlueList<>();
+ 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);
}