9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2026-01-06 15:51:31 +00:00

fix despawnInPeacefulOverride API and inline check despawn (#513)

* fix despawnInPeacefulOverride API and inline check despawn

* Revert "fix despawnInPeacefulOverride API and inline check despawn"

This reverts commit 82e37493fd.

* check despawn

* fix frozen

* rebuild patches
This commit is contained in:
hayanesuru
2026-01-01 02:17:27 +09:00
committed by GitHub
parent 8fda84ea96
commit 1c9e032c88
17 changed files with 113 additions and 263 deletions

View File

@@ -12,6 +12,7 @@ public net.minecraft.world.entity.Entity markHurt()V
public net.minecraft.world.entity.Entity position public net.minecraft.world.entity.Entity position
public net.minecraft.world.entity.Entity updateInWaterStateAndDoWaterCurrentPushing()V public net.minecraft.world.entity.Entity updateInWaterStateAndDoWaterCurrentPushing()V
public net.minecraft.world.entity.LivingEntity canGlide()Z public net.minecraft.world.entity.LivingEntity canGlide()Z
public net.minecraft.world.entity.LivingEntity noActionTime
public net.minecraft.world.entity.ai.attributes.AttributeMap attributes public net.minecraft.world.entity.ai.attributes.AttributeMap attributes
public net.minecraft.world.entity.ai.memory.NearestVisibleLivingEntities lineOfSightTest public net.minecraft.world.entity.ai.memory.NearestVisibleLivingEntities lineOfSightTest
public net.minecraft.world.entity.ai.memory.NearestVisibleLivingEntities nearbyEntities public net.minecraft.world.entity.ai.memory.NearestVisibleLivingEntities nearbyEntities

View File

@@ -2324,11 +2324,11 @@ index aab9adb8313c4b18279c7fd7500ef04bda09c6c1..86a694b94045b47f6e98c480645f7573
protected ParticleOptions getInkParticle() { protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK; return ParticleTypes.GLOW_SQUID_INK;
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index c3c3b7dfb01317c902687b7de192f8a5a910a565..a3b985cc454b2c62e7642f7eb05de590ecde9272 100644 index fa9ee5532e5e7f4224f1a296c2ed8e303d3548a5..0f4f46d951ddc49760ddb71bd47718becc4164c1 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -238,9 +238,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin @@ -238,9 +238,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
protected int noActionTime; public int noActionTime;
public float lastHurt; public float lastHurt;
public boolean jumping; public boolean jumping;
- public float xxa; - public float xxa;

View File

@@ -5,15 +5,14 @@ Subject: [PATCH] optimize mob despawn
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 3a4c9f215354b5ce96e301a17dd2d9ca0d4d1e91..cf9231c8b266dcb11a5b31db99a3a98b42423a65 100644 index 08a6a3c3eb6e270ec3d02e31b26d5fa547bb66b2..c82b751566c36eba9584e6da3c1f14e0c6ac3c1a 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -796,13 +796,19 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -796,13 +796,14 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
} }
io.papermc.paper.entity.activation.ActivationRange.activateEntities(this); // Paper - EAR io.papermc.paper.entity.activation.ActivationRange.activateEntities(this); // Paper - EAR
+ + boolean didDespawn = tickRateManager.runsNormally() && despawnMap.tick(this, this.entityTickList); // Leaf - optimize despawn
+ if (org.dreeam.leaf.config.modules.opt.OptimizeDespawn.enabled && tickRateManager.runsNormally()) { despawnMap.tick(this, this.entityTickList); } // Leaf - optimize despawn
this.entityTickList this.entityTickList
.forEach( .forEach(
entity -> { entity -> {
@@ -21,179 +20,15 @@ index 3a4c9f215354b5ce96e301a17dd2d9ca0d4d1e91..cf9231c8b266dcb11a5b31db99a3a98b
if (!entity.isRemoved()) { if (!entity.isRemoved()) {
if (!tickRateManager.isEntityFrozen(entity)) { if (!tickRateManager.isEntityFrozen(entity)) {
- entity.checkDespawn(); - entity.checkDespawn();
+ // Leaf start - optimize despawn + if (!didDespawn) { entity.checkDespawn(); } // Leaf - optimize despawn
+ if (!org.dreeam.leaf.config.modules.opt.OptimizeDespawn.enabled) {
+ entity.checkDespawn();
+ }
+ // Leaf end - optimize despawn
if (true) { // Paper - rewrite chunk system if (true) { // Paper - rewrite chunk system
Entity vehicle = entity.getVehicle(); Entity vehicle = entity.getVehicle();
if (vehicle != null) { if (vehicle != null) {
@@ -943,6 +949,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -943,6 +944,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.simpleRandom.nextInt(16); } // Gale - Airplane - optimize random calls in chunk ticking private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.simpleRandom.nextInt(16); } // Gale - Airplane - optimize random calls in chunk ticking
+ public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(paperConfig()); // Leaf - optimize despawn + public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(); // Leaf - optimize despawn
public void tickChunk(LevelChunk chunk, int randomTickSpeed) { public void tickChunk(LevelChunk chunk, int randomTickSpeed) {
final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting
ChunkPos pos = chunk.getPos(); ChunkPos pos = chunk.getPos();
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 427b0b42ea1c6418a733824f4af0de1b1e901cb9..67556752551e1d30519e2533543de9b04342420b 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -5099,6 +5099,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
public void checkDespawn() {
}
+ // Leaf start - optimize despawn
+ public void leaf$checkDespawn(org.dreeam.leaf.world.DespawnMap map) {
+ }
+ public void leaf$checkDespawnFallback(org.dreeam.leaf.world.DespawnMap map) {
+ }
+ // Leaf end - optimize despawn
+
public Vec3[] getQuadLeashHolderOffsets() {
return Leashable.createQuadLeashOffsets(this, 0.0, 0.5, 0.5, 0.0);
}
diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java
index e96605d652ca7265352ace09fd5e1892b4bbcd65..29029c58637f5622cc542ed8826b807b15f20644 100644
--- a/net/minecraft/world/entity/Mob.java
+++ b/net/minecraft/world/entity/Mob.java
@@ -763,6 +763,53 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
}
}
+ // Leaf start - optimize despawn
+ @Override
+ public void leaf$checkDespawn(org.dreeam.leaf.world.DespawnMap map) {
+ if (isRemoved()) {
+ } else if (map.difficultyIsPeaceful && this.shouldDespawnInPeaceful()) {
+ this.discard(EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause
+ } else if (this.isPersistenceRequired() || this.requiresCustomPersistence()) {
+ this.noActionTime = 0;
+ } else {
+ map.checkDespawn(this);
+ }
+ }
+ @Override
+ public void leaf$checkDespawnFallback(org.dreeam.leaf.world.DespawnMap map) {
+ if (this.level().getDifficulty() == Difficulty.PEACEFUL && this.shouldActuallyDespawnInPeaceful()) { //Paper - allow changing despawnInPeaceful
+ this.discard(EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause
+ } else if (!this.isPersistenceRequired() && !this.requiresCustomPersistence()) {
+ Entity nearestPlayer = map.checkDespawnFallback(this); // Paper - Affects Spawning API
+ if (nearestPlayer != null) {
+ // Paper start - Configurable despawn distances
+ final io.papermc.paper.configuration.WorldConfiguration.Entities.Spawning.DespawnRangePair despawnRangePair = this.level().paperConfig().entities.spawning.despawnRanges.get(this.getType().getCategory());
+ final io.papermc.paper.configuration.type.DespawnRange.Shape shape = this.level().paperConfig().entities.spawning.despawnRangeShape;
+ final double dy = Math.abs(nearestPlayer.getY() - this.getY());
+ final double dySqr = Mth.square(dy);
+ final double dxSqr = Mth.square(nearestPlayer.getX() - this.getX());
+ final double dzSqr = Mth.square(nearestPlayer.getZ() - this.getZ());
+ final double distanceSquared = dxSqr + dzSqr + dySqr;
+ // Despawn if hard/soft limit is exceeded
+ if (despawnRangePair.hard().shouldDespawn(shape, dxSqr, dySqr, dzSqr, dy) && this.removeWhenFarAway(distanceSquared)) {
+ this.discard(EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause
+ }
+
+ if (despawnRangePair.soft().shouldDespawn(shape, dxSqr, dySqr, dzSqr, dy)) {
+ if (this.noActionTime > 600 && this.random.nextInt(800) == 0 && this.removeWhenFarAway(distanceSquared)) {
+ this.discard(EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause
+ }
+ } else {
+ // Paper end - Configurable despawn distances
+ this.noActionTime = 0;
+ }
+ }
+ } else {
+ this.noActionTime = 0;
+ }
+ }
+ // Leaf end - optimize despawn
+
@Override
protected final void serverAiStep() {
this.noActionTime++;
diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
index de09a91b89661118e460842453e33f383ea08a94..e3cdff55261b2ff2c3d1cb1cf46b633a340458c9 100644
--- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
+++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
@@ -956,6 +956,15 @@ public class EnderDragon extends Mob implements Enemy {
public void checkDespawn() {
}
+ // Leaf start - optimize despawn
+ @Override
+ public void leaf$checkDespawn(org.dreeam.leaf.world.DespawnMap map) {
+ }
+ @Override
+ public void leaf$checkDespawnFallback(org.dreeam.leaf.world.DespawnMap map) {
+ }
+ // Leaf end - optimize despawn
+
public EnderDragonPart[] getSubEntities() {
return this.subEntities;
}
diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java
index e3c34d5f00ce64b3c08b10cfcb3dd14ebe8c1977..3171868523bc9b767cb9da5f58c43890fc8214da 100644
--- a/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java
@@ -695,6 +695,32 @@ public class WitherBoss extends Monster implements RangedAttackMob {
}
}
+
+ // Leaf start - optimize despawn
+ @Override
+ public void leaf$checkDespawn(org.dreeam.leaf.world.DespawnMap map) {
+ if (isRemoved()) {
+ return;
+ }
+ if (map.difficultyIsPeaceful && this.shouldDespawnInPeaceful()) {
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause
+ } else {
+ this.noActionTime = 0;
+ }
+ }
+ @Override
+ public void leaf$checkDespawnFallback(org.dreeam.leaf.world.DespawnMap map) {
+ if (isRemoved()) {
+ return;
+ }
+ if (map.difficultyIsPeaceful && this.shouldDespawnInPeaceful()) {
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause
+ } else {
+ this.noActionTime = 0;
+ }
+ }
+ // Leaf end - optimize despawn
+
@Override
public boolean addEffect(MobEffectInstance effectInstance, @Nullable Entity entity) {
return false;
diff --git a/net/minecraft/world/entity/projectile/ShulkerBullet.java b/net/minecraft/world/entity/projectile/ShulkerBullet.java
index 00154ba80175bcb07b3378f19514fec1700c94e9..ec0a30d76df2a20ceb895b2837b0f24bfe887aba 100644
--- a/net/minecraft/world/entity/projectile/ShulkerBullet.java
+++ b/net/minecraft/world/entity/projectile/ShulkerBullet.java
@@ -197,6 +197,22 @@ public class ShulkerBullet extends Projectile {
}
}
+
+ // Leaf start - optimize despawn
+ @Override
+ public void leaf$checkDespawn(org.dreeam.leaf.world.DespawnMap map) {
+ if (!isRemoved() && map.difficultyIsPeaceful) {
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause
+ }
+ }
+ @Override
+ public void leaf$checkDespawnFallback(org.dreeam.leaf.world.DespawnMap map) {
+ if (!isRemoved() && map.difficultyIsPeaceful) {
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause
+ }
+ }
+ // Leaf end - optimize despawn
+
@Override
protected double getDefaultGravity() {
return 0.04;

View File

@@ -379,7 +379,7 @@ index eaaa66c4d86d4ebda0acf8f1dbe8ecb55aa28285..908cd08e33fed1c4cd4bd34c3e63cbbe
continue; continue;
} }
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index cf9231c8b266dcb11a5b31db99a3a98b42423a65..15976e209ac24abf7f9aac5009dfd85a6b03fd2f 100644 index c82b751566c36eba9584e6da3c1f14e0c6ac3c1a..7577d7c852e0962161701a3e332a2fcf89531b46 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -180,7 +180,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -180,7 +180,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -569,7 +569,7 @@ index cf9231c8b266dcb11a5b31db99a3a98b42423a65..15976e209ac24abf7f9aac5009dfd85a
int _int = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); int _int = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
if (this.purpurConfig.playersSkipNight && this.sleepStatus.areEnoughSleeping(_int) && this.sleepStatus.areEnoughDeepSleeping(_int, this.players)) { // Purpur - Config for skipping night if (this.purpurConfig.playersSkipNight && this.sleepStatus.areEnoughSleeping(_int) && this.sleepStatus.areEnoughDeepSleeping(_int, this.players)) { // Purpur - Config for skipping night
// Paper start - create time skip event - move up calculations // Paper start - create time skip event - move up calculations
@@ -830,6 +969,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -825,6 +964,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
entity.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); entity.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD);
// Paper end - Prevent block entity and entity crashes // Paper end - Prevent block entity and entity crashes
} }
@@ -577,7 +577,7 @@ index cf9231c8b266dcb11a5b31db99a3a98b42423a65..15976e209ac24abf7f9aac5009dfd85a
this.moonrise$midTickTasks(); // Paper - rewrite chunk system this.moonrise$midTickTasks(); // Paper - rewrite chunk system
// Gale end - Airplane - remove lambda from ticking guard - copied from guardEntityTick // Gale end - Airplane - remove lambda from ticking guard - copied from guardEntityTick
} }
@@ -1309,7 +1449,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1304,7 +1444,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
fluidState.tick(this, pos, blockState); fluidState.tick(this, pos, blockState);
} }
// Paper start - rewrite chunk system // Paper start - rewrite chunk system
@@ -589,7 +589,7 @@ index cf9231c8b266dcb11a5b31db99a3a98b42423a65..15976e209ac24abf7f9aac5009dfd85a
((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer)this.server).moonrise$executeMidTickTasks(); ((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer)this.server).moonrise$executeMidTickTasks();
} }
// Paper end - rewrite chunk system // Paper end - rewrite chunk system
@@ -1322,7 +1465,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1317,7 +1460,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
blockState.tick(this, pos, this.random); blockState.tick(this, pos, this.random);
} }
// Paper start - rewrite chunk system // Paper start - rewrite chunk system
@@ -601,7 +601,7 @@ index cf9231c8b266dcb11a5b31db99a3a98b42423a65..15976e209ac24abf7f9aac5009dfd85a
((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer)this.server).moonrise$executeMidTickTasks(); ((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer)this.server).moonrise$executeMidTickTasks();
} }
// Paper end - rewrite chunk system // Paper end - rewrite chunk system
@@ -1589,6 +1735,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1584,6 +1730,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
} }
private void addPlayer(ServerPlayer player) { private void addPlayer(ServerPlayer player) {
@@ -609,7 +609,7 @@ index cf9231c8b266dcb11a5b31db99a3a98b42423a65..15976e209ac24abf7f9aac5009dfd85a
Entity entity = this.getEntity(player.getUUID()); Entity entity = this.getEntity(player.getUUID());
if (entity != null) { if (entity != null) {
LOGGER.warn("Force-added player with duplicate UUID {}", player.getUUID()); LOGGER.warn("Force-added player with duplicate UUID {}", player.getUUID());
@@ -1601,7 +1748,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1596,7 +1743,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
// CraftBukkit start // CraftBukkit start
private boolean addEntity(Entity entity, @Nullable org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) { private boolean addEntity(Entity entity, @Nullable org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) {
@@ -625,7 +625,7 @@ index cf9231c8b266dcb11a5b31db99a3a98b42423a65..15976e209ac24abf7f9aac5009dfd85a
// Paper start - extra debug info // Paper start - extra debug info
if (entity.valid) { if (entity.valid) {
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index b507065ed1dded25bdc1293014854cab340f4cd6..63d0f915439f9fe22cf6e435a3578b96ce5b990c 100644 index 4c769410080732acd73c9f7ce9284c744b88ddf3..1bc4b2989bb78d3ac91cbd397cd6f0d70bf0ddd7 100644
--- a/net/minecraft/server/level/ServerPlayer.java --- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java
@@ -463,6 +463,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -463,6 +463,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -679,7 +679,7 @@ index b507065ed1dded25bdc1293014854cab340f4cd6..63d0f915439f9fe22cf6e435a3578b96
// Paper end - Inventory close reason // Paper end - Inventory close reason
this.connection.send(new ClientboundContainerClosePacket(this.containerMenu.containerId)); this.connection.send(new ClientboundContainerClosePacket(this.containerMenu.containerId));
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 972a504905e573bc2c9a8f320f7c8aca86873d06..09da54b32e88b1476dfe80d7924a9847da360d55 100644 index e630d487b76acc11367fd50af19f693ba8f320da..f5b37ca4b30a200c86b97874f0e7871649313092 100644
--- a/net/minecraft/server/players/PlayerList.java --- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java
@@ -258,6 +258,7 @@ public abstract class PlayerList { @@ -258,6 +258,7 @@ public abstract class PlayerList {
@@ -799,7 +799,7 @@ index f9e7532f86122a379692561a639a209a126e8bba..7716c491a053db8b18aa23a4c2c768bc
if (isLocatorBarEnabledFor(player)) { if (isLocatorBarEnabledFor(player)) {
if (!connection.isBroken()) { if (!connection.isBroken()) {
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 67556752551e1d30519e2533543de9b04342420b..97f8e0e7fc18a465ed3b7ee933c8e83eb95d83ab 100644 index 427b0b42ea1c6418a733824f4af0de1b1e901cb9..d67e7f39ec08f40508e3456318b652662a34afef 100644
--- a/net/minecraft/world/entity/Entity.java --- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java
@@ -3476,15 +3476,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -3476,15 +3476,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess

View File

@@ -9,10 +9,10 @@ Leaf: ~48ms (-36%)
This should help drastically on the farms that use actively changing fluids. This should help drastically on the farms that use actively changing fluids.
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 229cd5a61ed3668e0991ae0c4657d7ea578fedef..c43cd28c0d0870f812d136cfeba884bea89b277f 100644 index f6ed5ef4b27f79fb14d8fa3d1e01bdeee077c3c2..48c9333256a137aa85e39a5ab8ca2022bd75df7f 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -1448,6 +1448,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1443,6 +1443,10 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
this.emptyTime = 0; this.emptyTime = 0;
} }

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Micro optimizations for random tick
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index c43cd28c0d0870f812d136cfeba884bea89b277f..bec2b39c1975da51302f6a395aa03269773e3007 100644 index 48c9333256a137aa85e39a5ab8ca2022bd75df7f..641875899b839d4c0012bd49a3f058258a06d99a 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -1046,7 +1046,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1041,7 +1041,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
// Paper start - optimise random ticking // Paper start - optimise random ticking
private void optimiseRandomTick(final LevelChunk chunk, final int tickSpeed) { private void optimiseRandomTick(final LevelChunk chunk, final int tickSpeed) {
final LevelChunkSection[] sections = chunk.getSections(); final LevelChunkSection[] sections = chunk.getSections();
@@ -17,7 +17,7 @@ index c43cd28c0d0870f812d136cfeba884bea89b277f..bec2b39c1975da51302f6a395aa03269
final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Leaf - Faster random generator - upcasting final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Leaf - Faster random generator - upcasting
final boolean doubleTickFluids = !ca.spottedleaf.moonrise.common.PlatformHooks.get().configFixMC224294(); final boolean doubleTickFluids = !ca.spottedleaf.moonrise.common.PlatformHooks.get().configFixMC224294();
@@ -1055,41 +1055,41 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1050,41 +1050,41 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
final int offsetZ = cpos.z << 4; final int offsetZ = cpos.z << 4;
for (int sectionIndex = 0, sectionsLen = sections.length; sectionIndex < sectionsLen; sectionIndex++) { for (int sectionIndex = 0, sectionsLen = sections.length; sectionIndex < sectionsLen; sectionIndex++) {

View File

@@ -188,13 +188,13 @@ index 908cd08e33fed1c4cd4bd34c3e63cbbe84ffead4..f5b58c181726536bedabd4b6f64769e3
} }
} }
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index bec2b39c1975da51302f6a395aa03269773e3007..eac2b9eb713d8a0a0b1682986745ae722262547e 100644 index 641875899b839d4c0012bd49a3f058258a06d99a..9b3863a7456d3d226a2d53eefdfc109bdaae9b6a 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -1096,6 +1096,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1091,6 +1091,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.simpleRandom.nextInt(16); } // Gale - Airplane - optimize random calls in chunk ticking private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.simpleRandom.nextInt(16); } // Gale - Airplane - optimize random calls in chunk ticking
public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(paperConfig()); // Leaf - optimize despawn public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(); // Leaf - optimize despawn
+ public final org.dreeam.leaf.world.NatureSpawnChunkMap natureSpawnChunkMap = new org.dreeam.leaf.world.NatureSpawnChunkMap(); // Leaf - optimize mob spawning + public final org.dreeam.leaf.world.NatureSpawnChunkMap natureSpawnChunkMap = new org.dreeam.leaf.world.NatureSpawnChunkMap(); // Leaf - optimize mob spawning
public void tickChunk(LevelChunk chunk, int randomTickSpeed) { public void tickChunk(LevelChunk chunk, int randomTickSpeed) {
final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting

View File

@@ -24,12 +24,12 @@ index f5b58c181726536bedabd4b6f64769e312ef4257..2847aa24cca82b1c66b69600ddcb5dbd
this.level.tickCustomSpawners(this.spawnEnemies, this.spawnFriendlies); this.level.tickCustomSpawners(this.spawnEnemies, this.spawnFriendlies);
} }
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index eac2b9eb713d8a0a0b1682986745ae722262547e..147ff83b0fd851f57a8ad4e79487b8eef0196970 100644 index 9b3863a7456d3d226a2d53eefdfc109bdaae9b6a..b0a9e75c62caa9c2c21084b75396b0274519a09e 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -1097,6 +1097,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1092,6 +1092,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(paperConfig()); // Leaf - optimize despawn public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(); // Leaf - optimize despawn
public final org.dreeam.leaf.world.NatureSpawnChunkMap natureSpawnChunkMap = new org.dreeam.leaf.world.NatureSpawnChunkMap(); // Leaf - optimize mob spawning public final org.dreeam.leaf.world.NatureSpawnChunkMap natureSpawnChunkMap = new org.dreeam.leaf.world.NatureSpawnChunkMap(); // Leaf - optimize mob spawning
+ public final org.dreeam.leaf.world.RandomTickSystem randomTickSystem = new org.dreeam.leaf.world.RandomTickSystem(); // Leaf - optimize random tick + public final org.dreeam.leaf.world.RandomTickSystem randomTickSystem = new org.dreeam.leaf.world.RandomTickSystem(); // Leaf - optimize random tick
public void tickChunk(LevelChunk chunk, int randomTickSpeed) { public void tickChunk(LevelChunk chunk, int randomTickSpeed) {

View File

@@ -117,10 +117,10 @@ index 2847aa24cca82b1c66b69600ddcb5dbdadec5b9d..bd4c98e9ec41a2bd608e2e2245c503be
if (!org.dreeam.leaf.config.modules.async.AsyncMobSpawning.enabled || _pufferfish_spawnCountsReady.get()) { if (!org.dreeam.leaf.config.modules.async.AsyncMobSpawning.enabled || _pufferfish_spawnCountsReady.get()) {
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 147ff83b0fd851f57a8ad4e79487b8eef0196970..de61388b0bf8b1fcb33cec5564922be29224d075 100644 index b0a9e75c62caa9c2c21084b75396b0274519a09e..b77fe1df5ebd335705576fd502a459a5be154c1d 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -1500,13 +1500,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1495,13 +1495,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
// Paper end - log detailed entity tick information // Paper end - log detailed entity tick information
public void tickNonPassenger(Entity entity) { public void tickNonPassenger(Entity entity) {
@@ -134,7 +134,7 @@ index 147ff83b0fd851f57a8ad4e79487b8eef0196970..de61388b0bf8b1fcb33cec5564922be2
entity.setOldPosAndRot(); entity.setOldPosAndRot();
entity.tickCount++; entity.tickCount++;
entity.totalEntityAge++; // Paper - age-like counter for all entities entity.totalEntityAge++; // Paper - age-like counter for all entities
@@ -1519,13 +1513,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1514,13 +1508,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
for (Entity entity1 : entity.getPassengers()) { for (Entity entity1 : entity.getPassengers()) {
this.tickPassenger(entity, entity1, isActive); // Paper - EAR 2 this.tickPassenger(entity, entity1, isActive); // Paper - EAR 2
} }
@@ -149,7 +149,7 @@ index 147ff83b0fd851f57a8ad4e79487b8eef0196970..de61388b0bf8b1fcb33cec5564922be2
private void tickPassenger(Entity ridingEntity, Entity passengerEntity, final boolean isActive) { // Paper - EAR 2 private void tickPassenger(Entity ridingEntity, Entity passengerEntity, final boolean isActive) { // Paper - EAR 2
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 984e1ba6adc13da1a9d8e901f008ded9b04e1224..d2a6f2bfa4370fee99b3f535724fc3ee18ce496f 100644 index 166bcb574ed82172095785e39d3cff474cde0645..f07bd43b26c6f7512f67b1ff4434a02a9b50009a 100644
--- a/net/minecraft/world/entity/Entity.java --- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java
@@ -1136,16 +1136,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -1136,16 +1136,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess

View File

@@ -117,18 +117,18 @@ index 0000000000000000000000000000000000000000..5f5cdfc538ba9aa6666c019df6706015
+ } + }
+} +}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 907650b743d556d50c59004d2fd0b5f7f6576045..288ede03a3ae4c5c99250d4ef1a3cf6bdc0a354d 100644 index b77fe1df5ebd335705576fd502a459a5be154c1d..6cdad6d24cf57a86954e29c6f25849ac43215848 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -941,6 +941,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -942,6 +942,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
}
io.papermc.paper.entity.activation.ActivationRange.activateEntities(this); // Paper - EAR io.papermc.paper.entity.activation.ActivationRange.activateEntities(this); // Paper - EAR
boolean didDespawn = tickRateManager.runsNormally() && despawnMap.tick(this, this.entityTickList); // Leaf - optimize despawn
+ this.globalTemptationLookup.reset(); // Paper - optimise temptation lookups - reset global cache prior to next entity tick + this.globalTemptationLookup.reset(); // Paper - optimise temptation lookups - reset global cache prior to next entity tick
if (org.dreeam.leaf.config.modules.opt.OptimizeDespawn.enabled && tickRateManager.runsNormally()) { despawnMap.tick(this, this.entityTickList); } // Leaf - optimize despawn
this.entityTickList this.entityTickList
@@ -3083,4 +3084,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe .forEach(
entity -> {
@@ -3078,4 +3079,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
this.lagCompensationTick = (System.nanoTime() - MinecraftServer.SERVER_INIT) / (java.util.concurrent.TimeUnit.MILLISECONDS.toNanos(50L)); this.lagCompensationTick = (System.nanoTime() - MinecraftServer.SERVER_INIT) / (java.util.concurrent.TimeUnit.MILLISECONDS.toNanos(50L));
} }
// Paper end - lag compensation // Paper end - lag compensation

View File

@@ -70,18 +70,18 @@ index 5f5cdfc538ba9aa6666c019df6706015234d7bae..2dfec8f6d0fe833e5f06cf2165ae14bf
} }
} }
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 373ccb50eee5aa2985fd96f731e7f8b930ce0586..03986a9b496a0cd14b6d80ef58f8bfbe3440cd19 100644 index 6cdad6d24cf57a86954e29c6f25849ac43215848..56a46a1b9bf7356d9c97d203b6ceff41df9ca7aa 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -941,7 +941,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -942,7 +942,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
}
io.papermc.paper.entity.activation.ActivationRange.activateEntities(this); // Paper - EAR io.papermc.paper.entity.activation.ActivationRange.activateEntities(this); // Paper - EAR
boolean didDespawn = tickRateManager.runsNormally() && despawnMap.tick(this, this.entityTickList); // Leaf - optimize despawn
- this.globalTemptationLookup.reset(); // Paper - optimise temptation lookups - reset global cache prior to next entity tick - this.globalTemptationLookup.reset(); // Paper - optimise temptation lookups - reset global cache prior to next entity tick
+ this.globalTemptationLookup.tick(this); // Paper - optimise temptation lookups - reset global cache prior to next entity tick + this.globalTemptationLookup.tick(this); // Paper - optimise temptation lookups - reset global cache prior to next entity tick
if (org.dreeam.leaf.config.modules.opt.OptimizeDespawn.enabled && tickRateManager.runsNormally()) { despawnMap.tick(this, this.entityTickList); } // Leaf - optimize despawn
this.entityTickList this.entityTickList
.forEach(
entity -> {
diff --git a/net/minecraft/world/entity/ai/goal/TemptGoal.java b/net/minecraft/world/entity/ai/goal/TemptGoal.java diff --git a/net/minecraft/world/entity/ai/goal/TemptGoal.java b/net/minecraft/world/entity/ai/goal/TemptGoal.java
index 0c9a355344463ea85a3b724d22d53638b1e42394..7cb94eb75a1de0cef02d4953ee5896bd5e3c7abd 100644 index 0c9a355344463ea85a3b724d22d53638b1e42394..7cb94eb75a1de0cef02d4953ee5896bd5e3c7abd 100644
--- a/net/minecraft/world/entity/ai/goal/TemptGoal.java --- a/net/minecraft/world/entity/ai/goal/TemptGoal.java

View File

@@ -5,20 +5,19 @@ Subject: [PATCH] cache collision list
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 03986a9b496a0cd14b6d80ef58f8bfbe3440cd19..b0192fe9359ff61d9f29d65768b1af9eeee91bde 100644 index 56a46a1b9bf7356d9c97d203b6ceff41df9ca7aa..e6266ba383a45acddf5d62abe803af9d5612dad2 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -1099,6 +1099,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1094,6 +1094,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(paperConfig()); // Leaf - optimize despawn public final org.dreeam.leaf.world.DespawnMap despawnMap = new org.dreeam.leaf.world.DespawnMap(); // Leaf - optimize despawn
public final org.dreeam.leaf.world.NatureSpawnChunkMap natureSpawnChunkMap = new org.dreeam.leaf.world.NatureSpawnChunkMap(); // Leaf - optimize mob spawning public final org.dreeam.leaf.world.NatureSpawnChunkMap natureSpawnChunkMap = new org.dreeam.leaf.world.NatureSpawnChunkMap(); // Leaf - optimize mob spawning
public final org.dreeam.leaf.world.RandomTickSystem randomTickSystem = new org.dreeam.leaf.world.RandomTickSystem(); // Leaf - optimize random tick public final org.dreeam.leaf.world.RandomTickSystem randomTickSystem = new org.dreeam.leaf.world.RandomTickSystem(); // Leaf - optimize random tick
+ public final org.dreeam.leaf.world.EntityCollisionCache entityCollisionCache = new org.dreeam.leaf.world.EntityCollisionCache(); // Leaf - cache collision list + public final org.dreeam.leaf.world.EntityCollisionCache entityCollisionCache = new org.dreeam.leaf.world.EntityCollisionCache(); // Leaf - cache collision list
+
public void tickChunk(LevelChunk chunk, int randomTickSpeed) { public void tickChunk(LevelChunk chunk, int randomTickSpeed) {
final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting
ChunkPos pos = chunk.getPos(); ChunkPos pos = chunk.getPos();
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 30813f3d9aeece3d8a63300b8dc73ebaed8e75cd..f6d619709d4e5b0e6d1b943226579d7388835cdb 100644 index 3ddd1f684ebde316100859bdd93e0a89be83e638..fef583625899091b13439e0d459b7538c866d712 100644
--- a/net/minecraft/world/entity/Entity.java --- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java
@@ -1552,8 +1552,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -1552,8 +1552,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess

View File

@@ -6,17 +6,17 @@ Subject: [PATCH] fast bit radix sort
Co-authored-by: Taiyou06 <kaandindar21@gmail.com> Co-authored-by: Taiyou06 <kaandindar21@gmail.com>
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index b0192fe9359ff61d9f29d65768b1af9eeee91bde..99f3589d5d051ca613c325ac566d52d30a813271 100644 index e6266ba383a45acddf5d62abe803af9d5612dad2..e4f3d032b3c63ee8ea123d1ec2ce67aa0bc9378c 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -1100,6 +1100,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1095,6 +1095,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
public final org.dreeam.leaf.world.NatureSpawnChunkMap natureSpawnChunkMap = new org.dreeam.leaf.world.NatureSpawnChunkMap(); // Leaf - optimize mob spawning public final org.dreeam.leaf.world.NatureSpawnChunkMap natureSpawnChunkMap = new org.dreeam.leaf.world.NatureSpawnChunkMap(); // Leaf - optimize mob spawning
public final org.dreeam.leaf.world.RandomTickSystem randomTickSystem = new org.dreeam.leaf.world.RandomTickSystem(); // Leaf - optimize random tick public final org.dreeam.leaf.world.RandomTickSystem randomTickSystem = new org.dreeam.leaf.world.RandomTickSystem(); // Leaf - optimize random tick
public final org.dreeam.leaf.world.EntityCollisionCache entityCollisionCache = new org.dreeam.leaf.world.EntityCollisionCache(); // Leaf - cache collision list public final org.dreeam.leaf.world.EntityCollisionCache entityCollisionCache = new org.dreeam.leaf.world.EntityCollisionCache(); // Leaf - cache collision list
+ public final org.dreeam.leaf.util.FastBitRadixSort fastBitRadixSort = new org.dreeam.leaf.util.FastBitRadixSort(); // Leaf - fast bit radix sort + public final org.dreeam.leaf.util.FastBitRadixSort fastBitRadixSort = new org.dreeam.leaf.util.FastBitRadixSort(); // Leaf - fast bit radix sort
public void tickChunk(LevelChunk chunk, int randomTickSpeed) { public void tickChunk(LevelChunk chunk, int randomTickSpeed) {
final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting
ChunkPos pos = chunk.getPos();
diff --git a/net/minecraft/world/entity/ai/sensing/NearestItemSensor.java b/net/minecraft/world/entity/ai/sensing/NearestItemSensor.java diff --git a/net/minecraft/world/entity/ai/sensing/NearestItemSensor.java b/net/minecraft/world/entity/ai/sensing/NearestItemSensor.java
index 09fd13e2d958da8326276c4dadf25bf488aff5ac..063cab1fbd8dd3a483346242659fe273d3000cc6 100644 index 09fd13e2d958da8326276c4dadf25bf488aff5ac..063cab1fbd8dd3a483346242659fe273d3000cc6 100644
--- a/net/minecraft/world/entity/ai/sensing/NearestItemSensor.java --- a/net/minecraft/world/entity/ai/sensing/NearestItemSensor.java

View File

@@ -35,10 +35,10 @@ index 45093451fb25ae3bb1e57d2e53c49a1ae666e31e..c228135032b5f74fd1ec96a2cf52aa3e
} }
} }
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 99f3589d5d051ca613c325ac566d52d30a813271..898c3b4522c306ba2c42d70a6281b130ce5d9678 100644 index e4f3d032b3c63ee8ea123d1ec2ce67aa0bc9378c..f0aec0eb3cd192bc5e04150fe29699dee35972b9 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -1183,7 +1183,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1177,7 +1177,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
// We only need to check blocks that are taller than the minimum step height // We only need to check blocks that are taller than the minimum step height
if (org.purpurmc.purpur.PurpurConfig.smoothSnowAccumulationStep > 0 && layersValue >= org.purpurmc.purpur.PurpurConfig.smoothSnowAccumulationStep) { if (org.purpurmc.purpur.PurpurConfig.smoothSnowAccumulationStep > 0 && layersValue >= org.purpurmc.purpur.PurpurConfig.smoothSnowAccumulationStep) {
int layersValueMin = layersValue - org.purpurmc.purpur.PurpurConfig.smoothSnowAccumulationStep; int layersValueMin = layersValue - org.purpurmc.purpur.PurpurConfig.smoothSnowAccumulationStep;

View File

@@ -1127,7 +1127,7 @@ index 85c811666b5cc4a01ccb97cef0cf350570bc12c6..153e442bc8b459067be0909080d2aac8
if (this.entity instanceof ServerPlayer serverPlayer) { if (this.entity instanceof ServerPlayer serverPlayer) {
serverPlayer.getBukkitEntity().injectScaledMaxHealth(attributesToSync, false); serverPlayer.getBukkitEntity().injectScaledMaxHealth(attributesToSync, false);
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 3232c025b2412f293c266e5f9e643f16f8693ef3..f58b91b277ba85fa7c0e7ad10157ecbf10023065 100644 index f0aec0eb3cd192bc5e04150fe29699dee35972b9..cb1be4947ea2d85c6dcdc7424a4b712dcce0a40e 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -221,6 +221,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -221,6 +221,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1138,7 +1138,7 @@ index 3232c025b2412f293c266e5f9e643f16f8693ef3..f58b91b277ba85fa7c0e7ad10157ecbf
@Override @Override
public @Nullable LevelChunk getChunkIfLoaded(int x, int z) { public @Nullable LevelChunk getChunkIfLoaded(int x, int z) {
@@ -987,6 +988,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -982,6 +983,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
this.tickBlockEntities(); this.tickBlockEntities();
} }
// Paper - rewrite chunk system // Paper - rewrite chunk system
@@ -1168,7 +1168,7 @@ index 94c7ae9535a235abb8fddf0ca6578dfae2e675bb..6db2eaa613599e6af5fea0922d2876b8
return true; return true;
} }
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index a2102e3739b19b99da81cc7a99ed2c8f01c46927..77ddcb214003e1fd2c847aea033217e542bc15fb 100644 index 7d837e8ae59134d41138fb6a2566f5a6551121ce..2f4f74dafaca83c8c3e6e3234565faceddc8c81a 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -2939,6 +2939,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin @@ -2939,6 +2939,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin

View File

@@ -20,10 +20,10 @@ Brings the ability to despawn weak-loaded entities once they are ticked,
a solution for https://github.com/PaperMC/Paper/issues/12986 a solution for https://github.com/PaperMC/Paper/issues/12986
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index f58b91b277ba85fa7c0e7ad10157ecbf10023065..b7f9f22abf60c75bc09126d9168fda9a0ee2375f 100644 index cb1be4947ea2d85c6dcdc7424a4b712dcce0a40e..01f7390f3fb2a423cec373a2bb5ccbee57278783 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -1515,6 +1515,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1509,6 +1509,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
entity.tick(); entity.tick();
entity.postTick(); // CraftBukkit entity.postTick(); // CraftBukkit
} else {entity.inactiveTick();} // Paper - EAR 2 } else {entity.inactiveTick();} // Paper - EAR 2
@@ -31,7 +31,7 @@ index f58b91b277ba85fa7c0e7ad10157ecbf10023065..b7f9f22abf60c75bc09126d9168fda9a
for (Entity entity1 : entity.getPassengers()) { for (Entity entity1 : entity.getPassengers()) {
this.tickPassenger(entity, entity1, isActive); // Paper - EAR 2 this.tickPassenger(entity, entity1, isActive); // Paper - EAR 2
@@ -1539,6 +1540,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -1533,6 +1534,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
ridingEntity.positionRider(passengerEntity); ridingEntity.positionRider(passengerEntity);
} }
// Paper end - EAR 2 // Paper end - EAR 2
@@ -40,7 +40,7 @@ index f58b91b277ba85fa7c0e7ad10157ecbf10023065..b7f9f22abf60c75bc09126d9168fda9a
for (Entity entity : passengerEntity.getPassengers()) { for (Entity entity : passengerEntity.getPassengers()) {
this.tickPassenger(passengerEntity, entity, isActive); // Paper - EAR 2 this.tickPassenger(passengerEntity, entity, isActive); // Paper - EAR 2
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index f6d619709d4e5b0e6d1b943226579d7388835cdb..0c35f5f5a9d9afad457e2ab723f90feeefe5413d 100644 index fef583625899091b13439e0d459b7538c866d712..e84ff9d5a1b495170b503dece72f7766b347c2d0 100644
--- a/net/minecraft/world/entity/Entity.java --- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java
@@ -373,6 +373,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -373,6 +373,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -135,7 +135,7 @@ index f6d619709d4e5b0e6d1b943226579d7388835cdb..0c35f5f5a9d9afad457e2ab723f90fee
this.totalEntityAge = input.getIntOr("Spigot.ticksLived", 0); // Paper this.totalEntityAge = input.getIntOr("Spigot.ticksLived", 0); // Paper
} }
// Spigot end // Spigot end
@@ -5327,9 +5366,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -5320,9 +5359,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@Override @Override
public boolean shouldBeSaved() { public boolean shouldBeSaved() {

View File

@@ -8,6 +8,9 @@ import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntitySelector; import net.minecraft.world.entity.EntitySelector;
import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.MobCategory; import net.minecraft.world.entity.MobCategory;
import net.minecraft.world.entity.boss.enderdragon.EnderDragon;
import net.minecraft.world.entity.boss.wither.WitherBoss;
import net.minecraft.world.entity.projectile.ShulkerBullet;
import net.minecraft.world.level.entity.EntityTickList; import net.minecraft.world.level.entity.EntityTickList;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import org.bukkit.event.entity.EntityRemoveEvent; import org.bukkit.event.entity.EntityRemoveEvent;
@@ -18,22 +21,25 @@ import java.util.OptionalInt;
import java.util.function.Consumer; import java.util.function.Consumer;
public final class DespawnMap implements Consumer<Entity> { public final class DespawnMap implements Consumer<Entity> {
private static final ServerPlayer[] EMPTY_PLAYERS = {};
private final KDTree3D tree = new KDTree3D();
private static final MobCategory[] CATEGORIES = MobCategory.values(); private static final MobCategory[] CATEGORIES = MobCategory.values();
private static final ServerPlayer[] EMPTY_PLAYERS = {};
private final KDTree3D tree = new KDTree3D();
private final double[] hard = new double[CATEGORIES.length]; private final double[] hard = new double[CATEGORIES.length];
private final double[] sort = new double[CATEGORIES.length]; private final double[] sort = new double[CATEGORIES.length];
private final boolean fallback; private boolean difficultyIsPeaceful = true;
public boolean difficultyIsPeaceful = true;
private ServerPlayer[] players = EMPTY_PLAYERS;
public DespawnMap(WorldConfiguration worldConfiguration) { public boolean tick(final ServerLevel world, final EntityTickList entityTickList) {
if (!org.dreeam.leaf.config.modules.opt.OptimizeDespawn.enabled) {
return false;
}
for (int i = 0; i < CATEGORIES.length; i++) { for (int i = 0; i < CATEGORIES.length; i++) {
sort[i] = CATEGORIES[i].getNoDespawnDistance(); sort[i] = CATEGORIES[i].getNoDespawnDistance();
hard[i] = CATEGORIES[i].getDespawnDistance(); hard[i] = CATEGORIES[i].getDespawnDistance();
} }
boolean fallback = false; boolean fallback = false;
for (Map.Entry<MobCategory, WorldConfiguration.Entities.Spawning.DespawnRangePair> e : worldConfiguration.entities.spawning.despawnRanges.entrySet()) { for (Map.Entry<MobCategory, WorldConfiguration.Entities.Spawning.DespawnRangePair> e : world.paperConfig().entities.spawning.despawnRanges.entrySet()) {
OptionalInt softVertical = e.getValue().soft().verticalLimit.value(); OptionalInt softVertical = e.getValue().soft().verticalLimit.value();
OptionalInt softHorizontal = e.getValue().soft().horizontalLimit.value(); OptionalInt softHorizontal = e.getValue().soft().horizontalLimit.value();
OptionalInt hardVertical = e.getValue().hard().verticalLimit.value(); OptionalInt hardVertical = e.getValue().hard().verticalLimit.value();
@@ -56,17 +62,16 @@ public final class DespawnMap implements Consumer<Entity> {
if (hard[i] > 0.0) { if (hard[i] > 0.0) {
hard[i] = hard[i] * hard[i]; hard[i] = hard[i] * hard[i];
} }
if (sort[i] > hard[i]) {
sort[i] = hard[i];
} }
this.fallback = fallback;
} }
ServerPlayer[] players = world.players().toArray(EMPTY_PLAYERS);
public void tick(final ServerLevel world, final EntityTickList entityTickList) {
players = world.players().toArray(EMPTY_PLAYERS);
final double[] pxl = new double[players.length]; final double[] pxl = new double[players.length];
final double[] pyl = new double[players.length]; final double[] pyl = new double[players.length];
final double[] pzl = new double[players.length]; final double[] pzl = new double[players.length];
int i = 0; int i = 0;
for (final ServerPlayer p : players) { for (ServerPlayer p : players) {
if (EntitySelector.PLAYER_AFFECTS_SPAWNING.test(p)) { if (EntitySelector.PLAYER_AFFECTS_SPAWNING.test(p)) {
pxl[i] = p.getX(); pxl[i] = p.getX();
pyl[i] = p.getY(); pyl[i] = p.getY();
@@ -81,41 +86,51 @@ public final class DespawnMap implements Consumer<Entity> {
tree.build(new double[][]{pxl, pyl, pzl}, indices); tree.build(new double[][]{pxl, pyl, pzl}, indices);
this.difficultyIsPeaceful = world.getDifficulty() == Difficulty.PEACEFUL; this.difficultyIsPeaceful = world.getDifficulty() == Difficulty.PEACEFUL;
if (fallback) { if (fallback) {
entityTickList.forEach(entity -> entity.leaf$checkDespawnFallback(this)); return false;
} else { } else {
entityTickList.forEach(this); entityTickList.forEach(this);
return true;
} }
players = EMPTY_PLAYERS;
} }
public void checkDespawn(final Mob mob) { private boolean checkDespawn(final Entity entity) {
if (entity instanceof Mob mob) {
if (!(mob instanceof EnderDragon)) {
if (difficultyIsPeaceful && mob.shouldActuallyDespawnInPeaceful()) {
return true;
} else if (mob instanceof WitherBoss || mob.isPersistenceRequired() || mob.requiresCustomPersistence()) {
mob.noActionTime = 0;
return false;
} else {
final int i = mob.getType().getCategory().ordinal(); final int i = mob.getType().getCategory().ordinal();
final double hardDist = this.hard[i]; final double hardDist = this.hard[i];
final Vec3 vec3 = mob.position; final Vec3 vec3 = mob.position;
final double dist = this.tree.nearestSqr(vec3.x, vec3.y, vec3.z, hardDist); final double dist = this.tree.nearestSqr(vec3.x, vec3.y, vec3.z, hardDist);
if (dist == Double.POSITIVE_INFINITY) { if (dist == Double.POSITIVE_INFINITY) {
return; return false;
} } else if (dist >= hardDist) {
return mob.removeWhenFarAway(dist);
if (dist >= hardDist && mob.removeWhenFarAway(dist)) {
mob.discard(EntityRemoveEvent.Cause.DESPAWN);
} else if (dist > this.sort[i]) { } else if (dist > this.sort[i]) {
if (mob.getNoActionTime() > 600 && mob.random.nextInt(800) == 0 && mob.removeWhenFarAway(dist)) { return mob.noActionTime > 600 && mob.random.nextInt(800) == 0 && mob.removeWhenFarAway(dist);
mob.discard(EntityRemoveEvent.Cause.DESPAWN); } else {
mob.noActionTime = 0;
return false;
}
} }
} else { } else {
mob.setNoActionTime(0); return false;
} }
} else if (!(entity instanceof ShulkerBullet)) {
return false;
} else {
return difficultyIsPeaceful;
} }
public ServerPlayer checkDespawnFallback(final Mob mob) {
final Vec3 vec3 = mob.position;
final int i = tree.nearestIdx(vec3.x, vec3.y, vec3.z, Double.POSITIVE_INFINITY);
return i == -1 ? null : this.players[i];
} }
@Override @Override
public void accept(final Entity entity) { public void accept(final Entity entity) {
entity.leaf$checkDespawn(this); if (!entity.isRemoved() && checkDespawn(entity)) {
entity.discard(EntityRemoveEvent.Cause.DESPAWN);
}
} }
} }