diff --git a/patches/server/0081-Cache-world-generator-sea-level.patch b/patches/server/0077-Cache-world-generator-sea-level.patch similarity index 96% rename from patches/server/0081-Cache-world-generator-sea-level.patch rename to patches/server/0077-Cache-world-generator-sea-level.patch index b66aba3..a3ec576 100644 --- a/patches/server/0081-Cache-world-generator-sea-level.patch +++ b/patches/server/0077-Cache-world-generator-sea-level.patch @@ -13,7 +13,7 @@ As part of: Lithium (https://github.com/CaffeineMC/lithium-fabric) Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html) diff --git a/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java b/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java -index 68be0d51aa64b5d917fb53dbbbdf8966d4f4abd8..c991da3d975e07f3e1e59d5b2e91ed629ea608e6 100644 +index 3f39d6c786d9dfdd9ad591e08ff05fcbb41a1df6..aa63b49738ef42122e7cd0f9dbec0d019c9b97b0 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java +++ b/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java @@ -61,12 +61,17 @@ public final class NoiseBasedChunkGenerator extends ChunkGenerator { diff --git a/patches/server/0082-Skip-secondary-POI-sensor-if-absent.patch b/patches/server/0078-Skip-secondary-POI-sensor-if-absent.patch similarity index 100% rename from patches/server/0082-Skip-secondary-POI-sensor-if-absent.patch rename to patches/server/0078-Skip-secondary-POI-sensor-if-absent.patch diff --git a/patches/server/0083-Optimize-villager-data-storage.patch b/patches/server/0079-Optimize-villager-data-storage.patch similarity index 93% rename from patches/server/0083-Optimize-villager-data-storage.patch rename to patches/server/0079-Optimize-villager-data-storage.patch index 6c87ae4..77c6ed9 100644 --- a/patches/server/0083-Optimize-villager-data-storage.patch +++ b/patches/server/0079-Optimize-villager-data-storage.patch @@ -210,35 +210,28 @@ index 1595568f3140a62b0f2236644ac2da11db12af05..ce8851c2cacfd3145b1e2c11443140a0 } else { brain.eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index ba49442ed0b7c05c50dbc2a640f5759e391902f2..71a3eadd2f1e00fa066dbfe9918d749d43435a18 100644 +index 08c780e9e1e167b84f70dce691bb564c8420b286..de542de264d2a4ffa84699c34d3c576578c3d2a5 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -90,6 +90,7 @@ import net.minecraft.world.item.trading.MerchantOffers; - import net.minecraft.world.level.Level; - import net.minecraft.world.level.ServerLevelAccessor; - import net.minecraft.world.phys.AABB; -+import org.jetbrains.annotations.NotNull; - import org.slf4j.Logger; - - // CraftBukkit start -@@ -106,8 +107,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -105,7 +105,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler private static final EntityDataAccessor DATA_VILLAGER_DATA = SynchedEntityData.defineId(Villager.class, EntityDataSerializers.VILLAGER_DATA); public static final int BREEDING_FOOD_THRESHOLD = 12; public static final Map FOOD_POINTS = ImmutableMap.of(Items.BREAD, 4, Items.POTATO, 1, Items.CARROT, 1, Items.BEETROOT, 1); + public static final Item[] FOOD_POINTS_KEY_ARRAY = FOOD_POINTS.keySet().toArray(Item[]::new); // Gale - optimize villager data storage private static final int TRADES_PER_LEVEL = 2; -- private static final Set WANTED_ITEMS = ImmutableSet.of(Items.BREAD, Items.POTATO, Items.CARROT, Items.WHEAT, Items.WHEAT_SEEDS, Items.BEETROOT, new Item[]{Items.BEETROOT_SEEDS, Items.TORCHFLOWER_SEEDS, Items.PITCHER_POD}); -+ private static final Item[] WANTED_ITEMS = {Items.BREAD, Items.POTATO, Items.CARROT, Items.WHEAT, Items.WHEAT_SEEDS, Items.BEETROOT, Items.BEETROOT_SEEDS, Items.TORCHFLOWER_SEEDS, Items.PITCHER_POD}; // Gale - optimize villager data storage ++ private static final Item[] WANTED_ITEMS = {Items.WHEAT_SEEDS, Items.POTATO, Items.CARROT, Items.BEETROOT_SEEDS, Items.TORCHFLOWER_SEEDS, Items.PITCHER_POD, Items.BREAD, Items.WHEAT, Items.BEETROOT}; // Gale - optimize villager data storage private static final int MAX_GOSSIP_TOPICS = 10; private static final int GOSSIP_COOLDOWN = 1200; private static final int GOSSIP_DECAY_INTERVAL = 24000; -@@ -910,7 +912,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - public boolean wantsToPickUp(ItemStack stack) { +@@ -878,7 +880,30 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + public boolean wantsToPickUp(ServerLevel world, ItemStack stack) { Item item = stack.getItem(); -- return (Villager.WANTED_ITEMS.contains(item) || this.getVillagerData().getProfession().requestedItems().contains(item)) && this.getInventory().canAddItem(stack); +- return (stack.is(ItemTags.VILLAGER_PICKS_UP) || this.getVillagerData().getProfession().requestedItems().contains(item)) && this.getInventory().canAddItem(stack); + // Gale start - optimize villager data storage + boolean isDesired = false; ++ // WANTED_ITEMS same with the items in itemTag ItemTags.VILLAGER_PICKS_UP + ItemTags.VILLAGER_PLANTABLE_SEEDS ++ // Also Equal to `stack.is(ItemTags.VILLAGER_PICKS_UP)` + for (Item wantedItem : WANTED_ITEMS) { + if (wantedItem == item) { + isDesired = true; diff --git a/patches/server/0084-Skip-entity-move-if-movement-is-zero.patch b/patches/server/0080-Skip-entity-move-if-movement-is-zero.patch similarity index 86% rename from patches/server/0084-Skip-entity-move-if-movement-is-zero.patch rename to patches/server/0080-Skip-entity-move-if-movement-is-zero.patch index a175fde..b7d8203 100644 --- a/patches/server/0084-Skip-entity-move-if-movement-is-zero.patch +++ b/patches/server/0080-Skip-entity-move-if-movement-is-zero.patch @@ -13,10 +13,10 @@ As part of: VMP (https://github.com/RelativityMC/VMP-fabric) Licensed under: MIT (https://opensource.org/licenses/MIT) diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 8cc3394f951e1560c6944343724fb0d38e69430a..afe3c0e638b6cae1a6537b62fe8f5eb81be5466a 100644 +index c138217b0b4a300ba9084a7917ce43e9b56a66c7..3ae8e7e7daec2482429a9f669cf62c494ee095d3 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -323,6 +323,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -324,6 +324,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public float yRotO; public float xRotO; private AABB bb; @@ -24,10 +24,10 @@ index 8cc3394f951e1560c6944343724fb0d38e69430a..afe3c0e638b6cae1a6537b62fe8f5eb8 public boolean onGround; public boolean horizontalCollision; public boolean verticalCollision; -@@ -1112,6 +1113,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1192,6 +1193,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Paper end - detailed watchdog information - public void move(MoverType movementType, Vec3 movement) { + public void move(MoverType type, Vec3 movement) { + // Gale start - VMP - skip entity move if movement is zero + if (!this.boundingBoxChanged && movement.equals(Vec3.ZERO)) { + return; @@ -36,7 +36,7 @@ index 8cc3394f951e1560c6944343724fb0d38e69430a..afe3c0e638b6cae1a6537b62fe8f5eb8 final Vec3 originalMovement = movement; // Paper - Expose pre-collision velocity // Paper start - detailed watchdog information ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread("Cannot move an entity off-main"); -@@ -4134,6 +4140,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4411,6 +4417,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public final void setBoundingBox(AABB boundingBox) { diff --git a/patches/server/0085-Store-mob-counts-in-an-array.patch b/patches/server/0081-Store-mob-counts-in-an-array.patch similarity index 100% rename from patches/server/0085-Store-mob-counts-in-an-array.patch rename to patches/server/0081-Store-mob-counts-in-an-array.patch diff --git a/patches/server/0086-Use-linked-map-for-entity-trackers.patch b/patches/server/0082-Use-linked-map-for-entity-trackers.patch similarity index 85% rename from patches/server/0086-Use-linked-map-for-entity-trackers.patch rename to patches/server/0082-Use-linked-map-for-entity-trackers.patch index 6f1176a..b11a72c 100644 --- a/patches/server/0086-Use-linked-map-for-entity-trackers.patch +++ b/patches/server/0082-Use-linked-map-for-entity-trackers.patch @@ -13,15 +13,15 @@ As part of: VMP (https://github.com/RelativityMC/VMP-fabric) Licensed under: MIT (https://opensource.org/licenses/MIT) diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index a9b6f3ceb45ecd6bcc6d6acc097a5d12aeaae620..e623490b47842114f0bd1c96d806be43dc0447ca 100644 +index d72c49b7861f049ebc32f7bb15345243c4be5838..4d83eda76eccfbda1ff47dc32e3544b7607c19f5 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -178,7 +178,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -184,7 +184,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider this.toDrop = new LongOpenHashSet(); this.tickingGenerated = new AtomicInteger(); this.playerMap = new PlayerMap(); - this.entityMap = new Int2ObjectOpenHashMap(); + this.entityMap = new it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap(); // Gale - VMP - use linked map for entity trackers - provides faster iteration this.chunkTypeCache = new Long2ByteOpenHashMap(); - this.chunkSaveCooldowns = new Long2LongOpenHashMap(); // Paper - rewrite chunk system + Path path = session.getDimensionPath(world.dimension()); diff --git a/patches/server/0087-Optimize-noise-generation.patch b/patches/server/0083-Optimize-noise-generation.patch similarity index 100% rename from patches/server/0087-Optimize-noise-generation.patch rename to patches/server/0083-Optimize-noise-generation.patch diff --git a/patches/server/0088-Optimize-sheep-offspring-color.patch b/patches/server/0084-Optimize-sheep-offspring-color.patch similarity index 89% rename from patches/server/0088-Optimize-sheep-offspring-color.patch rename to patches/server/0084-Optimize-sheep-offspring-color.patch index 958d80c..994586d 100644 --- a/patches/server/0088-Optimize-sheep-offspring-color.patch +++ b/patches/server/0084-Optimize-sheep-offspring-color.patch @@ -46,16 +46,17 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 38ac2759894660be1ee7ba59b0bd1270158e9232..eccb524111cec32ed55722817529e6ab992d381d 100644 +index 432ad1c785e133ef18390108fd342be50ec4dddc..21be4cc1f12d7f8ecadc3be242e1dae1e8c5fa11 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -419,7 +419,96 @@ public class Sheep extends Animal implements Shearable { +@@ -337,7 +337,99 @@ public class Sheep extends Animal implements Shearable { return super.finalizeSpawn(world, difficulty, spawnReason, entityData); } + // Gale start - carpet-fixes - optimize sheep offspring color + private static DyeColor properDye(DyeColor firstColor, DyeColor secondColor) { + if (firstColor.equals(secondColor)) return firstColor; ++ + switch (firstColor) { + case WHITE -> { + switch (secondColor) { @@ -133,18 +134,20 @@ index 38ac2759894660be1ee7ba59b0bd1270158e9232..eccb524111cec32ed55722817529e6ab + } + // Gale end - carpet-fixes - optimize sheep offspring color + - private DyeColor getOffspringColor(Animal firstParent, Animal secondParent) { + private DyeColor getOffspringColor(ServerLevel world, Sheep firstParent, Sheep secondParent) { + // Gale start - carpet-fixes - optimize sheep offspring color -+ if (firstParent.level() != null && firstParent.level().galeConfig().smallOptimizations.useOptimizedSheepOffspringColor) { -+ DyeColor firstColor = ((Sheep) firstParent).getColor(); -+ DyeColor secondColor = ((Sheep) secondParent).getColor(); ++ if (world.galeConfig().smallOptimizations.useOptimizedSheepOffspringColor) { ++ DyeColor firstColor = firstParent.getColor(); ++ DyeColor secondColor = secondParent.getColor(); + DyeColor col = properDye(firstColor, secondColor); -+ if (col == null) col = this.level().random.nextBoolean() ? firstColor : secondColor; ++ ++ if (col == null) col = world.random.nextBoolean() ? firstColor : secondColor; ++ + return col; + } + // Gale end - carpet-fixes - optimize sheep offspring color - DyeColor enumcolor = ((Sheep) firstParent).getColor(); - DyeColor enumcolor1 = ((Sheep) secondParent).getColor(); + DyeColor enumcolor = firstParent.getColor(); + DyeColor enumcolor1 = secondParent.getColor(); CraftingInput craftinginput = Sheep.makeCraftInput(enumcolor, enumcolor1); diff --git a/src/main/java/org/galemc/gale/configuration/GaleWorldConfiguration.java b/src/main/java/org/galemc/gale/configuration/GaleWorldConfiguration.java index f459d398cf9e274b8551540c8a1f707bd609ecb9..2692f835321bb16ecd4185970af01bfa97ca9f1f 100644 diff --git a/patches/server/0089-Hide-flames-on-entities-with-fire-resistance.patch b/patches/server/0085-Hide-flames-on-entities-with-fire-resistance.patch similarity index 94% rename from patches/server/0089-Hide-flames-on-entities-with-fire-resistance.patch rename to patches/server/0085-Hide-flames-on-entities-with-fire-resistance.patch index bbf4b65..e3e2d62 100644 --- a/patches/server/0089-Hide-flames-on-entities-with-fire-resistance.patch +++ b/patches/server/0085-Hide-flames-on-entities-with-fire-resistance.patch @@ -13,10 +13,10 @@ As part of: Slice (https://github.com/Cryptite/Slice) Licensed under: MIT (https://opensource.org/licenses/MIT) diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 6b442c11dbe262bd051cb44c5e7753a8ea8d80e3..411aaa6d99d3ca06cd6bff7cb96ec6e9a5e8f3b0 100644 +index 3ae8e7e7daec2482429a9f669cf62c494ee095d3..4bea126e025fcb5d8a626ea608d1839f493a3301 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -916,7 +916,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -982,7 +982,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.checkBelowWorld(); if (!this.level().isClientSide) { diff --git a/patches/server/0090-Skip-cloning-advancement-criteria.patch b/patches/server/0086-Skip-cloning-advancement-criteria.patch similarity index 100% rename from patches/server/0090-Skip-cloning-advancement-criteria.patch rename to patches/server/0086-Skip-cloning-advancement-criteria.patch diff --git a/patches/server/0091-Reduce-block-destruction-packet-allocations.patch b/patches/server/0087-Reduce-block-destruction-packet-allocations.patch similarity index 86% rename from patches/server/0091-Reduce-block-destruction-packet-allocations.patch rename to patches/server/0087-Reduce-block-destruction-packet-allocations.patch index 2d47b78..cef7c91 100644 --- a/patches/server/0091-Reduce-block-destruction-packet-allocations.patch +++ b/patches/server/0087-Reduce-block-destruction-packet-allocations.patch @@ -13,10 +13,10 @@ As part of: SportPaper (https://github.com/Electroid/SportPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index a6ebe6bb04744a53937d729b9cec028463e19ac1..bda7c6eb34a32614f44c2872d75fe9938d4d2d42 100644 +index c45121f6c4ed3b6bd9faf3f3d3bbddd647a48eae..b6a624c4e8b2a47e7b0b8d1275111ece7036c117 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1578,7 +1578,17 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1611,7 +1611,17 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @Override public void destroyBlockProgress(int entityId, BlockPos pos, int progress) { @@ -35,7 +35,7 @@ index a6ebe6bb04744a53937d729b9cec028463e19ac1..bda7c6eb34a32614f44c2872d75fe993 // CraftBukkit start Player entityhuman = null; -@@ -1612,7 +1622,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. +@@ -1645,7 +1655,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe // CraftBukkit end if (d0 * d0 + d1 * d1 + d2 * d2 < 1024.0D) { diff --git a/patches/server/0092-Spread-out-sending-all-player-info.patch b/patches/server/0088-Spread-out-sending-all-player-info.patch similarity index 94% rename from patches/server/0092-Spread-out-sending-all-player-info.patch rename to patches/server/0088-Spread-out-sending-all-player-info.patch index 9129fdb..ff5ec84 100644 --- a/patches/server/0092-Spread-out-sending-all-player-info.patch +++ b/patches/server/0088-Spread-out-sending-all-player-info.patch @@ -37,10 +37,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 9b265924086edfdd29d155a94ad968d62c2fa924..bd555d1f9ce00b53f8d3b2b82012cf3716e205a6 100644 +index 51fc830e8cdae4a283480a06aae8525ac629273d..2d0fae668941b382579da64c683877954d51c5c7 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -13,6 +13,8 @@ import java.net.SocketAddress; +@@ -12,6 +12,8 @@ import java.net.SocketAddress; import java.nio.file.Path; import java.text.SimpleDateFormat; import java.time.Instant; @@ -62,7 +62,7 @@ index 9b265924086edfdd29d155a94ad968d62c2fa924..bd555d1f9ce00b53f8d3b2b82012cf37 private final Map playersByUUID = Maps.newHashMap(); private final UserBanList bans; private final IpBanList ipBans; -@@ -328,6 +331,7 @@ public abstract class PlayerList { +@@ -330,6 +333,7 @@ public abstract class PlayerList { // entityplayer.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(this.players)); // CraftBukkit - replaced with loop below this.players.add(player); @@ -70,7 +70,7 @@ index 9b265924086edfdd29d155a94ad968d62c2fa924..bd555d1f9ce00b53f8d3b2b82012cf37 this.playersByName.put(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT), player); // Spigot this.playersByUUID.put(player.getUUID(), player); // this.broadcastAll(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(entityplayer))); // CraftBukkit - replaced with loop below -@@ -661,6 +665,7 @@ public abstract class PlayerList { +@@ -624,6 +628,7 @@ public abstract class PlayerList { entityplayer.retireScheduler(); // Paper - Folia schedulers entityplayer.getAdvancements().stopListening(); this.players.remove(entityplayer); @@ -78,7 +78,7 @@ index 9b265924086edfdd29d155a94ad968d62c2fa924..bd555d1f9ce00b53f8d3b2b82012cf37 this.playersByName.remove(entityplayer.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot this.server.getCustomBossEvents().onPlayerDisconnect(entityplayer); UUID uuid = entityplayer.getUUID(); -@@ -817,6 +822,7 @@ public abstract class PlayerList { +@@ -780,6 +785,7 @@ public abstract class PlayerList { public ServerPlayer respawn(ServerPlayer entityplayer, boolean flag, Entity.RemovalReason entity_removalreason, RespawnReason reason, Location location) { entityplayer.stopRiding(); // CraftBukkit this.players.remove(entityplayer); @@ -86,7 +86,7 @@ index 9b265924086edfdd29d155a94ad968d62c2fa924..bd555d1f9ce00b53f8d3b2b82012cf37 this.playersByName.remove(entityplayer.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot entityplayer.serverLevel().removePlayerImmediately(entityplayer, entity_removalreason); /* CraftBukkit start -@@ -903,6 +909,7 @@ public abstract class PlayerList { +@@ -866,6 +872,7 @@ public abstract class PlayerList { if (!entityplayer.connection.isDisconnected()) { worldserver.addRespawnedPlayer(entityplayer1); this.players.add(entityplayer1); @@ -94,7 +94,7 @@ index 9b265924086edfdd29d155a94ad968d62c2fa924..bd555d1f9ce00b53f8d3b2b82012cf37 this.playersByName.put(entityplayer1.getScoreboardName().toLowerCase(java.util.Locale.ROOT), entityplayer1); // Spigot this.playersByUUID.put(entityplayer1.getUUID(), entityplayer1); } -@@ -986,20 +993,55 @@ public abstract class PlayerList { +@@ -951,20 +958,55 @@ public abstract class PlayerList { this.sendPlayerPermissionLevel(player, i, recalculatePermissions); // Paper - avoid recalculating permissions if possible } @@ -157,10 +157,10 @@ index 9b265924086edfdd29d155a94ad968d62c2fa924..bd555d1f9ce00b53f8d3b2b82012cf37 } 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 81fdab6a5fbc39cb942f7b07a132a8f1ef18cb37..a3051cafbab789d1ca8c9af2f3486d77a1c5470b 100644 +index 7dc22be7e2afeafe0292648a9a20422c39833966..af9dcde80e5fe7c3fda8728cf2a9d1a4849eaba3 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -39,6 +39,7 @@ import net.minecraft.network.syncher.SynchedEntityData; +@@ -41,6 +41,7 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; diff --git a/patches/server/0093-Optimize-player-list-for-sending-player-info.patch b/patches/server/0089-Optimize-player-list-for-sending-player-info.patch similarity index 95% rename from patches/server/0093-Optimize-player-list-for-sending-player-info.patch rename to patches/server/0089-Optimize-player-list-for-sending-player-info.patch index 6c87c66..7cdd573 100644 --- a/patches/server/0093-Optimize-player-list-for-sending-player-info.patch +++ b/patches/server/0089-Optimize-player-list-for-sending-player-info.patch @@ -37,10 +37,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index bd555d1f9ce00b53f8d3b2b82012cf3716e205a6..da20474463e776cdd922a905482cd7412486a2f0 100644 +index 2d0fae668941b382579da64c683877954d51c5c7..f49f4c0ac1f6a7c6d85922592b5cd17329e2368f 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1029,14 +1029,18 @@ public abstract class PlayerList { +@@ -994,14 +994,18 @@ public abstract class PlayerList { // Gale start - Purpur - spread out sending all player info ServerPlayer[] sendAllPlayerInfoBucket = this.sendAllPlayerInfoBuckets[this.sendAllPlayerInfoIn]; if (sendAllPlayerInfoBucket != null) { diff --git a/patches/server/0094-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch b/patches/server/0090-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch similarity index 93% rename from patches/server/0094-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch rename to patches/server/0090-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch index 9a03610..a588e66 100644 --- a/patches/server/0094-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch +++ b/patches/server/0090-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch @@ -37,10 +37,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index bbfd3e2a7e6a9a47d80bfea765e77b16c269562a..c778b66ac5277eee789bf7ba2992f21f3315bc74 100644 +index bd2ee66047c3c7f24ab90951ff50aec5ddc9362d..da8e5e187d2a9575c217be5426b84110e0bcd227 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -502,6 +502,7 @@ public class Commands { +@@ -506,6 +506,7 @@ public class Commands { private void runSync(ServerPlayer player, Collection bukkit, RootCommandNode rootcommandnode) { // Paper end - Perf: Async command map building new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, true).callEvent(); // Paper - Brigadier API @@ -48,7 +48,7 @@ index bbfd3e2a7e6a9a47d80bfea765e77b16c269562a..c778b66ac5277eee789bf7ba2992f21f PlayerCommandSendEvent event = new PlayerCommandSendEvent(player.getBukkitEntity(), new LinkedHashSet<>(bukkit)); event.getPlayer().getServer().getPluginManager().callEvent(event); -@@ -512,6 +513,7 @@ public class Commands { +@@ -516,6 +517,7 @@ public class Commands { } } // CraftBukkit end diff --git a/patches/server/0095-Send-multiple-keep-alive-packets.patch b/patches/server/0091-Send-multiple-keep-alive-packets.patch similarity index 94% rename from patches/server/0095-Send-multiple-keep-alive-packets.patch rename to patches/server/0091-Send-multiple-keep-alive-packets.patch index b1ebfd8..b7a9e6c 100644 --- a/patches/server/0095-Send-multiple-keep-alive-packets.patch +++ b/patches/server/0091-Send-multiple-keep-alive-packets.patch @@ -37,7 +37,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index edbca98fb87abdd345ca14331e4121ef1ec41e50..c8d4d1591628f3ea337a853148e172667cc5c744 100644 +index d777e5914148103dbdbfef7c8e4f8e012fa58b6d..a37d73ee6cbf7dd8b230b8caa598f734c8e97e38 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -4,6 +4,9 @@ import com.mojang.authlib.GameProfile; @@ -74,7 +74,7 @@ index edbca98fb87abdd345ca14331e4121ef1ec41e50..c8d4d1591628f3ea337a853148e17266 protected static final ResourceLocation MINECRAFT_BRAND = ResourceLocation.withDefaultNamespace("brand"); // Paper - Brand support public ServerCommonPacketListenerImpl(MinecraftServer minecraftserver, Connection networkmanager, CommonListenerCookie commonlistenercookie, ServerPlayer player) { // CraftBukkit -@@ -130,6 +138,16 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -136,6 +144,16 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @Override public void handleKeepAlive(ServerboundKeepAlivePacket packet) { //PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // CraftBukkit // Paper - handle ServerboundKeepAlivePacket async @@ -91,7 +91,7 @@ index edbca98fb87abdd345ca14331e4121ef1ec41e50..c8d4d1591628f3ea337a853148e17266 if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) { int i = (int) (Util.getMillis() - this.keepAliveTime); -@@ -138,6 +156,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -144,6 +162,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack } else if (!this.isSingleplayerOwner()) { this.disconnectAsync(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE, PlayerKickEvent.Cause.TIMEOUT); // Paper - add proper async disconnect } @@ -99,7 +99,7 @@ index edbca98fb87abdd345ca14331e4121ef1ec41e50..c8d4d1591628f3ea337a853148e17266 } -@@ -253,6 +272,21 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -259,6 +278,21 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack long currentTime = Util.getMillis(); long elapsedTime = currentTime - this.keepAliveTime; @@ -121,16 +121,16 @@ index edbca98fb87abdd345ca14331e4121ef1ec41e50..c8d4d1591628f3ea337a853148e17266 if (!this.isSingleplayerOwner() && elapsedTime >= 15000L) { // Paper - use vanilla's 15000L between keep alive packets if (this.keepAlivePending && !this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // Paper - check keepalive limit, don't fire if already disconnected this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE, PlayerKickEvent.Cause.TIMEOUT); // Paper - kick event cause -@@ -263,6 +297,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -269,6 +303,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack this.send(new ClientboundKeepAlivePacket(this.keepAliveChallenge)); } } + } // Gale - Purpur - send multiple keep-alive packets // Paper end - give clients a longer time to respond to pings as per pre 1.12.2 timings - } + diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index c507dbfe5bb793d896acda167fb6d0f21c8afb7a..184b4d7e8badf8a3bd99f8884ebef2af5bea3bfa 100644 +index fda212ff9961d7ce0d99bfb7fbe49b15034f6e57..0d6a5651f7c341cfbc6788004b4ac1728af6a606 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -9,6 +9,8 @@ import com.mojang.brigadier.suggestion.Suggestions; @@ -142,7 +142,7 @@ index c507dbfe5bb793d896acda167fb6d0f21c8afb7a..184b4d7e8badf8a3bd99f8884ebef2af import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectIterator; import java.net.SocketAddress; -@@ -3515,6 +3517,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -3567,6 +3569,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } @Override diff --git a/patches/server/0096-Make-slow-login-timeout-configurable.patch b/patches/server/0092-Make-slow-login-timeout-configurable.patch similarity index 95% rename from patches/server/0096-Make-slow-login-timeout-configurable.patch rename to patches/server/0092-Make-slow-login-timeout-configurable.patch index b4b2519..adaba0e 100644 --- a/patches/server/0096-Make-slow-login-timeout-configurable.patch +++ b/patches/server/0092-Make-slow-login-timeout-configurable.patch @@ -7,7 +7,7 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 1d4f1cdfd2b221b0ed0cef3bc266c829fd3555ef..4e4f14ba35a1a5944c605dfd1784047d43e559ce 100644 +index 7ff64c46a554fd779a9bea42213af3b3e67ed795..00b0716f599ddcd37d13ae256313ffd515beb8bc 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -127,7 +127,10 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, diff --git a/patches/server/0097-Load-portal-destination-chunk-before-entity-teleport.patch b/patches/server/0093-Load-portal-destination-chunk-before-entity-teleport.patch similarity index 74% rename from patches/server/0097-Load-portal-destination-chunk-before-entity-teleport.patch rename to patches/server/0093-Load-portal-destination-chunk-before-entity-teleport.patch index 0f4205b..d77fcfe 100644 --- a/patches/server/0097-Load-portal-destination-chunk-before-entity-teleport.patch +++ b/patches/server/0093-Load-portal-destination-chunk-before-entity-teleport.patch @@ -13,25 +13,23 @@ As part of: MultiPaper (https://github.com/MultiPaper/MultiPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 1e5d1f8650277d1867e336735a715c9ae8677cd9..9bd19182fe33346baf0b2503d90d6cd54e12df3a 100644 +index 4bea126e025fcb5d8a626ea608d1839f493a3301..bb2e9a6e53dc353685cd914df975f87c27cad29b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4009,7 +4009,15 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - - if (entity == null) { - return false; +@@ -4042,6 +4042,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + if (entity == null) { + return null; + } else { + // Gale start - MultiPaper - load portal destination chunk before entity teleport -+ } else { -+ if (entity.level.galeConfig().gameplayMechanics.technical.loadPortalDestinationChunkBeforeEntityTeleport) { -+ BlockPos pos = BlockPos.containing(position); -+ world.getChunkSource().addRegionTicket(TicketType.PORTAL, new ChunkPos(pos), 1, pos); -+ world.getChunkAt(pos); -+ } - } ++ if (world.galeConfig().gameplayMechanics.technical.loadPortalDestinationChunkBeforeEntityTeleport) { ++ BlockPos pos = BlockPos.containing(position); ++ world.getChunkSource().addRegionTicket(TicketType.PORTAL, new ChunkPos(pos), 1, pos); ++ world.getChunkAt(pos); ++ } + // Gale end - MultiPaper - load portal destination chunk before entity teleport - - entity.restoreFrom(this); - entity.moveTo(destX, destY, destZ, yaw, f2); + // Paper start - Fix item duplication and teleport issues + if (this instanceof Leashable leashable) { + leashable.dropLeash(true, true); // Paper drop lead diff --git a/src/main/java/org/galemc/gale/configuration/GaleWorldConfiguration.java b/src/main/java/org/galemc/gale/configuration/GaleWorldConfiguration.java index 93f4be842259ede94c94588f266c2270546e8311..fd5d02f8b1b1e2e84e6bda4885f091a000cbcbc9 100644 --- a/src/main/java/org/galemc/gale/configuration/GaleWorldConfiguration.java diff --git a/patches/server/0098-Don-t-load-chunks-to-spawn-phantoms.patch b/patches/server/0094-Don-t-load-chunks-to-spawn-phantoms.patch similarity index 97% rename from patches/server/0098-Don-t-load-chunks-to-spawn-phantoms.patch rename to patches/server/0094-Don-t-load-chunks-to-spawn-phantoms.patch index bbadb36..41662c7 100644 --- a/patches/server/0098-Don-t-load-chunks-to-spawn-phantoms.patch +++ b/patches/server/0094-Don-t-load-chunks-to-spawn-phantoms.patch @@ -13,7 +13,7 @@ As part of: MultiPaper (https://github.com/MultiPaper/MultiPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java -index 1b1b475ca27e799e251d6f8a8c9fe1a4fd8bae83..ae1e164285f5675371bf036c8a564d9f5c1dd395 100644 +index 021221da5d0315f6e371380a705ac6b3f6ac18d3..997f80d332b95bb011cbbc27c065b2811a2dddc7 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java +++ b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java @@ -70,7 +70,15 @@ public class PhantomSpawner implements CustomSpawner { diff --git a/patches/server/0099-Don-t-load-chunks-to-activate-climbing-entities.patch b/patches/server/0095-Don-t-load-chunks-to-activate-climbing-entities.patch similarity index 93% rename from patches/server/0099-Don-t-load-chunks-to-activate-climbing-entities.patch rename to patches/server/0095-Don-t-load-chunks-to-activate-climbing-entities.patch index 92f0fa1..1593674 100644 --- a/patches/server/0099-Don-t-load-chunks-to-activate-climbing-entities.patch +++ b/patches/server/0095-Don-t-load-chunks-to-activate-climbing-entities.patch @@ -7,10 +7,10 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 9bd19182fe33346baf0b2503d90d6cd54e12df3a..5a278706582bac69a38129975351aef2f11f730d 100644 +index bb2e9a6e53dc353685cd914df975f87c27cad29b..e1545f8fa67c4144f44927c65931a63b4a7c1bff 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4660,6 +4660,16 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4955,6 +4955,16 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.inBlockState; } @@ -28,10 +28,10 @@ index 9bd19182fe33346baf0b2503d90d6cd54e12df3a..5a278706582bac69a38129975351aef2 return this.chunkPosition; } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index bdafaa87c38d7bfe15a6a3dd450c706f0efed8a8..e4986e69898b95380b0efb6a5125514a0fa8314c 100644 +index 91c97580123701b4bafb7502d2947fda91dc9cc0..9f4ffbeb8ab4581dab95674f1e4bb78e86deeb7e 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2079,19 +2079,43 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2126,19 +2126,43 @@ public abstract class LivingEntity extends Entity implements Attackable { public boolean onClimbableCached() { if (!this.blockPosition().equals(this.lastClimbingPosition)) { diff --git a/patches/server/0100-Broadcast-crit-animations-as-the-entity-being-critte.patch b/patches/server/0096-Broadcast-crit-animations-as-the-entity-being-critte.patch similarity index 94% rename from patches/server/0100-Broadcast-crit-animations-as-the-entity-being-critte.patch rename to patches/server/0096-Broadcast-crit-animations-as-the-entity-being-critte.patch index 622cdf0..d22df04 100644 --- a/patches/server/0100-Broadcast-crit-animations-as-the-entity-being-critte.patch +++ b/patches/server/0096-Broadcast-crit-animations-as-the-entity-being-critte.patch @@ -13,10 +13,10 @@ As part of: MultiPaper (https://github.com/MultiPaper/MultiPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 978aa293c771c065a435d564e4355c837678a92b..61e2fc796d49fe45229a1b0cd630355ab7d59883 100644 +index ada9814d24b32140f365eb01a231bc123d99c72e..36df6a23f1943c55ecc6bed55b48a77ba3b449e4 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2152,12 +2152,18 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2399,12 +2399,18 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @Override public void crit(Entity target) { diff --git a/patches/server/0101-Ignore-null-legacy-structure-data.patch b/patches/server/0097-Ignore-null-legacy-structure-data.patch similarity index 94% rename from patches/server/0101-Ignore-null-legacy-structure-data.patch rename to patches/server/0097-Ignore-null-legacy-structure-data.patch index 6aa1d80..2a21969 100644 --- a/patches/server/0101-Ignore-null-legacy-structure-data.patch +++ b/patches/server/0097-Ignore-null-legacy-structure-data.patch @@ -13,7 +13,7 @@ As part of: MultiPaper (https://github.com/MultiPaper/MultiPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/src/main/java/net/minecraft/world/level/levelgen/structure/LegacyStructureDataHandler.java b/src/main/java/net/minecraft/world/level/levelgen/structure/LegacyStructureDataHandler.java -index 541314ba47ea158e4751aa4e853117f8861fad82..eb61a0f1cea465884baa17c2d0a0768d46c9dcd0 100644 +index 12ec1def8a100aa8400f9ef183b5ef744e2b11aa..1d5b63e89b0ce6d87ee6da2f07590f42d8f7b2b2 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/structure/LegacyStructureDataHandler.java +++ b/src/main/java/net/minecraft/world/level/levelgen/structure/LegacyStructureDataHandler.java @@ -20,6 +20,7 @@ import net.minecraft.util.datafix.DataFixTypes; @@ -24,7 +24,7 @@ index 541314ba47ea158e4751aa4e853117f8861fad82..eb61a0f1cea465884baa17c2d0a0768d public class LegacyStructureDataHandler { -@@ -172,6 +173,7 @@ public class LegacyStructureDataHandler { +@@ -171,6 +172,7 @@ public class LegacyStructureDataHandler { private void populateCaches(@Nullable DimensionDataStorage persistentStateManager) { if (persistentStateManager != null) { @@ -32,7 +32,7 @@ index 541314ba47ea158e4751aa4e853117f8861fad82..eb61a0f1cea465884baa17c2d0a0768d Iterator iterator = this.legacyKeys.iterator(); while (iterator.hasNext()) { -@@ -179,7 +181,11 @@ public class LegacyStructureDataHandler { +@@ -178,7 +180,11 @@ public class LegacyStructureDataHandler { CompoundTag nbttagcompound = new CompoundTag(); try { diff --git a/patches/server/0098-Skip-unnecessary-mob-spawning-computations.patch b/patches/server/0098-Skip-unnecessary-mob-spawning-computations.patch new file mode 100644 index 0000000..5c5544e --- /dev/null +++ b/patches/server/0098-Skip-unnecessary-mob-spawning-computations.patch @@ -0,0 +1,74 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Martijn Muijsers +Date: Sun, 25 Dec 2022 20:29:03 +0100 +Subject: [PATCH] Skip unnecessary mob spawning computations + +License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) +Gale - https://galemc.org + +This patch is based on the following patch: +"Only create a spawner state when we are actually spawning mobs" +By: PureGero +As part of: MultiPaper (https://github.com/MultiPaper/MultiPaper) +Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) + +diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java +index 9b42517eed2dd8644c9db759690f09aeef6ab3b2..4d416ef3a1c528a1ce221aed43b8823f90a3df49 100644 +--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java ++++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java +@@ -524,10 +524,15 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon + } + + private void tickChunks(long timeDelta, List chunks) { // Gale - Purpur - remove vanilla profiler ++ // Gale start - MultiPaper - skip unnecessary mob spawning computations ++ NaturalSpawner.SpawnState spawnercreature_d; // moved down ++ final boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit ++ boolean flagAndHasNaturalSpawn = flag && this.anySpawnCategoryIsSpawnedThisTick(); ++ if (flagAndHasNaturalSpawn) { ++ // Gale end - MultiPaper - skip unnecessary mob spawning computations + int j = this.distanceManager.getNaturalSpawnChunkCount(); + // Paper start - Optional per player mob spawns + final int naturalSpawnChunkCount = j; +- NaturalSpawner.SpawnState spawnercreature_d; // moved down + if ((this.spawnFriendlies || this.spawnEnemies) && this.level.paperConfig().entities.spawning.perPlayerMobSpawns) { // don't count mobs when animals and monsters are disabled + // re-set mob counts + for (ServerPlayer player : this.level.players) { +@@ -550,11 +555,15 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon + // Paper end - Optional per player mob spawns + + this.lastSpawnState = spawnercreature_d; +- boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit ++ // Gale start - MultiPaper - skip unnecessary mob spawning computations ++ } else { ++ spawnercreature_d = null; ++ } ++ // Gale end - MultiPaper - skip unnecessary mob spawning computations + int k = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING); + List list1; + +- if (flag && (this.spawnEnemies || this.spawnFriendlies)) { ++ if (flagAndHasNaturalSpawn && (this.spawnEnemies || this.spawnFriendlies)) { // Gale - MultiPaper - skip unnecessary mob spawning computations + // Paper start - PlayerNaturallySpawnCreaturesEvent + int chunkRange = level.spigotConfig.mobSpawnRange; + chunkRange = (chunkRange > level.spigotConfig.viewDistance) ? (byte) level.spigotConfig.viewDistance : chunkRange; +@@ -593,6 +602,20 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon + + } + ++ // Gale start - MultiPaper - skip unnecessary mob spawning computations ++ public boolean anySpawnCategoryIsSpawnedThisTick() { ++ long gameTime = this.level.getLevelData().getGameTime(); ++ ++ for (long ticksForSpawnCategory : this.level.ticksPerSpawnCategory.values()) { ++ if (ticksForSpawnCategory != 0L && gameTime % ticksForSpawnCategory == 0L) { ++ return true; ++ } ++ } ++ ++ return false; ++ } ++ // Gale end - MultiPaper - skip unnecessary mob spawning computations ++ + private void getFullChunk(long pos, Consumer chunkConsumer) { + // Paper start - rewrite chunk system + // note: bypass currentlyLoaded from getChunkNow diff --git a/patches/server/0103-Prevent-entities-random-strolling-into-non-ticking-c.patch b/patches/server/0099-Prevent-entities-random-strolling-into-non-ticking-c.patch similarity index 100% rename from patches/server/0103-Prevent-entities-random-strolling-into-non-ticking-c.patch rename to patches/server/0099-Prevent-entities-random-strolling-into-non-ticking-c.patch diff --git a/patches/server/0104-Do-not-place-player-in-world-if-kicked-before-being-.patch b/patches/server/0100-Do-not-place-player-in-world-if-kicked-before-being-.patch similarity index 94% rename from patches/server/0104-Do-not-place-player-in-world-if-kicked-before-being-.patch rename to patches/server/0100-Do-not-place-player-in-world-if-kicked-before-being-.patch index d828375..4a90acb 100644 --- a/patches/server/0104-Do-not-place-player-in-world-if-kicked-before-being-.patch +++ b/patches/server/0100-Do-not-place-player-in-world-if-kicked-before-being-.patch @@ -14,7 +14,7 @@ As part of: MultiPaper (https://github.com/MultiPaper/MultiPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index da20474463e776cdd922a905482cd7412486a2f0..871f16983a6497a5e592eb9c76a24499280de8a1 100644 +index f49f4c0ac1f6a7c6d85922592b5cd17329e2368f..cdaf8d4642f71ad8aa4d3f230321e021056e3429 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -275,6 +275,13 @@ public abstract class PlayerList { diff --git a/patches/server/0105-CraftBukkit-UUID-to-world-map.patch b/patches/server/0101-CraftBukkit-UUID-to-world-map.patch similarity index 89% rename from patches/server/0105-CraftBukkit-UUID-to-world-map.patch rename to patches/server/0101-CraftBukkit-UUID-to-world-map.patch index 6671e57..0158b65 100644 --- a/patches/server/0105-CraftBukkit-UUID-to-world-map.patch +++ b/patches/server/0101-CraftBukkit-UUID-to-world-map.patch @@ -13,7 +13,7 @@ As part of: MultiPaper (https://github.com/MultiPaper/MultiPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 84b8de571361f2087ac5106726c9e69377183089..9261f0ff637213a385fd518524702e777a4bb692 100644 +index c32a5ad0ce36fcc5a91484da6a8631814c6b61eb..b1a6f73f59a405785af0e3f7a5e9590889df3b62 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -41,6 +41,9 @@ import java.util.logging.Logger; @@ -26,7 +26,7 @@ index 84b8de571361f2087ac5106726c9e69377183089..9261f0ff637213a385fd518524702e77 import net.minecraft.advancements.AdvancementHolder; import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; -@@ -281,6 +284,7 @@ public final class CraftServer implements Server { +@@ -284,6 +287,7 @@ public final class CraftServer implements Server { protected final DedicatedServer console; protected final DedicatedPlayerList playerList; private final Map worlds = new LinkedHashMap(); @@ -34,7 +34,7 @@ index 84b8de571361f2087ac5106726c9e69377183089..9261f0ff637213a385fd518524702e77 // private final Map, Registry> registries = new HashMap<>(); // Paper - replace with RegistryAccess private YamlConfiguration configuration; private YamlConfiguration commandsConfiguration; -@@ -1493,6 +1497,7 @@ public final class CraftServer implements Server { +@@ -1495,6 +1499,7 @@ public final class CraftServer implements Server { this.getLogger().log(Level.SEVERE, null, ex); } @@ -42,7 +42,7 @@ index 84b8de571361f2087ac5106726c9e69377183089..9261f0ff637213a385fd518524702e77 this.worlds.remove(world.getName().toLowerCase(Locale.ROOT)); this.console.removeLevel(handle); return true; -@@ -1511,12 +1516,7 @@ public final class CraftServer implements Server { +@@ -1513,12 +1518,7 @@ public final class CraftServer implements Server { @Override public World getWorld(UUID uid) { @@ -56,7 +56,7 @@ index 84b8de571361f2087ac5106726c9e69377183089..9261f0ff637213a385fd518524702e77 } // Paper start -@@ -1534,6 +1534,7 @@ public final class CraftServer implements Server { +@@ -1536,6 +1536,7 @@ public final class CraftServer implements Server { System.out.println("World " + world.getName() + " is a duplicate of another world and has been prevented from loading. Please delete the uid.dat file from " + world.getName() + "'s world directory if you want to be able to load the duplicate world."); return; } diff --git a/patches/server/0106-Global-EULA-file.patch b/patches/server/0102-Global-EULA-file.patch similarity index 100% rename from patches/server/0106-Global-EULA-file.patch rename to patches/server/0102-Global-EULA-file.patch diff --git a/patches/server/0102-Skip-unnecessary-mob-spawning-computations.patch b/patches/server/0102-Skip-unnecessary-mob-spawning-computations.patch deleted file mode 100644 index a7d7bb6..0000000 --- a/patches/server/0102-Skip-unnecessary-mob-spawning-computations.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martijn Muijsers -Date: Sun, 25 Dec 2022 20:29:03 +0100 -Subject: [PATCH] Skip unnecessary mob spawning computations - -License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) -Gale - https://galemc.org - -This patch is based on the following patch: -"Only create a spawner state when we are actually spawning mobs" -By: PureGero -As part of: MultiPaper (https://github.com/MultiPaper/MultiPaper) -Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) - -diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 39b187dc90f79dbfff55be697b8cb4d404b290fc..c520d824630e8b5c569c3213d019b2548120a50f 100644 ---- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java -+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -443,11 +443,16 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon - - this.level.resetIceAndSnowTick(); // Gale - Airplane - optimize random calls in chunk ticking - reset ice & snow tick random - if (this.level.tickRateManager().runsNormally()) { -+ // Gale start - MultiPaper - skip unnecessary mob spawning computations -+ NaturalSpawner.SpawnState spawnercreature_d; // moved down -+ final boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit -+ boolean flagAndHasNaturalSpawn = flag && this.anySpawnCategoryIsSpawnedThisTick(); -+ if (flagAndHasNaturalSpawn) { -+ // Gale end - MultiPaper - skip unnecessary mob spawning computations - this.level.timings.countNaturalMobs.startTiming(); // Paper - timings - int k = this.distanceManager.getNaturalSpawnChunkCount(); - // Paper start - Optional per player mob spawns - int naturalSpawnChunkCount = k; -- NaturalSpawner.SpawnState spawnercreature_d; // moved down - if ((this.spawnFriendlies || this.spawnEnemies) && this.level.paperConfig().entities.spawning.perPlayerMobSpawns) { // don't count mobs when animals and monsters are disabled - // re-set mob counts - for (ServerPlayer player : this.level.players) { -@@ -471,7 +476,11 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon - this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings - - this.lastSpawnState = spawnercreature_d; -- boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit -+ // Gale start - MultiPaper - skip unnecessary mob spawning computations -+ } else { -+ spawnercreature_d = null; -+ } -+ // Gale end - MultiPaper - skip unnecessary mob spawning computations - - if (!this.level.paperConfig().entities.spawning.perPlayerMobSpawns) Util.shuffle(list, this.level.random); // Paper - per player mob spawns - do not need this when per-player is enabled - // Paper start - PlayerNaturallySpawnCreaturesEvent -@@ -494,7 +503,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon - - if (true && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkcoordintpair)) { // Paper - rewrite chunk system - chunk1.incrementInhabitedTime(j); -- if (flag && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkcoordintpair, true)) { // Spigot -+ if (flagAndHasNaturalSpawn && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair) && this.chunkMap.anyPlayerCloseEnoughForSpawning(chunkcoordintpair, true)) { // Spigot // Gale - MultiPaper - skip unnecessary mob spawning computations - NaturalSpawner.spawnForChunk(this.level, chunk1, spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag1); - } - -@@ -537,6 +546,20 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon - } - } - -+ // Gale start - MultiPaper - skip unnecessary mob spawning computations -+ public boolean anySpawnCategoryIsSpawnedThisTick() { -+ long gameTime = this.level.getLevelData().getGameTime(); -+ -+ for (long ticksForSpawnCategory : this.level.ticksPerSpawnCategory.values()) { -+ if (ticksForSpawnCategory != 0L && gameTime % ticksForSpawnCategory == 0L) { -+ return true; -+ } -+ } -+ -+ return false; -+ } -+ // Gale end - MultiPaper - skip unnecessary mob spawning computations -+ - private void getFullChunk(long pos, Consumer chunkConsumer) { - // Paper start - rewrite chunk system - final LevelChunk fullChunk = this.getChunkNow(ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkX(pos), ca.spottedleaf.moonrise.common.util.CoordinateUtils.getChunkZ(pos)); diff --git a/patches/server/0107-Specific-interval-TPS-API.patch b/patches/server/0103-Specific-interval-TPS-API.patch similarity index 88% rename from patches/server/0107-Specific-interval-TPS-API.patch rename to patches/server/0103-Specific-interval-TPS-API.patch index ee43580..e38a149 100644 --- a/patches/server/0107-Specific-interval-TPS-API.patch +++ b/patches/server/0103-Specific-interval-TPS-API.patch @@ -7,10 +7,10 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 9261f0ff637213a385fd518524702e777a4bb692..7f30dc8d7a256930a85415d26c4d651918150c13 100644 +index b1a6f73f59a405785af0e3f7a5e9590889df3b62..30c697b9ec0a032c08baf58bf3d8a1c4b0a4b2ca 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -3042,6 +3042,24 @@ public final class CraftServer implements Server { +@@ -3071,6 +3071,24 @@ public final class CraftServer implements Server { }; } diff --git a/patches/server/0108-5-second-TPS-average.patch b/patches/server/0104-5-second-TPS-average.patch similarity index 94% rename from patches/server/0108-5-second-TPS-average.patch rename to patches/server/0104-5-second-TPS-average.patch index f43608a..4f28ff2 100644 --- a/patches/server/0108-5-second-TPS-average.patch +++ b/patches/server/0104-5-second-TPS-average.patch @@ -58,10 +58,10 @@ index 12b327eea95e0de9e9c39b7d039badee8ec46508..6178f0212214a2a075cea60c758dca79 } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 161904cc1d802d9b113f68c2eb46a1c7a7c1b425..c64874029dae951abf5d57b8dd7875d2ebfc8b54 100644 +index 8a643e65d805e167516ff3331ab9c6482aa3ec8a..b033967d20094e04e300762db40d193a1dc0065f 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1136,6 +1136,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { - return false; - } : this::haveTime); + + this.tickFrame.start(); + this.tickServer(flag ? () -> { + return false; + } : this::haveTime); + lastTickProperTime = (System.nanoTime() - tickProperStart) / 1000000L; // Gale - YAPFA - last tick time - // Paper start - rewrite chunk system - final Throwable crash = this.chunkSystemCrash; - if (crash != null) { -@@ -1435,9 +1442,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { - return !this.canSleepForTickNoOversleep(); // Paper - move oversleep into full server tick - }); -+ lastTickOversleepTime = (System.nanoTime() - tickOversleepStart) / 1000000L; // Gale - YAPFA - last tick time - } - @Override + try { + this.managedBlock(() -> { +@@ -1454,6 +1462,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 1e-6 || oldDeltaMovement.z < -1e-6 || oldDeltaMovement.z > 1e-6) { + // Gale end - skip negligible planar movement multiplication float f = this.getBlockSpeedFactor(); - +- - this.setDeltaMovement(this.getDeltaMovement().multiply((double) f, 1.0D, (double) f)); + // Gale start - skip negligible planar movement multiplication + if (f < 1 - 1e-6 || f > 1 + 1e-6) { @@ -28,6 +27,6 @@ index 95792ce4741178cc074470932ebeee920c0eac4e..48c62f19459406ba393b4f5c277fdf9a + } + } + // Gale end - skip negligible planar movement multiplication - if (this.level().getBlockStatesIfLoaded(this.getBoundingBox().deflate(1.0E-6D)).noneMatch((iblockdata2) -> { - return iblockdata2.is(BlockTags.FIRE) || iblockdata2.is(Blocks.LAVA); - })) { + } + } + // Paper start - detailed watchdog information diff --git a/patches/server/0115-Optimize-matching-item-checks.patch b/patches/server/0111-Optimize-matching-item-checks.patch similarity index 88% rename from patches/server/0115-Optimize-matching-item-checks.patch rename to patches/server/0111-Optimize-matching-item-checks.patch index da69fb3..d1a0d8f 100644 --- a/patches/server/0115-Optimize-matching-item-checks.patch +++ b/patches/server/0111-Optimize-matching-item-checks.patch @@ -7,10 +7,10 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 21d8666ed24dae109792c094b9ce7eeb9100b4d9..e46e7c3e919a7f12ccf135dceec911b1fec9e0f2 100644 +index 303b3337b23b6528ed431ba8b6c1c1f3187a4503..9de79c7087d3ce55631f08191a9b7994567f1788 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -849,7 +849,7 @@ public final class ItemStack implements DataComponentHolder { +@@ -921,7 +921,7 @@ public final class ItemStack implements DataComponentHolder { } public static boolean matches(ItemStack left, ItemStack right) { @@ -19,7 +19,7 @@ index 21d8666ed24dae109792c094b9ce7eeb9100b4d9..e46e7c3e919a7f12ccf135dceec911b1 } /** @deprecated */ -@@ -869,11 +869,11 @@ public final class ItemStack implements DataComponentHolder { +@@ -941,11 +941,11 @@ public final class ItemStack implements DataComponentHolder { } public static boolean isSameItem(ItemStack left, ItemStack right) { diff --git a/patches/server/0116-Pre-compute-VarLong-sizes.patch b/patches/server/0112-Pre-compute-VarLong-sizes.patch similarity index 100% rename from patches/server/0116-Pre-compute-VarLong-sizes.patch rename to patches/server/0112-Pre-compute-VarLong-sizes.patch diff --git a/patches/server/0117-Optimize-VarInt-write-and-VarLong-write.patch b/patches/server/0113-Optimize-VarInt-write-and-VarLong-write.patch similarity index 100% rename from patches/server/0117-Optimize-VarInt-write-and-VarLong-write.patch rename to patches/server/0113-Optimize-VarInt-write-and-VarLong-write.patch diff --git a/patches/server/0118-Reduce-RandomSource-instances.patch b/patches/server/0114-Reduce-RandomSource-instances.patch similarity index 78% rename from patches/server/0118-Reduce-RandomSource-instances.patch rename to patches/server/0114-Reduce-RandomSource-instances.patch index 2275252..2291dcf 100644 --- a/patches/server/0118-Reduce-RandomSource-instances.patch +++ b/patches/server/0114-Reduce-RandomSource-instances.patch @@ -13,7 +13,7 @@ As part of: Patina (https://github.com/PatinaMC/Patina) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/src/main/java/net/minecraft/server/commands/SpreadPlayersCommand.java b/src/main/java/net/minecraft/server/commands/SpreadPlayersCommand.java -index b47a8a082170bcb630c4354be7c77a4cac71d105..b49e3f2cdc1fa5ff3723fae452404664ff710252 100644 +index 6f69e74d8662025c4148b36de7a35e789abcd1d2..8c18763ff74a6fbc87eafa1170c4ad9d5f1de22f 100644 --- a/src/main/java/net/minecraft/server/commands/SpreadPlayersCommand.java +++ b/src/main/java/net/minecraft/server/commands/SpreadPlayersCommand.java @@ -66,7 +66,7 @@ public class SpreadPlayersCommand { @@ -26,10 +26,10 @@ index b47a8a082170bcb630c4354be7c77a4cac71d105..b49e3f2cdc1fa5ff3723fae452404664 double d1 = (double) (center.y - maxRange); double d2 = (double) (center.x + maxRange); diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 61e2fc796d49fe45229a1b0cd630355ab7d59883..1b3d0bb2ea57572b1419373873f04cc4e62d3795 100644 +index 36df6a23f1943c55ecc6bed55b48a77ba3b449e4..22e0d57048aedd3ac1ae5aecb43498fbef26f6ee 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -466,7 +466,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -524,7 +524,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple long l = k * k; int i1 = l > 2147483647L ? Integer.MAX_VALUE : (int) l; int j1 = this.getCoprime(i1); @@ -38,7 +38,7 @@ index 61e2fc796d49fe45229a1b0cd630355ab7d59883..1b3d0bb2ea57572b1419373873f04cc4 for (int l1 = 0; l1 < i1; ++l1) { int i2 = (k1 + j1 * l1) % i1; -@@ -505,7 +505,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -563,7 +563,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple long l = k * k; int i1 = l > 2147483647L ? Integer.MAX_VALUE : (int) l; int j1 = this.getCoprime(i1); @@ -61,7 +61,7 @@ index 0e0867d7add9a024bbe9471f8ff92bbb25996a3d..94ffa65fa99c4c713936f7004d9f46ac } diff --git a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java -index 1223c5d23d0ea6aed068bdf0f5725e2ad49fc82c..5df85ba4904a6b4b69ab584e9f30d34c68925a5c 100644 +index 4daa69c6be6d48563e30343a7e40e4da9ec7e5ad..d33a3b62ec7d5f82366844b2df66518e7df50700 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java +++ b/src/main/java/net/minecraft/world/entity/projectile/FishingHook.java @@ -88,7 +88,7 @@ public class FishingHook extends Projectile { @@ -72,9 +72,9 @@ index 1223c5d23d0ea6aed068bdf0f5725e2ad49fc82c..5df85ba4904a6b4b69ab584e9f30d34c + this.syncronizedRandom = world.random; // Gale - Patina - reduce RandomSource instances this.openWater = true; this.currentState = FishingHook.FishHookState.FLYING; - this.noCulling = true; + this.luck = Math.max(0, luckBonus); diff --git a/src/main/java/net/minecraft/world/entity/raid/Raid.java b/src/main/java/net/minecraft/world/entity/raid/Raid.java -index 5c0e5803284bfc82c2dd8bba9ded0ba7aac4962a..2cc37e5734233954710c4ef55bf3b2918f2026d5 100644 +index 4ce08edf6e7a59238b1c4e85acc04eab21b21ee9..3618bbf30d61d7d2c18b9da69125a5f7fefab939 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raid.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raid.java @@ -116,7 +116,7 @@ public class Raid { @@ -95,21 +95,8 @@ index 5c0e5803284bfc82c2dd8bba9ded0ba7aac4962a..2cc37e5734233954710c4ef55bf3b291 this.waveSpawnPos = Optional.empty(); this.level = world; this.id = nbt.getInt("Id"); -diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 94e0a6cdf5c340dd11374e890963d043a440650a..df04f39d8e40eaab3a29ed33f253728d236c6957 100644 ---- a/src/main/java/net/minecraft/world/level/Explosion.java -+++ b/src/main/java/net/minecraft/world/level/Explosion.java -@@ -336,7 +336,7 @@ public class Explosion { - } - - public Explosion(Level world, @Nullable Entity entity, @Nullable DamageSource damageSource, @Nullable ExplosionDamageCalculator behavior, double x, double y, double z, float power, boolean createFire, Explosion.BlockInteraction destructionType, ParticleOptions particle, ParticleOptions emitterParticle, Holder soundEvent) { -- this.random = RandomSource.create(); -+ this.random = world == null || world.random == null ? RandomSource.create() : world.random; // Gale - Patina - reduce RandomSource instances - this.toBlow = new ObjectArrayList(); - this.hitPlayers = Maps.newHashMap(); - this.level = world; diff --git a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java -index 89df488afeffd0c060d2d0e7fae16daf978bd192..ec0dc7dc5b5c0690a592006f29513f0e80123f8a 100644 +index 68fd5d3f6553af8af867e34946cb8b3f852da985..c8d2a0ae9da26fb5a3c73ec3388ec503122b4af3 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java @@ -268,7 +268,7 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { @@ -122,20 +109,20 @@ index 89df488afeffd0c060d2d0e7fae16daf978bd192..ec0dc7dc5b5c0690a592006f29513f0e @Override diff --git a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java -index 84300f2f7b7be4f5281edd8e263646dbcbb3ba07..db38112104fe6009b57788b79e0cad4cf180badb 100644 +index b331c93c82c27f9456fec208a0c008c5bedfa8c4..3a015cc92b3d9cf869bd1e4c48e0831d40e41b85 100644 --- a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java +++ b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java -@@ -474,7 +474,7 @@ public class EndDragonFight { - this.level.registryAccess().registry(Registries.CONFIGURED_FEATURE).flatMap((iregistry) -> { - return iregistry.getHolder(EndFeatures.END_GATEWAY_DELAYED); +@@ -475,7 +475,7 @@ public class EndDragonFight { + this.level.registryAccess().lookup(Registries.CONFIGURED_FEATURE).flatMap((iregistry) -> { + return iregistry.get(EndFeatures.END_GATEWAY_DELAYED); }).ifPresent((holder_c) -> { - ((ConfiguredFeature) holder_c.value()).place(this.level, this.level.getChunkSource().getGenerator(), RandomSource.create(), pos); + ((ConfiguredFeature) holder_c.value()).place(this.level, this.level.getChunkSource().getGenerator(), this.level.random, pos); // Gale - Patina - reduce RandomSource instances }); } -@@ -492,7 +492,7 @@ public class EndDragonFight { - this.portalLocation = this.portalLocation.atY(this.level.getMinBuildHeight() + 1); +@@ -493,7 +493,7 @@ public class EndDragonFight { + this.portalLocation = this.portalLocation.atY(this.level.getMinY() + 1); } // Paper end - Prevent "softlocked" exit portal generation - if (worldgenendtrophy.place(FeatureConfiguration.NONE, this.level, this.level.getChunkSource().getGenerator(), RandomSource.create(), this.portalLocation)) { diff --git a/patches/server/0119-Add-xor-shift-random.patch b/patches/server/0115-Add-xor-shift-random.patch similarity index 94% rename from patches/server/0119-Add-xor-shift-random.patch rename to patches/server/0115-Add-xor-shift-random.patch index 70e94d4..d8282b1 100644 --- a/patches/server/0119-Add-xor-shift-random.patch +++ b/patches/server/0115-Add-xor-shift-random.patch @@ -27,7 +27,7 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/main/java/com/destroystokyo/paper/loottable/PaperLootableInventoryData.java b/src/main/java/com/destroystokyo/paper/loottable/PaperLootableInventoryData.java -index cd61276a45894a02cbefc41a63c27e2cf6361d1e..b820ec688e75b4113cd7541b9dcff631017cf131 100644 +index 861bff267cb397e13e8e1c79bd0776b130c6e5da..30972bf7889973cf63b5f32ad166afdc9800bee1 100644 --- a/src/main/java/com/destroystokyo/paper/loottable/PaperLootableInventoryData.java +++ b/src/main/java/com/destroystokyo/paper/loottable/PaperLootableInventoryData.java @@ -21,7 +21,7 @@ import org.checkerframework.framework.qual.DefaultQualifier; @@ -40,23 +40,23 @@ index cd61276a45894a02cbefc41a63c27e2cf6361d1e..b820ec688e75b4113cd7541b9dcff631 private long lastFill = -1; private long nextRefill = -1; 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 67103310c59bcf7bd6e873d97a4c88a032d9f999..4aa33233060b2b2bd809d92d35bd0933cb015d41 100644 +index 3f6d60601cbfc138ab004e38bf442d985192fd3f..370266dfa461432b9e22b3ce35d6094949dc2f49 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -129,7 +129,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -132,7 +132,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p this.defaultBlockState = empty ? VOID_AIR_BLOCKSTATE : AIR_BLOCKSTATE; // Paper end - get block chunk optimisation -- this.lightningTick = new java.util.Random().nextInt(100000) << 1; // Gale - Airplane - optimize random calls in chunk ticking - initialize lightning tick -+ this.lightningTick = org.galemc.gale.configuration.GaleGlobalConfiguration.get().smallOptimizations.useXorShiftRandom.lightningRandomTick ? new org.galemc.gale.random.XorShiftRandom().nextInt(100000) << 1 : new java.util.Random().nextInt(100000) << 1; // Gale - Airplane - optimize random calls in chunk ticking - initialize lightning tick // Gale - xor-shift random +- this.lightningTick = this.level.simpleRandom.nextInt(100000) << 1; // Gale - Airplane - optimize random calls in chunk ticking - initialize lightning tick ++ this.lightningTick = org.galemc.gale.configuration.GaleGlobalConfiguration.get().smallOptimizations.useXorShiftRandom.lightningRandomTick ? new org.galemc.gale.random.XorShiftRandom().nextInt(100000) << 1 : this.level.simpleRandom.nextInt(100000) << 1; // Gale - Airplane - optimize random calls in chunk ticking - initialize lightning tick // Gale - xor-shift random } // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -index 1e0439cf3f4008fa430acb90b45f5bc4cdd6d7f2..b0ef7d56d736353722dcb92442a43c07be290cf1 100644 +index 6a465d9b12c92b5385c394fef7456630be97c04d..8c2b40b412edc75f7f1f00315c98744c627493f5 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -@@ -109,7 +109,7 @@ public class RegionFile implements AutoCloseable { +@@ -109,7 +109,7 @@ public class RegionFile implements AutoCloseable, ca.spottedleaf.moonrise.patche } private void backupRegionFile() { @@ -66,10 +66,10 @@ index 1e0439cf3f4008fa430acb90b45f5bc4cdd6d7f2..b0ef7d56d736353722dcb92442a43c07 } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 33e4818ba5a90d78d69baad9f6b1be1b1382e9f3..d59a65c35da65196b3487da08707267e2ca48a65 100644 +index d41c81158c00931e6b11093cce141f6a3085ba05..7fe89b9ffec6d8907d69ed9e7a9859eadfbdb58d 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -291,7 +291,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -295,7 +295,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { } // Paper end @@ -548,18 +548,10 @@ index 0000000000000000000000000000000000000000..60dc2c1deb0749168d03c5d94136e613 + } +} diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 86b678aa745e125ceaa271deec00d6290a02d88b..0b2f2fbe462ed628ef3d640824d4162e79279089 100644 +index d3fd27647aca128aa651bcc07dacd77d326f51c1..d17dbf62e4e789805857cc3adeb45b309ecb909c 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -38,6 +38,7 @@ import co.aikar.timings.MinecraftTimings; - import net.minecraft.world.entity.schedule.Activity; - import net.minecraft.world.level.Level; - import net.minecraft.world.phys.AABB; -+import org.galemc.gale.configuration.GaleGlobalConfiguration; - import org.galemc.gale.configuration.GaleWorldConfiguration; - - public class ActivationRange -@@ -94,7 +95,7 @@ public class ActivationRange +@@ -93,7 +93,7 @@ public class ActivationRange // Paper end // Gale start - variable entity wake-up duration diff --git a/patches/server/0120-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch b/patches/server/0116-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch similarity index 93% rename from patches/server/0120-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch rename to patches/server/0116-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch index 824040e..4e20ed9 100644 --- a/patches/server/0120-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch +++ b/patches/server/0116-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch @@ -18,10 +18,10 @@ this patch is focused around the sensors used for ai delete the line of sight cache less often and use a faster nearby comparison diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 1dcc770cec01c19d5d72b3b28281f951be6c9777..93fae6169e06cbb4bfbff194ccddf51a5c190d28 100644 +index 9f4ffbeb8ab4581dab95674f1e4bb78e86deeb7e..7cbb1b5639f52e8671e3faa38eac9f1c76df0fa1 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1030,10 +1030,9 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1050,10 +1050,9 @@ public abstract class LivingEntity extends Entity implements Attackable { } if (entity != null) { diff --git a/patches/server/0121-Initialize-line-of-sight-cache-with-low-capacity.patch b/patches/server/0117-Initialize-line-of-sight-cache-with-low-capacity.patch similarity index 100% rename from patches/server/0121-Initialize-line-of-sight-cache-with-low-capacity.patch rename to patches/server/0117-Initialize-line-of-sight-cache-with-low-capacity.patch diff --git a/patches/server/0122-Reduce-line-of-sight-updates-and-cache-lookups.patch b/patches/server/0118-Reduce-line-of-sight-updates-and-cache-lookups.patch similarity index 100% rename from patches/server/0122-Reduce-line-of-sight-updates-and-cache-lookups.patch rename to patches/server/0118-Reduce-line-of-sight-updates-and-cache-lookups.patch diff --git a/patches/server/0123-Server-thread-priority-environment-variable.patch b/patches/server/0119-Server-thread-priority-environment-variable.patch similarity index 81% rename from patches/server/0123-Server-thread-priority-environment-variable.patch rename to patches/server/0119-Server-thread-priority-environment-variable.patch index 02e3ba0..e428902 100644 --- a/patches/server/0123-Server-thread-priority-environment-variable.patch +++ b/patches/server/0119-Server-thread-priority-environment-variable.patch @@ -7,19 +7,19 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 5b347162c668dd97f1b601d93318efa7abeb03e2..f39c51ae8ea689cb089cd9d4195276c2cfdaf1b7 100644 +index 2f8980abffdff243b85c720b91c4feb30df769aa..3f160c55b356ab943c94c94294fbf4657a45da7f 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -191,6 +191,8 @@ import co.aikar.timings.MinecraftTimings; // Paper +@@ -195,6 +195,8 @@ import org.bukkit.event.server.ServerLoadEvent; - public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements ServerInfo, ChunkIOErrorReporter, CommandSource, AutoCloseable, ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer { // Paper - rewrite chunk system + public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements ServerInfo, ChunkIOErrorReporter, CommandSource, ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer { // Paper - rewrite chunk system + public static final int SERVER_THREAD_PRIORITY = Integer.getInteger("gale.thread.priority.server", -1); // Gale - server thread priority environment variable + private static MinecraftServer SERVER; // Paper public static final Logger LOGGER = LogUtils.getLogger(); public static final net.kyori.adventure.text.logger.slf4j.ComponentLogger COMPONENT_LOGGER = net.kyori.adventure.text.logger.slf4j.ComponentLogger.logger(LOGGER.getName()); // Paper -@@ -324,6 +326,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop