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:
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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++) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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) {
|
||||||
final int i = mob.getType().getCategory().ordinal();
|
if (entity instanceof Mob mob) {
|
||||||
final double hardDist = this.hard[i];
|
if (!(mob instanceof EnderDragon)) {
|
||||||
final Vec3 vec3 = mob.position;
|
if (difficultyIsPeaceful && mob.shouldActuallyDespawnInPeaceful()) {
|
||||||
final double dist = this.tree.nearestSqr(vec3.x, vec3.y, vec3.z, hardDist);
|
return true;
|
||||||
if (dist == Double.POSITIVE_INFINITY) {
|
} else if (mob instanceof WitherBoss || mob.isPersistenceRequired() || mob.requiresCustomPersistence()) {
|
||||||
return;
|
mob.noActionTime = 0;
|
||||||
}
|
return false;
|
||||||
|
} else {
|
||||||
if (dist >= hardDist && mob.removeWhenFarAway(dist)) {
|
final int i = mob.getType().getCategory().ordinal();
|
||||||
mob.discard(EntityRemoveEvent.Cause.DESPAWN);
|
final double hardDist = this.hard[i];
|
||||||
} else if (dist > this.sort[i]) {
|
final Vec3 vec3 = mob.position;
|
||||||
if (mob.getNoActionTime() > 600 && mob.random.nextInt(800) == 0 && mob.removeWhenFarAway(dist)) {
|
final double dist = this.tree.nearestSqr(vec3.x, vec3.y, vec3.z, hardDist);
|
||||||
mob.discard(EntityRemoveEvent.Cause.DESPAWN);
|
if (dist == Double.POSITIVE_INFINITY) {
|
||||||
|
return false;
|
||||||
|
} else if (dist >= hardDist) {
|
||||||
|
return mob.removeWhenFarAway(dist);
|
||||||
|
} else if (dist > this.sort[i]) {
|
||||||
|
return mob.noActionTime > 600 && mob.random.nextInt(800) == 0 && mob.removeWhenFarAway(dist);
|
||||||
|
} else {
|
||||||
|
mob.noActionTime = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
} else if (!(entity instanceof ShulkerBullet)) {
|
||||||
|
return false;
|
||||||
} else {
|
} else {
|
||||||
mob.setNoActionTime(0);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user