Skip to content

Commit 770fbe6

Browse files
committed
clean up damage type code for stonecutter and scissor patches
1 parent 70a76c4 commit 770fbe6

4 files changed

Lines changed: 147 additions & 38 deletions
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2+
From: granny <contact@granny.dev>
3+
Date: Sun, 11 Feb 2024 23:07:47 -0800
4+
Subject: [PATCH] Stonecutter damage
5+
6+
7+
diff --git a/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java b/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java
8+
index 3b20000d9ac3e29fe3bc5093e6635377bee88dbd..fae6f2c125eb6db88f3e8741b77f17b6817d62a9 100644
9+
--- a/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java
10+
+++ b/src/main/java/org/bukkit/event/entity/EntityDamageEvent.java
11+
@@ -292,7 +292,8 @@ public class EntityDamageEvent extends EntityEvent implements Cancellable {
12+
WORLD_BORDER,
13+
/**
14+
* Damage caused when an entity contacts a block such as a Cactus,
15+
- * Dripstone (Stalagmite) or Berry Bush.
16+
+ * Dripstone (Stalagmite) or Berry Bush. (Stonecutters too if you
17+
+ * have the Stonecutter damage Purpur feature enabled)
18+
* <p>
19+
* Damage: variable
20+
*/

patches/server/0132-Dont-run-with-scissors.patch

Lines changed: 56 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,50 +37,90 @@ index 32f33eb8b99ad4655cf021b7cf16eb15fe96ba59..4220c1b4e44ecf67653fe5a50a209866
3737
AABB axisalignedbb1 = this.player.getBoundingBox().move(newX - this.player.getX(), newY - this.player.getY(), newZ - this.player.getZ());
3838
Iterable<VoxelShape> iterable = world.getCollisions(this.player, axisalignedbb1.deflate(9.999999747378752E-6D));
3939
diff --git a/src/main/java/net/minecraft/world/damagesource/CombatTracker.java b/src/main/java/net/minecraft/world/damagesource/CombatTracker.java
40-
index 9c99b2e365aacb8309f29acb9025faccd2c676b3..9e3608650c44ef5fa724c3aea86603d7bd02429c 100644
40+
index 9c99b2e365aacb8309f29acb9025faccd2c676b3..5c9d49b40a940df724101bef339a9ac5a31fd025 100644
4141
--- a/src/main/java/net/minecraft/world/damagesource/CombatTracker.java
4242
+++ b/src/main/java/net/minecraft/world/damagesource/CombatTracker.java
4343
@@ -99,6 +99,11 @@ public class CombatTracker {
4444
Component component = ComponentUtils.wrapInSquareBrackets(Component.translatable(string + ".link")).withStyle(INTENTIONAL_GAME_DESIGN_STYLE);
4545
return Component.translatable(string + ".message", this.mob.getDisplayName(), component);
4646
} else {
4747
+ // Purpur start
48-
+ if (damageSource.isScissors) {
48+
+ if (damageSource.isScissors()) {
4949
+ return damageSource.getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgRunWithScissors, this.mob);
5050
+ }
5151
+ // Purpur end
5252
return damageSource.getLocalizedDeathMessage(this.mob);
5353
}
5454
}
5555
diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java
56-
index 6f1b9cd34a714c02e9800ff2972aa24ad4080842..727a598f1c265ae524c3746c7b7c7d2d0774d530 100644
56+
index 6f1b9cd34a714c02e9800ff2972aa24ad4080842..2e443b02108b63fbaea2754b989e241494510363 100644
5757
--- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java
5858
+++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java
59-
@@ -97,6 +97,8 @@ public class DamageSource {
59+
@@ -27,6 +27,7 @@ public class DamageSource {
60+
private boolean withSweep = false;
61+
private boolean melting = false;
62+
private boolean poison = false;
63+
+ private boolean scissors = false; // Purpur
64+
private Entity customCausingEntity = null; // This field is a helper for when causing entity damage is not set by vanilla
65+
66+
public DamageSource sweep() {
67+
@@ -56,6 +57,17 @@ public class DamageSource {
68+
return this.poison;
6069
}
61-
// CraftBukkit end
6270

63-
+ public boolean isScissors; // Purpur
71+
+ // Purpur start
72+
+ public DamageSource scissors() {
73+
+ this.scissors = true;
74+
+ return this;
75+
+ }
76+
+
77+
+ public boolean isScissors() {
78+
+ return this.scissors;
79+
+ }
80+
+ // Purpur end
6481
+
65-
public String toString() {
66-
return "DamageSource (" + this.type().msgId() + ")";
82+
public Entity getCausingEntity() {
83+
return (this.customCausingEntity != null) ? this.customCausingEntity : this.causingEntity;
6784
}
85+
@@ -93,6 +105,7 @@ public class DamageSource {
86+
damageSource.withSweep = this.isSweep();
87+
damageSource.poison = this.isPoison();
88+
damageSource.melting = this.isMelting();
89+
+ damageSource.scissors = this.isScissors(); // Purpur
90+
return damageSource;
91+
}
92+
// CraftBukkit end
6893
diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSources.java b/src/main/java/net/minecraft/world/damagesource/DamageSources.java
69-
index a47473c9875c70c52b9a61e0156e55961f34c694..28b57ed7e862eecc04dfb2eac0093385b64460e7 100644
94+
index a47473c9875c70c52b9a61e0156e55961f34c694..23c7f22dacc570837120c28e0a57f8c9155e92fc 100644
7095
--- a/src/main/java/net/minecraft/world/damagesource/DamageSources.java
7196
+++ b/src/main/java/net/minecraft/world/damagesource/DamageSources.java
72-
@@ -277,4 +277,11 @@ public class DamageSources {
73-
public DamageSource genericKill() {
74-
return this.genericKill;
97+
@@ -44,11 +44,13 @@ public class DamageSources {
98+
// CraftBukkit start
99+
private final DamageSource melting;
100+
private final DamageSource poison;
101+
+ private final DamageSource scissors; // Purpur
102+
103+
public DamageSources(RegistryAccess registryManager) {
104+
this.damageTypes = registryManager.registryOrThrow(Registries.DAMAGE_TYPE);
105+
this.melting = this.source(DamageTypes.ON_FIRE).melting();
106+
this.poison = this.source(DamageTypes.MAGIC).poison();
107+
+ this.scissors = this.source(DamageTypes.MAGIC).scissors(); // Purpur
108+
// CraftBukkit end
109+
this.inFire = this.source(DamageTypes.IN_FIRE);
110+
this.lightningBolt = this.source(DamageTypes.LIGHTNING_BOLT);
111+
@@ -97,6 +99,12 @@ public class DamageSources {
75112
}
113+
// CraftBukkit end
114+
76115
+ // Purpur start
77116
+ public DamageSource scissors() {
78-
+ DamageSource source = new DamageSource(this.damageTypes.getHolderOrThrow(DamageTypes.MAGIC));
79-
+ source.isScissors = true;
80-
+ return source;
117+
+ return this.scissors;
81118
+ }
82119
+ // Purpur end
83-
}
120+
+
121+
public DamageSource inFire() {
122+
return this.inFire;
123+
}
84124
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
85125
index 57734b187e3a66d0d244db2f7968256884957ff2..6714c095714c3a34464b9190be964ceaac718d45 100644
86126
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java

patches/server/0251-Stonecutter-damage.patch

Lines changed: 68 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,47 +5,83 @@ Subject: [PATCH] Stonecutter damage
55

66

77
diff --git a/src/main/java/net/minecraft/world/damagesource/CombatTracker.java b/src/main/java/net/minecraft/world/damagesource/CombatTracker.java
8-
index 9e3608650c44ef5fa724c3aea86603d7bd02429c..8c2c515f1b5f56bf1d6cf0c35d4f0fa7b593d1a0 100644
8+
index 5c9d49b40a940df724101bef339a9ac5a31fd025..8ed6b8ddc76bda3d4f298b3076dba9275cec93d9 100644
99
--- a/src/main/java/net/minecraft/world/damagesource/CombatTracker.java
1010
+++ b/src/main/java/net/minecraft/world/damagesource/CombatTracker.java
1111
@@ -102,6 +102,8 @@ public class CombatTracker {
1212
// Purpur start
13-
if (damageSource.isScissors) {
13+
if (damageSource.isScissors()) {
1414
return damageSource.getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgRunWithScissors, this.mob);
15-
+ } else if (damageSource.isStoneCutter) {
15+
+ } else if (damageSource.isStonecutter()) {
1616
+ return damageSource.getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgStonecutter, this.mob);
1717
}
1818
// Purpur end
1919
return damageSource.getLocalizedDeathMessage(this.mob);
2020
diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java
21-
index 727a598f1c265ae524c3746c7b7c7d2d0774d530..478173fe8e61730a2210e886a4c8dc2a6e018e90 100644
21+
index 2e443b02108b63fbaea2754b989e241494510363..09aa1677ad67701d592c18078eee5bd0317ba7c4 100644
2222
--- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java
2323
+++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java
24-
@@ -99,6 +99,8 @@ public class DamageSource {
24+
@@ -28,6 +28,7 @@ public class DamageSource {
25+
private boolean melting = false;
26+
private boolean poison = false;
27+
private boolean scissors = false; // Purpur
28+
+ private boolean stonecutter = false; // Purpur
29+
private Entity customCausingEntity = null; // This field is a helper for when causing entity damage is not set by vanilla
2530

26-
public boolean isScissors; // Purpur
27-
28-
+ public boolean isStoneCutter; // Purpur
31+
public DamageSource sweep() {
32+
@@ -66,6 +67,15 @@ public class DamageSource {
33+
public boolean isScissors() {
34+
return this.scissors;
35+
}
36+
+
37+
+ public DamageSource stonecutter() {
38+
+ this.stonecutter = true;
39+
+ return this;
40+
+ }
2941
+
30-
public String toString() {
31-
return "DamageSource (" + this.type().msgId() + ")";
42+
+ public boolean isStonecutter() {
43+
+ return this.stonecutter;
44+
+ }
45+
// Purpur end
46+
47+
public Entity getCausingEntity() {
48+
@@ -106,6 +116,7 @@ public class DamageSource {
49+
damageSource.poison = this.isPoison();
50+
damageSource.melting = this.isMelting();
51+
damageSource.scissors = this.isScissors(); // Purpur
52+
+ damageSource.stonecutter = this.isStonecutter(); // Purpur
53+
return damageSource;
3254
}
55+
// CraftBukkit end
3356
diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSources.java b/src/main/java/net/minecraft/world/damagesource/DamageSources.java
34-
index 28b57ed7e862eecc04dfb2eac0093385b64460e7..0f7d3e8573462c6fde8e5e2c1e86ad8406b9f549 100644
57+
index 23c7f22dacc570837120c28e0a57f8c9155e92fc..2c1fdc031bcfc8f39692312e9ce9c5a3cf987349 100644
3558
--- a/src/main/java/net/minecraft/world/damagesource/DamageSources.java
3659
+++ b/src/main/java/net/minecraft/world/damagesource/DamageSources.java
37-
@@ -283,5 +283,11 @@ public class DamageSources {
38-
source.isScissors = true;
39-
return source;
60+
@@ -45,12 +45,14 @@ public class DamageSources {
61+
private final DamageSource melting;
62+
private final DamageSource poison;
63+
private final DamageSource scissors; // Purpur
64+
+ private final DamageSource stonecutter; // Purpur
65+
66+
public DamageSources(RegistryAccess registryManager) {
67+
this.damageTypes = registryManager.registryOrThrow(Registries.DAMAGE_TYPE);
68+
this.melting = this.source(DamageTypes.ON_FIRE).melting();
69+
this.poison = this.source(DamageTypes.MAGIC).poison();
70+
this.scissors = this.source(DamageTypes.MAGIC).scissors(); // Purpur
71+
+ this.stonecutter = this.source(DamageTypes.MAGIC).stonecutter(); // Purpur
72+
// CraftBukkit end
73+
this.inFire = this.source(DamageTypes.IN_FIRE);
74+
this.lightningBolt = this.source(DamageTypes.LIGHTNING_BOLT);
75+
@@ -103,6 +105,9 @@ public class DamageSources {
76+
public DamageSource scissors() {
77+
return this.scissors;
4078
}
41-
+
4279
+ public DamageSource stonecutter() {
43-
+ DamageSource source = new DamageSource(this.damageTypes.getHolderOrThrow(DamageTypes.MAGIC));
44-
+ source.isStoneCutter = true;
45-
+ return source;
80+
+ return this.stonecutter;
4681
+ }
4782
// Purpur end
48-
}
83+
84+
public DamageSource inFire() {
4985
diff --git a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java b/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java
5086
index 77ae7b8ab24935d046cce1f8f7f476310876f9df..579abfbe791052507b15c14d8c81e39b2fdd6520 100644
5187
--- a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java
@@ -87,6 +123,19 @@ index 0dc05919dfbbf73230505fcdc25d949b1602801c..996bd26e95e766ce4ca7e61d060881fe
87123
if (blockState.is(Blocks.HONEY_BLOCK)) {
88124
return BlockPathTypes.STICKY_HONEY;
89125
} else if (blockState.is(Blocks.COCOA)) {
126+
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
127+
index aa89fcab22c7ad0c9425f5ae65cc2c6b150579cc..069ea4dc556d179d166e1dba3527c9def7129e65 100644
128+
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
129+
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
130+
@@ -1133,7 +1133,7 @@ public class CraftEventFactory {
131+
return CraftEventFactory.callEntityDamageEvent(source.getDirectBlock(), entity, DamageCause.LAVA, bukkitDamageSource, modifiers, modifierFunctions, cancelled);
132+
} else if (source.getDirectBlock() != null) {
133+
DamageCause cause;
134+
- 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)) {
135+
+ 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
136+
cause = DamageCause.CONTACT;
137+
} else if (source.is(DamageTypes.HOT_FLOOR)) {
138+
cause = DamageCause.HOT_FLOOR;
90139
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
91140
index c6628a28387023b334dd99a4e469126a2108c38b..3a49455509a26063a62e39fb3d3ad81e80bced54 100644
92141
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java

patches/server/0302-Add-option-for-always-showing-item-in-player-death-m.patch

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Subject: [PATCH] Add option for always showing item in player death messages
55

66

77
diff --git a/src/main/java/net/minecraft/world/damagesource/CombatTracker.java b/src/main/java/net/minecraft/world/damagesource/CombatTracker.java
8-
index 8c2c515f1b5f56bf1d6cf0c35d4f0fa7b593d1a0..6e8d9be28c5908fb12c44c0ecb0e02180601371a 100644
8+
index 8ed6b8ddc76bda3d4f298b3076dba9275cec93d9..1653d154edb38a6450ee51cb5e5b8e3d37a1784e 100644
99
--- a/src/main/java/net/minecraft/world/damagesource/CombatTracker.java
1010
+++ b/src/main/java/net/minecraft/world/damagesource/CombatTracker.java
1111
@@ -59,7 +59,7 @@ public class CombatTracker {
@@ -18,10 +18,10 @@ index 8c2c515f1b5f56bf1d6cf0c35d4f0fa7b593d1a0..6e8d9be28c5908fb12c44c0ecb0e0218
1818

1919
private Component getFallMessage(CombatEntry damageRecord, @Nullable Entity attacker) {
2020
diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java
21-
index 478173fe8e61730a2210e886a4c8dc2a6e018e90..081bf5e60cd17fc88efeba3adf1c113bd8958e2a 100644
21+
index 09aa1677ad67701d592c18078eee5bd0317ba7c4..4b920672dbd7d9baf15191caa8892359d378f3e7 100644
2222
--- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java
2323
+++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java
24-
@@ -169,7 +169,7 @@ public class DamageSource {
24+
@@ -189,7 +189,7 @@ public class DamageSource {
2525

2626
ItemStack itemstack1 = itemstack;
2727

0 commit comments

Comments
 (0)