From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Wed, 8 Jun 2022 14:19:35 -0400 Subject: [PATCH] Stonecutter damage diff --git a/net/minecraft/world/damagesource/CombatTracker.java b/net/minecraft/world/damagesource/CombatTracker.java index 254aea4138afa1009a3c949a24c1a0fb8edbbd1d..10afc08930d7fe27ffa396ec5a10afb7769a3f0b 100644 --- a/net/minecraft/world/damagesource/CombatTracker.java +++ b/net/minecraft/world/damagesource/CombatTracker.java @@ -101,6 +101,10 @@ public class CombatTracker { // Purpur start - Dont run with scissors! if (damageSource.isScissors()) { return damageSource.getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgRunWithScissors, this.mob); + // Purpur start - Stonecutter damage + } else if (damageSource.isStonecutter()) { + return damageSource.getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgStonecutter, this.mob); + // Purpur end - Stonecutter damage } // Purpur end - Dont run with scissors! return damageSource.getLocalizedDeathMessage(this.mob); diff --git a/net/minecraft/world/damagesource/DamageSource.java b/net/minecraft/world/damagesource/DamageSource.java index 43985b4442145728c28bbeb9d18444a7c8f3a41f..ccdf9d40b767115e0e6db2c29af42f5ec4c40f85 100644 --- a/net/minecraft/world/damagesource/DamageSource.java +++ b/net/minecraft/world/damagesource/DamageSource.java @@ -30,6 +30,7 @@ public class DamageSource { private boolean melting = false; private boolean poison = false; 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 @@ -70,6 +71,16 @@ public class DamageSource { return this.scissors; } // Purpur end - Dont run with scissors! + // Purpur start - - Stonecutter damage + public DamageSource stonecutter() { + this.stonecutter = true; + return this; + } + + public boolean isStonecutter() { + return this.stonecutter; + } + // Purpur end - Stonecutter damage // Paper start - fix DamageSource API @Nullable @@ -130,6 +141,7 @@ public class DamageSource { damageSource.poison = this.isPoison(); damageSource.melting = this.isMelting(); damageSource.scissors = this.isScissors(); // Purpur - Dont run with scissors! + damageSource.stonecutter = this.isStonecutter(); // Purpur - Stonecutter damage return damageSource; } // CraftBukkit end diff --git a/net/minecraft/world/damagesource/DamageSources.java b/net/minecraft/world/damagesource/DamageSources.java index a4f710ad1aecd8265cde8d71d55eea952cd3c03b..820533b6a13b1f8abbfe378de6b5d66ce2b79835 100644 --- a/net/minecraft/world/damagesource/DamageSources.java +++ b/net/minecraft/world/damagesource/DamageSources.java @@ -47,12 +47,14 @@ public class DamageSources { private final DamageSource melting; private final DamageSource poison; private final DamageSource scissors; // Purpur - Dont run with scissors! + private final DamageSource stonecutter; // Purpur - Stonecutter damage public DamageSources(RegistryAccess registryManager) { this.damageTypes = registryManager.lookupOrThrow(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 - 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); @@ -109,6 +111,11 @@ public class DamageSources { } // Purpur end - Dont run with scissors! + // Purpur start - Stonecutter damage + public DamageSource stonecutter() { + return this.stonecutter; + } + // Purpur end - Stonecutter damage public DamageSource inFire() { return this.inFire; } diff --git a/net/minecraft/world/level/block/StonecutterBlock.java b/net/minecraft/world/level/block/StonecutterBlock.java index f1366aea49206afcd64bf058ee673d6a562315c5..e93d1eba4fcd02e15287a1a66da94e695806a470 100644 --- a/net/minecraft/world/level/block/StonecutterBlock.java +++ b/net/minecraft/world/level/block/StonecutterBlock.java @@ -93,4 +93,14 @@ public class StonecutterBlock extends Block { protected boolean isPathfindable(BlockState state, PathComputationType type) { return false; } + + // Purpur start - Stonecutter damage + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, net.minecraft.world.entity.Entity entity) { + if (level.purpurConfig.stonecutterDamage > 0.0F && entity instanceof net.minecraft.world.entity.LivingEntity) { + entity.hurtServer((net.minecraft.server.level.ServerLevel) level, entity.damageSources().stonecutter().directBlock(level, pos), level.purpurConfig.stonecutterDamage); + } + super.stepOn(level, pos, state, entity); + } + // Purpur end - Stonecutter damage } diff --git a/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java b/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java index e295fe4aac742ff8942b23456fdce8d7ff944e90..b65512f65e06865cc4d2964bd4ca2806784be738 100644 --- a/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java +++ b/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java @@ -491,7 +491,7 @@ public class WalkNodeEvaluator extends NodeEvaluator { return PathType.TRAPDOOR; } else if (blockState.is(Blocks.POWDER_SNOW)) { return PathType.POWDER_SNOW; - } else if (blockState.is(Blocks.CACTUS) || blockState.is(Blocks.SWEET_BERRY_BUSH)) { + } else if (blockState.is(Blocks.CACTUS) || blockState.is(Blocks.SWEET_BERRY_BUSH) || blockState.is(Blocks.STONECUTTER)) { // Purpur - Stonecutter damage return PathType.DAMAGE_OTHER; } else if (blockState.is(Blocks.HONEY_BLOCK)) { return PathType.STICKY_HONEY; diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index eb2f9bfdaf3ed8a684337a15365e70174d1533b3..d52d41d8c56e017f95914da19b05c3d79f8f1640 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -1140,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) { 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 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 6cd88ca590658adb8f79296fc74af3536e2e1be3..4ad201f8457dca2305224cc74a1f55b90dd60140 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -212,8 +212,10 @@ public class PurpurConfig { } public static String deathMsgRunWithScissors = " slipped and fell on their shears"; + public static String deathMsgStonecutter = " has sawed themself in half"; private static void deathMessages() { deathMsgRunWithScissors = getString("settings.messages.death-message.run-with-scissors", deathMsgRunWithScissors); + deathMsgStonecutter = getString("settings.messages.death-message.stonecutter", deathMsgStonecutter); } public static boolean advancementOnlyBroadcastToAffectedPlayer = false; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index f789100866e21cdf7b2891dfcb6913081f597d79..2a53cf6fcab47e49735a31ed9eb1fb668caa2e4c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1053,6 +1053,11 @@ public class PurpurWorldConfig { spongeAbsorbsWaterFromMud = getBoolean("blocks.sponge.absorbs-water-from-mud", spongeAbsorbsWaterFromMud); } + public float stonecutterDamage = 0.0F; + private void stonecutterSettings() { + stonecutterDamage = (float) getDouble("blocks.stonecutter.damage", stonecutterDamage); + } + public boolean turtleEggsBreakFromExpOrbs = false; public boolean turtleEggsBreakFromItems = false; public boolean turtleEggsBreakFromMinecarts = false;