Yatopia/patches/server/0047-Optimize-Villagers.patch
ishland 0ee1f14d69 Updated Upstream and Sidestream(s) (Tuinity/EMC/Purpur) (FIRST 1.16.4)
Upstream/An Sidestream has released updates that appears to apply and compile correctly
This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing.

Tuinity Changes:
d7f2b6e Updated Upstream (Paper)
0850468 Properly ignite entities that stand in fire
4ff2d15 More cleanup to delay chunk unloads
52f4d08 Cleanup post dev branch merge
f2eef4a Fixup dev branch patches and store reverted patches in revert folder
85aba13 Merge branch 'dev/some-opts'
c3a9e41 Remove deprecated function usage in github actions (#200)
dde7028 Merge branch 'master' into dev/some-opts
083e162 Updated Upstream (Paper) - Update to 1.16.4
576e2cc Rate limit incoming packets
7f251e0 Updated Upstream (Paper)
7d45836 Updated Upstream (Paper)
cff9ec0 Updated Upstream (Paper)
c3d5d24 Merge branch 'master' of https://github.com/Spottedleaf/Tuinity into ver/1.16.3
c12d582 Merge branch 'master' into dev/some-opts
cbffdcc Do not mark entities in unloaded chunks as being in blocks
988e550 Updated Upstream (Paper)
84aecdb Merge https://github.com/Spottedleaf/Tuinity into ver/1.16.3
f7b8e25 Split dev branch
3200930 Merge branch 'master' into dev/some-opts
82e5dfb Updated Upstream (Paper)
d41103d Updated Upstream (Paper)
1d73f6c Updated Upstream (Paper)
8ba1bab Updated Upstream (Paper)
ac6b72e Updated Upstream (Paper)
8d982c4 Updated Upstream (Paper)
2c7bad9 Merge branch 'master' of https://github.com/Spottedleaf/Tuinity into ver/1.16.3
903f580 Merge remote-tracking branch 'origin/dev/some-opts' into dev/some-opts
0179ea8 Re-Add region manager and notify patch
6886867 Merge branch 'master' into dev/some-opts
fb292c1 Updated Upstream (Paper)
442890b Fix decompression with Velocity natives (#191)
57fed71 Fix decompression with Velocity natives
102d60b Rebuild patches
968512b Add Velocity natives for encryption and compression (#188)
e2dcdd1 Correct return value for ChunkCache#getCubes
4a99f3e Updated Upstream (Paper)
f5d537e Merge https://github.com/Spottedleaf/Tuinity into ver/1.16.3
784b838 Some fixes
be0b91f Merge branch 'master' into dev/some-opts
2cb36ca Optimise non-flush packet sending
be68938 Hey git, may I know what happened here?
1cac0a2 Merge branch 'master' of https://github.com/Spottedleaf/Tuinity into ver/1.16.3
d72e062 Merge branch 'master' into dev/some-opts
76777f0 Updated Upstream (Paper)
6465aba Merge branch 'master' of https://github.com/Spottedleaf/Tuinity into ver/1.16.3
d82174a Merge branch 'master' into dev/some-opts
460581d Fix getClosestEntity not working
d39cda0 Updated Upstream (Paper)
2110847 Rewrite getClosestEntity
3e45700 Do not return complex parts for entity by class lookup
c9cfdba Updated Upstream (Paper)
5994cb0 Updated Upstream (Paper)
7dfe18c Merge https://github.com/Spottedleaf/Tuinity into ver/1.16.3
363973d Merge branch 'master' into dev/some-opts
1c05858 Updated Upstream (Paper)
adaafb4 Git merge doesn't update submodules
ab71ded Merge branch 'master' of https://github.com/Spottedleaf/Tuinity into ver/1.16.3
54db338 Merge branch 'master' into dev/some-opts
483289c Updated Upstream (Paper)
e36359e Merge branch 'master' of https://github.com/Spottedleaf/Tuinity into ver/1.16.2
ef8cd34 Fix NPE
b770af9 Merge branch 'master' into dev/some-opts
d479e12 Merge https://github.com/Spottedleaf/Tuinity into ver/1.16.2
a1b90f8 Merge branch 'master' into dev/some-opts
30c5ca5 Merge branch 'master' into dev/some-opts
e59b60b Updated Upstream (Paper)
09f62a7 Rebuild patches
b041d11 Merge branch 'master' of https://github.com/Spottedleaf/Tuinity into ver/1.16.2
27fca2d Merge branch 'master' into dev/some-opts
a218f5d Updated Upstream (Paper)
f7c5428 Updated Upstream (Paper)
a17dc2c Attempt to fix incorrect nearest village distance tracker updating
8830cef Remove streams for poi searching in some zombie pathfinding
89276ac Fix villagers aggressively looking at people
db64f14 Make sure to despawn entities if they are outside the player general area range
ba0bfda Updated Upstream (Paper)
200f825 Actually unload POI data
3dc7b9e Updated Upstream (Paper)
30f6ca0 Merge branch 'master' of https://github.com/Spottedleaf/Tuinity into 1.16.2tmp
3b008f5 Optimisations
c628aa4 Updated Upstream (Paper)
1ed41fc Updated Upstream (Paper)
193d9bf Updated Upstream (Paper)
f2ac649 Updated Upstream (Paper)
a63298f Upstream
a12e1f6 Merge branch 'ver/1.16.2' of https://github.com/Spottedleaf/Tuinity into 1.16.2tmp
9eed723 Rebuild patches
d03dbcc Updated paper
c1002c5 Merge branch 'ver/1.16.2' of https://github.com/Spottedleaf/Tuinity into 1.16.2tmp
27084eb Updated paper
bfb0ded Merge branch 'ver/1.16.2' of https://github.com/Spottedleaf/Tuinity into 1.16.2tmp
763aa6c Updated Upstream (Paper)
49898d0 Merge branch 'ver/1.16.2' of https://github.com/Spottedleaf/Tuinity into 1.16.2tmp
199edf5 Merge branch 'ver/1.16.2' of https://github.com/Spottedleaf/Tuinity into 1.16.2tmp
78bfcfb Update everything
bbbe82e change upstream

EMC Changes:
4da58340 clear more entity tasks with reloads
2f3d567f Improve temp meta reloading
efd7ea89 Updated Paper
25426b02 Updated Paper
35099319 Fix blockbreaknaturally event not always having the loc stored

Purpur Changes:
306e9ac Add missing repos for deps
67be68c Updated Upstream (Tuinity)
cf3e3e7 Fix last patch :3
a43bb36 Arrows should not reset despawn counter
f0b8bd7 Updated Upstream (Paper)
f15d3f0 Updated Upstream (Tuinity)
39ce110 Fix missed obf method rename in Tuinity patches
bae5baa Updated Upstream (Paper)
5569d02 Updated Upstream (Paper)
72c4c5e Updated Upstream (Paper)
7fa8baf Update readme
03654a6 Update to 1.16.4 ^_^
0fa478d Updated Upstream (Paper & Tuinity)
3fec5da Rebuild patches
2f7a0a0 Fix client lag on advancement loading
3f325b8 Fix #86 Move pathfinders into NMS package to satisfy Paper's AI API
7cfd3d7 Updated Upstream (Paper)
cc6c167 Updated Upstream (Paper)
2020-11-07 15:03:31 +08:00

125 lines
6.5 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Ivan Pekov <ivan@mrivanplays.com>
Date: Sat, 12 Sep 2020 19:17:05 +0300
Subject: [PATCH] Optimize Villagers
These changes aim to fix the following:
- Villagers trying to push farther POIs (Points Of Interest)
- Villagers ignoring doors most of the times
- Villagers pushing POIs (Points Of Interest) to unloaded chunks
The following has been done to fix the mentioned problems:
- Replaced stream off BehaviorFindPosition
- Made sure that chunks are loaded for the POIs (Points Of Interest) that are gonna be tried.
- Added a profession cache, which followed by a stream removal.
diff --git a/src/main/java/net/minecraft/server/BehaviorFindPosition.java b/src/main/java/net/minecraft/server/BehaviorFindPosition.java
index 8d445e9c0875db6cf45e4d8bcfce7cd3d5094d94..4afe59084b85f466c8fb2fac2ac77e5097dcd0f0 100644
--- a/src/main/java/net/minecraft/server/BehaviorFindPosition.java
+++ b/src/main/java/net/minecraft/server/BehaviorFindPosition.java
@@ -48,7 +48,7 @@ public class BehaviorFindPosition extends Behavior<EntityCreature> {
if (this.d && entitycreature.isBaby()) {
return false;
} else if (this.f == 0L) {
- this.f = entitycreature.world.getTime() + (long) worldserver.random.nextInt(20);
+ this.f = entitycreature.world.getTime() + (long) java.util.concurrent.ThreadLocalRandom.current().nextInt(20); // Yatopia
return false;
} else {
return worldserver.getTime() >= this.f;
@@ -277,7 +277,7 @@ public class BehaviorFindPosition extends Behavior<EntityCreature> {
// Tuinity - remove streams entirely for poi search
protected void a(WorldServer worldserver, EntityCreature entitycreature, long i) {
- this.f = i + 20L + (long) worldserver.getRandom().nextInt(20);
+ this.f = i + 20L + (long) java.util.concurrent.ThreadLocalRandom.current().nextInt(20); // Yatopia
VillagePlace villageplace = worldserver.y();
this.g.long2ObjectEntrySet().removeIf((entry) -> {
@@ -287,12 +287,20 @@ public class BehaviorFindPosition extends Behavior<EntityCreature> {
BehaviorFindPosition.a behaviorfindposition_a = (BehaviorFindPosition.a) this.g.get(blockposition.asLong());
if (behaviorfindposition_a == null) {
- return true;
+ return worldserver.getChunkIfLoaded(blockposition.getX() >> 4, blockposition.getZ() >> 4) != null; // Yatopia
} else if (!behaviorfindposition_a.c(i)) {
return false;
} else {
- behaviorfindposition_a.a(i);
- return true;
+ // Yatopia start - make sure chunks are loaded
+ int chunkX = blockposition.getX() >> 4;
+ int chunkZ = blockposition.getZ() >> 4;
+ if (worldserver.getChunkIfLoaded(chunkX, chunkZ) != null) {
+ behaviorfindposition_a.a(i);
+ return true;
+ } else {
+ return false;
+ }
+ // Yatopia end
}
};
Set<BlockPosition> set = findNearestPoi(villageplace, this.b.c(), predicate, entitycreature.getChunkCoordinates(), 48, VillagePlace.Occupancy.HAS_SPACE, 5); // Tuinity - remove streams entirely for poi search
@@ -319,7 +327,7 @@ public class BehaviorFindPosition extends Behavior<EntityCreature> {
BlockPosition blockposition1 = (BlockPosition) iterator.next();
this.g.computeIfAbsent(blockposition1.asLong(), (j) -> {
- return new BehaviorFindPosition.a(entitycreature.world.random, i);
+ return new BehaviorFindPosition.a(java.util.concurrent.ThreadLocalRandom.current(), i); // Yatopia
});
}
}
diff --git a/src/main/java/net/minecraft/server/VillagePlaceType.java b/src/main/java/net/minecraft/server/VillagePlaceType.java
index a5718af9b614ae505067131f04ebb490617d6aa4..2ea0cfad4b35264cd3b70b930dd28de58c77d0c0 100644
--- a/src/main/java/net/minecraft/server/VillagePlaceType.java
+++ b/src/main/java/net/minecraft/server/VillagePlaceType.java
@@ -14,11 +14,20 @@ import java.util.stream.Collectors;
public class VillagePlaceType {
+ static Set<VillagePlaceType> professionCache; // Yatopia
private static final Supplier<Set<VillagePlaceType>> y = Suppliers.memoize(() -> {
return (Set) IRegistry.VILLAGER_PROFESSION.g().map(VillagerProfession::b).collect(Collectors.toSet());
});
public static final Predicate<VillagePlaceType> a = (villageplacetype) -> {
- return ((Set) VillagePlaceType.y.get()).contains(villageplacetype);
+ // Yatopia start
+ if (professionCache == null) {
+ professionCache = new java.util.HashSet<>();
+ for (VillagerProfession profession : IRegistry.VILLAGER_PROFESSION) {
+ professionCache.add(profession.getPlaceType());
+ }
+ }
+ return professionCache.contains(villageplacetype);
+ // Yatopia end
};
public static final Predicate<VillagePlaceType> b = (villageplacetype) -> {
return true;
@@ -83,6 +92,7 @@ public class VillagePlaceType {
return this.D;
}
+ public final Predicate<VillagePlaceType> getCompletionCondition() { return c(); } // Yatopia - OBFHELPER
public Predicate<VillagePlaceType> c() {
return this.E;
}
diff --git a/src/main/java/net/minecraft/server/VillagerProfession.java b/src/main/java/net/minecraft/server/VillagerProfession.java
index 3c60da7ac6faebe9d964e893974e42613c59b4c1..1b012914cb3fcbc4bb456195ade96668b6742cfd 100644
--- a/src/main/java/net/minecraft/server/VillagerProfession.java
+++ b/src/main/java/net/minecraft/server/VillagerProfession.java
@@ -35,6 +35,7 @@ public class VillagerProfession {
this.t = soundeffect;
}
+ public final VillagePlaceType getPlaceType() { return b(); } // Yatopia - OBFHELPER
public VillagePlaceType b() {
return this.q;
}
@@ -61,6 +62,7 @@ public class VillagerProfession {
}
static VillagerProfession a(String s, VillagePlaceType villageplacetype, ImmutableSet<Item> immutableset, ImmutableSet<Block> immutableset1, @Nullable SoundEffect soundeffect) {
+ VillagePlaceType.professionCache = null; // Yatopia
return (VillagerProfession) IRegistry.a((IRegistry) IRegistry.VILLAGER_PROFESSION, new MinecraftKey(s), (Object) (new VillagerProfession(s, villageplacetype, immutableset, immutableset1, soundeffect)));
}
}