mirror of
https://github.com/BX-Team/DivineMC.git
synced 2025-12-19 14:59:25 +00:00
Updated Upstream (Purpur)
Upstream has released updates that appear to apply and compile correctly Purpur Changes:
This commit is contained in:
@@ -7,7 +7,7 @@
|
|||||||
+val bxTeamMavenPublicUrl = "https://repo.bxteam.org/snapshots/"
|
+val bxTeamMavenPublicUrl = "https://repo.bxteam.org/snapshots/"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
mache("io.papermc:mache:1.21.10+build.7")
|
mache("io.papermc:mache:1.21.10+build.9")
|
||||||
@@ -26,6 +_,7 @@
|
@@ -26,6 +_,7 @@
|
||||||
|
|
||||||
// Purpur start - Rebrand
|
// Purpur start - Rebrand
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Configuration
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java
|
diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java
|
||||||
index b138e704925193d151b69ef54f281a34d085c40b..231935f74443241a710ed2099bb32090ef34731d 100644
|
index 50df5c788069b57493d5f4125d087f9bb9dd712c..49aa436abf89b16dc5249f37bf27b02b49d9e2e8 100644
|
||||||
--- a/net/minecraft/server/dedicated/DedicatedServer.java
|
--- a/net/minecraft/server/dedicated/DedicatedServer.java
|
||||||
+++ b/net/minecraft/server/dedicated/DedicatedServer.java
|
+++ b/net/minecraft/server/dedicated/DedicatedServer.java
|
||||||
@@ -255,6 +255,8 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
@@ -255,6 +255,8 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
|
||||||
@@ -26,10 +26,10 @@ index b138e704925193d151b69ef54f281a34d085c40b..231935f74443241a710ed2099bb32090
|
|||||||
|
|
||||||
// DivineMC start - Pufferfish: SIMD Support
|
// DivineMC start - Pufferfish: SIMD Support
|
||||||
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
||||||
index f7a4a6a69f76f0eadf00b61462d407d89eaee774..0dc444a63224ef3409f4e7ac800213d5a794a810 100644
|
index c7cebf9ffb930ca228bd728996080781d7ed499f..be10e785bedb3193b1270ae2908824b2af005809 100644
|
||||||
--- a/net/minecraft/world/level/Level.java
|
--- a/net/minecraft/world/level/Level.java
|
||||||
+++ b/net/minecraft/world/level/Level.java
|
+++ b/net/minecraft/world/level/Level.java
|
||||||
@@ -166,6 +166,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -167,6 +167,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
// Paper end - add paper world config
|
// Paper end - add paper world config
|
||||||
|
|
||||||
public final org.purpurmc.purpur.PurpurWorldConfig purpurConfig; // Purpur - Purpur config files
|
public final org.purpurmc.purpur.PurpurWorldConfig purpurConfig; // Purpur - Purpur config files
|
||||||
@@ -37,7 +37,7 @@ index f7a4a6a69f76f0eadf00b61462d407d89eaee774..0dc444a63224ef3409f4e7ac800213d5
|
|||||||
public static @Nullable BlockPos lastPhysicsProblem; // Spigot
|
public static @Nullable BlockPos lastPhysicsProblem; // Spigot
|
||||||
private int tileTickPosition;
|
private int tileTickPosition;
|
||||||
public final Map<ServerExplosion.CacheKey, Float> explosionDensityCache = new java.util.HashMap<>(); // Paper - Optimize explosions
|
public final Map<ServerExplosion.CacheKey, Float> explosionDensityCache = new java.util.HashMap<>(); // Paper - Optimize explosions
|
||||||
@@ -890,6 +891,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -891,6 +892,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName()); // Spigot
|
this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName()); // Spigot
|
||||||
this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config
|
this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config
|
||||||
this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName(), environment); // Purpur - Purpur config files
|
this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName(), environment); // Purpur - Purpur config files
|
||||||
|
|||||||
@@ -1539,7 +1539,7 @@ index b8b641caf8b82f4071bfeff37d50ef65ff2a0505..d182aafc4c8b4ea657ec3228c45fb29f
|
|||||||
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/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 6836632940a8831f9020443d1c8a930e22fc054a..43cb158bee132cce0f3b09e31bc8ac83245ed3ea 100644
|
index 6fd0803b266982daf12096cfab2ee92347d72e8a..b1667ed08c417daf292e092ca0d2ab9848ac8d61 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
|
||||||
@@ -110,8 +110,6 @@ import net.minecraft.util.Mth;
|
@@ -110,8 +110,6 @@ import net.minecraft.util.Mth;
|
||||||
@@ -1551,7 +1551,7 @@ index 6836632940a8831f9020443d1c8a930e22fc054a..43cb158bee132cce0f3b09e31bc8ac83
|
|||||||
import net.minecraft.world.Container;
|
import net.minecraft.world.Container;
|
||||||
import net.minecraft.world.Difficulty;
|
import net.minecraft.world.Difficulty;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
@@ -1568,20 +1566,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
@@ -1569,20 +1567,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||||
this.portalProcess = null; // SPIGOT-7785: there is no need to carry this over as it contains the old world/location and we might run into trouble if there is a portal in the same spot in both worlds
|
this.portalProcess = null; // SPIGOT-7785: there is no need to carry this over as it contains the old world/location and we might run into trouble if there is a portal in the same spot in both worlds
|
||||||
serverLevel.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION);
|
serverLevel.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION);
|
||||||
this.unsetRemoved();
|
this.unsetRemoved();
|
||||||
@@ -1799,7 +1799,7 @@ index 39a604c9a53930b53d959b1d2eb504aa964e9a58..0d0380e3955836ce125f777841477503
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
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 e162b53f54c47ad29c80c39a14493a0fbf59dd12..36d1fd45772240aa963fcad67f15f37fc35d591f 100644
|
index 6093e359be40d8df52e29f63d10aa9629850e826..dc558a32d0cf2d1e2d5cbb09a9377313083e9a57 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
|
||||||
@@ -82,8 +82,6 @@ import net.minecraft.util.RandomSource;
|
@@ -82,8 +82,6 @@ import net.minecraft.util.RandomSource;
|
||||||
@@ -1926,7 +1926,7 @@ index e162b53f54c47ad29c80c39a14493a0fbf59dd12..36d1fd45772240aa963fcad67f15f37f
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
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 9ea15e4656d34ab6738812b6168e15bd6d25fccb..bdd59ab98de1c1392cc8d73a3eedf28ffa64911a 100644
|
index 9955a41d21345faad05843ee1b17321c3330f5d0..09987dac80cd031f7af0b63db50f5e719e05665a 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
|
||||||
@@ -70,8 +70,6 @@ import net.minecraft.tags.FluidTags;
|
@@ -70,8 +70,6 @@ import net.minecraft.tags.FluidTags;
|
||||||
@@ -1938,7 +1938,7 @@ index 9ea15e4656d34ab6738812b6168e15bd6d25fccb..bdd59ab98de1c1392cc8d73a3eedf28f
|
|||||||
import net.minecraft.world.Difficulty;
|
import net.minecraft.world.Difficulty;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.damagesource.CombatRules;
|
import net.minecraft.world.damagesource.CombatRules;
|
||||||
@@ -440,8 +438,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -441,8 +439,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
}
|
}
|
||||||
|
|
||||||
super.baseTick();
|
super.baseTick();
|
||||||
@@ -1947,7 +1947,7 @@ index 9ea15e4656d34ab6738812b6168e15bd6d25fccb..bdd59ab98de1c1392cc8d73a3eedf28f
|
|||||||
if (this.isAlive() && this.level() instanceof ServerLevel serverLevel1) {
|
if (this.isAlive() && this.level() instanceof ServerLevel serverLevel1) {
|
||||||
boolean flag = this instanceof Player;
|
boolean flag = this instanceof Player;
|
||||||
if (this.isInWall()) {
|
if (this.isInWall()) {
|
||||||
@@ -528,7 +524,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -529,7 +525,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
this.yBodyRotO = this.yBodyRot;
|
this.yBodyRotO = this.yBodyRot;
|
||||||
this.yRotO = this.getYRot();
|
this.yRotO = this.getYRot();
|
||||||
this.xRotO = this.getXRot();
|
this.xRotO = this.getXRot();
|
||||||
@@ -1955,7 +1955,7 @@ index 9ea15e4656d34ab6738812b6168e15bd6d25fccb..bdd59ab98de1c1392cc8d73a3eedf28f
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected boolean shouldTakeDrowningDamage() {
|
protected boolean shouldTakeDrowningDamage() {
|
||||||
@@ -3409,11 +3404,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -3412,11 +3407,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
f1 = this.getYRot();
|
f1 = this.getYRot();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1967,7 +1967,7 @@ index 9ea15e4656d34ab6738812b6168e15bd6d25fccb..bdd59ab98de1c1392cc8d73a3eedf28f
|
|||||||
|
|
||||||
// Paper start - stop large pitch and yaw changes from crashing the server
|
// Paper start - stop large pitch and yaw changes from crashing the server
|
||||||
this.yRotO += Math.round((this.getYRot() - this.yRotO) / 360.0F) * 360.0F;
|
this.yRotO += Math.round((this.getYRot() - this.yRotO) / 360.0F) * 360.0F;
|
||||||
@@ -3425,7 +3416,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -3428,7 +3419,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
this.yHeadRotO += Math.round((this.yHeadRot - this.yHeadRotO) / 360.0F) * 360.0F;
|
this.yHeadRotO += Math.round((this.yHeadRot - this.yHeadRotO) / 360.0F) * 360.0F;
|
||||||
// Paper end - stop large pitch and yaw changes from crashing the server
|
// Paper end - stop large pitch and yaw changes from crashing the server
|
||||||
|
|
||||||
@@ -1975,7 +1975,7 @@ index 9ea15e4656d34ab6738812b6168e15bd6d25fccb..bdd59ab98de1c1392cc8d73a3eedf28f
|
|||||||
if (this.isFallFlying()) {
|
if (this.isFallFlying()) {
|
||||||
this.fallFlyTicks++;
|
this.fallFlyTicks++;
|
||||||
} else {
|
} else {
|
||||||
@@ -3601,21 +3591,15 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -3604,21 +3594,15 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setDeltaMovement(d, d1, d2);
|
this.setDeltaMovement(d, d1, d2);
|
||||||
@@ -1997,7 +1997,7 @@ index 9ea15e4656d34ab6738812b6168e15bd6d25fccb..bdd59ab98de1c1392cc8d73a3eedf28f
|
|||||||
if (this.jumping && this.isAffectedByFluids()) {
|
if (this.jumping && this.isAffectedByFluids()) {
|
||||||
double fluidHeight;
|
double fluidHeight;
|
||||||
if (this.isInLava()) {
|
if (this.isInLava()) {
|
||||||
@@ -3644,8 +3628,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -3647,8 +3631,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
this.noJumpDelay = 0;
|
this.noJumpDelay = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2006,7 +2006,7 @@ index 9ea15e4656d34ab6738812b6168e15bd6d25fccb..bdd59ab98de1c1392cc8d73a3eedf28f
|
|||||||
if (this.isFallFlying()) {
|
if (this.isFallFlying()) {
|
||||||
this.updateFallFlying();
|
this.updateFallFlying();
|
||||||
}
|
}
|
||||||
@@ -3670,9 +3652,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -3673,9 +3655,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
this.calculateEntityAnimation(this instanceof FlyingAnimal);
|
this.calculateEntityAnimation(this instanceof FlyingAnimal);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2016,7 +2016,7 @@ index 9ea15e4656d34ab6738812b6168e15bd6d25fccb..bdd59ab98de1c1392cc8d73a3eedf28f
|
|||||||
if ((!this.isInPowderSnow || !this.canFreeze()) && !this.freezeLocked) { // Paper - Freeze Tick Lock API
|
if ((!this.isInPowderSnow || !this.canFreeze()) && !this.freezeLocked) { // Paper - Freeze Tick Lock API
|
||||||
this.setTicksFrozen(Math.max(0, this.getTicksFrozen() - 2));
|
this.setTicksFrozen(Math.max(0, this.getTicksFrozen() - 2));
|
||||||
}
|
}
|
||||||
@@ -3682,18 +3662,14 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -3685,18 +3665,14 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
if (this.tickCount % 40 == 0 && this.isFullyFrozen() && this.canFreeze()) {
|
if (this.tickCount % 40 == 0 && this.isFullyFrozen() && this.canFreeze()) {
|
||||||
this.hurtServer(serverLevel, this.damageSources().freeze(), 1.0F);
|
this.hurtServer(serverLevel, this.damageSources().freeze(), 1.0F);
|
||||||
}
|
}
|
||||||
@@ -2036,7 +2036,7 @@ index 9ea15e4656d34ab6738812b6168e15bd6d25fccb..bdd59ab98de1c1392cc8d73a3eedf28f
|
|||||||
// Purpur start - Ridables
|
// Purpur start - Ridables
|
||||||
if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) {
|
if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) {
|
||||||
diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java
|
diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java
|
||||||
index 699842fcc714a79f0ae83b899a301fa62400709c..c551b8c8c9b9d070afdbcf5cfcdb35e99830fd91 100644
|
index 9c5336e47757879465679e27faf1f63c07952f56..b2853b6a3bca0ea04c50fedf5e2f5ff633ac2a21 100644
|
||||||
--- a/net/minecraft/world/entity/Mob.java
|
--- a/net/minecraft/world/entity/Mob.java
|
||||||
+++ b/net/minecraft/world/entity/Mob.java
|
+++ b/net/minecraft/world/entity/Mob.java
|
||||||
@@ -31,8 +31,6 @@ import net.minecraft.util.debug.DebugGoalInfo;
|
@@ -31,8 +31,6 @@ import net.minecraft.util.debug.DebugGoalInfo;
|
||||||
@@ -2259,7 +2259,7 @@ index e85f17f362548f13a414a41f711900add788b2f7..0506db902dab8c15e6460b5049d388f7
|
|||||||
|
|
||||||
this.checkRestriction();
|
this.checkRestriction();
|
||||||
diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java
|
diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java
|
||||||
index d842d0158f1c685a9350c61158a6eaa36ea9e897..ae68a19a0b13bc626efec6a028f3abba4a436f3b 100644
|
index bbe59d6ab90f1b1274289ef20811f914afa55fd3..c8487029d5707d75b83aebc6fab7c65391f102f9 100644
|
||||||
--- a/net/minecraft/world/entity/animal/allay/Allay.java
|
--- a/net/minecraft/world/entity/animal/allay/Allay.java
|
||||||
+++ b/net/minecraft/world/entity/animal/allay/Allay.java
|
+++ b/net/minecraft/world/entity/animal/allay/Allay.java
|
||||||
@@ -24,8 +24,6 @@ import net.minecraft.tags.GameEventTags;
|
@@ -24,8 +24,6 @@ import net.minecraft.tags.GameEventTags;
|
||||||
@@ -2271,7 +2271,7 @@ index d842d0158f1c685a9350c61158a6eaa36ea9e897..ae68a19a0b13bc626efec6a028f3abba
|
|||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResult;
|
import net.minecraft.world.InteractionResult;
|
||||||
import net.minecraft.world.SimpleContainer;
|
import net.minecraft.world.SimpleContainer;
|
||||||
@@ -268,14 +266,9 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
|
@@ -269,14 +267,9 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void customServerAiStep(ServerLevel level) {
|
protected void customServerAiStep(ServerLevel level) {
|
||||||
@@ -2287,7 +2287,7 @@ index d842d0158f1c685a9350c61158a6eaa36ea9e897..ae68a19a0b13bc626efec6a028f3abba
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/net/minecraft/world/entity/animal/armadillo/Armadillo.java
|
diff --git a/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/net/minecraft/world/entity/animal/armadillo/Armadillo.java
|
||||||
index 040fac5a4852b101299597e655a3774d83450172..bc7d026cae5c80e81b27b611557d48147f3e55d1 100644
|
index 1ad2b942b3e9ba25c75d41b4cd21a58d43002289..a1cc92829b75200d6a66b52ed6ecc58343e91102 100644
|
||||||
--- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java
|
--- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java
|
||||||
+++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java
|
+++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java
|
||||||
@@ -22,8 +22,6 @@ import net.minecraft.util.ByIdMap;
|
@@ -22,8 +22,6 @@ import net.minecraft.util.ByIdMap;
|
||||||
@@ -2299,7 +2299,7 @@ index 040fac5a4852b101299597e655a3774d83450172..bc7d026cae5c80e81b27b611557d4814
|
|||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResult;
|
import net.minecraft.world.InteractionResult;
|
||||||
import net.minecraft.world.damagesource.DamageSource;
|
import net.minecraft.world.damagesource.DamageSource;
|
||||||
@@ -161,13 +159,8 @@ public class Armadillo extends Animal {
|
@@ -162,13 +160,8 @@ public class Armadillo extends Animal {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void customServerAiStep(ServerLevel level) {
|
protected void customServerAiStep(ServerLevel level) {
|
||||||
@@ -2426,7 +2426,7 @@ index 13b44b9560d46b351c4751aab189cc01c61d768d..37b1674c3f89d7ddba054b066df957f3
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java
|
diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java
|
||||||
index 6b6461a61a1738d64220f571b8cf7b46605327c0..7ed4685600fb0d03d90e4b7e6044ee8c466ecd72 100644
|
index a226956bc47c5f6145c0dd4d3f957be43e60272b..674d3d69c797ef3ca5934466806831b2cbcbb93a 100644
|
||||||
--- a/net/minecraft/world/entity/animal/goat/Goat.java
|
--- a/net/minecraft/world/entity/animal/goat/Goat.java
|
||||||
+++ b/net/minecraft/world/entity/animal/goat/Goat.java
|
+++ b/net/minecraft/world/entity/animal/goat/Goat.java
|
||||||
@@ -19,8 +19,6 @@ import net.minecraft.tags.ItemTags;
|
@@ -19,8 +19,6 @@ import net.minecraft.tags.ItemTags;
|
||||||
@@ -2438,7 +2438,7 @@ index 6b6461a61a1738d64220f571b8cf7b46605327c0..7ed4685600fb0d03d90e4b7e6044ee8c
|
|||||||
import net.minecraft.world.DifficultyInstance;
|
import net.minecraft.world.DifficultyInstance;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResult;
|
import net.minecraft.world.InteractionResult;
|
||||||
@@ -227,14 +225,9 @@ public class Goat extends Animal {
|
@@ -228,14 +226,9 @@ public class Goat extends Animal {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void customServerAiStep(ServerLevel level) {
|
protected void customServerAiStep(ServerLevel level) {
|
||||||
@@ -2454,7 +2454,7 @@ index 6b6461a61a1738d64220f571b8cf7b46605327c0..7ed4685600fb0d03d90e4b7e6044ee8c
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java
|
diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java
|
||||||
index d7e61ce6e2b77817f4eca913f2c319096e7f244f..2cfd97f10619fcd61f080bda1a617a664103ca53 100644
|
index 7ef3c94f63c8a25d09e69b818ecdf79795803570..6f08f08c53831dd5b68e06a4a6aee95204334a3b 100644
|
||||||
--- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java
|
--- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java
|
||||||
+++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java
|
+++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java
|
||||||
@@ -28,8 +28,6 @@ import net.minecraft.tags.BlockTags;
|
@@ -28,8 +28,6 @@ import net.minecraft.tags.BlockTags;
|
||||||
@@ -2466,7 +2466,7 @@ index d7e61ce6e2b77817f4eca913f2c319096e7f244f..2cfd97f10619fcd61f080bda1a617a66
|
|||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResult;
|
import net.minecraft.world.InteractionResult;
|
||||||
import net.minecraft.world.damagesource.DamageSource;
|
import net.minecraft.world.damagesource.DamageSource;
|
||||||
@@ -496,13 +494,9 @@ public class Sniffer extends Animal {
|
@@ -497,13 +495,9 @@ public class Sniffer extends Animal {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void customServerAiStep(ServerLevel level) {
|
protected void customServerAiStep(ServerLevel level) {
|
||||||
@@ -2481,7 +2481,7 @@ index d7e61ce6e2b77817f4eca913f2c319096e7f244f..2cfd97f10619fcd61f080bda1a617a66
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java
|
diff --git a/net/minecraft/world/entity/monster/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java
|
||||||
index 2632dd89d2f5661137e2c09b8cd426fc40599f69..233d175ba7e1c8516fff7897930c16a5de224820 100644
|
index e2bf2bc45e4f8236ab47cf28c270dad748f80b50..2dac039f711d69295a749cd354128cdf8dfdc4c7 100644
|
||||||
--- a/net/minecraft/world/entity/monster/Zoglin.java
|
--- a/net/minecraft/world/entity/monster/Zoglin.java
|
||||||
+++ b/net/minecraft/world/entity/monster/Zoglin.java
|
+++ b/net/minecraft/world/entity/monster/Zoglin.java
|
||||||
@@ -13,8 +13,6 @@ import net.minecraft.network.syncher.SynchedEntityData;
|
@@ -13,8 +13,6 @@ import net.minecraft.network.syncher.SynchedEntityData;
|
||||||
@@ -2493,7 +2493,7 @@ index 2632dd89d2f5661137e2c09b8cd426fc40599f69..233d175ba7e1c8516fff7897930c16a5
|
|||||||
import net.minecraft.util.valueproviders.UniformInt;
|
import net.minecraft.util.valueproviders.UniformInt;
|
||||||
import net.minecraft.world.DifficultyInstance;
|
import net.minecraft.world.DifficultyInstance;
|
||||||
import net.minecraft.world.damagesource.DamageSource;
|
import net.minecraft.world.damagesource.DamageSource;
|
||||||
@@ -288,11 +286,8 @@ public class Zoglin extends Monster implements HoglinBase {
|
@@ -289,11 +287,8 @@ public class Zoglin extends Monster implements HoglinBase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void customServerAiStep(ServerLevel level) {
|
protected void customServerAiStep(ServerLevel level) {
|
||||||
@@ -2533,7 +2533,7 @@ index 405eb5f041bf3a611f8111fd58864ffec30ab0c0..9ef421dfbb2d8d26d4a01d130dcbf3a6
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java
|
diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java
|
||||||
index f31a29531cc7d63bed5a4bcbe3986bcc366b6103..6f7812f22399f67923e53a10a21ebd499ed40c64 100644
|
index 6ab590b428e1a694b2538c53fabae9297b58b868..6ea2d7732eaf5eb99484834847f62858226c9879 100644
|
||||||
--- a/net/minecraft/world/entity/monster/creaking/Creaking.java
|
--- a/net/minecraft/world/entity/monster/creaking/Creaking.java
|
||||||
+++ b/net/minecraft/world/entity/monster/creaking/Creaking.java
|
+++ b/net/minecraft/world/entity/monster/creaking/Creaking.java
|
||||||
@@ -15,8 +15,6 @@ import net.minecraft.server.level.ServerLevel;
|
@@ -15,8 +15,6 @@ import net.minecraft.server.level.ServerLevel;
|
||||||
@@ -2545,7 +2545,7 @@ index f31a29531cc7d63bed5a4bcbe3986bcc366b6103..6f7812f22399f67923e53a10a21ebd49
|
|||||||
import net.minecraft.world.damagesource.DamageSource;
|
import net.minecraft.world.damagesource.DamageSource;
|
||||||
import net.minecraft.world.entity.AnimationState;
|
import net.minecraft.world.entity.AnimationState;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
@@ -235,10 +233,7 @@ public class Creaking extends Monster {
|
@@ -236,10 +234,7 @@ public class Creaking extends Monster {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void customServerAiStep(ServerLevel level) {
|
protected void customServerAiStep(ServerLevel level) {
|
||||||
@@ -2557,7 +2557,7 @@ index f31a29531cc7d63bed5a4bcbe3986bcc366b6103..6f7812f22399f67923e53a10a21ebd49
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java
|
diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java
|
||||||
index 4dbfee2698fbd63c0832440265b6128aee5380d8..c309b01a461ddb47d20a6c96bd693e4850bd731b 100644
|
index 72dc725b8cd6a2fca26aae376f91ab3e246a810b..1abc4d0de2ff983fc0c30bbc8a356d78f1c23897 100644
|
||||||
--- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java
|
--- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java
|
||||||
+++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java
|
+++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java
|
||||||
@@ -14,8 +14,6 @@ import net.minecraft.sounds.SoundEvents;
|
@@ -14,8 +14,6 @@ import net.minecraft.sounds.SoundEvents;
|
||||||
@@ -2569,7 +2569,7 @@ index 4dbfee2698fbd63c0832440265b6128aee5380d8..c309b01a461ddb47d20a6c96bd693e48
|
|||||||
import net.minecraft.world.DifficultyInstance;
|
import net.minecraft.world.DifficultyInstance;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResult;
|
import net.minecraft.world.InteractionResult;
|
||||||
@@ -207,11 +205,8 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
|
@@ -208,11 +206,8 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void customServerAiStep(ServerLevel level) {
|
protected void customServerAiStep(ServerLevel level) {
|
||||||
@@ -2632,7 +2632,7 @@ index ebe1b4e0b841906684561151919a5b3f6e206b60..0f1ed8ec352653089106ed8a143ab4ae
|
|||||||
PiglinBruteAi.maybePlayActivitySound(this);
|
PiglinBruteAi.maybePlayActivitySound(this);
|
||||||
super.customServerAiStep(level);
|
super.customServerAiStep(level);
|
||||||
diff --git a/net/minecraft/world/entity/monster/warden/Warden.java b/net/minecraft/world/entity/monster/warden/Warden.java
|
diff --git a/net/minecraft/world/entity/monster/warden/Warden.java b/net/minecraft/world/entity/monster/warden/Warden.java
|
||||||
index 380fe9b03e205d6c5b2eb48030384c8b756bc3f9..e9881eac70feebeb08f464efd4fa953cec9f62bf 100644
|
index dede88234fd2b0f55863021446c4c9273f3a14d8..87976d8981f72732899c57a96971e851b86d5123 100644
|
||||||
--- a/net/minecraft/world/entity/monster/warden/Warden.java
|
--- a/net/minecraft/world/entity/monster/warden/Warden.java
|
||||||
+++ b/net/minecraft/world/entity/monster/warden/Warden.java
|
+++ b/net/minecraft/world/entity/monster/warden/Warden.java
|
||||||
@@ -26,8 +26,6 @@ import net.minecraft.tags.TagKey;
|
@@ -26,8 +26,6 @@ import net.minecraft.tags.TagKey;
|
||||||
@@ -2644,7 +2644,7 @@ index 380fe9b03e205d6c5b2eb48030384c8b756bc3f9..e9881eac70feebeb08f464efd4fa953c
|
|||||||
import net.minecraft.world.DifficultyInstance;
|
import net.minecraft.world.DifficultyInstance;
|
||||||
import net.minecraft.world.damagesource.DamageSource;
|
import net.minecraft.world.damagesource.DamageSource;
|
||||||
import net.minecraft.world.effect.MobEffectInstance;
|
import net.minecraft.world.effect.MobEffectInstance;
|
||||||
@@ -302,11 +300,8 @@ public class Warden extends Monster implements VibrationSystem {
|
@@ -303,11 +301,8 @@ public class Warden extends Monster implements VibrationSystem {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void customServerAiStep(ServerLevel level) {
|
protected void customServerAiStep(ServerLevel level) {
|
||||||
@@ -2657,7 +2657,7 @@ index 380fe9b03e205d6c5b2eb48030384c8b756bc3f9..e9881eac70feebeb08f464efd4fa953c
|
|||||||
if ((this.tickCount + this.getId()) % 120 == 0) {
|
if ((this.tickCount + this.getId()) % 120 == 0) {
|
||||||
applyDarknessAround(level, this.position(), this, 20);
|
applyDarknessAround(level, this.position(), this, 20);
|
||||||
diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java
|
diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java
|
||||||
index 0ab9ac120703285baa563391653323c17d05b20b..e89ff53c568013a5f53afcf5759314221d37adf4 100644
|
index bfff91e5e252141f887d8965ecf1dd9ff1cebfe3..d99a6ade82bbd01e25137fecfbec5dcef6765e79 100644
|
||||||
--- a/net/minecraft/world/entity/npc/Villager.java
|
--- a/net/minecraft/world/entity/npc/Villager.java
|
||||||
+++ b/net/minecraft/world/entity/npc/Villager.java
|
+++ b/net/minecraft/world/entity/npc/Villager.java
|
||||||
@@ -35,8 +35,6 @@ import net.minecraft.stats.Stats;
|
@@ -35,8 +35,6 @@ import net.minecraft.stats.Stats;
|
||||||
@@ -2669,7 +2669,7 @@ index 0ab9ac120703285baa563391653323c17d05b20b..e89ff53c568013a5f53afcf575931422
|
|||||||
import net.minecraft.world.Difficulty;
|
import net.minecraft.world.Difficulty;
|
||||||
import net.minecraft.world.DifficultyInstance;
|
import net.minecraft.world.DifficultyInstance;
|
||||||
import net.minecraft.world.InteractionHand;
|
import net.minecraft.world.InteractionHand;
|
||||||
@@ -393,8 +391,6 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
@@ -394,8 +392,6 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||||
}
|
}
|
||||||
protected void customServerAiStep(ServerLevel level, boolean inactive) { // Purpur - Lobotomize stuck villagers - not final
|
protected void customServerAiStep(ServerLevel level, boolean inactive) { // Purpur - Lobotomize stuck villagers - not final
|
||||||
// Paper end - EAR 2
|
// Paper end - EAR 2
|
||||||
@@ -2678,7 +2678,7 @@ index 0ab9ac120703285baa563391653323c17d05b20b..e89ff53c568013a5f53afcf575931422
|
|||||||
// Purpur start - Lobotomize stuck villagers
|
// Purpur start - Lobotomize stuck villagers
|
||||||
if (this.level().purpurConfig.villagerLobotomizeEnabled) {
|
if (this.level().purpurConfig.villagerLobotomizeEnabled) {
|
||||||
// treat as inactive if lobotomized
|
// treat as inactive if lobotomized
|
||||||
@@ -407,7 +403,6 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
@@ -408,7 +404,6 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||||
}
|
}
|
||||||
else if (this.isLobotomized && shouldRestock()) restock();
|
else if (this.isLobotomized && shouldRestock()) restock();
|
||||||
// Purpur end - Lobotomize stuck villagers
|
// Purpur end - Lobotomize stuck villagers
|
||||||
@@ -2717,7 +2717,7 @@ index 07d7c4737635f671f33b8f73001d67928fc75782..f2c82217811712625df594667330a73f
|
|||||||
LOGGER.info("Loaded {} recipes", object.values().size());
|
LOGGER.info("Loaded {} recipes", object.values().size());
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
||||||
index 5792422495a2d71ae4341e54817550e3d352d0b4..ad69e0e97d6d8efcfe73fe8a6f66cc64719704ac 100644
|
index be10e785bedb3193b1270ae2908824b2af005809..d8b6f1b853609a7fcbd9c2fe6485e5080dece43a 100644
|
||||||
--- a/net/minecraft/world/level/Level.java
|
--- a/net/minecraft/world/level/Level.java
|
||||||
+++ b/net/minecraft/world/level/Level.java
|
+++ b/net/minecraft/world/level/Level.java
|
||||||
@@ -36,7 +36,6 @@ import net.minecraft.util.AbortableIterationConsumer;
|
@@ -36,7 +36,6 @@ import net.minecraft.util.AbortableIterationConsumer;
|
||||||
@@ -2728,7 +2728,7 @@ index 5792422495a2d71ae4341e54817550e3d352d0b4..ad69e0e97d6d8efcfe73fe8a6f66cc64
|
|||||||
import net.minecraft.util.random.WeightedList;
|
import net.minecraft.util.random.WeightedList;
|
||||||
import net.minecraft.world.DifficultyInstance;
|
import net.minecraft.world.DifficultyInstance;
|
||||||
import net.minecraft.world.TickRateManager;
|
import net.minecraft.world.TickRateManager;
|
||||||
@@ -259,7 +258,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -260,7 +259,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final <T extends Entity> List<T> getEntitiesOfClass(final Class<T> entityClass, final AABB boundingBox, final Predicate<? super T> predicate) {
|
public final <T extends Entity> List<T> getEntitiesOfClass(final Class<T> entityClass, final AABB boundingBox, final Predicate<? super T> predicate) {
|
||||||
@@ -2736,7 +2736,7 @@ index 5792422495a2d71ae4341e54817550e3d352d0b4..ad69e0e97d6d8efcfe73fe8a6f66cc64
|
|||||||
final List<T> ret = new java.util.ArrayList<>();
|
final List<T> ret = new java.util.ArrayList<>();
|
||||||
|
|
||||||
((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(entityClass, null, boundingBox, ret, predicate);
|
((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(entityClass, null, boundingBox, ret, predicate);
|
||||||
@@ -269,7 +267,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -270,7 +268,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final List<Entity> moonrise$getHardCollidingEntities(final Entity entity, final AABB box, final Predicate<? super Entity> predicate) {
|
public final List<Entity> moonrise$getHardCollidingEntities(final Entity entity, final AABB box, final Predicate<? super Entity> predicate) {
|
||||||
@@ -2744,7 +2744,7 @@ index 5792422495a2d71ae4341e54817550e3d352d0b4..ad69e0e97d6d8efcfe73fe8a6f66cc64
|
|||||||
final List<Entity> ret = new java.util.ArrayList<>();
|
final List<Entity> ret = new java.util.ArrayList<>();
|
||||||
|
|
||||||
((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getHardCollidingEntities(entity, box, ret, predicate);
|
((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getHardCollidingEntities(entity, box, ret, predicate);
|
||||||
@@ -1735,7 +1732,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -1736,7 +1733,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Entity> getEntities(@Nullable Entity entity, AABB boundingBox, Predicate<? super Entity> predicate) {
|
public List<Entity> getEntities(@Nullable Entity entity, AABB boundingBox, Predicate<? super Entity> predicate) {
|
||||||
@@ -2752,7 +2752,7 @@ index 5792422495a2d71ae4341e54817550e3d352d0b4..ad69e0e97d6d8efcfe73fe8a6f66cc64
|
|||||||
List<Entity> list = Lists.newArrayList();
|
List<Entity> list = Lists.newArrayList();
|
||||||
|
|
||||||
// Paper start - rewrite chunk system
|
// Paper start - rewrite chunk system
|
||||||
@@ -1764,8 +1760,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -1765,8 +1761,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
public <T extends Entity> void getEntities(final EntityTypeTest<Entity, T> entityTypeTest,
|
public <T extends Entity> void getEntities(final EntityTypeTest<Entity, T> entityTypeTest,
|
||||||
final AABB boundingBox, final Predicate<? super T> predicate,
|
final AABB boundingBox, final Predicate<? super T> predicate,
|
||||||
final List<? super T> into, final int maxCount) {
|
final List<? super T> into, final int maxCount) {
|
||||||
@@ -2761,7 +2761,7 @@ index 5792422495a2d71ae4341e54817550e3d352d0b4..ad69e0e97d6d8efcfe73fe8a6f66cc64
|
|||||||
if (entityTypeTest instanceof net.minecraft.world.entity.EntityType<T> byType) {
|
if (entityTypeTest instanceof net.minecraft.world.entity.EntityType<T> byType) {
|
||||||
if (maxCount != Integer.MAX_VALUE) {
|
if (maxCount != Integer.MAX_VALUE) {
|
||||||
((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(byType, boundingBox, into, predicate, maxCount);
|
((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(byType, boundingBox, into, predicate, maxCount);
|
||||||
@@ -1850,7 +1844,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -1851,7 +1845,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
// Paper end - rewrite chunk system
|
// Paper end - rewrite chunk system
|
||||||
|
|
||||||
public <T extends Entity> boolean hasEntities(EntityTypeTest<Entity, T> entityTypeTest, AABB bounds, Predicate<? super T> predicate) {
|
public <T extends Entity> boolean hasEntities(EntityTypeTest<Entity, T> entityTypeTest, AABB bounds, Predicate<? super T> predicate) {
|
||||||
|
|||||||
@@ -23,10 +23,10 @@ index c58b4a5426dc2e502e240e9b9270ead2ef65ecbd..1618e1d985ea798c1d7485b30fad5b45
|
|||||||
player.awardStat(Stats.ITEM_USED.get(item));
|
player.awardStat(Stats.ITEM_USED.get(item));
|
||||||
// level.setBlockAndUpdate(pos, Blocks.WATER_CAULDRON.defaultBlockState()); // CraftBukkit
|
// level.setBlockAndUpdate(pos, Blocks.WATER_CAULDRON.defaultBlockState()); // CraftBukkit
|
||||||
diff --git a/net/minecraft/core/dispenser/DispenseItemBehavior.java b/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
diff --git a/net/minecraft/core/dispenser/DispenseItemBehavior.java b/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
||||||
index 91a1ae527589ecab1322e97efd9e863a84fcb4fe..181fdb493f64442c659165c10e237ebc198fb6e2 100644
|
index 5d0eb3893a0cca99ef53c2095b7b36a145dc15be..077ccddb7d358be352b6d497ed8b4e97b7d09262 100644
|
||||||
--- a/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
--- a/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
||||||
+++ b/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
+++ b/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
||||||
@@ -578,13 +578,25 @@ public interface DispenseItemBehavior {
|
@@ -580,13 +580,25 @@ public interface DispenseItemBehavior {
|
||||||
blockStateBase -> blockStateBase.hasProperty(BeehiveBlock.HONEY_LEVEL) && blockStateBase.getBlock() instanceof BeehiveBlock
|
blockStateBase -> blockStateBase.hasProperty(BeehiveBlock.HONEY_LEVEL) && blockStateBase.getBlock() instanceof BeehiveBlock
|
||||||
)
|
)
|
||||||
&& blockState.getValue(BeehiveBlock.HONEY_LEVEL) >= 5) {
|
&& blockState.getValue(BeehiveBlock.HONEY_LEVEL) >= 5) {
|
||||||
@@ -111,7 +111,7 @@ index 105f9166297de2bfa6bdcfa9f6a0ffb00c0242ac..111f43fc5c74577f8f3067a4f84be7a6
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/block/BeehiveBlock.java b/net/minecraft/world/level/block/BeehiveBlock.java
|
diff --git a/net/minecraft/world/level/block/BeehiveBlock.java b/net/minecraft/world/level/block/BeehiveBlock.java
|
||||||
index 0768619454a88f555dd81a609a61f49dc2578f06..4eaec4533497ec354646b75c77f74170cac672bb 100644
|
index 02671ed6ba302c36d15896bd1fb3a0883b6e0940..8e9426784b46f8b988279c1dc4c6d2276f394422 100644
|
||||||
--- a/net/minecraft/world/level/block/BeehiveBlock.java
|
--- a/net/minecraft/world/level/block/BeehiveBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/BeehiveBlock.java
|
+++ b/net/minecraft/world/level/block/BeehiveBlock.java
|
||||||
@@ -159,12 +159,26 @@ public class BeehiveBlock extends BaseEntityBlock {
|
@@ -159,12 +159,26 @@ public class BeehiveBlock extends BaseEntityBlock {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Integration with Imanity Software's Raytrace AntiXray for better use of this plu
|
|||||||
Original project: https://github.com/Imanity-Software/raytrace-antixray-spigot-sdk
|
Original project: https://github.com/Imanity-Software/raytrace-antixray-spigot-sdk
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java
|
diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||||
index 599d6a4f31e05369caf3ef9f5e54e83396743ec0..07dd9b8088e363110ecab24026a20485484710c4 100644
|
index fad600f343ee0983efc183f083b1507648987575..9bbcffc77dcf0e062a7f3464aee7f8d0563a440f 100644
|
||||||
--- a/net/minecraft/server/level/ServerPlayerGameMode.java
|
--- a/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||||
+++ b/net/minecraft/server/level/ServerPlayerGameMode.java
|
+++ b/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||||
@@ -316,6 +316,12 @@ public class ServerPlayerGameMode {
|
@@ -316,6 +316,12 @@ public class ServerPlayerGameMode {
|
||||||
@@ -25,10 +25,10 @@ index 599d6a4f31e05369caf3ef9f5e54e83396743ec0..07dd9b8088e363110ecab24026a20485
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
||||||
index 5b50b86c735fa2ba1b5452aacda7db5e64012076..b94b946986258fed3c6d68d9972a657e176d08a4 100644
|
index d8b6f1b853609a7fcbd9c2fe6485e5080dece43a..21a20aa602f51bbd6c8cdcb52f6b485971834595 100644
|
||||||
--- a/net/minecraft/world/level/Level.java
|
--- a/net/minecraft/world/level/Level.java
|
||||||
+++ b/net/minecraft/world/level/Level.java
|
+++ b/net/minecraft/world/level/Level.java
|
||||||
@@ -1125,6 +1125,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -1126,6 +1126,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
snapshot.setFlags(flags); // Paper - always set the flag of the most recent call to mitigate issues with multiple update at the same pos with different flags
|
snapshot.setFlags(flags); // Paper - always set the flag of the most recent call to mitigate issues with multiple update at the same pos with different flags
|
||||||
}
|
}
|
||||||
BlockState blockState = chunkAt.setBlockState(pos, state, flags);
|
BlockState blockState = chunkAt.setBlockState(pos, state, flags);
|
||||||
|
|||||||
@@ -27,10 +27,10 @@ index 8697528095ebed543ee1bb3b6b617a26a800bd5d..4fc29f7aae32180f86af971f7f80a37a
|
|||||||
public static final int GENERATED_TICKET_LEVEL = ChunkHolderManager.FULL_LOADED_TICKET_LEVEL;
|
public static final int GENERATED_TICKET_LEVEL = ChunkHolderManager.FULL_LOADED_TICKET_LEVEL;
|
||||||
public static final int LOADED_TICKET_LEVEL = ChunkTaskScheduler.getTicketLevel(ChunkStatus.EMPTY);
|
public static final int LOADED_TICKET_LEVEL = ChunkTaskScheduler.getTicketLevel(ChunkStatus.EMPTY);
|
||||||
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 561165ccc8c4d66ef590fb8deb65782a214d9611..79210997e56ec6798d249608049e108724670cde 100644
|
index 67f9d5384f26d27cb59c2bfa090697dd86b85b67..457dfcb459f2618e6975ab3e4ff37d5988dd50c2 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
|
||||||
@@ -220,6 +220,13 @@ public abstract class PlayerList {
|
@@ -221,6 +221,13 @@ public abstract class PlayerList {
|
||||||
// this.broadcastAll(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player))); // CraftBukkit - replaced with loop below
|
// this.broadcastAll(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player))); // CraftBukkit - replaced with loop below
|
||||||
// Paper start - Fire PlayerJoinEvent when Player is actually ready; correctly register player BEFORE PlayerJoinEvent, so the entity is valid and doesn't require tick delay hacks
|
// Paper start - Fire PlayerJoinEvent when Player is actually ready; correctly register player BEFORE PlayerJoinEvent, so the entity is valid and doesn't require tick delay hacks
|
||||||
player.suppressTrackerForLogin = true;
|
player.suppressTrackerForLogin = true;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Disable leaf decay
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/block/LeavesBlock.java b/net/minecraft/world/level/block/LeavesBlock.java
|
diff --git a/net/minecraft/world/level/block/LeavesBlock.java b/net/minecraft/world/level/block/LeavesBlock.java
|
||||||
index 66be73fe9ad14646057fa51b7c537a86c1e84ab9..4371fd03e4b5bd3a18024e0a9ee0e75cd77137e9 100644
|
index b507dbb6ab345cf754775226c59320526d7b94f0..884f102836ff1ea08632804465f21a18bb7cd18d 100644
|
||||||
--- a/net/minecraft/world/level/block/LeavesBlock.java
|
--- a/net/minecraft/world/level/block/LeavesBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/LeavesBlock.java
|
+++ b/net/minecraft/world/level/block/LeavesBlock.java
|
||||||
@@ -70,12 +70,29 @@ public abstract class LeavesBlock extends Block implements SimpleWaterloggedBloc
|
@@ -70,12 +70,29 @@ public abstract class LeavesBlock extends Block implements SimpleWaterloggedBloc
|
||||||
@@ -18,7 +18,7 @@ index 66be73fe9ad14646057fa51b7c537a86c1e84ab9..4371fd03e4b5bd3a18024e0a9ee0e75c
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
|
protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
|
||||||
- level.setBlock(pos, updateDistance(state, level, pos), 3);
|
- level.setBlock(pos, updateDistance(state, level, pos), Block.UPDATE_ALL);
|
||||||
+ // DivineMC start - Disable leaf decay
|
+ // DivineMC start - Disable leaf decay
|
||||||
+ if (org.bxteam.divinemc.config.DivineConfig.FixesCategory.disableLeafDecay) return; // DivineMC - Disable leaf decay
|
+ if (org.bxteam.divinemc.config.DivineConfig.FixesCategory.disableLeafDecay) return; // DivineMC - Disable leaf decay
|
||||||
+ int newValue = 7;
|
+ int newValue = 7;
|
||||||
@@ -34,7 +34,7 @@ index 66be73fe9ad14646057fa51b7c537a86c1e84ab9..4371fd03e4b5bd3a18024e0a9ee0e75c
|
|||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ if (newValue != oldValue) {
|
+ if (newValue != oldValue) {
|
||||||
+ level.setBlock(pos, state.setValue(DISTANCE, newValue), 3);
|
+ level.setBlock(pos, state.setValue(DISTANCE, newValue), Block.UPDATE_ALL);
|
||||||
+ }
|
+ }
|
||||||
+ // DivineMC end - Disable leaf decay
|
+ // DivineMC end - Disable leaf decay
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ index 0adfd1cd5c21f8a7823cd1bf7c9aa91dd2654150..ad1ebec9d47a4f70b51259cd5ad8a6e7
|
|||||||
|
|
||||||
super.onSyncedDataUpdated(key);
|
super.onSyncedDataUpdated(key);
|
||||||
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 36d1fd45772240aa963fcad67f15f37fc35d591f..6b5b01b9525f51fe02f03f7249517599d1ba1945 100644
|
index dc558a32d0cf2d1e2d5cbb09a9377313083e9a57..80b771f69549cf460b3d1fca2de8f27152e98f42 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
|
||||||
@@ -1711,6 +1711,10 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
@@ -1711,6 +1711,10 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
||||||
@@ -605,10 +605,10 @@ index 24d1928445b5571e040a2b12d5c82e77a880d9bd..dac0a23aebf2dea1972c07d5c82079da
|
|||||||
private boolean isVillagerBaby(LivingEntity livingEntity) {
|
private boolean isVillagerBaby(LivingEntity livingEntity) {
|
||||||
return livingEntity.getType() == EntityType.VILLAGER && livingEntity.isBaby();
|
return livingEntity.getType() == EntityType.VILLAGER && livingEntity.isBaby();
|
||||||
diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java
|
diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java
|
||||||
index 7ed4685600fb0d03d90e4b7e6044ee8c466ecd72..58ee22461c0330e2fbbbf283c154b8141e2d1953 100644
|
index 674d3d69c797ef3ca5934466806831b2cbcbb93a..04a4cc148579904222b3c99a1ad4c64e5783afa2 100644
|
||||||
--- a/net/minecraft/world/entity/animal/goat/Goat.java
|
--- a/net/minecraft/world/entity/animal/goat/Goat.java
|
||||||
+++ b/net/minecraft/world/entity/animal/goat/Goat.java
|
+++ b/net/minecraft/world/entity/animal/goat/Goat.java
|
||||||
@@ -99,6 +99,13 @@ public class Goat extends Animal {
|
@@ -100,6 +100,13 @@ public class Goat extends Animal {
|
||||||
this.getNavigation().setCanFloat(true);
|
this.getNavigation().setCanFloat(true);
|
||||||
this.setPathfindingMalus(PathType.POWDER_SNOW, -1.0F);
|
this.setPathfindingMalus(PathType.POWDER_SNOW, -1.0F);
|
||||||
this.setPathfindingMalus(PathType.DANGER_POWDER_SNOW, -1.0F);
|
this.setPathfindingMalus(PathType.DANGER_POWDER_SNOW, -1.0F);
|
||||||
|
|||||||
@@ -25,10 +25,10 @@ index f7bb979f08634a7e1b77c59040f59fb5e11aafa5..e0eca73d9e8a77b2a4972db61001394c
|
|||||||
for (int i1 = 0; i1 < this.height; i1++) {
|
for (int i1 = 0; i1 < this.height; i1++) {
|
||||||
for (int i2 = 0; i2 < this.depth; i2++) {
|
for (int i2 = 0; i2 < this.depth; i2++) {
|
||||||
diff --git a/net/minecraft/world/level/dimension/end/EndDragonFight.java b/net/minecraft/world/level/dimension/end/EndDragonFight.java
|
diff --git a/net/minecraft/world/level/dimension/end/EndDragonFight.java b/net/minecraft/world/level/dimension/end/EndDragonFight.java
|
||||||
index 16156eb8e8bee376950a5f1efc9ac5e295716c61..4319cbd1c87629e125bd7ff4d71bdc8b40084469 100644
|
index fcb0fb9ca663ec40e1541d099bc3d710963f6c9d..db9843fddf43bdc287978728f08230c0e6178195 100644
|
||||||
--- a/net/minecraft/world/level/dimension/end/EndDragonFight.java
|
--- a/net/minecraft/world/level/dimension/end/EndDragonFight.java
|
||||||
+++ b/net/minecraft/world/level/dimension/end/EndDragonFight.java
|
+++ b/net/minecraft/world/level/dimension/end/EndDragonFight.java
|
||||||
@@ -273,8 +273,68 @@ public class EndDragonFight {
|
@@ -274,8 +274,68 @@ public class EndDragonFight {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,7 +97,7 @@ index 16156eb8e8bee376950a5f1efc9ac5e295716c61..4319cbd1c87629e125bd7ff4d71bdc8b
|
|||||||
ChunkPos chunkPos = new ChunkPos(this.origin);
|
ChunkPos chunkPos = new ChunkPos(this.origin);
|
||||||
|
|
||||||
for (int i = -8 + chunkPos.x; i <= 8 + chunkPos.x; i++) {
|
for (int i = -8 + chunkPos.x; i <= 8 + chunkPos.x; i++) {
|
||||||
@@ -572,6 +632,11 @@ public class EndDragonFight {
|
@@ -573,6 +633,11 @@ public class EndDragonFight {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean respawnDragon(List<EndCrystal> crystals) { // CraftBukkit - return boolean
|
public boolean respawnDragon(List<EndCrystal> crystals) { // CraftBukkit - return boolean
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Option to disable disconnect.spam
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
index edc358b08b94a12f2727c805e2254197df0ae25a..36c2b6d15373cf50a91f45df497d82a963696386 100644
|
index 2ce82bb127978bf77812bb8cb526507f6985a92a..151e7113ed1a4906b97cea7d34aa522900c4ee3f 100644
|
||||||
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
@@ -852,7 +852,7 @@ public class ServerGamePacketListenerImpl
|
@@ -853,7 +853,7 @@ public class ServerGamePacketListenerImpl
|
||||||
public void handleCustomCommandSuggestions(ServerboundCommandSuggestionPacket packet) {
|
public void handleCustomCommandSuggestions(ServerboundCommandSuggestionPacket packet) {
|
||||||
// PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); // Paper - AsyncTabCompleteEvent; run this async
|
// PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); // Paper - AsyncTabCompleteEvent; run this async
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
@@ -17,7 +17,7 @@ index edc358b08b94a12f2727c805e2254197df0ae25a..36c2b6d15373cf50a91f45df497d82a9
|
|||||||
this.disconnectAsync(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM); // Paper - Kick event cause // Paper - add proper async disconnect
|
this.disconnectAsync(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM); // Paper - Kick event cause // Paper - add proper async disconnect
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -864,7 +864,7 @@ public class ServerGamePacketListenerImpl
|
@@ -865,7 +865,7 @@ public class ServerGamePacketListenerImpl
|
||||||
// Paper end - Don't suggest if tab-complete is disabled
|
// Paper end - Don't suggest if tab-complete is disabled
|
||||||
// Paper start
|
// Paper start
|
||||||
final int index;
|
final int index;
|
||||||
@@ -26,7 +26,7 @@ index edc358b08b94a12f2727c805e2254197df0ae25a..36c2b6d15373cf50a91f45df497d82a9
|
|||||||
this.disconnectAsync(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM); // Paper - add proper async disconnect
|
this.disconnectAsync(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM); // Paper - add proper async disconnect
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -924,6 +924,7 @@ public class ServerGamePacketListenerImpl
|
@@ -925,6 +925,7 @@ public class ServerGamePacketListenerImpl
|
||||||
ParseResults<CommandSourceStack> parseResults = this.server.getCommands().getDispatcher().parse(stringReader, this.player.createCommandSourceStack());
|
ParseResults<CommandSourceStack> parseResults = this.server.getCommands().getDispatcher().parse(stringReader, this.player.createCommandSourceStack());
|
||||||
// Paper start - Handle non-recoverable exceptions
|
// Paper start - Handle non-recoverable exceptions
|
||||||
if (!parseResults.getExceptions().isEmpty()
|
if (!parseResults.getExceptions().isEmpty()
|
||||||
@@ -34,7 +34,7 @@ index edc358b08b94a12f2727c805e2254197df0ae25a..36c2b6d15373cf50a91f45df497d82a9
|
|||||||
&& parseResults.getExceptions().values().stream().anyMatch(e -> e instanceof io.papermc.paper.brigadier.TagParseCommandSyntaxException)) {
|
&& parseResults.getExceptions().values().stream().anyMatch(e -> e instanceof io.papermc.paper.brigadier.TagParseCommandSyntaxException)) {
|
||||||
this.disconnect(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM);
|
this.disconnect(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM);
|
||||||
return;
|
return;
|
||||||
@@ -2638,6 +2639,7 @@ public class ServerGamePacketListenerImpl
|
@@ -2639,6 +2640,7 @@ public class ServerGamePacketListenerImpl
|
||||||
// this.chatSpamThrottler.increment();
|
// this.chatSpamThrottler.increment();
|
||||||
if (!this.chatSpamThrottler.isIncrementAndUnderThreshold()
|
if (!this.chatSpamThrottler.isIncrementAndUnderThreshold()
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
@@ -42,7 +42,7 @@ index edc358b08b94a12f2727c805e2254197df0ae25a..36c2b6d15373cf50a91f45df497d82a9
|
|||||||
&& !this.server.getPlayerList().isOp(this.player.nameAndId())
|
&& !this.server.getPlayerList().isOp(this.player.nameAndId())
|
||||||
&& !this.server.isSingleplayerOwner(this.player.nameAndId())) {
|
&& !this.server.isSingleplayerOwner(this.player.nameAndId())) {
|
||||||
this.disconnectAsync(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM); // Paper - kick event cause & add proper async disconnect
|
this.disconnectAsync(Component.translatable("disconnect.spam"), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM); // Paper - kick event cause & add proper async disconnect
|
||||||
@@ -3348,7 +3350,7 @@ public class ServerGamePacketListenerImpl
|
@@ -3349,7 +3351,7 @@ public class ServerGamePacketListenerImpl
|
||||||
public void handlePlaceRecipe(ServerboundPlaceRecipePacket packet) {
|
public void handlePlaceRecipe(ServerboundPlaceRecipePacket packet) {
|
||||||
// Paper start - auto recipe limit
|
// Paper start - auto recipe limit
|
||||||
if (!org.bukkit.Bukkit.isPrimaryThread()) {
|
if (!org.bukkit.Bukkit.isPrimaryThread()) {
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Option to disable saving of snowball and firework
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
diff --git a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
||||||
index af9cf917f20a34479e01b63e686c65b2c783cea1..b344e6d0217500846852fa753075f1d58d3d50d8 100644
|
index 145ed3c5f5823c7505767b6d7f4f4d16cc863948..d0624f0ecc2305b9c04bc299f8b575fd039876fa 100644
|
||||||
--- a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
--- a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
||||||
+++ b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
+++ b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
|
||||||
@@ -350,4 +350,14 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier {
|
@@ -351,4 +351,14 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier {
|
||||||
double d1 = entity.position().z - this.position().z;
|
double d1 = entity.position().z - this.position().z;
|
||||||
return DoubleDoubleImmutablePair.of(d, d1);
|
return DoubleDoubleImmutablePair.of(d, d1);
|
||||||
}
|
}
|
||||||
@@ -24,10 +24,10 @@ index af9cf917f20a34479e01b63e686c65b2c783cea1..b344e6d0217500846852fa753075f1d5
|
|||||||
+ // DivineMC end - Option to disable saving firework
|
+ // DivineMC end - Option to disable saving firework
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/entity/projectile/Snowball.java b/net/minecraft/world/entity/projectile/Snowball.java
|
diff --git a/net/minecraft/world/entity/projectile/Snowball.java b/net/minecraft/world/entity/projectile/Snowball.java
|
||||||
index c0b423967d6361a5d8ef11a5855c025e31948fe5..1dd963aae166e059107aac1d585ccc3199afb66d 100644
|
index 6e6e10140381b63f9833e704f5d35d7e74ac7e66..97e6628e0717b3d11b91b5eead7b3b4373966e05 100644
|
||||||
--- a/net/minecraft/world/entity/projectile/Snowball.java
|
--- a/net/minecraft/world/entity/projectile/Snowball.java
|
||||||
+++ b/net/minecraft/world/entity/projectile/Snowball.java
|
+++ b/net/minecraft/world/entity/projectile/Snowball.java
|
||||||
@@ -94,4 +94,14 @@ public class Snowball extends ThrowableItemProjectile {
|
@@ -95,4 +95,14 @@ public class Snowball extends ThrowableItemProjectile {
|
||||||
this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.HIT); // CraftBukkit - add Bukkit remove cause
|
this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.HIT); // CraftBukkit - add Bukkit remove cause
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Snowball and Egg knockback
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/Snowball.java b/net/minecraft/world/entity/projectile/Snowball.java
|
diff --git a/net/minecraft/world/entity/projectile/Snowball.java b/net/minecraft/world/entity/projectile/Snowball.java
|
||||||
index 1dd963aae166e059107aac1d585ccc3199afb66d..0e594fe6cd25ac713ab70db167e276532d9fd993 100644
|
index 97e6628e0717b3d11b91b5eead7b3b4373966e05..7afe2ce589a3c25ddabc707c7580751834c1940a 100644
|
||||||
--- a/net/minecraft/world/entity/projectile/Snowball.java
|
--- a/net/minecraft/world/entity/projectile/Snowball.java
|
||||||
+++ b/net/minecraft/world/entity/projectile/Snowball.java
|
+++ b/net/minecraft/world/entity/projectile/Snowball.java
|
||||||
@@ -54,6 +54,12 @@ public class Snowball extends ThrowableItemProjectile {
|
@@ -55,6 +55,12 @@ public class Snowball extends ThrowableItemProjectile {
|
||||||
Entity entity = result.getEntity();
|
Entity entity = result.getEntity();
|
||||||
int i = entity.level().purpurConfig.snowballDamage >= 0 ? entity.level().purpurConfig.snowballDamage : entity instanceof Blaze ? 3 : 0; // Purpur - Add configurable snowball damage
|
int i = entity.level().purpurConfig.snowballDamage >= 0 ? entity.level().purpurConfig.snowballDamage : entity instanceof Blaze ? 3 : 0; // Purpur - Add configurable snowball damage
|
||||||
entity.hurt(this.damageSources().thrown(this, this.getOwner()), i);
|
entity.hurt(this.damageSources().thrown(this, this.getOwner()), i);
|
||||||
@@ -22,10 +22,10 @@ index 1dd963aae166e059107aac1d585ccc3199afb66d..0e594fe6cd25ac713ab70db167e27653
|
|||||||
|
|
||||||
// Purpur start - options to extinguish fire blocks with snowballs - borrowed and modified code from ThrownPotion#onHitBlock and ThrownPotion#dowseFire
|
// Purpur start - options to extinguish fire blocks with snowballs - borrowed and modified code from ThrownPotion#onHitBlock and ThrownPotion#dowseFire
|
||||||
diff --git a/net/minecraft/world/entity/projectile/ThrownEgg.java b/net/minecraft/world/entity/projectile/ThrownEgg.java
|
diff --git a/net/minecraft/world/entity/projectile/ThrownEgg.java b/net/minecraft/world/entity/projectile/ThrownEgg.java
|
||||||
index baa6f5ef67aeaa18c45e9de6e747aea9066e42b7..d27d7c14facb58807f5c1e36b0d9b690c2b6631e 100644
|
index bbb364be2af16a3c200d2197166bb3ad28e5e35d..ff0453123efb7a751d576e5bd2864fa495f8ef3d 100644
|
||||||
--- a/net/minecraft/world/entity/projectile/ThrownEgg.java
|
--- a/net/minecraft/world/entity/projectile/ThrownEgg.java
|
||||||
+++ b/net/minecraft/world/entity/projectile/ThrownEgg.java
|
+++ b/net/minecraft/world/entity/projectile/ThrownEgg.java
|
||||||
@@ -54,7 +54,14 @@ public class ThrownEgg extends ThrowableItemProjectile {
|
@@ -55,7 +55,14 @@ public class ThrownEgg extends ThrowableItemProjectile {
|
||||||
@Override
|
@Override
|
||||||
protected void onHitEntity(EntityHitResult result) {
|
protected void onHitEntity(EntityHitResult result) {
|
||||||
super.onHitEntity(result);
|
super.onHitEntity(result);
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ Original license: GPL v3
|
|||||||
Original project: https://github.com/pufferfish-gg/Pufferfish
|
Original project: https://github.com/pufferfish-gg/Pufferfish
|
||||||
|
|
||||||
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 bdd59ab98de1c1392cc8d73a3eedf28ffa64911a..509689bfffbe7b376ce3c4f9851342242ae3bab2 100644
|
index 09987dac80cd031f7af0b63db50f5e719e05665a..288d23e443f495d7fbfd0bbbe1bca7a2ff9da64a 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
|
||||||
@@ -426,6 +426,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -427,6 +427,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
return this.getDeltaMovement().y() < 1.0E-5F && this.isInLiquid();
|
return this.getDeltaMovement().y() < 1.0E-5F && this.isInLiquid();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ index bdd59ab98de1c1392cc8d73a3eedf28ffa64911a..509689bfffbe7b376ce3c4f985134224
|
|||||||
@Override
|
@Override
|
||||||
public void baseTick() {
|
public void baseTick() {
|
||||||
this.oAttackAnim = this.attackAnim;
|
this.oAttackAnim = this.attackAnim;
|
||||||
@@ -440,7 +446,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -441,7 +447,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
super.baseTick();
|
super.baseTick();
|
||||||
if (this.isAlive() && this.level() instanceof ServerLevel serverLevel1) {
|
if (this.isAlive() && this.level() instanceof ServerLevel serverLevel1) {
|
||||||
boolean flag = this instanceof Player;
|
boolean flag = this instanceof Player;
|
||||||
|
|||||||
@@ -17,10 +17,10 @@ index 5a947d7fbf1a08011d87f71b96a8f221130fb583..28fb51950c38ffbc88c3e01c113310fd
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
diff --git a/net/minecraft/world/entity/monster/Husk.java b/net/minecraft/world/entity/monster/Husk.java
|
diff --git a/net/minecraft/world/entity/monster/Husk.java b/net/minecraft/world/entity/monster/Husk.java
|
||||||
index 0bc9c1b235cd5ac771c7b0f200abe4fde38b7858..6948b139a041991743f30186902275b4e752491b 100644
|
index ef261e61358bf466bdfdd6cfe982c5afe53d7c4d..354f6b4c26194fe836ed89bff65aba31b464779f 100644
|
||||||
--- a/net/minecraft/world/entity/monster/Husk.java
|
--- a/net/minecraft/world/entity/monster/Husk.java
|
||||||
+++ b/net/minecraft/world/entity/monster/Husk.java
|
+++ b/net/minecraft/world/entity/monster/Husk.java
|
||||||
@@ -42,6 +42,7 @@ public class Husk extends Zombie {
|
@@ -43,6 +43,7 @@ public class Husk extends Zombie {
|
||||||
@Override
|
@Override
|
||||||
public void initAttributes() {
|
public void initAttributes() {
|
||||||
this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.huskMaxHealth);
|
this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.huskMaxHealth);
|
||||||
@@ -29,10 +29,10 @@ index 0bc9c1b235cd5ac771c7b0f200abe4fde38b7858..6948b139a041991743f30186902275b4
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java
|
diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java
|
||||||
index 7e13f2958f3935077fe25570567d2576f435028c..68fadb2927a8a516926e201b3d640c8e133103ac 100644
|
index 2dd08e5ef413c37a682046071b83f595c8499cf2..042fd91c2534fc07c3a34892a2e83940de245704 100644
|
||||||
--- a/net/minecraft/world/entity/monster/Zombie.java
|
--- a/net/minecraft/world/entity/monster/Zombie.java
|
||||||
+++ b/net/minecraft/world/entity/monster/Zombie.java
|
+++ b/net/minecraft/world/entity/monster/Zombie.java
|
||||||
@@ -125,6 +125,7 @@ public class Zombie extends Monster {
|
@@ -126,6 +126,7 @@ public class Zombie extends Monster {
|
||||||
public void initAttributes() {
|
public void initAttributes() {
|
||||||
this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombieMaxHealth);
|
this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombieMaxHealth);
|
||||||
this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.zombieScale);
|
this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.zombieScale);
|
||||||
@@ -40,7 +40,7 @@ index 7e13f2958f3935077fe25570567d2576f435028c..68fadb2927a8a516926e201b3d640c8e
|
|||||||
}
|
}
|
||||||
// Purpur end - Configurable entity base attributes
|
// Purpur end - Configurable entity base attributes
|
||||||
|
|
||||||
@@ -192,7 +193,6 @@ public class Zombie extends Monster {
|
@@ -193,7 +194,6 @@ public class Zombie extends Monster {
|
||||||
public static AttributeSupplier.Builder createAttributes() {
|
public static AttributeSupplier.Builder createAttributes() {
|
||||||
return Monster.createMonsterAttributes()
|
return Monster.createMonsterAttributes()
|
||||||
.add(Attributes.FOLLOW_RANGE, 35.0)
|
.add(Attributes.FOLLOW_RANGE, 35.0)
|
||||||
@@ -49,10 +49,10 @@ index 7e13f2958f3935077fe25570567d2576f435028c..68fadb2927a8a516926e201b3d640c8e
|
|||||||
.add(Attributes.ARMOR, 2.0)
|
.add(Attributes.ARMOR, 2.0)
|
||||||
.add(Attributes.SPAWN_REINFORCEMENTS_CHANCE);
|
.add(Attributes.SPAWN_REINFORCEMENTS_CHANCE);
|
||||||
diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java
|
diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java
|
||||||
index c2e6ce3a7d17fa5ecd1f0dc42f7769a500e0052d..6253347617c321ef107fe575c3b99e1ffe1a7eb7 100644
|
index 671afcaa17bac0235e362797320118864fec7e66..49a211381c60c2739b03127f8f98c7d8fbfcc9f1 100644
|
||||||
--- a/net/minecraft/world/entity/monster/ZombieVillager.java
|
--- a/net/minecraft/world/entity/monster/ZombieVillager.java
|
||||||
+++ b/net/minecraft/world/entity/monster/ZombieVillager.java
|
+++ b/net/minecraft/world/entity/monster/ZombieVillager.java
|
||||||
@@ -94,6 +94,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder {
|
@@ -96,6 +96,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder {
|
||||||
@Override
|
@Override
|
||||||
public void initAttributes() {
|
public void initAttributes() {
|
||||||
this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombieVillagerMaxHealth);
|
this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombieVillagerMaxHealth);
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ Subject: [PATCH] Option to allow weird movement and disable teleporting
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
index 36c2b6d15373cf50a91f45df497d82a963696386..a306147f4b8213363f96745f4cd33a5a3b01777b 100644
|
index 151e7113ed1a4906b97cea7d34aa522900c4ee3f..93885af89a402bdadaccd598c7c2939c96fdf6e4 100644
|
||||||
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
@@ -617,7 +617,7 @@ public class ServerGamePacketListenerImpl
|
@@ -618,7 +618,7 @@ public class ServerGamePacketListenerImpl
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Paper end - Prevent moving into unloaded chunks
|
// Paper end - Prevent moving into unloaded chunks
|
||||||
@@ -18,7 +18,7 @@ index 36c2b6d15373cf50a91f45df497d82a963696386..a306147f4b8213363f96745f4cd33a5a
|
|||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
LOGGER.warn("{} (vehicle of {}) moved too quickly! {},{},{}", rootVehicle.getPlainTextName(), this.player.getPlainTextName(), d3, d4, d5);
|
LOGGER.warn("{} (vehicle of {}) moved too quickly! {},{},{}", rootVehicle.getPlainTextName(), this.player.getPlainTextName(), d3, d4, d5);
|
||||||
this.send(ClientboundMoveVehiclePacket.fromEntity(rootVehicle));
|
this.send(ClientboundMoveVehiclePacket.fromEntity(rootVehicle));
|
||||||
@@ -645,7 +645,7 @@ public class ServerGamePacketListenerImpl
|
@@ -646,7 +646,7 @@ public class ServerGamePacketListenerImpl
|
||||||
d5 = d2 - rootVehicle.getZ();
|
d5 = d2 - rootVehicle.getZ();
|
||||||
d7 = d3 * d3 + d4 * d4 + d5 * d5;
|
d7 = d3 * d3 + d4 * d4 + d5 * d5;
|
||||||
boolean flag1 = false;
|
boolean flag1 = false;
|
||||||
@@ -27,7 +27,7 @@ index 36c2b6d15373cf50a91f45df497d82a963696386..a306147f4b8213363f96745f4cd33a5a
|
|||||||
flag1 = true; // Paper - diff on change, this should be moved wrongly
|
flag1 = true; // Paper - diff on change, this should be moved wrongly
|
||||||
LOGGER.warn("{} (vehicle of {}) moved wrongly! {}", rootVehicle.getPlainTextName(), this.player.getPlainTextName(), Math.sqrt(d7));
|
LOGGER.warn("{} (vehicle of {}) moved wrongly! {}", rootVehicle.getPlainTextName(), this.player.getPlainTextName(), Math.sqrt(d7));
|
||||||
}
|
}
|
||||||
@@ -1562,20 +1562,24 @@ public class ServerGamePacketListenerImpl
|
@@ -1563,20 +1563,24 @@ public class ServerGamePacketListenerImpl
|
||||||
if (this.shouldCheckPlayerMovement(isFallFlying)) {
|
if (this.shouldCheckPlayerMovement(isFallFlying)) {
|
||||||
float f2 = isFallFlying ? 300.0F : 100.0F;
|
float f2 = isFallFlying ? 300.0F : 100.0F;
|
||||||
if (d7 - d6 > Math.max(f2, Mth.square(org.spigotmc.SpigotConfig.movedTooQuicklyMultiplier * (float) i * speed))) {
|
if (d7 - d6 > Math.max(f2, Mth.square(org.spigotmc.SpigotConfig.movedTooQuicklyMultiplier * (float) i * speed))) {
|
||||||
@@ -63,7 +63,7 @@ index 36c2b6d15373cf50a91f45df497d82a963696386..a306147f4b8213363f96745f4cd33a5a
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1636,6 +1640,7 @@ public class ServerGamePacketListenerImpl
|
@@ -1637,6 +1641,7 @@ public class ServerGamePacketListenerImpl
|
||||||
d7 = d3 * d3 + d4 * d4 + d5 * d5;
|
d7 = d3 * d3 + d4 * d4 + d5 * d5;
|
||||||
boolean movedWrongly = false; // Paper - Add fail move event; rename
|
boolean movedWrongly = false; // Paper - Add fail move event; rename
|
||||||
if (!this.player.isChangingDimension()
|
if (!this.player.isChangingDimension()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Optimize Fluids
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/block/LiquidBlock.java b/net/minecraft/world/level/block/LiquidBlock.java
|
diff --git a/net/minecraft/world/level/block/LiquidBlock.java b/net/minecraft/world/level/block/LiquidBlock.java
|
||||||
index 283e5fc879fd9869205549d66b3b99662ec56564..8aa9dac64bcfb81fdfebd1327a0f18bbc104b9d8 100644
|
index 8c00026651da489ab954710b59d5a03bf54ffd0d..6b55c4110ebf0c8fa74ede3d33bd4ad121c51908 100644
|
||||||
--- a/net/minecraft/world/level/block/LiquidBlock.java
|
--- a/net/minecraft/world/level/block/LiquidBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/LiquidBlock.java
|
+++ b/net/minecraft/world/level/block/LiquidBlock.java
|
||||||
@@ -199,6 +199,7 @@ public class LiquidBlock extends Block implements BucketPickup {
|
@@ -199,6 +199,7 @@ public class LiquidBlock extends Block implements BucketPickup {
|
||||||
@@ -17,7 +17,7 @@ index 283e5fc879fd9869205549d66b3b99662ec56564..8aa9dac64bcfb81fdfebd1327a0f18bb
|
|||||||
}
|
}
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
diff --git a/net/minecraft/world/level/material/FlowingFluid.java b/net/minecraft/world/level/material/FlowingFluid.java
|
diff --git a/net/minecraft/world/level/material/FlowingFluid.java b/net/minecraft/world/level/material/FlowingFluid.java
|
||||||
index 18f008dceff896a405970afe157321105d55405f..1de0ef32b6519cad10c8ebf0ed328b6773bcb3ff 100644
|
index 9685d02a9837c773094a5da5cff6fa6fcfeed86a..afab54ffe92241f8d549ebe9745a0b47bd3bada0 100644
|
||||||
--- a/net/minecraft/world/level/material/FlowingFluid.java
|
--- a/net/minecraft/world/level/material/FlowingFluid.java
|
||||||
+++ b/net/minecraft/world/level/material/FlowingFluid.java
|
+++ b/net/minecraft/world/level/material/FlowingFluid.java
|
||||||
@@ -200,6 +200,7 @@ public abstract class FlowingFluid extends Fluid {
|
@@ -200,6 +200,7 @@ public abstract class FlowingFluid extends Fluid {
|
||||||
@@ -132,10 +132,10 @@ index 18f008dceff896a405970afe157321105d55405f..1de0ef32b6519cad10c8ebf0ed328b67
|
|||||||
return canPassThroughWall(Direction.DOWN, level, pos, state, belowPos, belowState)
|
return canPassThroughWall(Direction.DOWN, level, pos, state, belowPos, belowState)
|
||||||
&& (belowState.getFluidState().getType().isSame(this) || canHoldFluid(level, belowPos, belowState, this.getFlowing()));
|
&& (belowState.getFluidState().getType().isSame(this) || canHoldFluid(level, belowPos, belowState, this.getFlowing()));
|
||||||
diff --git a/net/minecraft/world/level/material/LavaFluid.java b/net/minecraft/world/level/material/LavaFluid.java
|
diff --git a/net/minecraft/world/level/material/LavaFluid.java b/net/minecraft/world/level/material/LavaFluid.java
|
||||||
index b7da2efaa784ef470029410be3e2359c5bf6dace..2d845b09abe3354f0999b117e78ffd00c41e8924 100644
|
index 4df0dad91a5beeb0443ac1849e7783c470aae3d3..b7c01dadd69ce314ef6066d4c5d7c27080c7af8f 100644
|
||||||
--- a/net/minecraft/world/level/material/LavaFluid.java
|
--- a/net/minecraft/world/level/material/LavaFluid.java
|
||||||
+++ b/net/minecraft/world/level/material/LavaFluid.java
|
+++ b/net/minecraft/world/level/material/LavaFluid.java
|
||||||
@@ -237,6 +237,7 @@ public abstract class LavaFluid extends FlowingFluid {
|
@@ -239,6 +239,7 @@ public abstract class LavaFluid extends FlowingFluid {
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -197,10 +197,10 @@ index 103d604797bed34c2e357d01c2f7324dea3e9026..4aa68163958e89521f542470c473f8d5
|
|||||||
Shapes.joinUnoptimized(
|
Shapes.joinUnoptimized(
|
||||||
mutableObject1.getValue(), Shapes.create(AABB.of(boundingBox3)), BooleanOp.ONLY_FIRST
|
mutableObject1.getValue(), Shapes.create(AABB.of(boundingBox3)), BooleanOp.ONLY_FIRST
|
||||||
diff --git a/net/minecraft/world/level/levelgen/structure/pools/SinglePoolElement.java b/net/minecraft/world/level/levelgen/structure/pools/SinglePoolElement.java
|
diff --git a/net/minecraft/world/level/levelgen/structure/pools/SinglePoolElement.java b/net/minecraft/world/level/levelgen/structure/pools/SinglePoolElement.java
|
||||||
index 5c081a5b3d10f713e4e82fe1a43758f553fe50e0..85e84603a19964f05d9d5e62eb096ca76c36ab00 100644
|
index 0e107da76f267e8987b97c976a17e85cd5b8a341..f76a26a471dfe2f261b15d0ebbe3602cd05aaa4e 100644
|
||||||
--- a/net/minecraft/world/level/levelgen/structure/pools/SinglePoolElement.java
|
--- a/net/minecraft/world/level/levelgen/structure/pools/SinglePoolElement.java
|
||||||
+++ b/net/minecraft/world/level/levelgen/structure/pools/SinglePoolElement.java
|
+++ b/net/minecraft/world/level/levelgen/structure/pools/SinglePoolElement.java
|
||||||
@@ -119,8 +119,16 @@ public class SinglePoolElement extends StructurePoolElement {
|
@@ -120,8 +120,16 @@ public class SinglePoolElement extends StructurePoolElement {
|
||||||
StructureTemplateManager structureTemplateManager, BlockPos pos, Rotation rotation, RandomSource random
|
StructureTemplateManager structureTemplateManager, BlockPos pos, Rotation rotation, RandomSource random
|
||||||
) {
|
) {
|
||||||
List<StructureTemplate.JigsawBlockInfo> jigsaws = this.getTemplate(structureTemplateManager).getJigsaws(pos, rotation);
|
List<StructureTemplate.JigsawBlockInfo> jigsaws = this.getTemplate(structureTemplateManager).getJigsaws(pos, rotation);
|
||||||
@@ -219,7 +219,7 @@ index 5c081a5b3d10f713e4e82fe1a43758f553fe50e0..85e84603a19964f05d9d5e62eb096ca7
|
|||||||
return jigsaws;
|
return jigsaws;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,4 +204,12 @@ public class SinglePoolElement extends StructurePoolElement {
|
@@ -197,4 +205,12 @@ public class SinglePoolElement extends StructurePoolElement {
|
||||||
public ResourceLocation getTemplateLocation() {
|
public ResourceLocation getTemplateLocation() {
|
||||||
return this.template.orThrow();
|
return this.template.orThrow();
|
||||||
}
|
}
|
||||||
@@ -233,7 +233,7 @@ index 5c081a5b3d10f713e4e82fe1a43758f553fe50e0..85e84603a19964f05d9d5e62eb096ca7
|
|||||||
+ // DivineMC end - Optimize Structure Generation
|
+ // DivineMC end - Optimize Structure Generation
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java b/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java
|
diff --git a/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java b/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java
|
||||||
index 85f9b9a7df18a34fa7f8999b887bd444c3d3d067..0d98eee31f053614b9d4fddd811b6d17bd3a7a50 100644
|
index a2405124c0d04827b9a98883e587729646df456f..da67064ed98d343e0b303819a8fdf5c48cc33b43 100644
|
||||||
--- a/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java
|
--- a/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java
|
||||||
+++ b/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java
|
+++ b/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java
|
||||||
@@ -256,6 +256,12 @@ public class StructureTemplate {
|
@@ -256,6 +256,12 @@ public class StructureTemplate {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Implement NoChatReports
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/network/FriendlyByteBuf.java b/net/minecraft/network/FriendlyByteBuf.java
|
diff --git a/net/minecraft/network/FriendlyByteBuf.java b/net/minecraft/network/FriendlyByteBuf.java
|
||||||
index be5ac057737fd67fbf2f80f879f8e2816750f041..85faebf1d75bc6d4e6b01d0dad1920069f6fd98d 100644
|
index 9c57702310f710a83971faaf9f658610e47334df..ddf3e514310f7c8990acb7d9d733e5cc07f33eea 100644
|
||||||
--- a/net/minecraft/network/FriendlyByteBuf.java
|
--- a/net/minecraft/network/FriendlyByteBuf.java
|
||||||
+++ b/net/minecraft/network/FriendlyByteBuf.java
|
+++ b/net/minecraft/network/FriendlyByteBuf.java
|
||||||
@@ -105,7 +105,28 @@ public class FriendlyByteBuf extends ByteBuf {
|
@@ -105,7 +105,28 @@ public class FriendlyByteBuf extends ByteBuf {
|
||||||
@@ -287,10 +287,10 @@ index 4a333e87af17bd5b673b57c0fa0d3a239fb8db59..e5569978a23c5bde673146421963a2ff
|
|||||||
if (packet == null || this.processedDisconnect) { // Spigot
|
if (packet == null || this.processedDisconnect) { // Spigot
|
||||||
return;
|
return;
|
||||||
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 adefc10f96c8216a4ba467f1f50672478b27b428..f67e870ece3bbd6b7e8e194d3b2da989229110e7 100644
|
index 457dfcb459f2618e6975ab3e4ff37d5988dd50c2..42af746efa840152dfb0a8d73d9d227115254acc 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
|
||||||
@@ -181,7 +181,7 @@ public abstract class PlayerList {
|
@@ -182,7 +182,7 @@ public abstract class PlayerList {
|
||||||
!_boolean,
|
!_boolean,
|
||||||
_boolean2,
|
_boolean2,
|
||||||
player.createCommonSpawnInfo(serverLevel),
|
player.createCommonSpawnInfo(serverLevel),
|
||||||
@@ -299,7 +299,7 @@ index adefc10f96c8216a4ba467f1f50672478b27b428..f67e870ece3bbd6b7e8e194d3b2da989
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
player.getBukkitEntity().sendSupportedChannels(); // CraftBukkit
|
player.getBukkitEntity().sendSupportedChannels(); // CraftBukkit
|
||||||
@@ -1196,6 +1196,7 @@ public abstract class PlayerList {
|
@@ -1197,6 +1197,7 @@ public abstract class PlayerList {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean verifyChatTrusted(PlayerChatMessage message) {
|
public boolean verifyChatTrusted(PlayerChatMessage message) {
|
||||||
|
|||||||
@@ -66,10 +66,10 @@ index 3275a8a3a57a6d836170efbf12bc1257282703c8..f038c8fe7fa84457dcee2276bbbdb7ec
|
|||||||
this.serverLevelData.setDayTime(time);
|
this.serverLevelData.setDayTime(time);
|
||||||
// Purpur start - Configurable daylight cycle
|
// Purpur start - Configurable daylight cycle
|
||||||
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 509689bfffbe7b376ce3c4f9851342242ae3bab2..f15497ef868574ee2fe11611bfc31d9b102f80d0 100644
|
index 288d23e443f495d7fbfd0bbbe1bca7a2ff9da64a..2dc2dd9dbbe63316827b620b991ad929ad7bb77e 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
|
||||||
@@ -525,6 +525,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -526,6 +526,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@ index 509689bfffbe7b376ce3c4f9851342242ae3bab2..f15497ef868574ee2fe11611bfc31d9b
|
|||||||
this.tickEffects();
|
this.tickEffects();
|
||||||
this.yHeadRotO = this.yHeadRot;
|
this.yHeadRotO = this.yHeadRot;
|
||||||
this.yBodyRotO = this.yBodyRot;
|
this.yBodyRotO = this.yBodyRot;
|
||||||
@@ -532,6 +533,17 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -533,6 +534,17 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
this.xRotO = this.getXRot();
|
this.xRotO = this.getXRot();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,10 +183,10 @@ index 5305b72c37ba0fcde811d46e781fb4c74817da52..fbae6ab5d5a999039ae8d67cd3df193e
|
|||||||
BlocksAttacks blocksAttacks = stack.get(DataComponents.BLOCKS_ATTACKS);
|
BlocksAttacks blocksAttacks = stack.get(DataComponents.BLOCKS_ATTACKS);
|
||||||
return blocksAttacks != null ? 72000 : 0;
|
return blocksAttacks != null ? 72000 : 0;
|
||||||
diff --git a/net/minecraft/world/level/GameRules.java b/net/minecraft/world/level/GameRules.java
|
diff --git a/net/minecraft/world/level/GameRules.java b/net/minecraft/world/level/GameRules.java
|
||||||
index dbd3813cb0328b7b73c9b634b1b19be7ee3246f6..9b72f3266e3a7cf6bd934d2497f0c5332c09ae59 100644
|
index 7141d2c69e27e9b14e99360686d9bff1d84c24e6..5eeaa5bca2c9482420990822781625a2c1a6e94e 100644
|
||||||
--- a/net/minecraft/world/level/GameRules.java
|
--- a/net/minecraft/world/level/GameRules.java
|
||||||
+++ b/net/minecraft/world/level/GameRules.java
|
+++ b/net/minecraft/world/level/GameRules.java
|
||||||
@@ -377,8 +377,31 @@ public class GameRules {
|
@@ -378,8 +378,31 @@ public class GameRules {
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getInt(GameRules.Key<GameRules.IntegerValue> key) {
|
public int getInt(GameRules.Key<GameRules.IntegerValue> key) {
|
||||||
@@ -220,7 +220,7 @@ index dbd3813cb0328b7b73c9b634b1b19be7ee3246f6..9b72f3266e3a7cf6bd934d2497f0c533
|
|||||||
public static class BooleanValue extends GameRules.Value<GameRules.BooleanValue> {
|
public static class BooleanValue extends GameRules.Value<GameRules.BooleanValue> {
|
||||||
private boolean value;
|
private boolean value;
|
||||||
diff --git a/net/minecraft/world/level/block/state/BlockBehaviour.java b/net/minecraft/world/level/block/state/BlockBehaviour.java
|
diff --git a/net/minecraft/world/level/block/state/BlockBehaviour.java b/net/minecraft/world/level/block/state/BlockBehaviour.java
|
||||||
index 00ca563d6bfbe6182dc246d5f6ffca7fc9a5ba85..611b29ccba29558d8cf54eccb2136a305bf989db 100644
|
index f9794da266b5f08f01f88184d3bcca9d8371e44f..a6c99a119a923dd890169888ff4e9852f6e27855 100644
|
||||||
--- a/net/minecraft/world/level/block/state/BlockBehaviour.java
|
--- a/net/minecraft/world/level/block/state/BlockBehaviour.java
|
||||||
+++ b/net/minecraft/world/level/block/state/BlockBehaviour.java
|
+++ b/net/minecraft/world/level/block/state/BlockBehaviour.java
|
||||||
@@ -350,13 +350,21 @@ public abstract class BlockBehaviour implements FeatureElement {
|
@@ -350,13 +350,21 @@ public abstract class BlockBehaviour implements FeatureElement {
|
||||||
@@ -248,10 +248,10 @@ index 00ca563d6bfbe6182dc246d5f6ffca7fc9a5ba85..611b29ccba29558d8cf54eccb2136a30
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
|
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
index 84bc3ed25a30ede18f66859129dacd73d6837d1f..524f987ba5cbf3d9fa502b51419cb163e099597c 100644
|
index a403b61e0300ecfff55f10009ecd3ad57f543808..529f8a3a4db2effaa91d5b95244717dc44d4c6f4 100644
|
||||||
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
@@ -957,6 +957,19 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
@@ -959,6 +959,19 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
||||||
this.ticker = ticker;
|
this.ticker = ticker;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,7 +271,7 @@ index 84bc3ed25a30ede18f66859129dacd73d6837d1f..524f987ba5cbf3d9fa502b51419cb163
|
|||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void tick() {
|
||||||
if (!this.blockEntity.isRemoved() && this.blockEntity.hasLevel()) {
|
if (!this.blockEntity.isRemoved() && this.blockEntity.hasLevel()) {
|
||||||
@@ -967,7 +980,11 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
@@ -969,7 +982,11 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
||||||
profilerFiller.push(this::getType);
|
profilerFiller.push(this::getType);
|
||||||
BlockState blockState = LevelChunk.this.getBlockState(blockPos);
|
BlockState blockState = LevelChunk.this.getBlockState(blockPos);
|
||||||
if (this.blockEntity.getType().isValid(blockState)) {
|
if (this.blockEntity.getType().isValid(blockState)) {
|
||||||
@@ -285,10 +285,10 @@ index 84bc3ed25a30ede18f66859129dacd73d6837d1f..524f987ba5cbf3d9fa502b51419cb163
|
|||||||
// Paper start - Remove the Block Entity if it's invalid
|
// Paper start - Remove the Block Entity if it's invalid
|
||||||
} else {
|
} else {
|
||||||
diff --git a/net/minecraft/world/level/material/LavaFluid.java b/net/minecraft/world/level/material/LavaFluid.java
|
diff --git a/net/minecraft/world/level/material/LavaFluid.java b/net/minecraft/world/level/material/LavaFluid.java
|
||||||
index 2d845b09abe3354f0999b117e78ffd00c41e8924..9630a1fd95853671812c3249f32a8a1e3a05f7ab 100644
|
index b7c01dadd69ce314ef6066d4c5d7c27080c7af8f..f838577f0290a1d9bffb860cbeb2daaa6b19957d 100644
|
||||||
--- a/net/minecraft/world/level/material/LavaFluid.java
|
--- a/net/minecraft/world/level/material/LavaFluid.java
|
||||||
+++ b/net/minecraft/world/level/material/LavaFluid.java
|
+++ b/net/minecraft/world/level/material/LavaFluid.java
|
||||||
@@ -188,9 +188,22 @@ public abstract class LavaFluid extends FlowingFluid {
|
@@ -190,9 +190,22 @@ public abstract class LavaFluid extends FlowingFluid {
|
||||||
return fluidState.getHeight(level, pos) >= 0.44444445F && fluid.is(FluidTags.WATER);
|
return fluidState.getHeight(level, pos) >= 0.44444445F && fluid.is(FluidTags.WATER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,10 +36,10 @@ index 3de2d76bf118750932a56d02233e4e6aff0b2728..690c67f2051996d0888a946b8c089d39
|
|||||||
|
|
||||||
public ChatDecorator getChatDecorator() {
|
public ChatDecorator getChatDecorator() {
|
||||||
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
index a306147f4b8213363f96745f4cd33a5a3b01777b..53f3193cbd6ddb53dde771a28f15aec5aee49d66 100644
|
index 93885af89a402bdadaccd598c7c2939c96fdf6e4..3bd279d72d06f30c9b20146ba932a8f4832dee50 100644
|
||||||
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
@@ -844,8 +844,11 @@ public class ServerGamePacketListenerImpl
|
@@ -845,8 +845,11 @@ public class ServerGamePacketListenerImpl
|
||||||
}
|
}
|
||||||
|
|
||||||
// Paper start - AsyncTabCompleteEvent
|
// Paper start - AsyncTabCompleteEvent
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ index 646ca37bba6da8ab0babbf4a1e6ba88e75658e72..1d9b32476c1b89984f1afa8e906ca094
|
|||||||
if (!tickRateManager.isEntityFrozen(entity)) {
|
if (!tickRateManager.isEntityFrozen(entity)) {
|
||||||
entity.checkDespawn();
|
entity.checkDespawn();
|
||||||
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 6b5b01b9525f51fe02f03f7249517599d1ba1945..3dc742ca965a06629686c846c4018672576a9db1 100644
|
index 80b771f69549cf460b3d1fca2de8f27152e98f42..5d5e125e55daf55764846c0d7ce2c3150847aeb8 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
|
||||||
@@ -366,6 +366,8 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
@@ -366,6 +366,8 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
||||||
@@ -68,7 +68,7 @@ index 881575864f864305973033ac6e664fc47e49ca16..7d5940327c5e7a945165228d502f678a
|
|||||||
@Nullable
|
@Nullable
|
||||||
private Component description;
|
private Component description;
|
||||||
diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java
|
diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java
|
||||||
index c551b8c8c9b9d070afdbcf5cfcdb35e99830fd91..b61b9c512f23d5ae0465fe7196fbb222918b0988 100644
|
index b2853b6a3bca0ea04c50fedf5e2f5ff633ac2a21..f7cdbc7ca10d4320da5deabe9e01ca774890d796 100644
|
||||||
--- a/net/minecraft/world/entity/Mob.java
|
--- a/net/minecraft/world/entity/Mob.java
|
||||||
+++ b/net/minecraft/world/entity/Mob.java
|
+++ b/net/minecraft/world/entity/Mob.java
|
||||||
@@ -220,10 +220,10 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
|
@@ -220,10 +220,10 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
|
||||||
@@ -147,10 +147,10 @@ index 653c58c7637c46c8b46a5082f671324a2221d431..a4328a427636aa845d6627ecb75a9efe
|
|||||||
public boolean hasTasks() {
|
public boolean hasTasks() {
|
||||||
for (WrappedGoal task : this.availableGoals) {
|
for (WrappedGoal task : this.availableGoals) {
|
||||||
diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java
|
diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java
|
||||||
index ae68a19a0b13bc626efec6a028f3abba4a436f3b..c5526952961c3c2705f946021ff3a8306ad2bde1 100644
|
index c8487029d5707d75b83aebc6fab7c65391f102f9..af6670cff00a3c2de21b91d7c9353f2e4171df9c 100644
|
||||||
--- a/net/minecraft/world/entity/animal/allay/Allay.java
|
--- a/net/minecraft/world/entity/animal/allay/Allay.java
|
||||||
+++ b/net/minecraft/world/entity/animal/allay/Allay.java
|
+++ b/net/minecraft/world/entity/animal/allay/Allay.java
|
||||||
@@ -112,6 +112,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
|
@@ -113,6 +113,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
|
||||||
private float spinningAnimationTicks0;
|
private float spinningAnimationTicks0;
|
||||||
public boolean forceDancing = false; // CraftBukkit
|
public boolean forceDancing = false; // CraftBukkit
|
||||||
private org.purpurmc.purpur.controller.FlyingMoveControllerWASD purpurController; // Purpur - Ridables
|
private org.purpurmc.purpur.controller.FlyingMoveControllerWASD purpurController; // Purpur - Ridables
|
||||||
@@ -158,7 +158,7 @@ index ae68a19a0b13bc626efec6a028f3abba4a436f3b..c5526952961c3c2705f946021ff3a830
|
|||||||
|
|
||||||
public Allay(EntityType<? extends Allay> type, Level level) {
|
public Allay(EntityType<? extends Allay> type, Level level) {
|
||||||
super(type, level);
|
super(type, level);
|
||||||
@@ -266,10 +267,13 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
|
@@ -267,10 +268,13 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void customServerAiStep(ServerLevel level) {
|
protected void customServerAiStep(ServerLevel level) {
|
||||||
@@ -272,10 +272,10 @@ index 37b1674c3f89d7ddba054b066df957f3337f4a89..e437dad4f65a77b1ecbefe324355e33e
|
|||||||
|
|
||||||
public static AttributeSupplier.Builder createAttributes() {
|
public static AttributeSupplier.Builder createAttributes() {
|
||||||
diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java
|
diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java
|
||||||
index 58ee22461c0330e2fbbbf283c154b8141e2d1953..1ef0fa87f55a4fe6309ed456b0458287925f9835 100644
|
index 04a4cc148579904222b3c99a1ad4c64e5783afa2..b2c932706b8d910c6e10cfa0ca44bf77c4521835 100644
|
||||||
--- a/net/minecraft/world/entity/animal/goat/Goat.java
|
--- a/net/minecraft/world/entity/animal/goat/Goat.java
|
||||||
+++ b/net/minecraft/world/entity/animal/goat/Goat.java
|
+++ b/net/minecraft/world/entity/animal/goat/Goat.java
|
||||||
@@ -93,6 +93,7 @@ public class Goat extends Animal {
|
@@ -94,6 +94,7 @@ public class Goat extends Animal {
|
||||||
private static final boolean DEFAULT_HAS_RIGHT_HORN = true;
|
private static final boolean DEFAULT_HAS_RIGHT_HORN = true;
|
||||||
private boolean isLoweringHead;
|
private boolean isLoweringHead;
|
||||||
private int lowerHeadTick;
|
private int lowerHeadTick;
|
||||||
@@ -283,7 +283,7 @@ index 58ee22461c0330e2fbbbf283c154b8141e2d1953..1ef0fa87f55a4fe6309ed456b0458287
|
|||||||
|
|
||||||
public Goat(EntityType<? extends Goat> type, Level level) {
|
public Goat(EntityType<? extends Goat> type, Level level) {
|
||||||
super(type, level);
|
super(type, level);
|
||||||
@@ -232,10 +233,13 @@ public class Goat extends Animal {
|
@@ -233,10 +234,13 @@ public class Goat extends Animal {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void customServerAiStep(ServerLevel level) {
|
protected void customServerAiStep(ServerLevel level) {
|
||||||
@@ -302,10 +302,10 @@ index 58ee22461c0330e2fbbbf283c154b8141e2d1953..1ef0fa87f55a4fe6309ed456b0458287
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java
|
diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java
|
||||||
index c309b01a461ddb47d20a6c96bd693e4850bd731b..5ccf6e916c5c5ebe034a55b71725f740a21f4f83 100644
|
index 1abc4d0de2ff983fc0c30bbc8a356d78f1c23897..f23c3918adf0a654be4365370e132067e8574c5c 100644
|
||||||
--- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java
|
--- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java
|
||||||
+++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java
|
+++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java
|
||||||
@@ -87,6 +87,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
|
@@ -88,6 +88,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
|
||||||
MemoryModuleType.PACIFIED,
|
MemoryModuleType.PACIFIED,
|
||||||
MemoryModuleType.IS_PANICKING
|
MemoryModuleType.IS_PANICKING
|
||||||
);
|
);
|
||||||
@@ -313,7 +313,7 @@ index c309b01a461ddb47d20a6c96bd693e4850bd731b..5ccf6e916c5c5ebe034a55b71725f740
|
|||||||
|
|
||||||
public Hoglin(EntityType<? extends Hoglin> type, Level level) {
|
public Hoglin(EntityType<? extends Hoglin> type, Level level) {
|
||||||
super(type, level);
|
super(type, level);
|
||||||
@@ -205,18 +206,21 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
|
@@ -206,18 +207,21 @@ public class Hoglin extends Animal implements Enemy, HoglinBase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void customServerAiStep(ServerLevel level) {
|
protected void customServerAiStep(ServerLevel level) {
|
||||||
@@ -376,10 +376,10 @@ index b21ca373220f80c81cadab1eda482057d6366caf..8d0b364149c3772b95e97136f77749f7
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
diff --git a/net/minecraft/world/entity/monster/warden/Warden.java b/net/minecraft/world/entity/monster/warden/Warden.java
|
diff --git a/net/minecraft/world/entity/monster/warden/Warden.java b/net/minecraft/world/entity/monster/warden/Warden.java
|
||||||
index e9881eac70feebeb08f464efd4fa953cec9f62bf..6edd808e8d0c940dfa6dea463d549d6e80a5d465 100644
|
index 87976d8981f72732899c57a96971e851b86d5123..5bc5b7e89c87eef6031729f2f7185263da014540 100644
|
||||||
--- a/net/minecraft/world/entity/monster/warden/Warden.java
|
--- a/net/minecraft/world/entity/monster/warden/Warden.java
|
||||||
+++ b/net/minecraft/world/entity/monster/warden/Warden.java
|
+++ b/net/minecraft/world/entity/monster/warden/Warden.java
|
||||||
@@ -107,6 +107,7 @@ public class Warden extends Monster implements VibrationSystem {
|
@@ -108,6 +108,7 @@ public class Warden extends Monster implements VibrationSystem {
|
||||||
private final VibrationSystem.User vibrationUser;
|
private final VibrationSystem.User vibrationUser;
|
||||||
private VibrationSystem.Data vibrationData;
|
private VibrationSystem.Data vibrationData;
|
||||||
AngerManagement angerManagement = new AngerManagement(this::canTargetEntity, Collections.emptyList());
|
AngerManagement angerManagement = new AngerManagement(this::canTargetEntity, Collections.emptyList());
|
||||||
@@ -387,7 +387,7 @@ index e9881eac70feebeb08f464efd4fa953cec9f62bf..6edd808e8d0c940dfa6dea463d549d6e
|
|||||||
|
|
||||||
public Warden(EntityType<? extends Monster> type, Level level) {
|
public Warden(EntityType<? extends Monster> type, Level level) {
|
||||||
super(type, level);
|
super(type, level);
|
||||||
@@ -300,19 +301,22 @@ public class Warden extends Monster implements VibrationSystem {
|
@@ -301,19 +302,22 @@ public class Warden extends Monster implements VibrationSystem {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void customServerAiStep(ServerLevel level) {
|
protected void customServerAiStep(ServerLevel level) {
|
||||||
@@ -422,10 +422,10 @@ index e9881eac70feebeb08f464efd4fa953cec9f62bf..6edd808e8d0c940dfa6dea463d549d6e
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java
|
diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java
|
||||||
index e89ff53c568013a5f53afcf5759314221d37adf4..5443677ed4ecaaf3b647e3f72802e80d7d22fad9 100644
|
index d99a6ade82bbd01e25137fecfbec5dcef6765e79..a356da48b20ab38648d75f9066b2ed4a013c13c2 100644
|
||||||
--- a/net/minecraft/world/entity/npc/Villager.java
|
--- a/net/minecraft/world/entity/npc/Villager.java
|
||||||
+++ b/net/minecraft/world/entity/npc/Villager.java
|
+++ b/net/minecraft/world/entity/npc/Villager.java
|
||||||
@@ -178,6 +178,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
@@ -179,6 +179,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||||
);
|
);
|
||||||
private boolean isLobotomized = false; public boolean isLobotomized() { return this.isLobotomized; } // Purpur - Lobotomize stuck villagers
|
private boolean isLobotomized = false; public boolean isLobotomized() { return this.isLobotomized; } // Purpur - Lobotomize stuck villagers
|
||||||
private int notLobotomizedCount = 0; // Purpur - Lobotomize stuck villagers
|
private int notLobotomizedCount = 0; // Purpur - Lobotomize stuck villagers
|
||||||
@@ -434,7 +434,7 @@ index e89ff53c568013a5f53afcf5759314221d37adf4..5443677ed4ecaaf3b647e3f72802e80d
|
|||||||
|
|
||||||
public Villager(EntityType<? extends Villager> type, Level level) {
|
public Villager(EntityType<? extends Villager> type, Level level) {
|
||||||
this(type, level, VillagerType.PLAINS);
|
this(type, level, VillagerType.PLAINS);
|
||||||
@@ -398,7 +400,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
@@ -399,7 +401,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||||
} else {
|
} else {
|
||||||
this.isLobotomized = false;
|
this.isLobotomized = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -557,10 +557,10 @@ index 1f96fd5085bacb4c584576c7cb9f51e7898e9b03..d975b89c7bb57562852596751a4ff881
|
|||||||
+ // DivineMC end - async pathfinding
|
+ // DivineMC end - async pathfinding
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java
|
diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java
|
||||||
index 968ec5a7188cc4e4a60956e12e44c4b746cf78d1..df32142019bc81896e3e84d3f69e23f5ae8cbd83 100644
|
index 5e054044444b464243c11574bbac9a0eabcc4073..c52ed3f4744638922b585693e86fc71c356b0f82 100644
|
||||||
--- a/net/minecraft/world/entity/animal/Bee.java
|
--- a/net/minecraft/world/entity/animal/Bee.java
|
||||||
+++ b/net/minecraft/world/entity/animal/Bee.java
|
+++ b/net/minecraft/world/entity/animal/Bee.java
|
||||||
@@ -942,7 +942,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
|
@@ -943,7 +943,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
|
||||||
} else {
|
} else {
|
||||||
Bee.this.pathfindRandomlyTowards(Bee.this.hivePos);
|
Bee.this.pathfindRandomlyTowards(Bee.this.hivePos);
|
||||||
}
|
}
|
||||||
@@ -569,7 +569,7 @@ index 968ec5a7188cc4e4a60956e12e44c4b746cf78d1..df32142019bc81896e3e84d3f69e23f5
|
|||||||
boolean flag = this.pathfindDirectlyTowards(Bee.this.hivePos);
|
boolean flag = this.pathfindDirectlyTowards(Bee.this.hivePos);
|
||||||
if (!flag) {
|
if (!flag) {
|
||||||
this.dropAndBlacklistHive();
|
this.dropAndBlacklistHive();
|
||||||
@@ -996,7 +996,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
|
@@ -997,7 +997,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
Path path = Bee.this.navigation.getPath();
|
Path path = Bee.this.navigation.getPath();
|
||||||
@@ -656,10 +656,10 @@ index da7644dd2b9e86ec8947250ff998fb554e881161..c842e500ddc229bc776c29a39c6f8a71
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/warden/Warden.java b/net/minecraft/world/entity/monster/warden/Warden.java
|
diff --git a/net/minecraft/world/entity/monster/warden/Warden.java b/net/minecraft/world/entity/monster/warden/Warden.java
|
||||||
index 6edd808e8d0c940dfa6dea463d549d6e80a5d465..56f0aefd0f5c3087fc8122354fcb1b753aff2a4c 100644
|
index 5bc5b7e89c87eef6031729f2f7185263da014540..f3a8e187740eacd4244da67d21b2ec7de1b2208a 100644
|
||||||
--- a/net/minecraft/world/entity/monster/warden/Warden.java
|
--- a/net/minecraft/world/entity/monster/warden/Warden.java
|
||||||
+++ b/net/minecraft/world/entity/monster/warden/Warden.java
|
+++ b/net/minecraft/world/entity/monster/warden/Warden.java
|
||||||
@@ -572,6 +572,16 @@ public class Warden extends Monster implements VibrationSystem {
|
@@ -573,6 +573,16 @@ public class Warden extends Monster implements VibrationSystem {
|
||||||
@Override
|
@Override
|
||||||
protected PathFinder createPathFinder(int maxVisitedNodes) {
|
protected PathFinder createPathFinder(int maxVisitedNodes) {
|
||||||
this.nodeEvaluator = new WalkNodeEvaluator();
|
this.nodeEvaluator = new WalkNodeEvaluator();
|
||||||
|
|||||||
@@ -412,10 +412,10 @@ index 1d9b32476c1b89984f1afa8e906ca09472b8d6b2..0b1ea5c5248f0b54ba7b01d7bc89e154
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
index 53f3193cbd6ddb53dde771a28f15aec5aee49d66..64e5743aed23b4004de32122b880f99cb70eac8a 100644
|
index 3bd279d72d06f30c9b20146ba932a8f4832dee50..ef578f42cceac5fd75d0d0528e2ec9791beff2d0 100644
|
||||||
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
@@ -1942,7 +1942,6 @@ public class ServerGamePacketListenerImpl
|
@@ -1943,7 +1943,6 @@ public class ServerGamePacketListenerImpl
|
||||||
}
|
}
|
||||||
|
|
||||||
public void internalTeleport(PositionMoveRotation posMoveRotation, Set<Relative> relatives) {
|
public void internalTeleport(PositionMoveRotation posMoveRotation, Set<Relative> relatives) {
|
||||||
@@ -424,10 +424,10 @@ index 53f3193cbd6ddb53dde771a28f15aec5aee49d66..64e5743aed23b4004de32122b880f99c
|
|||||||
if (this.player.isRemoved()) {
|
if (this.player.isRemoved()) {
|
||||||
LOGGER.info("Attempt to teleport removed player {} restricted", player.getScoreboardName());
|
LOGGER.info("Attempt to teleport removed player {} restricted", player.getScoreboardName());
|
||||||
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 f15497ef868574ee2fe11611bfc31d9b102f80d0..ca392664826ca8ced5a1c2c8b2d22eb87c5bd139 100644
|
index 2dc2dd9dbbe63316827b620b991ad929ad7bb77e..7ec1c2f39981b60343f152a5432b3677574ee46c 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
|
||||||
@@ -1360,13 +1360,13 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -1361,13 +1361,13 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refreshDirtyAttributes() {
|
private void refreshDirtyAttributes() {
|
||||||
|
|||||||
@@ -94,10 +94,10 @@ index ff747a1ecdf3c888bca0d69de4f85dcd810b6139..4970243433e7de4ec2e452f25f8737cd
|
|||||||
// The variable 'k' holds the maximum redstone power value of any adjacent blocks.
|
// The variable 'k' holds the maximum redstone power value of any adjacent blocks.
|
||||||
// If 'k' has the highest level of all neighbors, then the power level of this
|
// If 'k' has the highest level of all neighbors, then the power level of this
|
||||||
diff --git a/net/minecraft/core/dispenser/DispenseItemBehavior.java b/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
diff --git a/net/minecraft/core/dispenser/DispenseItemBehavior.java b/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
||||||
index 181fdb493f64442c659165c10e237ebc198fb6e2..43363235f3dc696973eee99548b1ae551cada371 100644
|
index 077ccddb7d358be352b6d497ed8b4e97b7d09262..7197434fdd304d0608b1d0bf2b1d6c6e2eb3d1df 100644
|
||||||
--- a/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
--- a/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
||||||
+++ b/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
+++ b/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
||||||
@@ -410,8 +410,10 @@ public interface DispenseItemBehavior {
|
@@ -412,8 +412,10 @@ public interface DispenseItemBehavior {
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
level.captureTreeGeneration = false;
|
level.captureTreeGeneration = false;
|
||||||
if (!level.capturedBlockStates.isEmpty()) {
|
if (!level.capturedBlockStates.isEmpty()) {
|
||||||
@@ -330,7 +330,7 @@ index c37851095cfe637a2768de0aa179efe66e9a4cde..1afd48654a421f0e0d4d5c2f27bdfe0b
|
|||||||
LOGGER.info("Default game type: {}", properties.gameMode.get());
|
LOGGER.info("Default game type: {}", properties.gameMode.get());
|
||||||
// Paper start - Unix domain socket support
|
// Paper start - Unix domain socket support
|
||||||
diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java
|
diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java
|
||||||
index d8f0bd8173836796ecdd9771b637d24c7a807a79..e23f2004705fc299934a8b30e736ddf0a8eb2147 100644
|
index c5b95557dc148cfc91c031bf0789001868a60cbd..6ea62fbffda38e477ef8e119608fc93793db95c3 100644
|
||||||
--- a/net/minecraft/server/level/ServerChunkCache.java
|
--- a/net/minecraft/server/level/ServerChunkCache.java
|
||||||
+++ b/net/minecraft/server/level/ServerChunkCache.java
|
+++ b/net/minecraft/server/level/ServerChunkCache.java
|
||||||
@@ -176,8 +176,12 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
@@ -176,8 +176,12 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
||||||
@@ -465,10 +465,10 @@ index 0b1ea5c5248f0b54ba7b01d7bc89e1547ad2a89a..27a63526c4fde0a716eb9ac3f8f4d0fd
|
|||||||
// 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 43cb158bee132cce0f3b09e31bc8ac83245ed3ea..7310f152ecdef82a2a211c149e72d29208ae078e 100644
|
index b1667ed08c417daf292e092ca0d2ab9848ac8d61..f7603988f9d818bd66eba8a9d3d3edbef347b6c2 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
|
||||||
@@ -443,6 +443,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
@@ -444,6 +444,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||||
private boolean tpsBar = false; // Purpur - Implement TPSBar
|
private boolean tpsBar = false; // Purpur - Implement TPSBar
|
||||||
private boolean compassBar = false; // Purpur - Add compass command
|
private boolean compassBar = false; // Purpur - Add compass command
|
||||||
private boolean ramBar = false; // Purpur - Implement rambar commands
|
private boolean ramBar = false; // Purpur - Implement rambar commands
|
||||||
@@ -476,7 +476,7 @@ index 43cb158bee132cce0f3b09e31bc8ac83245ed3ea..7310f152ecdef82a2a211c149e72d292
|
|||||||
|
|
||||||
// Paper start - rewrite chunk system
|
// Paper start - rewrite chunk system
|
||||||
private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader;
|
private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader;
|
||||||
@@ -723,6 +724,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
@@ -724,6 +725,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void tick() {
|
||||||
@@ -484,15 +484,15 @@ index 43cb158bee132cce0f3b09e31bc8ac83245ed3ea..7310f152ecdef82a2a211c149e72d292
|
|||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
if (this.joining) {
|
if (this.joining) {
|
||||||
this.joining = false;
|
this.joining = false;
|
||||||
@@ -1557,6 +1559,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
@@ -1558,6 +1560,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||||
teleportTransition.postTeleportTransition().onTransition(this);
|
teleportTransition.postTeleportTransition().onTransition(this);
|
||||||
return this;
|
return this;
|
||||||
} else {
|
} else {
|
||||||
+ if (org.bxteam.divinemc.config.DivineConfig.AsyncCategory.enableParallelWorldTicking) ca.spottedleaf.moonrise.common.util.TickThread.ensureOnlyTickThread("Cannot change dimension of a player off-main, from world " + level().getWorld().getName() + " to world " + level.getWorld().getName()); // DivineMC - Parallel world ticking (additional concurrency issues logs)
|
+ if (org.bxteam.divinemc.config.DivineConfig.AsyncCategory.enableParallelWorldTicking) ca.spottedleaf.moonrise.common.util.TickThread.ensureOnlyTickThread("Cannot change dimension of a player off-main, from world " + level().getWorld().getName() + " to world " + level.getWorld().getName()); // DivineMC - Parallel world ticking (additional concurrency issues logs)
|
||||||
this.isChangingDimension = true;
|
this.isChangingDimension = true;
|
||||||
LevelData levelData = level.getLevelData();
|
LevelData levelData = level.getLevelData();
|
||||||
this.connection.send(new ClientboundRespawnPacket(this.createCommonSpawnInfo(level), (byte)3));
|
this.connection.send(new ClientboundRespawnPacket(this.createCommonSpawnInfo(level), ClientboundRespawnPacket.KEEP_ALL_DATA));
|
||||||
@@ -1873,6 +1876,12 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
@@ -1874,6 +1877,12 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||||
return OptionalInt.empty();
|
return OptionalInt.empty();
|
||||||
} else {
|
} else {
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
@@ -505,7 +505,7 @@ index 43cb158bee132cce0f3b09e31bc8ac83245ed3ea..7310f152ecdef82a2a211c149e72d292
|
|||||||
this.containerMenu = abstractContainerMenu; // Moved up
|
this.containerMenu = abstractContainerMenu; // Moved up
|
||||||
if (!this.isImmobile())
|
if (!this.isImmobile())
|
||||||
this.connection
|
this.connection
|
||||||
@@ -1937,6 +1946,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
@@ -1938,6 +1947,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void closeContainer(org.bukkit.event.inventory.InventoryCloseEvent.Reason reason) {
|
public void closeContainer(org.bukkit.event.inventory.InventoryCloseEvent.Reason reason) {
|
||||||
@@ -518,10 +518,10 @@ index 43cb158bee132cce0f3b09e31bc8ac83245ed3ea..7310f152ecdef82a2a211c149e72d292
|
|||||||
// 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 f67e870ece3bbd6b7e8e194d3b2da989229110e7..249c85f283b4a80493014773c7e8bf06953cbc3a 100644
|
index 42af746efa840152dfb0a8d73d9d227115254acc..9acc247ec540449a0e4cf3a5a0bc67a0e3dfbf15 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
|
||||||
@@ -149,6 +149,7 @@ public abstract class PlayerList {
|
@@ -150,6 +150,7 @@ public abstract class PlayerList {
|
||||||
abstract public void loadAndSaveFiles(); // Paper - fix converting txt to json file; moved from DedicatedPlayerList constructor
|
abstract public void loadAndSaveFiles(); // Paper - fix converting txt to json file; moved from DedicatedPlayerList constructor
|
||||||
|
|
||||||
public void placeNewPlayer(Connection connection, ServerPlayer player, CommonListenerCookie cookie) {
|
public void placeNewPlayer(Connection connection, ServerPlayer player, CommonListenerCookie cookie) {
|
||||||
@@ -529,7 +529,7 @@ index f67e870ece3bbd6b7e8e194d3b2da989229110e7..249c85f283b4a80493014773c7e8bf06
|
|||||||
player.isRealPlayer = true; // Paper
|
player.isRealPlayer = true; // Paper
|
||||||
player.loginTime = System.currentTimeMillis(); // Paper - Replace OfflinePlayer#getLastPlayed
|
player.loginTime = System.currentTimeMillis(); // Paper - Replace OfflinePlayer#getLastPlayed
|
||||||
NameAndId nameAndId = player.nameAndId();
|
NameAndId nameAndId = player.nameAndId();
|
||||||
@@ -596,6 +597,7 @@ public abstract class PlayerList {
|
@@ -597,6 +598,7 @@ public abstract class PlayerList {
|
||||||
|
|
||||||
// Paper start - respawn event
|
// Paper start - respawn event
|
||||||
public ServerPlayer respawn(ServerPlayer player, boolean keepInventory, Entity.RemovalReason reason, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason respawnReason) {
|
public ServerPlayer respawn(ServerPlayer player, boolean keepInventory, Entity.RemovalReason reason, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason respawnReason) {
|
||||||
@@ -537,7 +537,7 @@ index f67e870ece3bbd6b7e8e194d3b2da989229110e7..249c85f283b4a80493014773c7e8bf06
|
|||||||
ServerPlayer.RespawnResult result = player.findRespawnPositionAndUseSpawnBlock0(!keepInventory, TeleportTransition.DO_NOTHING, respawnReason);
|
ServerPlayer.RespawnResult result = player.findRespawnPositionAndUseSpawnBlock0(!keepInventory, TeleportTransition.DO_NOTHING, respawnReason);
|
||||||
if (result == null) { // disconnected player during the respawn event
|
if (result == null) { // disconnected player during the respawn event
|
||||||
return player;
|
return player;
|
||||||
@@ -608,6 +610,7 @@ public abstract class PlayerList {
|
@@ -609,6 +611,7 @@ public abstract class PlayerList {
|
||||||
player.level().removePlayerImmediately(player, reason);
|
player.level().removePlayerImmediately(player, reason);
|
||||||
ServerLevel level = teleportTransition.newLevel();
|
ServerLevel level = teleportTransition.newLevel();
|
||||||
ServerPlayer serverPlayer = player; // Paper - TODO - recreate instance
|
ServerPlayer serverPlayer = player; // Paper - TODO - recreate instance
|
||||||
@@ -631,7 +631,7 @@ index f9e7532f86122a379692561a639a209a126e8bba..839f6b7696ef85314da185bedba7cfc5
|
|||||||
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 3dc742ca965a06629686c846c4018672576a9db1..b3fb97a255bae7bdf0ed1aa0b8b2c376b39bdce7 100644
|
index 5d5e125e55daf55764846c0d7ce2c3150847aeb8..56483d9e770e29526a36d4c8c5565092acb227c7 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
|
||||||
@@ -3540,14 +3540,34 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
@@ -3540,14 +3540,34 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
||||||
@@ -787,10 +787,10 @@ index 6adf1b2250234ede6e6f498ed0990ab523f09b8e..a8ae790a7b9bfd0d78cac0577bb7a4dd
|
|||||||
entity.getBrain().eraseMemory(MemoryModuleType.POTENTIAL_JOB_SITE);
|
entity.getBrain().eraseMemory(MemoryModuleType.POTENTIAL_JOB_SITE);
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java
|
diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java
|
||||||
index 5443677ed4ecaaf3b647e3f72802e80d7d22fad9..f200827d35d981aef06b8136557b92fc9a566239 100644
|
index a356da48b20ab38648d75f9066b2ed4a013c13c2..415b021c8f0b68e2aacd23b568ca35d95bf2ce66 100644
|
||||||
--- a/net/minecraft/world/entity/npc/Villager.java
|
--- a/net/minecraft/world/entity/npc/Villager.java
|
||||||
+++ b/net/minecraft/world/entity/npc/Villager.java
|
+++ b/net/minecraft/world/entity/npc/Villager.java
|
||||||
@@ -793,13 +793,24 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
@@ -794,13 +794,24 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
||||||
this.brain.getMemory(moduleType).ifPresent(pos -> {
|
this.brain.getMemory(moduleType).ifPresent(pos -> {
|
||||||
ServerLevel level = server.getLevel(pos.dimension());
|
ServerLevel level = server.getLevel(pos.dimension());
|
||||||
if (level != null) {
|
if (level != null) {
|
||||||
@@ -913,7 +913,7 @@ index 9213d25928066ee6722f1a145ae37e99d6e62582..28f0b59500d67bdd92c97a7e138c9488
|
|||||||
} else {
|
} else {
|
||||||
Entity entity = owner.teleport(
|
Entity entity = owner.teleport(
|
||||||
diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||||
index c0b54e17d75150b1114a9d5895311995726bb88f..7d35e587508f24401a998de27f88ce9cef961b8a 100644
|
index 276b5e6ac82e6e55e0a19c25a7c966501aeaba44..c3021c0a8c588acf5ae8c9231e75bda984863267 100644
|
||||||
--- a/net/minecraft/world/inventory/AbstractContainerMenu.java
|
--- a/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||||
+++ b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
+++ b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||||
@@ -96,8 +96,14 @@ public abstract class AbstractContainerMenu {
|
@@ -96,8 +96,14 @@ public abstract class AbstractContainerMenu {
|
||||||
@@ -949,10 +949,10 @@ index e4bcd4a3cbbc8942d52e5f3c7a4fb1572fdef91c..52a8a818a636e35b486b8aaf482cd688
|
|||||||
serverLevel.capturedBlockStates.clear();
|
serverLevel.capturedBlockStates.clear();
|
||||||
org.bukkit.event.world.StructureGrowEvent structureEvent = null;
|
org.bukkit.event.world.StructureGrowEvent structureEvent = null;
|
||||||
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
||||||
index 79627c421088d439745164d7652a0cc1d93ced30..1f00b7ddf6c470c8a32e418775fa40e90ec88dbe 100644
|
index 21a20aa602f51bbd6c8cdcb52f6b485971834595..7fe5cb2ea1c81b12baf302999a2794f20018707c 100644
|
||||||
--- a/net/minecraft/world/level/Level.java
|
--- a/net/minecraft/world/level/Level.java
|
||||||
+++ b/net/minecraft/world/level/Level.java
|
+++ b/net/minecraft/world/level/Level.java
|
||||||
@@ -170,6 +170,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -171,6 +171,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
private int tileTickPosition;
|
private int tileTickPosition;
|
||||||
public final Map<ServerExplosion.CacheKey, Float> explosionDensityCache = new java.util.HashMap<>(); // Paper - Optimize explosions
|
public final Map<ServerExplosion.CacheKey, Float> explosionDensityCache = new java.util.HashMap<>(); // Paper - Optimize explosions
|
||||||
public java.util.ArrayDeque<net.minecraft.world.level.block.RedstoneTorchBlock.Toggle> redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here
|
public java.util.ArrayDeque<net.minecraft.world.level.block.RedstoneTorchBlock.Toggle> redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here
|
||||||
@@ -960,7 +960,7 @@ index 79627c421088d439745164d7652a0cc1d93ced30..1f00b7ddf6c470c8a32e418775fa40e9
|
|||||||
|
|
||||||
// Purpur start - Add adjustable breeding cooldown to config
|
// Purpur start - Add adjustable breeding cooldown to config
|
||||||
private com.google.common.cache.Cache<BreedingCooldownPair, Object> playerBreedingCooldowns;
|
private com.google.common.cache.Cache<BreedingCooldownPair, Object> playerBreedingCooldowns;
|
||||||
@@ -920,6 +921,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -921,6 +922,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
this.damageSources = new DamageSources(registryAccess);
|
this.damageSources = new DamageSources(registryAccess);
|
||||||
this.entityLookup = new ca.spottedleaf.moonrise.patches.chunk_system.level.entity.dfl.DefaultEntityLookup(this); // Paper - rewrite chunk system
|
this.entityLookup = new ca.spottedleaf.moonrise.patches.chunk_system.level.entity.dfl.DefaultEntityLookup(this); // Paper - rewrite chunk system
|
||||||
this.chunkPacketBlockController = this.paperConfig().anticheat.antiXray.enabled ? new io.papermc.paper.antixray.ChunkPacketBlockControllerAntiXray(this, executor) : io.papermc.paper.antixray.ChunkPacketBlockController.NO_OPERATION_INSTANCE; // Paper - Anti-Xray
|
this.chunkPacketBlockController = this.paperConfig().anticheat.antiXray.enabled ? new io.papermc.paper.antixray.ChunkPacketBlockControllerAntiXray(this, executor) : io.papermc.paper.antixray.ChunkPacketBlockController.NO_OPERATION_INSTANCE; // Paper - Anti-Xray
|
||||||
@@ -968,7 +968,7 @@ index 79627c421088d439745164d7652a0cc1d93ced30..1f00b7ddf6c470c8a32e418775fa40e9
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Paper start - Cancel hit for vanished players
|
// Paper start - Cancel hit for vanished players
|
||||||
@@ -1088,6 +1090,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -1089,6 +1091,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean setBlock(BlockPos pos, BlockState state, int flags, int recursionLeft) {
|
public boolean setBlock(BlockPos pos, BlockState state, int flags, int recursionLeft) {
|
||||||
@@ -976,7 +976,7 @@ index 79627c421088d439745164d7652a0cc1d93ced30..1f00b7ddf6c470c8a32e418775fa40e9
|
|||||||
// CraftBukkit start - tree generation
|
// CraftBukkit start - tree generation
|
||||||
if (this.captureTreeGeneration) {
|
if (this.captureTreeGeneration) {
|
||||||
// Paper start - Protect Bedrock and End Portal/Frames from being destroyed
|
// Paper start - Protect Bedrock and End Portal/Frames from being destroyed
|
||||||
@@ -1471,11 +1474,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -1472,11 +1475,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
this.blockEntityTickers.markAsRemoved(this.tileTickPosition); // DivineMC - optimize block entity removals - Fix MC-117075
|
this.blockEntityTickers.markAsRemoved(this.tileTickPosition); // DivineMC - optimize block entity removals - Fix MC-117075
|
||||||
} else if (runsNormally && this.shouldTickBlocksAt(tickingBlockEntity.getPos())) {
|
} else if (runsNormally && this.shouldTickBlocksAt(tickingBlockEntity.getPos())) {
|
||||||
tickingBlockEntity.tick();
|
tickingBlockEntity.tick();
|
||||||
@@ -993,7 +993,7 @@ index 79627c421088d439745164d7652a0cc1d93ced30..1f00b7ddf6c470c8a32e418775fa40e9
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.blockEntityTickers.removeMarkedEntries(); // DivineMC - optimize block entity removals - Fix MC-117075
|
this.blockEntityTickers.removeMarkedEntries(); // DivineMC - optimize block entity removals - Fix MC-117075
|
||||||
@@ -1495,7 +1499,11 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -1496,7 +1500,11 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
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
|
||||||
}
|
}
|
||||||
@@ -1006,7 +1006,7 @@ index 79627c421088d439745164d7652a0cc1d93ced30..1f00b7ddf6c470c8a32e418775fa40e9
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Paper start - Option to prevent armor stands from doing entity lookups
|
// Paper start - Option to prevent armor stands from doing entity lookups
|
||||||
@@ -1637,6 +1645,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -1638,6 +1646,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public BlockEntity getBlockEntity(BlockPos pos) {
|
public BlockEntity getBlockEntity(BlockPos pos) {
|
||||||
@@ -1014,7 +1014,7 @@ index 79627c421088d439745164d7652a0cc1d93ced30..1f00b7ddf6c470c8a32e418775fa40e9
|
|||||||
// Paper start - Perf: Optimize capturedTileEntities lookup
|
// Paper start - Perf: Optimize capturedTileEntities lookup
|
||||||
net.minecraft.world.level.block.entity.BlockEntity blockEntity;
|
net.minecraft.world.level.block.entity.BlockEntity blockEntity;
|
||||||
if (!this.capturedTileEntities.isEmpty() && (blockEntity = this.capturedTileEntities.get(pos)) != null) {
|
if (!this.capturedTileEntities.isEmpty() && (blockEntity = this.capturedTileEntities.get(pos)) != null) {
|
||||||
@@ -1653,6 +1662,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -1654,6 +1663,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBlockEntity(BlockEntity blockEntity) {
|
public void setBlockEntity(BlockEntity blockEntity) {
|
||||||
@@ -1022,7 +1022,7 @@ index 79627c421088d439745164d7652a0cc1d93ced30..1f00b7ddf6c470c8a32e418775fa40e9
|
|||||||
BlockPos blockPos = blockEntity.getBlockPos();
|
BlockPos blockPos = blockEntity.getBlockPos();
|
||||||
if (!this.isOutsideBuildHeight(blockPos)) {
|
if (!this.isOutsideBuildHeight(blockPos)) {
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
@@ -1738,6 +1748,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -1739,6 +1749,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Entity> getEntities(@Nullable Entity entity, AABB boundingBox, Predicate<? super Entity> predicate) {
|
public List<Entity> getEntities(@Nullable Entity entity, AABB boundingBox, Predicate<? super Entity> predicate) {
|
||||||
@@ -1030,7 +1030,7 @@ index 79627c421088d439745164d7652a0cc1d93ced30..1f00b7ddf6c470c8a32e418775fa40e9
|
|||||||
List<Entity> list = Lists.newArrayList();
|
List<Entity> list = Lists.newArrayList();
|
||||||
|
|
||||||
// Paper start - rewrite chunk system
|
// Paper start - rewrite chunk system
|
||||||
@@ -2087,8 +2098,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -2088,8 +2099,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
public abstract RecipeAccess recipeAccess();
|
public abstract RecipeAccess recipeAccess();
|
||||||
|
|
||||||
public BlockPos getBlockRandomPos(int x, int y, int z, int yMask) {
|
public BlockPos getBlockRandomPos(int x, int y, int z, int yMask) {
|
||||||
@@ -1065,7 +1065,7 @@ index 9711efb088bd0da9168e9bcd0496bd7caddd2974..ea310d53f728aaf5de3284b372ed393e
|
|||||||
return value;
|
return value;
|
||||||
})
|
})
|
||||||
diff --git a/net/minecraft/world/level/block/MushroomBlock.java b/net/minecraft/world/level/block/MushroomBlock.java
|
diff --git a/net/minecraft/world/level/block/MushroomBlock.java b/net/minecraft/world/level/block/MushroomBlock.java
|
||||||
index d306f5f524dc64618df94c9783c2168dc561a5e3..6a0c4dc2ff5e3d82e811db63dc9da7b93e6f2cc9 100644
|
index 9176cf8c47b19d76eb49a7c00fc6723836344d4b..05d173cb97b9c40d24b4c8485d509592a9afa9ad 100644
|
||||||
--- a/net/minecraft/world/level/block/MushroomBlock.java
|
--- a/net/minecraft/world/level/block/MushroomBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/MushroomBlock.java
|
+++ b/net/minecraft/world/level/block/MushroomBlock.java
|
||||||
@@ -93,7 +93,7 @@ public class MushroomBlock extends VegetationBlock implements BonemealableBlock
|
@@ -93,7 +93,7 @@ public class MushroomBlock extends VegetationBlock implements BonemealableBlock
|
||||||
@@ -1078,7 +1078,7 @@ index d306f5f524dc64618df94c9783c2168dc561a5e3..6a0c4dc2ff5e3d82e811db63dc9da7b9
|
|||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
diff --git a/net/minecraft/world/level/block/RedStoneWireBlock.java b/net/minecraft/world/level/block/RedStoneWireBlock.java
|
diff --git a/net/minecraft/world/level/block/RedStoneWireBlock.java b/net/minecraft/world/level/block/RedStoneWireBlock.java
|
||||||
index eff16b8931cba66a7159a313abb2b98cb292a77d..846cf81e9446214510ec99f2809976612049255e 100644
|
index a07d9237d227fe6d419d8a9bc44fc623b244ad3e..9f21d0a93a712538a15761c5834210856458bc78 100644
|
||||||
--- a/net/minecraft/world/level/block/RedStoneWireBlock.java
|
--- a/net/minecraft/world/level/block/RedStoneWireBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/RedStoneWireBlock.java
|
+++ b/net/minecraft/world/level/block/RedStoneWireBlock.java
|
||||||
@@ -66,6 +66,7 @@ public class RedStoneWireBlock extends Block {
|
@@ -66,6 +66,7 @@ public class RedStoneWireBlock extends Block {
|
||||||
@@ -1185,7 +1185,7 @@ index eff16b8931cba66a7159a313abb2b98cb292a77d..846cf81e9446214510ec99f280997661
|
|||||||
|
|
||||||
public static int getColorForPower(int power) {
|
public static int getColorForPower(int power) {
|
||||||
diff --git a/net/minecraft/world/level/block/SaplingBlock.java b/net/minecraft/world/level/block/SaplingBlock.java
|
diff --git a/net/minecraft/world/level/block/SaplingBlock.java b/net/minecraft/world/level/block/SaplingBlock.java
|
||||||
index a5e4959c1b5133cfaeb9259d7e59b38a06453785..f63098847017f65ff24057e29c8b5a8d24a9d795 100644
|
index 23e9e5e7ef76fe3d6e1bbc41faf69ee65ca77d80..9d52904766fd48902b85bdc34ffafcd874c77ad0 100644
|
||||||
--- a/net/minecraft/world/level/block/SaplingBlock.java
|
--- a/net/minecraft/world/level/block/SaplingBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/SaplingBlock.java
|
+++ b/net/minecraft/world/level/block/SaplingBlock.java
|
||||||
@@ -26,6 +26,26 @@ public class SaplingBlock extends VegetationBlock implements BonemealableBlock {
|
@@ -26,6 +26,26 @@ public class SaplingBlock extends VegetationBlock implements BonemealableBlock {
|
||||||
@@ -1254,10 +1254,10 @@ index 1b2f8c4e1e362dc63fde2c7139039f0ce7eb762f..7c2acea8af6a3110d782b9b3afeac091
|
|||||||
final org.bukkit.block.Block block = org.bukkit.craftbukkit.block.CraftBlock.at(blockEntity.getLevel(), blockEntity.getBlockPos());
|
final org.bukkit.block.Block block = org.bukkit.craftbukkit.block.CraftBlock.at(blockEntity.getLevel(), blockEntity.getBlockPos());
|
||||||
net.kyori.adventure.text.Component lockedMessage = net.kyori.adventure.text.Component.translatable("container.isLocked", io.papermc.paper.adventure.PaperAdventure.asAdventure(displayName));
|
net.kyori.adventure.text.Component lockedMessage = net.kyori.adventure.text.Component.translatable("container.isLocked", io.papermc.paper.adventure.PaperAdventure.asAdventure(displayName));
|
||||||
diff --git a/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java b/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java
|
diff --git a/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java b/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java
|
||||||
index 0a94670dc20bb9c521b0395633eb100393895f6a..4ad9c47862a9791f72a18835a343bf0e962c14c8 100644
|
index ab7be4298be22af32c4726f178b93896b96f599d..d78dc310002ebb4149b60a35bf514f1fd49f95c9 100644
|
||||||
--- a/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java
|
--- a/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java
|
||||||
+++ b/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java
|
+++ b/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java
|
||||||
@@ -43,9 +43,7 @@ public class SculkCatalystBlockEntity extends BlockEntity implements GameEventLi
|
@@ -44,9 +44,7 @@ public class SculkCatalystBlockEntity extends BlockEntity implements GameEventLi
|
||||||
// Paper end - Fix NPE in SculkBloomEvent world access
|
// Paper end - Fix NPE in SculkBloomEvent world access
|
||||||
|
|
||||||
public static void serverTick(Level level, BlockPos pos, BlockState state, SculkCatalystBlockEntity sculkCatalyst) {
|
public static void serverTick(Level level, BlockPos pos, BlockState state, SculkCatalystBlockEntity sculkCatalyst) {
|
||||||
@@ -1268,7 +1268,7 @@ index 0a94670dc20bb9c521b0395633eb100393895f6a..4ad9c47862a9791f72a18835a343bf0e
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
diff --git a/net/minecraft/world/level/block/grower/TreeGrower.java b/net/minecraft/world/level/block/grower/TreeGrower.java
|
diff --git a/net/minecraft/world/level/block/grower/TreeGrower.java b/net/minecraft/world/level/block/grower/TreeGrower.java
|
||||||
index d23f255de9208f42125fa358a9e8194c984fe4d3..92e9bc9ba577474ca1108b8d0615739502ca5e57 100644
|
index 3efebec19a1b4fefd6071247c614693e44bc3eb4..e71eb14879afc59298c87714062f7c4ee5ad0a8a 100644
|
||||||
--- a/net/minecraft/world/level/block/grower/TreeGrower.java
|
--- a/net/minecraft/world/level/block/grower/TreeGrower.java
|
||||||
+++ b/net/minecraft/world/level/block/grower/TreeGrower.java
|
+++ b/net/minecraft/world/level/block/grower/TreeGrower.java
|
||||||
@@ -203,55 +203,59 @@ public final class TreeGrower {
|
@@ -203,55 +203,59 @@ public final class TreeGrower {
|
||||||
@@ -1355,7 +1355,7 @@ index d23f255de9208f42125fa358a9e8194c984fe4d3..92e9bc9ba577474ca1108b8d06157395
|
|||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
|
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
index 524f987ba5cbf3d9fa502b51419cb163e099597c..76ba642de5673b407e3a802db9de060bcffae9b0 100644
|
index 529f8a3a4db2effaa91d5b95244717dc44d4c6f4..0e505ad2ce4c8b79df95f08ca948c9687e07fa4c 100644
|
||||||
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
@@ -374,6 +374,7 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
@@ -374,6 +374,7 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
||||||
|
|||||||
@@ -4,6 +4,19 @@ Date: Sun, 23 Feb 2025 01:14:54 +0300
|
|||||||
Subject: [PATCH] Catch update suppressors
|
Subject: [PATCH] Catch update suppressors
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/net/minecraft/network/Connection.java b/net/minecraft/network/Connection.java
|
||||||
|
index 35b6f8365f4568da7bc0f4e47c39cb3690292aaf..e28d859b457ca0e24bc6dc9d6cd4a97f12ae0671 100644
|
||||||
|
--- a/net/minecraft/network/Connection.java
|
||||||
|
+++ b/net/minecraft/network/Connection.java
|
||||||
|
@@ -327,7 +327,7 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
|
||||||
|
|
||||||
|
private static void syncAfterConfigurationChange(ChannelFuture future) {
|
||||||
|
try {
|
||||||
|
- future.syncUninterruptibly();
|
||||||
|
+ future.awaitUninterruptibly(5000L); // DivineMC - In rare cases this can get stuck, so we time out instead in worst case 5s of lag
|
||||||
|
} catch (Exception var2) {
|
||||||
|
if (var2 instanceof ClosedChannelException) {
|
||||||
|
LOGGER.info("Connection closed during protocol change");
|
||||||
diff --git a/net/minecraft/network/PacketProcessor.java b/net/minecraft/network/PacketProcessor.java
|
diff --git a/net/minecraft/network/PacketProcessor.java b/net/minecraft/network/PacketProcessor.java
|
||||||
index 3e4241976fdfe65bc0aae90a9097770745c0ddf1..98b101fde04fbf5507f021bb8d8e6bed334de5b6 100644
|
index 3e4241976fdfe65bc0aae90a9097770745c0ddf1..98b101fde04fbf5507f021bb8d8e6bed334de5b6 100644
|
||||||
--- a/net/minecraft/network/PacketProcessor.java
|
--- a/net/minecraft/network/PacketProcessor.java
|
||||||
@@ -20,7 +33,7 @@ index 3e4241976fdfe65bc0aae90a9097770745c0ddf1..98b101fde04fbf5507f021bb8d8e6bed
|
|||||||
if (var3 instanceof ReportedException reportedException && reportedException.getCause() instanceof OutOfMemoryError) {
|
if (var3 instanceof ReportedException reportedException && reportedException.getCause() instanceof OutOfMemoryError) {
|
||||||
throw PacketUtils.makeReportedException(var3, this.packet, this.listener);
|
throw PacketUtils.makeReportedException(var3, this.packet, this.listener);
|
||||||
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
||||||
index 6a714d59d01eafcd833f05208a948bf33b797392..f654664fb06556125cbd2a213c9fb89eabb329e7 100644
|
index e3c7065cd4832e0c533f70d444c0a7beff53e423..d73546a9f086f67bafb3ce3a2a8ed5c227abc355 100644
|
||||||
--- a/net/minecraft/server/MinecraftServer.java
|
--- a/net/minecraft/server/MinecraftServer.java
|
||||||
+++ b/net/minecraft/server/MinecraftServer.java
|
+++ b/net/minecraft/server/MinecraftServer.java
|
||||||
@@ -1744,6 +1744,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -1744,6 +1744,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
@@ -34,6 +47,350 @@ index 6a714d59d01eafcd833f05208a948bf33b797392..f654664fb06556125cbd2a213c9fb89e
|
|||||||
} catch (Throwable levelTickingException) {
|
} catch (Throwable levelTickingException) {
|
||||||
CrashReport crashReport = CrashReport.forThrowable(levelTickingException, "Exception ticking world");
|
CrashReport crashReport = CrashReport.forThrowable(levelTickingException, "Exception ticking world");
|
||||||
serverLevel.fillReportDetails(crashReport);
|
serverLevel.fillReportDetails(crashReport);
|
||||||
|
diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java
|
||||||
|
index 04dd1bec1aff470e67a21fb0b25932685992ec82..72a0a80f1fffa43e143c80c689db5302f462114e 100644
|
||||||
|
--- a/net/minecraft/server/level/ChunkMap.java
|
||||||
|
+++ b/net/minecraft/server/level/ChunkMap.java
|
||||||
|
@@ -737,7 +737,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||||
|
// Paper start - optimise chunk tick iteration
|
||||||
|
final ca.spottedleaf.moonrise.common.list.ReferenceList<net.minecraft.world.level.chunk.LevelChunk> tickingChunks = ((ca.spottedleaf.moonrise.patches.chunk_tick_iteration.ChunkTickServerLevel)this.level).moonrise$getPlayerTickingChunks();
|
||||||
|
|
||||||
|
- final LevelChunk[] raw = tickingChunks.getRawDataUnchecked();
|
||||||
|
+ final LevelChunk[] raw = tickingChunks.toArray(new LevelChunk[0]); // DivineMC - Regionized Chunk Ticking - sync fix
|
||||||
|
final int size = tickingChunks.size();
|
||||||
|
|
||||||
|
Objects.checkFromToIndex(0, size, raw.length);
|
||||||
|
diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java
|
||||||
|
index 6ea62fbffda38e477ef8e119608fc93793db95c3..74f63e549f8cadc80de26fcad11923151e0c40eb 100644
|
||||||
|
--- a/net/minecraft/server/level/ServerChunkCache.java
|
||||||
|
+++ b/net/minecraft/server/level/ServerChunkCache.java
|
||||||
|
@@ -57,7 +57,7 @@ import org.slf4j.Logger;
|
||||||
|
public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moonrise.patches.chunk_system.world.ChunkSystemServerChunkCache { // Paper - rewrite chunk system
|
||||||
|
private static final Logger LOGGER = LogUtils.getLogger();
|
||||||
|
private final DistanceManager distanceManager;
|
||||||
|
- private final ServerLevel level;
|
||||||
|
+ protected final ServerLevel level; // DivineMC - Regionized Chunk Ticking - private -> protected
|
||||||
|
public final Thread mainThread;
|
||||||
|
final ThreadedLevelLightEngine lightEngine;
|
||||||
|
public final ServerChunkCache.MainThreadExecutor mainThreadProcessor;
|
||||||
|
@@ -71,8 +71,10 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
||||||
|
private final long[] lastChunkPos = new long[4];
|
||||||
|
private final ChunkStatus[] lastChunkStatus = new ChunkStatus[4];
|
||||||
|
private final ChunkAccess[] lastChunk = new ChunkAccess[4];
|
||||||
|
- private final List<LevelChunk> spawningChunks = new ObjectArrayList<>();
|
||||||
|
- private final Set<ChunkHolder> chunkHoldersToBroadcast = new ReferenceOpenHashSet<>();
|
||||||
|
+ // DivineMC start - Regionized Chunk Ticking
|
||||||
|
+ private final ObjectArrayList<LevelChunk> spawningChunks = new ObjectArrayList<>();
|
||||||
|
+ private final Set<ChunkHolder> chunkHoldersToBroadcast = java.util.Collections.synchronizedSet(new ReferenceOpenHashSet<>());
|
||||||
|
+ // DivineMC end - Regionized Chunk Ticking
|
||||||
|
@Nullable
|
||||||
|
@VisibleForDebug
|
||||||
|
private NaturalSpawner.SpawnState lastSpawnState;
|
||||||
|
@@ -156,34 +158,47 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
||||||
|
// Paper end - rewrite chunk system
|
||||||
|
// Paper start - chunk tick iteration optimisations
|
||||||
|
private final ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom shuffleRandom = new ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom(0L);
|
||||||
|
- private void iterateTickingChunksFaster() {
|
||||||
|
+ private void iterateTickingChunksFaster(final CompletableFuture<Void> spawns) { // DivineMC - Regionized Chunk Ticking
|
||||||
|
final ServerLevel world = this.level;
|
||||||
|
final int randomTickSpeed = world.getGameRules().getInt(GameRules.RULE_RANDOMTICKING);
|
||||||
|
|
||||||
|
// TODO check on update: impl of forEachBlockTickingChunk will only iterate ENTITY ticking chunks!
|
||||||
|
// TODO check on update: consumer just runs tickChunk
|
||||||
|
- final ca.spottedleaf.moonrise.common.list.ReferenceList<net.minecraft.world.level.chunk.LevelChunk> entityTickingChunks = ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)world).moonrise$getEntityTickingChunks();
|
||||||
|
+ final ca.spottedleaf.moonrise.common.list.ReferenceList<LevelChunk> entityTickingChunks = ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)world).moonrise$getEntityTickingChunks(); // DivineMC - Regionized Chunk Ticking
|
||||||
|
|
||||||
|
// note: we can use the backing array here because:
|
||||||
|
// 1. we do not care about new additions
|
||||||
|
// 2. _removes_ are impossible at this stage in the tick
|
||||||
|
- final LevelChunk[] raw = entityTickingChunks.getRawDataUnchecked();
|
||||||
|
+ final LevelChunk[] raw = entityTickingChunks.toArray(new LevelChunk[0]); // DivineMC - use toArray instead of getRawDataUnchecked this way is safe and doesn't have performance impact
|
||||||
|
final int size = entityTickingChunks.size();
|
||||||
|
|
||||||
|
- java.util.Objects.checkFromToIndex(0, size, raw.length);
|
||||||
|
- for (int i = 0; i < size; ++i) {
|
||||||
|
- world.tickChunk(raw[i], randomTickSpeed);
|
||||||
|
-
|
||||||
|
- // call mid-tick tasks for chunk system
|
||||||
|
- if ((i & 7) == 0) {
|
||||||
|
- // DivineMC start - Parallel world ticking
|
||||||
|
- if (!org.bxteam.divinemc.config.DivineConfig.AsyncCategory.enableParallelWorldTicking) {
|
||||||
|
- ((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer) this.level.getServer()).moonrise$executeMidTickTasks();
|
||||||
|
- continue;
|
||||||
|
- }
|
||||||
|
+ // DivineMC start - Regionized Chunk Ticking
|
||||||
|
+ if (org.bxteam.divinemc.config.DivineConfig.AsyncCategory.enableRegionizedChunkTicking) {
|
||||||
|
+ if (this instanceof org.bxteam.divinemc.async.rct.RegionizedChunkTicking rct) {
|
||||||
|
+ rct.execute(spawns, raw);
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ java.util.Objects.checkFromToIndex(0, size, raw.length);
|
||||||
|
+ for (int i = 0; i < size; ++i) {
|
||||||
|
+ world.tickChunk(raw[i], randomTickSpeed);
|
||||||
|
+
|
||||||
|
+ // call mid-tick tasks for chunk system
|
||||||
|
+ if ((i & 7) == 0) {
|
||||||
|
+ // DivineMC start - Parallel world ticking
|
||||||
|
+ if (!org.bxteam.divinemc.config.DivineConfig.AsyncCategory.enableParallelWorldTicking) {
|
||||||
|
+ ((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer) this.level.getServer()).moonrise$executeMidTickTasks();
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ // DivineMC end - Parallel world ticking
|
||||||
|
+ }
|
||||||
|
// DivineMC end - Parallel world ticking
|
||||||
|
}
|
||||||
|
- }
|
||||||
|
+
|
||||||
|
+ if (org.bxteam.divinemc.config.DivineConfig.AsyncCategory.asyncNaturalSpawn) {
|
||||||
|
+ spawns.join();
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ // DivineMC end - Regionized Chunk Ticking
|
||||||
|
}
|
||||||
|
// Paper end - chunk tick iteration optimisations
|
||||||
|
|
||||||
|
@@ -502,14 +517,21 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
||||||
|
long gameTime = this.level.getGameTime();
|
||||||
|
long l = gameTime - this.lastInhabitedUpdate;
|
||||||
|
this.lastInhabitedUpdate = gameTime;
|
||||||
|
- if (!this.level.isDebug()) {
|
||||||
|
- if (this.level.tickRateManager().runsNormally()) {
|
||||||
|
- this.tickChunks(l);
|
||||||
|
- }
|
||||||
|
|
||||||
|
+ // DivineMC start - Regionized Chunk Ticking
|
||||||
|
+ if (this.level.isDebug()) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!this.level.tickRateManager().runsNormally()) { // DivineMC - when frozen only broadcast changed chunks and don't run async mob spawning
|
||||||
|
this.broadcastChangedChunks();
|
||||||
|
+ return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ this.tickChunks(l);
|
||||||
|
+ this.broadcastChangedChunks();
|
||||||
|
+ // DivineMC end - Regionized Chunk Ticking
|
||||||
|
+
|
||||||
|
// DivineMC start - Pufferfish: Optimize mob spawning
|
||||||
|
if (org.bxteam.divinemc.config.DivineConfig.AsyncCategory.enableAsyncSpawning) {
|
||||||
|
for (ServerPlayer player : this.level.players) {
|
||||||
|
@@ -553,14 +575,18 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
||||||
|
}
|
||||||
|
|
||||||
|
private void broadcastChangedChunks() {
|
||||||
|
- for (ChunkHolder chunkHolder : this.chunkHoldersToBroadcast) {
|
||||||
|
- LevelChunk tickingChunk = chunkHolder.getChunkToSend(); // Paper - rewrite chunk system
|
||||||
|
- if (tickingChunk != null) {
|
||||||
|
- chunkHolder.broadcastChanges(tickingChunk);
|
||||||
|
+ // DivineMC start - Regionized Chunk Ticking
|
||||||
|
+ synchronized (chunkHoldersToBroadcast) {
|
||||||
|
+ for (ChunkHolder chunkHolder : this.chunkHoldersToBroadcast) {
|
||||||
|
+ LevelChunk tickingChunk = chunkHolder.getChunkToSend(); // Paper - rewrite chunk system
|
||||||
|
+ if (tickingChunk != null) {
|
||||||
|
+ chunkHolder.broadcastChanges(tickingChunk);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
- }
|
||||||
|
|
||||||
|
- this.chunkHoldersToBroadcast.clear();
|
||||||
|
+ this.chunkHoldersToBroadcast.clear();
|
||||||
|
+ }
|
||||||
|
+ // DivineMC end - Regionized Chunk Ticking
|
||||||
|
}
|
||||||
|
|
||||||
|
private void tickChunks(long timeInhabited) {
|
||||||
|
@@ -610,6 +636,24 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
||||||
|
filteredSpawningCategories = List.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // DivineMC start - Regionized Chunk Ticking
|
||||||
|
+ final CompletableFuture<Void> spawns;
|
||||||
|
+ if (org.bxteam.divinemc.config.DivineConfig.AsyncCategory.asyncNaturalSpawn) {
|
||||||
|
+ spawns = CompletableFuture.runAsync(() -> naturalSpawn(filteredSpawningCategories, timeInhabited), org.bxteam.divinemc.async.rct.RegionizedChunkTicking.REGION_EXECUTOR);
|
||||||
|
+ } else {
|
||||||
|
+ naturalSpawn(filteredSpawningCategories, timeInhabited);
|
||||||
|
+ spawns = new CompletableFuture<>();
|
||||||
|
+ }
|
||||||
|
+ // DivineMC end - Regionized Chunk Ticking
|
||||||
|
+
|
||||||
|
+ this.iterateTickingChunksFaster(spawns); // Paper - chunk tick iteration optimisations // DivineMC - Regionized Chunk Ticking
|
||||||
|
+ if (_boolean) {
|
||||||
|
+ this.level.tickCustomSpawners(this.spawnEnemies);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // DivineMC start - Regionized Chunk Ticking
|
||||||
|
+ private void naturalSpawn(List<MobCategory> filteredSpawningCategories, long timeInhabited) {
|
||||||
|
List<LevelChunk> list = this.spawningChunks;
|
||||||
|
|
||||||
|
try {
|
||||||
|
@@ -627,12 +671,12 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
||||||
|
} finally {
|
||||||
|
list.clear();
|
||||||
|
}
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- this.iterateTickingChunksFaster(); // Paper - chunk tick iteration optimisations
|
||||||
|
- if (_boolean) {
|
||||||
|
- this.level.tickCustomSpawners(this.spawnEnemies);
|
||||||
|
- }
|
||||||
|
+ protected net.minecraft.world.level.entity.EntityTickList getEntityTickList() {
|
||||||
|
+ return level.entityTickList;
|
||||||
|
}
|
||||||
|
+ // DivineMC end - Regionized Chunk Ticking
|
||||||
|
|
||||||
|
private void tickSpawningChunk(LevelChunk chunk, long timeInhabited, List<MobCategory> spawnCategories, NaturalSpawner.SpawnState spawnState) {
|
||||||
|
ChunkPos pos = chunk.getPos();
|
||||||
|
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
|
||||||
|
index ca9883277c0f036c94e861f7917ca42facd3c47b..8c98c2593eec14a8a378041e94cf52b8fbfedc30 100644
|
||||||
|
--- a/net/minecraft/server/level/ServerLevel.java
|
||||||
|
+++ b/net/minecraft/server/level/ServerLevel.java
|
||||||
|
@@ -197,7 +197,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
||||||
|
private final LevelTicks<Block> blockTicks = new LevelTicks<>(this::isPositionTickingWithEntitiesLoaded);
|
||||||
|
private final LevelTicks<Fluid> fluidTicks = new LevelTicks<>(this::isPositionTickingWithEntitiesLoaded);
|
||||||
|
private final PathTypeCache pathTypesByPosCache = new PathTypeCache();
|
||||||
|
- final Set<Mob> navigatingMobs = new ObjectOpenHashSet<>();
|
||||||
|
+ final Set<Mob> navigatingMobs = java.util.Collections.synchronizedSet(new ObjectOpenHashSet<>()); // DivineMC - Regionized Chunk Ticking
|
||||||
|
volatile boolean isUpdatingNavigations;
|
||||||
|
protected final Raids raids;
|
||||||
|
private final ObjectLinkedOpenHashSet<BlockEventData> blockEvents = new ObjectLinkedOpenHashSet<>();
|
||||||
|
@@ -666,19 +666,37 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
||||||
|
boolean flag = server.forceSynchronousWrites();
|
||||||
|
DataFixer fixerUpper = server.getFixerUpper();
|
||||||
|
// Paper - rewrite chunk system
|
||||||
|
- this.chunkSource = new ServerChunkCache(
|
||||||
|
- this,
|
||||||
|
- levelStorageAccess,
|
||||||
|
- fixerUpper,
|
||||||
|
- server.getStructureManager(),
|
||||||
|
- dispatcher,
|
||||||
|
- chunkGenerator,
|
||||||
|
- this.spigotConfig.viewDistance, // Spigot
|
||||||
|
- this.spigotConfig.simulationDistance, // Spigot
|
||||||
|
- flag,
|
||||||
|
- null, // Paper - rewrite chunk system
|
||||||
|
- () -> server.overworld().getDataStorage()
|
||||||
|
- );
|
||||||
|
+ // DivineMC start - Regionized Chunk Ticking
|
||||||
|
+ if (org.bxteam.divinemc.config.DivineConfig.AsyncCategory.enableRegionizedChunkTicking) {
|
||||||
|
+ this.chunkSource = new org.bxteam.divinemc.async.rct.RegionizedChunkTicking(
|
||||||
|
+ this,
|
||||||
|
+ levelStorageAccess,
|
||||||
|
+ fixerUpper,
|
||||||
|
+ server.getStructureManager(),
|
||||||
|
+ dispatcher,
|
||||||
|
+ chunkGenerator,
|
||||||
|
+ this.spigotConfig.viewDistance, // Spigot
|
||||||
|
+ this.spigotConfig.simulationDistance, // Spigot
|
||||||
|
+ flag,
|
||||||
|
+ null, // Paper - rewrite chunk system
|
||||||
|
+ () -> server.overworld().getDataStorage()
|
||||||
|
+ );
|
||||||
|
+ } else {
|
||||||
|
+ this.chunkSource = new ServerChunkCache(
|
||||||
|
+ this,
|
||||||
|
+ levelStorageAccess,
|
||||||
|
+ fixerUpper,
|
||||||
|
+ server.getStructureManager(),
|
||||||
|
+ dispatcher,
|
||||||
|
+ chunkGenerator,
|
||||||
|
+ this.spigotConfig.viewDistance, // Spigot
|
||||||
|
+ this.spigotConfig.simulationDistance, // Spigot
|
||||||
|
+ flag,
|
||||||
|
+ null, // Paper - rewrite chunk system
|
||||||
|
+ () -> server.overworld().getDataStorage()
|
||||||
|
+ );
|
||||||
|
+ }
|
||||||
|
+ // DivineMC end - Regionized Chunk Ticking
|
||||||
|
this.chunkSource.getGeneratorState().ensureStructuresGenerated();
|
||||||
|
this.portalForcer = new PortalForcer(this);
|
||||||
|
this.updateSkyBrightness();
|
||||||
|
@@ -846,6 +864,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
||||||
|
this.dragonFight.tick();
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // DivineMC start - Regionized Chunk Ticking
|
||||||
|
+ if (org.bxteam.divinemc.config.DivineConfig.AsyncCategory.enableRegionizedChunkTicking) {
|
||||||
|
+ this.tickBlockEntities();
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ // DivineMC end - Regionized Chunk Ticking
|
||||||
|
+
|
||||||
|
io.papermc.paper.entity.activation.ActivationRange.activateEntities(this); // Paper - EAR
|
||||||
|
this.entityTickList
|
||||||
|
.forEach(
|
||||||
|
@@ -1874,22 +1899,16 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
||||||
|
if (Shapes.joinIsNotEmpty(collisionShape, collisionShape1, BooleanOp.NOT_SAME)) {
|
||||||
|
List<PathNavigation> list = new ObjectArrayList<>();
|
||||||
|
|
||||||
|
- try { // Paper - catch CME see below why
|
||||||
|
- for (Mob mob : this.navigatingMobs) {
|
||||||
|
- PathNavigation navigation = mob.getNavigation();
|
||||||
|
- if (navigation.shouldRecomputePath(pos)) {
|
||||||
|
- list.add(navigation);
|
||||||
|
+ // DivineMC start - Regionized Chunk Ticking
|
||||||
|
+ synchronized (this.navigatingMobs) {
|
||||||
|
+ for (Mob mob : this.navigatingMobs) {
|
||||||
|
+ PathNavigation navigation = mob.getNavigation();
|
||||||
|
+ if (navigation.shouldRecomputePath(pos)) {
|
||||||
|
+ list.add(navigation);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- // Paper start - catch CME see below why
|
||||||
|
- } catch (final java.util.ConcurrentModificationException concurrentModificationException) {
|
||||||
|
- // This can happen because the pathfinder update below may trigger a chunk load, which in turn may cause more navigators to register
|
||||||
|
- // In this case we just run the update again across all the iterators as the chunk will then be loaded
|
||||||
|
- // As this is a relative edge case it is much faster than copying navigators (on either read or write)
|
||||||
|
- this.sendBlockUpdated(pos, oldState, newState, flags);
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
- // Paper end - catch CME see below why
|
||||||
|
+ // DivineMC end - Regionized Chunk Ticking
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.isUpdatingNavigations = true;
|
||||||
|
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
||||||
|
index 7fe5cb2ea1c81b12baf302999a2794f20018707c..738cbde3595165e0f05c0a6fde21499e98dc850b 100644
|
||||||
|
--- a/net/minecraft/world/level/Level.java
|
||||||
|
+++ b/net/minecraft/world/level/Level.java
|
||||||
|
@@ -113,7 +113,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
|
.build();
|
||||||
|
public final org.bxteam.divinemc.util.BlockEntityTickersList blockEntityTickers = new org.bxteam.divinemc.util.BlockEntityTickersList(); // DivineMC - optimize block entity removals - Fix MC-117075
|
||||||
|
protected final CollectingNeighborUpdater neighborUpdater;
|
||||||
|
- private final List<TickingBlockEntity> pendingBlockEntityTickers = Lists.newArrayList();
|
||||||
|
+ private final List<TickingBlockEntity> pendingBlockEntityTickers = java.util.Collections.synchronizedList(Lists.newArrayList()); // DivineMC - Regionized Chunk Ticking
|
||||||
|
private boolean tickingBlockEntities;
|
||||||
|
public final Thread thread;
|
||||||
|
private final boolean isDebug;
|
||||||
|
@@ -145,7 +145,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
|
|
||||||
|
public boolean captureBlockStates = false;
|
||||||
|
public boolean captureTreeGeneration = false;
|
||||||
|
- public Map<BlockPos, org.bukkit.craftbukkit.block.CraftBlockState> capturedBlockStates = new java.util.LinkedHashMap<>(); // Paper
|
||||||
|
+ public Map<BlockPos, org.bukkit.craftbukkit.block.CraftBlockState> capturedBlockStates = java.util.Collections.synchronizedMap(new java.util.LinkedHashMap<>()); // Paper // DivineMC - Regionized Chunk Ticking
|
||||||
|
public Map<BlockPos, BlockEntity> capturedTileEntities = new java.util.LinkedHashMap<>(); // Paper - Retain block place order when capturing blockstates
|
||||||
|
@Nullable
|
||||||
|
public List<net.minecraft.world.entity.item.ItemEntity> captureDrops;
|
||||||
|
@@ -1459,10 +1459,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
|
|
||||||
|
public void tickBlockEntities() {
|
||||||
|
this.tickingBlockEntities = true;
|
||||||
|
- if (!this.pendingBlockEntityTickers.isEmpty()) {
|
||||||
|
- this.blockEntityTickers.addAll(this.pendingBlockEntityTickers);
|
||||||
|
- this.pendingBlockEntityTickers.clear();
|
||||||
|
+ // DivineMC start - Regionized Chunk Ticking - synchronization fix
|
||||||
|
+ synchronized (pendingBlockEntityTickers) {
|
||||||
|
+ if (!this.pendingBlockEntityTickers.isEmpty()) {
|
||||||
|
+ this.blockEntityTickers.addAll(this.pendingBlockEntityTickers);
|
||||||
|
+ this.pendingBlockEntityTickers.clear();
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
+ // DivineMC end - Regionized Chunk Ticking - synchronization fix
|
||||||
|
|
||||||
|
// Spigot start
|
||||||
|
boolean runsNormally = this.tickRateManager().runsNormally();
|
||||||
diff --git a/net/minecraft/world/level/block/ShulkerBoxBlock.java b/net/minecraft/world/level/block/ShulkerBoxBlock.java
|
diff --git a/net/minecraft/world/level/block/ShulkerBoxBlock.java b/net/minecraft/world/level/block/ShulkerBoxBlock.java
|
||||||
index e08083fbb6c3090c9a6f78dbbe487cbd4fec485a..d5d77110e7799223a66c2d6e47a1d9b4653f3ec4 100644
|
index e08083fbb6c3090c9a6f78dbbe487cbd4fec485a..d5d77110e7799223a66c2d6e47a1d9b4653f3ec4 100644
|
||||||
--- a/net/minecraft/world/level/block/ShulkerBoxBlock.java
|
--- a/net/minecraft/world/level/block/ShulkerBoxBlock.java
|
||||||
@@ -57,8 +414,30 @@ index e08083fbb6c3090c9a6f78dbbe487cbd4fec485a..d5d77110e7799223a66c2d6e47a1d9b4
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Block getBlockByColor(@Nullable DyeColor color) {
|
public static Block getBlockByColor(@Nullable DyeColor color) {
|
||||||
|
diff --git a/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java b/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
|
||||||
|
index 5d17213a692016d2f005c7820bf2cf1f42ce411f..ccb2e0c28aeaebbeef15fbb650fa3c2e5c241ceb 100644
|
||||||
|
--- a/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
|
||||||
|
+++ b/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
|
||||||
|
@@ -53,7 +53,7 @@ public class CollectingNeighborUpdater implements NeighborUpdater {
|
||||||
|
this.addAndRun(pos, new CollectingNeighborUpdater.MultiNeighborUpdate(pos.immutable(), block, orientation, facing));
|
||||||
|
}
|
||||||
|
|
||||||
|
- private void addAndRun(BlockPos pos, CollectingNeighborUpdater.NeighborUpdates updates) {
|
||||||
|
+ private synchronized void addAndRun(BlockPos pos, CollectingNeighborUpdater.NeighborUpdates updates) { // DivineMC - Regionized Chunk Ticking - synchronized
|
||||||
|
boolean flag = this.count > 0;
|
||||||
|
boolean flag1 = this.maxChainedNeighborUpdates >= 0 && this.count >= this.maxChainedNeighborUpdates;
|
||||||
|
this.count++;
|
||||||
|
@@ -72,7 +72,7 @@ public class CollectingNeighborUpdater implements NeighborUpdater {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- private void runUpdates() {
|
||||||
|
+ private synchronized void runUpdates() { // DivineMC - Regionized Chunk Ticking - synchronized
|
||||||
|
try {
|
||||||
|
while (!this.stack.isEmpty() || !this.addedThisLayer.isEmpty()) {
|
||||||
|
for (int i = this.addedThisLayer.size() - 1; i >= 0; i--) {
|
||||||
diff --git a/net/minecraft/world/level/redstone/NeighborUpdater.java b/net/minecraft/world/level/redstone/NeighborUpdater.java
|
diff --git a/net/minecraft/world/level/redstone/NeighborUpdater.java b/net/minecraft/world/level/redstone/NeighborUpdater.java
|
||||||
index 3f4b17a222fdbf97ca8979a43f1f231d9e9d8ddb..1b7a1481d4d4167036185ddcbafe7c11a1b84a52 100644
|
index f45cf0136e77ed5a903d033a7b0611e5edc23db9..e5b0cc92a2f9cdb89cd2436f6591531f8ae91d28 100644
|
||||||
--- a/net/minecraft/world/level/redstone/NeighborUpdater.java
|
--- a/net/minecraft/world/level/redstone/NeighborUpdater.java
|
||||||
+++ b/net/minecraft/world/level/redstone/NeighborUpdater.java
|
+++ b/net/minecraft/world/level/redstone/NeighborUpdater.java
|
||||||
@@ -60,9 +60,19 @@ public interface NeighborUpdater {
|
@@ -60,9 +60,19 @@ public interface NeighborUpdater {
|
||||||
|
|||||||
@@ -1,386 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com>
|
|
||||||
Date: Mon, 9 Jun 2025 13:51:43 +0300
|
|
||||||
Subject: [PATCH] Regionized Chunk Ticking
|
|
||||||
|
|
||||||
This patch adds regionized chunk ticking feature, by grouping adjacent chunks into regions and processing each region on its own thread.
|
|
||||||
|
|
||||||
Original idea by Dueris, modified by NONPLAYT and heavily optimized by dan28000
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/network/Connection.java b/net/minecraft/network/Connection.java
|
|
||||||
index 35b6f8365f4568da7bc0f4e47c39cb3690292aaf..e28d859b457ca0e24bc6dc9d6cd4a97f12ae0671 100644
|
|
||||||
--- a/net/minecraft/network/Connection.java
|
|
||||||
+++ b/net/minecraft/network/Connection.java
|
|
||||||
@@ -327,7 +327,7 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
|
|
||||||
|
|
||||||
private static void syncAfterConfigurationChange(ChannelFuture future) {
|
|
||||||
try {
|
|
||||||
- future.syncUninterruptibly();
|
|
||||||
+ future.awaitUninterruptibly(5000L); // DivineMC - In rare cases this can get stuck, so we time out instead in worst case 5s of lag
|
|
||||||
} catch (Exception var2) {
|
|
||||||
if (var2 instanceof ClosedChannelException) {
|
|
||||||
LOGGER.info("Connection closed during protocol change");
|
|
||||||
diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java
|
|
||||||
index 04dd1bec1aff470e67a21fb0b25932685992ec82..72a0a80f1fffa43e143c80c689db5302f462114e 100644
|
|
||||||
--- a/net/minecraft/server/level/ChunkMap.java
|
|
||||||
+++ b/net/minecraft/server/level/ChunkMap.java
|
|
||||||
@@ -737,7 +737,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
|
||||||
// Paper start - optimise chunk tick iteration
|
|
||||||
final ca.spottedleaf.moonrise.common.list.ReferenceList<net.minecraft.world.level.chunk.LevelChunk> tickingChunks = ((ca.spottedleaf.moonrise.patches.chunk_tick_iteration.ChunkTickServerLevel)this.level).moonrise$getPlayerTickingChunks();
|
|
||||||
|
|
||||||
- final LevelChunk[] raw = tickingChunks.getRawDataUnchecked();
|
|
||||||
+ final LevelChunk[] raw = tickingChunks.toArray(new LevelChunk[0]); // DivineMC - Regionized Chunk Ticking - sync fix
|
|
||||||
final int size = tickingChunks.size();
|
|
||||||
|
|
||||||
Objects.checkFromToIndex(0, size, raw.length);
|
|
||||||
diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java
|
|
||||||
index 6ea62fbffda38e477ef8e119608fc93793db95c3..dda53860397ee52f64209a8d08a7707cfa2f7592 100644
|
|
||||||
--- a/net/minecraft/server/level/ServerChunkCache.java
|
|
||||||
+++ b/net/minecraft/server/level/ServerChunkCache.java
|
|
||||||
@@ -57,7 +57,7 @@ import org.slf4j.Logger;
|
|
||||||
public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moonrise.patches.chunk_system.world.ChunkSystemServerChunkCache { // Paper - rewrite chunk system
|
|
||||||
private static final Logger LOGGER = LogUtils.getLogger();
|
|
||||||
private final DistanceManager distanceManager;
|
|
||||||
- private final ServerLevel level;
|
|
||||||
+ protected final ServerLevel level; // DivineMC - Regionized Chunk Ticking - private -> protected
|
|
||||||
public final Thread mainThread;
|
|
||||||
final ThreadedLevelLightEngine lightEngine;
|
|
||||||
public final ServerChunkCache.MainThreadExecutor mainThreadProcessor;
|
|
||||||
@@ -71,8 +71,10 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
|
||||||
private final long[] lastChunkPos = new long[4];
|
|
||||||
private final ChunkStatus[] lastChunkStatus = new ChunkStatus[4];
|
|
||||||
private final ChunkAccess[] lastChunk = new ChunkAccess[4];
|
|
||||||
- private final List<LevelChunk> spawningChunks = new ObjectArrayList<>();
|
|
||||||
- private final Set<ChunkHolder> chunkHoldersToBroadcast = new ReferenceOpenHashSet<>();
|
|
||||||
+ // DivineMC start - Regionized Chunk Ticking
|
|
||||||
+ private final ObjectArrayList<LevelChunk> spawningChunks = new ObjectArrayList<>();
|
|
||||||
+ private final Set<ChunkHolder> chunkHoldersToBroadcast = java.util.Collections.synchronizedSet(new ReferenceOpenHashSet<>());
|
|
||||||
+ // DivineMC end - Regionized Chunk Ticking
|
|
||||||
@Nullable
|
|
||||||
@VisibleForDebug
|
|
||||||
private NaturalSpawner.SpawnState lastSpawnState;
|
|
||||||
@@ -156,34 +158,46 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
|
||||||
// Paper end - rewrite chunk system
|
|
||||||
// Paper start - chunk tick iteration optimisations
|
|
||||||
private final ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom shuffleRandom = new ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom(0L);
|
|
||||||
- private void iterateTickingChunksFaster() {
|
|
||||||
+ private void iterateTickingChunksFaster(final CompletableFuture<Void> spawns) { // DivineMC - Regionized Chunk Ticking
|
|
||||||
final ServerLevel world = this.level;
|
|
||||||
final int randomTickSpeed = world.getGameRules().getInt(GameRules.RULE_RANDOMTICKING);
|
|
||||||
|
|
||||||
// TODO check on update: impl of forEachBlockTickingChunk will only iterate ENTITY ticking chunks!
|
|
||||||
// TODO check on update: consumer just runs tickChunk
|
|
||||||
- final ca.spottedleaf.moonrise.common.list.ReferenceList<net.minecraft.world.level.chunk.LevelChunk> entityTickingChunks = ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)world).moonrise$getEntityTickingChunks();
|
|
||||||
+ final ca.spottedleaf.moonrise.common.list.ReferenceList<LevelChunk> entityTickingChunks = ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)world).moonrise$getEntityTickingChunks(); // DivineMC - Regionized Chunk Ticking
|
|
||||||
|
|
||||||
// note: we can use the backing array here because:
|
|
||||||
// 1. we do not care about new additions
|
|
||||||
// 2. _removes_ are impossible at this stage in the tick
|
|
||||||
- final LevelChunk[] raw = entityTickingChunks.getRawDataUnchecked();
|
|
||||||
+ final LevelChunk[] raw = entityTickingChunks.toArray(new LevelChunk[0]); // DivineMC - use toArray instead of getRawDataUnchecked this way is safe and doesn't have performance impact
|
|
||||||
final int size = entityTickingChunks.size();
|
|
||||||
|
|
||||||
- java.util.Objects.checkFromToIndex(0, size, raw.length);
|
|
||||||
- for (int i = 0; i < size; ++i) {
|
|
||||||
- world.tickChunk(raw[i], randomTickSpeed);
|
|
||||||
-
|
|
||||||
- // call mid-tick tasks for chunk system
|
|
||||||
- if ((i & 7) == 0) {
|
|
||||||
- // DivineMC start - Parallel world ticking
|
|
||||||
- if (!org.bxteam.divinemc.config.DivineConfig.AsyncCategory.enableParallelWorldTicking) {
|
|
||||||
- ((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer) this.level.getServer()).moonrise$executeMidTickTasks();
|
|
||||||
- continue;
|
|
||||||
+ // DivineMC start - Regionized Chunk Ticking
|
|
||||||
+ if (org.bxteam.divinemc.config.DivineConfig.AsyncCategory.enableRegionizedChunkTicking) {
|
|
||||||
+ if (this instanceof org.bxteam.divinemc.async.rct.RegionizedChunkTicking rct) {
|
|
||||||
+ rct.execute(spawns, raw);
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ java.util.Objects.checkFromToIndex(0, size, raw.length);
|
|
||||||
+ for (int i = 0; i < size; ++i) {
|
|
||||||
+ world.tickChunk(raw[i], randomTickSpeed);
|
|
||||||
+
|
|
||||||
+ // call mid-tick tasks for chunk system
|
|
||||||
+ if ((i & 7) == 0) {
|
|
||||||
+ // DivineMC start - Parallel world ticking
|
|
||||||
+ if (!org.bxteam.divinemc.config.DivineConfig.AsyncCategory.enableParallelWorldTicking) {
|
|
||||||
+ ((ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer) this.level.getServer()).moonrise$executeMidTickTasks();
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+ // DivineMC end - Parallel world ticking
|
|
||||||
}
|
|
||||||
- // DivineMC end - Parallel world ticking
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (org.bxteam.divinemc.config.DivineConfig.AsyncCategory.asyncNaturalSpawn) {
|
|
||||||
+ spawns.join();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ // DivineMC end - Regionized Chunk Ticking
|
|
||||||
}
|
|
||||||
// Paper end - chunk tick iteration optimisations
|
|
||||||
|
|
||||||
@@ -502,14 +516,21 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
|
||||||
long gameTime = this.level.getGameTime();
|
|
||||||
long l = gameTime - this.lastInhabitedUpdate;
|
|
||||||
this.lastInhabitedUpdate = gameTime;
|
|
||||||
- if (!this.level.isDebug()) {
|
|
||||||
- if (this.level.tickRateManager().runsNormally()) {
|
|
||||||
- this.tickChunks(l);
|
|
||||||
- }
|
|
||||||
|
|
||||||
+ // DivineMC start - Regionized Chunk Ticking
|
|
||||||
+ if (this.level.isDebug()) {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!this.level.tickRateManager().runsNormally()) { // DivineMC - when frozen only broadcast changed chunks and don't run async mob spawning
|
|
||||||
this.broadcastChangedChunks();
|
|
||||||
+ return;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ this.tickChunks(l);
|
|
||||||
+ this.broadcastChangedChunks();
|
|
||||||
+ // DivineMC end - Regionized Chunk Ticking
|
|
||||||
+
|
|
||||||
// DivineMC start - Pufferfish: Optimize mob spawning
|
|
||||||
if (org.bxteam.divinemc.config.DivineConfig.AsyncCategory.enableAsyncSpawning) {
|
|
||||||
for (ServerPlayer player : this.level.players) {
|
|
||||||
@@ -553,14 +574,18 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
|
||||||
}
|
|
||||||
|
|
||||||
private void broadcastChangedChunks() {
|
|
||||||
- for (ChunkHolder chunkHolder : this.chunkHoldersToBroadcast) {
|
|
||||||
- LevelChunk tickingChunk = chunkHolder.getChunkToSend(); // Paper - rewrite chunk system
|
|
||||||
- if (tickingChunk != null) {
|
|
||||||
- chunkHolder.broadcastChanges(tickingChunk);
|
|
||||||
+ // DivineMC start - Regionized Chunk Ticking
|
|
||||||
+ synchronized (chunkHoldersToBroadcast) {
|
|
||||||
+ for (ChunkHolder chunkHolder : this.chunkHoldersToBroadcast) {
|
|
||||||
+ LevelChunk tickingChunk = chunkHolder.getChunkToSend(); // Paper - rewrite chunk system
|
|
||||||
+ if (tickingChunk != null) {
|
|
||||||
+ chunkHolder.broadcastChanges(tickingChunk);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
- }
|
|
||||||
|
|
||||||
- this.chunkHoldersToBroadcast.clear();
|
|
||||||
+ this.chunkHoldersToBroadcast.clear();
|
|
||||||
+ }
|
|
||||||
+ // DivineMC end - Regionized Chunk Ticking
|
|
||||||
}
|
|
||||||
|
|
||||||
private void tickChunks(long timeInhabited) {
|
|
||||||
@@ -610,6 +635,24 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
|
||||||
filteredSpawningCategories = List.of();
|
|
||||||
}
|
|
||||||
|
|
||||||
+ // DivineMC start - Regionized Chunk Ticking
|
|
||||||
+ final CompletableFuture<Void> spawns;
|
|
||||||
+ if (org.bxteam.divinemc.config.DivineConfig.AsyncCategory.asyncNaturalSpawn) {
|
|
||||||
+ spawns = CompletableFuture.runAsync(() -> naturalSpawn(filteredSpawningCategories, timeInhabited), org.bxteam.divinemc.async.rct.RegionizedChunkTicking.REGION_EXECUTOR);
|
|
||||||
+ } else {
|
|
||||||
+ naturalSpawn(filteredSpawningCategories, timeInhabited);
|
|
||||||
+ spawns = new CompletableFuture<>();
|
|
||||||
+ }
|
|
||||||
+ // DivineMC end - Regionized Chunk Ticking
|
|
||||||
+
|
|
||||||
+ this.iterateTickingChunksFaster(spawns); // Paper - chunk tick iteration optimisations // DivineMC - Regionized Chunk Ticking
|
|
||||||
+ if (_boolean) {
|
|
||||||
+ this.level.tickCustomSpawners(this.spawnEnemies);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // DivineMC start - Regionized Chunk Ticking
|
|
||||||
+ private void naturalSpawn(List<MobCategory> filteredSpawningCategories, long timeInhabited) {
|
|
||||||
List<LevelChunk> list = this.spawningChunks;
|
|
||||||
|
|
||||||
try {
|
|
||||||
@@ -627,12 +670,12 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
|
||||||
} finally {
|
|
||||||
list.clear();
|
|
||||||
}
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- this.iterateTickingChunksFaster(); // Paper - chunk tick iteration optimisations
|
|
||||||
- if (_boolean) {
|
|
||||||
- this.level.tickCustomSpawners(this.spawnEnemies);
|
|
||||||
- }
|
|
||||||
+ protected net.minecraft.world.level.entity.EntityTickList getEntityTickList() {
|
|
||||||
+ return level.entityTickList;
|
|
||||||
}
|
|
||||||
+ // DivineMC end - Regionized Chunk Ticking
|
|
||||||
|
|
||||||
private void tickSpawningChunk(LevelChunk chunk, long timeInhabited, List<MobCategory> spawnCategories, NaturalSpawner.SpawnState spawnState) {
|
|
||||||
ChunkPos pos = chunk.getPos();
|
|
||||||
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
|
|
||||||
index ca9883277c0f036c94e861f7917ca42facd3c47b..8c98c2593eec14a8a378041e94cf52b8fbfedc30 100644
|
|
||||||
--- a/net/minecraft/server/level/ServerLevel.java
|
|
||||||
+++ b/net/minecraft/server/level/ServerLevel.java
|
|
||||||
@@ -197,7 +197,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
|
||||||
private final LevelTicks<Block> blockTicks = new LevelTicks<>(this::isPositionTickingWithEntitiesLoaded);
|
|
||||||
private final LevelTicks<Fluid> fluidTicks = new LevelTicks<>(this::isPositionTickingWithEntitiesLoaded);
|
|
||||||
private final PathTypeCache pathTypesByPosCache = new PathTypeCache();
|
|
||||||
- final Set<Mob> navigatingMobs = new ObjectOpenHashSet<>();
|
|
||||||
+ final Set<Mob> navigatingMobs = java.util.Collections.synchronizedSet(new ObjectOpenHashSet<>()); // DivineMC - Regionized Chunk Ticking
|
|
||||||
volatile boolean isUpdatingNavigations;
|
|
||||||
protected final Raids raids;
|
|
||||||
private final ObjectLinkedOpenHashSet<BlockEventData> blockEvents = new ObjectLinkedOpenHashSet<>();
|
|
||||||
@@ -666,19 +666,37 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
|
||||||
boolean flag = server.forceSynchronousWrites();
|
|
||||||
DataFixer fixerUpper = server.getFixerUpper();
|
|
||||||
// Paper - rewrite chunk system
|
|
||||||
- this.chunkSource = new ServerChunkCache(
|
|
||||||
- this,
|
|
||||||
- levelStorageAccess,
|
|
||||||
- fixerUpper,
|
|
||||||
- server.getStructureManager(),
|
|
||||||
- dispatcher,
|
|
||||||
- chunkGenerator,
|
|
||||||
- this.spigotConfig.viewDistance, // Spigot
|
|
||||||
- this.spigotConfig.simulationDistance, // Spigot
|
|
||||||
- flag,
|
|
||||||
- null, // Paper - rewrite chunk system
|
|
||||||
- () -> server.overworld().getDataStorage()
|
|
||||||
- );
|
|
||||||
+ // DivineMC start - Regionized Chunk Ticking
|
|
||||||
+ if (org.bxteam.divinemc.config.DivineConfig.AsyncCategory.enableRegionizedChunkTicking) {
|
|
||||||
+ this.chunkSource = new org.bxteam.divinemc.async.rct.RegionizedChunkTicking(
|
|
||||||
+ this,
|
|
||||||
+ levelStorageAccess,
|
|
||||||
+ fixerUpper,
|
|
||||||
+ server.getStructureManager(),
|
|
||||||
+ dispatcher,
|
|
||||||
+ chunkGenerator,
|
|
||||||
+ this.spigotConfig.viewDistance, // Spigot
|
|
||||||
+ this.spigotConfig.simulationDistance, // Spigot
|
|
||||||
+ flag,
|
|
||||||
+ null, // Paper - rewrite chunk system
|
|
||||||
+ () -> server.overworld().getDataStorage()
|
|
||||||
+ );
|
|
||||||
+ } else {
|
|
||||||
+ this.chunkSource = new ServerChunkCache(
|
|
||||||
+ this,
|
|
||||||
+ levelStorageAccess,
|
|
||||||
+ fixerUpper,
|
|
||||||
+ server.getStructureManager(),
|
|
||||||
+ dispatcher,
|
|
||||||
+ chunkGenerator,
|
|
||||||
+ this.spigotConfig.viewDistance, // Spigot
|
|
||||||
+ this.spigotConfig.simulationDistance, // Spigot
|
|
||||||
+ flag,
|
|
||||||
+ null, // Paper - rewrite chunk system
|
|
||||||
+ () -> server.overworld().getDataStorage()
|
|
||||||
+ );
|
|
||||||
+ }
|
|
||||||
+ // DivineMC end - Regionized Chunk Ticking
|
|
||||||
this.chunkSource.getGeneratorState().ensureStructuresGenerated();
|
|
||||||
this.portalForcer = new PortalForcer(this);
|
|
||||||
this.updateSkyBrightness();
|
|
||||||
@@ -846,6 +864,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
|
||||||
this.dragonFight.tick();
|
|
||||||
}
|
|
||||||
|
|
||||||
+ // DivineMC start - Regionized Chunk Ticking
|
|
||||||
+ if (org.bxteam.divinemc.config.DivineConfig.AsyncCategory.enableRegionizedChunkTicking) {
|
|
||||||
+ this.tickBlockEntities();
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ // DivineMC end - Regionized Chunk Ticking
|
|
||||||
+
|
|
||||||
io.papermc.paper.entity.activation.ActivationRange.activateEntities(this); // Paper - EAR
|
|
||||||
this.entityTickList
|
|
||||||
.forEach(
|
|
||||||
@@ -1874,22 +1899,16 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
|
||||||
if (Shapes.joinIsNotEmpty(collisionShape, collisionShape1, BooleanOp.NOT_SAME)) {
|
|
||||||
List<PathNavigation> list = new ObjectArrayList<>();
|
|
||||||
|
|
||||||
- try { // Paper - catch CME see below why
|
|
||||||
- for (Mob mob : this.navigatingMobs) {
|
|
||||||
- PathNavigation navigation = mob.getNavigation();
|
|
||||||
- if (navigation.shouldRecomputePath(pos)) {
|
|
||||||
- list.add(navigation);
|
|
||||||
+ // DivineMC start - Regionized Chunk Ticking
|
|
||||||
+ synchronized (this.navigatingMobs) {
|
|
||||||
+ for (Mob mob : this.navigatingMobs) {
|
|
||||||
+ PathNavigation navigation = mob.getNavigation();
|
|
||||||
+ if (navigation.shouldRecomputePath(pos)) {
|
|
||||||
+ list.add(navigation);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- // Paper start - catch CME see below why
|
|
||||||
- } catch (final java.util.ConcurrentModificationException concurrentModificationException) {
|
|
||||||
- // This can happen because the pathfinder update below may trigger a chunk load, which in turn may cause more navigators to register
|
|
||||||
- // In this case we just run the update again across all the iterators as the chunk will then be loaded
|
|
||||||
- // As this is a relative edge case it is much faster than copying navigators (on either read or write)
|
|
||||||
- this.sendBlockUpdated(pos, oldState, newState, flags);
|
|
||||||
- return;
|
|
||||||
- }
|
|
||||||
- // Paper end - catch CME see below why
|
|
||||||
+ // DivineMC end - Regionized Chunk Ticking
|
|
||||||
|
|
||||||
try {
|
|
||||||
this.isUpdatingNavigations = true;
|
|
||||||
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
|
||||||
index 1f00b7ddf6c470c8a32e418775fa40e90ec88dbe..5e6306c5322d46c051aea02525d49ae9ed76b85f 100644
|
|
||||||
--- a/net/minecraft/world/level/Level.java
|
|
||||||
+++ b/net/minecraft/world/level/Level.java
|
|
||||||
@@ -112,7 +112,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
|
||||||
.build();
|
|
||||||
public final org.bxteam.divinemc.util.BlockEntityTickersList blockEntityTickers = new org.bxteam.divinemc.util.BlockEntityTickersList(); // DivineMC - optimize block entity removals - Fix MC-117075
|
|
||||||
protected final CollectingNeighborUpdater neighborUpdater;
|
|
||||||
- private final List<TickingBlockEntity> pendingBlockEntityTickers = Lists.newArrayList();
|
|
||||||
+ private final List<TickingBlockEntity> pendingBlockEntityTickers = java.util.Collections.synchronizedList(Lists.newArrayList()); // DivineMC - Regionized Chunk Ticking
|
|
||||||
private boolean tickingBlockEntities;
|
|
||||||
public final Thread thread;
|
|
||||||
private final boolean isDebug;
|
|
||||||
@@ -144,7 +144,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
|
||||||
|
|
||||||
public boolean captureBlockStates = false;
|
|
||||||
public boolean captureTreeGeneration = false;
|
|
||||||
- public Map<BlockPos, org.bukkit.craftbukkit.block.CraftBlockState> capturedBlockStates = new java.util.LinkedHashMap<>(); // Paper
|
|
||||||
+ public Map<BlockPos, org.bukkit.craftbukkit.block.CraftBlockState> capturedBlockStates = java.util.Collections.synchronizedMap(new java.util.LinkedHashMap<>()); // Paper // DivineMC - Regionized Chunk Ticking
|
|
||||||
public Map<BlockPos, BlockEntity> capturedTileEntities = new java.util.LinkedHashMap<>(); // Paper - Retain block place order when capturing blockstates
|
|
||||||
@Nullable
|
|
||||||
public List<net.minecraft.world.entity.item.ItemEntity> captureDrops;
|
|
||||||
@@ -1458,10 +1458,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
|
||||||
|
|
||||||
public void tickBlockEntities() {
|
|
||||||
this.tickingBlockEntities = true;
|
|
||||||
- if (!this.pendingBlockEntityTickers.isEmpty()) {
|
|
||||||
- this.blockEntityTickers.addAll(this.pendingBlockEntityTickers);
|
|
||||||
- this.pendingBlockEntityTickers.clear();
|
|
||||||
+ // DivineMC start - Regionized Chunk Ticking - synchronization fix
|
|
||||||
+ synchronized (pendingBlockEntityTickers) {
|
|
||||||
+ if (!this.pendingBlockEntityTickers.isEmpty()) {
|
|
||||||
+ this.blockEntityTickers.addAll(this.pendingBlockEntityTickers);
|
|
||||||
+ this.pendingBlockEntityTickers.clear();
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
+ // DivineMC end - Regionized Chunk Ticking - synchronization fix
|
|
||||||
|
|
||||||
// Spigot start
|
|
||||||
boolean runsNormally = this.tickRateManager().runsNormally();
|
|
||||||
diff --git a/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java b/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
|
|
||||||
index 5d17213a692016d2f005c7820bf2cf1f42ce411f..ccb2e0c28aeaebbeef15fbb650fa3c2e5c241ceb 100644
|
|
||||||
--- a/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
|
|
||||||
+++ b/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
|
|
||||||
@@ -53,7 +53,7 @@ public class CollectingNeighborUpdater implements NeighborUpdater {
|
|
||||||
this.addAndRun(pos, new CollectingNeighborUpdater.MultiNeighborUpdate(pos.immutable(), block, orientation, facing));
|
|
||||||
}
|
|
||||||
|
|
||||||
- private void addAndRun(BlockPos pos, CollectingNeighborUpdater.NeighborUpdates updates) {
|
|
||||||
+ private synchronized void addAndRun(BlockPos pos, CollectingNeighborUpdater.NeighborUpdates updates) { // DivineMC - Regionized Chunk Ticking - synchronized
|
|
||||||
boolean flag = this.count > 0;
|
|
||||||
boolean flag1 = this.maxChainedNeighborUpdates >= 0 && this.count >= this.maxChainedNeighborUpdates;
|
|
||||||
this.count++;
|
|
||||||
@@ -72,7 +72,7 @@ public class CollectingNeighborUpdater implements NeighborUpdater {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- private void runUpdates() {
|
|
||||||
+ private synchronized void runUpdates() { // DivineMC - Regionized Chunk Ticking - synchronized
|
|
||||||
try {
|
|
||||||
while (!this.stack.isEmpty() || !this.addedThisLayer.isEmpty()) {
|
|
||||||
for (int i = this.addedThisLayer.size() - 1; i >= 0; i--) {
|
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Copper Bulb 1gt delay
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/block/CopperBulbBlock.java b/net/minecraft/world/level/block/CopperBulbBlock.java
|
diff --git a/net/minecraft/world/level/block/CopperBulbBlock.java b/net/minecraft/world/level/block/CopperBulbBlock.java
|
||||||
index 54511c27d8d85f1a9702d899f1f7c7dda201cdfa..1a9b785b1a0b06dcc9f4b9520303eab33e092db0 100644
|
index 153af604a49d243bc64ffbbb4e11932f3dfdb373..d0803888a3b695f1b2e5a105d56c20146e54b10a 100644
|
||||||
--- a/net/minecraft/world/level/block/CopperBulbBlock.java
|
--- a/net/minecraft/world/level/block/CopperBulbBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/CopperBulbBlock.java
|
+++ b/net/minecraft/world/level/block/CopperBulbBlock.java
|
||||||
@@ -33,16 +33,36 @@ public class CopperBulbBlock extends Block {
|
@@ -33,16 +33,36 @@ public class CopperBulbBlock extends Block {
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Crafter 1gt delay
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/block/CrafterBlock.java b/net/minecraft/world/level/block/CrafterBlock.java
|
diff --git a/net/minecraft/world/level/block/CrafterBlock.java b/net/minecraft/world/level/block/CrafterBlock.java
|
||||||
index 6dd3c0f60b04bc690ebd4a33ec57ef806961ee32..dad8035aff94854eadeb454ef60e6c90dbb31d1e 100644
|
index a132883d85d515edb131049714915902444e4c3e..68e28ff810d6420dafc03cc43d7edbe5ee38d971 100644
|
||||||
--- a/net/minecraft/world/level/block/CrafterBlock.java
|
--- a/net/minecraft/world/level/block/CrafterBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/CrafterBlock.java
|
+++ b/net/minecraft/world/level/block/CrafterBlock.java
|
||||||
@@ -75,7 +75,7 @@ public class CrafterBlock extends BaseEntityBlock {
|
@@ -75,7 +75,7 @@ public class CrafterBlock extends BaseEntityBlock {
|
||||||
@@ -14,7 +14,7 @@ index 6dd3c0f60b04bc690ebd4a33ec57ef806961ee32..dad8035aff94854eadeb454ef60e6c90
|
|||||||
if (hasNeighborSignal && !triggeredValue) {
|
if (hasNeighborSignal && !triggeredValue) {
|
||||||
- level.scheduleTick(pos, this, 4);
|
- level.scheduleTick(pos, this, 4);
|
||||||
+ level.scheduleTick(pos, this, !org.bxteam.divinemc.config.DivineConfig.MiscCategory.copperBulb1gt ? 4 : 1); // DivineMC - Crafter 1gt delay
|
+ level.scheduleTick(pos, this, !org.bxteam.divinemc.config.DivineConfig.MiscCategory.copperBulb1gt ? 4 : 1); // DivineMC - Crafter 1gt delay
|
||||||
level.setBlock(pos, state.setValue(TRIGGERED, true), 2);
|
level.setBlock(pos, state.setValue(TRIGGERED, true), Block.UPDATE_CLIENTS);
|
||||||
this.setBlockEntityTriggered(blockEntity, true);
|
this.setBlockEntityTriggered(blockEntity, true);
|
||||||
} else if (!hasNeighborSignal && triggeredValue) {
|
} else if (!hasNeighborSignal && triggeredValue) {
|
||||||
@@ -125,7 +125,7 @@ public class CrafterBlock extends BaseEntityBlock {
|
@@ -125,7 +125,7 @@ public class CrafterBlock extends BaseEntityBlock {
|
||||||
@@ -10,7 +10,7 @@ Original project: https://github.com/LogisticsCraft/OcclusionCulling
|
|||||||
Original license: MIT
|
Original license: MIT
|
||||||
|
|
||||||
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 b3fb97a255bae7bdf0ed1aa0b8b2c376b39bdce7..3248a68175708fd7b10020113475844ae3fd2a8f 100644
|
index 56483d9e770e29526a36d4c8c5565092acb227c7..9db43874a94770d49ea5ff48a46c4657e4819e98 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
|
||||||
@@ -147,7 +147,7 @@ import net.minecraft.world.waypoints.WaypointTransmitter;
|
@@ -147,7 +147,7 @@ import net.minecraft.world.waypoints.WaypointTransmitter;
|
||||||
@@ -83,10 +83,10 @@ index 7d5940327c5e7a945165228d502f678a8234cd02..5a4a337694c36e6342c0b0ae5034ac2f
|
|||||||
private static <T extends Entity> EntityType<T> register(ResourceKey<EntityType<?>> key, EntityType.Builder<T> builder) {
|
private static <T extends Entity> EntityType<T> register(ResourceKey<EntityType<?>> key, EntityType.Builder<T> builder) {
|
||||||
return Registry.register(BuiltInRegistries.ENTITY_TYPE, key, builder.build(key));
|
return Registry.register(BuiltInRegistries.ENTITY_TYPE, key, builder.build(key));
|
||||||
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
|
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
|
||||||
index d5337d37be18d2ebb047e122b220e1a694f46696..bd41bbac179460d38edee624334cdcd0efb5504c 100644
|
index 68942a2d15cfeddf1928a3ad270b1ce29685f8f0..149332116ff211c122b1dbf9b8010610174451db 100644
|
||||||
--- a/net/minecraft/world/entity/player/Player.java
|
--- a/net/minecraft/world/entity/player/Player.java
|
||||||
+++ b/net/minecraft/world/entity/player/Player.java
|
+++ b/net/minecraft/world/entity/player/Player.java
|
||||||
@@ -183,6 +183,25 @@ public abstract class Player extends Avatar implements ContainerUser {
|
@@ -184,6 +184,25 @@ public abstract class Player extends Avatar implements ContainerUser {
|
||||||
public int burpDelay = 0; // Purpur - Burp delay
|
public int burpDelay = 0; // Purpur - Burp delay
|
||||||
public boolean canPortalInstant = false; // Purpur - Add portal permission bypass
|
public boolean canPortalInstant = false; // Purpur - Add portal permission bypass
|
||||||
public int sixRowEnderchestSlotCount = -1; // Purpur - Barrels and enderchests 6 rows
|
public int sixRowEnderchestSlotCount = -1; // Purpur - Barrels and enderchests 6 rows
|
||||||
@@ -112,7 +112,7 @@ index d5337d37be18d2ebb047e122b220e1a694f46696..bd41bbac179460d38edee624334cdcd0
|
|||||||
|
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
public boolean fauxSleeping;
|
public boolean fauxSleeping;
|
||||||
@@ -269,6 +288,25 @@ public abstract class Player extends Avatar implements ContainerUser {
|
@@ -270,6 +289,25 @@ public abstract class Player extends Avatar implements ContainerUser {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void tick() {
|
||||||
@@ -138,7 +138,7 @@ index d5337d37be18d2ebb047e122b220e1a694f46696..bd41bbac179460d38edee624334cdcd0
|
|||||||
// Purpur start - Burp delay
|
// Purpur start - Burp delay
|
||||||
if (this.burpDelay > 0 && --this.burpDelay == 0) {
|
if (this.burpDelay > 0 && --this.burpDelay == 0) {
|
||||||
this.level().playSound(null, getX(), getY(), getZ(), SoundEvents.PLAYER_BURP, SoundSource.PLAYERS, 1.0F, this.level().random.nextFloat() * 0.1F + 0.9F);
|
this.level().playSound(null, getX(), getY(), getZ(), SoundEvents.PLAYER_BURP, SoundSource.PLAYERS, 1.0F, this.level().random.nextFloat() * 0.1F + 0.9F);
|
||||||
@@ -1314,6 +1352,7 @@ public abstract class Player extends Avatar implements ContainerUser {
|
@@ -1315,6 +1353,7 @@ public abstract class Player extends Avatar implements ContainerUser {
|
||||||
if (this.hasContainerOpen()) {
|
if (this.hasContainerOpen()) {
|
||||||
this.doCloseContainer();
|
this.doCloseContainer();
|
||||||
}
|
}
|
||||||
@@ -35,7 +35,7 @@ index fb263fa1f30a7dfcb7ec2656abfb38e5fe88eac9..c3be4c2fd4a544967322a45d3b8c0fe7
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
||||||
index f654664fb06556125cbd2a213c9fb89eabb329e7..9c1798cca21a3f36f0347a0a4ac1fe9ababe60af 100644
|
index d73546a9f086f67bafb3ce3a2a8ed5c227abc355..5feb76f4cd7274943f1b763c5eb7071c4bf2b809 100644
|
||||||
--- a/net/minecraft/server/MinecraftServer.java
|
--- a/net/minecraft/server/MinecraftServer.java
|
||||||
+++ b/net/minecraft/server/MinecraftServer.java
|
+++ b/net/minecraft/server/MinecraftServer.java
|
||||||
@@ -1848,6 +1848,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -1848,6 +1848,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
@@ -95,10 +95,10 @@ index e5569978a23c5bde673146421963a2ff0905d514..65d74d0021b48e92f8d06ad19a255023
|
|||||||
bridge.removeChannel(channel);
|
bridge.removeChannel(channel);
|
||||||
}
|
}
|
||||||
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 249c85f283b4a80493014773c7e8bf06953cbc3a..dd592eae80b8869b9b40f04767a8ab8e10d4fe7e 100644
|
index 9acc247ec540449a0e4cf3a5a0bc67a0e3dfbf15..bf26f788b3c77ef344f072e399cada116b95e757 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
|
||||||
@@ -246,6 +246,8 @@ public abstract class PlayerList {
|
@@ -247,6 +247,8 @@ public abstract class PlayerList {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ index 249c85f283b4a80493014773c7e8bf06953cbc3a..dd592eae80b8869b9b40f04767a8ab8e
|
|||||||
final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage();
|
final net.kyori.adventure.text.Component jm = playerJoinEvent.joinMessage();
|
||||||
|
|
||||||
if (jm != null && !jm.equals(net.kyori.adventure.text.Component.empty())) { // Paper - Adventure
|
if (jm != null && !jm.equals(net.kyori.adventure.text.Component.empty())) { // Paper - Adventure
|
||||||
@@ -432,6 +434,7 @@ public abstract class PlayerList {
|
@@ -433,6 +435,7 @@ public abstract class PlayerList {
|
||||||
return this.remove(player, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? player.getBukkitEntity().displayName() : io.papermc.paper.adventure.PaperAdventure.asAdventure(player.getDisplayName())));
|
return this.remove(player, net.kyori.adventure.text.Component.translatable("multiplayer.player.left", net.kyori.adventure.text.format.NamedTextColor.YELLOW, io.papermc.paper.configuration.GlobalConfiguration.get().messages.useDisplayNameInQuitMessage ? player.getBukkitEntity().displayName() : io.papermc.paper.adventure.PaperAdventure.asAdventure(player.getDisplayName())));
|
||||||
}
|
}
|
||||||
public @Nullable net.kyori.adventure.text.Component remove(ServerPlayer player, net.kyori.adventure.text.Component leaveMessage) {
|
public @Nullable net.kyori.adventure.text.Component remove(ServerPlayer player, net.kyori.adventure.text.Component leaveMessage) {
|
||||||
@@ -115,7 +115,7 @@ index 249c85f283b4a80493014773c7e8bf06953cbc3a..dd592eae80b8869b9b40f04767a8ab8e
|
|||||||
// Paper end - Fix kick event leave message not being sent
|
// Paper end - Fix kick event leave message not being sent
|
||||||
org.purpurmc.purpur.task.BossBarTask.removeFromAll(player.getBukkitEntity()); // Purpur - Implement TPSBar
|
org.purpurmc.purpur.task.BossBarTask.removeFromAll(player.getBukkitEntity()); // Purpur - Implement TPSBar
|
||||||
ServerLevel serverLevel = player.level();
|
ServerLevel serverLevel = player.level();
|
||||||
@@ -1328,6 +1331,7 @@ public abstract class PlayerList {
|
@@ -1329,6 +1332,7 @@ public abstract class PlayerList {
|
||||||
serverPlayer.connection.send(clientboundUpdateRecipesPacket);
|
serverPlayer.connection.send(clientboundUpdateRecipesPacket);
|
||||||
serverPlayer.getRecipeBook().sendInitialRecipeBook(serverPlayer);
|
serverPlayer.getRecipeBook().sendInitialRecipeBook(serverPlayer);
|
||||||
}
|
}
|
||||||
@@ -60,7 +60,7 @@ index 51c126735ace8fdde89ad97b5cab62f244212db0..23f6ed26b531ea570fdf2ae48c1e2710
|
|||||||
+ public void moonrise$write(final org.bxteam.divinemc.region.IRegionFile regionFile) throws IOException; // DivineMC - Buffered Linear region format
|
+ public void moonrise$write(final org.bxteam.divinemc.region.IRegionFile regionFile) throws IOException; // DivineMC - Buffered Linear region format
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
|
||||||
index 9c1798cca21a3f36f0347a0a4ac1fe9ababe60af..fe55ccb61324f4132448720bbab48e0f4c9b6b4d 100644
|
index 5feb76f4cd7274943f1b763c5eb7071c4bf2b809..c574bb4a1cce4af4e3cda1f76e789b7c1660fc21 100644
|
||||||
--- a/net/minecraft/server/MinecraftServer.java
|
--- a/net/minecraft/server/MinecraftServer.java
|
||||||
+++ b/net/minecraft/server/MinecraftServer.java
|
+++ b/net/minecraft/server/MinecraftServer.java
|
||||||
@@ -958,10 +958,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
@@ -958,10 +958,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
||||||
@@ -102,7 +102,7 @@ index 8c98c2593eec14a8a378041e94cf52b8fbfedc30..4788686f0bd8ab67700bf3687560ff4a
|
|||||||
|
|
||||||
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 3248a68175708fd7b10020113475844ae3fd2a8f..d767cc3ca7e559640cfde7f1f765b87c3d9c16ea 100644
|
index 9db43874a94770d49ea5ff48a46c4657e4819e98..013261aff0b9ecfeb51f3baf597d7ee211a8a095 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
|
||||||
@@ -1116,29 +1116,10 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
@@ -1116,29 +1116,10 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Do not send spectator change packet
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java
|
diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||||
index e2040f79550bdfacf32c94c369284d28526ed2ea..9018f3fe36a2786de380bc8e4d5cfb9425325b36 100644
|
index 9bbcffc77dcf0e062a7f3464aee7f8d0563a440f..4b0afe40a06c76b4378f7a5979d6217c4b947770 100644
|
||||||
--- a/net/minecraft/server/level/ServerPlayerGameMode.java
|
--- a/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||||
+++ b/net/minecraft/server/level/ServerPlayerGameMode.java
|
+++ b/net/minecraft/server/level/ServerPlayerGameMode.java
|
||||||
@@ -86,10 +86,7 @@ public class ServerPlayerGameMode {
|
@@ -86,10 +86,7 @@ public class ServerPlayerGameMode {
|
||||||
@@ -39,10 +39,10 @@ index e2040f79550bdfacf32c94c369284d28526ed2ea..9018f3fe36a2786de380bc8e4d5cfb94
|
|||||||
+ // DivineMC end - Do not send spectator change packet
|
+ // DivineMC end - Do not send spectator change packet
|
||||||
}
|
}
|
||||||
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 dd592eae80b8869b9b40f04767a8ab8e10d4fe7e..df4b28f16e0cd2ddcf094b8bc60f13e7707ab84b 100644
|
index bf26f788b3c77ef344f072e399cada116b95e757..551ba3a85f9bd3861512585939ab898d20e733a8 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 {
|
@@ -259,6 +259,7 @@ public abstract class PlayerList {
|
||||||
|
|
||||||
// CraftBukkit start - sendAll above replaced with this loop
|
// CraftBukkit start - sendAll above replaced with this loop
|
||||||
ClientboundPlayerInfoUpdatePacket packet = ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player)); // Paper - Add Listing API for Player
|
ClientboundPlayerInfoUpdatePacket packet = ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player)); // Paper - Add Listing API for Player
|
||||||
@@ -50,7 +50,7 @@ index dd592eae80b8869b9b40f04767a8ab8e10d4fe7e..df4b28f16e0cd2ddcf094b8bc60f13e7
|
|||||||
|
|
||||||
final List<ServerPlayer> onlinePlayers = Lists.newArrayListWithExpectedSize(this.players.size() - 1); // Paper - Use single player info update packet on join
|
final List<ServerPlayer> onlinePlayers = Lists.newArrayListWithExpectedSize(this.players.size() - 1); // Paper - Use single player info update packet on join
|
||||||
for (int i = 0; i < this.players.size(); ++i) {
|
for (int i = 0; i < this.players.size(); ++i) {
|
||||||
@@ -267,7 +268,7 @@ public abstract class PlayerList {
|
@@ -268,7 +269,7 @@ public abstract class PlayerList {
|
||||||
// Paper start - Add Listing API for Player
|
// Paper start - Add Listing API for Player
|
||||||
if (entityplayer1.getBukkitEntity().isListed(bukkitPlayer)) {
|
if (entityplayer1.getBukkitEntity().isListed(bukkitPlayer)) {
|
||||||
// Paper end - Add Listing API for Player
|
// Paper end - Add Listing API for Player
|
||||||
@@ -59,7 +59,7 @@ index dd592eae80b8869b9b40f04767a8ab8e10d4fe7e..df4b28f16e0cd2ddcf094b8bc60f13e7
|
|||||||
// Paper start - Add Listing API for Player
|
// Paper start - Add Listing API for Player
|
||||||
} else {
|
} else {
|
||||||
entityplayer1.connection.send(ClientboundPlayerInfoUpdatePacket.createSinglePlayerInitializing(player, false));
|
entityplayer1.connection.send(ClientboundPlayerInfoUpdatePacket.createSinglePlayerInitializing(player, false));
|
||||||
@@ -283,7 +284,10 @@ public abstract class PlayerList {
|
@@ -284,7 +285,10 @@ public abstract class PlayerList {
|
||||||
}
|
}
|
||||||
// Paper start - Use single player info update packet on join
|
// Paper start - Use single player info update packet on join
|
||||||
if (!onlinePlayers.isEmpty()) {
|
if (!onlinePlayers.isEmpty()) {
|
||||||
@@ -71,7 +71,7 @@ index dd592eae80b8869b9b40f04767a8ab8e10d4fe7e..df4b28f16e0cd2ddcf094b8bc60f13e7
|
|||||||
}
|
}
|
||||||
// Paper end - Use single player info update packet on join
|
// Paper end - Use single player info update packet on join
|
||||||
player.sentListPacket = true;
|
player.sentListPacket = true;
|
||||||
@@ -1337,4 +1341,69 @@ public abstract class PlayerList {
|
@@ -1338,4 +1342,69 @@ public abstract class PlayerList {
|
||||||
public boolean isAllowCommandsForAllPlayers() {
|
public boolean isAllowCommandsForAllPlayers() {
|
||||||
return this.allowCommandsForAllPlayers;
|
return this.allowCommandsForAllPlayers;
|
||||||
}
|
}
|
||||||
@@ -8,10 +8,10 @@ Original project: https://github.com/PaperMC/Paper
|
|||||||
Paper pull request: https://github.com/PaperMC/Paper/pull/8074
|
Paper pull request: https://github.com/PaperMC/Paper/pull/8074
|
||||||
|
|
||||||
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 df4b28f16e0cd2ddcf094b8bc60f13e7707ab84b..a11f16112bbc064f5fa011574f7f495a04737374 100644
|
index 551ba3a85f9bd3861512585939ab898d20e733a8..eb3f3a2d70de239b8324b35529987daf70202042 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
|
||||||
@@ -209,10 +209,15 @@ public abstract class PlayerList {
|
@@ -210,10 +210,15 @@ public abstract class PlayerList {
|
||||||
mutableComponent.withStyle(ChatFormatting.YELLOW);
|
mutableComponent.withStyle(ChatFormatting.YELLOW);
|
||||||
Component joinMessage = mutableComponent; // Paper - Adventure
|
Component joinMessage = mutableComponent; // Paper - Adventure
|
||||||
serverGamePacketListenerImpl.teleport(player.getX(), player.getY(), player.getZ(), player.getYRot(), player.getXRot());
|
serverGamePacketListenerImpl.teleport(player.getX(), player.getY(), player.getZ(), player.getYRot(), player.getXRot());
|
||||||
@@ -54,10 +54,10 @@ index 71fafa5cf67cd1e460b0be14ecfe0c922b666704..993c03f1957b6905ed943ff34ec9c530
|
|||||||
public int serverViewDistance;
|
public int serverViewDistance;
|
||||||
public final WorldGenContext worldGenContext; // Paper - public
|
public final WorldGenContext worldGenContext; // Paper - public
|
||||||
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
||||||
index ebe34866e79397ac4c6a6bba97c99f5354adbe64..604b4670f59e0c3ed5c287e8a0c573560826ed78 100644
|
index 738cbde3595165e0f05c0a6fde21499e98dc850b..4ec89234607f58ee32d0ea2ef056c8098e137041 100644
|
||||||
--- a/net/minecraft/world/level/Level.java
|
--- a/net/minecraft/world/level/Level.java
|
||||||
+++ b/net/minecraft/world/level/Level.java
|
+++ b/net/minecraft/world/level/Level.java
|
||||||
@@ -259,7 +259,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -260,7 +260,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final <T extends Entity> List<T> getEntitiesOfClass(final Class<T> entityClass, final AABB boundingBox, final Predicate<? super T> predicate) {
|
public final <T extends Entity> List<T> getEntitiesOfClass(final Class<T> entityClass, final AABB boundingBox, final Predicate<? super T> predicate) {
|
||||||
@@ -66,7 +66,7 @@ index ebe34866e79397ac4c6a6bba97c99f5354adbe64..604b4670f59e0c3ed5c287e8a0c57356
|
|||||||
|
|
||||||
((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(entityClass, null, boundingBox, ret, predicate);
|
((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(entityClass, null, boundingBox, ret, predicate);
|
||||||
|
|
||||||
@@ -268,7 +268,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -269,7 +269,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final List<Entity> moonrise$getHardCollidingEntities(final Entity entity, final AABB box, final Predicate<? super Entity> predicate) {
|
public final List<Entity> moonrise$getHardCollidingEntities(final Entity entity, final AABB box, final Predicate<? super Entity> predicate) {
|
||||||
@@ -73,7 +73,7 @@ index 4788686f0bd8ab67700bf3687560ff4a26a8e493..ba496e78740218a176d8e3117a21cbfc
|
|||||||
|
|
||||||
public void tickChunk(LevelChunk chunk, int randomTickSpeed) {
|
public void tickChunk(LevelChunk chunk, int randomTickSpeed) {
|
||||||
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
|
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
index 76ba642de5673b407e3a802db9de060bcffae9b0..29f4cce6823ad13bec607523f059166f97a48c22 100644
|
index 0e505ad2ce4c8b79df95f08ca948c9687e07fa4c..9b8aa40984d87ab1078fe71b5ccc0ca04f67a55c 100644
|
||||||
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
@@ -84,7 +84,7 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
@@ -84,7 +84,7 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
||||||
@@ -452,10 +452,10 @@ index d03d075d5c56b7d2beb5f0aafecbb69f5b3bbf5b..ce3b8f4161dde3e2758c5d33445da150
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java
|
diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java
|
||||||
index e8efa7b12746423de11b6970efe1651db2509511..a90086ae56118720cb49b674e031bc9d6f8dbd42 100644
|
index 74f63e549f8cadc80de26fcad11923151e0c40eb..c549f0203fb278a37f1c3246a98bf3d6e3216afe 100644
|
||||||
--- a/net/minecraft/server/level/ServerChunkCache.java
|
--- a/net/minecraft/server/level/ServerChunkCache.java
|
||||||
+++ b/net/minecraft/server/level/ServerChunkCache.java
|
+++ b/net/minecraft/server/level/ServerChunkCache.java
|
||||||
@@ -461,8 +461,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
@@ -462,8 +462,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
|
||||||
|
|
||||||
public boolean isPositionTicking(long chunkPos) {
|
public boolean isPositionTicking(long chunkPos) {
|
||||||
// Paper start - rewrite chunk system
|
// Paper start - rewrite chunk system
|
||||||
@@ -10,7 +10,7 @@ As part of: Lithium (https://github.com/CaffeineMC/lithium)
|
|||||||
Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html)
|
Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html)
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
|
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
index 29f4cce6823ad13bec607523f059166f97a48c22..60f3567ef70a82ad1704aec3135e6a72f5033e12 100644
|
index 9b8aa40984d87ab1078fe71b5ccc0ca04f67a55c..acddfe7fdd4305ba832af62d607a06213b29469d 100644
|
||||||
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
@@ -389,10 +389,13 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
@@ -389,10 +389,13 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
||||||
@@ -96,7 +96,7 @@ index 8e6f097b4d17aaaf8eccc16e11ce2bd01ad63322..ded99b157865f5bcfd64b3082c628a71
|
|||||||
|
|
||||||
int getContainerSize();
|
int getContainerSize();
|
||||||
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 d767cc3ca7e559640cfde7f1f765b87c3d9c16ea..b18ece927ca8b86539fb8ed5ca18ac3f5f3ea3a3 100644
|
index 013261aff0b9ecfeb51f3baf597d7ee211a8a095..ef9c0258d3f9371ddfc9931dce2c2584139e6752 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
|
||||||
@@ -5099,6 +5099,18 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
@@ -5099,6 +5099,18 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
|
||||||
@@ -264,7 +264,7 @@ index 0f9bfcd1eab023c1772e9fafcda85d110904bd1c..a54dbf14af2abcf0307c1c43fb82cfd6
|
|||||||
+ // DivineMC end - lithium: sleeping_block_entity
|
+ // DivineMC end - lithium: sleeping_block_entity
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||||
index 7d35e587508f24401a998de27f88ce9cef961b8a..343bfbb8b122b5c1d6fd8de736a8ad7ed5367cd6 100644
|
index c3021c0a8c588acf5ae8c9231e75bda984863267..0f3f9efdce86c3fb50247245eb5a3e1c1a14a794 100644
|
||||||
--- a/net/minecraft/world/inventory/AbstractContainerMenu.java
|
--- a/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||||
+++ b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
+++ b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||||
@@ -901,6 +901,12 @@ public abstract class AbstractContainerMenu {
|
@@ -901,6 +901,12 @@ public abstract class AbstractContainerMenu {
|
||||||
@@ -417,10 +417,10 @@ index 52a8a818a636e35b486b8aaf482cd68849a0bbcd..7706bf3cdd8017eb0591a4002489835b
|
|||||||
+ // DivineMC end - lithium: sleeping_block_entity
|
+ // DivineMC end - lithium: sleeping_block_entity
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
|
||||||
index b799bcd450da148a941289a23bd3758cc75245d2..2c06a6dd8d6164818777753f6572e1f07043abae 100644
|
index 4ec89234607f58ee32d0ea2ef056c8098e137041..e05c873814b6212ea61a4914e8a34cb9ac17822b 100644
|
||||||
--- a/net/minecraft/world/level/Level.java
|
--- a/net/minecraft/world/level/Level.java
|
||||||
+++ b/net/minecraft/world/level/Level.java
|
+++ b/net/minecraft/world/level/Level.java
|
||||||
@@ -1476,7 +1476,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -1477,7 +1477,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
// Spigot end
|
// Spigot end
|
||||||
if (tickingBlockEntity.isRemoved()) {
|
if (tickingBlockEntity.isRemoved()) {
|
||||||
this.blockEntityTickers.markAsRemoved(this.tileTickPosition); // DivineMC - optimize block entity removals - Fix MC-117075
|
this.blockEntityTickers.markAsRemoved(this.tileTickPosition); // DivineMC - optimize block entity removals - Fix MC-117075
|
||||||
@@ -429,7 +429,7 @@ index b799bcd450da148a941289a23bd3758cc75245d2..2c06a6dd8d6164818777753f6572e1f0
|
|||||||
tickingBlockEntity.tick();
|
tickingBlockEntity.tick();
|
||||||
// DivineMC start - Parallel world ticking
|
// DivineMC start - Parallel world ticking
|
||||||
++tickedEntities;
|
++tickedEntities;
|
||||||
@@ -2196,4 +2196,25 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
@@ -2197,4 +2197,25 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl
|
||||||
return getWorld().getEnvironment() == org.bukkit.World.Environment.THE_END;
|
return getWorld().getEnvironment() == org.bukkit.World.Environment.THE_END;
|
||||||
}
|
}
|
||||||
// Purpur end - Add allow water in end world option
|
// Purpur end - Add allow water in end world option
|
||||||
@@ -456,7 +456,7 @@ index b799bcd450da148a941289a23bd3758cc75245d2..2c06a6dd8d6164818777753f6572e1f0
|
|||||||
+ // DivineMC end - lithium: sleeping_block_entity
|
+ // DivineMC end - lithium: sleeping_block_entity
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/level/block/ComposterBlock.java b/net/minecraft/world/level/block/ComposterBlock.java
|
diff --git a/net/minecraft/world/level/block/ComposterBlock.java b/net/minecraft/world/level/block/ComposterBlock.java
|
||||||
index 8cc6f7fcf8da2498fab3a0e300da785c489a63cc..2c3dc9e0131071530eab9b7f0cabe4b8519cc294 100644
|
index 90ef0ea828303ccfa568c6acb3975c48f628261a..da18bce7cb9e99d207476471b511643e7eb609b9 100644
|
||||||
--- a/net/minecraft/world/level/block/ComposterBlock.java
|
--- a/net/minecraft/world/level/block/ComposterBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/ComposterBlock.java
|
+++ b/net/minecraft/world/level/block/ComposterBlock.java
|
||||||
@@ -440,7 +440,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder {
|
@@ -440,7 +440,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder {
|
||||||
@@ -480,7 +480,7 @@ index 8cc6f7fcf8da2498fab3a0e300da785c489a63cc..2c3dc9e0131071530eab9b7f0cabe4b8
|
|||||||
@@ -508,12 +508,13 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder {
|
@@ -508,12 +508,13 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder {
|
||||||
}
|
}
|
||||||
// Paper end - Add CompostItemEvent and EntityCompostItemEvent
|
// Paper end - Add CompostItemEvent and EntityCompostItemEvent
|
||||||
this.level.levelEvent(1500, this.pos, blockState != this.state ? 1 : 0);
|
this.level.levelEvent(LevelEvent.COMPOSTER_FILL, this.pos, blockState != this.state ? 1 : 0);
|
||||||
+ if (org.bxteam.divinemc.config.DivineConfig.PerformanceCategory.sleepingBlockEntity) this.changed = false; // DivineMC - lithium: sleeping_block_entity
|
+ if (org.bxteam.divinemc.config.DivineConfig.PerformanceCategory.sleepingBlockEntity) this.changed = false; // DivineMC - lithium: sleeping_block_entity
|
||||||
this.removeItemNoUpdate(0);
|
this.removeItemNoUpdate(0);
|
||||||
}
|
}
|
||||||
@@ -493,7 +493,7 @@ index 8cc6f7fcf8da2498fab3a0e300da785c489a63cc..2c3dc9e0131071530eab9b7f0cabe4b8
|
|||||||
private final LevelAccessor level;
|
private final LevelAccessor level;
|
||||||
private final BlockPos pos;
|
private final BlockPos pos;
|
||||||
diff --git a/net/minecraft/world/level/block/DiodeBlock.java b/net/minecraft/world/level/block/DiodeBlock.java
|
diff --git a/net/minecraft/world/level/block/DiodeBlock.java b/net/minecraft/world/level/block/DiodeBlock.java
|
||||||
index a5b4b64b3feef04661c3dcd6eea29ffda7f0785c..c6511c1f40455b1c277542a4d71df453e7470e02 100644
|
index 1158bdc1993a1c8f907070d6190c5a7d02d4bdb6..0fccdb394438bc35cdd38741a9c91bb022741c3d 100644
|
||||||
--- a/net/minecraft/world/level/block/DiodeBlock.java
|
--- a/net/minecraft/world/level/block/DiodeBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/DiodeBlock.java
|
+++ b/net/minecraft/world/level/block/DiodeBlock.java
|
||||||
@@ -173,6 +173,7 @@ public abstract class DiodeBlock extends HorizontalDirectionalBlock {
|
@@ -173,6 +173,7 @@ public abstract class DiodeBlock extends HorizontalDirectionalBlock {
|
||||||
@@ -505,7 +505,7 @@ index a5b4b64b3feef04661c3dcd6eea29ffda7f0785c..c6511c1f40455b1c277542a4d71df453
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
diff --git a/net/minecraft/world/level/block/HopperBlock.java b/net/minecraft/world/level/block/HopperBlock.java
|
diff --git a/net/minecraft/world/level/block/HopperBlock.java b/net/minecraft/world/level/block/HopperBlock.java
|
||||||
index 2a6d5790ac3bc4984937c5b6d70f8f49f2c59116..3903871081cc670d7c4532a1ebf3934ff5e0e621 100644
|
index 3140269761935201882173e568004488147a4110..288215bb11c0b63db7c354d12995ac5756382404 100644
|
||||||
--- a/net/minecraft/world/level/block/HopperBlock.java
|
--- a/net/minecraft/world/level/block/HopperBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/HopperBlock.java
|
+++ b/net/minecraft/world/level/block/HopperBlock.java
|
||||||
@@ -38,7 +38,7 @@ import net.minecraft.world.phys.shapes.CollisionContext;
|
@@ -38,7 +38,7 @@ import net.minecraft.world.phys.shapes.CollisionContext;
|
||||||
@@ -568,10 +568,10 @@ index 2a6d5790ac3bc4984937c5b6d70f8f49f2c59116..3903871081cc670d7c4532a1ebf3934f
|
|||||||
+ // DivineMC end - lithium: sleeping_block_entity
|
+ // DivineMC end - lithium: sleeping_block_entity
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
|
diff --git a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
|
||||||
index ab9200d1b402374e71a9c3b09baf8f5b504ac365..515c0ef0952601ef9e39144ef86c8a48a0f8d267 100644
|
index 3dfd539f4453d9c47c99af36e7ba64400fc89a5c..9d6928f886b7fc164553144ff985e0e93d8635d1 100644
|
||||||
--- a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
|
--- a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
|
||||||
+++ b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
|
+++ b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
|
||||||
@@ -39,7 +39,7 @@ import net.minecraft.world.level.storage.ValueInput;
|
@@ -40,7 +40,7 @@ import net.minecraft.world.level.storage.ValueInput;
|
||||||
import net.minecraft.world.level.storage.ValueOutput;
|
import net.minecraft.world.level.storage.ValueOutput;
|
||||||
import net.minecraft.world.phys.Vec3;
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
|
||||||
@@ -580,7 +580,7 @@ index ab9200d1b402374e71a9c3b09baf8f5b504ac365..515c0ef0952601ef9e39144ef86c8a48
|
|||||||
protected static final int SLOT_INPUT = 0;
|
protected static final int SLOT_INPUT = 0;
|
||||||
protected static final int SLOT_FUEL = 1;
|
protected static final int SLOT_FUEL = 1;
|
||||||
protected static final int SLOT_RESULT = 2;
|
protected static final int SLOT_RESULT = 2;
|
||||||
@@ -164,6 +164,7 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
|
@@ -165,6 +165,7 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
|
||||||
this.recipesUsed.clear();
|
this.recipesUsed.clear();
|
||||||
this.recipesUsed.putAll(input.read("RecipesUsed", RECIPES_USED_CODEC).orElse(Map.of()));
|
this.recipesUsed.putAll(input.read("RecipesUsed", RECIPES_USED_CODEC).orElse(Map.of()));
|
||||||
this.cookSpeedMultiplier = input.getDoubleOr("Paper.CookSpeedMultiplier", 1); // Paper - cook speed multiplier API
|
this.cookSpeedMultiplier = input.getDoubleOr("Paper.CookSpeedMultiplier", 1); // Paper - cook speed multiplier API
|
||||||
@@ -588,7 +588,7 @@ index ab9200d1b402374e71a9c3b09baf8f5b504ac365..515c0ef0952601ef9e39144ef86c8a48
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -285,6 +286,12 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
|
@@ -286,6 +287,12 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
|
||||||
setChanged(level, pos, state);
|
setChanged(level, pos, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -601,7 +601,7 @@ index ab9200d1b402374e71a9c3b09baf8f5b504ac365..515c0ef0952601ef9e39144ef86c8a48
|
|||||||
if (usedLavaFromUnderneath) furnace.items.set(1, ItemStack.EMPTY); // Purpur - Furnace uses lava from underneath
|
if (usedLavaFromUnderneath) furnace.items.set(1, ItemStack.EMPTY); // Purpur - Furnace uses lava from underneath
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -544,4 +551,53 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
|
@@ -545,4 +552,53 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
|
||||||
this.getRecipesToAwardAndPopExperience(serverLevel, Vec3.atCenterOf(pos));
|
this.getRecipesToAwardAndPopExperience(serverLevel, Vec3.atCenterOf(pos));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -656,10 +656,10 @@ index ab9200d1b402374e71a9c3b09baf8f5b504ac365..515c0ef0952601ef9e39144ef86c8a48
|
|||||||
+ // DivineMC end - lithium: sleeping_block_entity
|
+ // DivineMC end - lithium: sleeping_block_entity
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/level/block/entity/BarrelBlockEntity.java b/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
|
diff --git a/net/minecraft/world/level/block/entity/BarrelBlockEntity.java b/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
|
||||||
index a4a4150beab8f2fa409a2d1d495a56679aecbae3..30cedca5e54d2da058e733cc44cff766920b46ff 100644
|
index 04f6b3c328377091734a111f5a219379e32b5640..cec2996063356d0b1ac52d479b0e2ce3c5fa5078 100644
|
||||||
--- a/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
|
--- a/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
|
||||||
+++ b/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
|
+++ b/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
|
||||||
@@ -22,7 +22,7 @@ import net.minecraft.world.level.block.state.BlockState;
|
@@ -23,7 +23,7 @@ import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.storage.ValueInput;
|
import net.minecraft.world.level.storage.ValueInput;
|
||||||
import net.minecraft.world.level.storage.ValueOutput;
|
import net.minecraft.world.level.storage.ValueOutput;
|
||||||
|
|
||||||
@@ -668,7 +668,7 @@ index a4a4150beab8f2fa409a2d1d495a56679aecbae3..30cedca5e54d2da058e733cc44cff766
|
|||||||
// CraftBukkit start - add fields and methods
|
// CraftBukkit start - add fields and methods
|
||||||
public java.util.List<org.bukkit.entity.HumanEntity> transaction = new java.util.ArrayList<>();
|
public java.util.List<org.bukkit.entity.HumanEntity> transaction = new java.util.ArrayList<>();
|
||||||
private int maxStack = MAX_STACK;
|
private int maxStack = MAX_STACK;
|
||||||
@@ -139,6 +139,7 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity {
|
@@ -140,6 +140,7 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity {
|
||||||
@Override
|
@Override
|
||||||
protected void setItems(NonNullList<ItemStack> items) {
|
protected void setItems(NonNullList<ItemStack> items) {
|
||||||
this.items = items;
|
this.items = items;
|
||||||
@@ -676,7 +676,7 @@ index a4a4150beab8f2fa409a2d1d495a56679aecbae3..30cedca5e54d2da058e733cc44cff766
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -197,4 +198,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity {
|
@@ -198,4 +199,16 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity {
|
||||||
double d2 = this.worldPosition.getZ() + 0.5 + unitVec3i.getZ() / 2.0;
|
double d2 = this.worldPosition.getZ() + 0.5 + unitVec3i.getZ() / 2.0;
|
||||||
this.level.playSound(null, d, d1, d2, sound, SoundSource.BLOCKS, 0.5F, this.level.random.nextFloat() * 0.1F + 0.9F);
|
this.level.playSound(null, d, d1, d2, sound, SoundSource.BLOCKS, 0.5F, this.level.random.nextFloat() * 0.1F + 0.9F);
|
||||||
}
|
}
|
||||||
@@ -894,10 +894,10 @@ index 9a9208d3716c2ed7fbcc5ea8518d4b7d3cb2296a..6a2f56e9925185813b84a70fdc870980
|
|||||||
+ // DivineMC end - lithium: sleeping_block_entity
|
+ // DivineMC end - lithium: sleeping_block_entity
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java b/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
|
diff --git a/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java b/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
|
||||||
index 8b9606c4a89ccea494a7ea55099161c236d4b772..acc14f050147583f1bf82edf74ae1317a8ec9761 100644
|
index 5b28e257982c911f4d8ffe286dc125b3f9b64ee4..960bbd0b2e4b17768e0c152ec1160cfb17dd8065 100644
|
||||||
--- a/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
|
--- a/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
|
||||||
+++ b/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
|
+++ b/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
|
||||||
@@ -24,7 +24,7 @@ import net.minecraft.world.level.block.state.BlockState;
|
@@ -26,7 +26,7 @@ import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.storage.ValueInput;
|
import net.minecraft.world.level.storage.ValueInput;
|
||||||
import net.minecraft.world.level.storage.ValueOutput;
|
import net.minecraft.world.level.storage.ValueOutput;
|
||||||
|
|
||||||
@@ -906,7 +906,7 @@ index 8b9606c4a89ccea494a7ea55099161c236d4b772..acc14f050147583f1bf82edf74ae1317
|
|||||||
private static final int INGREDIENT_SLOT = 3;
|
private static final int INGREDIENT_SLOT = 3;
|
||||||
private static final int FUEL_SLOT = 4;
|
private static final int FUEL_SLOT = 4;
|
||||||
private static final int[] SLOTS_FOR_UP = new int[]{3};
|
private static final int[] SLOTS_FOR_UP = new int[]{3};
|
||||||
@@ -136,6 +136,7 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
@@ -138,6 +138,7 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void serverTick(Level level, BlockPos pos, BlockState state, BrewingStandBlockEntity blockEntity) {
|
public static void serverTick(Level level, BlockPos pos, BlockState state, BrewingStandBlockEntity blockEntity) {
|
||||||
@@ -914,7 +914,7 @@ index 8b9606c4a89ccea494a7ea55099161c236d4b772..acc14f050147583f1bf82edf74ae1317
|
|||||||
ItemStack itemStack = blockEntity.items.get(4);
|
ItemStack itemStack = blockEntity.items.get(4);
|
||||||
if (blockEntity.fuel <= 0 && itemStack.is(ItemTags.BREWING_FUEL)) {
|
if (blockEntity.fuel <= 0 && itemStack.is(ItemTags.BREWING_FUEL)) {
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
@@ -153,6 +154,7 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
@@ -155,6 +156,7 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
||||||
itemStack.shrink(1);
|
itemStack.shrink(1);
|
||||||
}
|
}
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
@@ -922,7 +922,7 @@ index 8b9606c4a89ccea494a7ea55099161c236d4b772..acc14f050147583f1bf82edf74ae1317
|
|||||||
setChanged(level, pos, state);
|
setChanged(level, pos, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,7 +169,7 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
@@ -169,7 +171,7 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
||||||
} else if (!isBrewable || !itemStack1.is(blockEntity.ingredient)) {
|
} else if (!isBrewable || !itemStack1.is(blockEntity.ingredient)) {
|
||||||
blockEntity.brewTime = 0;
|
blockEntity.brewTime = 0;
|
||||||
}
|
}
|
||||||
@@ -931,7 +931,7 @@ index 8b9606c4a89ccea494a7ea55099161c236d4b772..acc14f050147583f1bf82edf74ae1317
|
|||||||
setChanged(level, pos, state);
|
setChanged(level, pos, state);
|
||||||
} else if (isBrewable && blockEntity.fuel > 0) {
|
} else if (isBrewable && blockEntity.fuel > 0) {
|
||||||
blockEntity.fuel--;
|
blockEntity.fuel--;
|
||||||
@@ -180,6 +182,7 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
@@ -182,6 +184,7 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
||||||
blockEntity.brewTime = event.getBrewingTime(); // 400 -> event.getTotalBrewTime() // Paper - use brewing time from event
|
blockEntity.brewTime = event.getBrewingTime(); // 400 -> event.getTotalBrewTime() // Paper - use brewing time from event
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
blockEntity.ingredient = itemStack1.getItem();
|
blockEntity.ingredient = itemStack1.getItem();
|
||||||
@@ -939,7 +939,7 @@ index 8b9606c4a89ccea494a7ea55099161c236d4b772..acc14f050147583f1bf82edf74ae1317
|
|||||||
setChanged(level, pos, state);
|
setChanged(level, pos, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,6 +289,7 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
@@ -288,6 +291,7 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
||||||
}
|
}
|
||||||
|
|
||||||
this.fuel = input.getByteOr("Fuel", (byte)0);
|
this.fuel = input.getByteOr("Fuel", (byte)0);
|
||||||
@@ -947,7 +947,7 @@ index 8b9606c4a89ccea494a7ea55099161c236d4b772..acc14f050147583f1bf82edf74ae1317
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -332,4 +336,53 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
@@ -334,4 +338,53 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
|
||||||
protected AbstractContainerMenu createMenu(int id, Inventory player) {
|
protected AbstractContainerMenu createMenu(int id, Inventory player) {
|
||||||
return new BrewingStandMenu(id, player, this, this.dataAccess);
|
return new BrewingStandMenu(id, player, this, this.dataAccess);
|
||||||
}
|
}
|
||||||
@@ -1002,10 +1002,10 @@ index 8b9606c4a89ccea494a7ea55099161c236d4b772..acc14f050147583f1bf82edf74ae1317
|
|||||||
+ // DivineMC end - lithium: sleeping_block_entity
|
+ // DivineMC end - lithium: sleeping_block_entity
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/level/block/entity/CampfireBlockEntity.java b/net/minecraft/world/level/block/entity/CampfireBlockEntity.java
|
diff --git a/net/minecraft/world/level/block/entity/CampfireBlockEntity.java b/net/minecraft/world/level/block/entity/CampfireBlockEntity.java
|
||||||
index fb7932e17d7d00ee3050e71c88510fa23befb1bb..d4f8dc6e37eea8da251e3dfb917607a79f6f08cf 100644
|
index 78c4d1fc052d72f8599c82291d2233ec2e552137..306c5bf630b295d27e5b1885bd784bbfbc846812 100644
|
||||||
--- a/net/minecraft/world/level/block/entity/CampfireBlockEntity.java
|
--- a/net/minecraft/world/level/block/entity/CampfireBlockEntity.java
|
||||||
+++ b/net/minecraft/world/level/block/entity/CampfireBlockEntity.java
|
+++ b/net/minecraft/world/level/block/entity/CampfireBlockEntity.java
|
||||||
@@ -38,7 +38,7 @@ import net.minecraft.world.level.storage.ValueInput;
|
@@ -39,7 +39,7 @@ import net.minecraft.world.level.storage.ValueInput;
|
||||||
import net.minecraft.world.level.storage.ValueOutput;
|
import net.minecraft.world.level.storage.ValueOutput;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
@@ -1014,7 +1014,7 @@ index fb7932e17d7d00ee3050e71c88510fa23befb1bb..d4f8dc6e37eea8da251e3dfb917607a7
|
|||||||
private static final Logger LOGGER = LogUtils.getLogger();
|
private static final Logger LOGGER = LogUtils.getLogger();
|
||||||
private static final int BURN_COOL_SPEED = 2;
|
private static final int BURN_COOL_SPEED = 2;
|
||||||
private static final int NUM_SLOTS = 4;
|
private static final int NUM_SLOTS = 4;
|
||||||
@@ -112,7 +112,11 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
|
@@ -113,7 +113,11 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
|
||||||
|
|
||||||
if (flag) {
|
if (flag) {
|
||||||
setChanged(level, pos, state);
|
setChanged(level, pos, state);
|
||||||
@@ -1026,7 +1026,7 @@ index fb7932e17d7d00ee3050e71c88510fa23befb1bb..d4f8dc6e37eea8da251e3dfb917607a7
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void cooldownTick(Level level, BlockPos pos, BlockState state, CampfireBlockEntity blockEntity) {
|
public static void cooldownTick(Level level, BlockPos pos, BlockState state, CampfireBlockEntity blockEntity) {
|
||||||
@@ -127,7 +131,11 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
|
@@ -128,7 +132,11 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
|
||||||
|
|
||||||
if (flag) {
|
if (flag) {
|
||||||
setChanged(level, pos, state);
|
setChanged(level, pos, state);
|
||||||
@@ -1038,7 +1038,7 @@ index fb7932e17d7d00ee3050e71c88510fa23befb1bb..d4f8dc6e37eea8da251e3dfb917607a7
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void particleTick(Level level, BlockPos pos, BlockState state, CampfireBlockEntity blockEntity) {
|
public static void particleTick(Level level, BlockPos pos, BlockState state, CampfireBlockEntity blockEntity) {
|
||||||
@@ -183,6 +191,7 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
|
@@ -184,6 +192,7 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
|
||||||
System.arraycopy(cookingState, 0, this.stopCooking, 0, Math.min(this.stopCooking.length, bytes.capacity()));
|
System.arraycopy(cookingState, 0, this.stopCooking, 0, Math.min(this.stopCooking.length, bytes.capacity()));
|
||||||
});
|
});
|
||||||
// Paper end - Add more Campfire API
|
// Paper end - Add more Campfire API
|
||||||
@@ -1046,7 +1046,7 @@ index fb7932e17d7d00ee3050e71c88510fa23befb1bb..d4f8dc6e37eea8da251e3dfb917607a7
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -237,6 +246,7 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
|
@@ -238,6 +247,7 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
|
||||||
this.cookingTime[i] = event.getTotalCookTime(); // i -> event.getTotalCookTime()
|
this.cookingTime[i] = event.getTotalCookTime(); // i -> event.getTotalCookTime()
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
this.cookingProgress[i] = 0;
|
this.cookingProgress[i] = 0;
|
||||||
@@ -1054,7 +1054,7 @@ index fb7932e17d7d00ee3050e71c88510fa23befb1bb..d4f8dc6e37eea8da251e3dfb917607a7
|
|||||||
this.items.set(i, stack.consumeAndReturn(1, entity));
|
this.items.set(i, stack.consumeAndReturn(1, entity));
|
||||||
level.gameEvent(GameEvent.BLOCK_CHANGE, this.getBlockPos(), GameEvent.Context.of(entity, this.getBlockState()));
|
level.gameEvent(GameEvent.BLOCK_CHANGE, this.getBlockPos(), GameEvent.Context.of(entity, this.getBlockState()));
|
||||||
this.markUpdated();
|
this.markUpdated();
|
||||||
@@ -280,4 +290,30 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
|
@@ -281,4 +291,30 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable {
|
||||||
public void removeComponentsFromTag(ValueOutput output) {
|
public void removeComponentsFromTag(ValueOutput output) {
|
||||||
output.discard("Items");
|
output.discard("Items");
|
||||||
}
|
}
|
||||||
@@ -1175,10 +1175,10 @@ index 6b1299c20573ca009f6bffce829a4a593f548fce..e36049d044d7adc7e587c1c825fba36c
|
|||||||
+ // DivineMC end - lithium: sleeping_block_entity
|
+ // DivineMC end - lithium: sleeping_block_entity
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java b/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java
|
diff --git a/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java b/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java
|
||||||
index 986d3fb65f3bbcb0357b9764ac4f338d64cb62c9..bfbf72f9f44b0239f92f188074016f6192641992 100644
|
index 25cde0c41ef94f9fb602ed346baad7b4b0ae77f9..c2ee7d85356a7ba4dc53197d2bb0911ad971d82e 100644
|
||||||
--- a/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java
|
--- a/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java
|
||||||
+++ b/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java
|
+++ b/net/minecraft/world/level/block/entity/ChiseledBookShelfBlockEntity.java
|
||||||
@@ -21,7 +21,7 @@ import net.minecraft.world.level.storage.ValueInput;
|
@@ -22,7 +22,7 @@ import net.minecraft.world.level.storage.ValueInput;
|
||||||
import net.minecraft.world.level.storage.ValueOutput;
|
import net.minecraft.world.level.storage.ValueOutput;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
@@ -1187,7 +1187,7 @@ index 986d3fb65f3bbcb0357b9764ac4f338d64cb62c9..bfbf72f9f44b0239f92f188074016f61
|
|||||||
public static final int MAX_BOOKS_IN_STORAGE = 6;
|
public static final int MAX_BOOKS_IN_STORAGE = 6;
|
||||||
private static final Logger LOGGER = LogUtils.getLogger();
|
private static final Logger LOGGER = LogUtils.getLogger();
|
||||||
private static final int DEFAULT_LAST_INTERACTED_SLOT = -1;
|
private static final int DEFAULT_LAST_INTERACTED_SLOT = -1;
|
||||||
@@ -170,4 +170,11 @@ public class ChiseledBookShelfBlockEntity extends BlockEntity implements ListBac
|
@@ -171,4 +171,11 @@ public class ChiseledBookShelfBlockEntity extends BlockEntity implements ListBac
|
||||||
public void removeComponentsFromTag(ValueOutput output) {
|
public void removeComponentsFromTag(ValueOutput output) {
|
||||||
output.discard("Items");
|
output.discard("Items");
|
||||||
}
|
}
|
||||||
@@ -1200,10 +1200,10 @@ index 986d3fb65f3bbcb0357b9764ac4f338d64cb62c9..bfbf72f9f44b0239f92f188074016f61
|
|||||||
+ // DivineMC end - lithium: sleeping_block_entity
|
+ // DivineMC end - lithium: sleeping_block_entity
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/level/block/entity/CrafterBlockEntity.java b/net/minecraft/world/level/block/entity/CrafterBlockEntity.java
|
diff --git a/net/minecraft/world/level/block/entity/CrafterBlockEntity.java b/net/minecraft/world/level/block/entity/CrafterBlockEntity.java
|
||||||
index 09f937e826b2a87d11a739e1398cc83a9f84e7e3..d36f925f675d485f8ad86d43b048e6911a918602 100644
|
index ffb5f2a07afcd6a3df0442ba48faa1557184d27c..8db1c47dd2f5c2165efc88954c6bb53015e9a4cf 100644
|
||||||
--- a/net/minecraft/world/level/block/entity/CrafterBlockEntity.java
|
--- a/net/minecraft/world/level/block/entity/CrafterBlockEntity.java
|
||||||
+++ b/net/minecraft/world/level/block/entity/CrafterBlockEntity.java
|
+++ b/net/minecraft/world/level/block/entity/CrafterBlockEntity.java
|
||||||
@@ -22,7 +22,7 @@ import net.minecraft.world.level.block.state.BlockState;
|
@@ -23,7 +23,7 @@ import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraft.world.level.storage.ValueInput;
|
import net.minecraft.world.level.storage.ValueInput;
|
||||||
import net.minecraft.world.level.storage.ValueOutput;
|
import net.minecraft.world.level.storage.ValueOutput;
|
||||||
|
|
||||||
@@ -1212,7 +1212,7 @@ index 09f937e826b2a87d11a739e1398cc83a9f84e7e3..d36f925f675d485f8ad86d43b048e691
|
|||||||
public static final int CONTAINER_WIDTH = 3;
|
public static final int CONTAINER_WIDTH = 3;
|
||||||
public static final int CONTAINER_HEIGHT = 3;
|
public static final int CONTAINER_HEIGHT = 3;
|
||||||
public static final int CONTAINER_SIZE = 9;
|
public static final int CONTAINER_SIZE = 9;
|
||||||
@@ -170,6 +170,7 @@ public class CrafterBlockEntity extends RandomizableContainerBlockEntity impleme
|
@@ -171,6 +171,7 @@ public class CrafterBlockEntity extends RandomizableContainerBlockEntity impleme
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.containerData.set(9, input.getIntOr("triggered", 0));
|
this.containerData.set(9, input.getIntOr("triggered", 0));
|
||||||
@@ -1220,8 +1220,8 @@ index 09f937e826b2a87d11a739e1398cc83a9f84e7e3..d36f925f675d485f8ad86d43b048e691
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -279,10 +280,12 @@ public class CrafterBlockEntity extends RandomizableContainerBlockEntity impleme
|
@@ -280,10 +281,12 @@ public class CrafterBlockEntity extends RandomizableContainerBlockEntity impleme
|
||||||
level.setBlock(pos, state.setValue(CrafterBlock.CRAFTING, false), 3);
|
level.setBlock(pos, state.setValue(CrafterBlock.CRAFTING, false), Block.UPDATE_ALL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+ if (org.bxteam.divinemc.config.DivineConfig.PerformanceCategory.sleepingBlockEntity && i < 0) crafter.checkSleep(); // DivineMC - lithium: sleeping_block_entity
|
+ if (org.bxteam.divinemc.config.DivineConfig.PerformanceCategory.sleepingBlockEntity && i < 0) crafter.checkSleep(); // DivineMC - lithium: sleeping_block_entity
|
||||||
@@ -1233,7 +1233,7 @@ index 09f937e826b2a87d11a739e1398cc83a9f84e7e3..d36f925f675d485f8ad86d43b048e691
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int getRedstoneSignal() {
|
public int getRedstoneSignal() {
|
||||||
@@ -301,4 +304,43 @@ public class CrafterBlockEntity extends RandomizableContainerBlockEntity impleme
|
@@ -302,4 +305,43 @@ public class CrafterBlockEntity extends RandomizableContainerBlockEntity impleme
|
||||||
private boolean slotCanBeDisabled(int slot) {
|
private boolean slotCanBeDisabled(int slot) {
|
||||||
return slot > -1 && slot < 9 && this.items.get(slot).isEmpty();
|
return slot > -1 && slot < 9 && this.items.get(slot).isEmpty();
|
||||||
}
|
}
|
||||||
@@ -2260,7 +2260,7 @@ index daf4f28d04a1ad1e034c6d7dedba9e4e2272f2ea..3afb0ce74c5378ce909c1a1e6182aaae
|
|||||||
+ }
|
+ }
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
|
diff --git a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
|
||||||
index d0880daad9d43e0b3a8d6010fcc114344df9e58a..94685824a6ab1373e9d888e8d02d464d769dd918 100644
|
index 4d268864656ad67e6971b74534e25ac47d922cbd..a2af20103729392df0167a632672ae11caf05340 100644
|
||||||
--- a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
|
--- a/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
|
||||||
+++ b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
|
+++ b/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
|
||||||
@@ -32,7 +32,7 @@ import net.minecraft.world.level.storage.ValueOutput;
|
@@ -32,7 +32,7 @@ import net.minecraft.world.level.storage.ValueOutput;
|
||||||
@@ -2337,7 +2337,7 @@ index d0880daad9d43e0b3a8d6010fcc114344df9e58a..94685824a6ab1373e9d888e8d02d464d
|
|||||||
+ // DivineMC end - lithium: sleeping_block_entity
|
+ // DivineMC end - lithium: sleeping_block_entity
|
||||||
}
|
}
|
||||||
diff --git a/net/minecraft/world/level/block/state/BlockBehaviour.java b/net/minecraft/world/level/block/state/BlockBehaviour.java
|
diff --git a/net/minecraft/world/level/block/state/BlockBehaviour.java b/net/minecraft/world/level/block/state/BlockBehaviour.java
|
||||||
index 611b29ccba29558d8cf54eccb2136a305bf989db..f7362eb5e7f42eac024dc3a89ecb6a46073fc834 100644
|
index a6c99a119a923dd890169888ff4e9852f6e27855..754a4c463c3706512fc42fd3ad32841fc8320709 100644
|
||||||
--- a/net/minecraft/world/level/block/state/BlockBehaviour.java
|
--- a/net/minecraft/world/level/block/state/BlockBehaviour.java
|
||||||
+++ b/net/minecraft/world/level/block/state/BlockBehaviour.java
|
+++ b/net/minecraft/world/level/block/state/BlockBehaviour.java
|
||||||
@@ -84,7 +84,7 @@ import net.minecraft.world.phys.shapes.CollisionContext;
|
@@ -84,7 +84,7 @@ import net.minecraft.world.phys.shapes.CollisionContext;
|
||||||
@@ -2358,10 +2358,10 @@ index 611b29ccba29558d8cf54eccb2136a305bf989db..f7362eb5e7f42eac024dc3a89ecb6a46
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
|
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
index 60f3567ef70a82ad1704aec3135e6a72f5033e12..3cd9d7cb9b9506874b7f7a242324ac122a5d1844 100644
|
index acddfe7fdd4305ba832af62d607a06213b29469d..d0c6cbb27237dca9028ec66f95886bcbeaf05dc2 100644
|
||||||
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
|
||||||
@@ -931,12 +931,14 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
@@ -933,12 +933,14 @@ public class LevelChunk extends ChunkAccess implements DebugValueSource, ca.spot
|
||||||
(pos, ticker1) -> {
|
(pos, ticker1) -> {
|
||||||
TickingBlockEntity tickingBlockEntity = this.createTicker(blockEntity, ticker);
|
TickingBlockEntity tickingBlockEntity = this.createTicker(blockEntity, ticker);
|
||||||
if (ticker1 != null) {
|
if (ticker1 != null) {
|
||||||
@@ -187,10 +187,10 @@ index 1e00a7bd89d885cabb4b9ca3c86fbd8cd93cebf5..4fb31f578c2a4a5dc137c38de8f64159
|
|||||||
+ // DivineMC end - lithium: equipment_tracking
|
+ // DivineMC end - lithium: equipment_tracking
|
||||||
}
|
}
|
||||||
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 ca392664826ca8ced5a1c2c8b2d22eb87c5bd139..c08fb102fb9d325cf7c41e32b32833e70474fecb 100644
|
index 7ec1c2f39981b60343f152a5432b3677574ee46c..e3e64a0bf7b8b9e04114a2b0b363932517deea0f 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
|
||||||
@@ -439,9 +439,17 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -440,9 +440,17 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
this.getSleepingPos().ifPresent(this::setPosToBed);
|
this.getSleepingPos().ifPresent(this::setPosToBed);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -210,7 +210,7 @@ index ca392664826ca8ced5a1c2c8b2d22eb87c5bd139..c08fb102fb9d325cf7c41e32b32833e7
|
|||||||
|
|
||||||
super.baseTick();
|
super.baseTick();
|
||||||
if (this.isAlive() && this.level() instanceof ServerLevel serverLevel1) {
|
if (this.isAlive() && this.level() instanceof ServerLevel serverLevel1) {
|
||||||
@@ -3451,6 +3459,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -3454,6 +3462,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
public void detectEquipmentUpdates() {
|
public void detectEquipmentUpdates() {
|
||||||
Map<EquipmentSlot, ItemStack> map = this.collectEquipmentChanges();
|
Map<EquipmentSlot, ItemStack> map = this.collectEquipmentChanges();
|
||||||
if (map != null) {
|
if (map != null) {
|
||||||
@@ -218,7 +218,7 @@ index ca392664826ca8ced5a1c2c8b2d22eb87c5bd139..c08fb102fb9d325cf7c41e32b32833e7
|
|||||||
this.handleHandSwap(map);
|
this.handleHandSwap(map);
|
||||||
if (!map.isEmpty()) {
|
if (!map.isEmpty()) {
|
||||||
this.handleEquipmentChanges(map);
|
this.handleEquipmentChanges(map);
|
||||||
@@ -3460,6 +3469,14 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -3463,6 +3472,14 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private Map<EquipmentSlot, ItemStack> collectEquipmentChanges() {
|
private Map<EquipmentSlot, ItemStack> collectEquipmentChanges() {
|
||||||
@@ -234,10 +234,10 @@ index ca392664826ca8ced5a1c2c8b2d22eb87c5bd139..c08fb102fb9d325cf7c41e32b32833e7
|
|||||||
// Paper start - EntityEquipmentChangedEvent
|
// Paper start - EntityEquipmentChangedEvent
|
||||||
record EquipmentChangeImpl(org.bukkit.inventory.ItemStack oldItem, org.bukkit.inventory.ItemStack newItem) implements io.papermc.paper.event.entity.EntityEquipmentChangedEvent.EquipmentChange {
|
record EquipmentChangeImpl(org.bukkit.inventory.ItemStack oldItem, org.bukkit.inventory.ItemStack newItem) implements io.papermc.paper.event.entity.EntityEquipmentChangedEvent.EquipmentChange {
|
||||||
diff --git a/net/minecraft/world/entity/decoration/ArmorStand.java b/net/minecraft/world/entity/decoration/ArmorStand.java
|
diff --git a/net/minecraft/world/entity/decoration/ArmorStand.java b/net/minecraft/world/entity/decoration/ArmorStand.java
|
||||||
index 03a350b91948b8309a74edb5e1f35d336316ff34..71f9dac6d592a41d80d7563d3f71884e26d3ece4 100644
|
index 9a298e111b9142dd878ee03b442d1110a9e0897e..ff3a4d740631d9f353cf1812f124b68aac144f64 100644
|
||||||
--- a/net/minecraft/world/entity/decoration/ArmorStand.java
|
--- a/net/minecraft/world/entity/decoration/ArmorStand.java
|
||||||
+++ b/net/minecraft/world/entity/decoration/ArmorStand.java
|
+++ b/net/minecraft/world/entity/decoration/ArmorStand.java
|
||||||
@@ -528,8 +528,9 @@ public class ArmorStand extends LivingEntity {
|
@@ -529,8 +529,9 @@ public class ArmorStand extends LivingEntity {
|
||||||
maxUpStep = level().purpurConfig.armorstandStepHeight; // Purpur - Add option to set armorstand step height
|
maxUpStep = level().purpurConfig.armorstandStepHeight; // Purpur - Add option to set armorstand step height
|
||||||
if (!this.canTick) {
|
if (!this.canTick) {
|
||||||
if (this.noTickEquipmentDirty) {
|
if (this.noTickEquipmentDirty) {
|
||||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable Files Locations
|
|||||||
|
|
||||||
|
|
||||||
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 a11f16112bbc064f5fa011574f7f495a04737374..6284c770132d63b9569ca967ac14d367148177d6 100644
|
index eb3f3a2d70de239b8324b35529987daf70202042..c5c24720058be1782ec71905ae04c8448fc902d7 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
|
||||||
@@ -99,10 +99,12 @@ import net.minecraft.world.scores.Team;
|
@@ -100,10 +100,12 @@ import net.minecraft.world.scores.Team;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
public abstract class PlayerList {
|
public abstract class PlayerList {
|
||||||
@@ -25,7 +25,7 @@ index a11f16112bbc064f5fa011574f7f495a04737374..6284c770132d63b9569ca967ac14d367
|
|||||||
public static final Component CHAT_FILTERED_FULL = Component.translatable("chat.filtered_full");
|
public static final Component CHAT_FILTERED_FULL = Component.translatable("chat.filtered_full");
|
||||||
public static final Component DUPLICATE_LOGIN_DISCONNECT_MESSAGE = Component.translatable("multiplayer.disconnect.duplicate_login");
|
public static final Component DUPLICATE_LOGIN_DISCONNECT_MESSAGE = Component.translatable("multiplayer.disconnect.duplicate_login");
|
||||||
private static final Logger LOGGER = LogUtils.getLogger();
|
private static final Logger LOGGER = LogUtils.getLogger();
|
||||||
@@ -140,10 +142,17 @@ public abstract class PlayerList {
|
@@ -141,10 +143,17 @@ public abstract class PlayerList {
|
||||||
this.server = server;
|
this.server = server;
|
||||||
this.registries = registries;
|
this.registries = registries;
|
||||||
this.playerIo = playerIo;
|
this.playerIo = playerIo;
|
||||||
@@ -10,7 +10,7 @@ As part of: Pufferfish (https://github.com/pufferfish-gg/Pufferfish)
|
|||||||
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
|
Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html)
|
||||||
|
|
||||||
diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java
|
diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java
|
||||||
index 226088405c019922085285ba5d04d7c131470c69..61bf86a1380060ff118c31b5070b28705a897529 100644
|
index 5d9089d98ed0daa8ee680123e50c3ce9abd2bca6..04623779031daa2f0d8e9c149f0b40388cb2bd8b 100644
|
||||||
--- a/io/papermc/paper/entity/activation/ActivationRange.java
|
--- a/io/papermc/paper/entity/activation/ActivationRange.java
|
||||||
+++ b/io/papermc/paper/entity/activation/ActivationRange.java
|
+++ b/io/papermc/paper/entity/activation/ActivationRange.java
|
||||||
@@ -238,7 +238,7 @@ public final class ActivationRange {
|
@@ -238,7 +238,7 @@ public final class ActivationRange {
|
||||||
@@ -23,10 +23,10 @@ index 226088405c019922085285ba5d04d7c131470c69..61bf86a1380060ff118c31b5070b2870
|
|||||||
}
|
}
|
||||||
if (entity instanceof final Mob mob && mob.getTarget() != null) {
|
if (entity instanceof final Mob mob && mob.getTarget() != null) {
|
||||||
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 c08fb102fb9d325cf7c41e32b32833e70474fecb..3533a8fe46f255025db70242b214fcd51916a6d0 100644
|
index e3e64a0bf7b8b9e04114a2b0b363932517deea0f..ad3e68127ba84bdc18f738dbf709099a50aa8216 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
|
||||||
@@ -2243,6 +2243,20 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -2244,6 +2244,20 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
||||||
return this.lastClimbablePos;
|
return this.lastClimbablePos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
--- 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
|
||||||
@@ -2344,6 +_,7 @@
|
@@ -2345,6 +_,7 @@
|
||||||
this.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.CHANGE_GAME_MODE, gameMode.getId()));
|
this.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.CHANGE_GAME_MODE, gameMode.getId()));
|
||||||
if (gameMode == GameType.SPECTATOR) {
|
if (gameMode == GameType.SPECTATOR) {
|
||||||
this.removeEntitiesOnShoulder();
|
this.removeEntitiesOnShoulder();
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
@@ -315,6 +_,7 @@
|
@@ -316,6 +_,7 @@
|
||||||
private static final int MAX_SIGN_LINE_LENGTH = Integer.getInteger("Paper.maxSignLength", 80); // Paper - Limit client sign length
|
private static final int MAX_SIGN_LINE_LENGTH = Integer.getInteger("Paper.maxSignLength", 80); // Paper - Limit client sign length
|
||||||
private final io.papermc.paper.event.packet.ClientTickEndEvent tickEndEvent; // Paper - add client tick end event
|
private final io.papermc.paper.event.packet.ClientTickEndEvent tickEndEvent; // Paper - add client tick end event
|
||||||
public final io.papermc.paper.connection.PaperPlayerGameConnection playerGameConnection; // Paper
|
public final io.papermc.paper.connection.PaperPlayerGameConnection playerGameConnection; // Paper
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
public ServerGamePacketListenerImpl(MinecraftServer server, Connection connection, ServerPlayer player, CommonListenerCookie cookie) {
|
public ServerGamePacketListenerImpl(MinecraftServer server, Connection connection, ServerPlayer player, CommonListenerCookie cookie) {
|
||||||
super(server, connection, cookie);
|
super(server, connection, cookie);
|
||||||
@@ -326,6 +_,7 @@
|
@@ -327,6 +_,7 @@
|
||||||
this.chatMessageChain = new FutureChain(server.chatExecutor); // CraftBukkit - async chat
|
this.chatMessageChain = new FutureChain(server.chatExecutor); // CraftBukkit - async chat
|
||||||
this.tickEndEvent = new io.papermc.paper.event.packet.ClientTickEndEvent(player.getBukkitEntity()); // Paper - add client tick end event
|
this.tickEndEvent = new io.papermc.paper.event.packet.ClientTickEndEvent(player.getBukkitEntity()); // Paper - add client tick end event
|
||||||
this.playerGameConnection = new io.papermc.paper.connection.PaperPlayerGameConnection(this); // Paper
|
this.playerGameConnection = new io.papermc.paper.connection.PaperPlayerGameConnection(this); // Paper
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--- 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
|
||||||
@@ -1025,6 +_,7 @@
|
@@ -1026,6 +_,7 @@
|
||||||
player.connection.send(new ClientboundSetChunkCacheRadiusPacket(level.spigotConfig.viewDistance));
|
player.connection.send(new ClientboundSetChunkCacheRadiusPacket(level.spigotConfig.viewDistance));
|
||||||
player.connection.send(new ClientboundSetSimulationDistancePacket(level.spigotConfig.simulationDistance));
|
player.connection.send(new ClientboundSetSimulationDistancePacket(level.spigotConfig.simulationDistance));
|
||||||
// Paper end
|
// Paper end
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--- 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
|
||||||
@@ -756,6 +_,7 @@
|
@@ -757,6 +_,7 @@
|
||||||
|
|
||||||
super.remove(reason, eventCause); // CraftBukkit
|
super.remove(reason, eventCause); // CraftBukkit
|
||||||
this.brain.clearMemories();
|
this.brain.clearMemories();
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1431,7 +_,7 @@
|
@@ -1432,7 +_,7 @@
|
||||||
player.setRealHealth(health);
|
player.setRealHealth(health);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
@@ -2799,6 +_,7 @@
|
@@ -2802,6 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void updateSwingTime() {
|
protected void updateSwingTime() {
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
int currentSwingDuration = this.getCurrentSwingDuration();
|
int currentSwingDuration = this.getCurrentSwingDuration();
|
||||||
if (this.swinging) {
|
if (this.swinging) {
|
||||||
this.swingTime++;
|
this.swingTime++;
|
||||||
@@ -3315,7 +_,13 @@
|
@@ -3318,7 +_,13 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
protected float getFlyingSpeed() {
|
protected float getFlyingSpeed() {
|
||||||
@@ -40,11 +40,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
public float getSpeed() {
|
public float getSpeed() {
|
||||||
@@ -3764,6 +_,7 @@
|
@@ -3767,6 +_,7 @@
|
||||||
protected void updateFallFlying() {
|
protected void updateFallFlying() {
|
||||||
this.checkFallDistanceAccumulation();
|
this.checkFallDistanceAccumulation();
|
||||||
if (!this.level().isClientSide()) {
|
if (!this.level().isClientSide()) {
|
||||||
+ if (!this.isFallFlying() && this.fallFlyTicks == 0) return; // DivineMC - lithium: entity.fast_elytra_check
|
+ if (!this.isFallFlying() && this.fallFlyTicks == 0) return; // DivineMC - lithium: entity.fast_elytra_check
|
||||||
if (!this.canGlide()) {
|
if (!this.canGlide()) {
|
||||||
if (this.getSharedFlag(7) != false && !CraftEventFactory.callToggleGlideEvent(this, false).isCancelled()) // CraftBukkit
|
if (this.getSharedFlag(7) != false && !CraftEventFactory.callToggleGlideEvent(this, false).isCancelled()) // CraftBukkit
|
||||||
this.setSharedFlag(7, false);
|
this.setSharedFlag(Entity.FLAG_FALL_FLYING, false);
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
--- a/net/minecraft/world/entity/monster/ZombieVillager.java
|
--- a/net/minecraft/world/entity/monster/ZombieVillager.java
|
||||||
+++ b/net/minecraft/world/entity/monster/ZombieVillager.java
|
+++ b/net/minecraft/world/entity/monster/ZombieVillager.java
|
||||||
@@ -301,6 +_,12 @@
|
@@ -303,6 +_,12 @@
|
||||||
if (!this.isSilent()) {
|
if (!this.isSilent()) {
|
||||||
level.levelEvent(null, 1027, this.blockPosition(), 0);
|
level.levelEvent(null, LevelEvent.SOUND_ZOMBIE_CONVERTED, this.blockPosition(), 0);
|
||||||
}
|
}
|
||||||
+
|
+
|
||||||
+ // DivineMC start - Fix MC-200418
|
+ // DivineMC start - Fix MC-200418
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--- a/net/minecraft/world/entity/player/Player.java
|
--- a/net/minecraft/world/entity/player/Player.java
|
||||||
+++ b/net/minecraft/world/entity/player/Player.java
|
+++ b/net/minecraft/world/entity/player/Player.java
|
||||||
@@ -1669,6 +_,7 @@
|
@@ -1670,6 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public void causeFoodExhaustion(float exhaustion, org.bukkit.event.entity.EntityExhaustionEvent.ExhaustionReason reason) {
|
public void causeFoodExhaustion(float exhaustion, org.bukkit.event.entity.EntityExhaustionEvent.ExhaustionReason reason) {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--- a/net/minecraft/world/level/GameRules.java
|
--- a/net/minecraft/world/level/GameRules.java
|
||||||
+++ b/net/minecraft/world/level/GameRules.java
|
+++ b/net/minecraft/world/level/GameRules.java
|
||||||
@@ -299,7 +_,7 @@
|
@@ -300,7 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
private GameRules(Map<GameRules.Key<?>, GameRules.Value<?>> rules, FeatureFlagSet enabledFeatures) {
|
private GameRules(Map<GameRules.Key<?>, GameRules.Value<?>> rules, FeatureFlagSet enabledFeatures) {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--- a/net/minecraft/world/level/Level.java
|
--- a/net/minecraft/world/level/Level.java
|
||||||
+++ b/net/minecraft/world/level/Level.java
|
+++ b/net/minecraft/world/level/Level.java
|
||||||
@@ -111,7 +_,7 @@
|
@@ -112,7 +_,7 @@
|
||||||
.add(new ExplosionParticleInfo(ParticleTypes.POOF, 0.5F, 1.0F))
|
.add(new ExplosionParticleInfo(ParticleTypes.POOF, 0.5F, 1.0F))
|
||||||
.add(new ExplosionParticleInfo(ParticleTypes.SMOKE, 1.0F, 1.0F))
|
.add(new ExplosionParticleInfo(ParticleTypes.SMOKE, 1.0F, 1.0F))
|
||||||
.build();
|
.build();
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
protected final CollectingNeighborUpdater neighborUpdater;
|
protected final CollectingNeighborUpdater neighborUpdater;
|
||||||
private final List<TickingBlockEntity> pendingBlockEntityTickers = Lists.newArrayList();
|
private final List<TickingBlockEntity> pendingBlockEntityTickers = Lists.newArrayList();
|
||||||
private boolean tickingBlockEntities;
|
private boolean tickingBlockEntities;
|
||||||
@@ -1452,13 +_,11 @@
|
@@ -1453,13 +_,11 @@
|
||||||
boolean runsNormally = this.tickRateManager().runsNormally();
|
boolean runsNormally = this.tickRateManager().runsNormally();
|
||||||
|
|
||||||
int tickedEntities = 0; // Paper - rewrite chunk system
|
int tickedEntities = 0; // Paper - rewrite chunk system
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
} else if (runsNormally && this.shouldTickBlocksAt(tickingBlockEntity.getPos())) {
|
} else if (runsNormally && this.shouldTickBlocksAt(tickingBlockEntity.getPos())) {
|
||||||
tickingBlockEntity.tick();
|
tickingBlockEntity.tick();
|
||||||
// Paper start - rewrite chunk system
|
// Paper start - rewrite chunk system
|
||||||
@@ -1468,7 +_,7 @@
|
@@ -1469,7 +_,7 @@
|
||||||
// Paper end - rewrite chunk system
|
// Paper end - rewrite chunk system
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
emitState(level, pos, flag2, flag3, flag, flag1);
|
emitState(level, pos, flag2, flag3, flag, flag1);
|
||||||
if (!attaching) {
|
if (!attaching) {
|
||||||
- if (io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.skipTripwireHookPlacementValidation || level.getBlockState(pos).is(Blocks.TRIPWIRE_HOOK)) // Paper - Validate tripwire hook placement before update
|
- if (io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.skipTripwireHookPlacementValidation || level.getBlockState(pos).is(Blocks.TRIPWIRE_HOOK)) // Paper - Validate tripwire hook placement before update
|
||||||
level.setBlock(pos, blockState1.setValue(FACING, direction), 3);
|
level.setBlock(pos, blockState1.setValue(FACING, direction), Block.UPDATE_ALL);
|
||||||
if (shouldNotifyNeighbours) {
|
if (shouldNotifyNeighbours) {
|
||||||
notifyNeighbors(block, level, pos, direction);
|
notifyNeighbors(block, level, pos, direction);
|
||||||
@@ -200,10 +_,18 @@
|
@@ -200,10 +_,18 @@
|
||||||
|
|||||||
@@ -279,326 +279,311 @@ diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png
|
|||||||
index 518591dd83289e041a16e2c2e7d7e7640d4b2e1b..f54753531b3bf2e8b5377f342465e727c7da98f2 100644
|
index 518591dd83289e041a16e2c2e7d7e7640d4b2e1b..f54753531b3bf2e8b5377f342465e727c7da98f2 100644
|
||||||
GIT binary patch
|
GIT binary patch
|
||||||
literal 6677
|
literal 6677
|
||||||
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
|
DA-Nv<
|
||||||
z^isZD3%#zbVjEmmwYDifdlJ-c7O^6N>uS<rfzO32ou&0^%#B#HA0~F}+;L@LuVD6r
|
|
||||||
zP06tb4UX8vyt=@4<kgNf5#dHWhVCnzr6pdUNj<!4QDO&o!9~9b=WosDi3m62F|-zc
|
|
||||||
zYup!c*m8Ap>_dYiXJWQ=^KP`#<9+Sbu9)_8ktAnN>9a{2_j!nIF%b8C5U^%)%h$sz
|
|
||||||
zY{bu&OKzxBxO(8IQJmo#d9SO5oHwrsT;pGs^>|5vXN3J6ujh{<_J?SRAN{q|sNiLU
|
|
||||||
z_xsPHMVS%a@85?Oos95)|5~&~H2dY>J(D&h=<e+g7cpG3^!xi$N-bNz?2Apzi12=Y
|
|
||||||
zeQI0F)-QIkg#l}pet&+7IZ1b~e!POrwM)N0x-L2zRV82d*j!KiKQnhh#ERa4An??J
|
|
||||||
Mr>mdKI;Vst03o>^`Tzg`
|
|
||||||
|
|
||||||
literal 9260
|
literal 9260
|
||||||
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
|
HqBZh=dic2S
|
||||||
zlr<yge7>;w)32R%b-4x}&GL^pxH|6}IQ6}X*{E`8-=uS?KdeqQJH6t3#KE>voVS-D
|
|
||||||
zD0X${QX$sc4?mPVNj=kcg<av-nkrw@<;>Qvy)}(K{kW6u)1>G!J8-?Hl%jjkjEJPf
|
|
||||||
z^&dV|woN*bIibpaNww9HFy-j0W*b?U)s5K%S}$IkVDw$UaYN+}6J@3L^Iw;)o6S`y
|
|
||||||
zu%uc`rTn@;(vq~5MjDH_=870j+^qP`;rWdNJ-bwIu2MT3*VMeegKKw-h0JB+Ndb?`
|
|
||||||
z4hP0+Ppi3c>A`~c4@yqR$<<|-PfUI?=e+wBCF7~@SEt@waH!Ctt>^8=;O7rYayE2+
|
|
||||||
zR$Zk1vnqFv7{7;}^Q179<n6K(Y`yms`}DUYHCbpGzB6Lsmp)>+*eYgDy5PiD4>%l-
|
|
||||||
z-4Sv1&bC`5wsUHN!is*6V{M-&9(>PqL?~se-l~p`>772;p1XS9-_U(&gH>jD%)6h4
|
|
||||||
sPuTcv7jDytWnQr+YqnZRA=~46q4sdGkFvem3=9kmp00i_>zopr0DAbi?*IS*
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,119 @@
|
|||||||
|
--- a/src/main/java/ca/spottedleaf/moonrise/common/time/TickData.java
|
||||||
|
+++ b/src/main/java/ca/spottedleaf/moonrise/common/time/TickData.java
|
||||||
|
@@ -292,51 +_,78 @@
|
||||||
|
// So, we will "compact" the data by merging any inbetween tick times
|
||||||
|
// the next tick.
|
||||||
|
// If there is no "next tick", then we will create one.
|
||||||
|
- final int len = allData.size();
|
||||||
|
- final List<TickInformation> collapsedData = new ArrayList<>(len);
|
||||||
|
-
|
||||||
|
- long totalTickTime = 0L;
|
||||||
|
- long totalCpuTime = 0L;
|
||||||
|
- TickTime lastActualTick = null;
|
||||||
|
-
|
||||||
|
- for (final TickTime time : allData) {
|
||||||
|
- if (!time.isTickExecution()) {
|
||||||
|
- totalTickTime += time.tickLength();
|
||||||
|
- totalCpuTime += time.supportCPUTime() ? time.tickCpuTime() : 0L;
|
||||||
|
- } else {
|
||||||
|
- final long tickCpu = time.supportCPUTime() ? time.tickCpuTime() : 0L;
|
||||||
|
-
|
||||||
|
+ final List<TickInformation> collapsedData = new ArrayList<>();
|
||||||
|
+ for (int i = 0, len = allData.size(); i < len; ++i) {
|
||||||
|
+ final List<TickTime> toCollapse = new ArrayList<>();
|
||||||
|
+ TickTime lastTick = null;
|
||||||
|
+ for (;i < len; ++i) {
|
||||||
|
+ final TickTime time = allData.get(i);
|
||||||
|
+ if (!time.isTickExecution()) {
|
||||||
|
+ toCollapse.add(time);
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ lastTick = time;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (toCollapse.isEmpty()) {
|
||||||
|
+ // nothing to collapse
|
||||||
|
+ final TickTime last = allData.get(i);
|
||||||
|
collapsedData.add(
|
||||||
|
new TickInformation(
|
||||||
|
- time.differenceFromLastTick(tickInterval),
|
||||||
|
- time.tickLength() + totalTickTime,
|
||||||
|
- tickCpu + totalCpuTime
|
||||||
|
+ last.differenceFromLastTick(tickInterval),
|
||||||
|
+ last.tickLength(),
|
||||||
|
+ last.supportCPUTime() ? last.tickCpuTime() : 0L
|
||||||
|
)
|
||||||
|
);
|
||||||
|
-
|
||||||
|
- totalTickTime = 0L;
|
||||||
|
- totalCpuTime = 0L;
|
||||||
|
- lastActualTick = time;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (totalTickTime > 0 && createFakeTick) {
|
||||||
|
- final long differenceBetweenTicks;
|
||||||
|
- if (lastActualTick != null) {
|
||||||
|
- differenceBetweenTicks = lastActualTick.tickStart();
|
||||||
|
} else {
|
||||||
|
- differenceBetweenTicks = Math.max(tickInterval, totalTickTime);
|
||||||
|
+ long totalTickTime = 0L;
|
||||||
|
+ long totalCpuTime = 0L;
|
||||||
|
+ for (int k = 0, len2 = toCollapse.size(); k < len2; ++k) {
|
||||||
|
+ final TickTime time = toCollapse.get(k);
|
||||||
|
+ totalTickTime += time.tickLength();
|
||||||
|
+ totalCpuTime += time.supportCPUTime() ? time.tickCpuTime() : 0L;
|
||||||
|
+ }
|
||||||
|
+ if (i < len) {
|
||||||
|
+ // we know there is a tick to collapse into
|
||||||
|
+ final TickTime last = allData.get(i);
|
||||||
|
+ collapsedData.add(
|
||||||
|
+ new TickInformation(
|
||||||
|
+ last.differenceFromLastTick(tickInterval),
|
||||||
|
+ last.tickLength() + totalTickTime,
|
||||||
|
+ (last.supportCPUTime() ? last.tickCpuTime() : 0L) + totalCpuTime
|
||||||
|
+ )
|
||||||
|
+ );
|
||||||
|
+ } else if (createFakeTick) {
|
||||||
|
+ // we do not have a tick to collapse into, so we must make one up
|
||||||
|
+ // we will assume that the tick is "starting now" and ongoing
|
||||||
|
+
|
||||||
|
+ // compute difference between imaginary tick and last tick
|
||||||
|
+ final long differenceBetweenTicks;
|
||||||
|
+ if (lastTick != null) {
|
||||||
|
+ // we have a last tick, use it
|
||||||
|
+ differenceBetweenTicks = lastTick.tickStart();
|
||||||
|
+ } else {
|
||||||
|
+ // we don't have a last tick, so we must make one up that makes sense
|
||||||
|
+ // if the current interval exceeds the max tick time, then use it
|
||||||
|
+
|
||||||
|
+ // Otherwise use the interval length.
|
||||||
|
+ // This is how differenceFromLastTick() works on TickTime when there is no previous interval.
|
||||||
|
+ differenceBetweenTicks = Math.max(
|
||||||
|
+ tickInterval, totalTickTime
|
||||||
|
+ );
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ collapsedData.add(
|
||||||
|
+ new TickInformation(
|
||||||
|
+ differenceBetweenTicks,
|
||||||
|
+ totalTickTime,
|
||||||
|
+ totalCpuTime
|
||||||
|
+ )
|
||||||
|
+ );
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- collapsedData.add(
|
||||||
|
- new TickInformation(
|
||||||
|
- differenceBetweenTicks,
|
||||||
|
- totalTickTime,
|
||||||
|
- totalCpuTime
|
||||||
|
- )
|
||||||
|
- );
|
||||||
|
}
|
||||||
|
-
|
||||||
|
return collapsedData;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -2,7 +2,7 @@ group = org.bxteam.divinemc
|
|||||||
version=1.21.10-R0.1-SNAPSHOT
|
version=1.21.10-R0.1-SNAPSHOT
|
||||||
|
|
||||||
mcVersion=1.21.10
|
mcVersion=1.21.10
|
||||||
purpurRef=ffe2f809feaded534170af84df7286d805e058bd
|
purpurRef=626a3cb2323d9ded16690171c0d431a2ab82b370
|
||||||
experimental=true
|
experimental=true
|
||||||
|
|
||||||
org.gradle.configuration-cache=true
|
org.gradle.configuration-cache=true
|
||||||
|
|||||||
Reference in New Issue
Block a user