diff --git a/patches/Rainforest/server.txt b/patches/Rainforest/server.txt index cd046ff0..9ca1ff91 100644 --- a/patches/Rainforest/server.txt +++ b/patches/Rainforest/server.txt @@ -1 +1 @@ -Add-Rainforest-config&Apply-advancements-async&Optimize-Pathfinder-Remove-Streams-Optimized-collect&Optimize-redstone-algorithm&Async-navigation \ No newline at end of file +Add-Rainforest-config&Apply-advancements-async&Optimize-Pathfinder-Remove-Streams-Optimized-collect&Optimize-redstone-algorithm \ No newline at end of file diff --git a/patches/server/0001-Yatopia-Server-Fixes.patch b/patches/server/0001-Yatopia-Server-Fixes.patch index 8d378df6..6f46268d 100644 --- a/patches/server/0001-Yatopia-Server-Fixes.patch +++ b/patches/server/0001-Yatopia-Server-Fixes.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Bud Gidiere -Date: Wed, 5 Aug 2020 14:21:05 -0500 -Subject: [PATCH] Yatopia Server Fixes +Date: Thu, 6 Aug 2020 19:47:50 -0500 +Subject: [PATCH] Yatopia-Server-Fixes diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java @@ -233,42 +233,6 @@ index 4c2d5b3e080c925d687733ec40d4fb4b22552c96..00000000000000000000000000000000 - - this.setPVP(dedicatedserverproperties.pvp); - this.setAllowFlight(dedicatedserverproperties.allowFlight); -diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index 83e232deaeb78f0c97bce42d67fc220e8fb88368..bbcded1e80a4b0e4618affd77bcaa6e41589b9fe 100644 ---- a/src/main/java/net/minecraft/server/EntityInsentient.java -+++ b/src/main/java/net/minecraft/server/EntityInsentient.java -@@ -758,7 +758,11 @@ public abstract class EntityInsentient extends EntityLiving { - this.goalSelector.doTick(); - //this.world.getMethodProfiler().exit(); // Akarin - remove caller - //this.world.getMethodProfiler().enter("navigation"); // Akarin - remove caller -- this.navigation.c(); -+ // Paper start - async navigation -+ if (this.navigation instanceof AsyncNavigationAbstract) -+ ((AsyncNavigationAbstract) this.navigation).asyncTick(); -+ else -+ // Paper end - //this.world.getMethodProfiler().exit(); // Akarin - remove caller - //this.world.getMethodProfiler().enter("mob tick"); // Akarin - remove caller - this.mobTick(); -diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java.rej b/src/main/java/net/minecraft/server/EntityInsentient.java.rej -deleted file mode 100644 -index de5ec59cb607030703e7b0361b1fa615b95e289e..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/EntityInsentient.java.rej -+++ /dev/null -@@ -1,13 +0,0 @@ --diff a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java (rejected hunks) --@@ -757,6 +758,11 @@ public abstract class EntityInsentient extends EntityLiving { -- this.goalSelector.doTick(); -- this.world.getMethodProfiler().exit(); -- this.world.getMethodProfiler().enter("navigation"); --+ // Paper start - async navigation --+ if (this.navigation instanceof AsyncNavigationAbstract) --+ ((AsyncNavigationAbstract) this.navigation).asyncTick(); --+ else --+ // Paper end -- this.navigation.c(); -- this.world.getMethodProfiler().exit(); -- this.world.getMethodProfiler().enter("mob tick"); diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java index 70ae2923e21d7a0312e629a903ca9e380d6c6114..d906c5e530c2e7f779df079223aee619a73b5d51 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java @@ -388,101 +352,6 @@ index b005dd817e9ecffcf2172b4a807b0ecc632570b0..00000000000000000000000000000000 - this.sleepForTick(); - this.methodProfiler.exit(); - this.methodProfiler.b(); -diff --git a/src/main/java/net/minecraft/server/NavigationAbstract.java b/src/main/java/net/minecraft/server/NavigationAbstract.java -index 2f2f8d74acef3cdaeda0faab67ace0d28e2d4627..d155d843c03ee1e16180657886a87844e6b34aa6 100644 ---- a/src/main/java/net/minecraft/server/NavigationAbstract.java -+++ b/src/main/java/net/minecraft/server/NavigationAbstract.java -@@ -8,25 +8,25 @@ import javax.annotation.Nullable; - - public abstract class NavigationAbstract { - -- protected final EntityInsentient a; public Entity getEntity() { return a; } // Paper - OBFHELPER -- protected final World b; -+ protected final EntityInsentient a; public EntityInsentient getEntity() { return a; } // Paper - OBFHELPER -+ protected final World b; protected final World getWorld() { return this.b; } // Paper - OBFHELPER - @Nullable -- protected PathEntity c; protected final PathEntity getCurrentPath() { return this.c; } // Paper - OBFHELPER -- protected double d; -- protected int e; -- protected int f; -- protected Vec3D g; -- protected BaseBlockPosition h; -- protected long i; -- protected long j; -- protected double k; -- protected float l; -+ protected PathEntity c; protected final PathEntity getCurrentPath() { return this.c; } protected final void setCurrentPath(PathEntity path) { this.c = path; } // Paper - OBFHELPER -+ protected double d; protected final double getSpeed() { return this.d; } // Paper - OBFHELPER -+ protected int e; protected final int getCurrentTick() { return this.e; } protected final void incrementTick() { ++this.e; } // Paper - OBFHELPER -+ protected int f; protected final int getCurrentPathStartTime() { return this.f; } protected final void setCurrentPathStartTime(int time) { this.f = time; } // Paper - OBFHELPER -+ protected Vec3D g; protected final Vec3D getCurrentPathStartPosition() { return this.g; } protected final void setCurrentPathStartPosition(Vec3D position) { this.g = position; } // Paper - OBFHELPER -+ protected BaseBlockPosition h; protected final BaseBlockPosition getLastNodePosition() { return this.h; } protected final void setLastNodePosition(BaseBlockPosition position) { this.h = position; } // Paper - OBFHELPER -+ protected long i; protected final long getCurrentNodeStartTickMs() { return this.i; } protected final void addToCurrentNodeStartTickMs(long amount) { this.i += amount; } // Paper - OBFHELPER -+ protected long j; protected final long getLastActiveTickMs() { return this.j; } protected final void setLastActiveTickMs(long ms) { this.j = ms; } // Paper - OBFHELPER -+ protected double k; protected final double getCurrentNodeTimeout() { return this.k; } protected final void setCurrentNodeTimeout(double timeout) { this.k = timeout; } // Paper - OBFHELPER -+ protected float l; protected final float getChebyshevMinimumReachProximity() { return this.l; } protected final void setChebyshevMinimumReachProximity(float proximity) { this.l = proximity; } // Paper - OBFHELPER - protected boolean m; protected final boolean needsPathRecalculation() { return this.m; } // Tuinity - OBFHELPER - protected long n; -- protected PathfinderAbstract o; -- private BlockPosition p; -- private int q; -- private float r; -+ protected PathfinderAbstract o; protected final PathfinderAbstract getNodeCreator() { return this.o; } // Paper - OBFHELPER -+ private BlockPosition p; protected final BlockPosition getCurrentTarget() { return this.p; } protected final void setCurrentTarget(BlockPosition target) { this.p = target; } // Paper - OBFHELPER -+ private int q; protected final int getCurrentDistance() { return this.q; } // Paper - OBFHELPER -+ private float r; protected final float getRangeMultiplier() { return this.r; } // Paper - OBFHELPER - private final Pathfinder s; public Pathfinder getPathfinder() { return this.s; } // Paper - OBFHELPER - - // Tuinity start -diff --git a/src/main/java/net/minecraft/server/NavigationAbstract.java.rej b/src/main/java/net/minecraft/server/NavigationAbstract.java.rej -deleted file mode 100644 -index 3b706d3951c187dfdd158b7c4c73014d271855ca..0000000000000000000000000000000000000000 ---- a/src/main/java/net/minecraft/server/NavigationAbstract.java.rej -+++ /dev/null -@@ -1,43 +0,0 @@ --diff a/src/main/java/net/minecraft/server/NavigationAbstract.java b/src/main/java/net/minecraft/server/NavigationAbstract.java (rejected hunks) --@@ -8,25 +8,25 @@ import javax.annotation.Nullable; -- -- public abstract class NavigationAbstract { -- --- protected final EntityInsentient a; public Entity getEntity() { return a; } // Paper - OBFHELPER --- protected final World b; --+ protected final EntityInsentient a; public EntityInsentient getEntity() { return a; } // Paper - OBFHELPER --+ protected final World b; protected final World getWorld() { return this.b; } // Paper - OBFHELPER -- @Nullable --- protected PathEntity c; protected final PathEntity getCurrentPath() { return this.c; } // Paper - OBFHELPER --- protected double d; --- protected int e; --- protected int f; --- protected Vec3D g; --- protected BaseBlockPosition h; --- protected long i; --- protected long j; --- protected double k; --- protected float l; --+ protected PathEntity c; protected final PathEntity getCurrentPath() { return this.c; } protected final void setCurrentPath(PathEntity path) { this.c = path; } // Paper - OBFHELPER --+ protected double d; protected final double getSpeed() { return this.d; } // Paper - OBFHELPER --+ protected int e; protected final int getCurrentTick() { return this.e; } protected final void incrementTick() { ++this.e; } // Paper - OBFHELPER --+ protected int f; protected final int getCurrentPathStartTime() { return this.f; } protected final void setCurrentPathStartTime(int time) { this.f = time; } // Paper - OBFHELPER --+ protected Vec3D g; protected final Vec3D getCurrentPathStartPosition() { return this.g; } protected final void setCurrentPathStartPosition(Vec3D position) { this.g = position; } // Paper - OBFHELPER --+ protected BaseBlockPosition h; protected final BaseBlockPosition getLastNodePosition() { return this.h; } protected final void setLastNodePosition(BaseBlockPosition position) { this.h = position; } // Paper - OBFHELPER --+ protected long i; protected final long getCurrentNodeStartTickMs() { return this.i; } protected final void addToCurrentNodeStartTickMs(long amount) { this.i += amount; } // Paper - OBFHELPER --+ protected long j; protected final long getLastActiveTickMs() { return this.j; } protected final void setLastActiveTickMs(long ms) { this.j = ms; } // Paper - OBFHELPER --+ protected double k; protected final double getCurrentNodeTimeout() { return this.k; } protected final void setCurrentNodeTimeout(double timeout) { this.k = timeout; } // Paper - OBFHELPER --+ protected float l; protected final float getChebyshevMinimumReachProximity() { return this.l; } protected final void setChebyshevMinimumReachProximity(float proximity) { this.l = proximity; } // Paper - OBFHELPER -- protected boolean m; -- protected long n; --- protected PathfinderAbstract o; --- private BlockPosition p; --- private int q; --- private float r; --+ protected PathfinderAbstract o; protected final PathfinderAbstract getNodeCreator() { return this.o; } // Paper - OBFHELPER --+ private BlockPosition p; protected final BlockPosition getCurrentTarget() { return this.p; } protected final void setCurrentTarget(BlockPosition target) { this.p = target; } // Paper - OBFHELPER --+ private int q; protected final int getCurrentDistance() { return this.q; } // Paper - OBFHELPER --+ private float r; protected final float getRangeMultiplier() { return this.r; } // Paper - OBFHELPER -- private final Pathfinder s; public Pathfinder getPathfinder() { return this.s; } // Paper - OBFHELPER -- -- public NavigationAbstract(EntityInsentient entityinsentient, World world) { diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java index fe43603ecdc52f26fdaf4c94f14ea27e76b5a71b..a794e4523decded103b88433a5f63213fc243683 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java @@ -730,6 +599,34 @@ index 7fe085e48b6ad625a510edf33b112bef24f7d7ad..9459efde54d507231b4aacb7cba14e99 private NonNullList contents; public int c; // PAIL private -> public, rename viewerCount private TileEntityShulkerBox.AnimationPhase i; +diff --git a/src/main/java/net/minecraft/server/TileEntityShulkerBox.java.rej b/src/main/java/net/minecraft/server/TileEntityShulkerBox.java.rej +deleted file mode 100644 +index bada470cba41cce9beb9eb04227b42c1d489d731..0000000000000000000000000000000000000000 +--- a/src/main/java/net/minecraft/server/TileEntityShulkerBox.java.rej ++++ /dev/null +@@ -1,22 +0,0 @@ +-diff a/src/main/java/net/minecraft/server/TileEntityShulkerBox.java b/src/main/java/net/minecraft/server/TileEntityShulkerBox.java (rejected hunks) +-@@ -10,7 +11,19 @@ import org.bukkit.entity.HumanEntity; +- +- public class TileEntityShulkerBox extends TileEntityLootable implements IWorldInventory, ITickable { +- +-- private static final int[] a = IntStream.range(0, 27).toArray(); +-+ private static final int[] a; +-+ +-+ static { +-+ int[] arr = new int[10]; +-+ int count = 0; +-+ for (int i1 = 0; i1 < 27; i1++) { +-+ if (arr.length == count) arr = Arrays.copyOf(arr, count * 2); +-+ arr[count++] = i1; +-+ } +-+ arr = Arrays.copyOfRange(arr, 0, count); +-+ a = arr; +-+ } +-+ +- private NonNullList contents; +- private int c; +- private TileEntityShulkerBox.AnimationPhase i; diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java index 0890bca50858ec8d544be2e1ff4ac2da73c7d830..44af511da96b265a8441052cc87e356e630699a6 100644 --- a/src/main/java/net/minecraft/server/World.java diff --git a/patches/server/0004-Add-GameProfileLookupEvent.patch b/patches/server/0004-Add-GameProfileLookupEvent.patch index 6cc68ba5..f7ebecf4 100644 --- a/patches/server/0004-Add-GameProfileLookupEvent.patch +++ b/patches/server/0004-Add-GameProfileLookupEvent.patch @@ -1,5 +1,5 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Bud Gidiere +From: tr7zw Date: Wed, 5 Aug 2020 14:25:50 -0500 Subject: [PATCH] Add GameProfileLookupEvent diff --git a/patches/server/0006-Add-config-Yatopia-command-and-basic-settings.patch b/patches/server/0006-Add-config-Yatopia-command-and-basic-settings.patch index 49defd6d..d79b2ad5 100644 --- a/patches/server/0006-Add-config-Yatopia-command-and-basic-settings.patch +++ b/patches/server/0006-Add-config-Yatopia-command-and-basic-settings.patch @@ -1,5 +1,5 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Bud Gidiere +From: tr7zw Date: Wed, 5 Aug 2020 08:05:10 -0500 Subject: [PATCH] Add config Yatopia command and basic settings @@ -411,7 +411,7 @@ index dd093e3e624158ff87bad59785ed2496f161f64c..ec84bc4dceff76fd2f823a6a9548fdf1 }); StreamAccumulator streamaccumulator = new StreamAccumulator<>(Stream.concat(stream1, stream)); diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 0c862b4604540545206ebe6e08d5d79484414279..da08249ee1c61b7c77b79f491cb8482865ecba3c 100644 +index 732a7747fd0360deec8237c80bc93fb9f06b5320..c30fee13723cef0f03eb5a87851158cf347fae3c 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -266,6 +266,7 @@ public abstract class EntityLiving extends Entity { diff --git a/patches/server/0007-Add-option-for-only-players-to-have-collisions-with.patch b/patches/server/0007-Add-option-for-only-players-to-have-collisions-with.patch index 6074155a..f57b2d62 100644 --- a/patches/server/0007-Add-option-for-only-players-to-have-collisions-with.patch +++ b/patches/server/0007-Add-option-for-only-players-to-have-collisions-with.patch @@ -19,10 +19,10 @@ index 19bea6ee83d8b25da022662253328fb6384f40d9..2cee6e02a7dcbacb5f002f9c5917a2e2 } \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index da08249ee1c61b7c77b79f491cb8482865ecba3c..2edebae8a1127c9214c7c2974700db9f207fa05f 100644 +index c30fee13723cef0f03eb5a87851158cf347fae3c..7ebd715dd2675e0f4fc73344f7068c6b908b59a9 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -2844,40 +2844,46 @@ public abstract class EntityLiving extends Entity { +@@ -2843,40 +2843,46 @@ public abstract class EntityLiving extends Entity { if (i <= 0 && world.paperConfig.maxCollisionsPerEntity <= 0) { return; } diff --git a/patches/server/0014-lithium-enum_values.patch b/patches/server/0014-lithium-enum_values.patch index 9b9589a8..72080f3f 100644 --- a/patches/server/0014-lithium-enum_values.patch +++ b/patches/server/0014-lithium-enum_values.patch @@ -37,10 +37,10 @@ index 4f10ca5ada741b4f5ef941bb9d92a2fa6a7c44ff..3d6f8d948d293ca57bf158bcd1f58e28 if (enumdirection2 != EnumDirection.DOWN && world.isBlockFacePowered(blockposition1.shift(enumdirection2), enumdirection2)) { return true; diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 2edebae8a1127c9214c7c2974700db9f207fa05f..ce96eea39425792eda9aacd656d2bffda8bc3803 100644 +index 7ebd715dd2675e0f4fc73344f7068c6b908b59a9..ef77e7864e7e49684a9bd2a7c9f07717800e3e89 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -2567,11 +2567,14 @@ public abstract class EntityLiving extends Entity { +@@ -2566,11 +2566,14 @@ public abstract class EntityLiving extends Entity { } } diff --git a/patches/server/0016-lithium-MixinLandPathNodeMaker.patch b/patches/server/0016-lithium-MixinLandPathNodeMaker.patch index 8e674674..4215bc8a 100644 --- a/patches/server/0016-lithium-MixinLandPathNodeMaker.patch +++ b/patches/server/0016-lithium-MixinLandPathNodeMaker.patch @@ -7,7 +7,7 @@ Original code by JellySquid, licensed under GNU Lesser General Public License v3 you can find the original code on https://github.com/jellysquid3/lithium-fabric/tree/1.16.x/fabric (Yarn mappings) diff --git a/src/main/java/net/minecraft/server/PathfinderNormal.java b/src/main/java/net/minecraft/server/PathfinderNormal.java -index 29c978aaa2b9f50f5dba70943653af7658d98fc7..595fb84f280bb10997992cc41ebc512ceaf2d696 100644 +index ec55785af2b432b692d3a3bf4298ffb32489bf3b..279ca87d8826ea2696ffc08d4b52c55a5e7bd392 100644 --- a/src/main/java/net/minecraft/server/PathfinderNormal.java +++ b/src/main/java/net/minecraft/server/PathfinderNormal.java @@ -4,12 +4,23 @@ import it.unimi.dsi.fastutil.longs.Long2ObjectMap; @@ -34,7 +34,7 @@ index 29c978aaa2b9f50f5dba70943653af7658d98fc7..595fb84f280bb10997992cc41ebc512c protected float j; private final Long2ObjectMap k = new Long2ObjectOpenHashMap(); private final Object2BooleanMap l = new Object2BooleanOpenHashMap(); -@@ -509,13 +520,44 @@ public class PathfinderNormal extends PathfinderAbstract { +@@ -508,13 +519,44 @@ public class PathfinderNormal extends PathfinderAbstract { protected static PathType b(IBlockAccess iblockaccess, BlockPosition blockposition) { IBlockData iblockdata = iblockaccess.getTypeIfLoaded(blockposition); // Paper if (iblockdata == null) return PathType.BLOCKED; // Paper @@ -84,7 +84,7 @@ index 29c978aaa2b9f50f5dba70943653af7658d98fc7..595fb84f280bb10997992cc41ebc512c return PathType.DAMAGE_CACTUS; } else if (iblockdata.a(Blocks.SWEET_BERRY_BUSH)) { return PathType.DAMAGE_OTHER; -@@ -541,7 +583,10 @@ public class PathfinderNormal extends PathfinderAbstract { +@@ -540,7 +582,10 @@ public class PathfinderNormal extends PathfinderAbstract { } else { Fluid fluid = iblockdata.getFluid(); // Tuinity - remove another getType call diff --git a/patches/server/0022-Optimize-TileEntity-loading.patch b/patches/server/0022-Optimize-TileEntity-loading.patch index 130b1af2..cdb03cff 100644 --- a/patches/server/0022-Optimize-TileEntity-loading.patch +++ b/patches/server/0022-Optimize-TileEntity-loading.patch @@ -1,5 +1,5 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Bud Gidiere +From: tr7zw Date: Wed, 5 Aug 2020 08:08:44 -0500 Subject: [PATCH] Optimize TileEntity loading diff --git a/patches/server/0024-Redirect-Configs.patch b/patches/server/0024-Redirect-Configs.patch index cafb5534..cd89bfbf 100644 --- a/patches/server/0024-Redirect-Configs.patch +++ b/patches/server/0024-Redirect-Configs.patch @@ -1,5 +1,5 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Bud Gidiere +From: tr7zw Date: Wed, 5 Aug 2020 08:17:46 -0500 Subject: [PATCH] Redirect Configs diff --git a/patches/server/0029-Akarin-updated-Async-Path-Finding.patch b/patches/server/0029-Akarin-updated-Async-Path-Finding.patch new file mode 100644 index 00000000..276bf8cc --- /dev/null +++ b/patches/server/0029-Akarin-updated-Async-Path-Finding.patch @@ -0,0 +1,358 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: tsao chi +Date: Sun, 2 Aug 2020 12:25:52 -0500 +Subject: [PATCH] Akarin updated Async Path Finding + +Co-authored-by: Bud Gidiere + +diff --git a/src/main/java/net/minecraft/server/EntityBee.java b/src/main/java/net/minecraft/server/EntityBee.java +index e6868e2b65e3c2bde7696272b242a47e7394e27f..c4c3ef500b9b8465644a0b7712f43ba35ad3acc1 100644 +--- a/src/main/java/net/minecraft/server/EntityBee.java ++++ b/src/main/java/net/minecraft/server/EntityBee.java +@@ -445,9 +445,9 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB + } + + @Override +- public void c() { ++ public void tickAsync() { + if (!EntityBee.this.bJ.k()) { +- super.c(); ++ super.tickAsync(); + } + } + }; +diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java +index 691a4ebc3f267bab375fb2bc83deac9ea825a232..7c9bb358c9967e6c7c02b96e17764f2418df7979 100644 +--- a/src/main/java/net/minecraft/server/EntityInsentient.java ++++ b/src/main/java/net/minecraft/server/EntityInsentient.java +@@ -757,7 +757,7 @@ public abstract class EntityInsentient extends EntityLiving { + this.goalSelector.doTick(); + //this.world.getMethodProfiler().exit(); // Akarin - remove caller + //this.world.getMethodProfiler().enter("navigation"); // Akarin - remove caller +- this.navigation.c(); ++ this.navigation.tickAsync(); // Akarin - Async pathfinder + //this.world.getMethodProfiler().exit(); // Akarin - remove caller + //this.world.getMethodProfiler().enter("mob tick"); // Akarin - remove caller + this.mobTick(); +diff --git a/src/main/java/net/minecraft/server/Navigation.java b/src/main/java/net/minecraft/server/Navigation.java +index 681465d8a74831461dce4615d2d19c7ed46bc299..f04411a2a295d2a982dca5851ae76a80a6a83585 100644 +--- a/src/main/java/net/minecraft/server/Navigation.java ++++ b/src/main/java/net/minecraft/server/Navigation.java +@@ -183,7 +183,7 @@ public class Navigation extends NavigationAbstract { + double d3 = (double) j2 + 0.5D - vec3d.z; + + if (d2 * d0 + d3 * d1 >= 0.0D) { +- PathType pathtype = this.o.a(this.b, i2, j - 1, j2, this.a, l, i1, j1, true, true); ++ PathType pathtype = this.o.a(this.o.a, i2, j - 1, j2, this.a, l, i1, j1, true, true); // Akarin - use chunk cache + + if (!this.a(pathtype)) { + return false; +diff --git a/src/main/java/net/minecraft/server/NavigationAbstract.java b/src/main/java/net/minecraft/server/NavigationAbstract.java +index 2405dc5e9a6a971a565c37710b61d5fc4737bdf8..2dac507e9e0044a32ae54ea57eada0de04c1467d 100644 +--- a/src/main/java/net/minecraft/server/NavigationAbstract.java ++++ b/src/main/java/net/minecraft/server/NavigationAbstract.java +@@ -28,6 +28,15 @@ public abstract class NavigationAbstract { + private int q; + private float r; + private final Pathfinder s; public Pathfinder getPathfinder() { return this.s; } // Paper - OBFHELPER ++ // Akarin start - Async pathfinder ++ private long lastPathfindAsync; ++ private static final java.util.concurrent.ExecutorService pathfindExecutor = ++ java.util.concurrent.Executors.newSingleThreadExecutor( ++ new com.google.common.util.concurrent.ThreadFactoryBuilder() ++ .setDaemon(true) ++ .setNameFormat("StarLink Pathfinder - %d") ++ .build()); ++ // Akarin end + + // Tuinity start + public boolean isViableForPathRecalculationChecking() { +@@ -83,7 +92,40 @@ public abstract class NavigationAbstract { + } + + } ++ // Akarin start - Async pathfinder, copied from above with modification ++ public void doPathfindAsync() { ++ if (this.b.getTime() - this.lastPathfindAsync > 20L) { ++ if (this.p != null) { ++ this.lastPathfindAsync = this.b.getTime(); ++ ++ // Bake chunk cache ++ float f = (float) this.a.b(GenericAttributes.FOLLOW_RANGE);; ++ BlockPosition blockposition = this.a.getChunkCoordinates(); ++ int k = (int) (f + (float) 8); ++ ChunkCache cache = new ChunkCache(this.b, blockposition.b(-k, -k, -k), blockposition.b(k, k, k)); ++ ++ // Execute directly if we already have a path entity, or compute one ++ if (this.c != null && !this.c.b()) { ++ doTickAsync(this.c); ++ return; ++ } + ++ pathfindExecutor.execute(() -> { ++ PathEntity result = findPathAsync(cache, java.util.Collections.singleton(this.p), this.q); ++ NavigationAbstract.this.b.getMinecraftServer().processQueue.add(() -> { ++ if (result != null && result.m() != null) ++ this.p = result.m(); ++ ++ NavigationAbstract.this.c = result; ++ }); ++ }); ++ } ++ } else { ++ // Execute directly, keep behaviour with vanilla, see the original doTick method ++ doTickAsync(this.c); ++ } ++ } ++ // Akarin end + @Nullable + public final PathEntity calculateDestination(double d0, double d1, double d2) { return a(d0, d1, d2, 0); } public final PathEntity a(double d0, double d1, double d2, int i) { // Paper - OBFHELPER + return this.a(new BlockPosition(d0, d1, d2), i); +@@ -164,7 +206,17 @@ public abstract class NavigationAbstract { + return pathentity; + } + } +- ++ // Akarin start - Async pathfinder, copied and edited from above with only pathfinding ++ protected PathEntity findPathAsync(ChunkCache cache, Set set, int j) { ++ if (this.a.locY() < 0.0D) { ++ return null; ++ } else if (!this.a()) { ++ return null; ++ } else { ++ return this.s.a(cache, this.a, set, f, j, this.r); ++ } ++ } ++ // Akarin end + public boolean a(double d0, double d1, double d2, double d3) { + return this.a(this.a(d0, d1, d2, 1), d3); + } +@@ -228,7 +280,7 @@ public abstract class NavigationAbstract { + return this.c; + } + +- public void c() { ++/* public void c() { + ++this.e; + if (this.m) { + this.j(); +@@ -238,7 +290,7 @@ public abstract class NavigationAbstract { + Vec3D vec3d; + + if (this.a()) { +- this.l(); ++ //this.l(); + } else if (this.c != null && this.c.f() < this.c.e()) { + vec3d = this.b(); + Vec3D vec3d1 = this.c.a(this.a, this.c.f()); +@@ -256,9 +308,44 @@ public abstract class NavigationAbstract { + this.a.getControllerMove().a(vec3d.x, this.b.getType(blockposition.down()).isAir() ? vec3d.y : PathfinderNormal.a((IBlockAccess) this.b, blockposition), vec3d.z, this.d); + } + } ++ }*/ ++ //Yatopia Start ++ public void c() { ++ this.tickAsync(); ++ } ++ //Yatopia End ++ // Akarin start - Async pathfinder, copied from above ++ public void tickAsync() { ++ ++this.e; ++ this.doPathfindAsync(); + } + +- protected void l() { ++ // This was copied from above partly with param ++ public void doTickAsync(PathEntity pathEntity) { ++ if (shouldContinuePathfind(pathEntity)) ++ return; ++ ++ Vec3D vec3d; ++ if (this.a()) { ++ this.applyPath(pathEntity); ++ } else if (pathEntity.f() < pathEntity.e()) { ++ vec3d = this.b(); ++ Vec3D vec3d1 = pathEntity.a(this.a, pathEntity.f()); ++ ++ if (vec3d.y > vec3d1.y && !this.a.isOnGround() && MathHelper.floor(vec3d.x) == MathHelper.floor(vec3d1.x) && MathHelper.floor(vec3d.z) == MathHelper.floor(vec3d1.z)) { ++ pathEntity.c(pathEntity.f() + 1); ++ } ++ } ++ ++ if (shouldContinuePathfind(pathEntity)) ++ return; ++ //PacketDebug.a(this.b, this.a, pathEntity, this.l); ++ vec3d = pathEntity.a((Entity) this.a); ++ BlockPosition blockposition = new BlockPosition(vec3d); ++ ++ this.a.getControllerMove().a(vec3d.x, this.b.getType(blockposition.down()).isAir() ? vec3d.y : PathfinderNormal.a((IBlockAccess) this.b, blockposition), vec3d.z, this.d); ++ } ++/* protected void l() { + Vec3D vec3d = this.b(); + + this.l = this.a.getWidth() > 0.75F ? this.a.getWidth() / 2.0F : 0.75F - this.a.getWidth() / 2.0F; +@@ -273,8 +360,26 @@ public abstract class NavigationAbstract { + } + + this.a(vec3d); +- } ++ }*/ ++ ++ // Akarin start - Async pathfinder, copied from above with param ++ protected void applyPath(PathEntity pathEntity) { ++ Vec3D vec3d = this.b(); ++ ++ this.l = this.a.getWidth() > 0.75F ? this.a.getWidth() / 2.0F : 0.75F - this.a.getWidth() / 2.0F; ++ BaseBlockPosition baseblockposition = pathEntity.g(); ++ double d0 = Math.abs(this.a.locX() - ((double) baseblockposition.getX() + 0.5D)); ++ double d1 = Math.abs(this.a.locY() - (double) baseblockposition.getY()); ++ double d2 = Math.abs(this.a.locZ() - ((double) baseblockposition.getZ() + 0.5D)); ++ boolean flag = d0 < (double) this.l && d2 < (double) this.l && d1 < 1.0D; + ++ if (flag || this.a.b(pathEntity.h().l) && this.b(vec3d)) { ++ pathEntity.c(pathEntity.f() + 1); ++ } ++ ++ this.applyPath0(pathEntity, vec3d); ++ } ++ // Akarin end + private boolean b(Vec3D vec3d) { + if (this.c.e() <= this.c.f() + 1) { + return false; +@@ -324,7 +429,39 @@ public abstract class NavigationAbstract { + } + + } ++ // Akarin start - Async pathfinder, copied from above with param ++ protected void applyPath0(PathEntity pathEntity, Vec3D vec3d) { ++ if (this.e - this.f > 100) { ++ if (vec3d.distanceSquared(this.g) < 2.25D) { ++ this.o(); ++ } ++ ++ this.f = this.e; ++ this.g = vec3d; ++ } ++ ++ if (!pathEntity.b()) { ++ BaseBlockPosition baseblockposition = pathEntity.g(); ++ ++ if (baseblockposition.equals(this.h)) { ++ this.i += SystemUtils.getMonotonicMillis() - this.j; ++ } else { ++ this.h = baseblockposition; ++ double d0 = vec3d.f(Vec3D.c(this.h)); ++ ++ this.k = this.a.dM() > 0.0F ? d0 / (double) this.a.dM() * 1000.0D : 0.0D; ++ } ++ ++ if (this.k > 0.0D && (double) this.i > this.k * 3.0D) { ++ this.e(); ++ this.o(); ++ } ++ ++ this.j = SystemUtils.getMonotonicMillis(); ++ } + ++ } ++ // Akarin end + private void e() { + this.h = BaseBlockPosition.ZERO; + this.i = 0L; +@@ -389,7 +526,11 @@ public abstract class NavigationAbstract { + public boolean r() { + return this.o.e(); + } +- ++ // Akarin start - Async pathfinder, copied from above with param ++ public static boolean shouldContinuePathfind(PathEntity pathEntity) { ++ return pathEntity == null || pathEntity.b(); ++ } ++ // Akarin end + public void b(BlockPosition blockposition) { + if (this.c != null && !this.c.b() && this.c.e() != 0) { // Tuinity - diff on change - needed for isViableForPathRecalculationChecking() + PathPoint pathpoint = this.c.c(); +diff --git a/src/main/java/net/minecraft/server/NavigationFlying.java b/src/main/java/net/minecraft/server/NavigationFlying.java +index 0c33a0c9d59d79a39826b5ee14144604717ffebe..cf3f4c1a2a89cce0345566a62faa34ef7e93c603 100644 +--- a/src/main/java/net/minecraft/server/NavigationFlying.java ++++ b/src/main/java/net/minecraft/server/NavigationFlying.java +@@ -28,7 +28,7 @@ public class NavigationFlying extends NavigationAbstract { + return this.a(entity.getChunkCoordinates(), entity, i); // Paper - Forward target entity + } + +- @Override ++/* @Override + public void c() { + ++this.e; + if (this.m) { +@@ -53,6 +53,31 @@ public class NavigationFlying extends NavigationAbstract { + this.a.getControllerMove().a(vec3d.x, vec3d.y, vec3d.z, this.d); + } + } ++ }*/ ++ ++ // This was copied from above partly with param ++ @Override ++ public void doTickAsync(PathEntity pathEntity) { ++ if (shouldContinuePathfind(pathEntity)) ++ return; ++ ++ Vec3D vec3d; ++ if (this.a()) { ++ this.applyPath(pathEntity); ++ } else if (pathEntity != null && pathEntity.f() < pathEntity.e()) { ++ vec3d = pathEntity.a(this.a, pathEntity.f()); ++ if (MathHelper.floor(this.a.locX()) == MathHelper.floor(vec3d.x) && MathHelper.floor(this.a.locY()) == MathHelper.floor(vec3d.y) && MathHelper.floor(this.a.locZ()) == MathHelper.floor(vec3d.z)) { ++ pathEntity.c(pathEntity.f() + 1); ++ } ++ } ++ ++ if (shouldContinuePathfind(pathEntity)) ++ return; ++ //PacketDebug.a(this.b, this.a, pathEntity, this.l); ++ vec3d = pathEntity.a((Entity) this.a); ++ BlockPosition blockposition = new BlockPosition(vec3d); ++ ++ this.a.getControllerMove().a(vec3d.x, vec3d.y, vec3d.z, this.d); + } + + @Override +diff --git a/src/main/java/net/minecraft/server/Pathfinder.java b/src/main/java/net/minecraft/server/Pathfinder.java +index 22424e7e97015aae2ce3dc6c42eecef257e354e0..3365adb364fc9450dba773f4fe626b81c596f49c 100644 +--- a/src/main/java/net/minecraft/server/Pathfinder.java ++++ b/src/main/java/net/minecraft/server/Pathfinder.java +@@ -23,7 +23,7 @@ public class Pathfinder { + } + + @Nullable +- public PathEntity a(ChunkCache chunkcache, EntityInsentient entityinsentient, Set set, float f, int i, float f1) { ++ public synchronized PathEntity a(ChunkCache chunkcache, EntityInsentient entityinsentient, Set set, float f, int i, float f1) { // Akarin - synchronized + this.d.a(); + this.c.a(chunkcache, entityinsentient); + PathPoint pathpoint = this.c.b(); +diff --git a/src/main/java/net/minecraft/server/PathfinderTurtle.java b/src/main/java/net/minecraft/server/PathfinderTurtle.java +index cea160885783e8666b616375eac44ba6d1880e1f..9598563b4f97500fd3fba0165813d564d9c96c4f 100644 +--- a/src/main/java/net/minecraft/server/PathfinderTurtle.java ++++ b/src/main/java/net/minecraft/server/PathfinderTurtle.java +@@ -148,7 +148,7 @@ public class PathfinderTurtle extends PathfinderNormal { + if (pathtype == PathType.OPEN) { + AxisAlignedBB axisalignedbb = new AxisAlignedBB((double) i - d2 + 0.5D, (double) j + 0.001D, (double) k - d2 + 0.5D, (double) i + d2 + 0.5D, (double) ((float) j + this.b.getHeight()), (double) k + d2 + 0.5D); + +- if (!this.b.world.getCubes(this.b, axisalignedbb)) { ++ if (!this.a.getCubes(this.b, axisalignedbb)) { // Akarin - use chunk cache + return null; + } + +diff --git a/src/main/java/net/minecraft/server/PathfinderWater.java b/src/main/java/net/minecraft/server/PathfinderWater.java +index fba6692a1e537b90e20aa448567c0ad6db653332..d576edc8c30288e98aeda8f1cb561b22c6b37536 100644 +--- a/src/main/java/net/minecraft/server/PathfinderWater.java ++++ b/src/main/java/net/minecraft/server/PathfinderWater.java +@@ -63,7 +63,7 @@ public class PathfinderWater extends PathfinderAbstract { + @Override + protected PathPoint a(int i, int j, int k) { + PathPoint pathpoint = null; +- PathType pathtype = this.a(this.b.world, i, j, k); ++ PathType pathtype = this.a(this.a, i, j, k); // Akarin - use chunk cache + float f = this.b.a(pathtype); + + if (f >= 0.0F) { diff --git a/scripts/fixPatch.sh b/scripts/fixPatch.sh new file mode 100644 index 00000000..a34e7cc1 --- /dev/null +++ b/scripts/fixPatch.sh @@ -0,0 +1,30 @@ +cd Yatopia-$2 +for filename in $1/patches/$2/*.patch; do + # Abort previous applying operation + git am --abort >/dev/null 2>&1 + # Apply our patches on top Paper in our dirs + git am --reject --whitespace=fix --no-utf8 --3way --ignore-whitespace $filename || ( + #files=`$gitcmd diff --name-only | grep -E '.rej$' ` + #if [[ files != null ]]; then + # for filerej in files; do + # echo "Error found .rej file! Deleting. This might have unforseen consqunces!" + # rm -f filerej + # done + #fi + filenamend="${filename##*/}" + filenamens=${filenamend%/*} + filenameedited=${filenamens%.*} # retain the part before the period + filenameedited=${filenameedited:5} # retain the part after the frist slash + git add . + git commit -m $filenameedited + ) + echo "Press any key to continue" + while [ true ] ; do + read -t 3 -n 1 + if [ $? = 0 ] ; then + exit ; + else + echo "waiting for the keypress" + fi + done +done diff --git a/yatopia b/yatopia index 92647e23..adb1258c 100755 --- a/yatopia +++ b/yatopia @@ -84,6 +84,9 @@ case "$1" in rm -rf Paper echo "Cleaned build files" ;; + "fp" | "fpatch" | "fixpatch") + $scriptdir/fixPatch.sh "$basedir" $2 || exit 1 + ;; "f" | "fu" | "full" | "fullbuild") ( echo "$JAVA_VERSION"