mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-30 12:11:47 +01:00
Port 20w15a Villager AI optimizations
This commit is contained in:
parent
832687de70
commit
c096fe19fa
1 changed files with 198 additions and 0 deletions
|
@ -0,0 +1,198 @@
|
|||
From 167e72427fbd9d69884047a7fd62c3f0ca69fdf1 Mon Sep 17 00:00:00 2001
|
||||
From: Callahan <mr.callahhh@gmail.com>
|
||||
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 a1883eba6..c75581dd5 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<E extends EntityLiving> 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<? extends Sensor<? super E>> sensorType : collection1) {
|
||||
+ this.sensors.put(sensorType, sensorType.a());
|
||||
+ }
|
||||
+ for (final Sensor<? super E> 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<T>, Dynamic<T>> 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<T>, Dynamic<T>> 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<E extends EntityLiving> implements MinecraftSeri
|
||||
}
|
||||
|
||||
private <T, U> void a(MemoryModuleType<U> memorymoduletype, Dynamic<T> 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 <U> void removeMemory(MemoryModuleType<U> memorymoduletype) {
|
||||
@@ -113,13 +105,21 @@ public class BehaviorController<E extends EntityLiving> implements MinecraftSeri
|
||||
this.f = set;
|
||||
}
|
||||
|
||||
+ // Paper start - Port 20w15a pathfinder optimizations
|
||||
@Deprecated
|
||||
- public Stream<Behavior<? super E>> 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<Behavior<? super E>> d() {
|
||||
+ final java.util.List<Behavior<? super E>> behaviorList = (java.util.List<Behavior<? super E>>) new it.unimi.dsi.fastutil.objects.ObjectArrayList();
|
||||
+ for (final Map<Activity, Set<Behavior<? super E>>> map : this.c.values()) {
|
||||
+ for (final Set<Behavior<? super E>> set : map.values()) {
|
||||
+ for (final Behavior<? super E> behavior : set) {
|
||||
+ if (behavior.a() == Behavior.Status.RUNNING) {
|
||||
+ behaviorList.add(behavior);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ return behaviorList;
|
||||
+ // Paper end - Port 20w15a pathfinder optimizations
|
||||
}
|
||||
|
||||
public void a(Activity activity) {
|
||||
@@ -167,12 +167,14 @@ public class BehaviorController<E extends EntityLiving> implements MinecraftSeri
|
||||
|
||||
public BehaviorController<E> f() {
|
||||
BehaviorController<E> 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<MemoryModuleType<?>, 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;
|
||||
}
|
||||
|
||||
@@ -185,14 +187,14 @@ public class BehaviorController<E extends EntityLiving> implements MinecraftSeri
|
||||
public void b(WorldServer worldserver, E e0) {
|
||||
long i = e0.world.getTime();
|
||||
|
||||
- this.d().forEach((behavior) -> {
|
||||
+ for(Behavior<? super E> behavior : this.d()) { // Paper - Port 20w15a pathfinder optimizations
|
||||
behavior.e(worldserver, e0, i);
|
||||
- });
|
||||
+ }
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T a(DynamicOps<T> 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));
|
||||
@@ -209,33 +211,45 @@ public class BehaviorController<E extends EntityLiving> 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<Activity, Set<Behavior<? super E>>> map : this.c.values()) {
|
||||
+ for (final Map.Entry<Activity, Set<Behavior<? super E>>> entry : map.entrySet()) {
|
||||
+ final Activity activity = entry.getKey();
|
||||
+ if (this.g.contains(activity)) {
|
||||
+ final Set<Behavior<? super E>> set = entry.getValue();
|
||||
+ for (final Behavior<? super E> 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<? super E> 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<MemoryModuleType<?>, 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) {
|
||||
--
|
||||
2.25.1
|
||||
|
Loading…
Reference in a new issue