From ad40d2e7fec326bb6bf2626b7f972a69ccbd3c65 Mon Sep 17 00:00:00 2001 From: ReinWD Date: Thu, 27 Feb 2020 08:26:40 +0000 Subject: [PATCH] base 118 --- ...-value-in-CommandNode-to-prevent-lag.patch | 4 +- patches/0002-reduce-EntityInsentient-AI.patch | 106 ++++++++++++++++++ patches/0003-fix-compile-error.patch | 25 +++++ ...respawn-event-implement-monster-tick.patch | 60 ++++++++++ patches/0005-fix-map-frame.patch | 25 +++++ ...-value-in-CommandNode-to-prevent-lag.patch | 34 ++++++ .../0002-add-three-1.15-src-files.patch | 0 .../0003-fix-compile-problems.patch | 0 .../0004-reduce-villager-AI.patch | 0 .../0005-reduce-EntityInsentient-AI.patch | 0 .../0006-reduce-villager-AI.patch | 0 .../0007-fix-compile-error.patch | 0 12 files changed, 252 insertions(+), 2 deletions(-) create mode 100644 patches/0002-reduce-EntityInsentient-AI.patch create mode 100644 patches/0003-fix-compile-error.patch create mode 100644 patches/0004-remove-prespawn-event-implement-monster-tick.patch create mode 100644 patches/0005-fix-map-frame.patch create mode 100644 villager-suppressed/0001-unsort-map-value-in-CommandNode-to-prevent-lag.patch rename {patches => villager-suppressed}/0002-add-three-1.15-src-files.patch (100%) rename {patches => villager-suppressed}/0003-fix-compile-problems.patch (100%) rename {patches => villager-suppressed}/0004-reduce-villager-AI.patch (100%) rename {patches => villager-suppressed}/0005-reduce-EntityInsentient-AI.patch (100%) rename {patches => villager-suppressed}/0006-reduce-villager-AI.patch (100%) rename {patches => villager-suppressed}/0007-fix-compile-error.patch (100%) diff --git a/patches/0001-unsort-map-value-in-CommandNode-to-prevent-lag.patch b/patches/0001-unsort-map-value-in-CommandNode-to-prevent-lag.patch index db0001d..edd0a76 100644 --- a/patches/0001-unsort-map-value-in-CommandNode-to-prevent-lag.patch +++ b/patches/0001-unsort-map-value-in-CommandNode-to-prevent-lag.patch @@ -1,7 +1,7 @@ -From baa6bcf9efda74fb26fb3be681a0cc7fb1e7b1e4 Mon Sep 17 00:00:00 2001 +From 5e5f64acfb8af4f0970decf5b0328baee0cf592e Mon Sep 17 00:00:00 2001 From: ReinWD Date: Mon, 30 Dec 2019 23:47:22 +0800 -Subject: [PATCH 1/7] unsort map value in CommandNode to prevent lag +Subject: [PATCH 1/4] unsort map value in CommandNode to prevent lag --- src/main/java/com/mojang/brigadier/tree/CommandNode.java | 4 ++-- diff --git a/patches/0002-reduce-EntityInsentient-AI.patch b/patches/0002-reduce-EntityInsentient-AI.patch new file mode 100644 index 0000000..b02b200 --- /dev/null +++ b/patches/0002-reduce-EntityInsentient-AI.patch @@ -0,0 +1,106 @@ +From bbd80c909630aed651b23a6966ed562010d350c6 Mon Sep 17 00:00:00 2001 +From: ReinWD +Date: Wed, 1 Jan 2020 17:14:11 +0800 +Subject: [PATCH 2/4] reduce EntityInsentient AI + +--- + .../net/minecraft/server/EntityInsentient.java | 6 ++- + .../minecraft/server/PathfinderGoalSelector.java | 46 +++++++++++----------- + 2 files changed, 28 insertions(+), 24 deletions(-) + +diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java +index 1991cee4..3366b5cb 100644 +--- a/src/main/java/net/minecraft/server/EntityInsentient.java ++++ b/src/main/java/net/minecraft/server/EntityInsentient.java +@@ -7,6 +7,7 @@ import java.util.List; + import java.util.Map; + import java.util.Random; + import java.util.UUID; ++import java.util.concurrent.ThreadLocalRandom; + import javax.annotation.Nullable; + + // CraftBukkit start +@@ -679,11 +680,12 @@ public abstract class EntityInsentient extends EntityLiving { + this.world.getMethodProfiler().enter("sensing"); + this.bw.a(); + this.world.getMethodProfiler().exit(); ++ boolean skipGoalUpdate = !(this instanceof EntityPigZombie || this instanceof EntitySnowman || this instanceof EntityCat || this instanceof EntityWolf) && ThreadLocalRandom.current().nextInt(100) < 90 ; + this.world.getMethodProfiler().enter("targetSelector"); +- this.targetSelector.doTick(); ++ this.targetSelector.doTick(skipGoalUpdate); + this.world.getMethodProfiler().exit(); + this.world.getMethodProfiler().enter("goalSelector"); +- this.goalSelector.doTick(); ++ this.goalSelector.doTick(skipGoalUpdate); + this.world.getMethodProfiler().exit(); + this.world.getMethodProfiler().enter("navigation"); + this.navigation.c(); +diff --git a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java +index 93513677..4bfd6130 100644 +--- a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java ++++ b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java +@@ -66,7 +66,7 @@ public class PathfinderGoalSelector { + }); + } + +- public void doTick() { ++ public void doTick(boolean skipGoalUpdate) { + this.e.enter("goalCleanup"); + this.c().filter((pathfindergoalwrapped) -> { + boolean flag; +@@ -92,29 +92,31 @@ public class PathfinderGoalSelector { + + }); + this.e.exit(); +- this.e.enter("goalUpdate"); +- this.d.stream().filter((pathfindergoalwrapped) -> { +- return !pathfindergoalwrapped.g(); +- }).filter((pathfindergoalwrapped) -> { +- Stream stream = pathfindergoalwrapped.i().stream(); +- EnumSet enumset = this.f; +- +- this.f.getClass(); +- return stream.noneMatch(enumset::contains); +- }).filter((pathfindergoalwrapped) -> { +- return pathfindergoalwrapped.i().stream().allMatch((pathfindergoal_type) -> { +- return ((PathfinderGoalWrapped) this.c.getOrDefault(pathfindergoal_type, PathfinderGoalSelector.b)).a(pathfindergoalwrapped); +- }); +- }).filter(PathfinderGoalWrapped::a).forEach((pathfindergoalwrapped) -> { +- pathfindergoalwrapped.i().forEach((pathfindergoal_type) -> { +- PathfinderGoalWrapped pathfindergoalwrapped1 = (PathfinderGoalWrapped) this.c.getOrDefault(pathfindergoal_type, PathfinderGoalSelector.b); ++ if (!skipGoalUpdate) { ++ this.e.enter("goalUpdate"); ++ this.d.stream().filter((pathfindergoalwrapped) -> { ++ return !pathfindergoalwrapped.g(); ++ }).filter((pathfindergoalwrapped) -> { ++ Stream stream = pathfindergoalwrapped.i().stream(); ++ EnumSet enumset = this.f; + +- pathfindergoalwrapped1.d(); +- this.c.put(pathfindergoal_type, pathfindergoalwrapped); ++ this.f.getClass(); ++ return stream.noneMatch(enumset::contains); ++ }).filter((pathfindergoalwrapped) -> { ++ return pathfindergoalwrapped.i().stream().allMatch((pathfindergoal_type) -> { ++ return ((PathfinderGoalWrapped) this.c.getOrDefault(pathfindergoal_type, PathfinderGoalSelector.b)).a(pathfindergoalwrapped); ++ }); ++ }).filter(PathfinderGoalWrapped::a).forEach((pathfindergoalwrapped) -> { ++ pathfindergoalwrapped.i().forEach((pathfindergoal_type) -> { ++ PathfinderGoalWrapped pathfindergoalwrapped1 = (PathfinderGoalWrapped) this.c.getOrDefault(pathfindergoal_type, PathfinderGoalSelector.b); ++ ++ pathfindergoalwrapped1.d(); ++ this.c.put(pathfindergoal_type, pathfindergoalwrapped); ++ }); ++ pathfindergoalwrapped.c(); + }); +- pathfindergoalwrapped.c(); +- }); +- this.e.exit(); ++ this.e.exit(); ++ } + this.e.enter("goalTick"); + this.c().forEach(PathfinderGoalWrapped::e); + this.e.exit(); +-- +2.11.0 + diff --git a/patches/0003-fix-compile-error.patch b/patches/0003-fix-compile-error.patch new file mode 100644 index 0000000..35f5d18 --- /dev/null +++ b/patches/0003-fix-compile-error.patch @@ -0,0 +1,25 @@ +From 8cec4f35b52083f0e2f2a7563780f015ffe5c243 Mon Sep 17 00:00:00 2001 +From: ReinWD +Date: Fri, 14 Feb 2020 07:26:37 +0000 +Subject: [PATCH 3/4] fix compile error + +--- + src/main/java/net/minecraft/server/EntityInsentient.java | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java +index 3366b5cb..3bd5f479 100644 +--- a/src/main/java/net/minecraft/server/EntityInsentient.java ++++ b/src/main/java/net/minecraft/server/EntityInsentient.java +@@ -121,7 +121,7 @@ public abstract class EntityInsentient extends EntityLiving { + super.inactiveTick(); + this.goalSelector.inactiveTick(); + if (this.targetSelector.inactiveTick()) { +- this.targetSelector.doTick(); ++ this.targetSelector.doTick(true); + } + } + // Paper end +-- +2.11.0 + diff --git a/patches/0004-remove-prespawn-event-implement-monster-tick.patch b/patches/0004-remove-prespawn-event-implement-monster-tick.patch new file mode 100644 index 0000000..3f577cb --- /dev/null +++ b/patches/0004-remove-prespawn-event-implement-monster-tick.patch @@ -0,0 +1,60 @@ +From 4b80edaff489704476bd22ddca1664417269f2dc Mon Sep 17 00:00:00 2001 +From: ReinWD +Date: Mon, 24 Feb 2020 13:28:27 +0000 +Subject: [PATCH 4/4] remove prespawn event & implement monster tick + +--- + .../java/net/minecraft/server/ChunkProviderServer.java | 3 ++- + src/main/java/net/minecraft/server/PlayerChunkMap.java | 15 +-------------- + 2 files changed, 3 insertions(+), 15 deletions(-) + +diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java +index 0de82202..2662e06e 100644 +--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java ++++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java +@@ -623,6 +623,7 @@ public class ChunkProviderServer extends IChunkProvider { + int k = this.world.getGameRules().getInt(GameRules.RANDOM_TICK_SPEED); + BlockPosition blockposition = this.world.getSpawn(); + boolean flag2 = world.ticksPerAnimalSpawns != 0L && worlddata.getTime() % world.ticksPerAnimalSpawns == 0L; // CraftBukkit // PAIL: TODO monster ticks ++ boolean monsterTick = world.ticksPerMonsterSpawns != 0L && worlddata.getTime() % world.ticksPerMonsterSpawns == 0L; // ReinWD: monsterTick + + this.world.getMethodProfiler().enter("naturalSpawnCount"); + this.world.timings.countNaturalMobs.startTiming(); // Paper - timings +@@ -671,7 +672,7 @@ public class ChunkProviderServer extends IChunkProvider { + // Paper start - timings + this.world.timings.chunkRangeCheckSmall.startTiming(); + // note: this is just a copy of the expression in the if +- boolean smallRadiusOutsideRange = flag1 && (this.allowMonsters || this.allowAnimals) && this.world.getWorldBorder().isInBounds(chunk.getPos()) && !this.playerChunkMap.isOutsideOfRange(chunkcoordintpair, true); ++ boolean smallRadiusOutsideRange = (flag1) && (this.allowMonsters || this.allowAnimals) && (flag2 || monsterTick) && this.world.getWorldBorder().isInBounds(chunk.getPos()) && !this.playerChunkMap.isOutsideOfRange(chunkcoordintpair, true);//ReinWD:monsterTick + this.world.timings.chunkRangeCheckSmall.stopTiming(); + if (smallRadiusOutsideRange) { // Spigot + // Paper end +diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java +index 46d20538..a82a06f2 100644 +--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java ++++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java +@@ -1275,20 +1275,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + // Spigot end + long i = chunkcoordintpair.pair(); + +- return !this.chunkDistanceManager.d(i) ? true : this.playerMap.a(i).noneMatch((entityplayer) -> { +- // Paper start - +- com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent event; +- double blockRange = 16384.0D; +- if (reducedRange) { +- event = new com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent(entityplayer.getBukkitEntity(), (byte) finalChunkRange); +- event.callEvent(); +- blockRange = (double) ((event.getSpawnRadius() << 4) * (event.getSpawnRadius() << 4)); +- if (event.isCancelled()) return false; +- } +- +- return (!entityplayer.isSpectator() && a(chunkcoordintpair, (Entity) entityplayer) < blockRange); // Spigot +- // Paper end +- }); ++ return !this.chunkDistanceManager.d(i); + } + + private boolean b(EntityPlayer entityplayer) { +-- +2.11.0 + diff --git a/patches/0005-fix-map-frame.patch b/patches/0005-fix-map-frame.patch new file mode 100644 index 0000000..236ef53 --- /dev/null +++ b/patches/0005-fix-map-frame.patch @@ -0,0 +1,25 @@ +From 22a0859dc776dc310d3a1e731546ecb48887dd49 Mon Sep 17 00:00:00 2001 +From: ReinWD +Date: Tue, 25 Feb 2020 14:50:09 +0000 +Subject: [PATCH] fix map frame + +--- + src/main/java/net/minecraft/server/EntityTrackerEntry.java | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java +index 3a88c9a6..f1139b63 100644 +--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java ++++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java +@@ -83,7 +83,7 @@ public class EntityTrackerEntry { + EntityItemFrame entityitemframe = (EntityItemFrame) this.tracker; + ItemStack itemstack = entityitemframe.getItem(); + +- if (this.tickCounter % 10 == 0 && itemstack.getItem() instanceof ItemWorldMap) { // CraftBukkit - Moved this.tickCounter % 10 logic here so item frames do not enter the other blocks ++ if (this.tickCounter % 200 == 0 && itemstack.getItem() instanceof ItemWorldMap) { // CraftBukkit - Moved this.tickCounter % 10 logic here so item frames do not enter the other blocks + WorldMap worldmap = ItemWorldMap.getSavedMap(itemstack, this.b); + Iterator iterator = this.trackedPlayers.iterator(); // CraftBukkit + +-- +2.11.0 + diff --git a/villager-suppressed/0001-unsort-map-value-in-CommandNode-to-prevent-lag.patch b/villager-suppressed/0001-unsort-map-value-in-CommandNode-to-prevent-lag.patch new file mode 100644 index 0000000..db0001d --- /dev/null +++ b/villager-suppressed/0001-unsort-map-value-in-CommandNode-to-prevent-lag.patch @@ -0,0 +1,34 @@ +From baa6bcf9efda74fb26fb3be681a0cc7fb1e7b1e4 Mon Sep 17 00:00:00 2001 +From: ReinWD +Date: Mon, 30 Dec 2019 23:47:22 +0800 +Subject: [PATCH 1/7] unsort map value in CommandNode to prevent lag + +--- + src/main/java/com/mojang/brigadier/tree/CommandNode.java | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/main/java/com/mojang/brigadier/tree/CommandNode.java b/src/main/java/com/mojang/brigadier/tree/CommandNode.java +index 98592a3e..0fbdaf2c 100644 +--- a/src/main/java/com/mojang/brigadier/tree/CommandNode.java ++++ b/src/main/java/com/mojang/brigadier/tree/CommandNode.java +@@ -26,7 +26,7 @@ import java.util.stream.Collectors; + import net.minecraft.server.CommandListenerWrapper; // CraftBukkit + + public abstract class CommandNode implements Comparable> { +- private Map> children = Maps.newLinkedHashMap(); ++ private Map> children = Maps.newTreeMap(); + private Map> literals = Maps.newLinkedHashMap(); + private Map> arguments = Maps.newLinkedHashMap(); + private final Predicate requirement; +@@ -107,7 +107,7 @@ public abstract class CommandNode implements Comparable> { + } + } + +- children = children.entrySet().stream().sorted(Map.Entry.comparingByValue()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); ++// children = children.entrySet().stream().sorted(Map.Entry.comparingByValue()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); + } + + public void findAmbiguities(final AmbiguityConsumer consumer) { +-- +2.11.0 + diff --git a/patches/0002-add-three-1.15-src-files.patch b/villager-suppressed/0002-add-three-1.15-src-files.patch similarity index 100% rename from patches/0002-add-three-1.15-src-files.patch rename to villager-suppressed/0002-add-three-1.15-src-files.patch diff --git a/patches/0003-fix-compile-problems.patch b/villager-suppressed/0003-fix-compile-problems.patch similarity index 100% rename from patches/0003-fix-compile-problems.patch rename to villager-suppressed/0003-fix-compile-problems.patch diff --git a/patches/0004-reduce-villager-AI.patch b/villager-suppressed/0004-reduce-villager-AI.patch similarity index 100% rename from patches/0004-reduce-villager-AI.patch rename to villager-suppressed/0004-reduce-villager-AI.patch diff --git a/patches/0005-reduce-EntityInsentient-AI.patch b/villager-suppressed/0005-reduce-EntityInsentient-AI.patch similarity index 100% rename from patches/0005-reduce-EntityInsentient-AI.patch rename to villager-suppressed/0005-reduce-EntityInsentient-AI.patch diff --git a/patches/0006-reduce-villager-AI.patch b/villager-suppressed/0006-reduce-villager-AI.patch similarity index 100% rename from patches/0006-reduce-villager-AI.patch rename to villager-suppressed/0006-reduce-villager-AI.patch diff --git a/patches/0007-fix-compile-error.patch b/villager-suppressed/0007-fix-compile-error.patch similarity index 100% rename from patches/0007-fix-compile-error.patch rename to villager-suppressed/0007-fix-compile-error.patch