Skip to content
This repository was archived by the owner on Apr 13, 2025. It is now read-only.

Commit 26189d0

Browse files
BillyGalbreathgranny
authored andcommitted
Stonecutter damage
1 parent bc307f6 commit 26189d0

9 files changed

Lines changed: 76 additions & 174 deletions

File tree

patches/server/0239-Stonecutter-damage.patch

Lines changed: 0 additions & 165 deletions
This file was deleted.

purpur-server/minecraft-patches/sources/net/minecraft/world/damagesource/CombatTracker.java.patch

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
--- a/net/minecraft/world/damagesource/CombatTracker.java
22
+++ b/net/minecraft/world/damagesource/CombatTracker.java
3-
@@ -98,6 +_,11 @@
3+
@@ -98,6 +_,15 @@
44
Component component = ComponentUtils.wrapInSquareBrackets(Component.translatable(string + ".link")).withStyle(INTENTIONAL_GAME_DESIGN_STYLE);
55
return Component.translatable(string + ".message", this.mob.getDisplayName(), component);
66
} else {
77
+ // Purpur start - Dont run with scissors!
88
+ if (damageSource.isScissors()) {
99
+ return damageSource.getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgRunWithScissors, this.mob);
10+
+ // Purpur start - Stonecutter damage
11+
+ } else if (damageSource.isStonecutter()) {
12+
+ return damageSource.getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgStonecutter, this.mob);
13+
+ // Purpur end - Stonecutter damage
1014
+ }
1115
+ // Purpur end - Dont run with scissors!
1216
return damageSource.getLocalizedDeathMessage(this.mob);

purpur-server/minecraft-patches/sources/net/minecraft/world/damagesource/DamageSource.java.patch

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
--- a/net/minecraft/world/damagesource/DamageSource.java
22
+++ b/net/minecraft/world/damagesource/DamageSource.java
3-
@@ -28,6 +_,7 @@
3+
@@ -28,6 +_,8 @@
44
private boolean sweep = false;
55
private boolean melting = false;
66
private boolean poison = false;
77
+ private boolean scissors = false; // Purpur - Dont run with scissors!
8+
+ private boolean stonecutter = false; // Purpur - Stonecutter damage
89
@Nullable
910
private Entity customEventDamager = null; // This field is a helper for when causing entity damage is not set by vanilla // Paper - fix DamageSource API
1011

11-
@@ -58,6 +_,17 @@
12+
@@ -58,6 +_,27 @@
1213
return this.poison;
1314
}
1415

@@ -22,15 +23,26 @@
2223
+ return this.scissors;
2324
+ }
2425
+ // Purpur end - Dont run with scissors!
26+
+ // Purpur start - - Stonecutter damage
27+
+ public DamageSource stonecutter() {
28+
+ this.stonecutter = true;
29+
+ return this;
30+
+ }
31+
+
32+
+ public boolean isStonecutter() {
33+
+ return this.stonecutter;
34+
+ }
35+
+ // Purpur end - Stonecutter damage
2536
+
2637
// Paper start - fix DamageSource API
2738
@Nullable
2839
public Entity getCustomEventDamager() {
29-
@@ -116,6 +_,7 @@
40+
@@ -116,6 +_,8 @@
3041
damageSource.sweep = this.isSweep();
3142
damageSource.poison = this.isPoison();
3243
damageSource.melting = this.isMelting();
3344
+ damageSource.scissors = this.isScissors(); // Purpur - Dont run with scissors!
45+
+ damageSource.stonecutter = this.isStonecutter(); // Purpur - Stonecutter damage
3446
return damageSource;
3547
}
3648
// CraftBukkit end
Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,36 @@
11
--- a/net/minecraft/world/damagesource/DamageSources.java
22
+++ b/net/minecraft/world/damagesource/DamageSources.java
3-
@@ -45,11 +_,13 @@
3+
@@ -45,11 +_,15 @@
44
// CraftBukkit start
55
private final DamageSource melting;
66
private final DamageSource poison;
77
+ private final DamageSource scissors; // Purpur - Dont run with scissors!
8+
+ private final DamageSource stonecutter; // Purpur - Stonecutter damage
89

