diff --git a/patches/server/0002-Sakura-Utils.patch b/patches/server/0002-Sakura-Utils.patch index dd59c91..7b87af0 100644 --- a/patches/server/0002-Sakura-Utils.patch +++ b/patches/server/0002-Sakura-Utils.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Sakura Utils diff --git a/src/main/java/me/samsuik/sakura/utils/collections/OrderedComparatorList.java b/src/main/java/me/samsuik/sakura/utils/collections/OrderedComparatorList.java new file mode 100644 -index 0000000000000000000000000000000000000000..ff4909a2ba8f451a7c6aa55ee98e33c88dd69e5e +index 0000000000000000000000000000000000000000..239fc8823b32ae5c8f6e3bfd6ecdde0ccd1e5a8b --- /dev/null +++ b/src/main/java/me/samsuik/sakura/utils/collections/OrderedComparatorList.java @@ -0,0 +1,51 @@ @@ -17,7 +17,7 @@ index 0000000000000000000000000000000000000000..ff4909a2ba8f451a7c6aa55ee98e33c8 +import java.util.Arrays; +import java.util.Comparator; + -+public class OrderedComparatorList extends ObjectArrayList { ++public final class OrderedComparatorList extends ObjectArrayList { + + private final Comparator comparator; + private boolean binarySearch = true; @@ -63,7 +63,7 @@ index 0000000000000000000000000000000000000000..ff4909a2ba8f451a7c6aa55ee98e33c8 +} diff --git a/src/main/java/me/samsuik/sakura/utils/collections/TrackedEntityChunkMap.java b/src/main/java/me/samsuik/sakura/utils/collections/TrackedEntityChunkMap.java new file mode 100644 -index 0000000000000000000000000000000000000000..e31998ac50b8bda8687d07b0022c0e039fa2e774 +index 0000000000000000000000000000000000000000..267db86c5d12a804d2f9c868df996a3391910cbd --- /dev/null +++ b/src/main/java/me/samsuik/sakura/utils/collections/TrackedEntityChunkMap.java @@ -0,0 +1,34 @@ @@ -74,7 +74,7 @@ index 0000000000000000000000000000000000000000..e31998ac50b8bda8687d07b0022c0e03 +import it.unimi.dsi.fastutil.objects.ObjectCollection; +import net.minecraft.server.level.ChunkMap; + -+public class TrackedEntityChunkMap extends Int2ObjectOpenHashMap { ++public final class TrackedEntityChunkMap extends Int2ObjectOpenHashMap { + + private final ObjectArrayList entityList = new UnorderedIndexedList<>(); + @@ -103,7 +103,7 @@ index 0000000000000000000000000000000000000000..e31998ac50b8bda8687d07b0022c0e03 +} diff --git a/src/main/java/me/samsuik/sakura/utils/collections/UnorderedIndexedList.java b/src/main/java/me/samsuik/sakura/utils/collections/UnorderedIndexedList.java new file mode 100644 -index 0000000000000000000000000000000000000000..be4f5b4999c85fc6765e37cc9af0a87292327dbf +index 0000000000000000000000000000000000000000..4ca3bf6d6c7aec3a1b31e6ef4f863fa5c34888bd --- /dev/null +++ b/src/main/java/me/samsuik/sakura/utils/collections/UnorderedIndexedList.java @@ -0,0 +1,65 @@ @@ -112,7 +112,7 @@ index 0000000000000000000000000000000000000000..be4f5b4999c85fc6765e37cc9af0a872 +import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; + -+public class UnorderedIndexedList extends ObjectArrayList { ++public final class UnorderedIndexedList extends ObjectArrayList { + + private final Int2IntOpenHashMap elementToIndex = new Int2IntOpenHashMap(); + @@ -174,13 +174,13 @@ index 0000000000000000000000000000000000000000..be4f5b4999c85fc6765e37cc9af0a872 +} diff --git a/src/main/java/me/samsuik/sakura/utils/objects/Expiry.java b/src/main/java/me/samsuik/sakura/utils/objects/Expiry.java new file mode 100644 -index 0000000000000000000000000000000000000000..a05e7d03f17f675e190d63a4206129a74f42cadc +index 0000000000000000000000000000000000000000..93a5655d9dc355d0596c86ea7b592d14ff941476 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/utils/objects/Expiry.java @@ -0,0 +1,21 @@ +package me.samsuik.sakura.utils.objects; + -+public class Expiry { ++public final class Expiry { + + private long expireAt; + private final int inc; diff --git a/patches/server/0004-Sakura-Configuration-Files.patch b/patches/server/0004-Sakura-Configuration-Files.patch index 3b2a485..3e58cf7 100644 --- a/patches/server/0004-Sakura-Configuration-Files.patch +++ b/patches/server/0004-Sakura-Configuration-Files.patch @@ -136,7 +136,7 @@ index 0000000000000000000000000000000000000000..9b5af05f7a4593eb44f36fff90d94e98 +} diff --git a/src/main/java/me/samsuik/sakura/command/SakuraCommand.java b/src/main/java/me/samsuik/sakura/command/SakuraCommand.java new file mode 100644 -index 0000000000000000000000000000000000000000..f4e75ba8f2c53a82cb40868f0e1ab77ffcc19e3e +index 0000000000000000000000000000000000000000..2b145614bf189ae56622016436bfefd63f5271eb --- /dev/null +++ b/src/main/java/me/samsuik/sakura/command/SakuraCommand.java @@ -0,0 +1,93 @@ @@ -161,7 +161,7 @@ index 0000000000000000000000000000000000000000..f4e75ba8f2c53a82cb40868f0e1ab77f +import java.util.List; + +@DefaultQualifier(NonNull.class) -+public class SakuraCommand extends Command { ++public final class SakuraCommand extends Command { + + private static final Component INFORMATION_MESSAGE = MiniMessage.miniMessage().deserialize(""" + . @@ -235,7 +235,7 @@ index 0000000000000000000000000000000000000000..f4e75ba8f2c53a82cb40868f0e1ab77f +} diff --git a/src/main/java/me/samsuik/sakura/command/SakuraCommands.java b/src/main/java/me/samsuik/sakura/command/SakuraCommands.java new file mode 100644 -index 0000000000000000000000000000000000000000..c2651cac1dcf85fb67fe981b97efee4e56431de2 +index 0000000000000000000000000000000000000000..3b08454cf7411d12bb33225df59800bd73312123 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/command/SakuraCommands.java @@ -0,0 +1,26 @@ @@ -249,7 +249,7 @@ index 0000000000000000000000000000000000000000..c2651cac1dcf85fb67fe981b97efee4e +import java.util.HashMap; +import java.util.Map; + -+public class SakuraCommands { ++public final class SakuraCommands { + + static final Map COMMANDS = new HashMap<>(); + static { @@ -267,7 +267,7 @@ index 0000000000000000000000000000000000000000..c2651cac1dcf85fb67fe981b97efee4e +} diff --git a/src/main/java/me/samsuik/sakura/command/subcommands/ConfigCommand.java b/src/main/java/me/samsuik/sakura/command/subcommands/ConfigCommand.java new file mode 100644 -index 0000000000000000000000000000000000000000..0b5f50c7447d1c1732a745bae54c4fcd4f45da46 +index 0000000000000000000000000000000000000000..75febc3f40910a27a9fc651dac9697da48338cc1 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/command/subcommands/ConfigCommand.java @@ -0,0 +1,45 @@ @@ -290,7 +290,7 @@ index 0000000000000000000000000000000000000000..0b5f50c7447d1c1732a745bae54c4fcd +import static net.kyori.adventure.text.format.NamedTextColor.RED; + +@DefaultQualifier(NonNull.class) -+public class ConfigCommand extends BaseSubCommand { ++public final class ConfigCommand extends BaseSubCommand { + + public ConfigCommand(String name) { + super(name); @@ -942,7 +942,7 @@ index 6934e9dac0d69c043b73b7c46d59f2d39b37c67f..5c125a044536f65637ca82870a4a9d8d 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 19f23a6c8fb5c02843c27fb8a242ec9d0d1b538b..18a26062c114ef2b67cb7fbbffc8e2dc14b4e097 100644 +index 19f23a6c8fb5c02843c27fb8a242ec9d0d1b538b..8be02651774f7f7c5b383759df41ee18a8b5c267 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -171,6 +171,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -951,7 +951,7 @@ index 19f23a6c8fb5c02843c27fb8a242ec9d0d1b538b..18a26062c114ef2b67cb7fbbffc8e2dc // Paper end - add paper world config + // Sakura start + private final me.samsuik.sakura.configuration.WorldConfiguration sakuraConfig; -+ public me.samsuik.sakura.configuration.WorldConfiguration sakuraConfig() { ++ public final me.samsuik.sakura.configuration.WorldConfiguration sakuraConfig() { + return this.sakuraConfig; + } + // Sakura end 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 6ab1c43..c752f66 100644 --- a/patches/server/0005-Local-Config-and-Value-Storage-API.patch +++ b/patches/server/0005-Local-Config-and-Value-Storage-API.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Local Config and Value Storage API diff --git a/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java b/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java new file mode 100644 -index 0000000000000000000000000000000000000000..3508755c11cc8f577d27a440f2f4a08d9856f5ae +index 0000000000000000000000000000000000000000..ff54d6b5d3f0299a37f36dde86fd00c5d04115dc --- /dev/null +++ b/src/main/java/me/samsuik/sakura/local/config/LocalConfigManager.java @@ -0,0 +1,143 @@ @@ -31,7 +31,7 @@ index 0000000000000000000000000000000000000000..3508755c11cc8f577d27a440f2f4a08d +import java.util.List; +import java.util.Map; + -+public class LocalConfigManager implements LocalStorageHandler { ++public final class LocalConfigManager implements LocalStorageHandler { + + private final Map storageMap = new Object2ObjectOpenHashMap<>(); + // tree is a tree. it may not be correct but it works. @@ -155,7 +155,7 @@ index 0000000000000000000000000000000000000000..3508755c11cc8f577d27a440f2f4a08d +} diff --git a/src/main/java/me/samsuik/sakura/local/config/LocalValueConfig.java b/src/main/java/me/samsuik/sakura/local/config/LocalValueConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..fbd877356594f0cf8934452522cef4349801e5d7 +index 0000000000000000000000000000000000000000..f0037f98e93fd1f0dea9c224ba402ebcacf9b21f --- /dev/null +++ b/src/main/java/me/samsuik/sakura/local/config/LocalValueConfig.java @@ -0,0 +1,59 @@ @@ -174,7 +174,7 @@ index 0000000000000000000000000000000000000000..fbd877356594f0cf8934452522cef434 + +import java.util.Map; + -+public class LocalValueConfig { ++public final class LocalValueConfig { + + private final Expiry expiry; + public Map durableMaterials; @@ -231,17 +231,16 @@ index eb04fab84e266b11ef4e531cb7ea8504a1e46aac..23e5fcffe6e1b1a12af5c7399dd8b2f6 this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 18a26062c114ef2b67cb7fbbffc8e2dc14b4e097..65a9b601204eb8e958e579a47cb0241d134228e2 100644 +index 8be02651774f7f7c5b383759df41ee18a8b5c267..d40c3aefde1e3b70657b48241cda2d0b0c457531 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -177,6 +177,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -177,6 +177,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return this.sakuraConfig; } // Sakura end + // Sakura start + private final me.samsuik.sakura.local.config.LocalConfigManager localConfig = new me.samsuik.sakura.local.config.LocalConfigManager(this); -+ -+ public me.samsuik.sakura.local.config.LocalConfigManager localConfig() { ++ public final me.samsuik.sakura.local.config.LocalConfigManager localConfig() { + return this.localConfig; + } + // Sakura end diff --git a/patches/server/0006-Visibility-API-and-Command.patch b/patches/server/0006-Visibility-API-and-Command.patch index 8835987..1005474 100644 --- a/patches/server/0006-Visibility-API-and-Command.patch +++ b/patches/server/0006-Visibility-API-and-Command.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Visibility API and Command diff --git a/src/main/java/me/samsuik/sakura/command/SakuraCommands.java b/src/main/java/me/samsuik/sakura/command/SakuraCommands.java -index c2651cac1dcf85fb67fe981b97efee4e56431de2..d7d0c49cc5d576c594dee16ddba037cd147e11fa 100644 +index 3b08454cf7411d12bb33225df59800bd73312123..22676ec7a7ae9494b198e5e65e6be6d32e0feb85 100644 --- a/src/main/java/me/samsuik/sakura/command/SakuraCommands.java +++ b/src/main/java/me/samsuik/sakura/command/SakuraCommands.java @@ -2,6 +2,9 @@ package me.samsuik.sakura.command; @@ -18,7 +18,7 @@ index c2651cac1dcf85fb67fe981b97efee4e56431de2..d7d0c49cc5d576c594dee16ddba037cd import net.minecraft.server.MinecraftServer; import org.bukkit.command.Command; -@@ -14,6 +17,10 @@ public class SakuraCommands { +@@ -14,6 +17,10 @@ public final class SakuraCommands { static { COMMANDS.put("sakura", new SakuraCommand("sakura")); COMMANDS.put("config", new ConfigCommand("config")); @@ -31,7 +31,7 @@ index c2651cac1dcf85fb67fe981b97efee4e56431de2..d7d0c49cc5d576c594dee16ddba037cd public static void registerCommands(final MinecraftServer server) { diff --git a/src/main/java/me/samsuik/sakura/command/subcommands/FPSCommand.java b/src/main/java/me/samsuik/sakura/command/subcommands/FPSCommand.java new file mode 100644 -index 0000000000000000000000000000000000000000..1dc2a98123d671c945e85b97a898f56e527a81f5 +index 0000000000000000000000000000000000000000..aa5ddf696b09226a0bd3d967d2ac2b11fc2deb32 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/command/subcommands/FPSCommand.java @@ -0,0 +1,26 @@ @@ -45,7 +45,7 @@ index 0000000000000000000000000000000000000000..1dc2a98123d671c945e85b97a898f56e +import org.checkerframework.framework.qual.DefaultQualifier; + +@DefaultQualifier(NonNull.class) -+public class FPSCommand extends BaseSubCommand { ++public final class FPSCommand extends BaseSubCommand { + + private final VisibilityGUI VISIBILITY_GUI = new VisibilityGUI(); + @@ -63,7 +63,7 @@ index 0000000000000000000000000000000000000000..1dc2a98123d671c945e85b97a898f56e +} diff --git a/src/main/java/me/samsuik/sakura/command/subcommands/VisualCommand.java b/src/main/java/me/samsuik/sakura/command/subcommands/VisualCommand.java new file mode 100644 -index 0000000000000000000000000000000000000000..6027e4741e2de7c6d3bd7b094c196a212e34e2f5 +index 0000000000000000000000000000000000000000..148a583279333eeb3e5db16652623082cd5e0e60 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/command/subcommands/VisualCommand.java @@ -0,0 +1,45 @@ @@ -82,7 +82,7 @@ index 0000000000000000000000000000000000000000..6027e4741e2de7c6d3bd7b094c196a21 +import java.util.Arrays; + +@DefaultQualifier(NonNull.class) -+public class VisualCommand extends BaseSubCommand { ++public final class VisualCommand extends BaseSubCommand { + + private final Visibility.Setting type; + @@ -114,7 +114,7 @@ index 0000000000000000000000000000000000000000..6027e4741e2de7c6d3bd7b094c196a21 +} diff --git a/src/main/java/me/samsuik/sakura/player/visibility/VisibilityGUI.java b/src/main/java/me/samsuik/sakura/player/visibility/VisibilityGUI.java new file mode 100644 -index 0000000000000000000000000000000000000000..d5bd47426a219a3825deaa0b62386c88d17b4aac +index 0000000000000000000000000000000000000000..115addbbed36b9c10c123450a0f6400c2b8cf97d --- /dev/null +++ b/src/main/java/me/samsuik/sakura/player/visibility/VisibilityGUI.java @@ -0,0 +1,119 @@ @@ -137,7 +137,7 @@ index 0000000000000000000000000000000000000000..d5bd47426a219a3825deaa0b62386c88 + +import java.util.function.BiFunction; + -+public class VisibilityGUI extends PlayerGUI { ++public final class VisibilityGUI extends PlayerGUI { + + private static final BiFunction CREATE_INVENTORY = (player, holder) -> { + Inventory inventory = Bukkit.createInventory(holder, 45, Component.text("FPS GUI")); @@ -600,10 +600,10 @@ index cd7b955754b809826048b80723e2e9055b373a4a..3c5e8c594ff63d93bdd052a6b648120c 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 65a9b601204eb8e958e579a47cb0241d134228e2..89a6fc46b6cc2d0a2e3192cfd258cf358ffb25ca 100644 +index d40c3aefde1e3b70657b48241cda2d0b0c457531..0b616dfdf9eb60cd0ca8ee00829f7181a728bc4a 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -220,6 +220,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -219,6 +219,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public abstract ResourceKey getTypeKey(); diff --git a/patches/server/0011-TPS-Graph-Command.patch b/patches/server/0011-TPS-Graph-Command.patch index 5307c76..eb7c413 100644 --- a/patches/server/0011-TPS-Graph-Command.patch +++ b/patches/server/0011-TPS-Graph-Command.patch @@ -5,7 +5,7 @@ Subject: [PATCH] TPS Graph Command diff --git a/src/main/java/me/samsuik/sakura/command/SakuraCommands.java b/src/main/java/me/samsuik/sakura/command/SakuraCommands.java -index d7d0c49cc5d576c594dee16ddba037cd147e11fa..2ed50a4fc9cddc036adc5b4288bd5d83442b1572 100644 +index 22676ec7a7ae9494b198e5e65e6be6d32e0feb85..6edc5195c3b496a12b17b2b9b528505d37ffdb12 100644 --- a/src/main/java/me/samsuik/sakura/command/SakuraCommands.java +++ b/src/main/java/me/samsuik/sakura/command/SakuraCommands.java @@ -4,6 +4,7 @@ import io.papermc.paper.command.PaperPluginsCommand; @@ -16,7 +16,7 @@ index d7d0c49cc5d576c594dee16ddba037cd147e11fa..2ed50a4fc9cddc036adc5b4288bd5d83 import me.samsuik.sakura.player.visibility.Visibility; import net.minecraft.server.MinecraftServer; import org.bukkit.command.Command; -@@ -21,6 +22,7 @@ public class SakuraCommands { +@@ -21,6 +22,7 @@ public final class SakuraCommands { COMMANDS.put("tntvisibility", new VisualCommand(Visibility.Setting.TNT_VISIBILITY, "tnttoggle")); COMMANDS.put("sandvisibility", new VisualCommand(Visibility.Setting.SAND_VISIBILITY, "sandtoggle")); COMMANDS.put("minimal", new VisualCommand(Visibility.Setting.MINIMAL, "minimaltnt", "tntlag")); @@ -26,7 +26,7 @@ index d7d0c49cc5d576c594dee16ddba037cd147e11fa..2ed50a4fc9cddc036adc5b4288bd5d83 public static void registerCommands(final MinecraftServer server) { diff --git a/src/main/java/me/samsuik/sakura/command/subcommands/TPSCommand.java b/src/main/java/me/samsuik/sakura/command/subcommands/TPSCommand.java new file mode 100644 -index 0000000000000000000000000000000000000000..13ad8f19806413ead42ab4d33265bf79b96b5a49 +index 0000000000000000000000000000000000000000..7bd4c5696911730170320060c273f3a7f6a610be --- /dev/null +++ b/src/main/java/me/samsuik/sakura/command/subcommands/TPSCommand.java @@ -0,0 +1,67 @@ @@ -46,7 +46,7 @@ index 0000000000000000000000000000000000000000..13ad8f19806413ead42ab4d33265bf79 +import net.minecraft.util.Mth; +import org.bukkit.command.CommandSender; + -+public class TPSCommand extends BaseSubCommand { ++public final class TPSCommand extends BaseSubCommand { + + public TPSCommand(String name) { + super(name); @@ -99,7 +99,7 @@ index 0000000000000000000000000000000000000000..13ad8f19806413ead42ab4d33265bf79 +} diff --git a/src/main/java/me/samsuik/sakura/utils/tps/TPSGraph.java b/src/main/java/me/samsuik/sakura/utils/tps/TPSGraph.java new file mode 100644 -index 0000000000000000000000000000000000000000..efbf8360657c862dd522d0264aa1c5d8f73bd8b5 +index 0000000000000000000000000000000000000000..fa5d0c046d979901dd302ee3973df27442172add --- /dev/null +++ b/src/main/java/me/samsuik/sakura/utils/tps/TPSGraph.java @@ -0,0 +1,255 @@ @@ -116,7 +116,7 @@ index 0000000000000000000000000000000000000000..efbf8360657c862dd522d0264aa1c5d8 +import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; +import net.minecraft.util.Mth; + -+public class TPSGraph { ++public final class TPSGraph { + + private final Parts[][] parts; + private final TickTracking tracked; @@ -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..2886262ed8420f4e28cd264159e5cd70a39fe495 +index 0000000000000000000000000000000000000000..59765bb2f4ca16421027bdd0c3e03d890a90d3e1 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/utils/tps/TickTracking.java @@ -0,0 +1,53 @@ @@ -374,7 +374,7 @@ index 0000000000000000000000000000000000000000..2886262ed8420f4e28cd264159e5cd70 +import java.util.List; +import java.util.stream.IntStream; + -+public class TickTracking { ++public final class TickTracking { + + private final List history = new ArrayList<>(); + private final double[] msptSamples = new double[20]; diff --git a/patches/server/0018-Store-Entity-Data-State.patch b/patches/server/0018-Store-Entity-Data-State.patch index 61faef7..e3f8336 100644 --- a/patches/server/0018-Store-Entity-Data-State.patch +++ b/patches/server/0018-Store-Entity-Data-State.patch @@ -91,10 +91,10 @@ index 9a7b9f72531dfaecb55c089eea412e81ee00ef65..88735691892aa19f30d4e686e88a3c09 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 89a6fc46b6cc2d0a2e3192cfd258cf358ffb25ca..a9cf8f2cd435f38fda48f2c4d0a7732a589ce455 100644 +index 0b616dfdf9eb60cd0ca8ee00829f7181a728bc4a..b8b9566157e87334f3c7909b96effa0385ebbbf5 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1322,6 +1322,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1321,6 +1321,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 f8030c0..613c209 100644 --- a/patches/server/0019-Merge-Cannon-Entities.patch +++ b/patches/server/0019-Merge-Cannon-Entities.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Merge Cannon Entities diff --git a/src/main/java/me/samsuik/sakura/entity/merge/MergeHistory.java b/src/main/java/me/samsuik/sakura/entity/merge/MergeHistory.java new file mode 100644 -index 0000000000000000000000000000000000000000..90f36b2d3847e058cfa2b748838fc6ea3294c159 +index 0000000000000000000000000000000000000000..3216f20b93b73277c4ad2ebb054eeee4db4fb8b6 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/entity/merge/MergeHistory.java @@ -0,0 +1,127 @@ @@ -23,7 +23,7 @@ index 0000000000000000000000000000000000000000..90f36b2d3847e058cfa2b748838fc6ea + +import java.util.List; + -+public class MergeHistory { ++public final class MergeHistory { + + // packed position -> known merging information + private final Long2ObjectMap mergeDataMap = new Long2ObjectOpenHashMap<>(); @@ -464,10 +464,10 @@ index 46680f551f83b91581440d89a1c35c048db03638..72fb1690e6a0692b453b9c0997a6eb85 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 a9cf8f2cd435f38fda48f2c4d0a7732a589ce455..4176c5ef6489d74d1063e8f857a085270a188e28 100644 +index b8b9566157e87334f3c7909b96effa0385ebbbf5..b12ab07a8ff72c91ff0edfaa54b11032817c467f 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -221,6 +221,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -220,6 +220,7 @@ 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 diff --git a/patches/server/0020-Optimised-Explosions.patch b/patches/server/0020-Optimised-Explosions.patch index 630658f..1f4e3ca 100644 --- a/patches/server/0020-Optimised-Explosions.patch +++ b/patches/server/0020-Optimised-Explosions.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Optimised Explosions diff --git a/src/main/java/me/samsuik/sakura/explosion/DensityCache.java b/src/main/java/me/samsuik/sakura/explosion/DensityCache.java new file mode 100644 -index 0000000000000000000000000000000000000000..3f6f34cc617efaad420485a7f613cfcad88e3783 +index 0000000000000000000000000000000000000000..5c6d4124189d98421e2d6f351840c5d69bf2faf4 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/explosion/DensityCache.java @@ -0,0 +1,130 @@ @@ -21,7 +21,7 @@ index 0000000000000000000000000000000000000000..3f6f34cc617efaad420485a7f613cfca + +import javax.annotation.Nullable; + -+public class DensityCache { ++public final class DensityCache { + + private final Int2ObjectMap densityMap = new Int2ObjectOpenHashMap<>(); + @@ -142,7 +142,7 @@ 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..4b5c431e6d9e2b170a1db0984b8426919466f4c5 +index 0000000000000000000000000000000000000000..fbdd4c4ec21cff4c9651402a9e94dd99996723e1 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/explosion/SakuraExplosion.java @@ -0,0 +1,405 @@ @@ -192,7 +192,7 @@ index 0000000000000000000000000000000000000000..4b5c431e6d9e2b170a1db0984b842691 + * realistic to explode a big block of tnt in survival or factions. They only cause + * harm to a server and extremely wasteful for resources with minimal impact to terrain. + */ -+public class SakuraExplosion extends Explosion { ++public final class SakuraExplosion extends Explosion { + + private final Level level; + @@ -553,7 +553,7 @@ index 0000000000000000000000000000000000000000..4b5c431e6d9e2b170a1db0984b842691 +} diff --git a/src/main/java/me/samsuik/sakura/utils/ExplosionUtil.java b/src/main/java/me/samsuik/sakura/utils/ExplosionUtil.java new file mode 100644 -index 0000000000000000000000000000000000000000..e0387f16ff49031fdcbc8990613417da88d84e87 +index 0000000000000000000000000000000000000000..84e5fe09f7432cdeec846dc1e26404706f1c298c --- /dev/null +++ b/src/main/java/me/samsuik/sakura/utils/ExplosionUtil.java @@ -0,0 +1,64 @@ @@ -564,7 +564,7 @@ index 0000000000000000000000000000000000000000..e0387f16ff49031fdcbc8990613417da +import java.util.ArrayList; +import java.util.List; + -+public class ExplosionUtil { ++public final class ExplosionUtil { + + private static final java.util.function.Function highestOf = (vector) -> { + double highest = 0; @@ -1007,10 +1007,10 @@ index f529f5d0f28533ec89f3ee712e59745991d068ee..d0ff7710577c1cfedae494796e6db420 public float getEntityDamageAmount(Explosion explosion, Entity entity, double seenPercent) { // Paper end - actually optimise explosions diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 4176c5ef6489d74d1063e8f857a085270a188e28..dc376192830321e173036da00897df2c6fbb7d5f 100644 +index b12ab07a8ff72c91ff0edfaa54b11032817c467f..fd93fe7c5ab596c51e2ee30b0aca51fd513a0912 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -222,6 +222,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -221,6 +221,7 @@ 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 public final me.samsuik.sakura.entity.merge.MergeHistory mergeHistory = new me.samsuik.sakura.entity.merge.MergeHistory(); // Sakura - cannon entity merging @@ -1018,7 +1018,7 @@ index 4176c5ef6489d74d1063e8f857a085270a188e28..dc376192830321e173036da00897df2c 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 -@@ -1410,7 +1411,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1409,7 +1410,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } Explosion.BlockInteraction explosion_effect1 = explosion_effect; diff --git a/patches/server/0022-Limited-Get-Entities.patch b/patches/server/0022-Limited-Get-Entities.patch index 8f7e1ca..9e68d0c 100644 --- a/patches/server/0022-Limited-Get-Entities.patch +++ b/patches/server/0022-Limited-Get-Entities.patch @@ -329,10 +329,10 @@ 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 dc376192830321e173036da00897df2c6fbb7d5f..1b018d329fe0ad102e9d7a47d0f6668ad9327591 100644 +index fd93fe7c5ab596c51e2ee30b0aca51fd513a0912..5316c8802111ea969334a075e542437eabe89f04 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -224,6 +224,39 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -223,6 +223,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 diff --git a/patches/server/0030-Explosion-Durable-Blocks.patch b/patches/server/0030-Explosion-Durable-Blocks.patch index e0dd3c4..6d6d263 100644 --- a/patches/server/0030-Explosion-Durable-Blocks.patch +++ b/patches/server/0030-Explosion-Durable-Blocks.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Explosion Durable Blocks diff --git a/src/main/java/me/samsuik/sakura/explosion/durable/DurableBlockManager.java b/src/main/java/me/samsuik/sakura/explosion/durable/DurableBlockManager.java new file mode 100644 -index 0000000000000000000000000000000000000000..2e11ba36e9e820f17839d696e5d7d876e7437fbf +index 0000000000000000000000000000000000000000..c58e52f7cc012babf4235e405e5fb5015c6e95d9 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/explosion/durable/DurableBlockManager.java @@ -0,0 +1,63 @@ @@ -17,7 +17,7 @@ index 0000000000000000000000000000000000000000..2e11ba36e9e820f17839d696e5d7d876 +import net.minecraft.core.BlockPos; +import net.minecraft.server.MinecraftServer; + -+public class DurableBlockManager { ++public final class DurableBlockManager { + + private final Long2ObjectOpenHashMap blocks = new Long2ObjectOpenHashMap<>(); + @@ -163,10 +163,10 @@ index f7b2ebc636b8f01654ac917e2b9c4aa590454a8c..08c7109b0bb613388b5a98a5d312b4ba 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 1b018d329fe0ad102e9d7a47d0f6668ad9327591..5b1c87a10140bb407f3c87b5f230e657b629f4bb 100644 +index 5316c8802111ea969334a075e542437eabe89f04..403d12ecd56d7ed56b19bbdafcbcf33c06c13679 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -223,6 +223,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -222,6 +222,7 @@ 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 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 diff --git a/patches/server/0032-Cache-Vanillia-and-Eigen-Redstone.patch b/patches/server/0032-Cache-Vanillia-and-Eigen-Redstone.patch index f79f69a..4e987a2 100644 --- a/patches/server/0032-Cache-Vanillia-and-Eigen-Redstone.patch +++ b/patches/server/0032-Cache-Vanillia-and-Eigen-Redstone.patch @@ -53,7 +53,7 @@ index fa062e6543e8a0377e3d4715996955dba005ee80..ca8b5066e2db3dc5df97091fa8821493 diff --git a/src/main/java/me/samsuik/sakura/redstone/RedstoneTracker.java b/src/main/java/me/samsuik/sakura/redstone/RedstoneTracker.java new file mode 100644 -index 0000000000000000000000000000000000000000..455e51b93c50f8bf3e84d11f373be7b1dc9fc6eb +index 0000000000000000000000000000000000000000..c4150b062ee1a15f1938fea2da926699edb804a9 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/redstone/RedstoneTracker.java @@ -0,0 +1,283 @@ @@ -80,7 +80,7 @@ index 0000000000000000000000000000000000000000..455e51b93c50f8bf3e84d11f373be7b1 +import java.util.List; +import java.util.function.Predicate; + -+public class RedstoneTracker { ++public final class RedstoneTracker { + + private static final int DEPTH_LIMIT = 512; + @@ -353,10 +353,10 @@ index a3aa2c38169de2636f2e2a1c352e618959c4ac7a..c24fc4df2c835267160dc8355419904a this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 5b1c87a10140bb407f3c87b5f230e657b629f4bb..81b1c4849e3a42582af424e6f548b1e3bc9f6ae0 100644 +index 403d12ecd56d7ed56b19bbdafcbcf33c06c13679..96d67bae33543b90013c6cd312f01f5ab98ff5ab 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -224,6 +224,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -223,6 +223,7 @@ 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 public final me.samsuik.sakura.explosion.durable.DurableBlockManager durabilityManager = new me.samsuik.sakura.explosion.durable.DurableBlockManager(); // Sakura - explosion durable blocks @@ -364,7 +364,7 @@ index 5b1c87a10140bb407f3c87b5f230e657b629f4bb..81b1c4849e3a42582af424e6f548b1e3 // Sakura start - add entity retrival methods with search limits public void getLimitedEntities(Entity except, AABB box, Predicate predicate, List into, int limit, int search) { -@@ -1001,6 +1002,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1000,6 +1001,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } else { BlockState iblockdata2 = this.getBlockState(pos); diff --git a/patches/server/0040-Configure-cannon-physics-by-version.patch b/patches/server/0040-Configure-cannon-physics-by-version.patch index d231c9f..16a80c5 100644 --- a/patches/server/0040-Configure-cannon-physics-by-version.patch +++ b/patches/server/0040-Configure-cannon-physics-by-version.patch @@ -36,10 +36,10 @@ 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 4b5c431e6d9e2b170a1db0984b8426919466f4c5..40c4efa6745d0c9ecb1c4a444c1a3efbe1de8928 100644 +index fbdd4c4ec21cff4c9651402a9e94dd99996723e1..0dd7b5dcb59e9eee2af769cc0989d30cf231b490 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 { +@@ -167,7 +167,7 @@ public final class SakuraExplosion extends Explosion { // update explosion position x = source.getX(); @@ -48,7 +48,7 @@ index 4b5c431e6d9e2b170a1db0984b8426919466f4c5..40c4efa6745d0c9ecb1c4a444c1a3efb z = source.getZ(); } -@@ -260,10 +260,17 @@ public class SakuraExplosion extends Explosion { +@@ -260,10 +260,17 @@ public final class SakuraExplosion extends Explosion { if (distanceFromBottom > 1.0) continue; double x = entity.getX() - pos.x; @@ -67,7 +67,7 @@ index 4b5c431e6d9e2b170a1db0984b8426919466f4c5..40c4efa6745d0c9ecb1c4a444c1a3efb if (distance == 0.0D) continue; x /= distance; -@@ -308,10 +315,17 @@ public class SakuraExplosion extends Explosion { +@@ -308,10 +315,17 @@ public final class SakuraExplosion extends Explosion { if (distanceFromBottom <= 1.0) { double x = entity.getX() - pos.x; @@ -544,10 +544,10 @@ index e09d159007922d29a2cdc1b2597a52c16958b819..e10a78213da1514f54e0659960f76338 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 81b1c4849e3a42582af424e6f548b1e3bc9f6ae0..d2f22ad58d10358e7515cb18b570bbcd4ae9e8c6 100644 +index 96d67bae33543b90013c6cd312f01f5ab98ff5ab..e4783deff8eafdb6e84bbe8e5f636dd5f4ad10d8 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -258,6 +258,205 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -257,6 +257,205 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return this.getLimitedEntities(except, box, net.minecraft.world.entity.EntitySelector.NO_SPECTATORS, limit, search); } // Sakura end - add entity retrival methods with search limits @@ -983,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 3a4a6c635337bb10482cfadf1a4673c56fcc2ed4..09b434839cd8ae5c38579aa4a7639cee813f94e7 100644 +index 3a4a6c635337bb10482cfadf1a4673c56fcc2ed4..356ce30678fe9428c950582e0d8b47c9ac75f87d 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 { @@ -1046,7 +1046,7 @@ index 3a4a6c635337bb10482cfadf1a4673c56fcc2ed4..09b434839cd8ae5c38579aa4a7639cee + return null; + } + -+ public VoxelShape getCollisionShapeFromProgress(Level level, BlockPos pos) { ++ public final VoxelShape getCollisionShapeFromProgress(Level level, BlockPos pos) { + float progress = this.getProgress(0.0f); + + if (this.extending) { 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 5efd1eb..e2d613c 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 d2f22ad58d10358e7515cb18b570bbcd4ae9e8c6..41b9bda5d378efd51bd6d14322bf6808e52f4400 100644 +index e4783deff8eafdb6e84bbe8e5f636dd5f4ad10d8..20ca6517a15e755b2faf0e1892e5a33b0210ae31 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -888,6 +888,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -887,6 +887,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { if (chunkDiff != 0) { lastChunk = chunkProvider.getChunkAtIfLoadedImmediately(newChunkX, newChunkZ);