From 770fbe66e095ee36ca4a5c0d3ea8b26a0eb5efab Mon Sep 17 00:00:00 2001 From: granny Date: Sun, 11 Feb 2024 23:12:15 -0800 Subject: [PATCH] clean up damage type code for stonecutter and scissor patches --- patches/api/0052-Stonecutter-damage.patch | 20 ++++ .../server/0132-Dont-run-with-scissors.patch | 82 ++++++++++++---- patches/server/0251-Stonecutter-damage.patch | 95 ++++++++++++++----- ...lways-showing-item-in-player-death-m.patch | 6 +- 4 files changed, 156 insertions(+), 47 deletions(-) create mode 100644 patches/api/0052-Stonecutter-damage.patch diff --git a/patches/api/0052-Stonecutter-damage.patch b/patches/api/0052-Stonecutter-damage.patch new file mode 100644 index 000000000..c64311052 --- /dev/null +++ b/patches/api/0052-Stonecutter-damage.patch @@ -0,0 +1,20 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: granny +Date: Sun, 11 Feb 2024 23:07:47 -0800 +Subject: [PATCH] Stonecutter damage + + +diff --git a/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java b/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java +index 3b20000d9ac3e29fe3bc5093e6635377bee88dbd..fae6f2c125eb6db88f3e8741b77f17b6817d62a9 100644 +--- a/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java ++++ b/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java +@@ -292,7 +292,8 @@ public class EntityDamageEvent extends EntityEvent implements Cancellable { + WORLD_BORDER, + /** + * Damage caused when an entity contacts a block such as a Cactus, +- * Dripstone (Stalagmite) or Berry Bush. ++ * Dripstone (Stalagmite) or Berry Bush. (Stonecutters too if you ++ * have the Stonecutter damage Purpur feature enabled) + *

+ * Damage: variable + */ diff --git a/patches/server/0132-Dont-run-with-scissors.patch b/patches/server/0132-Dont-run-with-scissors.patch index dad6ce57f..d0cdada7c 100644 --- a/patches/server/0132-Dont-run-with-scissors.patch +++ b/patches/server/0132-Dont-run-with-scissors.patch @@ -37,7 +37,7 @@ index 32f33eb8b99ad4655cf021b7cf16eb15fe96ba59..4220c1b4e44ecf67653fe5a50a209866 AABB axisalignedbb1 = this.player.getBoundingBox().move(newX - this.player.getX(), newY - this.player.getY(), newZ - this.player.getZ()); Iterable iterable = world.getCollisions(this.player, axisalignedbb1.deflate(9.999999747378752E-6D)); diff --git a/src/main/java/net/minecraft/world/damagesource/CombatTracker.java b/src/main/java/net/minecraft/world/damagesource/CombatTracker.java -index 9c99b2e365aacb8309f29acb9025faccd2c676b3..9e3608650c44ef5fa724c3aea86603d7bd02429c 100644 +index 9c99b2e365aacb8309f29acb9025faccd2c676b3..5c9d49b40a940df724101bef339a9ac5a31fd025 100644 --- a/src/main/java/net/minecraft/world/damagesource/CombatTracker.java +++ b/src/main/java/net/minecraft/world/damagesource/CombatTracker.java @@ -99,6 +99,11 @@ public class CombatTracker { @@ -45,7 +45,7 @@ index 9c99b2e365aacb8309f29acb9025faccd2c676b3..9e3608650c44ef5fa724c3aea86603d7 return Component.translatable(string + ".message", this.mob.getDisplayName(), component); } else { + // Purpur start -+ if (damageSource.isScissors) { ++ if (damageSource.isScissors()) { + return damageSource.getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgRunWithScissors, this.mob); + } + // Purpur end @@ -53,34 +53,74 @@ index 9c99b2e365aacb8309f29acb9025faccd2c676b3..9e3608650c44ef5fa724c3aea86603d7 } } diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index 6f1b9cd34a714c02e9800ff2972aa24ad4080842..727a598f1c265ae524c3746c7b7c7d2d0774d530 100644 +index 6f1b9cd34a714c02e9800ff2972aa24ad4080842..2e443b02108b63fbaea2754b989e241494510363 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -@@ -97,6 +97,8 @@ public class DamageSource { +@@ -27,6 +27,7 @@ public class DamageSource { + private boolean withSweep = false; + private boolean melting = false; + private boolean poison = false; ++ private boolean scissors = false; // Purpur + private Entity customCausingEntity = null; // This field is a helper for when causing entity damage is not set by vanilla + + public DamageSource sweep() { +@@ -56,6 +57,17 @@ public class DamageSource { + return this.poison; + } + ++ // Purpur start ++ public DamageSource scissors() { ++ this.scissors = true; ++ return this; ++ } ++ ++ public boolean isScissors() { ++ return this.scissors; ++ } ++ // Purpur end ++ + public Entity getCausingEntity() { + return (this.customCausingEntity != null) ? this.customCausingEntity : this.causingEntity; + } +@@ -93,6 +105,7 @@ public class DamageSource { + damageSource.withSweep = this.isSweep(); + damageSource.poison = this.isPoison(); + damageSource.melting = this.isMelting(); ++ damageSource.scissors = this.isScissors(); // Purpur + return damageSource; + } + // CraftBukkit end +diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSources.java b/src/main/java/net/minecraft/world/damagesource/DamageSources.java +index a47473c9875c70c52b9a61e0156e55961f34c694..23c7f22dacc570837120c28e0a57f8c9155e92fc 100644 +--- a/src/main/java/net/minecraft/world/damagesource/DamageSources.java ++++ b/src/main/java/net/minecraft/world/damagesource/DamageSources.java +@@ -44,11 +44,13 @@ public class DamageSources { + // CraftBukkit start + private final DamageSource melting; + private final DamageSource poison; ++ private final DamageSource scissors; // Purpur + + public DamageSources(RegistryAccess registryManager) { + this.damageTypes = registryManager.registryOrThrow(Registries.DAMAGE_TYPE); + this.melting = this.source(DamageTypes.ON_FIRE).melting(); + this.poison = this.source(DamageTypes.MAGIC).poison(); ++ this.scissors = this.source(DamageTypes.MAGIC).scissors(); // Purpur + // CraftBukkit end + this.inFire = this.source(DamageTypes.IN_FIRE); + this.lightningBolt = this.source(DamageTypes.LIGHTNING_BOLT); +@@ -97,6 +99,12 @@ public class DamageSources { } // CraftBukkit end -+ public boolean isScissors; // Purpur -+ - public String toString() { - return "DamageSource (" + this.type().msgId() + ")"; - } -diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSources.java b/src/main/java/net/minecraft/world/damagesource/DamageSources.java -index a47473c9875c70c52b9a61e0156e55961f34c694..28b57ed7e862eecc04dfb2eac0093385b64460e7 100644 ---- a/src/main/java/net/minecraft/world/damagesource/DamageSources.java -+++ b/src/main/java/net/minecraft/world/damagesource/DamageSources.java -@@ -277,4 +277,11 @@ public class DamageSources { - public DamageSource genericKill() { - return this.genericKill; - } + // Purpur start + public DamageSource scissors() { -+ DamageSource source = new DamageSource(this.damageTypes.getHolderOrThrow(DamageTypes.MAGIC)); -+ source.isScissors = true; -+ return source; ++ return this.scissors; + } + // Purpur end - } ++ + public DamageSource inFire() { + return this.inFire; + } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java index 57734b187e3a66d0d244db2f7968256884957ff2..6714c095714c3a34464b9190be964ceaac718d45 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java diff --git a/patches/server/0251-Stonecutter-damage.patch b/patches/server/0251-Stonecutter-damage.patch index 36a3d53f1..888103a8e 100644 --- a/patches/server/0251-Stonecutter-damage.patch +++ b/patches/server/0251-Stonecutter-damage.patch @@ -5,47 +5,83 @@ Subject: [PATCH] Stonecutter damage diff --git a/src/main/java/net/minecraft/world/damagesource/CombatTracker.java b/src/main/java/net/minecraft/world/damagesource/CombatTracker.java -index 9e3608650c44ef5fa724c3aea86603d7bd02429c..8c2c515f1b5f56bf1d6cf0c35d4f0fa7b593d1a0 100644 +index 5c9d49b40a940df724101bef339a9ac5a31fd025..8ed6b8ddc76bda3d4f298b3076dba9275cec93d9 100644 --- a/src/main/java/net/minecraft/world/damagesource/CombatTracker.java +++ b/src/main/java/net/minecraft/world/damagesource/CombatTracker.java @@ -102,6 +102,8 @@ public class CombatTracker { // Purpur start - if (damageSource.isScissors) { + if (damageSource.isScissors()) { return damageSource.getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgRunWithScissors, this.mob); -+ } else if (damageSource.isStoneCutter) { ++ } else if (damageSource.isStonecutter()) { + return damageSource.getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgStonecutter, this.mob); } // Purpur end return damageSource.getLocalizedDeathMessage(this.mob); diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index 727a598f1c265ae524c3746c7b7c7d2d0774d530..478173fe8e61730a2210e886a4c8dc2a6e018e90 100644 +index 2e443b02108b63fbaea2754b989e241494510363..09aa1677ad67701d592c18078eee5bd0317ba7c4 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -@@ -99,6 +99,8 @@ public class DamageSource { +@@ -28,6 +28,7 @@ public class DamageSource { + private boolean melting = false; + private boolean poison = false; + private boolean scissors = false; // Purpur ++ private boolean stonecutter = false; // Purpur + private Entity customCausingEntity = null; // This field is a helper for when causing entity damage is not set by vanilla - public boolean isScissors; // Purpur - -+ public boolean isStoneCutter; // Purpur -+ - public String toString() { - return "DamageSource (" + this.type().msgId() + ")"; - } -diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSources.java b/src/main/java/net/minecraft/world/damagesource/DamageSources.java -index 28b57ed7e862eecc04dfb2eac0093385b64460e7..0f7d3e8573462c6fde8e5e2c1e86ad8406b9f549 100644 ---- a/src/main/java/net/minecraft/world/damagesource/DamageSources.java -+++ b/src/main/java/net/minecraft/world/damagesource/DamageSources.java -@@ -283,5 +283,11 @@ public class DamageSources { - source.isScissors = true; - return source; + public DamageSource sweep() { +@@ -66,6 +67,15 @@ public class DamageSource { + public boolean isScissors() { + return this.scissors; } + + public DamageSource stonecutter() { -+ DamageSource source = new DamageSource(this.damageTypes.getHolderOrThrow(DamageTypes.MAGIC)); -+ source.isStoneCutter = true; -+ return source; ++ this.stonecutter = true; ++ return this; ++ } ++ ++ public boolean isStonecutter() { ++ return this.stonecutter; + } // Purpur end - } + + public Entity getCausingEntity() { +@@ -106,6 +116,7 @@ public class DamageSource { + damageSource.poison = this.isPoison(); + damageSource.melting = this.isMelting(); + damageSource.scissors = this.isScissors(); // Purpur ++ damageSource.stonecutter = this.isStonecutter(); // Purpur + return damageSource; + } + // CraftBukkit end +diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSources.java b/src/main/java/net/minecraft/world/damagesource/DamageSources.java +index 23c7f22dacc570837120c28e0a57f8c9155e92fc..2c1fdc031bcfc8f39692312e9ce9c5a3cf987349 100644 +--- a/src/main/java/net/minecraft/world/damagesource/DamageSources.java ++++ b/src/main/java/net/minecraft/world/damagesource/DamageSources.java +@@ -45,12 +45,14 @@ public class DamageSources { + private final DamageSource melting; + private final DamageSource poison; + private final DamageSource scissors; // Purpur ++ private final DamageSource stonecutter; // Purpur + + public DamageSources(RegistryAccess registryManager) { + this.damageTypes = registryManager.registryOrThrow(Registries.DAMAGE_TYPE); + this.melting = this.source(DamageTypes.ON_FIRE).melting(); + this.poison = this.source(DamageTypes.MAGIC).poison(); + this.scissors = this.source(DamageTypes.MAGIC).scissors(); // Purpur ++ this.stonecutter = this.source(DamageTypes.MAGIC).stonecutter(); // Purpur + // CraftBukkit end + this.inFire = this.source(DamageTypes.IN_FIRE); + this.lightningBolt = this.source(DamageTypes.LIGHTNING_BOLT); +@@ -103,6 +105,9 @@ public class DamageSources { + public DamageSource scissors() { + return this.scissors; + } ++ public DamageSource stonecutter() { ++ return this.stonecutter; ++ } + // Purpur end + + public DamageSource inFire() { diff --git a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java b/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java index 77ae7b8ab24935d046cce1f8f7f476310876f9df..579abfbe791052507b15c14d8c81e39b2fdd6520 100644 --- a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java @@ -87,6 +123,19 @@ index 0dc05919dfbbf73230505fcdc25d949b1602801c..996bd26e95e766ce4ca7e61d060881fe if (blockState.is(Blocks.HONEY_BLOCK)) { return BlockPathTypes.STICKY_HONEY; } else if (blockState.is(Blocks.COCOA)) { +diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +index aa89fcab22c7ad0c9425f5ae65cc2c6b150579cc..069ea4dc556d179d166e1dba3527c9def7129e65 100644 +--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java ++++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +@@ -1133,7 +1133,7 @@ public class CraftEventFactory { + return CraftEventFactory.callEntityDamageEvent(source.getDirectBlock(), entity, DamageCause.LAVA, bukkitDamageSource, modifiers, modifierFunctions, cancelled); + } else if (source.getDirectBlock() != null) { + 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 + cause = DamageCause.CONTACT; + } else if (source.is(DamageTypes.HOT_FLOOR)) { + cause = DamageCause.HOT_FLOOR; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java index c6628a28387023b334dd99a4e469126a2108c38b..3a49455509a26063a62e39fb3d3ad81e80bced54 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java diff --git a/patches/server/0302-Add-option-for-always-showing-item-in-player-death-m.patch b/patches/server/0302-Add-option-for-always-showing-item-in-player-death-m.patch index 2da5ab7f4..e9ab9b13e 100644 --- a/patches/server/0302-Add-option-for-always-showing-item-in-player-death-m.patch +++ b/patches/server/0302-Add-option-for-always-showing-item-in-player-death-m.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add option for always showing item in player death messages diff --git a/src/main/java/net/minecraft/world/damagesource/CombatTracker.java b/src/main/java/net/minecraft/world/damagesource/CombatTracker.java -index 8c2c515f1b5f56bf1d6cf0c35d4f0fa7b593d1a0..6e8d9be28c5908fb12c44c0ecb0e02180601371a 100644 +index 8ed6b8ddc76bda3d4f298b3076dba9275cec93d9..1653d154edb38a6450ee51cb5e5b8e3d37a1784e 100644 --- a/src/main/java/net/minecraft/world/damagesource/CombatTracker.java +++ b/src/main/java/net/minecraft/world/damagesource/CombatTracker.java @@ -59,7 +59,7 @@ public class CombatTracker { @@ -18,10 +18,10 @@ index 8c2c515f1b5f56bf1d6cf0c35d4f0fa7b593d1a0..6e8d9be28c5908fb12c44c0ecb0e0218 private Component getFallMessage(CombatEntry damageRecord, @Nullable Entity attacker) { diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index 478173fe8e61730a2210e886a4c8dc2a6e018e90..081bf5e60cd17fc88efeba3adf1c113bd8958e2a 100644 +index 09aa1677ad67701d592c18078eee5bd0317ba7c4..4b920672dbd7d9baf15191caa8892359d378f3e7 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -@@ -169,7 +169,7 @@ public class DamageSource { +@@ -189,7 +189,7 @@ public class DamageSource { ItemStack itemstack1 = itemstack;