9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-19 15:09:25 +00:00

Updated Upstream (Paper/Gale/Purpur)

Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@13c80a5e [ci/skip] Fix PlayerShearBlockEvent javadoc typos (#12101)
PaperMC/Paper@db2aa180 [ci/skip] Fix incomplete example in javadocs for PreFlattenTagRegistrar (#12102)
PaperMC/Paper@cf7c6c74 [ci/skip] Fix incomplete example in javadocs for PostFlattenTagRegistrar (#12103)
PaperMC/Paper@072a8317 Add proper attached blocks API to AbstractArrow (#12099)
PaperMC/Paper@1be2e5f3 Fix vanilla map decorations sending when not dirty (#12098)
PaperMC/Paper@a06179a0 Update entity effect (#12104)
PaperMC/Paper@e616498e Add Vault block API (#12068)
PaperMC/Paper@0a04c3fe Fix some NPEs (#12105)
PaperMC/Paper@06804850 Expand TrialSpawner API (#12025)
PaperMC/Paper@46f4fdaa Add support for rotation argument handling (#12090)
PaperMC/Paper@6cfa2f7f [ci/skip] Add missing nullability annotation to sendEquipmentChange method (#12112)
PaperMC/Paper@9b9de827 Update Alternate Current patch to v1.9.1 (#12115)
PaperMC/Paper@c62252e1 Add lore content guard (#12116)
PaperMC/Paper@40416784 [ci/skip] Mention missing World#regenerateChunk implementation in jd (#12109)
PaperMC/Paper@a6e82d90 [ci/skip] Clarify getChunkAtAsyncUrgently javadocs (#12125)
PaperMC/Paper@cb25c0cf [ci/skip] Fix annotation fields used in NMS getBukkitEntity (#12120)
PaperMC/Paper@00701267 [ci/skip] improvement example in javadoc for DatapackRegistrar (#12122)
PaperMC/Paper@608f004a add method on ItemStack to edit pdc (#12022)
PaperMC/Paper@7bee9971 Cleanup damage source a bit (#12106)
PaperMC/Paper@b9023b5d Add EntityAttemptSmashAttackEvent (#12113)
PaperMC/Paper@a3781ff3 Separate tick count to ensure vanilla parity (#12077)
PaperMC/Paper@2a4a1154 Add EntityEquipmentChangedEvent (#12011)
PaperMC/Paper@06f96dd6 Improvement in /plugins command (#12121)
PaperMC/Paper@28d07dc5 use correct spigot plugin count
PaperMC/Paper@60394c5b Fix PlayerReadyArrowEvent cancellation desync (#12111)
PaperMC/Paper@b27e11cc Fix bad world to chunk coordinate example in javadocs (#12131)
PaperMC/Paper@88cdd220 Fixup luck and random implementation in CB loot-tables (#11926)
PaperMC/Paper@84609dc0 Don't auto-create any brig redirects (#11954)
PaperMC/Paper@8eb8e44a Allow For Default Titles in InventoryView Builders (#12013)

Gale Changes:
Dreeam-qwq/Gale@a224af13 Updated Upstream (Paper)
Dreeam-qwq/Gale@82f1e30e Updated Upstream (Paper)
Dreeam-qwq/Gale@a41cd227 Updated Upstream (Paper)
Dreeam-qwq/Gale@73519d55 Updated Upstream (Paper)

Purpur Changes:
PurpurMC/Purpur@9b046f36 Updated Upstream (Paper)
PurpurMC/Purpur@22bd4186 Updated Upstream (Paper)
This commit is contained in:
Dreeam
2025-02-17 10:49:50 -05:00
parent 67e7748f0b
commit 17ea36ff6b
28 changed files with 201 additions and 337 deletions

View File

@@ -2,7 +2,7 @@ group=cn.dreeam.leaf
mcVersion=1.21.4
version=1.21.4-R0.1-SNAPSHOT
galeCommit=94af07ac59b7d1c87c0025b9ae17c624092b9272
galeCommit=73519d55c52e34c33820139d80f9fc8d5fdfe783
org.gradle.configuration-cache=true
org.gradle.caching=true

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Purpur API Changes
Original license: MIT
Original project: https://github.com/PurpurMC/Purpur
Commit: e6a1ebd3f6e4cfe93f96dd82ecb3234f0482768a
Commit: 22bd4186ca92f21a01714ba8e6b4823ccc576c81
Patches listed below are removed in this patch, They exists in Gale or Leaf:
* "co/aikar/timings/TimedEventExecutor.java.patch"
@@ -579,10 +579,10 @@ index 84b5626a0ccd4fd1976f28eeb2ae99acdb62afa8..13346dfe2a6d848cf63cbba95d8dea8d
+ // Purpur end - Debug Marker API
}
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
index 8784842d14bbbe7dbde181e86782a0955be66924..3af8eb8064aeafa3606fed23e7ca2bc74c194726 100644
index 015d852d5a0c01042a2153a6916d408660356c59..886b0eac9f3047c54cc788f05507893e31f7ad6d 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
@@ -4253,6 +4253,86 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
@@ -4278,6 +4278,86 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
@Nullable
public DragonBattle getEnderDragonBattle();
@@ -802,7 +802,7 @@ index 7b379fb21e800a766ad022705a12dff6d42279ab..10a8d64ad2da0be2c14f34c3e7d1957c
// Paper start
/**
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
index ddf7829eee5e3f0ded9319a5a0a7b2e2486320a4..49d3ca54a761e08cfe1bc770cb879223bf0e21e8 100644
index 1dac39dec5ad636799984574caeb328818a3c5c9..be56f0f42d4ec23397f9974e158b49fcc7ed44f3 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
@@ -1196,4 +1196,59 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
@@ -1008,7 +1008,7 @@ index bc84b892cae5fe7019a3ad481e9da79956efa1fe..48eb5b00c460cccde29d327cef1d63fc
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index a6356997a51a441ca65414dd7e3579c1c0f885d4..ca8abdebf8e9d23e982883a7283fdedf12a36170 100644
index 8c2cc023bf76c0ba2be06f7c792e0a5ca9aa92ce..c8d13654e2e572272c6307abd2b4d590f4e1507d 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -3912,4 +3912,123 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
@@ -1321,11 +1321,11 @@ index f1f97a85ec713c05c882d7588f4a3e4a017f4795..813f6cd253322538bdf96eb323dd23a7
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
index 55457c7539c08e861263333ae40cbfe9d25814f4..9b3c3d6563c94aec225a332db5d5653887ac5f4b 100644
index c84cddac865ac5ae51618609714793099d126529..1eb468784fd323fe824ebcde6a3e35b5f00a9118 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -21,6 +21,13 @@ import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.material.MaterialData;
@@ -21,6 +21,13 @@ import org.bukkit.material.MaterialData;
import org.bukkit.persistence.PersistentDataContainer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+// Purpur start - ItemStack convenience methods
@@ -1338,7 +1338,7 @@ index 55457c7539c08e861263333ae40cbfe9d25814f4..9b3c3d6563c94aec225a332db5d56538
/**
* Represents a stack of items.
@@ -1329,4 +1336,482 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
@@ -1345,4 +1352,482 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat
return this.craftDelegate.matchesWithoutData(item, excludeTypes, ignoreCount);
}
// Paper end - data component API

View File

@@ -9,10 +9,10 @@ Added some asynchronous structure locate methods in World,
requires async-locator to be enabled in Leaf config, or else it will fall back to sync methods.
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
index 3af8eb8064aeafa3606fed23e7ca2bc74c194726..2d314d7f75f320384c20c97f60c0c9611b890316 100644
index 886b0eac9f3047c54cc788f05507893e31f7ad6d..f354527ada36431e95595ef60557e6b13360f75a 100644
--- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java
@@ -4047,6 +4047,60 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
@@ -4072,6 +4072,60 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
@Nullable
StructureSearchResult locateNearestStructure(@NotNull Location origin, @NotNull Structure structure, int radius, boolean findUnexplored);

View File

@@ -35,18 +35,18 @@ index 3e0e88afcf010d9a3d46e48bca5cbdf98fe97544..5a9173b6039ee8404529a04904c5f9e9
public SystemReport getSystemReport() {
diff --git a/net/minecraft/world/damagesource/DamageSource.java b/net/minecraft/world/damagesource/DamageSource.java
index aea139e47a0866c63c0fc6728840e5ad92a26403..ac7352a2b264abf4db4b89f39a2c86f390776336 100644
index fb5e47278a62f3896a2a1ed144bad45ba3de080a..0d9e5aab214df54a7a24bec45fcc8ad85f699710 100644
--- a/net/minecraft/world/damagesource/DamageSource.java
+++ b/net/minecraft/world/damagesource/DamageSource.java
@@ -66,7 +66,7 @@ public class DamageSource {
@@ -49,7 +49,7 @@ public class DamageSource {
public DamageSource customEventDamager(Entity entity) {
public DamageSource eventEntityDamager(final Entity entity) {
if (this.directEntity != null) {
- throw new IllegalStateException("Cannot set custom event damager when direct entity is already set (report a bug to Paper, if you think this is a Gale bug, please report it at https://github.com/GaleMC/Gale/issues)"); // Gale - branding changes
+ throw new IllegalStateException("Cannot set custom event damager when direct entity is already set (report a bug to Paper, if you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues)"); // Gale - branding changes // Leaf - Rebrand
- throw new IllegalStateException("Cannot set an event damager when a direct entity is already set (report a bug to Paper, if you think this is a Gale bug, please report it at https://github.com/GaleMC/Gale/issues)"); // Gale - branding changes
+ throw new IllegalStateException("Cannot set an event damager when a direct entity is already set (report a bug to Paper, if you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues)"); // Gale - branding changes // Leaf - Rebrand
}
DamageSource damageSource = this.cloneInstance();
damageSource.customEventDamager = entity;
final DamageSource damageSource = this.copy();
damageSource.eventEntityDamager = entity;
diff --git a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
index 3abb8aefcca325e28f0af07bd859be74f0aee08d..320e9e24711d2a326313b3a202c7ef987f71f229 100644
--- a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java

View File

@@ -32,7 +32,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java
index 54916fe57ceeab24936ce50709402ecf1fcd9a10..cd2fa33f6e655419f2a1155aed8566742385d922 100644
index 6db99585fa47fe2d2ae6eff8efe16190dd756511..a9269356de964585028e69a3713ca64f67ba02bf 100644
--- a/io/papermc/paper/entity/activation/ActivationRange.java
+++ b/io/papermc/paper/entity/activation/ActivationRange.java
@@ -173,6 +173,22 @@ public final class ActivationRange {
@@ -73,7 +73,7 @@ index 54916fe57ceeab24936ce50709402ecf1fcd9a10..cd2fa33f6e655419f2a1155aed856674
}
}
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 7c9496e8564c2464e79661153fd295bb027b7bdb..95d69c4b40e4ebe12d8033dbcc7ba195a0ccfb5a 100644
index 9fe9ce0488be5eeb4f5da2f2716accc2093f6a4e..e1f5e3cc57a8c2945b7925a31bde06f6c6525726 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -781,6 +781,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -85,13 +85,13 @@ index 7c9496e8564c2464e79661153fd295bb027b7bdb..95d69c4b40e4ebe12d8033dbcc7ba195
if (!tickRateManager.isEntityFrozen(entity)) {
entity.checkDespawn();
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index a839042a883831ab5bf7bca7fa707b10a97689f8..22af2c4996601847f2bbe9d6fef2fc4bd82725fc 100644
index 4ea2672aae628ab1b6a72cb486aa917be5ab0cab..c2a2892d34497a616951f4689ab6126191d9f655 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -335,6 +335,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
public boolean freezeLocked = false; // Paper - Freeze Tick Lock API
@@ -336,6 +336,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
public boolean fixedPose = false; // Paper - Expand Pose API
private final int despawnTime; // Paper - entity despawn time limit
public int totalEntityAge; // Paper - age-like counter for all entities
+ public boolean activatedPriorityReset = false; // Pufferfish - DAB
+ public int activatedPriority = org.dreeam.leaf.config.modules.opt.DynamicActivationofBrain.maximumActivationPrio; // Pufferfish - DAB (golf score)
public final io.papermc.paper.entity.activation.ActivationType activationType = io.papermc.paper.entity.activation.ActivationType.activationTypeFor(this); // Paper - EAR 2/tracking ranges

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Purpur Server Minecraft Changes
Original license: MIT
Original project: https://github.com/PurpurMC/Purpur
Commit: e6a1ebd3f6e4cfe93f96dd82ecb3234f0482768a
Commit: 22bd4186ca92f21a01714ba8e6b4823ccc576c81
Patches listed below are removed in this patch, They exists in Gale or Leaf:
* "net/minecraft/CrashReport.java.patch"
@@ -118,7 +118,7 @@ index c2b7164a1395842ab95428540782eeda4c7960b0..59c70c567051bc7dba0d308387352d1b
boolean flag = this.source.acceptsSuccess() && !this.silent;
boolean flag1 = allowLogging && this.source.shouldInformAdmins() && !this.silent;
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
index 60cfa713ffc778d0cd11dfb2ea1a52db806119b2..967c01f9e40c2c73f266de281425c918472cf66e 100644
index fadc6c2494ac3aaa426d16d36adc688e1f39e27a..06df7711ca33d592d9a23ef0b2c3e73b468e2f57 100644
--- a/net/minecraft/commands/Commands.java
+++ b/net/minecraft/commands/Commands.java
@@ -213,8 +213,8 @@ public class Commands {
@@ -724,7 +724,7 @@ index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..614c7d9f673c926562acc8fa3b378862
private JComponent buildOnboardingPanel() {
String onboardingLink = "https://docs.papermc.io/paper/next-steps";
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 95d69c4b40e4ebe12d8033dbcc7ba195a0ccfb5a..bb38adebfcf2e3c52971a79d8363a45f067727a9 100644
index e1f5e3cc57a8c2945b7925a31bde06f6c6525726..cb8556fcf50293341cb090616e1e25e04d2eb5d8 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -205,6 +205,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -896,7 +896,7 @@ index 95d69c4b40e4ebe12d8033dbcc7ba195a0ccfb5a..bb38adebfcf2e3c52971a79d8363a45f
this.serverLevelData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents
// CraftBukkit start
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
@@ -2657,7 +2728,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -2659,7 +2730,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
// Spigot start
if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message
// Paper start - Fix merchant inventory not closing on entity removal
@@ -1279,7 +1279,7 @@ index ea34bb4913e7357f5b76a64443f7e744abdf7b5e..de115ee71fa240440b54c553e0d3ddaf
try {
String channels = payload.toString(com.google.common.base.Charsets.UTF_8);
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 657fbc5e5d81b44fefc2d9d6c6bfe47f179a7843..ca16bef85f94ffb87eb27c9ec1429cba77e7fbc1 100644
index e3e758a608e16fc7b4ae795dfd2baecc8b0cb844..c0be2543ab55fda85302812a4773e551f64cf7d9 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -326,6 +326,20 @@ public class ServerGamePacketListenerImpl
@@ -1698,20 +1698,20 @@ index d3de87eaf0eb84af77165391c7b94085d425f21d..edaa6f66f33b6a9bfb4862ec5557080b
}
}
diff --git a/net/minecraft/world/damagesource/DamageSource.java b/net/minecraft/world/damagesource/DamageSource.java
index ac7352a2b264abf4db4b89f39a2c86f390776336..0a596e20393936d8fc9f03ba0891d0c223279247 100644
index 0d9e5aab214df54a7a24bec45fcc8ad85f699710..0eb210a8c6f42a3a1ee61e946ccfec25cbc3a44b 100644
--- a/net/minecraft/world/damagesource/DamageSource.java
+++ b/net/minecraft/world/damagesource/DamageSource.java
@@ -28,6 +28,8 @@ public class DamageSource {
private boolean sweep = false;
private boolean melting = false;
private boolean poison = false;
@@ -30,6 +30,8 @@ public class DamageSource {
@Nullable
private org.bukkit.block.BlockState fromBlockSnapshot; // Captured block snapshot when the eventBlockDamager is not relevant (e.g. for bad respawn point explosions the block is already removed)
private boolean critical; // Supports arrows and sweeping damage
+ private boolean scissors = false; // Purpur - Dont run with scissors!
+ private boolean stonecutter = false; // Purpur - Stonecutter damage
@Nullable
private Entity customEventDamager = null; // This field is a helper for when causing entity damage is not set by vanilla // Paper - fix DamageSource API
@@ -58,6 +60,27 @@ public class DamageSource {
return this.poison;
public DamageSource knownCause(final org.bukkit.event.entity.EntityDamageEvent.DamageCause cause) {
final DamageSource damageSource = this.copy();
@@ -42,6 +44,27 @@ public class DamageSource {
return this.knownCause;
}
+ // Purpur start - Dont run with scissors!
@@ -1735,19 +1735,19 @@ index ac7352a2b264abf4db4b89f39a2c86f390776336..0a596e20393936d8fc9f03ba0891d0c2
+ }
+ // Purpur end - Stonecutter damage
+
// Paper start - fix DamageSource API
@Nullable
public Entity getCustomEventDamager() {
@@ -118,6 +141,8 @@ public class DamageSource {
damageSource.sweep = this.isSweep();
damageSource.poison = this.isPoison();
damageSource.melting = this.isMelting();
public Entity eventEntityDamager() {
return this.eventEntityDamager;
@@ -103,6 +126,8 @@ public class DamageSource {
damageSource.eventBlockDamager = this.eventBlockDamager;
damageSource.fromBlockSnapshot = this.fromBlockSnapshot;
damageSource.critical = this.critical;
+ damageSource.scissors = this.isScissors(); // Purpur - Dont run with scissors!
+ damageSource.stonecutter = this.isStonecutter(); // Purpur - Stonecutter damage
return damageSource;
}
// CraftBukkit end
@@ -184,12 +209,21 @@ public class DamageSource {
@@ -169,12 +194,21 @@ public class DamageSource {
} else {
Component component = this.causingEntity == null ? this.directEntity.getDisplayName() : this.causingEntity.getDisplayName();
ItemStack itemStack = this.causingEntity instanceof LivingEntity livingEntity1 ? livingEntity1.getMainHandItem() : ItemStack.EMPTY;
@@ -1771,28 +1771,30 @@ index ac7352a2b264abf4db4b89f39a2c86f390776336..0a596e20393936d8fc9f03ba0891d0c2
return this.type().msgId();
}
diff --git a/net/minecraft/world/damagesource/DamageSources.java b/net/minecraft/world/damagesource/DamageSources.java
index b1054b6b2bff568a8805fc0f610c431f3f349a04..a6660ba22847911c661bb7a608a96e1d059c4ae2 100644
index cc206ecff2d95f0398ca424c178a336ad80cc396..0276f02e149f3ef5e0f9aec8b0a8a6cb3d638aae 100644
--- a/net/minecraft/world/damagesource/DamageSources.java
+++ b/net/minecraft/world/damagesource/DamageSources.java
@@ -45,11 +45,15 @@ public class DamageSources {
// CraftBukkit start
private final DamageSource melting;
private final DamageSource poison;
@@ -42,6 +42,8 @@ public class DamageSources {
private final DamageSource stalagmite;
private final DamageSource outsideBorder;
private final DamageSource genericKill;
+ private final DamageSource scissors; // Purpur - Dont run with scissors!
+ private final DamageSource stonecutter; // Purpur - Stonecutter damage
public DamageSources(RegistryAccess registry) {
this.damageTypes = registry.lookupOrThrow(Registries.DAMAGE_TYPE);
this.melting = this.source(DamageTypes.ON_FIRE).melting();
this.poison = this.source(DamageTypes.MAGIC).poison();
@@ -70,6 +72,8 @@ public class DamageSources {
this.stalagmite = this.source(DamageTypes.STALAGMITE);
this.outsideBorder = this.source(DamageTypes.OUTSIDE_BORDER);
this.genericKill = this.source(DamageTypes.GENERIC_KILL);
+ this.scissors = this.source(DamageTypes.MAGIC).scissors(); // Purpur - Dont run with scissors!
+ this.stonecutter = this.source(DamageTypes.MAGIC).stonecutter(); // Purpur - Stonecutter damage
// CraftBukkit end
this.inFire = this.source(DamageTypes.IN_FIRE);
this.campfire = this.source(DamageTypes.CAMPFIRE);
@@ -100,6 +104,17 @@ public class DamageSources {
}
// CraftBukkit end
private DamageSource source(ResourceKey<DamageType> damageTypeKey) {
@@ -176,6 +180,18 @@ public class DamageSources {
return this.stalagmite;
}
+ // Purpur start - Dont run with scissors!
+ public DamageSource scissors() {
@@ -1805,8 +1807,9 @@ index b1054b6b2bff568a8805fc0f610c431f3f349a04..a6660ba22847911c661bb7a608a96e1d
+ return this.stonecutter;
+ }
+ // Purpur end - Stonecutter damage
public DamageSource inFire() {
return this.inFire;
+
public DamageSource fallingBlock(Entity entity) {
return this.source(DamageTypes.FALLING_BLOCK, entity);
}
diff --git a/net/minecraft/world/effect/HungerMobEffect.java b/net/minecraft/world/effect/HungerMobEffect.java
index 0890694ae96b6cd60079c34066e7a6e288f038e8..6c0e6bd2a171edc57dec71af178764454de73313 100644
@@ -1822,7 +1825,7 @@ index 0890694ae96b6cd60079c34066e7a6e288f038e8..6c0e6bd2a171edc57dec71af17876445
return true;
diff --git a/net/minecraft/world/effect/PoisonMobEffect.java b/net/minecraft/world/effect/PoisonMobEffect.java
index 522e11a98ccd9186e7b00f6d7e28516cf33b830c..a33402b06ce99767fa0a5d4bf6881077bd1bd107 100644
index 75327fd96858fd508ea63a6983e5cbc655a8800f..73cfc61ac3f8e33e6b9f4fd08a292266c0adb535 100644
--- a/net/minecraft/world/effect/PoisonMobEffect.java
+++ b/net/minecraft/world/effect/PoisonMobEffect.java
@@ -12,8 +12,8 @@ public class PoisonMobEffect extends MobEffect {
@@ -1830,9 +1833,9 @@ index 522e11a98ccd9186e7b00f6d7e28516cf33b830c..a33402b06ce99767fa0a5d4bf6881077
@Override
public boolean applyEffectTick(ServerLevel level, LivingEntity entity, int amplifier) {
- if (entity.getHealth() > 1.0F) {
- entity.hurtServer(level, entity.damageSources().poison(), 1.0F); // CraftBukkit - DamageSource.MAGIC -> CraftEventFactory.POISON
- entity.hurtServer(level, entity.damageSources().magic().knownCause(org.bukkit.event.entity.EntityDamageEvent.DamageCause.POISON), 1.0F); // CraftBukkit
+ if (entity.getHealth() > entity.level().purpurConfig.entityMinimalHealthPoison) { // Purpur
+ entity.hurtServer(level, entity.damageSources().poison(), entity.level().purpurConfig.entityPoisonDegenerationAmount); // CraftBukkit - DamageSource.MAGIC -> CraftEventFactory.POISON // Purpur - Config MobEffect by world
+ entity.hurtServer(level, entity.damageSources().magic().knownCause(org.bukkit.event.entity.EntityDamageEvent.DamageCause.POISON), entity.level().purpurConfig.entityPoisonDegenerationAmount); // CraftBukkit // Purpur - Config MobEffect by world
}
return true;
@@ -1877,7 +1880,7 @@ index 1fc9e1ad541c46124183a401b2a7d99aea69cecf..881271f0bc77a8a8a7d31daad9a8188b
}
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27ab94bb41f 100644
index c2a2892d34497a616951f4689ab6126191d9f655..f83a90cba0229842389740199a8d7f12fe44b0d9 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -134,7 +134,7 @@ import net.minecraft.world.scores.Team;
@@ -1912,7 +1915,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
private boolean hasGlowingTag;
private final Set<String> tags = new io.papermc.paper.util.SizeLimitedSet<>(new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(), MAX_ENTITY_TAG_COUNT); // Paper - fully limit tag size - replace set impl
private final double[] pistonDeltas = new double[]{0.0, 0.0, 0.0};
@@ -343,6 +344,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -344,6 +345,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
public long activatedTick = Integer.MIN_VALUE;
public boolean isTemporarilyActive;
public long activatedImmunityTick = Integer.MIN_VALUE;
@@ -1920,7 +1923,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
public void inactiveTick() {
}
@@ -524,10 +526,39 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -525,10 +527,39 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
// Paper end - optimise entity tracker
@@ -1960,7 +1963,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
this.position = Vec3.ZERO;
this.blockPosition = BlockPos.ZERO;
this.chunkPosition = ChunkPos.ZERO;
@@ -908,6 +939,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -909,6 +940,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
&& this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v)
&& (!(this instanceof Player player) || !player.getAbilities().invulnerable))) {
// Paper end - Configurable nether ceiling damage
@@ -1968,7 +1971,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
this.onBelowWorld();
}
}
@@ -1838,7 +1870,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1839,7 +1871,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
public boolean fireImmune() {
@@ -1977,7 +1980,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
}
public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) {
@@ -1907,7 +1939,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1908,7 +1940,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return this.isInWater() || flag;
}
@@ -1986,7 +1989,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
if (this.getVehicle() instanceof AbstractBoat abstractBoat && !abstractBoat.isUnderWater()) {
this.wasTouchingWater = false;
} else if (this.updateFluidHeightAndDoFluidPushing(FluidTags.WATER, 0.014)) {
@@ -2543,6 +2575,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -2544,6 +2576,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
compound.putBoolean("Paper.FreezeLock", true);
}
// Paper end
@@ -2000,7 +2003,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
return compound;
} catch (Throwable var9) {
CrashReport crashReport = CrashReport.forThrowable(var9, "Saving entity NBT");
@@ -2692,6 +2731,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -2693,6 +2732,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
freezeLocked = compound.getBoolean("Paper.FreezeLock");
}
// Paper end
@@ -2014,7 +2017,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
} catch (Throwable var17) {
CrashReport crashReport = CrashReport.forThrowable(var17, "Loading entity NBT");
CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded");
@@ -2938,6 +2984,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -2939,6 +2985,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
if (this.isAlive() && this instanceof Leashable leashable) {
if (leashable.getLeashHolder() == player) {
if (!this.level().isClientSide()) {
@@ -2022,7 +2025,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
// CraftBukkit start - fire PlayerUnleashEntityEvent
// Paper start - Expand EntityUnleashEvent
org.bukkit.event.player.PlayerUnleashEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.hasInfiniteMaterials());
@@ -3144,6 +3191,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -3145,6 +3192,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.passengers = ImmutableList.copyOf(list);
}
@@ -2036,7 +2039,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
this.gameEvent(GameEvent.ENTITY_MOUNT, passenger);
}
}
@@ -3185,6 +3239,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -3186,6 +3240,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return false;
}
// CraftBukkit end
@@ -2051,7 +2054,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) {
this.passengers = ImmutableList.of();
} else {
@@ -3263,15 +3325,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -3264,15 +3326,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return Vec3.directionFromRotation(this.getRotationVector());
}
@@ -2071,7 +2074,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
}
}
}
@@ -3473,7 +3538,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -3474,7 +3539,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
public int getMaxAirSupply() {
@@ -2080,7 +2083,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
}
public int getAirSupply() {
@@ -3961,7 +4026,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -3962,7 +4027,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
// CraftBukkit end
public boolean canUsePortal(boolean allowPassengers) {
@@ -2089,7 +2092,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
}
public boolean canTeleport(Level fromLevel, Level toLevel) {
@@ -4498,6 +4563,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -4499,6 +4564,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return Mth.lerp(partialTick, this.yRotO, this.yRot);
}
@@ -2102,7 +2105,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
// Paper start - optimise collisions
public boolean updateFluidHeightAndDoFluidPushing(final TagKey<Fluid> fluid, final double flowScale) {
if (this.touchingUnloadedChunk()) {
@@ -4906,7 +4977,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -4907,7 +4978,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
public float maxUpStep() {
@@ -2111,7 +2114,7 @@ index 0f3c00c0d6be858351f00a71e2586212ab0f3668..3be4556a14b61fad5690a4e664e9e27a
}
public void onExplosionHit(@Nullable Entity entity) {
@@ -5104,4 +5175,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -5105,4 +5176,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return ((ServerLevel) this.level).isPositionEntityTicking(this.blockPosition());
}
// Paper end - Expose entity id counter
@@ -2298,7 +2301,7 @@ index efee812785240c1ab1fd47514cfb236a3548f9cf..b982d4b7bdf39fcaf5f22cc889467d7b
protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK;
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 8f144c36b9fe1f5380459ae869f5a61f629b0d39..8c56af2500f05b74e94c56faf75d186f0d383390 100644
index bfd71ce095cb35cc7c71b3dae71b40fc7d42f360..7a07789f115cb4a8917097e0697e80184104817e 100644
--- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java
@@ -248,9 +248,9 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -2537,7 +2540,7 @@ index 8f144c36b9fe1f5380459ae869f5a61f629b0d39..8c56af2500f05b74e94c56faf75d186f
this.hurt(this.damageSources().flyIntoWall(), f);
}
}
@@ -3505,8 +3572,10 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -3523,8 +3590,10 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.pushEntities();
// Paper start - Add EntityMoveEvent
@@ -2550,7 +2553,7 @@ index 8f144c36b9fe1f5380459ae869f5a61f629b0d39..8c56af2500f05b74e94c56faf75d186f
Location from = new Location(this.level().getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO);
Location to = new Location(this.level().getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot());
io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone());
@@ -3516,11 +3585,52 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -3534,11 +3603,52 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch());
}
}
@@ -2603,7 +2606,7 @@ index 8f144c36b9fe1f5380459ae869f5a61f629b0d39..8c56af2500f05b74e94c56faf75d186f
}
public boolean isSensitiveToWater() {
@@ -3542,7 +3652,18 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -3560,7 +3670,18 @@ public abstract class LivingEntity extends Entity implements Attackable {
if (i1 % 2 == 0) {
List<EquipmentSlot> list = EquipmentSlot.VALUES.stream().filter(slot -> canGlideUsing(this.getItemBySlot(slot), slot)).toList();
EquipmentSlot equipmentSlot = Util.getRandom(list, this.random);
@@ -2623,7 +2626,7 @@ index 8f144c36b9fe1f5380459ae869f5a61f629b0d39..8c56af2500f05b74e94c56faf75d186f
}
this.gameEvent(GameEvent.ELYTRA_GLIDE);
@@ -4425,6 +4546,12 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -4443,6 +4564,12 @@ public abstract class LivingEntity extends Entity implements Attackable {
: slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.getType());
}
@@ -5680,7 +5683,7 @@ index e686c500e4b5f3e7b0e808af8b2e43ddbd163bef..c1760dda7b42471982e4ad78b6150b54
this.goalSelector.addGoal(2, new BreedGoal(this, 1.0));
this.goalSelector.addGoal(3, new TemptGoal(this, 1.1, stack -> stack.is(ItemTags.SHEEP_FOOD), false));
diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java
index 8871964fd735178804b95182db1fd6bc1088f69d..1b9d4562b73ecdf783ecdaf4f4eff9037a4387e6 100644
index 8a63b656b86b98f3756807498721d4daac5a38ef..eccf5f67bdacaf018e368843448754bc28a54b98 100644
--- a/net/minecraft/world/entity/animal/SnowGolem.java
+++ b/net/minecraft/world/entity/animal/SnowGolem.java
@@ -44,17 +44,63 @@ import net.minecraft.world.phys.Vec3;
@@ -5772,7 +5775,7 @@ index 8871964fd735178804b95182db1fd6bc1088f69d..1b9d4562b73ecdf783ecdaf4f4eff903
@Override
@@ -95,10 +143,11 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM
this.hurtServer(serverLevel, this.damageSources().melting(), 1.0F); // CraftBukkit - DamageSources.ON_FIRE -> CraftEventFactory.MELTING
this.hurtServer(serverLevel, this.damageSources().onFire().knownCause(org.bukkit.event.entity.EntityDamageEvent.DamageCause.MELTING), 1.0F); // CraftBukkit
}
- if (!serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
@@ -5990,7 +5993,7 @@ index fa5f7f7d54083f9ea2095dd44362069d00e0b9a5..41074e7847583583331ef8d685a9f9b8
return "entity.minecraft.tropical_fish.predefined." + variantId;
}
diff --git a/net/minecraft/world/entity/animal/Turtle.java b/net/minecraft/world/entity/animal/Turtle.java
index 354ec2b987882d8f40ef4ac5257183d2fda73bb8..3c877699914c906fca265c96770b1c29ed89a1e2 100644
index 0e2d2dd3f2ef2783f3773a9a05c4f718991f7784..10477fea8fcd70bf0c1ba4b6e1113625be690e68 100644
--- a/net/minecraft/world/entity/animal/Turtle.java
+++ b/net/minecraft/world/entity/animal/Turtle.java
@@ -84,6 +84,52 @@ public class Turtle extends Animal {
@@ -12605,7 +12608,7 @@ index ef2afb17a22a703470e13d12c989a685e72f0ab8..80a01b8c6dfb0f3bcc6872cdf38b48f7
blockPos = blockPos1;
break;
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index baab70c95fdcb230ecaef1174a8d5e298826462b..37cccba70cf4815b19fcf9f1526cdc25c2e81407 100644
index e587f8125ab29b3f9c829cd225deb5b7a6b7affa..5b684ff1096ef56fc5d6ad16963bb19ec880ced4 100644
--- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java
@@ -201,11 +201,22 @@ public abstract class Player extends LivingEntity {
@@ -12694,13 +12697,13 @@ index baab70c95fdcb230ecaef1174a8d5e298826462b..37cccba70cf4815b19fcf9f1526cdc25
@@ -1277,7 +1318,7 @@ public abstract class Player extends LivingEntity {
flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits
if (flag2) {
damageSource = damageSource.critical(true); // Paper start - critical damage API
damageSource = damageSource.critical(); // Paper - critical damage API
- f *= 1.5F;
+ f *= this.level().purpurConfig.playerCriticalDamageMultiplier; // Purpur - Add config change multiplier critical damage value
}
float f2 = f + f1;
@@ -1890,7 +1931,23 @@ public abstract class Player extends LivingEntity {
@@ -1892,7 +1933,23 @@ public abstract class Player extends LivingEntity {
@Override
protected int getBaseExperienceReward(ServerLevel level) {
@@ -12725,7 +12728,7 @@ index baab70c95fdcb230ecaef1174a8d5e298826462b..37cccba70cf4815b19fcf9f1526cdc25
}
@Override
@@ -1974,6 +2031,13 @@ public abstract class Player extends LivingEntity {
@@ -1976,6 +2033,13 @@ public abstract class Player extends LivingEntity {
return slot != EquipmentSlot.BODY;
}
@@ -12740,7 +12743,7 @@ index baab70c95fdcb230ecaef1174a8d5e298826462b..37cccba70cf4815b19fcf9f1526cdc25
if (this.isPassenger() || !this.onGround() || this.isInWater() || this.isInPowderSnow) {
return false;
diff --git a/net/minecraft/world/entity/projectile/AbstractArrow.java b/net/minecraft/world/entity/projectile/AbstractArrow.java
index d206ac2b9cade292b0d69e9aeb0f81227ec0b49e..f9b538f4cd831aa5a22bb778c2bf3cd97a27f9dd 100644
index aa301c849b020fac951f8afa7cd27401def16d3a..ecf25b60096f6a77a7bd6b6212d322adb3fe5e8a 100644
--- a/net/minecraft/world/entity/projectile/AbstractArrow.java
+++ b/net/minecraft/world/entity/projectile/AbstractArrow.java
@@ -74,6 +74,7 @@ public abstract class AbstractArrow extends Projectile {
@@ -12882,7 +12885,7 @@ index c57bbdc13221d2ce349f3f1d894193f80ff1e24b..1d399532c67c213c95c06837b0c78553
protected void onHit(HitResult result) {
super.onHit(result);
diff --git a/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
index 128bf1555b996c454e753b1ed004cfeae4b0436f..1d240ebbf81154d361cc5449d0f43ea467bfb097 100644
index 1345097a2a417f95c44143fd7e0d4cec38990121..d212f57c8c0b2086f567fd30237b110203d9e8cb 100644
--- a/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
+++ b/net/minecraft/world/entity/projectile/ThrownEnderpearl.java
@@ -133,9 +133,10 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
@@ -12901,8 +12904,8 @@ index 128bf1555b996c454e753b1ed004cfeae4b0436f..1d240ebbf81154d361cc5449d0f43ea4
if (serverPlayer1 != null) {
serverPlayer1.resetFallDistance();
serverPlayer1.resetCurrentImpulseContext();
- serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().customEventDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API
+ serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().customEventDamager(this), this.level().purpurConfig.enderPearlDamage); // CraftBukkit // Paper - fix DamageSource API // Purpur - Configurable Ender Pearl damage
- serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().eventEntityDamager(this), 5.0F); // CraftBukkit // Paper - fix DamageSource API
+ serverPlayer1.hurtServer(serverPlayer.serverLevel(), this.damageSources().enderPearl().eventEntityDamager(this), this.level().purpurConfig.enderPearlDamage); // CraftBukkit // Paper - fix DamageSource API // Purpur - Configurable Ender Pearl damage
}
this.playSound(serverLevel, vec3);
@@ -12920,7 +12923,7 @@ index 2c66f788759330fba412ccb2187945b6ca0cacb6..251e9a368800afab1a47bb9162077b2e
if (this.level() instanceof ServerLevel serverLevel && this.pickup == AbstractArrow.Pickup.ALLOWED) {
this.spawnAtLocation(serverLevel, this.getPickupItem(), 0.1F);
diff --git a/net/minecraft/world/entity/projectile/WitherSkull.java b/net/minecraft/world/entity/projectile/WitherSkull.java
index a83839fce264429e2a8fd3b19cd2d0a6d88585e0..9af37bd40649f602d700fc7b683c646ae9189eb9 100644
index c4cdc7655a8e4931717e9fa788c5811879526e9e..a0b909c745ea60cae73def06f9d947345911c5e4 100644
--- a/net/minecraft/world/entity/projectile/WitherSkull.java
+++ b/net/minecraft/world/entity/projectile/WitherSkull.java
@@ -92,7 +92,7 @@ public class WitherSkull extends AbstractHurtingProjectile {
@@ -14618,7 +14621,7 @@ index 4bee1ba137d078563cedfdd184a8b4603df17487..d3f5242fc66529bf3137da4d505a6cf5
double d2 = nearestPlayer.distanceToSqr(d, y, d1);
if (level.isLoadedAndInBounds(mutableBlockPos) && isRightDistanceToPlayerAndSpawnPoint(level, chunk, mutableBlockPos, d2)) { // Paper - don't load chunks for mob spawn
diff --git a/net/minecraft/world/level/ServerExplosion.java b/net/minecraft/world/level/ServerExplosion.java
index ea22342896a608036042b5f5800302eae29f6c40..f2ef7af916318d9b83395455b9f25b61401e3017 100644
index 4d183fb445c43621c5ce95edc1af27b6a41f0acb..a22ef98cf584fd9e66ac86ce2f66ec04e6353608 100644
--- a/net/minecraft/world/level/ServerExplosion.java
+++ b/net/minecraft/world/level/ServerExplosion.java
@@ -317,7 +317,7 @@ public class ServerExplosion implements Explosion {
@@ -14755,7 +14758,7 @@ index 045d85b1267e20ca66ef08eb981f167c64d8c780..e804ca8d6c9c9b8d9f982a970cc3eddd
return true;
} else {
diff --git a/net/minecraft/world/level/block/BedBlock.java b/net/minecraft/world/level/block/BedBlock.java
index c23c255cefe7c5be618bbe97a99ae3215d8e48c0..60c68936cd80e0137a1c92d6d1687321855c040f 100644
index 8c21e8aa4922691fa66cd22d631646c554251bdd..999abf6a27682eed16273c9a73dc9479fc3008c0 100644
--- a/net/minecraft/world/level/block/BedBlock.java
+++ b/net/minecraft/world/level/block/BedBlock.java
@@ -100,7 +100,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
@@ -14771,8 +14774,8 @@ index c23c255cefe7c5be618bbe97a99ae3215d8e48c0..60c68936cd80e0137a1c92d6d1687321
}
Vec3 center = pos.getCenter();
- level.explode(null, level.damageSources().badRespawnPointExplosion(center, blockState), null, center, 5.0F, true, Level.ExplosionInteraction.BLOCK); // CraftBukkit - add state
+ if (level.purpurConfig.bedExplode) level.explode(null, level.damageSources().badRespawnPointExplosion(center, blockState), null, center, (float) level.purpurConfig.bedExplosionPower, level.purpurConfig.bedExplosionFire, level.purpurConfig.bedExplosionEffect); // CraftBukkit - add state // Purpur - Implement bed explosion options
- level.explode(null, level.damageSources().badRespawnPointExplosion(center).causingBlockSnapshot(blockState), null, center, 5.0F, true, Level.ExplosionInteraction.BLOCK); // CraftBukkit - add state
+ if (level.purpurConfig.bedExplode) level.explode(null, level.damageSources().badRespawnPointExplosion(center).causingBlockSnapshot(blockState), null, center, (float) level.purpurConfig.bedExplosionPower, level.purpurConfig.bedExplosionFire, level.purpurConfig.bedExplosionEffect); // CraftBukkit - add state // Purpur - Implement bed explosion options
return InteractionResult.SUCCESS_SERVER;
}
// CraftBukkit end
@@ -14955,7 +14958,7 @@ index bc52568bfa56635300266424488e524d77d95e09..8f2eebc60d655d5a2c233e2b931cdca2
+ // Purpur end - Ability for hoe to replant crops
}
diff --git a/net/minecraft/world/level/block/CactusBlock.java b/net/minecraft/world/level/block/CactusBlock.java
index 913779c68b178dbbfac3b1dcee0c6342028e5570..dfc55eec85f35534dfa36c007d3b3d015ec809a3 100644
index 8c3aca2430eac2a31d1e0b1137e3324ec5b29a20..079b4c95cf81119ca99daeb159aefca389afed74 100644
--- a/net/minecraft/world/level/block/CactusBlock.java
+++ b/net/minecraft/world/level/block/CactusBlock.java
@@ -21,7 +21,7 @@ import net.minecraft.world.level.pathfinder.PathComputationType;
@@ -15024,7 +15027,7 @@ index f15b56cbfb6540ea26c6a0abdd701b7d7f1a974e..cf6cf43fc3b234cecccf5c7c0cd4571d
}
diff --git a/net/minecraft/world/level/block/CampfireBlock.java b/net/minecraft/world/level/block/CampfireBlock.java
index ce0267f3651dcdc59a1b1ecffe14560a8107353d..d735b6e3ade144a4645345fb7b0f2013fa9002e5 100644
index 0bf42a5fdf2c606062b9be4443a9a22346159ecb..9dc0c206e325d2818923e56c97d83b24e1161c26 100644
--- a/net/minecraft/world/level/block/CampfireBlock.java
+++ b/net/minecraft/world/level/block/CampfireBlock.java
@@ -141,7 +141,7 @@ public class CampfireBlock extends BaseEntityBlock implements SimpleWaterloggedB
@@ -15119,7 +15122,7 @@ index 4f98ae8bd4bfb681883132eddb57cbc5703d7d9e..c84e1c124b733fb918de17340f7e0f57
}
}
diff --git a/net/minecraft/world/level/block/ChestBlock.java b/net/minecraft/world/level/block/ChestBlock.java
index 9ed50f09147984ba8864edabb89669e2f4fc7bea..af4abe255da35e9b7ecfd29914d5e54e26f0c3cd 100644
index 4d2a5888695b99fb150e23b7d8c4b4d4a455b8c6..db4b26262e3ee1064f2930377b56f13298c47203 100644
--- a/net/minecraft/world/level/block/ChestBlock.java
+++ b/net/minecraft/world/level/block/ChestBlock.java
@@ -357,6 +357,7 @@ public class ChestBlock extends AbstractChestBlock<ChestBlockEntity> implements
@@ -15592,7 +15595,7 @@ index 19d1906e9d4e92ff49a833bca03a7308ee8059e3..47a7ce88bf4d26408545dcc061aa7633
}
}
diff --git a/net/minecraft/world/level/block/MagmaBlock.java b/net/minecraft/world/level/block/MagmaBlock.java
index 6245b268d1361973a9dee2b80454779b7d0922f0..3345a151bdb5262be6ce117947f9975b7fdcfdf0 100644
index db83c3630064a6875b477021a1f78bdf59c4ddc3..bbf8447cf986015f8a2e55f39d7b4f0dd9abcb23 100644
--- a/net/minecraft/world/level/block/MagmaBlock.java
+++ b/net/minecraft/world/level/block/MagmaBlock.java
@@ -28,7 +28,7 @@ public class MagmaBlock extends Block {
@@ -15601,7 +15604,7 @@ index 6245b268d1361973a9dee2b80454779b7d0922f0..3345a151bdb5262be6ce117947f9975b
public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) {
- if (!entity.isSteppingCarefully() && entity instanceof LivingEntity) {
+ if ((!entity.isSteppingCarefully() || level.purpurConfig.magmaBlockDamageWhenSneaking) && entity instanceof LivingEntity) { // Purpur - Configurable damage settings for magma blocks
entity.hurt(level.damageSources().hotFloor().directBlock(level, pos), 1.0F); // CraftBukkit
entity.hurt(level.damageSources().hotFloor().eventBlockDamager(level, pos), 1.0F); // CraftBukkit
}
diff --git a/net/minecraft/world/level/block/NetherPortalBlock.java b/net/minecraft/world/level/block/NetherPortalBlock.java
@@ -15714,7 +15717,7 @@ index 9ca4ae8cdf9d88b8b6a6ed5d4c0b306bd0539ffe..42c696aa307516642029646305a4f71a
}
diff --git a/net/minecraft/world/level/block/PointedDripstoneBlock.java b/net/minecraft/world/level/block/PointedDripstoneBlock.java
index 8580d44daeb0dacd96714537c2abafd9700cd16b..b70735764bd81c3570845c45aa79782b9867c30b 100644
index 6a3548ee9f7d31e1fb02a47f4d8b9c1ed0bc2bc6..aa1fd38f26459944f0a08d88e68b989cb54728ed 100644
--- a/net/minecraft/world/level/block/PointedDripstoneBlock.java
+++ b/net/minecraft/world/level/block/PointedDripstoneBlock.java
@@ -197,20 +197,20 @@ public class PointedDripstoneBlock extends Block implements Fallable, SimpleWate
@@ -15768,15 +15771,15 @@ index f33b53257a231dccf16740f1e78a3cdfa6e70726..4b3d00b085ea5d345b418815c9869f5f
} else {
int x = pos.getX();
diff --git a/net/minecraft/world/level/block/RespawnAnchorBlock.java b/net/minecraft/world/level/block/RespawnAnchorBlock.java
index e6e93814b6d22eb0ef4122c04ddce30c12c28d3f..e49fba46b006cb4b7568403d2d15777e253b0aab 100644
index f90d1b0a9e4b80a42f450ff49a46765da19ce562..0631e6f0c242a1fc1dfa606a4d60686c31c7eb13 100644
--- a/net/minecraft/world/level/block/RespawnAnchorBlock.java
+++ b/net/minecraft/world/level/block/RespawnAnchorBlock.java
@@ -159,7 +159,7 @@ public class RespawnAnchorBlock extends Block {
};
Vec3 center = pos2.getCenter();
level.explode(
- null, level.damageSources().badRespawnPointExplosion(center, blockState), explosionDamageCalculator, center, 5.0F, true, Level.ExplosionInteraction.BLOCK // CraftBukkit - add state
+ null, level.damageSources().badRespawnPointExplosion(center, blockState), explosionDamageCalculator, center, (float) level.purpurConfig.respawnAnchorExplosionPower, level.purpurConfig.respawnAnchorExplosionFire, level.purpurConfig.respawnAnchorExplosionEffect // CraftBukkit - add state // Purpur - Implement respawn anchor explosion options
- null, level.damageSources().badRespawnPointExplosion(center).causingBlockSnapshot(blockState), explosionDamageCalculator, center, 5.0F, true, Level.ExplosionInteraction.BLOCK // CraftBukkit - add state
+ null, level.damageSources().badRespawnPointExplosion(center).causingBlockSnapshot(blockState), explosionDamageCalculator, center, (float) level.purpurConfig.respawnAnchorExplosionPower, level.purpurConfig.respawnAnchorExplosionFire, level.purpurConfig.respawnAnchorExplosionEffect // CraftBukkit - add state // Purpur - Implement respawn anchor explosion options
);
}
@@ -16351,7 +16354,7 @@ index 77618757c0e678532dbab814aceed83f7f1cd892..3fd0f42618e5c2c683335d1d3e0bb74c
+ // Purpur end - Persistent BlockEntity Lore and DisplayName
}
diff --git a/net/minecraft/world/level/block/entity/ConduitBlockEntity.java b/net/minecraft/world/level/block/entity/ConduitBlockEntity.java
index 269994df977801c67b8c576bde2478624b2631a1..b1689c67458f77f19c86d5d1d23f30e10a27d7a8 100644
index 9d80625fc95e4968cf80492dc7ecf1fd27e585b8..00b2d069c6eb26742f0fd74ac1103e428873248a 100644
--- a/net/minecraft/world/level/block/entity/ConduitBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/ConduitBlockEntity.java
@@ -155,7 +155,7 @@ public class ConduitBlockEntity extends BlockEntity {
@@ -16396,8 +16399,8 @@ index 269994df977801c67b8c576bde2478624b2631a1..b1689c67458f77f19c86d5d1d23f30e1
}
if (damageTarget && blockEntity.destroyTarget != null) { // CraftBukkit
- if (blockEntity.destroyTarget.hurtServer((net.minecraft.server.level.ServerLevel) level, level.damageSources().magic().directBlock(level, pos), 4.0F)) // CraftBukkit
+ if (blockEntity.destroyTarget.hurtServer((net.minecraft.server.level.ServerLevel) level, level.damageSources().magic().directBlock(level, pos), level.purpurConfig.conduitDamageAmount)) // CraftBukkit // Purpur - Conduit behavior configuration
- if (blockEntity.destroyTarget.hurtServer((net.minecraft.server.level.ServerLevel) level, level.damageSources().magic().eventBlockDamager(level, pos), 4.0F)) // CraftBukkit
+ if (blockEntity.destroyTarget.hurtServer((net.minecraft.server.level.ServerLevel) level, level.damageSources().magic().eventBlockDamager(level, pos), level.purpurConfig.conduitDamageAmount)) // CraftBukkit // Purpur - Conduit behavior configuration
level.playSound(
null,
blockEntity.destroyTarget.getX(),
@@ -16720,7 +16723,7 @@ index 710f4570bb45a25f20cf914c640539cfa9c9d31b..19ee66cc966cbd124d8c59bc55586237
private static final double SAFE_TRAVEL_MAX_VERTICAL_DELTA = 1.0;
private final Direction.Axis axis;
diff --git a/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java b/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
index f5a131e870a4f1ad06ebfb1f360720cf19656fb5..3a8c5a252ea5986b2366fa774ea1754494af1d59 100644
index 3c1c89aade5ff092b880ba1bf1de83f54d3d62cc..681dec447486138088fe5f705ef4fadab531139f 100644
--- a/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
+++ b/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
@@ -68,6 +68,7 @@ public class MapItemSavedData extends SavedData {

View File

@@ -78,7 +78,7 @@ index 72cdd8f72fb3f552d9729f21de438405abe3acdb..90a8494840faa0e7f605c904c657a953
// Gale end - MultiPaper - skip unnecessary mob spawning computations
int _int = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING);
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index ca16bef85f94ffb87eb27c9ec1429cba77e7fbc1..64841780b8fb037e730d947b21b1469e3f86229f 100644
index c0be2543ab55fda85302812a4773e551f64cf7d9..ffe2f8577ec42c9f071d72a191e8fefc6ba67f0e 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1232,7 +1232,7 @@ public class ServerGamePacketListenerImpl
@@ -91,10 +91,10 @@ index ca16bef85f94ffb87eb27c9ec1429cba77e7fbc1..64841780b8fb037e730d947b21b1469e
this.disconnectAsync(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause // Paper - add proper async disconnect
return;
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 3be4556a14b61fad5690a4e664e9e27ab94bb41f..761b3806ddec0675935dc2e24d36e4b221c53c9b 100644
index f83a90cba0229842389740199a8d7f12fe44b0d9..b775996b6dbc09c95c83a542da12dee7bf65bf4c 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -532,23 +532,37 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -533,23 +533,37 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
// Purpur end - Add canSaveToDisk to Entity
@@ -142,7 +142,7 @@ index 3be4556a14b61fad5690a4e664e9e27ab94bb41f..761b3806ddec0675935dc2e24d36e4b2
public Entity(EntityType<?> entityType, Level level) {
this.type = entityType;
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 8c56af2500f05b74e94c56faf75d186f0d383390..4fb6102c8ef930de80356c66397ca2167b1d0174 100644
index 7a07789f115cb4a8917097e0697e80184104817e..c9870c7ce29e240d60b5b29bdf4deba85023be60 100644
--- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java
@@ -1024,13 +1024,13 @@ public abstract class LivingEntity extends Entity implements Attackable {

View File

@@ -34,19 +34,6 @@ index ec9db1c12426db80dbf02d704e6c7ec867d59f6f..0fdda6b24aee95170e54079e53125b4a
return Math.max(0, ticksToBeFrog - this.age);
}
diff --git a/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java b/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java
index 4977262e78fe320d72158479c267842837344b67..4190940922af3a00845e6c656873ef8bca409f2c 100644
--- a/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java
+++ b/net/minecraft/world/level/block/entity/trialspawner/TrialSpawnerData.java
@@ -67,7 +67,7 @@ public class TrialSpawnerData {
);
public final Set<UUID> detectedPlayers = new HashSet<>();
public final Set<UUID> currentMobs = new HashSet<>();
- protected long cooldownEndsAt;
+ public long cooldownEndsAt; // Leaves - protected -> public
protected long nextMobSpawnsAt;
protected int totalMobsSpawned;
public Optional<SpawnData> nextSpawnData;
diff --git a/net/minecraft/world/level/storage/loot/LootPool.java b/net/minecraft/world/level/storage/loot/LootPool.java
index 29ad43245a310756c4227acd7532e905f7f8b8ee..ad422817593449b8e914628b51d760e732e2d50c 100644
--- a/net/minecraft/world/level/storage/loot/LootPool.java
@@ -61,7 +48,7 @@ index 29ad43245a310756c4227acd7532e905f7f8b8ee..ad422817593449b8e914628b51d760e7
private final Predicate<LootContext> compositeCondition;
private final List<LootItemFunction> functions;
diff --git a/net/minecraft/world/level/storage/loot/LootTable.java b/net/minecraft/world/level/storage/loot/LootTable.java
index f95d0f2da3d958519d28278079555c800aad02f8..bebffd07047e41c53b9e4f1ad5917680b8e8c796 100644
index dd646b11ef0a40e7f782742e62ccccfa9bcfd235..c9820777342124524c046d910085b1bf89c12488 100644
--- a/net/minecraft/world/level/storage/loot/LootTable.java
+++ b/net/minecraft/world/level/storage/loot/LootTable.java
@@ -45,7 +45,7 @@ public class LootTable {

View File

@@ -134,7 +134,7 @@ index 5c0a04db38821dbb0cba2bb6f0787f113d167efd..cd153db93f709c3142942fac88ae3ca2
.filter(player -> !playerList.isOp(player.getGameProfile()))
.map(player -> player.getGameProfile().getName()),
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index bb38adebfcf2e3c52971a79d8363a45f067727a9..69a807ccda1ec5334316863604aa3192065d16a1 100644
index cb8556fcf50293341cb090616e1e25e04d2eb5d8..d23e367b2e4374764dc059232c136a99db1cc9c6 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -216,6 +216,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -153,7 +153,7 @@ index bb38adebfcf2e3c52971a79d8363a45f067727a9..69a807ccda1ec5334316863604aa3192
}
// Paper start
@@ -2670,6 +2672,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -2672,6 +2674,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
// ServerLevel.this.getChunkSource().addEntity(entity); // Paper - ignore and warn about illegal addEntity calls instead of crashing server; moved down below valid=true
if (entity instanceof ServerPlayer serverPlayer) {
ServerLevel.this.players.add(serverPlayer);
@@ -165,7 +165,7 @@ index bb38adebfcf2e3c52971a79d8363a45f067727a9..69a807ccda1ec5334316863604aa3192
ServerLevel.this.updateSleepingPlayerList();
}
@@ -2740,6 +2747,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -2742,6 +2749,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
ServerLevel.this.getChunkSource().removeEntity(entity);
if (entity instanceof ServerPlayer serverPlayer) {
ServerLevel.this.players.remove(serverPlayer);

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable unknown command message
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
index d8464f77c54f547161356b78e76429923937b4a7..a59162764f141d9bb88c7084c66661f14de7ad57 100644
index 6b8757569e0f0d756612fc180fef13143c606eaf..07e690c623fe38ce099aa2f0002e7a7456120f3b 100644
--- a/net/minecraft/commands/Commands.java
+++ b/net/minecraft/commands/Commands.java
@@ -389,31 +389,9 @@ public class Commands {
@@ -383,31 +383,9 @@ public class Commands {
// Paper start - Add UnknownCommandEvent
final net.kyori.adventure.text.TextComponent.Builder builder = net.kyori.adventure.text.Component.text();
// source.sendFailure(ComponentUtils.fromMessage(var7.getRawMessage()));
@@ -42,7 +42,7 @@ index d8464f77c54f547161356b78e76429923937b4a7..a59162764f141d9bb88c7084c66661f1
org.bukkit.Bukkit.getServer().getPluginManager().callEvent(event);
if (event.message() != null) {
source.sendFailure(io.papermc.paper.adventure.PaperAdventure.asVanilla(event.message()), false);
@@ -676,6 +654,86 @@ public class Commands {
@@ -624,6 +602,86 @@ public class Commands {
};
}

View File

@@ -46,10 +46,10 @@ index 6c7edbbf3935c40ccb78bee680ea75431718b9bd..a1b4dc70d555cce5e06c0298736d8b89
public String toString() {
return "Reference{" + this.key + "=" + this.value + "}";
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 8bb2abb01f1af34d6829cbbf759a425d871f3e3f..40bc2f9ffc565229f1ba8910ebc3bb7be5f849c6 100644
index 970420761b2c3b82a60479c556e76e385bf211e1..4d88aa70c01e03baf8aea897b00f335c7be91f46 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1983,7 +1983,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1984,7 +1984,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
FluidState fluidState = this.level().getFluidState(blockPos);
double d = blockPos.getY() + fluidState.getHeight(this.level(), blockPos);
if (d > eyeY) {

View File

@@ -218,10 +218,10 @@ index d8298c7925e3bcea07ead4d438478cc51abcfa16..75670751064add901c2628d53d802835
attributesToSync.clear();
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index f9e335c86684969b744a7d7c1d96458e830bbd35..9f3fe9ffdbd2973754898233cca60b7335d671c9 100644
index 23f57512e2b4284af0bdbb6f4fc823f26a32d739..623d5e02090b18b2b54dd6fc0da5e579021caca5 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -2495,7 +2495,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -2497,7 +2497,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@Override
public LevelEntityGetter<Entity> getEntities() {
@@ -231,7 +231,7 @@ index f9e335c86684969b744a7d7c1d96458e830bbd35..9f3fe9ffdbd2973754898233cca60b73
}
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 7b493b28f57977c92c4a45049cedcb0cedbe8ae9..89a9a9738ae1a6b67fa3840000af496ebcff67da 100644
index 9960b26d5f5d931bacea3fb5c8fbe14dddd8d0e2..b6070af21a2f8f393146cab36488506eb0d308d0 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1816,7 +1816,7 @@ public class ServerGamePacketListenerImpl

View File

@@ -8,10 +8,10 @@ avoids multiple casting in Entity#distanceTo, using Math#sqrt directly instead o
these methods more able to be inlined by the JIT compiler.
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 40bc2f9ffc565229f1ba8910ebc3bb7be5f849c6..3beb2b05265cf274f52170018cc22243b06c05e9 100644
index 4d88aa70c01e03baf8aea897b00f335c7be91f46..4544dd876d3cbcdb9b774b4a1f0c4737f3124bc5 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -2193,31 +2193,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -2194,31 +2194,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return new Vec3(this.xOld, this.yOld, this.zOld);
}
@@ -43,7 +43,7 @@ index 40bc2f9ffc565229f1ba8910ebc3bb7be5f849c6..3beb2b05265cf274f52170018cc22243
public void playerTouch(Player player) {
}
@@ -5229,4 +5204,34 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -5230,4 +5205,34 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return false;
}
// Purpur end - Ridables

View File

@@ -12,7 +12,7 @@ As part of: Lithium (https://github.com/CaffeineMC/lithium-fabric)
Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html)
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index a7f87ba5a447be8bd1a4029da999aca34a583b5e..4c9c41b3d0f8752e6dc60c513a951b79945a4549 100644
index f744c9dca670cbbcc7549be17bf51eb683dd1ae0..f70a843be612903136ae603c4d4c0bad06f4628a 100644
--- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java
@@ -2732,6 +2732,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -23,7 +23,7 @@ index a7f87ba5a447be8bd1a4029da999aca34a583b5e..4c9c41b3d0f8752e6dc60c513a951b79
int currentSwingDuration = this.getCurrentSwingDuration();
if (this.swinging) {
this.swingTime++;
@@ -3665,6 +3666,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -3683,6 +3684,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
protected void updateFallFlying() {
this.checkSlowFallDistance();
if (!this.level().isClientSide) {

View File

@@ -76,7 +76,7 @@ index a8c6549f772208cd543607224fef2c2389b14f24..709631db548a16a969a373e26ebbcd69
public boolean equals(Object other) {
return this == other
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 4c9c41b3d0f8752e6dc60c513a951b79945a4549..7d88bcb727b53217f10472d73726a96f54ebc31d 100644
index f70a843be612903136ae603c4d4c0bad06f4628a..f4f978073fca1be8fe18bc13f64385d4c0cd4b3d 100644
--- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java
@@ -159,7 +159,7 @@ import org.bukkit.event.entity.EntityTeleportEvent;
@@ -133,9 +133,9 @@ index 4c9c41b3d0f8752e6dc60c513a951b79945a4549..7d88bcb727b53217f10472d73726a96f
+ if (!isArmorStandUpdateNoTick && !this.equipmentChanged) return null;
+ // Leaf end - Lithium - equipment tracking
Map<EquipmentSlot, ItemStack> map = null;
for (EquipmentSlot equipmentSlot : EquipmentSlot.VALUES) {
@@ -4698,6 +4708,81 @@ public abstract class LivingEntity extends Entity implements Attackable {
// Paper start - EntityEquipmentChangedEvent
record EquipmentChangeImpl(org.bukkit.inventory.ItemStack oldItem, org.bukkit.inventory.ItemStack newItem) implements io.papermc.paper.event.entity.EntityEquipmentChangedEvent.EquipmentChange {
@@ -4716,6 +4726,81 @@ public abstract class LivingEntity extends Entity implements Attackable {
return this.lastHurtByPlayerTime;
}

View File

@@ -84,7 +84,7 @@ index 571db5f9bf94745a8afe2cd313e593fb15db5e37..1487b7d8be435b3fbad2aabd05796965
valueInMap = new ServerChunkTasks(
keyInMap, ServerLightQueue.this.lightInterface, ServerLightQueue.this, priority
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 9f3fe9ffdbd2973754898233cca60b7335d671c9..dd1827931e7a2f771444867ad556444de5001060 100644
index 623d5e02090b18b2b54dd6fc0da5e579021caca5..26223a3c26691303a91b988b6d84373a303785dd 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -508,7 +508,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -96,7 +96,7 @@ index 9f3fe9ffdbd2973754898233cca60b7335d671c9..dd1827931e7a2f771444867ad556444d
return;
}
@@ -2568,7 +2568,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -2570,7 +2570,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
public boolean isNaturalSpawningAllowed(ChunkPos chunkPos) {
// Paper start - rewrite chunk system

View File

@@ -3,10 +3,12 @@ From: Github Actions <no-reply@github.com>
Date: Thu, 16 Jan 2025 11:21:12 +0000
Subject: [PATCH] Purpur Server Paper Changes
TODO: Add Improve output of plugins command back tonight
Original license: MIT
Original project: https://github.com/PurpurMC/Purpur
Commit: e6a1ebd3f6e4cfe93f96dd82ecb3234f0482768a
Commit: 22bd4186ca92f21a01714ba8e6b4823ccc576c81
Patches listed below are removed in this patch, They exists in Gale or Leaf:
* "Rebrand.patch"
@@ -142,134 +144,6 @@ index 6bdc683b5ade408ee27f1d6636b4d60c8c89cb7c..bc6d3898d8784e50a0e2264bbb5bde63
ignored.add("goal_selector_1");
ignored.add("goal_selector_2");
diff --git a/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java b/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java
index f0fce4113fb07c64adbec029d177c236cbdcbae8..94dc9f97de086e3ab51d1b000eb116cf868a75db 100644
--- a/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java
+++ b/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java
@@ -78,10 +78,10 @@ public class PaperPluginsCommand extends BukkitCommand {
this.setAliases(Arrays.asList("pl"));
}
- private static <T> List<Component> formatProviders(TreeMap<String, PluginProvider<T>> plugins) {
+ private static <T> List<Component> formatProviders(TreeMap<String, PluginProvider<T>> plugins, @NotNull CommandSender sender) { // Purpur - Improve output of plugins command
List<Component> components = new ArrayList<>(plugins.size());
for (PluginProvider<T> entry : plugins.values()) {
- components.add(formatProvider(entry));
+ components.add(formatProvider(entry, sender)); // Purpur - Improve output of plugins command
}
boolean isFirst = true;
@@ -109,7 +109,7 @@ public class PaperPluginsCommand extends BukkitCommand {
return formattedSublists;
}
- private static Component formatProvider(PluginProvider<?> provider) {
+ private static Component formatProvider(PluginProvider<?> provider, @NotNull CommandSender sender) { // Purpur - Improve output of plugins command
TextComponent.Builder builder = Component.text();
if (provider instanceof SpigotPluginProvider spigotPluginProvider && CraftMagicNumbers.isLegacy(spigotPluginProvider.getMeta())) {
builder.append(LEGACY_PLUGIN_STAR);
@@ -117,13 +117,65 @@ public class PaperPluginsCommand extends BukkitCommand {
String name = provider.getMeta().getName();
Component pluginName = Component.text(name, fromStatus(provider))
- .clickEvent(ClickEvent.runCommand("/version " + name));
+ // Purpur start - Improve output of plugins command
+ .clickEvent(ClickEvent.suggestCommand("/version " + name));
+
+ if (sender instanceof org.bukkit.entity.Player && sender.hasPermission("bukkit.command.version")) {
+ // Event components
+ String description = provider.getMeta().getDescription();
+ TextComponent.Builder hover = Component.text();
+ hover.append(Component.text("Version: ", NamedTextColor.WHITE)).append(Component.text(provider.getMeta().getVersion(), NamedTextColor.GREEN));
+
+ if (description != null) {
+ hover.append(Component.newline())
+ .append(Component.text("Description: ", NamedTextColor.WHITE))
+ .append(Component.text(description, NamedTextColor.GREEN));
+ }
+
+ if (provider.getMeta().getWebsite() != null) {
+ hover.append(Component.newline())
+ .append(Component.text("Website: ", NamedTextColor.WHITE))
+ .append(Component.text(provider.getMeta().getWebsite(), NamedTextColor.GREEN));
+ }
+
+ if (!provider.getMeta().getAuthors().isEmpty()) {
+ hover.append(Component.newline());
+ if (provider.getMeta().getAuthors().size() == 1) {
+ hover.append(Component.text("Author: "));
+ } else {
+ hover.append(Component.text("Authors: "));
+ }
+
+ hover.append(getAuthors(provider.getMeta()));
+ }
+
+ pluginName = pluginName.hoverEvent(hover.build());
+ }
+ // Purpur end - Improve output of plugins command
builder.append(pluginName);
return builder.build();
}
+ // Purpur start - Improve output of plugins command
+ @NotNull
+ private static TextComponent getAuthors(@NotNull final PluginMeta pluginMeta) {
+ TextComponent.Builder builder = Component.text();
+ List<String> authors = pluginMeta.getAuthors();
+
+ for (int i = 0; i < authors.size(); i++) {
+ if (i > 0) {
+ builder.append(Component.text(i < authors.size() - 1 ? ", " : " and ", NamedTextColor.WHITE));
+ }
+
+ builder.append(Component.text(authors.get(i), NamedTextColor.GREEN));
+ }
+
+ return builder.build();
+ }
+ // Purpur end - Improve output of plugins command
+
private static Component asPlainComponents(String strings) {
net.kyori.adventure.text.TextComponent.Builder builder = Component.text();
for (String string : strings.split("\n")) {
@@ -182,24 +234,24 @@ public class PaperPluginsCommand extends BukkitCommand {
}
}
- Component infoMessage = Component.text("Server Plugins (%s):".formatted(paperPlugins.size() + spigotPlugins.size()), NamedTextColor.WHITE);
+ //Component infoMessage = Component.text("Server Plugins (%s):".formatted(paperPlugins.size() + spigotPlugins.size()), NamedTextColor.WHITE); // Purpur - Improve output of plugins command
//.append(INFO_ICON_START.hoverEvent(SERVER_PLUGIN_INFO)); TODO: Add docs
- sender.sendMessage(infoMessage);
+ //sender.sendMessage(infoMessage); // Purpur - Improve output of plugins command
- if (!paperPlugins.isEmpty()) {
- sender.sendMessage(PAPER_HEADER);
- }
+ //if (!paperPlugins.isEmpty()) { // Purpur - Improve output of plugins command
+ sender.sendMessage(PAPER_HEADER.append(Component.text(" (%s):".formatted(paperPlugins.size())))); // Purpur - Improve output of plugins command
+ //} // Purpur - Improve output of plugins command
- for (Component component : formatProviders(paperPlugins)) {
+ for (Component component : formatProviders(paperPlugins, sender)) { // Purpur - Improve output of plugins command
sender.sendMessage(component);
}
- if (!spigotPlugins.isEmpty()) {
- sender.sendMessage(BUKKIT_HEADER);
- }
+ //if (!spigotPlugins.isEmpty()) { // Purpur - Improve output of plugins command
+ sender.sendMessage(BUKKIT_HEADER.append(Component.text(" (%s):".formatted(spigotPlugins.size())))); // Purpur - Improve output of plugins command
+ //} // Purpur - Improve output of plugins command
- for (Component component : formatProviders(spigotPlugins)) {
+ for (Component component : formatProviders(spigotPlugins, sender)) { // Purpur - Improve output of plugins command
sender.sendMessage(component);
}
diff --git a/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java b/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java
index 352d62385e56d5805510596ec9424e5d14336861..b4d4ad2dc7d719d72c0786791f803fbcf0982d1f 100644
--- a/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java
@@ -559,10 +433,10 @@ index 94ca0407303c4493ab4928b12ec6ecc75aaca549..f2d87c12dd19210ce7e2147fada5c101
+ // Purpur end - OfflinePlayer API
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8cffa01582 100644
index 0b085b3748a2700c3eb3bc158e5d42afae1efc1d..1816ec002c91d108529e9b1dcd7b5f0a7fbc52ef 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -428,6 +428,20 @@ public final class CraftServer implements Server {
@@ -429,6 +429,20 @@ public final class CraftServer implements Server {
this.paperPluginManager = new io.papermc.paper.plugin.manager.PaperPluginManagerImpl(this, this.commandMap, pluginManager);
this.pluginManager.paperPluginManager = this.paperPluginManager;
// Paper end
@@ -583,7 +457,7 @@ index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8c
CraftRegistry.setMinecraftRegistry(console.registryAccess());
@@ -1089,6 +1103,7 @@ public final class CraftServer implements Server {
@@ -1090,6 +1104,7 @@ public final class CraftServer implements Server {
org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot
this.console.paperConfigurations.reloadConfigs(this.console);
this.console.galeConfigurations.reloadConfigs(this.console); // Gale - Gale configuration
@@ -591,7 +465,7 @@ index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8c
for (ServerLevel world : this.console.getAllLevels()) {
// world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty
world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean))
@@ -1104,6 +1119,7 @@ public final class CraftServer implements Server {
@@ -1105,6 +1120,7 @@ public final class CraftServer implements Server {
}
}
world.spigotConfig.init(); // Spigot
@@ -599,7 +473,7 @@ index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8c
}
Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper
@@ -1122,6 +1138,7 @@ public final class CraftServer implements Server {
@@ -1123,6 +1139,7 @@ public final class CraftServer implements Server {
io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper
org.galemc.gale.command.GaleCommands.registerCommands(this.console); // Gale - Gale commands - register commands
this.spark.registerCommandBeforePlugins(this); // Paper - spark
@@ -607,7 +481,7 @@ index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8c
this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*");
this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions");
@@ -1653,6 +1670,60 @@ public final class CraftServer implements Server {
@@ -1654,6 +1671,60 @@ public final class CraftServer implements Server {
return true;
}
@@ -668,7 +542,7 @@ index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8c
@Override
public List<Recipe> getRecipesFor(ItemStack result) {
Preconditions.checkArgument(result != null, "ItemStack cannot be null");
@@ -3060,6 +3131,18 @@ public final class CraftServer implements Server {
@@ -3066,6 +3137,18 @@ public final class CraftServer implements Server {
}
// Gale end - Gale configuration - API
@@ -687,7 +561,7 @@ index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8c
@Override
public void restart() {
org.spigotmc.RestartCommand.restart();
@@ -3352,4 +3435,18 @@ public final class CraftServer implements Server {
@@ -3358,4 +3441,18 @@ public final class CraftServer implements Server {
return MinecraftServer.lastTickOversleepTime;
}
// Gale end - YAPFA - last tick time - API
@@ -707,10 +581,10 @@ index 6f94aed7e136bd13dddaca1e2a214e55cf87403b..bdefa58dac3236e26ca40f92c1c64f8c
+ // Purpur end - Lagging threshold
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index 284b58ece65d9cf6411a79abb748f1dfa52edc92..ba5797e9e518d7a1054bad0c7a1fb10b9eaf32bd 100644
index 1439d282167dc8a2e66f4896849153b810112988..ca60f91ef012c94174a0803eb77699ba9ecff5e1 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -2373,6 +2373,50 @@ public class CraftWorld extends CraftRegionAccessor implements World {
@@ -2346,6 +2346,50 @@ public class CraftWorld extends CraftRegionAccessor implements World {
return (this.getHandle().getDragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().getDragonFight());
}
@@ -931,7 +805,7 @@ index d657fd2c507a5b215aeab0a5f3e9c2ee892a27c8..3604d92c122b5c8be823098ce7b91e57
// Paper start
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index 659f0f9c7e45e5174f4736c4878a78d330b1d4ee..0d46585c0128cea7265870de5fe260681c65d7c3 100644
index 1ee0ad266955e36b729ba31eb75aad9289acd8e4..8635cd772c5c2ae0ba326812ff2a1a179285a86f 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -90,6 +90,25 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
@@ -1140,10 +1014,10 @@ index 351f42842b780d053cd2e5bad9ae299449141b10..054d2c2b93c43faeeaf56f482eb7b943
+ // Purpur end - Llama API
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index baffa036078bfc38505f9008a54a5abff65704db..d84d716629d93e264bc40c565e9fedd1ce38722c 100644
index 3260f20b667918dd7cd641d5d96688721fce2f9c..5ee96349f7d720e6cf36ced42c7197579730ccbd 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -591,10 +591,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -592,10 +592,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public void setPlayerListName(String name) {
@@ -1160,7 +1034,7 @@ index baffa036078bfc38505f9008a54a5abff65704db..d84d716629d93e264bc40c565e9fedd1
if (this.getHandle().connection == null) return; // Paper - Updates are possible before the player has fully joined
for (ServerPlayer player : (List<ServerPlayer>) this.server.getHandle().players) {
if (player.getBukkitEntity().canSee(this)) {
@@ -1433,6 +1438,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -1434,6 +1439,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
// Paper start - Teleport passenger API
// Don't allow teleporting between worlds while keeping passengers
if (ignorePassengers && entity.isVehicle() && location.getWorld() != this.getWorld()) {
@@ -1168,7 +1042,7 @@ index baffa036078bfc38505f9008a54a5abff65704db..d84d716629d93e264bc40c565e9fedd1
return false;
}
@@ -1454,6 +1460,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -1455,6 +1461,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API
@@ -1176,7 +1050,7 @@ index baffa036078bfc38505f9008a54a5abff65704db..d84d716629d93e264bc40c565e9fedd1
return false;
}
@@ -2752,6 +2759,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -2753,6 +2760,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.getHandle().getAbilities().walkingSpeed * 2f;
}
@@ -1205,7 +1079,7 @@ index baffa036078bfc38505f9008a54a5abff65704db..d84d716629d93e264bc40c565e9fedd1
private void validateSpeed(float value) {
Preconditions.checkArgument(value <= 1f && value >= -1f, "Speed value (%s) need to be between -1f and 1f", value);
}
@@ -3581,4 +3610,75 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -3583,4 +3612,75 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
handle.containerMenu.broadcastChanges();
return new PaperPlayerGiveResult(leftovers.build(), drops.build());
}
@@ -1362,7 +1236,7 @@ index c1b7f1281fbd41e765d2c1881763ca25b20e924d..53c620e717d39ef16f44c9697ac4809a
+ // Purpur end - Configurable chance for wolves to spawn rabid
}
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index fd4c1d67c134caf818f10bfd54831863c485f6a9..0131eaade61bc30a094a3166e8cd58cd7cfd7921 100644
index 57c3f8531bf85b53af3a4aad6e9e369d5cff0ce3..a9edb1818edb50e739d507d6dacc1409e70db8d5 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -602,6 +602,15 @@ public class CraftEventFactory {
@@ -1381,16 +1255,16 @@ index fd4c1d67c134caf818f10bfd54831863c485f6a9..0131eaade61bc30a094a3166e8cd58cd
return event;
}
@@ -1131,7 +1140,7 @@ public class CraftEventFactory {
return CraftEventFactory.callEntityDamageEvent(source.getDirectBlock(), source.getDirectBlockState(), entity, DamageCause.LAVA, bukkitDamageSource, modifiers, modifierFunctions, cancelled);
} else if (source.getDirectBlock() != null) {
@@ -1135,7 +1144,7 @@ public class CraftEventFactory {
DamageCause cause;
- if (source.is(DamageTypes.CACTUS) || source.is(DamageTypes.SWEET_BERRY_BUSH) || source.is(DamageTypes.STALAGMITE) || source.is(DamageTypes.FALLING_STALACTITE) || source.is(DamageTypes.FALLING_ANVIL)) {
+ if (source.is(DamageTypes.CACTUS) || source.is(DamageTypes.SWEET_BERRY_BUSH) || source.is(DamageTypes.STALAGMITE) || source.is(DamageTypes.FALLING_STALACTITE) || source.is(DamageTypes.FALLING_ANVIL) || source.isStonecutter()) { // Purpur - Stonecutter damage
if (source.knownCause() != null) {
cause = source.knownCause();
- } else if (source.is(DamageTypes.CACTUS) || source.is(DamageTypes.SWEET_BERRY_BUSH) || source.is(DamageTypes.STALAGMITE) || source.is(DamageTypes.FALLING_STALACTITE) || source.is(DamageTypes.FALLING_ANVIL)) {
+ } else if (source.is(DamageTypes.CACTUS) || source.is(DamageTypes.SWEET_BERRY_BUSH) || source.is(DamageTypes.STALAGMITE) || source.is(DamageTypes.FALLING_STALACTITE) || source.is(DamageTypes.FALLING_ANVIL) || source.isStonecutter()) { // Purpur - Stonecutter damage
cause = DamageCause.CONTACT;
} else if (source.is(DamageTypes.HOT_FLOOR)) {
cause = DamageCause.HOT_FLOOR;
@@ -1191,6 +1200,7 @@ public class CraftEventFactory {
@@ -1193,6 +1202,7 @@ public class CraftEventFactory {
EntityDamageEvent event;
if (damager != null) {
event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions, critical);
@@ -1494,10 +1368,10 @@ index 792cb6adf0c7a6335cc5985fce8bed2e0f1149af..5734c5caffda79383ae30df20c3defb5
+ // Purpur end - Anvil API
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
index 3799973696eabbdc992bee4ff24175fc28ec8d7c..ae68b1d72be45503acc8c7a52b20d95d7b651f06 100644
index a6668ae293737a78316724a94866ad7781af68a4..b389563f1efde27341ebf26276ca5c97e495a16a 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
@@ -666,4 +666,285 @@ public final class CraftItemStack extends ItemStack {
@@ -693,4 +693,285 @@ public final class CraftItemStack extends ItemStack {
}
// Paper end - data component API

View File

@@ -47,10 +47,10 @@ index 097500a59336db1bbfffcd1aa4cff7a8586e46ec..f06076864582ed153c6154fd7f3e9101
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index de2c10a18869d3fcfc1ae1329489155d7bdc4dd8..911bb12bcbcae2b8046d786e7b828cc1e1bcdb3a 100644
index 1816ec002c91d108529e9b1dcd7b5f0a7fbc52ef..aa6f0588f282e3152ef9639d6fb2b8cd1d54bdb7 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1048,10 +1048,8 @@ public final class CraftServer implements Server {
@@ -1049,10 +1049,8 @@ public final class CraftServer implements Server {
commands.performCommand(results, commandLine, commandLine, true);
} catch (CommandException ex) {
this.pluginManager.callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerCommandException(ex, target, sender, args))); // Paper

View File

@@ -7,10 +7,10 @@ Original license: MIT
Original project: https://github.com/KeYiMC/KeYi
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index d84d716629d93e264bc40c565e9fedd1ce38722c..b78782a90bd9dcc43e9b98781f95a619b00d88cb 100644
index 5ee96349f7d720e6cf36ced42c7197579730ccbd..9604dbd470a58790637f4caa691043ff8b9b9721 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -3681,4 +3681,31 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -3683,4 +3683,31 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket(getEntityId(), io.papermc.paper.adventure.PaperAdventure.asVanilla(message)));
}
// Purpur end - Death screen API

View File

@@ -9,10 +9,10 @@ Original project: https://github.com/Cryptite/Slice
Co-authored-by: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com>
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index b78782a90bd9dcc43e9b98781f95a619b00d88cb..5480b93b922f282fb2193a5b7ed16651764de5f5 100644
index 9604dbd470a58790637f4caa691043ff8b9b9721..add4414067eaaaa2cc5fa3e02aa6cd2a3cd5dadc 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -1383,6 +1383,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -1384,6 +1384,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
// Paper end - Teleportation API
}

View File

@@ -12,10 +12,10 @@ Original project: https://github.com/LeavesMC/Leaves
Commit: 41476d86922416c45f703df2871890831fc42bb5
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index c4be459991b458aaf9288b467e73f142e9b26825..53dbd3022fc4ab4786b2b9d8de27b84bfee81935 100644
index aa6f0588f282e3152ef9639d6fb2b8cd1d54bdb7..514c2d414ac59c71929a7686204465c72d122513 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -507,6 +507,7 @@ public final class CraftServer implements Server {
@@ -508,6 +508,7 @@ public final class CraftServer implements Server {
this.potionBrewer = new io.papermc.paper.potion.PaperPotionBrewer(console); // Paper - custom potion mixes
datapackManager = new io.papermc.paper.datapack.PaperDatapackManager(console.getPackRepository()); // Paper
this.spark = new io.papermc.paper.SparksFly(this); // Paper - spark
@@ -23,7 +23,7 @@ index c4be459991b458aaf9288b467e73f142e9b26825..53dbd3022fc4ab4786b2b9d8de27b84b
}
public boolean getCommandBlockOverride(String command) {
@@ -1139,6 +1140,7 @@ public final class CraftServer implements Server {
@@ -1140,6 +1141,7 @@ public final class CraftServer implements Server {
org.purpurmc.purpur.PurpurConfig.registerCommands(); // Purpur - Purpur config files
this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*");
this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions");

View File

@@ -27,10 +27,10 @@ index 4c003acccdd2dd17918b15316001e52e7670123e..780f3a48152fef6a06dc67bf7fbd1965
HandlerList handlers = event.getHandlers();
RegisteredListener[] listeners = handlers.getRegisteredListeners();
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 53dbd3022fc4ab4786b2b9d8de27b84bfee81935..acd4369d6b8766bce201f35105a90bfe3ae99bb1 100644
index 514c2d414ac59c71929a7686204465c72d122513..f1d6e2e31ef776a792124d79446323d0bb2c611f 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -321,6 +321,8 @@ public final class CraftServer implements Server {
@@ -322,6 +322,8 @@ public final class CraftServer implements Server {
private final io.papermc.paper.threadedregions.scheduler.FoliaAsyncScheduler asyncScheduler = new io.papermc.paper.threadedregions.scheduler.FoliaAsyncScheduler();
private final io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler globalRegionScheduler = new io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler();
@@ -39,7 +39,7 @@ index 53dbd3022fc4ab4786b2b9d8de27b84bfee81935..acd4369d6b8766bce201f35105a90bfe
@Override
public final io.papermc.paper.threadedregions.scheduler.RegionScheduler getRegionScheduler() {
return this.regionizedScheduler;
@@ -409,7 +411,7 @@ public final class CraftServer implements Server {
@@ -410,7 +412,7 @@ public final class CraftServer implements Server {
public CraftServer(DedicatedServer console, PlayerList playerList) {
this.console = console;
this.playerList = (DedicatedPlayerList) playerList;
@@ -48,7 +48,7 @@ index 53dbd3022fc4ab4786b2b9d8de27b84bfee81935..acd4369d6b8766bce201f35105a90bfe
@Override
public CraftPlayer apply(ServerPlayer player) {
return player.getBukkitEntity();
@@ -3449,4 +3451,11 @@ public final class CraftServer implements Server {
@@ -3455,4 +3457,11 @@ public final class CraftServer implements Server {
return getServer().lagging;
}
// Purpur end - Lagging threshold
@@ -61,7 +61,7 @@ index 53dbd3022fc4ab4786b2b9d8de27b84bfee81935..acd4369d6b8766bce201f35105a90bfe
+ // Leaves end - replay mod api
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index 0d46585c0128cea7265870de5fe260681c65d7c3..5c99cdd9e88c9a9a350393b755037b5c7433377a 100644
index 8635cd772c5c2ae0ba326812ff2a1a179285a86f..cc024874fbde9678bdddfdca7c25080869d66de2 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -117,6 +117,8 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
@@ -74,10 +74,10 @@ index 0d46585c0128cea7265870de5fe260681c65d7c3..5c99cdd9e88c9a9a350393b755037b5c
if (entity instanceof EnderDragonPart complexPart) {
if (complexPart.parentMob instanceof EnderDragon) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 5480b93b922f282fb2193a5b7ed16651764de5f5..6b72004ac0d40bba230e4d721a868fdd37117e22 100644
index add4414067eaaaa2cc5fa3e02aa6cd2a3cd5dadc..020f6fdb1e7a17a6189cefb9c2350289e2e0e10b 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -2283,7 +2283,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -2284,7 +2284,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public boolean canSee(Player player) {

View File

@@ -16,10 +16,10 @@ This seems stupid, but it does seem that it improves the performance a bit, and
We also create a "canSee" method tailored for "ChunkMap#updatePlayer()", a method without the equals check (the "updatePlayer()" already checks if the entity is the same entity) because the CraftPlayer's `equals()` check is a *bit* expensive compared to only checking the object's identity, and because the identity has already been check, we don't need to check it twice.
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 6b72004ac0d40bba230e4d721a868fdd37117e22..9353905312c53b9e54f54d774b80a22f414a9a56 100644
index 020f6fdb1e7a17a6189cefb9c2350289e2e0e10b..ecf97945743b3988d910a7f5b010732d4b31526b 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -213,7 +213,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -214,7 +214,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
private boolean hasPlayedBefore = false;
private final ConversationTracker conversationTracker = new ConversationTracker();
private final Set<String> channels = new HashSet<String>();
@@ -28,7 +28,7 @@ index 6b72004ac0d40bba230e4d721a868fdd37117e22..9353905312c53b9e54f54d774b80a22f
private final Set<UUID> unlistedEntities = new HashSet<>(); // Paper - Add Listing API for Player
private static final WeakHashMap<Plugin, WeakReference<Plugin>> pluginWeakReferences = new WeakHashMap<>();
private int hash = 0;
@@ -2288,9 +2288,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -2289,9 +2289,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public boolean canSee(org.bukkit.entity.Entity entity) {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Including 5s in getTPS()
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index acd4369d6b8766bce201f35105a90bfe3ae99bb1..19de30ac7bf35f1267515857d1790019613f9cc5 100644
index f1d6e2e31ef776a792124d79446323d0bb2c611f..ef0c0374261bc4d673e0b8150e268328125e3542 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -3173,6 +3173,8 @@ public final class CraftServer implements Server {
@@ -3179,6 +3179,8 @@ public final class CraftServer implements Server {
@Override
public double[] getTPS() {

View File

@@ -32,10 +32,10 @@ index de8b9048c8395c05b8688bc9d984b8ad680f15b3..fab62216edd7181585fbf1e5cd9870e8
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 19de30ac7bf35f1267515857d1790019613f9cc5..d8e90d528f8bf300a84d2105651059106c5f7d99 100644
index ef0c0374261bc4d673e0b8150e268328125e3542..2f030eae4603f9a33fbc8d0e9b400479ab336e32 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1413,7 +1413,11 @@ public final class CraftServer implements Server {
@@ -1414,7 +1414,11 @@ public final class CraftServer implements Server {
registryAccess = levelDataAndDimensions.dimensions().dimensionsRegistryAccess();
} else {
LevelSettings levelSettings;

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Replace world map with optimized collection
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index c58a626e9ab72f45665cda40581e268ead322091..dc7ef642c8dfdb643dda3f3eed66b8371a6911fc 100644
index 2f030eae4603f9a33fbc8d0e9b400479ab336e32..116c842ef64835152a662476b6c33152360c1a4a 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -284,7 +284,7 @@ public final class CraftServer implements Server {
@@ -285,7 +285,7 @@ public final class CraftServer implements Server {
private final StructureManager structureManager;
protected final DedicatedServer console;
protected final DedicatedPlayerList playerList;

View File

@@ -8,10 +8,10 @@ replacing ArrayList with Fastutil ObjectArrayList
brings about 40% performance improvement in benchmark.
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index dc7ef642c8dfdb643dda3f3eed66b8371a6911fc..de8001b527d354b16ccc6919675fd5d5038410c9 100644
index 116c842ef64835152a662476b6c33152360c1a4a..fcedf7af3fff97821cbb7ee2e0fef070659deb5a 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -992,7 +992,7 @@ public final class CraftServer implements Server {
@@ -993,7 +993,7 @@ public final class CraftServer implements Server {
@Override
public List<World> getWorlds() {

View File

@@ -9,10 +9,10 @@ Added some asynchronous structure locate methods in World,
requires async-locator to be enabled in Leaf config, or else it will fall back to sync methods.
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index ba5797e9e518d7a1054bad0c7a1fb10b9eaf32bd..5d3c7a131c6becbf0c95e5c7bd8b4e727a102b24 100644
index ca60f91ef012c94174a0803eb77699ba9ecff5e1..15673166e566b2a6d5093210d99b154e69fab0ad 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -2298,6 +2298,45 @@ public class CraftWorld extends CraftRegionAccessor implements World {
@@ -2271,6 +2271,45 @@ public class CraftWorld extends CraftRegionAccessor implements World {
return new CraftStructureSearchResult(CraftStructure.minecraftToBukkit(found.getSecond().value()), CraftLocation.toBukkit(found.getFirst(), this));
}