diff --git a/.gitignore b/.gitignore index 8e362f6..2984095 100644 --- a/.gitignore +++ b/.gitignore @@ -48,5 +48,6 @@ run/ sakura-server sakura-api +paper-api-generator !gradle/wrapper/gradle-wrapper.jar diff --git a/build.gradle.kts b/build.gradle.kts index afbd016..1714f81 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -57,5 +57,11 @@ paperweight { serverPatchDir.set(layout.projectDirectory.dir("patches/server")) serverOutputDir.set(layout.projectDirectory.dir("sakura-server")) } + patchTasks.register("generatedApi") { + isBareDirectory = true + upstreamDirPath = "paper-api-generator/generated" + patchDir = layout.projectDirectory.dir("patches/generatedApi") + outputDir = layout.projectDirectory.dir("paper-api-generator/generated") + } } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 9413ea1..4f61dfa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group=me.samsuik.sakura version=1.20.4-R0.1-SNAPSHOT mcVersion=1.20.4 -paperRef=07b956e3a30d9cd192111829b59bdf4372f128b1 +paperRef=4939f8711884901ddf1c56337f606de71cdae78d org.gradle.jvmargs=-Xmx2G diff --git a/patches/api/0001-Customise-Version-Command.patch b/patches/api/0001-Customise-Version-Command.patch index 6108f48..84e08ca 100644 --- a/patches/api/0001-Customise-Version-Command.patch +++ b/patches/api/0001-Customise-Version-Command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Customise Version Command diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 884902cb7f86c0b56594ccafc7d05c6c7a23ab53..d38fbaf2ee60036f5b24566b38cfcee3080bd822 100644 +index ca27559cf4aa1c2e44fdca2022e213b1b1c80f4e..958dfcccc79aeeb5d457ee2fd0d5db05d859366a 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -128,6 +128,20 @@ public final class Bukkit { +@@ -129,6 +129,20 @@ public final class Bukkit { // Paper end } diff --git a/patches/api/0003-Visibility-API.patch b/patches/api/0003-Visibility-API.patch index 8b789c7..6f561cd 100644 --- a/patches/api/0003-Visibility-API.patch +++ b/patches/api/0003-Visibility-API.patch @@ -153,10 +153,10 @@ index 0000000000000000000000000000000000000000..0483f5a19ff3d4e5e6528c3e4be549fd + +} diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 962283d336e6d53941cebbc3a995d403ff989f66..8022f89793a557e0c8c03b78b4a1c5b3aa983306 100644 +index 254a02ddb5dc867c9dd6c2086791f7ab94247fd3..0528c0ab4c059575e7cc00e5e1cd52ebacb95e67 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -54,6 +54,15 @@ import org.jetbrains.annotations.Nullable; +@@ -56,6 +56,15 @@ import org.jetbrains.annotations.Nullable; */ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginMessageRecipient, net.kyori.adventure.identity.Identified, net.kyori.adventure.bossbar.BossBarViewer, com.destroystokyo.paper.network.NetworkClient { // Paper diff --git a/patches/api/0006-Falling-Block-Parity-API.patch b/patches/api/0006-Falling-Block-Parity-API.patch index 2c33fd1..a1f9e3a 100644 --- a/patches/api/0006-Falling-Block-Parity-API.patch +++ b/patches/api/0006-Falling-Block-Parity-API.patch @@ -5,13 +5,13 @@ Subject: [PATCH] Falling Block Parity API diff --git a/src/main/java/org/bukkit/entity/FallingBlock.java b/src/main/java/org/bukkit/entity/FallingBlock.java -index f3d5cd5fd2418e493fffed3a3735c00bf04e214d..b6fd3b11cf41aae59d81974ced37ca7722df29ca 100644 +index 2479453b96a75fda2c307261f84c91034e73000d..a8e3a1c34957b7f7e225dc9932edbd300755be23 100644 --- a/src/main/java/org/bukkit/entity/FallingBlock.java +++ b/src/main/java/org/bukkit/entity/FallingBlock.java @@ -183,4 +183,19 @@ public interface FallingBlock extends Entity, me.samsuik.sakura.entity.merge.Mer */ void shouldAutoExpire(boolean autoExpires); - // Paper End - Auto expire setting + // Paper end - Auto expire setting + // Sakura start + /** + * Gets if falling block has height parity diff --git a/patches/api/0007-Local-Value-Storage-API.patch b/patches/api/0007-Local-Value-Storage-API.patch index 98ed5ac..f61ee4f 100644 --- a/patches/api/0007-Local-Value-Storage-API.patch +++ b/patches/api/0007-Local-Value-Storage-API.patch @@ -153,10 +153,10 @@ index 0000000000000000000000000000000000000000..0f7da96d434cd699470e050898712898 + +} diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index 567a36a4887da8994c9170e2885aa8cc357efa0c..b123dcd80955c7e9dc40a7ecb4307c7d977135fd 100644 +index c5fe36050eeaff80cfb989fe2f38370215af6fe5..c91d6af3cc13a1b290e2b362a3017f6536046831 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java -@@ -155,6 +155,10 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient +@@ -157,6 +157,10 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient return new Location(this, x, y, z); } // Paper end diff --git a/patches/server/0001-Branding-changes.patch b/patches/server/0001-Branding-changes.patch index d6a0e68..5282d12 100644 --- a/patches/server/0001-Branding-changes.patch +++ b/patches/server/0001-Branding-changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Branding changes From ForkPaper. diff --git a/build.gradle.kts b/build.gradle.kts -index 58da26ad2f128ba0b66f86820f60853f4be352f0..732d617578b58c0430b42d1c84efc54fb3c43b5e 100644 +index ce3747d8d2a8f4327766cf23d5aaa72cfcb380bc..a50a606b7b8a4ae7a7ebf1d0cf6f4dc1d0be1e4e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,8 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { @@ -34,23 +34,23 @@ index 58da26ad2f128ba0b66f86820f60853f4be352f0..732d617578b58c0430b42d1c84efc54f "Specification-Title" to "Bukkit", "Specification-Version" to project.version, diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 34f19ac897a30c0c4e3ab406013fcca1c8b7db93..6e1c140d0d26728d64b827f6f3e5a450a37942c0 100644 +index d06185566b447c432d4dc2e3ba04d121bcdbc71b..27134af410284f734abe29d834906f7e51cf05ea 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1866,7 +1866,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return "Sakura"; // Sakura - Sakura > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! +- return "Paper"; // Paper ++ return "Sakura"; // Sakura // Paper } public SystemReport fillSystemReport(SystemReport details) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 142d2c48239d4ebe3896218536656d116cd24d7c..8e47a8a4fde1eb390b4df5b02cb7bc9170bc1e12 100644 +index 9f7ed337463cc9bb370a5541d9de5cd8f9c1a78a..b77b2e5a0e90017828b3a7814ca1bff99f763415 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -264,7 +264,7 @@ import javax.annotation.Nullable; // Paper +@@ -266,7 +266,7 @@ import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper public final class CraftServer implements Server { diff --git a/patches/server/0004-Sakura-Configuration-Files.patch b/patches/server/0004-Sakura-Configuration-Files.patch index 9e45557..3b2a485 100644 --- a/patches/server/0004-Sakura-Configuration-Files.patch +++ b/patches/server/0004-Sakura-Configuration-Files.patch @@ -890,21 +890,21 @@ index 0000000000000000000000000000000000000000..141b15887ca075fef5d36ff15125b3e0 + +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6e1c140d0d26728d64b827f6f3e5a450a37942c0..dbd88282420e73df44b7a2ea52a7abcbab7e51c9 100644 +index 27134af410284f734abe29d834906f7e51cf05ea..eb04fab84e266b11ef4e531cb7ea8504a1e46aac 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -306,6 +306,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), executor); // Paper - Async-Anti-Xray - Pass executor -+ super(iworlddataserver, resourcekey, minecraftserver.registryAccess(), worlddimension.type(), minecraftserver::getProfiler, false, flag, i, minecraftserver.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), () -> minecraftserver.sakuraConfigurations.createWorldConfig(me.samsuik.sakura.configuration.SakuraConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), minecraftserver.registryAccess())), executor); // Paper - Async-Anti-Xray - Pass executor +- super(iworlddataserver, resourcekey, minecraftserver.registryAccess(), worlddimension.type(), minecraftserver::getProfiler, false, flag, i, minecraftserver.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), executor); // Paper - create paper world configs; Async-Anti-Xray: Pass executor ++ super(iworlddataserver, resourcekey, minecraftserver.registryAccess(), worlddimension.type(), minecraftserver::getProfiler, false, flag, i, minecraftserver.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), () -> minecraftserver.sakuraConfigurations.createWorldConfig(me.samsuik.sakura.configuration.SakuraConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), minecraftserver.registryAccess())), executor); // Sakura // Paper - create paper world configs; Async-Anti-Xray: Pass executor this.pvpMode = minecraftserver.isPvpAllowed(); this.convertable = convertable_conversionsession; this.uuid = WorldUUID.getUUID(convertable_conversionsession.levelDirectory.path().toFile()); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 6403341f2e9d7ac4251336cb0bcc5d79dbb7bb0e..98086f40f83cc1af71dde06cb3b682edaddb0369 100644 +index 19f23a6c8fb5c02843c27fb8a242ec9d0d1b538b..18a26062c114ef2b67cb7fbbffc8e2dc14b4e097 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -177,6 +177,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -171,6 +171,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return this.paperConfig; } - // Paper end + // Paper end - add paper world config + // Sakura start + private final me.samsuik.sakura.configuration.WorldConfiguration sakuraConfig; + public me.samsuik.sakura.configuration.WorldConfiguration sakuraConfig() { @@ -958,23 +958,23 @@ index 6403341f2e9d7ac4251336cb0bcc5d79dbb7bb0e..98086f40f83cc1af71dde06cb3b682ed public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray public final co.aikar.timings.WorldTimingsHandler timings; // Paper -@@ -213,9 +219,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -207,9 +213,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public abstract ResourceKey getTypeKey(); -- protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - Async-Anti-Xray - Pass executor -+ protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura // Paper - Async-Anti-Xray - Pass executor +- protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor ++ protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura // Paper - create paper world config; Async-Anti-Xray: Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot - this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper + this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config + this.sakuraConfig = sakuraWorldConfigCreator.get(); // Sakura this.generator = gen; this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 8e47a8a4fde1eb390b4df5b02cb7bc9170bc1e12..2e6c093a381110105ad2f8c0fae8e23dee0fb88e 100644 +index b77b2e5a0e90017828b3a7814ca1bff99f763415..6ae1be6e4a52f36eb1d6793f0e4db50455d99e85 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1037,6 +1037,7 @@ public final class CraftServer implements Server { +@@ -1054,6 +1054,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); @@ -982,7 +982,7 @@ index 8e47a8a4fde1eb390b4df5b02cb7bc9170bc1e12..2e6c093a381110105ad2f8c0fae8e23d for (ServerLevel world : this.console.getAllLevels()) { // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters, config.spawnAnimals); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) -@@ -1067,6 +1068,7 @@ public final class CraftServer implements Server { +@@ -1084,6 +1085,7 @@ public final class CraftServer implements Server { this.reloadData(); org.spigotmc.SpigotConfig.registerCommands(); // Spigot io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper @@ -991,7 +991,7 @@ index 8e47a8a4fde1eb390b4df5b02cb7bc9170bc1e12..2e6c093a381110105ad2f8c0fae8e23d this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index a74a8a027c99eef199c1a6a54232ac2c8ffb9d08..0bf24ee26eb96f02918fd82b5967681e3df2ce85 100644 +index ce341f42b3a5e17fb6d1f7de8057e73137ae2a6e..703a485a2483305e34ecdf6cc259dd2ca2914749 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -174,6 +174,14 @@ public class Main { diff --git a/patches/server/0005-Local-Config-and-Value-Storage-API.patch b/patches/server/0005-Local-Config-and-Value-Storage-API.patch index f48f90d..6ab1c43 100644 --- a/patches/server/0005-Local-Config-and-Value-Storage-API.patch +++ b/patches/server/0005-Local-Config-and-Value-Storage-API.patch @@ -219,22 +219,22 @@ index 0000000000000000000000000000000000000000..fbd877356594f0cf8934452522cef434 + +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index dbd88282420e73df44b7a2ea52a7abcbab7e51c9..b5e2ae560431cd3ecfc780deb25488016c0ad0e7 100644 +index eb04fab84e266b11ef4e531cb7ea8504a1e46aac..23e5fcffe6e1b1a12af5c7399dd8b2f6e0d2f5ff 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1744,6 +1744,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> sender) { if (this.entity.isRemoved()) { // CraftBukkit start - Remove useless error spam, just return -@@ -292,12 +311,19 @@ public class ServerEntity { +@@ -298,12 +317,19 @@ public class ServerEntity { // CraftBukkit end } @@ -348,7 +348,7 @@ index 35674f92a67f93382103c2766df4b678ba5c862f..83c4639c2bdca4dc4281d9f5eca104af } boolean flag = this.trackDelta; -@@ -367,6 +393,32 @@ public class ServerEntity { +@@ -373,6 +399,32 @@ public class ServerEntity { } } @@ -381,7 +381,7 @@ index 35674f92a67f93382103c2766df4b678ba5c862f..83c4639c2bdca4dc4281d9f5eca104af private void sendDirtyEntityData() { SynchedEntityData datawatcher = this.entity.getEntityData(); -@@ -374,7 +426,7 @@ public class ServerEntity { +@@ -380,7 +432,7 @@ public class ServerEntity { if (list != null) { this.trackedDataValues = datawatcher.getNonDefaultValues(); @@ -391,10 +391,10 @@ index 35674f92a67f93382103c2766df4b678ba5c862f..83c4639c2bdca4dc4281d9f5eca104af if (this.entity instanceof LivingEntity) { diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 033f24f57cca49bba4a36c50c4b1860645d95440..5eee6ce1122ea21bd3ceaf4bb1ac365b9aa0d6da 100644 +index 5c125a044536f65637ca82870a4a9d8d7de6ef40..730ad919eef9e38bbeea7cfd1153065b14f12ceb 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1962,7 +1962,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1941,7 +1941,7 @@ public class ServerLevel extends Level implements WorldGenLevel { while (iterator.hasNext()) { ServerPlayer entityplayer = (ServerPlayer) iterator.next(); @@ -404,12 +404,12 @@ index 033f24f57cca49bba4a36c50c4b1860645d95440..5eee6ce1122ea21bd3ceaf4bb1ac365b } } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index be05a52be037042c6158100e2ce880b8ed415d53..3b2b020c5a756a9eb3f100277d96c95a10b2de29 100644 +index 58591bf2f63b9c5e97d9ce4188dff3366968a178..164a5566005078ca1ba4f4b9deb9e149916704c2 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -261,6 +261,7 @@ public class ServerPlayer extends Player { public final int[] mobCounts = new int[MOBCATEGORY_TOTAL_ENUMS]; // Paper - // Paper end - mob spawning rework + // Paper end - Optional per player mob spawns public final int[] mobBackoffCounts = new int[MOBCATEGORY_TOTAL_ENUMS]; // Paper - per player mob count backoff + public final me.samsuik.sakura.player.visibility.Visibility visibility = new me.samsuik.sakura.player.visibility.Visibility(); // Sakura - visiblity api @@ -446,7 +446,7 @@ index be05a52be037042c6158100e2ce880b8ed415d53..3b2b020c5a756a9eb3f100277d96c95a } diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index d28d0ef6105ddeb562ddf31ae9088739856941fc..0328179cb0134b54e61a4b60b98a780d9abeeaba 100644 +index 0306771b8f90dcdd77f151c19c6c2d75c41f8feb..7451f65cef49248793815965bda4bcbe257b722e 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -40,6 +40,23 @@ import org.bukkit.craftbukkit.util.Waitable; @@ -549,10 +549,10 @@ index d28d0ef6105ddeb562ddf31ae9088739856941fc..0328179cb0134b54e61a4b60b98a780d throw new ReportedException(crashreport); } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 8b630fc4da8a7fda08c416e70c22463f04c3b6b5..6d9cf8bb81597489729b57a8834bf0293471fbea 100644 +index ab5b259d8f72022c875cae73be25fe2da346c6b3..bb99728860c08e6c660e0e59906fde5c1a31f884 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -3114,6 +3114,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -3099,6 +3099,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl event.setCancelled(cancelled); AbstractContainerMenu oldContainer = this.player.containerMenu; // SPIGOT-1224 @@ -561,20 +561,22 @@ index 8b630fc4da8a7fda08c416e70c22463f04c3b6b5..6d9cf8bb81597489729b57a8834bf029 if (this.player.containerMenu != oldContainer) { return; diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 1be10c57e374ad4018c08d96cfb69397a2f541d3..33a317696c62243952bbf686ff3e52a776672599 100644 +index 906eded9a2ab61737a30cfe89292a71237ce4eb7..f426abb7e6db911dfb3609383fce6476fd4233ed 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -535,6 +535,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S - this.teleportTo(worldserver, null); - } - // Paper end - make end portalling safe -+ public boolean isPrimedTNT; // Sakura -+ public boolean isFallingBlock; // Sakura +@@ -566,6 +566,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S - public boolean isLegacyTrackingEntity = false; + public boolean updatingSectionStatus = false; + // Paper end ++ // Sakura start - visibility api and command ++ public boolean isPrimedTNT; ++ public boolean isFallingBlock; ++ // Sakura end - visibility api and command + public Entity(EntityType type, Level world) { + this.id = Entity.ENTITY_COUNTER.incrementAndGet(); diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index 45c07733f03b5c11f6d8e820f65dc950c70d9a67..3ec931c9aa9e2857e0c24eeb47c1048ace05f6fe 100644 +index 05b77bf1af82397c542fde19b54ee545448ce12e..af4875fd0ed635dde59ec579dc198558efab0533 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -73,6 +73,7 @@ public class FallingBlockEntity extends Entity { @@ -586,7 +588,7 @@ index 45c07733f03b5c11f6d8e820f65dc950c70d9a67..3ec931c9aa9e2857e0c24eeb47c1048a public FallingBlockEntity(Level world, double x, double y, double z, BlockState block) { diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index c3e47426382296d650fa00ce0bc1a82bf23c7877..62a3cd512d473d5ed673386d5c15091a09426945 100644 +index cd7b955754b809826048b80723e2e9055b373a4a..3c5e8c594ff63d93bdd052a6b648120c550f60f5 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java @@ -38,6 +38,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { @@ -598,23 +600,23 @@ index c3e47426382296d650fa00ce0bc1a82bf23c7877..62a3cd512d473d5ed673386d5c15091a public PrimedTnt(Level world, double x, double y, double z, @Nullable LivingEntity igniter) { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 646433f2db609f19dcc9da64232f3a3ab4a9d171..1d00a1499d9921ff66eaaf405fbbc0f44497fa0d 100644 +index 65a9b601204eb8e958e579a47cb0241d134228e2..89a6fc46b6cc2d0a2e3192cfd258cf358ffb25ca 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -226,6 +226,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -220,6 +220,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public abstract ResourceKey getTypeKey(); + public final it.unimi.dsi.fastutil.longs.Long2IntMap minimalTNT = new it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap(); // Sakura - visibility api + - protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura // Paper - Async-Anti-Xray - Pass executor + protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura // Paper - create paper world config; Async-Anti-Xray: Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot - this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper + this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index da63b4050be25dcb91d04df8c2fcc643cbb0751d..2331c21068720528d87bdb9e3f1bb76ea6fd45dd 100644 +index 206520f6f20b2e48b1eefdd4edb26510b88e4c92..50074d93709ad0b595629e86cc3a0832a840bf41 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -494,6 +494,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -458,6 +458,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { this.getHandle().displayName = name == null ? this.getName() : name; } diff --git a/patches/server/0008-Reduce-deltaMovement-Allocations.patch b/patches/server/0008-Reduce-deltaMovement-Allocations.patch index 3ab661c..6b7aba3 100644 --- a/patches/server/0008-Reduce-deltaMovement-Allocations.patch +++ b/patches/server/0008-Reduce-deltaMovement-Allocations.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Reduce deltaMovement Allocations diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 33a317696c62243952bbf686ff3e52a776672599..8cae7a1ac496995ebe59ad88c56fbc424ca98930 100644 +index f426abb7e6db911dfb3609383fce6476fd4233ed..d92e4db0051f128fac5653c7920c2466bff80143 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1237,7 +1237,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1240,7 +1240,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.tryCheckInsideBlocks(); float f = this.getBlockSpeedFactor(); @@ -17,15 +17,15 @@ index 33a317696c62243952bbf686ff3e52a776672599..8cae7a1ac496995ebe59ad88c56fbc42 // Paper start - remove expensive streams from here boolean noneMatch = true; AABB fireSearchBox = this.getBoundingBox().deflate(1.0E-6D); -@@ -2053,6 +2053,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2056,6 +2056,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public void moveTo(double x, double y, double z, float yaw, float pitch) { - // Paper - cancel entity velocity if teleported + // Paper start - Fix Entity Teleportation and cancel velocity if teleported if (!preserveMotion) { + this.movementDirty = false; // Sakura this.deltaMovement = Vec3.ZERO; } else { this.preserveMotion = false; -@@ -3455,29 +3456,33 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3457,29 +3458,33 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public void onAboveBubbleCol(boolean drag) { @@ -67,7 +67,7 @@ index 33a317696c62243952bbf686ff3e52a776672599..8cae7a1ac496995ebe59ad88c56fbc42 this.resetFallDistance(); } -@@ -4471,16 +4476,19 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4468,16 +4473,19 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S vec3d = vec3d.normalize(); } @@ -90,7 +90,7 @@ index 33a317696c62243952bbf686ff3e52a776672599..8cae7a1ac496995ebe59ad88c56fbc42 } this.fluidHeight.put(tag, d1); -@@ -4551,11 +4559,53 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4548,11 +4556,53 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return this.chunkPosition; } @@ -144,7 +144,7 @@ index 33a317696c62243952bbf686ff3e52a776672599..8cae7a1ac496995ebe59ad88c56fbc42 synchronized (this.posLock) { // Paper this.deltaMovement = velocity; } // Paper -@@ -4566,7 +4616,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4563,7 +4613,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public void setDeltaMovement(double x, double y, double z) { @@ -158,7 +158,7 @@ index 33a317696c62243952bbf686ff3e52a776672599..8cae7a1ac496995ebe59ad88c56fbc42 public final int getBlockX() { diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index 3ec931c9aa9e2857e0c24eeb47c1048ace05f6fe..ec8488a2ab16950052a3bff04be6e3ecc3b44891 100644 +index af4875fd0ed635dde59ec579dc198558efab0533..f345ab3886899e5823e5146b032c41f4e5ef5953 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -145,7 +145,7 @@ public class FallingBlockEntity extends Entity { @@ -170,7 +170,7 @@ index 3ec931c9aa9e2857e0c24eeb47c1048ace05f6fe..ec8488a2ab16950052a3bff04be6e3ec } this.move(MoverType.SELF, this.getDeltaMovement()); -@@ -192,7 +192,7 @@ public class FallingBlockEntity extends Entity { +@@ -190,7 +190,7 @@ public class FallingBlockEntity extends Entity { } else { BlockState iblockdata = this.level().getBlockState(blockposition); @@ -179,7 +179,7 @@ index 3ec931c9aa9e2857e0c24eeb47c1048ace05f6fe..ec8488a2ab16950052a3bff04be6e3ec if (!iblockdata.is(Blocks.MOVING_PISTON)) { if (!this.cancelDrop) { boolean flag2 = iblockdata.canBeReplaced((BlockPlaceContext) (new DirectionalPlaceContext(this.level(), blockposition, Direction.DOWN, ItemStack.EMPTY, Direction.UP))); -@@ -259,7 +259,7 @@ public class FallingBlockEntity extends Entity { +@@ -257,7 +257,7 @@ public class FallingBlockEntity extends Entity { } } @@ -189,7 +189,7 @@ index 3ec931c9aa9e2857e0c24eeb47c1048ace05f6fe..ec8488a2ab16950052a3bff04be6e3ec } diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index 62a3cd512d473d5ed673386d5c15091a09426945..12067c0372ad2803ffa2501a8296496a9ce7b292 100644 +index 3c5e8c594ff63d93bdd052a6b648120c550f60f5..bc77b3093dbc7312516817d8dd5a9b04534fb09e 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java @@ -74,7 +74,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { @@ -204,7 +204,7 @@ index 62a3cd512d473d5ed673386d5c15091a09426945..12067c0372ad2803ffa2501a8296496a @@ -84,9 +84,9 @@ public class PrimedTnt extends Entity implements TraceableEntity { return; } - // Paper end + // Paper end - Configurable TNT height nerf - this.setDeltaMovement(this.getDeltaMovement().scale(0.98D)); + this.scaleDeltaMovement(0.98D); // Sakura - reduce movement allocations if (this.onGround()) { @@ -214,28 +214,42 @@ index 62a3cd512d473d5ed673386d5c15091a09426945..12067c0372ad2803ffa2501a8296496a int i = this.getFuse() - 1; diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 9cd244090c294927a7a92c920854d2282ea3f021..3d4a75302d72bdbe47d0efbe08c89401dbe22a87 100644 +index d1e4bc32a740da4f7e6d5f6f9559a12813909a9e..39c30a295df9dfbc3c861f1678a958ef2ed2ba93 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java -@@ -619,10 +619,11 @@ public class Explosion { +@@ -617,10 +617,11 @@ public class Explosion { d8 *= d13; d9 *= d13; d10 *= d13; - Vec3 vec3d1 = new Vec3(d8, d9, d10); -+ // Sakura - moved down ++ Vec3 vec3d1 = null; // Sakura - move allocation below living entity condition + // CraftBukkit start - Call EntityKnockbackEvent + if (entity instanceof LivingEntity) { ++ vec3d1 = new Vec3(d8, d9, d10); // Sakura + Vec3 result = entity.getDeltaMovement().add(vec3d1); + org.bukkit.event.entity.EntityKnockbackEvent event = CraftEventFactory.callEntityKnockbackEvent((org.bukkit.craftbukkit.entity.CraftLivingEntity) entity.getBukkitEntity(), this.source, org.bukkit.event.entity.EntityKnockbackEvent.KnockbackCause.EXPLOSION, d13, vec3d1, result.x, result.y, result.z); + +@@ -635,9 +636,13 @@ public class Explosion { + vec3d1 = org.bukkit.craftbukkit.util.CraftVector.toNMS(paperEvent.getAcceleration()); + } + // Paper end - call EntityKnockbackByEntityEvent for explosions ++ // Sakura start - reduce deltamovement allocations ++ entity.setDeltaMovement(entity.getDeltaMovement().add(vec3d1)); ++ } else { ++ entity.addDeltaMovement(d8, d9, d10); ++ // Sakura end - reduce deltamovement allocations + } + // CraftBukkit end - entity.setDeltaMovement(entity.getDeltaMovement().add(vec3d1)); -+ entity.addDeltaMovement(d8, d9, d10); // Sakura reduce deltamovement allocations if (entity instanceof Player) { -+ Vec3 vec3d1 = new Vec3(d8, d9, d10); // Sakura Player entityhuman = (Player) entity; - if (!entityhuman.isSpectator() && (!entityhuman.isCreative() || !entityhuman.getAbilities().flying) && !level.paperConfig().environment.disableExplosionKnockback) { // Paper - Disable explosion knockback diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index e21867d3956078bb0db4ceed45e5811e9acd7377..c2daf4421b5838fe57dc16184c4a5a8c190fa641 100644 +index 22036ed3ea0629bc12981a8d91a03e55cc2117d6..73a453ef678ed90ebc1de4d1efc258ad81cf36b8 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java -@@ -468,7 +468,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -469,7 +469,7 @@ public class Block extends BlockBehaviour implements ItemLike { } public void updateEntityAfterFallOn(BlockGetter world, Entity entity) { diff --git a/patches/server/0009-Optional-Force-Position-Updates.patch b/patches/server/0009-Optional-Force-Position-Updates.patch index 5e6d9ee..cf2552b 100644 --- a/patches/server/0009-Optional-Force-Position-Updates.patch +++ b/patches/server/0009-Optional-Force-Position-Updates.patch @@ -5,21 +5,21 @@ Subject: [PATCH] Optional Force Position Updates diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index 12067c0372ad2803ffa2501a8296496a9ce7b292..c187a2714d5580a2d8db54d270999aa618c4c878 100644 +index bc77b3093dbc7312516817d8dd5a9b04534fb09e..61a6901c081c64ac576563958f905f0a943b056f 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java @@ -107,6 +107,14 @@ public class PrimedTnt extends Entity implements TraceableEntity { } } -+ // Sakura start - configurable force position updates ++ // Sakura start - configure force position updates + if (level().sakuraConfig().cannons.tnt.forcePositionUpdates) { + forcePositionUpdate(); + } + } + + private void forcePositionUpdate() { -+ // Sakura end - // Paper start - Optional prevent TNT from moving in water ++ // Sakura end - configure force position updates + // Paper start - Option to prevent TNT from moving in water if (!this.isRemoved() && this.wasTouchingWater && this.level().paperConfig().fixes.preventTntFromMovingInWater) { /* diff --git a/patches/server/0010-Load-Chunks-on-Movement.patch b/patches/server/0010-Load-Chunks-on-Movement.patch index 7e15a75..37e6c8b 100644 --- a/patches/server/0010-Load-Chunks-on-Movement.patch +++ b/patches/server/0010-Load-Chunks-on-Movement.patch @@ -51,30 +51,30 @@ index 658e63ebde81dc14c8ab5850fb246dc0aab25dea..f1ff1a67fee37ee7b241ceaa164fa4ee public static TicketType create(String name, Comparator argumentComparator) { return new TicketType<>(name, argumentComparator, 0L); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 8cae7a1ac496995ebe59ad88c56fbc424ca98930..218866882e3b08b1eb46b2a286bc7fe480db9c74 100644 +index d92e4db0051f128fac5653c7920c2466bff80143..38d416b4d9acf811f862cd2fbf88de8dfcef077c 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -537,6 +537,19 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S - // Paper end - make end portalling safe - public boolean isPrimedTNT; // Sakura - public boolean isFallingBlock; // Sakura -+ // Sakura start +@@ -570,6 +570,19 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S + public boolean isPrimedTNT; + public boolean isFallingBlock; + // Sakura end - visibility api and command ++ // Sakura start - load chunks on cannon entity movement + protected boolean loadChunks = false; + + private int getExtraCollisionFlags() { + int flags = 0; -+ ++ + if (this.loadChunks) { + flags |= io.papermc.paper.util.CollisionUtil.COLLISION_FLAG_LOAD_CHUNKS | io.papermc.paper.util.CollisionUtil.COLLISION_FLAG_ADD_TICKET; + } + + return flags; + } -+ // Sakura end ++ // Sakura end - load chunks on cannon entity movement - public boolean isLegacyTrackingEntity = false; - -@@ -1498,7 +1511,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S + public Entity(EntityType type, Level world) { + this.id = Entity.ENTITY_COUNTER.incrementAndGet(); +@@ -1501,7 +1514,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S io.papermc.paper.util.CollisionUtil.getCollisions( world, this, collisionBox, potentialCollisionsVoxel, potentialCollisionsBB, @@ -83,7 +83,7 @@ index 8cae7a1ac496995ebe59ad88c56fbc424ca98930..218866882e3b08b1eb46b2a286bc7fe4 null, null ); -@@ -4886,7 +4899,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4878,7 +4891,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S @Override public boolean isAlwaysTicking() { @@ -93,7 +93,7 @@ index 8cae7a1ac496995ebe59ad88c56fbc424ca98930..218866882e3b08b1eb46b2a286bc7fe4 public boolean mayInteract(Level world, BlockPos pos) { diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index ec8488a2ab16950052a3bff04be6e3ecc3b44891..1a018e1d2b6dd93be5e6209a2d52eade0b356f58 100644 +index f345ab3886899e5823e5146b032c41f4e5ef5953..3b0c6dbe6b473e2249846f894f85770d5f46ded8 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -74,6 +74,7 @@ public class FallingBlockEntity extends Entity { @@ -105,7 +105,7 @@ index ec8488a2ab16950052a3bff04be6e3ecc3b44891..1a018e1d2b6dd93be5e6209a2d52eade public FallingBlockEntity(Level world, double x, double y, double z, BlockState block) { diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index c187a2714d5580a2d8db54d270999aa618c4c878..0be7c39fbb19a0cdca3f5dc779c2690df5f08647 100644 +index 61a6901c081c64ac576563958f905f0a943b056f..9d92561eb38431ac01416900420793c21f89d82f 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java @@ -39,6 +39,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { @@ -117,7 +117,7 @@ index c187a2714d5580a2d8db54d270999aa618c4c878..0be7c39fbb19a0cdca3f5dc779c2690d public PrimedTnt(Level world, double x, double y, double z, @Nullable LivingEntity igniter) { diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index fa170cc1ce7011d201295b89718292d696c7fc24..2f48ac198610ee2a379bff4e056a6afe5f7f8a04 100644 +index 6ec3fc801453fd54c25b642e6fa71c19b463311d..99af90c9f4cd7b2e5e230e97f06e131a722b3f78 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -218,6 +218,17 @@ public class LevelChunk extends ChunkAccess { diff --git a/patches/server/0011-TPS-Graph-Command.patch b/patches/server/0011-TPS-Graph-Command.patch index 51ad65c..5307c76 100644 --- a/patches/server/0011-TPS-Graph-Command.patch +++ b/patches/server/0011-TPS-Graph-Command.patch @@ -360,7 +360,7 @@ index 0000000000000000000000000000000000000000..efbf8360657c862dd522d0264aa1c5d8 +} diff --git a/src/main/java/me/samsuik/sakura/utils/tps/TickTracking.java b/src/main/java/me/samsuik/sakura/utils/tps/TickTracking.java new file mode 100644 -index 0000000000000000000000000000000000000000..8a94b1a2cb1ff57664c97a7b471c99ec391103ae +index 0000000000000000000000000000000000000000..2886262ed8420f4e28cd264159e5cd70a39fe495 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/utils/tps/TickTracking.java @@ -0,0 +1,53 @@ @@ -400,7 +400,7 @@ index 0000000000000000000000000000000000000000..8a94b1a2cb1ff57664c97a7b471c99ec + history.remove(history.size() - 1); + + int entities = server.stream().mapToInt((world) -> world.entityTickList.entityCount()).sum(); -+ int loaded = server.stream().mapToInt((world) -> world.chunkSource.actualLoadedChunkCount()).sum(); ++ int loaded = server.stream().mapToInt((world) -> world.chunkSource.getInternallyLoadedChunks()).sum(); + + double mspt = Arrays.stream(msptSamples).average().orElse(0.0); + double max = Arrays.stream(msptSamples).max().orElse(0.0); @@ -418,55 +418,54 @@ index 0000000000000000000000000000000000000000..8a94b1a2cb1ff57664c97a7b471c99ec + +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 73dc4f245039805b635f9e89438104e3b7a93e7b..39081c0052a333580b22da10310d86de73693b2c 100644 +index f6a43cbd45834141e539f87f5bd7240ec3879955..06af35cba1a7b9c11cade2bcd0cc72c4bc28e56f 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1126,6 +1126,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { return false; } : this::haveTime); -+ tickTracking.tickSample((System.nanoTime() - curTime) / 1_000_000L); // Sakura ++ tickTracking.tickSample((System.nanoTime() - currentTime) / 1_000_000L); // Sakura this.profiler.popPush("nextTickWait"); this.mayHaveDelayedTasks = true; this.delayedTasksMaxNextTickTimeNanos = Math.max(Util.getNanos() + i, this.nextTickTimeNanos); diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 6e212f672579a3e08dc362c287be59ca5170d717..bc0f6555e9c3fcccf2d9a3bd47c76e6433dd6bff 100644 +index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..3662c364d0bf04c9d5ef3af84bceb4263c47df7f 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -74,6 +74,12 @@ public class ServerChunkCache extends ChunkSource { +@@ -92,6 +92,11 @@ public class ServerChunkCache extends ChunkSource { + this.clearCache(); + } - private final LevelChunk[] lastLoadedChunks = new LevelChunk[4 * 4]; - -+ // Sakura start - there's another method with the same name that returns how many chunks players have loaded -+ public int actualLoadedChunkCount() { ++ // Sakura start - tps graph command ++ public final int getInternallyLoadedChunks() { + return loadedChunkMap.size(); + } -+ // Sakura end -+ - private static int getChunkCacheKey(int x, int z) { - return x & 3 | ((z & 3) << 2); - } ++ // Sakura end - tps graph command + // CraftBukkit start - properly implement isChunkLoaded + public boolean isChunkLoaded(int chunkX, int chunkZ) { + ChunkHolder chunk = this.chunkMap.getUpdatingChunkIfPresent(ChunkPos.asLong(chunkX, chunkZ)); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index c33c9cb3a0e574e5284e48ffaf8d0945061ea388..f48eaebb0f9a10fb77e85619b2d2a4996e461195 100644 +index 730ad919eef9e38bbeea7cfd1153065b14f12ceb..7a89e4f70195c62c51bbf1993a0988a9c5706449 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -194,7 +194,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -193,7 +193,7 @@ public class ServerLevel extends Level implements WorldGenLevel { public final ServerChunkCache chunkSource; private final MinecraftServer server; public final PrimaryLevelData serverLevelData; // CraftBukkit - type @@ -493,7 +492,7 @@ index 4cdfc433df67afcd455422e9baf56f167dd712ae..1fcce60790cab6e7b137464ccd87e678 // Paper - replace with better logic, do not delay removals diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java -index 68602dfb171d47e47fd0710b4324013ef05214d0..6f21afd958fbb7037611ca01458b6848b93cc208 100644 +index 6c260403d91d640da0473a3df56e1c5582459fde..2d2d1eeaeb9e7f36263b8cecc753adf721b96435 100644 --- a/src/main/java/org/spigotmc/SpigotConfig.java +++ b/src/main/java/org/spigotmc/SpigotConfig.java @@ -283,7 +283,7 @@ public class SpigotConfig diff --git a/patches/server/0012-Optimise-New-Liquid-Level.patch b/patches/server/0012-Optimise-New-Liquid-Level.patch index 00eecbd..dcf8ea3 100644 --- a/patches/server/0012-Optimise-New-Liquid-Level.patch +++ b/patches/server/0012-Optimise-New-Liquid-Level.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Optimise New Liquid Level diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..6d59f8b68d644cb43939bcdf5239fa1caf54ed47 100644 +index 6d8ff6c06af5545634f255ed17dc1e489ece2548..67db57686dd29713128d5b233454b6147b8e460b 100644 --- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java +++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java @@ -137,7 +137,7 @@ public abstract class FlowingFluid extends Fluid { @@ -43,7 +43,7 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..6d59f8b68d644cb43939bcdf5239fa1c int i = 0; int j = 0; Iterator iterator = Direction.Plane.HORIZONTAL.iterator(); -@@ -227,17 +246,10 @@ public abstract class FlowingFluid extends Fluid { +@@ -226,17 +245,10 @@ public abstract class FlowingFluid extends Fluid { } } diff --git a/patches/server/0013-Slice-Packet-obfuscation-and-reduction.patch b/patches/server/0013-Slice-Packet-obfuscation-and-reduction.patch index d54a60c..3971a3d 100644 --- a/patches/server/0013-Slice-Packet-obfuscation-and-reduction.patch +++ b/patches/server/0013-Slice-Packet-obfuscation-and-reduction.patch @@ -19,13 +19,13 @@ The current packets modified/obfuscated are the following: # with packets instead of every single player within tracking distance diff --git a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java -index a043c382c37058032548a5192e17f5f816abe5a6..8e84afc92bef8192320dfe405609bf06ff0f9e15 100644 +index 58b602e550258c1062ee940bc46538dac95d8979..50c6647ef3755c3712bf095c14c820019d6318e1 100644 --- a/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java +++ b/src/main/java/net/minecraft/network/syncher/SynchedEntityData.java @@ -39,6 +39,7 @@ public class SynchedEntityData { private static final int GROW_FACTOR = 8; private SynchedEntityData.DataItem[] itemsArray = new SynchedEntityData.DataItem[DEFAULT_ENTRY_COUNT]; - // Paper end + // Paper end - Perf: array backed synched entity data + private boolean isForeignDirty; // Slice public SynchedEntityData(Entity trackedEntity) { @@ -155,7 +155,7 @@ index a043c382c37058032548a5192e17f5f816abe5a6..8e84afc92bef8192320dfe405609bf06 return SynchedEntityData.DataValue.create(this.accessor, this.value); } diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 83c4639c2bdca4dc4281d9f5eca104af3063bfa5..f7d8aaededd39ce52a9d0105f66fd759635b5288 100644 +index cce8f45c15b9a9acfbf9b769f7670cfd0969d62f..4237442c649845ffb0ff613e6c76ca478191e950 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java @@ -148,7 +148,7 @@ public class ServerEntity { @@ -167,7 +167,7 @@ index 83c4639c2bdca4dc4281d9f5eca104af3063bfa5..f7d8aaededd39ce52a9d0105f66fd759 int i; int j; -@@ -395,11 +395,23 @@ public class ServerEntity { +@@ -401,11 +401,23 @@ public class ServerEntity { } // Sakura start - visibility api @@ -193,7 +193,7 @@ index 83c4639c2bdca4dc4281d9f5eca104af3063bfa5..f7d8aaededd39ce52a9d0105f66fd759 var copyOfDirtyItems = Lists.newArrayList(packedValues); copyOfDirtyItems.removeIf((data) -> data.id() == 8); -@@ -426,7 +438,7 @@ public class ServerEntity { +@@ -432,7 +444,7 @@ public class ServerEntity { if (list != null) { this.trackedDataValues = datawatcher.getNonDefaultValues(); @@ -203,10 +203,10 @@ index 83c4639c2bdca4dc4281d9f5eca104af3063bfa5..f7d8aaededd39ce52a9d0105f66fd759 if (this.entity instanceof LivingEntity) { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 218866882e3b08b1eb46b2a286bc7fe480db9c74..7fad22ee8a24399acbae6a9bc07ad5de39d41020 100644 +index 38d416b4d9acf811f862cd2fbf88de8dfcef077c..9a7b9f72531dfaecb55c089eea412e81ee00ef65 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3399,7 +3399,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3402,7 +3402,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.entityData.markDirty(Entity.DATA_AIR_SUPPLY_ID); return; } @@ -216,7 +216,7 @@ index 218866882e3b08b1eb46b2a286bc7fe480db9c74..7fad22ee8a24399acbae6a9bc07ad5de } diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index 1a018e1d2b6dd93be5e6209a2d52eade0b356f58..0cf39ea76902e62b712057fe1bb80e3af8190fc4 100644 +index 3b0c6dbe6b473e2249846f894f85770d5f46ded8..85da566b151d6c9995b5c41333c4cd05235c1d70 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -110,7 +110,7 @@ public class FallingBlockEntity extends Entity { @@ -229,10 +229,10 @@ index 1a018e1d2b6dd93be5e6209a2d52eade0b356f58..0cf39ea76902e62b712057fe1bb80e3a public BlockPos getStartPos() { diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index 0be7c39fbb19a0cdca3f5dc779c2690df5f08647..cc30c119f519e7cd947ab40beae56e493e977176 100644 +index 9d92561eb38431ac01416900420793c21f89d82f..46680f551f83b91581440d89a1c35c048db03638 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -@@ -196,7 +196,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { +@@ -188,7 +188,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { } public void setFuse(int fuse) { @@ -242,10 +242,10 @@ index 0be7c39fbb19a0cdca3f5dc779c2690df5f08647..cc30c119f519e7cd947ab40beae56e49 public int getFuse() { diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index ccc1caafb0ada52c7b99b7358253826f5390843e..ad8114246633498c22d615f1bc669ea83f97c930 100644 +index 5ca1f834f311a87323ced2578535e66efa14e47f..d89e7f021cc4ac61550ca5dbf660323fc1aec01f 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -644,7 +644,7 @@ public abstract class Player extends LivingEntity { +@@ -645,7 +645,7 @@ public abstract class Player extends LivingEntity { public void increaseScore(int score) { int j = this.getScore(); diff --git a/patches/server/0017-Add-utility-methods-to-EntitySlices.patch b/patches/server/0017-Add-utility-methods-to-EntitySlices.patch index f4d346e..20fe3a0 100644 --- a/patches/server/0017-Add-utility-methods-to-EntitySlices.patch +++ b/patches/server/0017-Add-utility-methods-to-EntitySlices.patch @@ -41,23 +41,23 @@ index 2d79633d86007c7d40eecf5f9271fa3f351b72b5..d917a19c838ed3d74322abd85e1f737e public void getEntities(final Entity except, final AABB box, final List into, final Predicate predicate) { if (this.count == 0) { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 8fd4d63fdbff9c454d903f4797ec9281df7266fc..9ef1d77dd87793577223402808ff7a6baad42ee4 100644 +index 89a6fc46b6cc2d0a2e3192cfd258cf358ffb25ca..cb0197f9fbdd32f6338926cc4c45c26fd673a121 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -228,6 +228,16 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -222,6 +222,16 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public final it.unimi.dsi.fastutil.longs.Long2IntMap minimalTNT = new it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap(); // Sakura - visibility api -+ // Sakura start -+ public Entity[] getSectionEntities(int chunkX, int chunkY, int chunkZ) { ++ // Sakura start - add utility method for accessing ChunkEntitySlices ++ public final Entity[] getSectionEntities(int chunkX, int chunkY, int chunkZ) { + var slices = ((ServerLevel)this).getEntityLookup().getChunk(chunkX, chunkZ); + if (slices == null) { + return new Entity[0]; + } + return slices.getSectionEntities(chunkY); + } -+ // Sakura end ++ // Sakura end - add utility method for accessing ChunkEntitySlices + - protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura // Paper - Async-Anti-Xray - Pass executor + protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura // Paper - create paper world config; Async-Anti-Xray: Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot - this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper + this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config diff --git a/patches/server/0018-Store-Entity-Data-State.patch b/patches/server/0018-Store-Entity-Data-State.patch index 230c112..207b7a4 100644 --- a/patches/server/0018-Store-Entity-Data-State.patch +++ b/patches/server/0018-Store-Entity-Data-State.patch @@ -52,33 +52,33 @@ index 0000000000000000000000000000000000000000..c9f2c5ae57878283e8c8bc3847fe63b9 + +} diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 7fad22ee8a24399acbae6a9bc07ad5de39d41020..393e951102c49d45a135b37ccd876283c5355710 100644 +index 9a7b9f72531dfaecb55c089eea412e81ee00ef65..88735691892aa19f30d4e686e88a3c09f565bb56 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -550,6 +550,34 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -583,6 +583,34 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return flags; } - // Sakura end -+ // Sakura start - entity state (from start of tick) + // Sakura end - load chunks on cannon entity movement ++ // Sakura start - store entity data/state + private @Nullable me.samsuik.sakura.entity.EntityState entityState = null; + -+ public Vec3 stuckSpeedMultiplier() { ++ public final Vec3 stuckSpeedMultiplier() { + return stuckSpeedMultiplier; + } + -+ public void storeEntityState() { ++ public final void storeEntityState() { + entityState = me.samsuik.sakura.entity.EntityState.of(this); + } + -+ public @Nullable me.samsuik.sakura.entity.EntityState entityState() { ++ public final @Nullable me.samsuik.sakura.entity.EntityState entityState() { + return entityState; + } + -+ public boolean compareState(Entity to) { ++ public final boolean compareState(Entity to) { + return to.entityState() != null && to.entityState().isCurrentState(this); + } + -+ public long getPackedOrigin() { ++ public final long getPackedOrigin() { + var v = getOriginVector(); + if (v == null) return Long.MIN_VALUE; + // Note: vector#getBlockN may not be 100% exact @@ -86,15 +86,15 @@ index 7fad22ee8a24399acbae6a9bc07ad5de39d41020..393e951102c49d45a135b37ccd876283 + // giving an incorrect position change it to Mth instead. + return BlockPos.asLong(v.getBlockX(), v.getBlockY(), v.getBlockZ()); + } -+ // Sakura end - - public boolean isLegacyTrackingEntity = false; ++ // Sakura end - store entity data/state + public Entity(EntityType type, Level world) { + this.id = Entity.ENTITY_COUNTER.incrementAndGet(); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index bf361855ecf8c1d5dee2e735278243b836bf0f2a..902ec524d209ab56a6dadb260559910c76dbf96b 100644 +index cb0197f9fbdd32f6338926cc4c45c26fd673a121..5927568271168548be5b2a2113764d8549ed2b17 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1342,6 +1342,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1332,6 +1332,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public void guardEntityTick(Consumer tickConsumer, T entity) { try { diff --git a/patches/server/0019-Merge-Cannon-Entities.patch b/patches/server/0019-Merge-Cannon-Entities.patch index 0d2836a..605c99f 100644 --- a/patches/server/0019-Merge-Cannon-Entities.patch +++ b/patches/server/0019-Merge-Cannon-Entities.patch @@ -138,22 +138,22 @@ index 0000000000000000000000000000000000000000..90f36b2d3847e058cfa2b748838fc6ea + +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 39081c0052a333580b22da10310d86de73693b2c..08e8de35fddcd54c5f466edb264aa454a5935c42 100644 +index 06af35cba1a7b9c11cade2bcd0cc72c4bc28e56f..f68da3e0168c9462aa05cce11e523b9cefefd7e7 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1749,6 +1749,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { if (!entity.isRemoved()) { if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed -@@ -918,6 +919,15 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -912,6 +913,15 @@ public class ServerLevel extends Level implements WorldGenLevel { entity.stopRiding(); } @@ -178,13 +178,13 @@ index 431af1cc839e89e5d9831cd8533971a50a01d7c8..620966965f3d73cd6fdbf03dabe2605c this.guardEntityTick(this::tickNonPassenger, entity); gameprofilerfiller.pop(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 393e951102c49d45a135b37ccd876283c5355710..df0cef2fdf94084486221c9d8223ef8f826c5549 100644 +index 88735691892aa19f30d4e686e88a3c09f565bb56..2320cbd0714294c078ec6e16c687713d28b0c174 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -578,6 +578,108 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -611,6 +611,108 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return BlockPos.asLong(v.getBlockX(), v.getBlockY(), v.getBlockZ()); } - // Sakura end + // Sakura end - store entity data/state + // Sakura start - cannon entity merging + // List of merged entities, should be naturally sorted (oldest -> youngest) + private final List mergeList = new java.util.ArrayList<>(1); @@ -286,11 +286,11 @@ index 393e951102c49d45a135b37ccd876283c5355710..df0cef2fdf94084486221c9d8223ef8f + bukkitEntity = entity.bukkitEntity; + } + } -+ // Sakura end ++ // Sakura end - cannon entity merging - public boolean isLegacyTrackingEntity = false; - -@@ -656,6 +758,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S + public Entity(EntityType type, Level world) { + this.id = Entity.ENTITY_COUNTER.incrementAndGet(); +@@ -659,6 +761,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.getEntityData().registrationLocked = true; // Spigot this.setPos(0.0D, 0.0D, 0.0D); this.eyeHeight = this.getEyeHeight(net.minecraft.world.entity.Pose.STANDING, this.dimensions); @@ -298,7 +298,7 @@ index 393e951102c49d45a135b37ccd876283c5355710..df0cef2fdf94084486221c9d8223ef8f } public boolean isColliding(BlockPos pos, BlockState state) { -@@ -2521,6 +2624,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2526,6 +2629,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S nbttagcompound.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -310,7 +310,7 @@ index 393e951102c49d45a135b37ccd876283c5355710..df0cef2fdf94084486221c9d8223ef8f return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2668,6 +2776,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2673,6 +2781,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S freezeLocked = nbt.getBoolean("Paper.FreezeLock"); } // Paper end @@ -322,7 +322,7 @@ index 393e951102c49d45a135b37ccd876283c5355710..df0cef2fdf94084486221c9d8223ef8f } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT"); -@@ -4882,6 +4995,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4874,6 +4987,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return; } // Paper end - rewrite chunk system @@ -331,11 +331,11 @@ index 393e951102c49d45a135b37ccd876283c5355710..df0cef2fdf94084486221c9d8223ef8f + level.mergeHistory.markPositions(this); + } + // Sakura end - final boolean alreadyRemoved = this.removalReason != null; + final boolean alreadyRemoved = this.removalReason != null; // Paper - Folia schedulers if (this.removalReason == null) { this.removalReason = reason; diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index 0cf39ea76902e62b712057fe1bb80e3af8190fc4..ac92de0478d879e30e7c099c38b0119c17a3119e 100644 +index 85da566b151d6c9995b5c41333c4cd05235c1d70..ff6d82fe45dd9613faebed71f7936451100848df 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -132,6 +132,59 @@ public class FallingBlockEntity extends Entity { @@ -398,7 +398,7 @@ index 0cf39ea76902e62b712057fe1bb80e3af8190fc4..ac92de0478d879e30e7c099c38b0119c @Override public void tick() { // Paper start - fix sand duping -@@ -211,6 +264,7 @@ public class FallingBlockEntity extends Entity { +@@ -209,6 +262,7 @@ public class FallingBlockEntity extends Entity { return; } // CraftBukkit end @@ -407,7 +407,7 @@ index 0cf39ea76902e62b712057fe1bb80e3af8190fc4..ac92de0478d879e30e7c099c38b0119c ((ServerLevel) this.level()).getChunkSource().chunkMap.broadcast(this, new ClientboundBlockUpdatePacket(blockposition, this.level().getBlockState(blockposition))); this.discard(); diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index cc30c119f519e7cd947ab40beae56e493e977176..811a5224a02bb3badb1b8d6de370b7166d9f877c 100644 +index 46680f551f83b91581440d89a1c35c048db03638..72fb1690e6a0692b453b9c0997a6eb8544d1dbf5 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java @@ -71,6 +71,44 @@ public class PrimedTnt extends Entity implements TraceableEntity { @@ -464,19 +464,19 @@ index cc30c119f519e7cd947ab40beae56e493e977176..811a5224a02bb3badb1b8d6de370b716 this.explode(); } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 902ec524d209ab56a6dadb260559910c76dbf96b..467ac21893d2e2ee07bc3ce7852ceb87dfe56cdf 100644 +index 5927568271168548be5b2a2113764d8549ed2b17..1bc20269707a1c0a741666c0fb4b90ffc93560a7 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -237,6 +237,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -231,6 +231,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return slices.getSectionEntities(chunkY); } - // Sakura end -+ public final me.samsuik.sakura.entity.merge.MergeHistory mergeHistory = new me.samsuik.sakura.entity.merge.MergeHistory(); // Sakura + // Sakura end - add utility method for accessing ChunkEntitySlices ++ public final me.samsuik.sakura.entity.merge.MergeHistory mergeHistory = new me.samsuik.sakura.entity.merge.MergeHistory(); // Sakura - cannon entity merging - protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura // Paper - Async-Anti-Xray - Pass executor + protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura // Paper - create paper world config; Async-Anti-Xray: Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java -index 73911b81f4e927026657953a0c68ddda9a8f93c1..c64ab06b62334e5ab1ab5ad78fa400de45c15723 100644 +index 1359d25a32b4a5d5e8e68ce737bd19f7b5afaf69..0afa2cfb04b5097788927076669e85fe24041df9 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java @@ -14,6 +14,28 @@ public class CraftFallingBlock extends CraftEntity implements FallingBlock { @@ -509,7 +509,7 @@ index 73911b81f4e927026657953a0c68ddda9a8f93c1..c64ab06b62334e5ab1ab5ad78fa400de public FallingBlockEntity getHandle() { return (FallingBlockEntity) this.entity; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java -index 3f32c683ddc6999b89f2e4051eb6ae784b296b8f..1ccf2153d82403a9b4fb3c972d1b7809c8efde2d 100644 +index dac3d34677688ac560bc1be2087a08479ef71b87..3e80513263236d56019e3402c52f4a3677c83c76 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java @@ -12,6 +12,28 @@ public class CraftTNTPrimed extends CraftEntity implements TNTPrimed { diff --git a/patches/server/0020-Optimised-Explosions.patch b/patches/server/0020-Optimised-Explosions.patch index b290fde..0bb5670 100644 --- a/patches/server/0020-Optimised-Explosions.patch +++ b/patches/server/0020-Optimised-Explosions.patch @@ -142,10 +142,10 @@ index 0000000000000000000000000000000000000000..3f6f34cc617efaad420485a7f613cfca +} diff --git a/src/main/java/me/samsuik/sakura/explosion/SakuraExplosion.java b/src/main/java/me/samsuik/sakura/explosion/SakuraExplosion.java new file mode 100644 -index 0000000000000000000000000000000000000000..10a9c32ad0ef6f08589e10187e5ab9f1e0571440 +index 0000000000000000000000000000000000000000..4b5c431e6d9e2b170a1db0984b8426919466f4c5 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/explosion/SakuraExplosion.java -@@ -0,0 +1,407 @@ +@@ -0,0 +1,405 @@ +package me.samsuik.sakura.explosion; + +import it.unimi.dsi.fastutil.objects.ObjectArrayList; @@ -502,7 +502,6 @@ index 0000000000000000000000000000000000000000..10a9c32ad0ef6f08589e10187e5ab9f1 + return; + } + -+ CraftEventFactory.entityDamage = this.source; + entity.lastDamageCancelled = false; + + if (entity instanceof EnderDragon) { @@ -519,7 +518,6 @@ index 0000000000000000000000000000000000000000..10a9c32ad0ef6f08589e10187e5ab9f1 + entity.hurt(this.damageSource, this.damageCalculator.getEntityDamageAmount(this, entity, getSeenFraction(pos, entity, null, blockCache, blockPos))); // Sakura // Paper - actually optimise explosions + } + -+ CraftEventFactory.entityDamage = null; + if (entity.lastDamageCancelled) { // SPIGOT-5339, SPIGOT-6252, SPIGOT-6777: Skip entity if damage event was cancelled + return; + } @@ -624,22 +622,22 @@ index 0000000000000000000000000000000000000000..e0387f16ff49031fdcbc8990613417da + +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 08e8de35fddcd54c5f466edb264aa454a5935c42..26b0c5d77fe10153300030c0f0fb0f63b552121a 100644 +index f68da3e0168c9462aa05cce11e523b9cefefd7e7..771a23258d55cff17502acbe2341ed397f54a122 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1750,6 +1750,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura // Paper - Async-Anti-Xray - Pass executor + protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura // Paper - create paper world config; Async-Anti-Xray: Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot -@@ -1430,7 +1431,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1420,7 +1421,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } Explosion.BlockInteraction explosion_effect1 = explosion_effect; diff --git a/patches/server/0021-Optimise-Fast-Movement.patch b/patches/server/0021-Optimise-Fast-Movement.patch index 0fac7d4..18552dd 100644 --- a/patches/server/0021-Optimise-Fast-Movement.patch +++ b/patches/server/0021-Optimise-Fast-Movement.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Optimise Fast Movement diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 450627cc7eb70be5d926d43026bd62d8b9aa2da7..512f4e76c7f3cb255b2153c3f22ac630e7e6553a 100644 +index 2320cbd0714294c078ec6e16c687713d28b0c174..472a411b18b27f498e3a446d2d335ff25d8da859 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1221,6 +1221,95 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1223,6 +1223,95 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } // Paper end - detailed watchdog information @@ -102,9 +102,9 @@ index 450627cc7eb70be5d926d43026bd62d8b9aa2da7..512f4e76c7f3cb255b2153c3f22ac630 + // Sakura end + public void move(MoverType movementType, Vec3 movement) { + final Vec3 originalMovement = movement; // Paper - Expose pre-collision velocity // Paper start - detailed watchdog information - io.papermc.paper.util.TickThread.ensureTickThread("Cannot move an entity off-main"); -@@ -1598,6 +1687,95 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1601,6 +1690,95 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return offsetFactor; } @@ -201,7 +201,7 @@ index 450627cc7eb70be5d926d43026bd62d8b9aa2da7..512f4e76c7f3cb255b2153c3f22ac630 // Paper start - optimise collisions final boolean xZero = movement.x == 0.0; diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index ac92de0478d879e30e7c099c38b0119c17a3119e..c548b1c0a9da290bc1ab52c37a792b4734e647e4 100644 +index ff6d82fe45dd9613faebed71f7936451100848df..6a18f855d26e5a32f9bc40af5e238754a0697440 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -202,7 +202,7 @@ public class FallingBlockEntity extends Entity { @@ -209,12 +209,12 @@ index ac92de0478d879e30e7c099c38b0119c17a3119e..c548b1c0a9da290bc1ab52c37a792b47 } - this.move(MoverType.SELF, this.getDeltaMovement()); -+ this.moveBasic(MoverType.SELF, this.getDeltaMovement()); // Sakura - ++ this.moveBasic(MoverType.SELF, this.getDeltaMovement()); // Sakura - optimise simple entity movement // Paper start - fix sand duping if (this.isRemoved()) { + return; diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index 1b8d43cf54999c9a005459bc59d7b5a50bb9c1ee..ebfd24f9fb90071288f0c872c0e3fbd58bb3f2b9 100644 +index a7f6100520cbcdb4851954bc1b919e232a91a464..a7ecf63d18891c61ddbdc55e74aa10da884838e8 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java @@ -118,7 +118,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { @@ -222,7 +222,7 @@ index 1b8d43cf54999c9a005459bc59d7b5a50bb9c1ee..ebfd24f9fb90071288f0c872c0e3fbd5 } - this.move(MoverType.SELF, this.getDeltaMovement()); -+ this.moveBasic(MoverType.SELF, this.getDeltaMovement()); // Sakura - // Paper start - Configurable TNT entity height nerf ++ this.moveBasic(MoverType.SELF, this.getDeltaMovement()); // Sakura - optimise simple entity movement + // Paper start - Configurable TNT height nerf if (this.level().paperConfig().fixes.tntEntityHeightNerf.test(v -> this.getY() > v)) { this.discard(); diff --git a/patches/server/0022-Limited-Get-Entities.patch b/patches/server/0022-Limited-Get-Entities.patch index 0d4d9ca..e9b26eb 100644 --- a/patches/server/0022-Limited-Get-Entities.patch +++ b/patches/server/0022-Limited-Get-Entities.patch @@ -329,14 +329,14 @@ index d917a19c838ed3d74322abd85e1f737e852b5d7b..1ba10713c85d6f19f075cc267602a04c if (this.count == 0) { return; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index c63c5c1451d5678ddea0d570ff2628af258490ae..a2f8040da7e8baa120e5dcdacb3c5b22f2f2eb46 100644 +index e8de10a604892a4b571c643aaf479add13e95804..f759e3903a71d7a92544a1e0967c69bfba18b6e4 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -240,6 +240,39 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - public final me.samsuik.sakura.entity.merge.MergeHistory mergeHistory = new me.samsuik.sakura.entity.merge.MergeHistory(); // Sakura - public final me.samsuik.sakura.explosion.DensityCache densityCache = new me.samsuik.sakura.explosion.DensityCache(); // Sakura +@@ -234,6 +234,39 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + public final me.samsuik.sakura.entity.merge.MergeHistory mergeHistory = new me.samsuik.sakura.entity.merge.MergeHistory(); // Sakura - cannon entity merging + public final me.samsuik.sakura.explosion.DensityCache densityCache = new me.samsuik.sakura.explosion.DensityCache(); // Sakura - specialised density cache for swinging explosions -+ // Sakura start - limited get entities ++ // Sakura start - add entity retrival methods with search limits + public void getLimitedEntities(Entity except, AABB box, Predicate predicate, List into, int limit, int search) { + ((ServerLevel)this).getEntityLookup().getLimitedEntities(except, box, into, predicate, limit, search); + } @@ -367,8 +367,8 @@ index c63c5c1451d5678ddea0d570ff2628af258490ae..a2f8040da7e8baa120e5dcdacb3c5b22 + public List getLimitedEntities(@Nullable Entity except, AABB box, int limit, int search) { + return this.getLimitedEntities(except, box, net.minecraft.world.entity.EntitySelector.NO_SPECTATORS, limit, search); + } -+ // Sakura end ++ // Sakura end - add entity retrival methods with search limits + - protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura // Paper - Async-Anti-Xray - Pass executor + protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura // Paper - create paper world config; Async-Anti-Xray: Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot - this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper + this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config diff --git a/patches/server/0023-isPushedByFluid-API.patch b/patches/server/0023-isPushedByFluid-API.patch index a361e80..dee20c3 100644 --- a/patches/server/0023-isPushedByFluid-API.patch +++ b/patches/server/0023-isPushedByFluid-API.patch @@ -5,17 +5,17 @@ Subject: [PATCH] isPushedByFluid API diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 5eb654f99381edf1043638bbafc1579c7206f460..dd77e2ec655af6ef1556a618aa530abf2325c850 100644 +index 472a411b18b27f498e3a446d2d335ff25d8da859..3af0bbc8ac96b6601454046e253f465a5d9e7eb4 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -680,6 +680,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -713,6 +713,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } } - // Sakura end -+ public boolean pushedByFluid = true; // Sakura - - public boolean isLegacyTrackingEntity = false; + // Sakura end - cannon entity merging ++ public boolean pushedByFluid = true; // Sakura - entity pushed by fluid api + public Entity(EntityType type, Level world) { + this.id = Entity.ENTITY_COUNTER.incrementAndGet(); @@ -4236,7 +4237,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } @@ -26,7 +26,7 @@ index 5eb654f99381edf1043638bbafc1579c7206f460..dd77e2ec655af6ef1556a618aa530abf public static double getViewScale() { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 1c3e1153d08b59d29b3613fc3b50a4780aa7a3ac..859e534d2880f4d14a2d066b4146e32cb1acfa25 100644 +index 8698104e3eb98e2cc5da5de87a8f538860c1d91d..9c7076df8b89ce2e252ea4a81250d7888ec0eb30 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -200,6 +200,18 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { diff --git a/patches/server/0024-Cannon-Mechanics.patch b/patches/server/0024-Cannon-Mechanics.patch index ac344be..3994cd5 100644 --- a/patches/server/0024-Cannon-Mechanics.patch +++ b/patches/server/0024-Cannon-Mechanics.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Cannon Mechanics diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index c548b1c0a9da290bc1ab52c37a792b4734e647e4..4c1b739860f58d6f60d420840202a9b4eb45d5f3 100644 +index 6a18f855d26e5a32f9bc40af5e238754a0697440..6371253ed8f2d7a35e8ec0de3fc46c5f27e64a0f 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -67,6 +67,7 @@ public class FallingBlockEntity extends Entity { public CompoundTag blockData; protected static final EntityDataAccessor DATA_START_POS = SynchedEntityData.defineId(FallingBlockEntity.class, EntityDataSerializers.BLOCK_POS); - public boolean autoExpire = true; // Paper - Auto expire setting -+ public boolean heightParity; // Sakura + public boolean autoExpire = true; // Paper - Expand FallingBlock API ++ public boolean heightParity; // Sakura - configure cannon mechanics public FallingBlockEntity(EntityType type, Level world) { super(type, world); @@ -20,7 +20,7 @@ index c548b1c0a9da290bc1ab52c37a792b4734e647e4..4c1b739860f58d6f60d420840202a9b4 this.fallDamageMax = 40; this.isFallingBlock = true; // Sakura this.loadChunks = world.sakuraConfig().cannons.sand.loadsChunks; // Sakura - load chunks -+ this.heightParity = world.sakuraConfig().cannons.mechanics.fallingBlockParity; // Sakura ++ this.heightParity = world.sakuraConfig().cannons.mechanics.fallingBlockParity; // Sakura - configure cannon mechanics } public FallingBlockEntity(Level world, double x, double y, double z, BlockState block) { @@ -38,7 +38,7 @@ index c548b1c0a9da290bc1ab52c37a792b4734e647e4..4c1b739860f58d6f60d420840202a9b4 @Override public void tick() { diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index ebfd24f9fb90071288f0c872c0e3fbd58bb3f2b9..d534bc3ff8d5995ced0f9f89261cdcf1835698f4 100644 +index a7ecf63d18891c61ddbdc55e74aa10da884838e8..4deb969309179e2314bd479608e715540d5ea3d6 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java @@ -53,6 +53,12 @@ public class PrimedTnt extends Entity implements TraceableEntity { @@ -54,17 +54,17 @@ index ebfd24f9fb90071288f0c872c0e3fbd58bb3f2b9..d534bc3ff8d5995ced0f9f89261cdcf1 } @Override -@@ -255,7 +261,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { - // Paper start - Optional prevent TNT from moving in water +@@ -247,7 +253,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { + // Paper start - Option to prevent TNT from moving in water @Override public boolean isPushedByFluid() { - return !level().paperConfig().fixes.preventTntFromMovingInWater && super.isPushedByFluid(); + return !level().paperConfig().fixes.preventTntFromMovingInWater && level().sakuraConfig().cannons.mechanics.tntFlowsInWater && super.isPushedByFluid(); // Sakura - convenience } - // Paper end + // Paper end - Option to prevent TNT from moving in water } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java -index c64ab06b62334e5ab1ab5ad78fa400de45c15723..94667eab6d756ee170eb49e2e434c7a3b0df2d67 100644 +index 0afa2cfb04b5097788927076669e85fe24041df9..8e678a811e232bbd78de45b80fae47964bdf8f98 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java @@ -34,6 +34,16 @@ public class CraftFallingBlock extends CraftEntity implements FallingBlock { diff --git a/patches/server/0026-Optimise-TNT-fluid-state-and-pushing.patch b/patches/server/0026-Optimise-TNT-fluid-state-and-pushing.patch index 35c9f34..5fba194 100644 --- a/patches/server/0026-Optimise-TNT-fluid-state-and-pushing.patch +++ b/patches/server/0026-Optimise-TNT-fluid-state-and-pushing.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Optimise TNT fluid state and pushing diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index bee38695222b9fc7b0235484eaf7afc1dcf63125..1225821d4e1d947bfdd989126667a30beba8d3e6 100644 +index 3af0bbc8ac96b6601454046e253f465a5d9e7eb4..c4ead1bd76c5bcd694758a993134aaf9b4d20594 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2183,7 +2183,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2186,7 +2186,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return this.isInWater() || flag; } @@ -18,7 +18,7 @@ index bee38695222b9fc7b0235484eaf7afc1dcf63125..1225821d4e1d947bfdd989126667a30b if (entity instanceof Boat) { diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index d534bc3ff8d5995ced0f9f89261cdcf1835698f4..dcb28daa8daf8fc2af020a7a94e3c9e51a2df63e 100644 +index 4deb969309179e2314bd479608e715540d5ea3d6..186011390569441e4942e4fda84c0df238d9803e 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java @@ -116,6 +116,19 @@ public class PrimedTnt extends Entity implements TraceableEntity { diff --git a/patches/server/0027-Optimise-LivingEntity-pushEntities.patch b/patches/server/0027-Optimise-LivingEntity-pushEntities.patch index e244af3..4e9ed39 100644 --- a/patches/server/0027-Optimise-LivingEntity-pushEntities.patch +++ b/patches/server/0027-Optimise-LivingEntity-pushEntities.patch @@ -5,19 +5,19 @@ Subject: [PATCH] Optimise LivingEntity#pushEntities diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 45b1a182acf6b2aef40b714d31ca125d8f74619a..b01c09e45bf7452a40a7d9ad4eb1e1da08314d7d 100644 +index aceee33eebd4d5f89e62a42910ec51843f33843b..9dcf75b711924c1630526d99662ccc4ff314ddfc 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3557,7 +3557,11 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3572,7 +3572,11 @@ public abstract class LivingEntity extends Entity implements Attackable { return; } // Paper end - don't run getEntities if we're not going to use its result -- List list = this.level().getEntities((Entity) this, this.getBoundingBox(), EntitySelector.pushable(this, this.level().paperConfig().collisions.fixClimbingBypassingCrammingRule)); // Paper - fix climbing bypassing cramming rule -+ // Sakura start - optimise entity pushing +- List list = this.level().getEntities((Entity) this, this.getBoundingBox(), EntitySelector.pushable(this, this.level().paperConfig().collisions.fixClimbingBypassingCrammingRule)); // Paper - Climbing should not bypass cramming gamerule ++ // Sakura start - use maxEntityCollision limit for entity retrival + int limit = Math.max(i, this.level().paperConfig().collisions.maxEntityCollisions); + int search = limit * limit; -+ List list = this.level().getLimitedEntities(this, this.getBoundingBox(), EntitySelector.pushable(this, level().paperConfig().collisions.fixClimbingBypassingCrammingRule), limit, search); // Paper - fix climbing bypassing cramming rule -+ // Sakura end ++ List list = this.level().getLimitedEntities((Entity) this, this.getBoundingBox(), EntitySelector.pushable(this, this.level().paperConfig().collisions.fixClimbingBypassingCrammingRule), limit, search); // Paper - Climbing should not bypass cramming gamerule ++ // Sakura end - use maxEntityCollision limit for entity retrival if (!list.isEmpty()) { - // Paper - moved up + // Paper - don't run getEntities if we're not going to use its result; moved up diff --git a/patches/server/0028-Despawn-falling-blocks-inside-moving-pistons.patch b/patches/server/0028-Despawn-falling-blocks-inside-moving-pistons.patch index 427b98b..ce08f56 100644 --- a/patches/server/0028-Despawn-falling-blocks-inside-moving-pistons.patch +++ b/patches/server/0028-Despawn-falling-blocks-inside-moving-pistons.patch @@ -5,15 +5,15 @@ Subject: [PATCH] Despawn falling blocks inside moving pistons diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index 4c1b739860f58d6f60d420840202a9b4eb45d5f3..31cca38c40c5ca65f574568a316a72b163ff4b3a 100644 +index 6371253ed8f2d7a35e8ec0de3fc46c5f27e64a0f..7a0ac559dd7d5db76d8e8b88baa76bcc28a0255b 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -@@ -243,7 +243,7 @@ public class FallingBlockEntity extends Entity { +@@ -241,7 +241,7 @@ public class FallingBlockEntity extends Entity { } } - if (!this.onGround() && !flag1) { -+ if (!this.onGround() && !flag1 || level().sakuraConfig().cannons.sand.despawnInsideMovingPistons && autoExpire && this.time > 600) { // Sakura - if (!this.level().isClientSide && ((this.time > 100 && autoExpire) && (blockposition.getY() <= this.level().getMinBuildHeight() || blockposition.getY() > this.level().getMaxBuildHeight()) || (this.time > 600 && autoExpire))) { // Paper - Auto expire setting ++ if (!this.onGround() && !flag1 || level().sakuraConfig().cannons.sand.despawnInsideMovingPistons && autoExpire && this.time > 600) { // Sakura - allow falling blocks to despawn inside moving pistons + if (!this.level().isClientSide && ((this.time > 100 && autoExpire) && (blockposition.getY() <= this.level().getMinBuildHeight() || blockposition.getY() > this.level().getMaxBuildHeight()) || (this.time > 600 && autoExpire))) { // Paper - Expand FallingBlock API if (this.dropItem && this.level().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { this.spawnAtLocation((ItemLike) block); diff --git a/patches/server/0029-Configure-Entity-Knockback.patch b/patches/server/0029-Configure-Entity-Knockback.patch index 279264c..76133ce 100644 --- a/patches/server/0029-Configure-Entity-Knockback.patch +++ b/patches/server/0029-Configure-Entity-Knockback.patch @@ -5,40 +5,33 @@ Subject: [PATCH] Configure Entity Knockback diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index b01c09e45bf7452a40a7d9ad4eb1e1da08314d7d..558c862f082d4e48c2c0d7ecf900f9354387d32b 100644 +index 9dcf75b711924c1630526d99662ccc4ff314ddfc..f6b893644d74d81f4f07319ae2f7df43a9bc9552 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1539,7 +1539,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1541,7 +1541,7 @@ public abstract class LivingEntity extends Entity implements Attackable { d0 = (Math.random() - Math.random()) * 0.01D; } -- this.knockback(0.4000000059604645D, d0, d1, entity1); // Paper -+ this.knockback((float) level().sakuraConfig().players.knockback.knockbackHorizontal, d0, d1, entity1); // Sakura // Paper +- this.knockback(0.4000000059604645D, d0, d1, entity1, entity1 == null ? EntityKnockbackEvent.KnockbackCause.DAMAGE : EntityKnockbackEvent.KnockbackCause.ENTITY_ATTACK); // CraftBukkit ++ this.knockback((float) level().sakuraConfig().players.knockback.knockbackHorizontal, d0, d1, entity1, entity1 == null ? EntityKnockbackEvent.KnockbackCause.DAMAGE : EntityKnockbackEvent.KnockbackCause.ENTITY_ATTACK); // Sakura - configure entity knockback // CraftBukkit if (!flag) { this.indicateDamage(d0, d1); } -@@ -1586,7 +1586,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1588,7 +1588,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } protected void blockedByShield(LivingEntity target) { -- target.knockback(0.5D, target.getX() - this.getX(), target.getZ() - this.getZ(), this); // Paper -+ target.knockback((float) level().sakuraConfig().players.knockback.shieldHitKnockback, target.getX() - this.getX(), target.getZ() - this.getZ(), this); // Sakura - configurable knockback // Paper +- target.knockback(0.5D, target.getX() - this.getX(), target.getZ() - this.getZ(), this, EntityKnockbackEvent.KnockbackCause.SHIELD_BLOCK); // CraftBukkit // Paper - fix attacker ++ target.knockback((float) level().sakuraConfig().players.knockback.shieldHitKnockback, target.getX() - this.getX(), target.getZ() - this.getZ(), this, EntityKnockbackEvent.KnockbackCause.SHIELD_BLOCK); // Sakura - configure entity knockback // CraftBukkit // Paper - fix attacker } private boolean checkTotemDeathProtection(DamageSource source) { -@@ -1903,13 +1903,23 @@ public abstract class LivingEntity extends Entity implements Attackable { - } - public void knockback(double strength, double x, double z, Entity knockingBackEntity) { - // Paper end - add knockbacking entity parameter -- strength *= 1.0D - this.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE); -+ strength *= 1.0D - this.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE) * level().sakuraConfig().players.knockback.knockbackResistanceModifier; // Sakura - if (strength > 0.0D) { - this.hasImpulse = true; +@@ -1912,7 +1912,17 @@ public abstract class LivingEntity extends Entity implements Attackable { Vec3 vec3d = this.getDeltaMovement(); - Vec3 vec3d1 = (new Vec3(x, 0.0D, z)).normalize().scale(strength); + Vec3 vec3d1 = (new Vec3(d1, 0.0D, d2)).normalize().scale(d0); -- this.setDeltaMovement(vec3d.x / 2.0D - vec3d1.x, this.onGround() ? Math.min(0.4D, vec3d.y / 2.0D + strength) : vec3d.y, vec3d.z / 2.0D - vec3d1.z); -+ // Sakura start - configure knockback +- EntityKnockbackEvent event = CraftEventFactory.callEntityKnockbackEvent((org.bukkit.craftbukkit.entity.CraftLivingEntity) this.getBukkitEntity(), attacker, cause, d0, vec3d1, vec3d.x / 2.0D - vec3d1.x, this.onGround() ? Math.min(0.4D, vec3d.y / 2.0D + d0) : vec3d.y, vec3d.z / 2.0D - vec3d1.z); ++ // Sakura start - configure entity knockback + double velocityX = vec3d.x / 2.0D - vec3d1.x; + double velocityY = vec3d.y / 2.0D + (float) level().sakuraConfig().players.knockback.knockbackVertical; + double velocityZ = vec3d.z / 2.0D - vec3d1.z; @@ -47,24 +40,24 @@ index b01c09e45bf7452a40a7d9ad4eb1e1da08314d7d..558c862f082d4e48c2c0d7ecf900f935 + velocityY = Math.min(velocityY, (float) level().sakuraConfig().players.knockback.knockbackVerticalLimit); + } + -+ this.setDeltaMovement(velocityX, velocityY, velocityZ); -+ // Sakura end - // Paper start - call EntityKnockbackByEntityEvent - Vec3 currentMovement = this.getDeltaMovement(); - org.bukkit.util.Vector delta = new org.bukkit.util.Vector(currentMovement.x - vec3d.x, currentMovement.y - vec3d.y, currentMovement.z - vec3d.z); ++ EntityKnockbackEvent event = CraftEventFactory.callEntityKnockbackEvent((org.bukkit.craftbukkit.entity.CraftLivingEntity) this.getBukkitEntity(), attacker, cause, d0, vec3d1, velocityX, velocityY, velocityZ); ++ // Sakura end - configure entity knockback + if (event.isCancelled()) { + return; + } diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index c3170384afa8d3bc4b1b428ecea04b1276621136..d0742bbf6f94705e378972e3bc0fab4682f3d78f 100644 +index d89e7f021cc4ac61550ca5dbf660323fc1aec01f..3892af6ddcd889f65a46d01322d3e015d7c1fcf7 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -183,6 +183,7 @@ public abstract class Player extends LivingEntity { - public boolean affectsSpawning = true; - public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; - // Paper end -+ private long lastSprintKnockback = -1; // Sakura +@@ -182,6 +182,7 @@ public abstract class Player extends LivingEntity { + public float hurtDir; // Paper - protected -> public + public boolean affectsSpawning = true; // Paper - Affects Spawning API + public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage ++ private long lastSprintKnockback = -1; // Sakura - configure entity knockback // CraftBukkit start public boolean fauxSleeping; -@@ -1272,7 +1273,7 @@ public abstract class Player extends LivingEntity { +@@ -1273,7 +1274,7 @@ public abstract class Player extends LivingEntity { byte b0 = 0; int i = b0 + EnchantmentHelper.getKnockbackBonus(this); @@ -73,7 +66,7 @@ index c3170384afa8d3bc4b1b428ecea04b1276621136..d0742bbf6f94705e378972e3bc0fab46 sendSoundEffect(this, this.getX(), this.getY(), this.getZ(), SoundEvents.PLAYER_ATTACK_KNOCKBACK, this.getSoundSource(), 1.0F, 1.0F); // Paper - send while respecting visibility ++i; flag1 = true; -@@ -1322,10 +1323,20 @@ public abstract class Player extends LivingEntity { +@@ -1323,10 +1324,20 @@ public abstract class Player extends LivingEntity { if (flag5) { if (i > 0) { @@ -87,21 +80,21 @@ index c3170384afa8d3bc4b1b428ecea04b1276621136..d0742bbf6f94705e378972e3bc0fab46 + lastSprintKnockback = millis; + } if (target instanceof LivingEntity) { -- ((LivingEntity) target).knockback((double) ((float) i * 0.5F), (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this); // Paper -+ ((LivingEntity) target).knockback((double) (extraKnockback), (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this); // Paper +- ((LivingEntity) target).knockback((double) ((float) i * 0.5F), (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this, EntityKnockbackEvent.KnockbackCause.ENTITY_ATTACK); // CraftBukkit ++ ((LivingEntity) target).knockback((double) (extraKnockback), (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this, EntityKnockbackEvent.KnockbackCause.ENTITY_ATTACK); // CraftBukkit } else { -- target.push((double) (-Mth.sin(this.getYRot() * 0.017453292F) * (float) i * 0.5F), 0.1D, (double) (Mth.cos(this.getYRot() * 0.017453292F) * (float) i * 0.5F), this); // Paper -+ target.push((double) (-Mth.sin(this.getYRot() * 0.017453292F) * extraKnockback), 0.1D, (double) (Mth.cos(this.getYRot() * 0.017453292F) * extraKnockback), this); // Paper -+ // Sakura end +- target.push((double) (-Mth.sin(this.getYRot() * 0.017453292F) * (float) i * 0.5F), 0.1D, (double) (Mth.cos(this.getYRot() * 0.017453292F) * (float) i * 0.5F), this); // Paper - Add EntityKnockbackByEntityEvent and EntityPushedByEntityAttackEvent ++ target.push((double) (-Mth.sin(this.getYRot() * 0.017453292F) * extraKnockback), 0.1D, (double) (Mth.cos(this.getYRot() * 0.017453292F) * extraKnockback), this); // Paper - Add EntityKnockbackByEntityEvent and EntityPushedByEntityAttackEvent ++ // Sakura end - configure extra sprinting knockback } this.setDeltaMovement(this.getDeltaMovement().multiply(0.6D, 1.0D, 0.6D)); -@@ -1347,7 +1358,7 @@ public abstract class Player extends LivingEntity { +@@ -1348,7 +1359,7 @@ public abstract class Player extends LivingEntity { if (entityliving != this && entityliving != target && !this.isAlliedTo((Entity) entityliving) && (!(entityliving instanceof ArmorStand) || !((ArmorStand) entityliving).isMarker()) && this.distanceToSqr((Entity) entityliving) < 9.0D) { // CraftBukkit start - Only apply knockback if the damage hits if (entityliving.hurt(this.damageSources().playerAttack(this).sweep().critical(flag2), f4)) { // Paper - add critical damage API -- entityliving.knockback(0.4000000059604645D, (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this); // Pa -+ entityliving.knockback((float) level().sakuraConfig().players.knockback.sweepingEdgeKnockback, (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this); // Sakura // Pa +- entityliving.knockback(0.4000000059604645D, (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this, EntityKnockbackEvent.KnockbackCause.SWEEP_ATTACK); // CraftBukkit ++ entityliving.knockback((float) level().sakuraConfig().players.knockback.sweepingEdgeKnockback, (double) Mth.sin(this.getYRot() * 0.017453292F), (double) (-Mth.cos(this.getYRot() * 0.017453292F)), this, EntityKnockbackEvent.KnockbackCause.SWEEP_ATTACK); // Sakura - configure entity knockback // CraftBukkit } // CraftBukkit end } diff --git a/patches/server/0030-Explosion-Durable-Blocks.patch b/patches/server/0030-Explosion-Durable-Blocks.patch index 3d76cf1..14cb292 100644 --- a/patches/server/0030-Explosion-Durable-Blocks.patch +++ b/patches/server/0030-Explosion-Durable-Blocks.patch @@ -74,26 +74,26 @@ index 0000000000000000000000000000000000000000..2e11ba36e9e820f17839d696e5d7d876 + +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 26b0c5d77fe10153300030c0f0fb0f63b552121a..5b85d87ae230b17c295ee54258293b5c4521e0a3 100644 +index 771a23258d55cff17502acbe2341ed397f54a122..a3aa2c38169de2636f2e2a1c352e618959c4ac7a 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1751,6 +1751,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop resistance = !calculateResistance ? Optional.empty() : this.damageCalculator.getBlockExplosionResistance((Explosion)(Object)this, this.level, pos, blockState, fluidState); -+ // Sakura start - durable materials ++ // Sakura start - explosion durable blocks + if (calculateResistance) { + Block block = blockState.getBlock(); + me.samsuik.sakura.explosion.durable.DurableMaterial material = this.level.localConfig().config(pos).durableMaterials.get(block); @@ -140,16 +140,16 @@ index 2f1e9c8ce55d8f8fc97c2b4208424dc163f28346..9db851b4594bbba40f56e7d79322dbdb + resistance = Optional.of(material.resistance()); + } + } -+ // Sakura end ++ // Sakura end - explosion durable blocks + ret = new ExplosionBlockCache( key, pos, blockState, fluidState, (resistance.orElse(ZERO_RESISTANCE).floatValue() + 0.3f) * 0.3f, -@@ -818,6 +829,16 @@ public class Explosion { +@@ -838,6 +849,16 @@ public class Explosion { // CraftBukkit start - TNTPrimeEvent BlockState iblockdata = this.level.getBlockState(blockposition); Block block = iblockdata.getBlock(); -+ // Sakura start - durable materials ++ // Sakura start - explosion durable blocks + if (this.level.sakuraConfig().cannons.explosion.allowNonTntBreakingDurableBlocks || this.source instanceof net.minecraft.world.entity.item.PrimedTnt) { + me.samsuik.sakura.explosion.durable.DurableMaterial material = this.level.localConfig().config(blockposition).durableMaterials.get(block); + @@ -158,19 +158,19 @@ index 2f1e9c8ce55d8f8fc97c2b4208424dc163f28346..9db851b4594bbba40f56e7d79322dbdb + continue; + } + } -+ // Sakura end ++ // Sakura end - explosion durable blocks if (block instanceof net.minecraft.world.level.block.TntBlock) { Entity sourceEntity = this.source == null ? null : this.source; BlockPos sourceBlock = sourceEntity == null ? BlockPos.containing(this.x, this.y, this.z) : null; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index dfed7f2ee2e667a1d942426d0bbbf86929ecc6d6..7165eea6598f2f2382e245293ed60966c2c7e982 100644 +index f759e3903a71d7a92544a1e0967c69bfba18b6e4..d954e71e6e3cf2f77af3101a42806c1b4ad5b10c 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -239,6 +239,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - // Sakura end - public final me.samsuik.sakura.entity.merge.MergeHistory mergeHistory = new me.samsuik.sakura.entity.merge.MergeHistory(); // Sakura - public final me.samsuik.sakura.explosion.DensityCache densityCache = new me.samsuik.sakura.explosion.DensityCache(); // Sakura -+ public final me.samsuik.sakura.explosion.durable.DurableBlockManager durabilityManager = new me.samsuik.sakura.explosion.durable.DurableBlockManager(); // Sakura +@@ -233,6 +233,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + // Sakura end - add utility method for accessing ChunkEntitySlices + public final me.samsuik.sakura.entity.merge.MergeHistory mergeHistory = new me.samsuik.sakura.entity.merge.MergeHistory(); // Sakura - cannon entity merging + public final me.samsuik.sakura.explosion.DensityCache densityCache = new me.samsuik.sakura.explosion.DensityCache(); // Sakura - specialised density cache for swinging explosions ++ public final me.samsuik.sakura.explosion.durable.DurableBlockManager durabilityManager = new me.samsuik.sakura.explosion.durable.DurableBlockManager(); // Sakura - explosion durable blocks - // Sakura start - limited get entities + // Sakura start - add entity retrival methods with search limits public void getLimitedEntities(Entity except, AABB box, Predicate predicate, List into, int limit, int search) { diff --git a/patches/server/0031-Destroy-Waterlogged-Blocks.patch b/patches/server/0031-Destroy-Waterlogged-Blocks.patch index 0e434fc..091aa45 100644 --- a/patches/server/0031-Destroy-Waterlogged-Blocks.patch +++ b/patches/server/0031-Destroy-Waterlogged-Blocks.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Destroy Waterlogged Blocks diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 01e1e59db95e1d47cd0dd2c10108934ff54de446..eaf260a9661d99f0991fdb5575b79990acfd60f9 100644 +index 08c7109b0bb613388b5a98a5d312b4ba32770fbf..833ff765cf4ca8b9bad8157ce6abf55d1c922ddf 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -210,6 +210,12 @@ public class Explosion { @@ -16,8 +16,8 @@ index 01e1e59db95e1d47cd0dd2c10108934ff54de446..eaf260a9661d99f0991fdb5575b79990 + if (calculateResistance && !blockState.isAir() && this.level.sakuraConfig().cannons.explosion.destroyWaterloggedBlocks) { + fluidState = Blocks.AIR.defaultBlockState().getFluidState(); + } -+ // Sakura end ++ // Sakura end - destroy water logged blocks + Optional resistance = !calculateResistance ? Optional.empty() : this.damageCalculator.getBlockExplosionResistance((Explosion)(Object)this, this.level, pos, blockState, fluidState); - // Sakura start - durable materials + // Sakura start - explosion durable blocks diff --git a/patches/server/0032-Cache-Vanillia-and-Eigen-Redstone.patch b/patches/server/0032-Cache-Vanillia-and-Eigen-Redstone.patch index 531c886..905969c 100644 --- a/patches/server/0032-Cache-Vanillia-and-Eigen-Redstone.patch +++ b/patches/server/0032-Cache-Vanillia-and-Eigen-Redstone.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Cache Vanillia and Eigen Redstone diff --git a/src/main/java/com/destroystokyo/paper/util/RedstoneWireTurbo.java b/src/main/java/com/destroystokyo/paper/util/RedstoneWireTurbo.java -index 22a2547810d0c029f29685faddf7ac21cde2df0b..0fad13769f5727279430ac7f650f3d4dc0b42526 100644 +index fa062e6543e8a0377e3d4715996955dba005ee80..ca8b5066e2db3dc5df97091fa8821493d91949da 100644 --- a/src/main/java/com/destroystokyo/paper/util/RedstoneWireTurbo.java +++ b/src/main/java/com/destroystokyo/paper/util/RedstoneWireTurbo.java -@@ -661,6 +661,7 @@ public class RedstoneWireTurbo { +@@ -662,6 +662,7 @@ public class RedstoneWireTurbo { // restores old behavior, at the cost of bypassing the // max-chained-neighbor-updates server property. worldIn.getBlockState(upd.self).neighborChanged(worldIn, upd.self, wire, upd.parent, false); @@ -16,7 +16,7 @@ index 22a2547810d0c029f29685faddf7ac21cde2df0b..0fad13769f5727279430ac7f650f3d4d } } -@@ -776,6 +777,17 @@ public class RedstoneWireTurbo { +@@ -777,6 +778,17 @@ public class RedstoneWireTurbo { // already on-going graph walk being performed by breadthFirstWalk. return scheduleReentrantNeighborChanged(worldIn, pos, newState, source); } @@ -34,7 +34,7 @@ index 22a2547810d0c029f29685faddf7ac21cde2df0b..0fad13769f5727279430ac7f650f3d4d // If there are no on-going walks through redstone wire, then start a new walk. // If the source of the block update to the redstone wire at 'pos' is known, we can use -@@ -805,6 +817,8 @@ public class RedstoneWireTurbo { +@@ -806,6 +818,8 @@ public class RedstoneWireTurbo { // updates in a breadth first order out from the initial update received for the block at 'pos'. breadthFirstWalk(worldIn); @@ -43,7 +43,7 @@ index 22a2547810d0c029f29685faddf7ac21cde2df0b..0fad13769f5727279430ac7f650f3d4d // With the whole search completed, clear the list of all known blocks. // We do not want to keep around state information that may be changed by other code. // In theory, we could cache the neighbor block positions, but that is a separate -@@ -912,6 +926,7 @@ public class RedstoneWireTurbo { +@@ -913,6 +927,7 @@ public class RedstoneWireTurbo { // bypass the new neighbor update stack. if (worldIn.setBlock(upd.self, state, Block.UPDATE_KNOWN_SHAPE | Block.UPDATE_CLIENTS)) updateNeighborShapes(worldIn, upd.self, state); @@ -341,30 +341,30 @@ index 0000000000000000000000000000000000000000..455e51b93c50f8bf3e84d11f373be7b1 + +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 5b85d87ae230b17c295ee54258293b5c4521e0a3..ae4930eef9b82d28e798b20b545da589e364cae0 100644 +index a3aa2c38169de2636f2e2a1c352e618959c4ac7a..c24fc4df2c835267160dc8355419904a79d4f34d 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1752,6 +1752,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop predicate, List into, int limit, int search) { -@@ -1021,6 +1022,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1011,6 +1012,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } else { BlockState iblockdata2 = this.getBlockState(pos); @@ -373,7 +373,7 @@ index 374d600692975a2e8514e8e99c7fa18599ef8dfc..09ff77ec8967645df0de253f6e8ee8cb if (iblockdata2 == iblockdata) { if (iblockdata1 != iblockdata2) { diff --git a/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java b/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java -index 507be06ad51b7a212e28d3ca6680e0e4b00f4233..82bde0e37971e806b19d17fbf48c663c82399739 100644 +index b5a71fd4e2f55bf036c2c697da5d50cc90fc657c..93df0a39de85a5fa4b0ab680954405171646915d 100644 --- a/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java +++ b/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java @@ -382,7 +382,15 @@ public class RedStoneWireBlock extends Block { diff --git a/patches/server/0033-Falling-Block-Stacking-Restrictions.patch b/patches/server/0033-Falling-Block-Stacking-Restrictions.patch index 193673e..1d1204c 100644 --- a/patches/server/0033-Falling-Block-Stacking-Restrictions.patch +++ b/patches/server/0033-Falling-Block-Stacking-Restrictions.patch @@ -18,10 +18,10 @@ index 9bbd239ee24fb0d31d216287af480a70b93ca192..348ab32d0b0fb8c7ecda36028c0be73b } } diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index 31cca38c40c5ca65f574568a316a72b163ff4b3a..cd97bc46489544e43e721488254d66ff0e5064d5 100644 +index 7a0ac559dd7d5db76d8e8b88baa76bcc28a0255b..b10484757f46ba23b3fc07e27d8928755d345083 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -@@ -261,7 +261,7 @@ public class FallingBlockEntity extends Entity { +@@ -259,7 +259,7 @@ public class FallingBlockEntity extends Entity { boolean flag3 = FallingBlock.isFree(this.level().getBlockState(blockposition.below())) && (!flag || !flag1); boolean flag4 = this.blockState.canSurvive(this.level(), blockposition) && !flag3; diff --git a/patches/server/0039-Option-to-configure-entity-water-sensitivity.patch b/patches/server/0039-Option-to-configure-entity-water-sensitivity.patch index 1e27928..1a61595 100644 --- a/patches/server/0039-Option-to-configure-entity-water-sensitivity.patch +++ b/patches/server/0039-Option-to-configure-entity-water-sensitivity.patch @@ -5,15 +5,15 @@ Subject: [PATCH] Option to configure entity water sensitivity diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 558c862f082d4e48c2c0d7ecf900f9354387d32b..7728492fd3623670482f4ca89e0934e7bcb972e1 100644 +index f6b893644d74d81f4f07319ae2f7df43a9bc9552..7bc505822ccaf389c0e42d6907758f99956d87bb 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3502,7 +3502,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3517,7 +3517,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } } - // Paper end + // Paper end - Add EntityMoveEvent - if (!this.level().isClientSide && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) { -+ if (!this.level().isClientSide && this.level().sakuraConfig().entity.waterSensitivity && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) { // Sakura ++ if (!this.level().isClientSide && this.level().sakuraConfig().entity.waterSensitivity && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) { // Sakura - configure entity water sensitivity this.hurt(this.damageSources().drown(), 1.0F); } diff --git a/patches/server/0040-Configure-cannon-physics-by-version.patch b/patches/server/0040-Configure-cannon-physics-by-version.patch index aa12adf..01365e8 100644 --- a/patches/server/0040-Configure-cannon-physics-by-version.patch +++ b/patches/server/0040-Configure-cannon-physics-by-version.patch @@ -36,7 +36,7 @@ index 19086bbfdf3a015eafec5ca868c8d2451f554ef0..a40dcbde87860fd6d3b60d0b9e2d5e63 if (xSmaller && z != 0.0) { z = performAABBCollisionsZ(axisalignedbb, z, aabbs); diff --git a/src/main/java/me/samsuik/sakura/explosion/SakuraExplosion.java b/src/main/java/me/samsuik/sakura/explosion/SakuraExplosion.java -index 406a7e354ada6211bda59df6795e56286d321251..3f7e3370c870ecc30fe02d8480c80dd408e419e7 100644 +index 10a9c32ad0ef6f08589e10187e5ab9f1e0571440..366613182e290b941b43a2c766a2de92355297a9 100644 --- a/src/main/java/me/samsuik/sakura/explosion/SakuraExplosion.java +++ b/src/main/java/me/samsuik/sakura/explosion/SakuraExplosion.java @@ -167,7 +167,7 @@ public class SakuraExplosion extends Explosion { @@ -87,10 +87,10 @@ index 406a7e354ada6211bda59df6795e56286d321251..3f7e3370c870ecc30fe02d8480c80dd4 x /= distance; y /= distance; diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index e03ae70ba053cbcc474033df00872bc9c76ce2dc..8bdd2273f5969af883bc2a427618e1a3aed2a6d2 100644 +index c4ead1bd76c5bcd694758a993134aaf9b4d20594..f9c7bb5636fee6e56e73428d1ec7afc2faef0c35 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -378,7 +378,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -379,7 +379,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S private final double[] pistonDeltas; private long pistonDeltasGameTime; private EntityDimensions dimensions; @@ -99,21 +99,21 @@ index e03ae70ba053cbcc474033df00872bc9c76ce2dc..8bdd2273f5969af883bc2a427618e1a3 public boolean isInPowderSnow; public boolean wasInPowderSnow; public boolean wasOnFire; -@@ -681,6 +681,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -714,6 +714,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } - // Sakura end - public boolean pushedByFluid = true; // Sakura -+ // Sakura start - physics version + // Sakura end - cannon entity merging + public boolean pushedByFluid = true; // Sakura - entity pushed by fluid api ++ // Sakura start - physics version api + protected me.samsuik.sakura.physics.PhysicsVersion physics = me.samsuik.sakura.physics.PhysicsVersion.LATEST; + -+ public me.samsuik.sakura.physics.PhysicsVersion physics() { ++ public final me.samsuik.sakura.physics.PhysicsVersion physics() { + return this.physics; + } -+ // Sakura end ++ // Sakura end - physics version api - public boolean isLegacyTrackingEntity = false; - -@@ -1167,7 +1174,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S + public Entity(EntityType type, Level world) { + this.id = Entity.ENTITY_COUNTER.incrementAndGet(); +@@ -1169,7 +1176,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } protected void checkSupportingBlock(boolean onGround, @Nullable Vec3 movement) { @@ -122,7 +122,7 @@ index e03ae70ba053cbcc474033df00872bc9c76ce2dc..8bdd2273f5969af883bc2a427618e1a3 AABB axisalignedbb = this.getBoundingBox(); AABB axisalignedbb1 = new AABB(axisalignedbb.minX, axisalignedbb.minY - 1.0E-6D, axisalignedbb.minZ, axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.maxZ); Optional optional = this.level.findSupportingBlock(this, axisalignedbb1); -@@ -1229,7 +1236,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1231,7 +1238,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S if (this.noPhysics) { this.setPos(this.getX() + movement.x, this.getY() + movement.y, this.getZ() + movement.z); } else { @@ -131,7 +131,7 @@ index e03ae70ba053cbcc474033df00872bc9c76ce2dc..8bdd2273f5969af883bc2a427618e1a3 movement = this.limitPistonMovement(movement); if (movement.equals(Vec3.ZERO)) { return; -@@ -1247,10 +1254,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1249,10 +1256,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S Vec3 vec3d1 = this.collideScan(movement); double d0 = vec3d1.lengthSqr(); @@ -144,7 +144,7 @@ index e03ae70ba053cbcc474033df00872bc9c76ce2dc..8bdd2273f5969af883bc2a427618e1a3 BlockHitResult movingobjectpositionblock = this.level().clip(new ClipContext(this.position(), this.position().add(vec3d1), ClipContext.Block.FALLDAMAGE_RESETTING, ClipContext.Fluid.WATER, this)); if (movingobjectpositionblock.getType() != HitResult.Type.MISS) { -@@ -1286,6 +1293,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1288,6 +1295,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S if (this.horizontalCollision) { Vec3 vec3d2 = this.getDeltaMovement(); @@ -157,7 +157,7 @@ index e03ae70ba053cbcc474033df00872bc9c76ce2dc..8bdd2273f5969af883bc2a427618e1a3 this.setDeltaMovement(flag ? 0.0D : vec3d2.x, vec3d2.y, flag1 ? 0.0D : vec3d2.z); } -@@ -1326,7 +1339,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1329,7 +1342,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.setPos(this.getX() + movement.x, this.getY() + movement.y, this.getZ() + movement.z); } else { this.wasOnFire = this.isOnFire(); @@ -166,7 +166,7 @@ index e03ae70ba053cbcc474033df00872bc9c76ce2dc..8bdd2273f5969af883bc2a427618e1a3 this.activatedTick = Math.max(this.activatedTick, MinecraftServer.currentTick + 20); // Paper this.activatedImmunityTick = Math.max(this.activatedImmunityTick, MinecraftServer.currentTick + 20); // Paper movement = this.limitPistonMovement(movement); -@@ -1353,8 +1366,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1356,8 +1369,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S Vec3 vec3d1 = this.collide(movement); double d0 = vec3d1.lengthSqr(); @@ -177,7 +177,7 @@ index e03ae70ba053cbcc474033df00872bc9c76ce2dc..8bdd2273f5969af883bc2a427618e1a3 BlockHitResult movingobjectpositionblock = this.level().clip(new ClipContext(this.position(), this.position().add(vec3d1), ClipContext.Block.FALLDAMAGE_RESETTING, ClipContext.Fluid.WATER, this)); if (movingobjectpositionblock.getType() != HitResult.Type.MISS) { -@@ -1390,6 +1403,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1393,6 +1406,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S if (this.horizontalCollision) { Vec3 vec3d2 = this.getDeltaMovement(); @@ -190,7 +190,7 @@ index e03ae70ba053cbcc474033df00872bc9c76ce2dc..8bdd2273f5969af883bc2a427618e1a3 this.setDeltaMovement(flag ? 0.0D : vec3d2.x, vec3d2.y, flag1 ? 0.0D : vec3d2.z); } -@@ -1713,7 +1732,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1716,7 +1735,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S double y = movement.y; double z = movement.z; @@ -202,7 +202,7 @@ index e03ae70ba053cbcc474033df00872bc9c76ce2dc..8bdd2273f5969af883bc2a427618e1a3 if (y != 0.0) { y = scanY(currBoundingBox, y, voxelList, bbList); -@@ -1829,7 +1851,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1832,7 +1854,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return movement; } @@ -211,7 +211,7 @@ index e03ae70ba053cbcc474033df00872bc9c76ce2dc..8bdd2273f5969af883bc2a427618e1a3 if (stepHeight > 0.0 && (onGround || (limitedMoveVector.y != movement.y && movement.y < 0.0)) -@@ -1945,8 +1967,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1948,8 +1970,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S protected void checkInsideBlocks() { AABB axisalignedbb = this.getBoundingBox(); @@ -226,7 +226,7 @@ index e03ae70ba053cbcc474033df00872bc9c76ce2dc..8bdd2273f5969af883bc2a427618e1a3 if (this.level().hasChunksAt(blockposition, blockposition1)) { BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index cd97bc46489544e43e721488254d66ff0e5064d5..14c91fe6e86b1c052d60b4bd7c11e33d0aac8d6a 100644 +index b10484757f46ba23b3fc07e27d8928755d345083..cc28593be3f99ee0e5ae086872966a9ab0f0a6c4 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -89,6 +89,8 @@ public class FallingBlockEntity extends Entity { @@ -251,17 +251,17 @@ index cd97bc46489544e43e721488254d66ff0e5064d5..14c91fe6e86b1c052d60b4bd7c11e33d world.addFreshEntity(entityfallingblock, spawnReason); // CraftBukkit return entityfallingblock; } -@@ -189,7 +195,44 @@ public class FallingBlockEntity extends Entity { +@@ -189,9 +195,46 @@ public class FallingBlockEntity extends Entity { // Sakura start @Override public final double getEyeY() { - return heightParity ? getY() : super.getEyeY(); + return heightParity ? this.getY() : super.getEyeY(); -+ } -+ // Sakura end + } + // Sakura end + // Sakura start - physics version api + @Override -+ public double distanceToSqr(Vec3 vector) { ++ public final double distanceToSqr(Vec3 vector) { + if (!this.physics.isLegacy()) + return super.distanceToSqr(vector); + double x = this.getX() - vector.x; @@ -294,9 +294,11 @@ index cd97bc46489544e43e721488254d66ff0e5064d5..14c91fe6e86b1c052d60b4bd7c11e33d + } + this.discard(); + } - } - // Sakura end ++ } ++ // Sakura end - physics version api + @Override + public void tick() { @@ -205,9 +248,16 @@ public class FallingBlockEntity extends Entity { } else { Block block = this.blockState.getBlock(); @@ -311,14 +313,14 @@ index cd97bc46489544e43e721488254d66ff0e5064d5..14c91fe6e86b1c052d60b4bd7c11e33d - this.addDeltaMovement(0.0D, -0.04D, 0.0D); // Sakura - reduce movement allocations + double gravity = this.physics.before(1_14_0) ? 0.04F : 0.04D; + this.addDeltaMovement(0.0D, -gravity, 0.0D); // Sakura - reduce movement allocations -+ // Sakura end ++ // Sakura end - physics version api } - this.moveBasic(MoverType.SELF, this.getDeltaMovement()); // Sakura -@@ -228,8 +278,16 @@ public class FallingBlockEntity extends Entity { + this.moveBasic(MoverType.SELF, this.getDeltaMovement()); // Sakura - optimise simple entity movement +@@ -226,8 +276,16 @@ public class FallingBlockEntity extends Entity { return; } - // Paper end + // Paper end - Configurable falling blocks height nerf + // Sakura start - physics version api + if (this.physics.before(1_12_0)) { + this.scaleDeltaMovement(0.98F); @@ -328,12 +330,12 @@ index cd97bc46489544e43e721488254d66ff0e5064d5..14c91fe6e86b1c052d60b4bd7c11e33d + // Patching the floating point issue on modern versions can break some cannons that rely on it. + // However, it makes sense for legacy versions pre-1.17 before the world height change. + BlockPos blockposition = this.physics.before(1_17_0) ? this.patchedBlockPosition() : this.blockPosition(); -+ // Sakura end ++ // Sakura end - physics version api + boolean flag = this.blockState.getBlock() instanceof ConcretePowderBlock; boolean flag1 = flag && this.level().getFluidState(blockposition).is(FluidTags.WATER); double d0 = this.getDeltaMovement().lengthSqr(); -@@ -254,8 +312,11 @@ public class FallingBlockEntity extends Entity { +@@ -252,8 +310,11 @@ public class FallingBlockEntity extends Entity { } else { BlockState iblockdata = this.level().getBlockState(blockposition); @@ -343,11 +345,11 @@ index cd97bc46489544e43e721488254d66ff0e5064d5..14c91fe6e86b1c052d60b4bd7c11e33d + double friction = this.physics.before(1_14_0) ? 0.7F : 0.7D; + this.multiplyDeltaMovement(friction, -0.5D, friction); // Sakura - reduce movement allocations + if (!iblockdata.is(Blocks.MOVING_PISTON) && (flag1 || !this.physics.isWithin(1_9_0, 1_12_0) || this.isAbleToStackOnBlock())) { -+ // Sakura end ++ // Sakura end - physics version api if (!this.cancelDrop) { boolean flag2 = iblockdata.canBeReplaced((BlockPlaceContext) (new DirectionalPlaceContext(this.level(), blockposition, Direction.DOWN, ItemStack.EMPTY, Direction.UP))); boolean flag3 = FallingBlock.isFree(this.level().getBlockState(blockposition.below())) && (!flag || !flag1); -@@ -322,7 +383,12 @@ public class FallingBlockEntity extends Entity { +@@ -320,7 +381,12 @@ public class FallingBlockEntity extends Entity { } } @@ -357,12 +359,12 @@ index cd97bc46489544e43e721488254d66ff0e5064d5..14c91fe6e86b1c052d60b4bd7c11e33d + double drag = physics.before(1_14_0) ? 0.98F : 0.98D; + this.scaleDeltaMovement(drag); // Sakura - reduce movement allocations + } -+ // Sakura end ++ // Sakura end - physics version api } } diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index 8ee03ac1c824fd2476339202c073239292ef62a2..5e588332f5916355293553012c73a647b1f4bd89 100644 +index d6bd637873052e9919a59490efc7d29157681003..ecc33caa0af31949ad28580537fba9822ced9eb7 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java @@ -59,6 +59,13 @@ public class PrimedTnt extends Entity implements TraceableEntity { @@ -375,7 +377,7 @@ index 8ee03ac1c824fd2476339202c073239292ef62a2..5e588332f5916355293553012c73a647 + if (this.physics.isLegacy()) { + multiplyDeltaMovement(0, 1, 0); + } -+ // Sakura end ++ // Sakura end - physics version api } @Override @@ -385,12 +387,12 @@ index 8ee03ac1c824fd2476339202c073239292ef62a2..5e588332f5916355293553012c73a647 // Sakura end + // Sakura start - physics version api + @Override -+ public double getEyeY() { ++ public final double getEyeY() { + return this.physics.isLegacy() ? super.getEyeY() : this.getY(); + } + + @Override -+ public double distanceToSqr(net.minecraft.world.phys.Vec3 vector) { ++ public final double distanceToSqr(net.minecraft.world.phys.Vec3 vector) { + if (!this.physics.isLegacy()) + return super.distanceToSqr(vector); + double x = this.getX() - vector.x; @@ -398,7 +400,7 @@ index 8ee03ac1c824fd2476339202c073239292ef62a2..5e588332f5916355293553012c73a647 + double z = this.getZ() - vector.z; + return x * x + y * y + z * z; + } -+ // Sakura end ++ // Sakura end - physics version api @Override public void tick() { @@ -410,12 +412,13 @@ index 8ee03ac1c824fd2476339202c073239292ef62a2..5e588332f5916355293553012c73a647 + this.addDeltaMovement(0.0D, -gravity, 0.0D); // Sakura - reduce movement allocations } - this.moveBasic(MoverType.SELF, this.getDeltaMovement()); // Sakura -@@ -144,15 +169,18 @@ public class PrimedTnt extends Entity implements TraceableEntity { + this.moveBasic(MoverType.SELF, this.getDeltaMovement()); // Sakura - optimise simple entity movement +@@ -144,15 +169,19 @@ public class PrimedTnt extends Entity implements TraceableEntity { return; } - // Paper end + // Paper end - Configurable TNT height nerf - this.scaleDeltaMovement(0.98D); // Sakura - reduce movement allocations ++ // Sakura start - physics version api + double drag = this.physics.before(1_14_0) ? 0.98F : 0.98D; + this.scaleDeltaMovement(drag); // Sakura - reduce movement allocations if (this.onGround()) { @@ -433,7 +436,7 @@ index 8ee03ac1c824fd2476339202c073239292ef62a2..5e588332f5916355293553012c73a647 // CraftBukkit start - Need to reverse the order of the explosion and the entity death so we have a location for the event // this.discard(); this.respawnMerged(); // Sakura -@@ -205,7 +233,10 @@ public class PrimedTnt extends Entity implements TraceableEntity { +@@ -205,7 +234,10 @@ public class PrimedTnt extends Entity implements TraceableEntity { ExplosionPrimeEvent event = CraftEventFactory.callExplosionPrimeEvent((org.bukkit.entity.Explosive)this.getBukkitEntity()); if (!event.isCancelled()) { @@ -445,17 +448,17 @@ index 8ee03ac1c824fd2476339202c073239292ef62a2..5e588332f5916355293553012c73a647 } // CraftBukkit end } -@@ -274,7 +305,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { - // Paper start - Optional prevent TNT from moving in water +@@ -266,7 +298,7 @@ public class PrimedTnt extends Entity implements TraceableEntity { + // Paper start - Option to prevent TNT from moving in water @Override public boolean isPushedByFluid() { - return !level().paperConfig().fixes.preventTntFromMovingInWater && level().sakuraConfig().cannons.mechanics.tntFlowsInWater && super.isPushedByFluid(); // Sakura - convenience + return !level().paperConfig().fixes.preventTntFromMovingInWater && !this.physics.isLegacy() && level().sakuraConfig().cannons.mechanics.tntFlowsInWater && super.isPushedByFluid(); // Sakura - physics version // Sakura - convenience } - // Paper end + // Paper end - Option to prevent TNT from moving in water } diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 0c9f364922fe28cb099add25d0589dfab966f51e..28fc038594800f8ca3dfeb761b5d32bb27eed036 100644 +index e09d159007922d29a2cdc1b2597a52c16958b819..e10a78213da1514f54e0659960f7633843adc8af 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -74,6 +74,7 @@ public class Explosion { @@ -524,7 +527,7 @@ index 0c9f364922fe28cb099add25d0589dfab966f51e..28fc038594800f8ca3dfeb761b5d32bb if (d11 != 0.0D) { d8 /= d11; d9 /= d11; -@@ -992,7 +1013,14 @@ public class Explosion { +@@ -1012,7 +1033,14 @@ public class Explosion { return data.density(); } @@ -541,14 +544,14 @@ index 0c9f364922fe28cb099add25d0589dfab966f51e..28fc038594800f8ca3dfeb761b5d32bb if (data == null || !data.isExpandable() && (blockDensity == 0.0f || blockDensity == 1.0f)) { level.densityCache.createCache(key, entity, vec3d, blockDensity); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 3292c06d040b6c1996f27a34532ed098f9e7a6c9..cd022e636bf31186b7be36d671932b8e0355d948 100644 +index d75c6d2239a9117ae3c3ef2c4aae8adfe015f491..af3bec085bab7e70cea53802b26bb32e203811b5 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -274,6 +274,205 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -268,6 +268,205 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return this.getLimitedEntities(except, box, net.minecraft.world.entity.EntitySelector.NO_SPECTATORS, limit, search); } - // Sakura end -+ // Sakura start - physics version + // Sakura end - add entity retrival methods with search limits ++ // Sakura start - physics version api + public net.minecraft.world.phys.BlockHitResult.Type rayTrace(net.minecraft.world.phys.Vec3 vec3d, net.minecraft.world.phys.Vec3 vec3d1) { + // May deviate from vanilla here; I remember noticing a bug and there's no fix commit. + int i = Mth.floor(vec3d1.x); @@ -746,9 +749,9 @@ index 3292c06d040b6c1996f27a34532ed098f9e7a6c9..cd022e636bf31186b7be36d671932b8e + + return x >= bb.minX && x <= bb.maxX && y >= bb.minY && y <= bb.maxY; + } -+ // Sakura end ++ // Sakura end - physics version api - protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura // Paper - Async-Anti-Xray - Pass executor + protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, Supplier sakuraWorldConfigCreator, java.util.concurrent.Executor executor) { // Sakura // Paper - create paper world config; Async-Anti-Xray: Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot diff --git a/src/main/java/net/minecraft/world/level/block/FallingBlock.java b/src/main/java/net/minecraft/world/level/block/FallingBlock.java index 1079a99d6a6c9fba36414a863e1454bb2a7f298a..4ee105548df2a730f192d4b511a399d129824df6 100644 @@ -836,7 +839,7 @@ index de87b54895d5a63d32c1734ccdac63246c9f2c5f..79bced0e284430d57d4a7ec80a57d717 case NORTH: return NORTH_AABB; diff --git a/src/main/java/net/minecraft/world/level/block/LiquidBlock.java b/src/main/java/net/minecraft/world/level/block/LiquidBlock.java -index 2bd097203f1e92d3fc343f91dc37220e09dd5066..2fe44dae063eb0cd7d4813fb6b2937830d432e51 100644 +index 9b3dcf1a4d4cece92a629506d341f6bfe79d13d0..1ed3568b363df38b196567d8a93089550913d659 100644 --- a/src/main/java/net/minecraft/world/level/block/LiquidBlock.java +++ b/src/main/java/net/minecraft/world/level/block/LiquidBlock.java @@ -192,8 +192,26 @@ public class LiquidBlock extends Block implements BucketPickup { @@ -869,7 +872,7 @@ index 2bd097203f1e92d3fc343f91dc37220e09dd5066..2fe44dae063eb0cd7d4813fb6b293783 if (org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockFormEvent(world, pos, block.defaultBlockState())) { this.fizz(world, pos); diff --git a/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java b/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java -index 82bde0e37971e806b19d17fbf48c663c82399739..570694ba570135542d4184ac9d03f29132b28df8 100644 +index 93df0a39de85a5fa4b0ab680954405171646915d..f2c393dc0b0ece39932f202b404f2e385acd68ef 100644 --- a/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java +++ b/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java @@ -685,6 +685,10 @@ public class RedStoneWireBlock extends Block { @@ -884,7 +887,7 @@ index 82bde0e37971e806b19d17fbf48c663c82399739..570694ba570135542d4184ac9d03f291 if (RedStoneWireBlock.isCross(state) || RedStoneWireBlock.isDot(state)) { BlockState iblockdata1 = RedStoneWireBlock.isCross(state) ? this.defaultBlockState() : this.crossState; diff --git a/src/main/java/net/minecraft/world/level/block/WaterlilyBlock.java b/src/main/java/net/minecraft/world/level/block/WaterlilyBlock.java -index b6105d178778b326c11b7d29c5e4d8aa2c3a3875..7ff78fb671dc2791378802cda89c358eda15f2ae 100644 +index 05e14322e519d1399e87beb532e1cc4a95f689aa..8b86ec469d7d0a0a7a62d563bd585b5b46815517 100644 --- a/src/main/java/net/minecraft/world/level/block/WaterlilyBlock.java +++ b/src/main/java/net/minecraft/world/level/block/WaterlilyBlock.java @@ -21,6 +21,7 @@ public class WaterlilyBlock extends BushBlock { @@ -937,7 +940,7 @@ index d3d1ad7901411574b85b0febd1c7ddaa8ad7c9f4..cc2c601032b2a2d94aa74cc3ad7169c2 } diff --git a/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java b/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java -index b9025fcc6a4db9533cdc42034c9e77323d0785fa..fd7563a8b6ab8165c1ba7b4959a3bf9369d20e75 100644 +index be74adc86f0ca467f3b59e7b57fd47a8f381d86e..cd66c83a91ea9ee9f3f48af40889e2d58e0355f5 100644 --- a/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java +++ b/src/main/java/net/minecraft/world/level/block/piston/PistonBaseBlock.java @@ -170,6 +170,11 @@ public class PistonBaseBlock extends DirectionalBlock { @@ -980,7 +983,7 @@ index 5301095fa3baac1bde3767153ee2343026596688..1ef830d5e34f25c08d53d693db99a6eb } diff --git a/src/main/java/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java b/src/main/java/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java -index a971bb30ef8620f016a5968a9da40187ee31a3ef..68bac9ea693f4457a8ced072cae85aef076eeb71 100644 +index 3a4a6c635337bb10482cfadf1a4673c56fcc2ed4..09b434839cd8ae5c38579aa4a7639cee813f94e7 100644 --- a/src/main/java/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/piston/PistonMovingBlockEntity.java @@ -159,6 +159,13 @@ public class PistonMovingBlockEntity extends BlockEntity { @@ -1179,10 +1182,10 @@ index a971bb30ef8620f016a5968a9da40187ee31a3ef..68bac9ea693f4457a8ced072cae85aef } diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -index 6d59f8b68d644cb43939bcdf5239fa1caf54ed47..96ccad764cb6424ffe561c558cd11200d89ff541 100644 +index 67db57686dd29713128d5b233454b6147b8e460b..e53327f05cb6843c6ef78102042369f762e3677f 100644 --- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java +++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -@@ -528,7 +528,7 @@ public abstract class FlowingFluid extends Fluid { +@@ -527,7 +527,7 @@ public abstract class FlowingFluid extends Fluid { this.spread(world, pos, state); } @@ -1192,7 +1195,7 @@ index 6d59f8b68d644cb43939bcdf5239fa1caf54ed47..96ccad764cb6424ffe561c558cd11200 } diff --git a/src/main/java/net/minecraft/world/level/material/LavaFluid.java b/src/main/java/net/minecraft/world/level/material/LavaFluid.java -index c3f8e1e2dd89c168b8b4a15b589109db486bc8d7..1dab5318d8693d15ee879456dff3a1916cfad335 100644 +index 3bb4a9a1a6249e8ba2de237f801210e7f4fd5825..8dfa05a586bd21ef8aeab713cad4628166982bfa 100644 --- a/src/main/java/net/minecraft/world/level/material/LavaFluid.java +++ b/src/main/java/net/minecraft/world/level/material/LavaFluid.java @@ -175,7 +175,10 @@ public abstract class LavaFluid extends FlowingFluid { @@ -1208,7 +1211,7 @@ index c3f8e1e2dd89c168b8b4a15b589109db486bc8d7..1dab5318d8693d15ee879456dff3a191 @Override diff --git a/src/main/java/net/minecraft/world/level/material/WaterFluid.java b/src/main/java/net/minecraft/world/level/material/WaterFluid.java -index d280c98aed5262c4ce39526c917de884f25a8584..521b8084e490d5f3ecacd1d7368dddee22647aa9 100644 +index cde93efaecd42b9081405638af3ba91cb5e184c9..0395dab282ace29b62fe72de36440c9bc0c4bfa6 100644 --- a/src/main/java/net/minecraft/world/level/material/WaterFluid.java +++ b/src/main/java/net/minecraft/world/level/material/WaterFluid.java @@ -104,7 +104,10 @@ public abstract class WaterFluid extends FlowingFluid { diff --git a/patches/server/0041-Allow-water-in-the-nether.patch b/patches/server/0041-Allow-water-in-the-nether.patch index c263f6d..4acd5c0 100644 --- a/patches/server/0041-Allow-water-in-the-nether.patch +++ b/patches/server/0041-Allow-water-in-the-nether.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow water in the nether diff --git a/src/main/java/net/minecraft/world/item/BucketItem.java b/src/main/java/net/minecraft/world/item/BucketItem.java -index aa0f09a18ea781e027ea70928b30d3e93061120f..3dafde37bcddd81cbe7a7ba938db5b1cbe14a42f 100644 +index 6371f326fc86cfc53e39bf8ed13b646f7705fbbc..6c2eca802cf04a189e36cd6b37d503cf32ec0aa1 100644 --- a/src/main/java/net/minecraft/world/item/BucketItem.java +++ b/src/main/java/net/minecraft/world/item/BucketItem.java @@ -195,7 +195,7 @@ public class BucketItem extends Item implements DispensibleContainerItem { @@ -18,12 +18,12 @@ index aa0f09a18ea781e027ea70928b30d3e93061120f..3dafde37bcddd81cbe7a7ba938db5b1c int j = blockposition.getY(); int k = blockposition.getZ(); diff --git a/src/main/java/net/minecraft/world/level/block/IceBlock.java b/src/main/java/net/minecraft/world/level/block/IceBlock.java -index 4ab6997dad5b112f5105f786a6cee78c6c5667e8..c7dd921ab70ac53559208c58fbf9dec991b1f26b 100644 +index 9c8c1df5187daefb1c8098b4d4a0976c71a7bbfd..f5b4733d182f0831ae07a9ff71f2c2e8dd496aaf 100644 --- a/src/main/java/net/minecraft/world/level/block/IceBlock.java +++ b/src/main/java/net/minecraft/world/level/block/IceBlock.java @@ -41,7 +41,7 @@ public class IceBlock extends HalfTransparentBlock { public void afterDestroy(Level world, BlockPos pos, ItemStack tool) { - // Paper end + // Paper end - Improve Block#breakNaturally API if (EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) == 0) { - if (world.dimensionType().ultraWarm()) { + if (!world.sakuraConfig().environment.allowWaterInTheNether && world.dimensionType().ultraWarm()) { // Sakura diff --git a/patches/server/0042-Configure-concrete-solidifying-in-water.patch b/patches/server/0042-Configure-concrete-solidifying-in-water.patch index 4f13e21..520ad0d 100644 --- a/patches/server/0042-Configure-concrete-solidifying-in-water.patch +++ b/patches/server/0042-Configure-concrete-solidifying-in-water.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Configure concrete solidifying in water diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index 14c91fe6e86b1c052d60b4bd7c11e33d0aac8d6a..d218dda9b7d88ea10cc4caf527c5fa3d3cacd3ad 100644 +index cc28593be3f99ee0e5ae086872966a9ab0f0a6c4..3ee7b74955550f880cf9237a1b01d8379d5145e9 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -@@ -288,7 +288,7 @@ public class FallingBlockEntity extends Entity { +@@ -286,7 +286,7 @@ public class FallingBlockEntity extends Entity { BlockPos blockposition = this.physics.before(1_17_0) ? this.patchedBlockPosition() : this.blockPosition(); - // Sakura end + // Sakura end - physics version api - boolean flag = this.blockState.getBlock() instanceof ConcretePowderBlock; + boolean flag = this.level().sakuraConfig().cannons.sand.concreteSolidifyInWater && this.blockState.getBlock() instanceof ConcretePowderBlock; // Sakura diff --git a/patches/server/0044-Allow-explosions-to-destroy-lava.patch b/patches/server/0044-Allow-explosions-to-destroy-lava.patch index ae44dae..0653e9e 100644 --- a/patches/server/0044-Allow-explosions-to-destroy-lava.patch +++ b/patches/server/0044-Allow-explosions-to-destroy-lava.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow explosions to destroy lava diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 28fc038594800f8ca3dfeb761b5d32bb27eed036..97b5854f9ad38308c8abf15a7899b879f70e1271 100644 +index e10a78213da1514f54e0659960f7633843adc8af..9c35e3cd73eb324c36d383c9410f1c3a4e23d978 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -228,6 +228,10 @@ public class Explosion { @@ -17,7 +17,7 @@ index 28fc038594800f8ca3dfeb761b5d32bb27eed036..97b5854f9ad38308c8abf15a7899b879 + resistance = Optional.of(0.0f); // 1.0 might be better here, 0.0 seems too much. + } } - // Sakura end + // Sakura end - explosion durable blocks @@ -449,6 +453,12 @@ public class Explosion { return false; diff --git a/patches/server/0045-Disable-bubble-columns-affecting-cannon-entities.patch b/patches/server/0045-Disable-bubble-columns-affecting-cannon-entities.patch index 25ba0cd..4a73f99 100644 --- a/patches/server/0045-Disable-bubble-columns-affecting-cannon-entities.patch +++ b/patches/server/0045-Disable-bubble-columns-affecting-cannon-entities.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Disable bubble columns affecting cannon entities diff --git a/src/main/java/net/minecraft/world/level/block/BubbleColumnBlock.java b/src/main/java/net/minecraft/world/level/block/BubbleColumnBlock.java -index 115506fceb9a406e844880fb523d2ff09a66cf7b..c55202aa366869dc34ef11a7786acdc11cef183d 100644 +index 78d98a442ea3c14500ac6ae597ff2a5080b7ce15..852dc46acbee4efd00f845b81d3ec71297a02333 100644 --- a/src/main/java/net/minecraft/world/level/block/BubbleColumnBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BubbleColumnBlock.java @@ -48,6 +48,7 @@ public class BubbleColumnBlock extends Block implements BucketPickup { @Override public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { - if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper -+ if (!world.sakuraConfig().cannons.tntAndSandAffectedByBubbleColumns && entity.isPrimedTNT | entity.isFallingBlock) return; // Sakura + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent ++ if (!world.sakuraConfig().cannons.tntAndSandAffectedByBubbleColumns && (entity.isPrimedTNT || entity.isFallingBlock)) return; // Sakura - configure bubble columns affecting cannon entities BlockState blockState = world.getBlockState(pos.above()); if (blockState.isAir()) { entity.onAboveBubbleCol(state.getValue(DRAG_DOWN)); diff --git a/patches/server/0046-Treat-all-collidable-blocks-as-full-while-moving-fas.patch b/patches/server/0046-Treat-all-collidable-blocks-as-full-while-moving-fas.patch index 7a95c08..30e533d 100644 --- a/patches/server/0046-Treat-all-collidable-blocks-as-full-while-moving-fas.patch +++ b/patches/server/0046-Treat-all-collidable-blocks-as-full-while-moving-fas.patch @@ -59,10 +59,10 @@ index a40dcbde87860fd6d3b60d0b9e2d5e63e18e69b7..d0bab6610a0ea8d3e6ba69034a25f409 AABB singleAABB = blockCollision.getSingleAABBRepresentation(); if (singleAABB != null) { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 852276d9bedc51c3c8a28b60c85fdb23cf9cf818..7631e9c2d64bd153267ebd36648fe5e755906def 100644 +index f9c7bb5636fee6e56e73428d1ec7afc2faef0c35..5d310918daf06bed137438a7ec24c2aa29abb472 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -547,6 +547,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -580,6 +580,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S flags |= io.papermc.paper.util.CollisionUtil.COLLISION_FLAG_LOAD_CHUNKS | io.papermc.paper.util.CollisionUtil.COLLISION_FLAG_ADD_TICKET; } @@ -76,4 +76,4 @@ index 852276d9bedc51c3c8a28b60c85fdb23cf9cf818..7631e9c2d64bd153267ebd36648fe5e7 + return flags; } - // Sakura end + // Sakura end - load chunks on cannon entity movement diff --git a/patches/server/0047-Add-redstone-implementation-API.patch b/patches/server/0047-Add-redstone-implementation-API.patch index 3a710db..ed710c2 100644 --- a/patches/server/0047-Add-redstone-implementation-API.patch +++ b/patches/server/0047-Add-redstone-implementation-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add redstone implementation API diff --git a/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java b/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java -index 82bde0e37971e806b19d17fbf48c663c82399739..8a2c9948aea1203c209948bdd3653557b1e57b5c 100644 +index f2c393dc0b0ece39932f202b404f2e385acd68ef..9d8c0d2b5a1d5a23966b49f8fefbb3d379a07364 100644 --- a/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java +++ b/src/main/java/net/minecraft/world/level/block/RedStoneWireBlock.java @@ -269,7 +269,7 @@ public class RedStoneWireBlock extends Block { @@ -70,4 +70,4 @@ index 82bde0e37971e806b19d17fbf48c663c82399739..8a2c9948aea1203c209948bdd3653557 + if (world.localConfig().config(pos).redstoneImplementation == io.papermc.paper.configuration.WorldConfiguration.Misc.RedstoneImplementation.ALTERNATE_CURRENT) { // Sakura world.getWireHandler().onWireUpdated(pos); } else - // Paper end + // Paper end - optimize redstone (Alternate Current) diff --git a/patches/server/0048-Reduce-entity-tracker-player-updates.patch b/patches/server/0048-Reduce-entity-tracker-player-updates.patch index 893f03f..fdc42fc 100644 --- a/patches/server/0048-Reduce-entity-tracker-player-updates.patch +++ b/patches/server/0048-Reduce-entity-tracker-player-updates.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Reduce entity tracker player updates diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 24e0eaf25b2b366fd0e63a530c90f233c11d1bca..d295a4b872b4296732c9c59d6e0d856e07ec0f60 100644 +index 2313f390c96dcbea1dca65ad3de5b9e74571297f..a725ee3bdda510d540afb78553543c8d164e3d68 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -1159,6 +1159,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1145,6 +1145,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider try { for (TrackedEntity tracker : this.entityMap.values()) { // update tracker entry @@ -16,19 +16,19 @@ index 24e0eaf25b2b366fd0e63a530c90f233c11d1bca..d295a4b872b4296732c9c59d6e0d856e tracker.updatePlayers(tracker.entity.getPlayersInTrackRange()); } } finally { -@@ -1325,14 +1326,34 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1311,14 +1312,34 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider private final int range; SectionPos lastSectionPos; - public final Set seenBy = new it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet<>(); // Paper - optimise map impl -+ private final int playerSearchInterval; // Sakura -+ private Vec3 entityPosition; // Sakura + public final Set seenBy = new it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet<>(); // Paper - Perf: optimise map impl ++ private final int playerSearchInterval; // Sakura - reduce entity tracker player updates ++ private Vec3 entityPosition; // Sakura - reduce entity tracker player updates public TrackedEntity(Entity entity, int i, int j, boolean flag) { this.serverEntity = new ServerEntity(ChunkMap.this.level, entity, j, flag, this::broadcast, this.seenBy); // CraftBukkit this.entity = entity; this.range = i; this.lastSectionPos = SectionPos.of((EntityAccess) entity); -+ // Sakura start - delay entities looking for nearby players ++ // Sakura start - reduce entities looking for nearby players + // Use a maximum of 20 ticks because stationary entities use Integer.MAX_VALUE + // which causes them to turn invisible after untracking. + this.playerSearchInterval = Math.min(j, 20); @@ -46,7 +46,7 @@ index 24e0eaf25b2b366fd0e63a530c90f233c11d1bca..d295a4b872b4296732c9c59d6e0d856e + + return entity.position().distanceToSqr(lastPosition) >= (double) range / 2.0; + } -+ // Sakura end ++ // Sakura end - reduce entities looking for nearby players + // Paper start - use distance map to optimise tracker com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet lastTrackerCandidates; diff --git a/patches/server/0050-Configure-mob-spawner-defaults.patch b/patches/server/0050-Configure-mob-spawner-defaults.patch index 415a335..bd3c942 100644 --- a/patches/server/0050-Configure-mob-spawner-defaults.patch +++ b/patches/server/0050-Configure-mob-spawner-defaults.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Configure mob spawner defaults diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main/java/net/minecraft/world/level/BaseSpawner.java -index d88a23984dcea9c2119bdc245013af8b25448da3..0300e7af69ac41e3bd3a204104b3f9943e0ae05b 100644 +index 65c3e91ac4541c0150057dc9f012eb1ee566516e..218e06c3e0dd17f2801a5d3ca12b049ee24275a1 100644 --- a/src/main/java/net/minecraft/world/level/BaseSpawner.java +++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java @@ -49,7 +49,16 @@ public abstract class BaseSpawner { public int spawnRange = 4; - private int tickDelay = 0; // Paper + private int tickDelay = 0; // Paper - Configurable mob spawner tick rate - public BaseSpawner() {} + // Sakura start - configure spawner defaults diff --git a/patches/server/0052-Add-instant-mob-death-animation.patch b/patches/server/0052-Add-instant-mob-death-animation.patch index 3037acb..6cca6f2 100644 --- a/patches/server/0052-Add-instant-mob-death-animation.patch +++ b/patches/server/0052-Add-instant-mob-death-animation.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add instant mob death animation diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 7728492fd3623670482f4ca89e0934e7bcb972e1..6192f6a957855c8f64fd6c909dc150dd08586eb6 100644 +index 7bc505822ccaf389c0e42d6907758f99956d87bb..99b945292ecece36f9d4976493fb42688047ed8b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1765,6 +1765,12 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1768,6 +1768,12 @@ public abstract class LivingEntity extends Entity implements Attackable { // Paper start if (this.dead) { // Paper diff --git a/patches/server/0053-Configure-fluids-breaking-redstone.patch b/patches/server/0053-Configure-fluids-breaking-redstone.patch index 18ac098..d0d5ab9 100644 --- a/patches/server/0053-Configure-fluids-breaking-redstone.patch +++ b/patches/server/0053-Configure-fluids-breaking-redstone.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configure fluids breaking redstone diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -index 96ccad764cb6424ffe561c558cd11200d89ff541..cc6f05998f2d73b09350c337e10ef3f57a9e0e68 100644 +index e53327f05cb6843c6ef78102042369f762e3677f..c641f445381ed424772e66ca9ea459b30ece9262 100644 --- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java +++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -@@ -480,6 +480,10 @@ public abstract class FlowingFluid extends Fluid { +@@ -479,6 +479,10 @@ public abstract class FlowingFluid extends Fluid { LiquidBlockContainer ifluidcontainer = (LiquidBlockContainer) block; return ifluidcontainer.canPlaceLiquid((Player) null, world, pos, state, fluid); diff --git a/patches/server/0054-Option-to-disable-explosions-hurting-players.patch b/patches/server/0054-Option-to-disable-explosions-hurting-players.patch index ae2493d..a3f08ec 100644 --- a/patches/server/0054-Option-to-disable-explosions-hurting-players.patch +++ b/patches/server/0054-Option-to-disable-explosions-hurting-players.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option to disable explosions hurting players diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index d0742bbf6f94705e378972e3bc0fab4682f3d78f..9b6359b67b5840739dffdb174e591ea76601626c 100644 +index 3892af6ddcd889f65a46d01322d3e015d7c1fcf7..20507c6b48d70fb19cc1cba6ed31bffd0ff88a28 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -933,7 +933,7 @@ public abstract class Player extends LivingEntity { +@@ -934,7 +934,7 @@ public abstract class Player extends LivingEntity { @Override public boolean isInvulnerableTo(DamageSource damageSource) { diff --git a/patches/server/0056-Add-explosions-dropping-items-config.patch b/patches/server/0056-Add-explosions-dropping-items-config.patch index 24b8674..a2e3a5e 100644 --- a/patches/server/0056-Add-explosions-dropping-items-config.patch +++ b/patches/server/0056-Add-explosions-dropping-items-config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add explosions dropping items config diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 97b5854f9ad38308c8abf15a7899b879f70e1271..d31d3042953f629c9fa19b76b6bdd30ad517b686 100644 +index 9c35e3cd73eb324c36d383c9410f1c3a4e23d978..d1edbd59588c9a83cff0bf191c3791550adc7384 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java -@@ -891,6 +891,12 @@ public class Explosion { +@@ -911,6 +911,12 @@ public class Explosion { }); } diff --git a/patches/server/0057-Optimise-check-inside-blocks-and-fluids.patch b/patches/server/0057-Optimise-check-inside-blocks-and-fluids.patch index 7d5fa6e..8d3fbda 100644 --- a/patches/server/0057-Optimise-check-inside-blocks-and-fluids.patch +++ b/patches/server/0057-Optimise-check-inside-blocks-and-fluids.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Optimise check inside blocks and fluids diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 7e397d5ec59c24d87aeb4b935b0aee10f9cc2653..13cf73a041a70d210465079ec1455f657b680204 100644 +index 5d310918daf06bed137438a7ec24c2aa29abb472..071eb3a86fb34aaddb9e47d56cb2c59ceea3e4c4 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1981,18 +1981,37 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1984,18 +1984,37 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S BlockPos blockposition1 = BlockPos.containing(axisalignedbb.maxX - offset, axisalignedbb.maxY - offset, axisalignedbb.maxZ - offset); // Sakura end @@ -50,7 +50,7 @@ index 7e397d5ec59c24d87aeb4b935b0aee10f9cc2653..13cf73a041a70d210465079ec1455f65 try { iblockdata.entityInside(this.level(), blockposition_mutableblockposition, this); -@@ -4783,7 +4802,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4780,7 +4799,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { @@ -59,7 +59,7 @@ index 7e397d5ec59c24d87aeb4b935b0aee10f9cc2653..13cf73a041a70d210465079ec1455f65 return false; } else { AABB axisalignedbb = this.getBoundingBox().deflate(0.001D); -@@ -4800,11 +4819,30 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4797,11 +4816,30 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S int k1 = 0; BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); diff --git a/patches/server/0058-Fix-paper-findSupportingBlock-not-updating-last-chun.patch b/patches/server/0058-Fix-paper-findSupportingBlock-not-updating-last-chun.patch index 103100a..3135ed2 100644 --- a/patches/server/0058-Fix-paper-findSupportingBlock-not-updating-last-chun.patch +++ b/patches/server/0058-Fix-paper-findSupportingBlock-not-updating-last-chun.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix paper findSupportingBlock not updating last chunk diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 5afbdbd07afc671c3c6db491a713abfa467fffa3..025429bad45b478c2aab20c4ffd2c240636be7ed 100644 +index af3bec085bab7e70cea53802b26bb32e203811b5..892e8ad2d10aee0f1cdf85f23518788ccc78f137 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -908,6 +908,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -898,6 +898,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { if (chunkDiff != 0) { lastChunk = chunkProvider.getChunkAtIfLoadedImmediately(newChunkX, newChunkZ); diff --git a/patches/server/0059-Avoid-searching-for-lava-if-throttled-water-flow-spe.patch b/patches/server/0059-Avoid-searching-for-lava-if-throttled-water-flow-spe.patch index e629e1f..b5f31ab 100644 --- a/patches/server/0059-Avoid-searching-for-lava-if-throttled-water-flow-spe.patch +++ b/patches/server/0059-Avoid-searching-for-lava-if-throttled-water-flow-spe.patch @@ -6,12 +6,12 @@ Subject: [PATCH] Avoid searching for lava if throttled water flow speed is diff --git a/src/main/java/net/minecraft/world/level/block/LiquidBlock.java b/src/main/java/net/minecraft/world/level/block/LiquidBlock.java -index aaac136acbef15a1925b4b6e8da7bfc4f75360de..b9d2646e1427c611475d66e2ab75d61b8aec427b 100644 +index e5d9b9c1c86b0beab3efdd4784582fd9de0bf926..5ae4f1cb1397509df3d1aae7200facade84afe39 100644 --- a/src/main/java/net/minecraft/world/level/block/LiquidBlock.java +++ b/src/main/java/net/minecraft/world/level/block/LiquidBlock.java @@ -147,7 +147,7 @@ public class LiquidBlock extends Block implements BucketPickup { - // Paper start - Get flow speed. Throttle if its water and flowing adjacent to lava + // Paper start - Configurable speed for water flowing over lava public int getFlowSpeed(Level world, BlockPos blockposition) { - if (net.minecraft.core.registries.BuiltInRegistries.FLUID.wrapAsHolder(this.fluid).is(FluidTags.WATER)) { + if (net.minecraft.core.registries.BuiltInRegistries.FLUID.wrapAsHolder(this.fluid).is(FluidTags.WATER) && this.fluid.getTickDelay(world) != world.paperConfig().environment.waterOverLavaFlowSpeed) { // Sakura diff --git a/patches/server/0061-Fix-doEntityDrops-gamerule-preventing-falling-blocks.patch b/patches/server/0061-Fix-doEntityDrops-gamerule-preventing-falling-blocks.patch index e04a529..29fb6c2 100644 --- a/patches/server/0061-Fix-doEntityDrops-gamerule-preventing-falling-blocks.patch +++ b/patches/server/0061-Fix-doEntityDrops-gamerule-preventing-falling-blocks.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix doEntityDrops gamerule preventing falling blocks from diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index d218dda9b7d88ea10cc4caf527c5fa3d3cacd3ad..de3f74f316e3cc2c1fce954b6a759d5a5d4c4219 100644 +index 3ee7b74955550f880cf9237a1b01d8379d5145e9..d86f360f4f51e54b6999bb3432ad06d2ea621f90 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -@@ -363,10 +363,14 @@ public class FallingBlockEntity extends Entity { +@@ -361,10 +361,14 @@ public class FallingBlockEntity extends Entity { tileentity.setChanged(); } }