From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Callahan Date: Wed, 8 Apr 2020 18:00:17 -0500 Subject: [PATCH] Port 20w15a Villager AI optimizations - DROP 1.16 diff --git a/src/main/java/net/minecraft/server/BehaviorController.java b/src/main/java/net/minecraft/server/BehaviorController.java index 7c6e687707cdf32638eee41e549818a494cd45ab..396b64ea0fc8a04d9e0aac289033d3d82385b86e 100644 --- a/src/main/java/net/minecraft/server/BehaviorController.java +++ b/src/main/java/net/minecraft/server/BehaviorController.java @@ -38,30 +38,22 @@ public class BehaviorController implements MinecraftSeri this.g = Sets.newHashSet(); this.h = Activity.IDLE; this.i = -9999L; - collection.forEach((memorymoduletype) -> { - Optional optional = (Optional) this.memories.put(memorymoduletype, Optional.empty()); - }); - collection1.forEach((sensortype) -> { - Sensor sensor = (Sensor) this.sensors.put(sensortype, sensortype.a()); - }); - this.sensors.values().forEach((sensor) -> { - Iterator iterator = sensor.a().iterator(); - - while (iterator.hasNext()) { - MemoryModuleType memorymoduletype = (MemoryModuleType) iterator.next(); - - this.memories.put(memorymoduletype, Optional.empty()); + // Paper start - Port 20w15a pathfinder optimizations + for (final MemoryModuleType memoryModuleType : collection) { + this.memories.put(memoryModuleType, Optional.empty()); + } + for (final SensorType> sensorType : collection1) { + this.sensors.put(sensorType, sensorType.a()); + } + for (final Sensor sensor : this.sensors.values()) { + for (final MemoryModuleType memoryModuleType : sensor.a()) { + this.memories.put(memoryModuleType, Optional.empty()); } - - }); - Iterator iterator = dynamic.get("memories").asMap(Function.identity(), Function.identity()).entrySet().iterator(); - - while (iterator.hasNext()) { - Entry, Dynamic> entry = (Entry) iterator.next(); - - this.a((MemoryModuleType) IRegistry.MEMORY_MODULE_TYPE.get(new MinecraftKey(((Dynamic) entry.getKey()).asString(""))), (Dynamic) entry.getValue()); } - + for (final Map.Entry, Dynamic> entry : dynamic.get("memories").asMap(Function.identity(), Function.identity()).entrySet()) { + this.a((MemoryModuleType) IRegistry.MEMORY_MODULE_TYPE.get(new MinecraftKey((entry.getKey()).asString(""))), entry.getValue()); + } + // Paper end - Port 20w15a pathfinder optimizations } public boolean hasMemory(MemoryModuleType memorymoduletype) { @@ -69,7 +61,7 @@ public class BehaviorController implements MinecraftSeri } private void a(MemoryModuleType memorymoduletype, Dynamic dynamic) { - this.setMemory(memorymoduletype, ((Function) memorymoduletype.getSerializer().orElseThrow(RuntimeException::new)).apply(dynamic)); + this.setMemory(memorymoduletype, (memorymoduletype.getSerializer().orElseThrow(RuntimeException::new)).apply(dynamic)); // Paper - decompile fix } public void removeMemory(MemoryModuleType memorymoduletype) { @@ -113,13 +105,21 @@ public class BehaviorController implements MinecraftSeri this.f = set; } + // Paper start - Port 20w15a pathfinder optimizations @Deprecated - public Stream> d() { - return this.c.values().stream().flatMap((map) -> { - return map.values().stream(); - }).flatMap(Collection::stream).filter((behavior) -> { - return behavior.a() == Behavior.Status.RUNNING; - }); + public java.util.List> d() { + final java.util.List> behaviorList = (java.util.List>) new it.unimi.dsi.fastutil.objects.ObjectArrayList(); + for (final Map>> map : this.c.values()) { + for (final Set> set : map.values()) { + for (final Behavior behavior : set) { + if (behavior.a() == Behavior.Status.RUNNING) { + behaviorList.add(behavior); + } + } + } + } + return behaviorList; + // Paper end - Port 20w15a pathfinder optimizations } public void a(Activity activity) { @@ -168,12 +168,14 @@ public class BehaviorController implements MinecraftSeri public BehaviorController f() { BehaviorController behaviorcontroller = new BehaviorController<>(this.memories.keySet(), this.sensors.keySet(), new Dynamic(DynamicOpsNBT.a, new NBTTagCompound())); - - this.memories.forEach((memorymoduletype, optional) -> { - optional.ifPresent((object) -> { - Optional optional1 = (Optional) behaviorcontroller.memories.put(memorymoduletype, Optional.of(object)); - }); - }); + // Paper start - Port 20w15a pathfinder optimizations + for (final Entry, Optional> entry : this.memories.entrySet()) { + final MemoryModuleType memoryModuleType = entry.getKey(); + if (entry.getValue().isPresent()) { + behaviorcontroller.memories.put(memoryModuleType, entry.getValue()); + } + } + // Paper end - Port 20w15a pathfinder optimizations return behaviorcontroller; } @@ -186,14 +188,14 @@ public class BehaviorController implements MinecraftSeri public void b(WorldServer worldserver, E e0) { long i = e0.world.getTime(); - this.d().forEach((behavior) -> { + for(Behavior behavior : this.d()) { // Paper - Port 20w15a pathfinder optimizations behavior.e(worldserver, e0, i); - }); + } } @Override public T a(DynamicOps dynamicops) { - T t0 = dynamicops.createMap((Map) this.memories.entrySet().stream().filter((entry) -> { + T t0 = dynamicops.createMap(this.memories.entrySet().stream().filter((entry) -> { // Paper - decompile fix return ((MemoryModuleType) entry.getKey()).getSerializer().isPresent() && ((Optional) entry.getValue()).isPresent(); }).map((entry) -> { return Pair.of(dynamicops.createString(IRegistry.MEMORY_MODULE_TYPE.getKey(entry.getKey()).toString()), ((MinecraftSerializable) ((Optional) entry.getValue()).get()).a(dynamicops)); @@ -210,33 +212,45 @@ public class BehaviorController implements MinecraftSeri private void d(WorldServer worldserver, E e0) { long i = worldserver.getTime(); - - this.c.values().stream().flatMap((map) -> { - return map.entrySet().stream(); - }).filter((entry) -> { - return this.g.contains(entry.getKey()); - }).map(Entry::getValue).flatMap(Collection::stream).filter((behavior) -> { - return behavior.a() == Behavior.Status.STOPPED; - }).forEach((behavior) -> { - behavior.b(worldserver, e0, i); - }); + // Paper start - Port 20w15a pathfinder optimizations + for (final Map>> map : this.c.values()) { + for (final Map.Entry>> entry : map.entrySet()) { + final Activity activity = entry.getKey(); + if (this.g.contains(activity)) { + final Set> set = entry.getValue(); + for (final Behavior behavior : set) { + if (behavior.a() == Behavior.Status.STOPPED) { + behavior.b(worldserver, e0, i); + } + } + } + } + } + // Paper end - Port 20w15a pathfinder optimizations } private void e(WorldServer worldserver, E e0) { long i = worldserver.getTime(); - this.d().forEach((behavior) -> { + for (final Behavior behavior : this.d()) { // Paper - Port 20w15a pathfinder optimizations behavior.c(worldserver, e0, i); - }); + } } private boolean d(Activity activity) { - return ((Set) this.e.get(activity)).stream().allMatch((pair) -> { - MemoryModuleType memorymoduletype = (MemoryModuleType) pair.getFirst(); - MemoryStatus memorystatus = (MemoryStatus) pair.getSecond(); - - return this.a(memorymoduletype, memorystatus); - }); + // Paper start - Port 20w15a pathfinder optimizations + if (!this.e.containsKey(activity)) { + return false; + } + for (final Pair, MemoryStatus> pair : this.e.get(activity)) { + MemoryModuleType memorymoduletype = pair.getFirst(); + MemoryStatus memorystatus = pair.getSecond(); + if (!this.a(memorymoduletype, memorystatus)) { + return false; + } + } + return true; + // Paper end - Port 20w15a pathfinder optimizations } private boolean a(Object object) {