910
public DamageSources(RegistryAccess registry) {
1011
this.damageTypes = registry.lookupOrThrow(Registries.DAMAGE_TYPE);
1112
this.melting = this.source(DamageTypes.ON_FIRE).melting();
1213
this.poison = this.source(DamageTypes.MAGIC).poison();
1314
+ this.scissors = this.source(DamageTypes.MAGIC).scissors(); // Purpur - Dont run with scissors!
15+
+ this.stonecutter = this.source(DamageTypes.MAGIC).stonecutter(); // Purpur - Stonecutter damage
1416
// CraftBukkit end
1517
this.inFire = this.source(DamageTypes.IN_FIRE);
1618
this.campfire = this.source(DamageTypes.CAMPFIRE);
17-
@@ -99,6 +_,12 @@
18-
return this.poison;
19+
@@ -100,6 +_,17 @@
1920
}
2021
// CraftBukkit end
21-
+
22+
2223
+ // Purpur start - Dont run with scissors!
2324
+ public DamageSource scissors() {
2425
+ return this.scissors;
2526
+ }
2627
+ // Purpur end - Dont run with scissors!
27-
28+
+
29+
+ // Purpur start - Stonecutter damage
30+
+ public DamageSource stonecutter() {
31+
+ return this.stonecutter;
32+
+ }
33+
+ // Purpur end - Stonecutter damage
2834
public DamageSource inFire() {
2935
return this.inFire;
36+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--- a/net/minecraft/world/level/block/StonecutterBlock.java
2+
+++ b/net/minecraft/world/level/block/StonecutterBlock.java
3+
@@ -93,4 +_,14 @@
4+
protected boolean isPathfindable(BlockState state, PathComputationType pathComputationType) {
5+
return false;
6+
}
7+
+
8+
+ // Purpur start - Stonecutter damage
9+
+ @Override
10+
+ public void stepOn(Level level, BlockPos pos, BlockState state, net.minecraft.world.entity.Entity entity) {
11+
+ if (level.purpurConfig.stonecutterDamage > 0.0F && entity instanceof net.minecraft.world.entity.LivingEntity) {
12+
+ entity.hurtServer((net.minecraft.server.level.ServerLevel) level, entity.damageSources().stonecutter().directBlock(level, pos), level.purpurConfig.stonecutterDamage);
13+
+ }
14+
+ super.stepOn(level, pos, state, entity);
15+
+ }
16+
+ // Purpur end - Stonecutter damage
17+
}

purpur-server/minecraft-patches/sources/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java.patch

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,12 @@
99
&& cachedPathType != PathType.TRAPDOOR
1010
&& cachedPathType != PathType.POWDER_SNOW) {
1111
node = this.tryJumpOn(x, y, z, verticalDeltaLimit, nodeFloorLevel, direction, pathType, mutableBlockPos);
12+
@@ -493,7 +_,7 @@
13+
return PathType.TRAPDOOR;
14+
} else if (blockState.is(Blocks.POWDER_SNOW)) {
15+
return PathType.POWDER_SNOW;
16+
- } else if (blockState.is(Blocks.CACTUS) || blockState.is(Blocks.SWEET_BERRY_BUSH)) {
17+
+ } else if (blockState.is(Blocks.CACTUS) || blockState.is(Blocks.SWEET_BERRY_BUSH) || blockState.is(Blocks.STONECUTTER)) { // Purpur - Stonecutter damage
18+
return PathType.DAMAGE_OTHER;
19+
} else if (blockState.is(Blocks.HONEY_BLOCK)) {
20+
return PathType.STICKY_HONEY;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
2+
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
3+
@@ -1131,7 +_,7 @@
4+
return CraftEventFactory.callEntityDamageEvent(source.getDirectBlock(), source.getDirectBlockState(), entity, DamageCause.LAVA, bukkitDamageSource, modifiers, modifierFunctions, cancelled);
5+
} else if (source.getDirectBlock() != null) {
6+
DamageCause cause;
7+
- 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)) {
8+
+ 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
9+
cause = DamageCause.CONTACT;
10+
} else if (source.is(DamageTypes.HOT_FLOOR)) {
11+
cause = DamageCause.HOT_FLOOR;

purpur-server/src/main/java/org/purpurmc/purpur/PurpurConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,10 @@ private static void messages() {
205205
}
206206

207207
public static String deathMsgRunWithScissors = "<player> slipped and fell on their shears";
208+
public static String deathMsgStonecutter = "<player> has sawed themself in half";
208209
private static void deathMessages() {
209210
deathMsgRunWithScissors = getString("settings.messages.death-message.run-with-scissors", deathMsgRunWithScissors);
211+
deathMsgStonecutter = getString("settings.messages.death-message.stonecutter", deathMsgStonecutter);
210212
}
211213

212214
public static boolean advancementOnlyBroadcastToAffectedPlayer = false;

purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,6 +1052,11 @@ private void spongeSettings() {
10521052
spongeAbsorbsWaterFromMud = getBoolean("blocks.sponge.absorbs-water-from-mud", spongeAbsorbsWaterFromMud);
10531053
}
10541054

1055+
public float stonecutterDamage = 0.0F;
1056+
private void stonecutterSettings() {
1057+
stonecutterDamage = (float) getDouble("blocks.stonecutter.damage", stonecutterDamage);
1058+
}
1059+
10551060
public boolean turtleEggsBreakFromExpOrbs = false;
10561061
public boolean turtleEggsBreakFromItems = false;
10571062
public boolean turtleEggsBreakFromMinecarts = false;

0 commit comments

Comments
 (0)