From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Mon, 5 Oct 2020 12:15:14 -0500 Subject: [PATCH] Stonecutter damage diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java index 19d6165f266fcc39bc3533042109ef1b725ecb77..32bf8264fecb8873f3ffa0e57a4bb48b5517fb77 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java @@ -39,6 +39,14 @@ public class DamageSource { public static final DamageSource FREEZE = (new DamageSource("freeze")).bypassArmor(); public static final DamageSource FALLING_STALACTITE = (new DamageSource("fallingStalactite")).damageHelmet(); public static final DamageSource STALAGMITE = (new DamageSource("stalagmite")).bypassArmor().setIsFall(); + // Purpur start + public static final DamageSource STONECUTTER = (new DamageSource("stonecutter") { + @Override + public Component getLocalizedDeathMessage(LivingEntity entity) { + return getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgStonecutter, entity); + } + }).bypassArmor(); + // Purpur end private boolean damageHelmet; private boolean bypassArmor; private boolean bypassInvul; diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java index 134be4b6a485f76c6f20361de5ef06121f21baab..29b27f0ce54ec8f72981d07d08ffacbe1aab60f8 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -1051,7 +1051,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, i } // CraftBukkit end - if (this.onGround && !this.isSteppingCarefully()) { + if (this.onGround && (!this.isSteppingCarefully() || (block == Blocks.STONECUTTER && level.purpurConfig.stonecutterDamage > 0.0F))) { block.stepOn(this.level, blockposition, iblockdata, this); } 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 ec1c04f354236af24e137865b3b311ab8eb29ac4..7d3e7c5f8f9946c35384cf18a43efbcf62952228 100644 --- a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java +++ b/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java @@ -93,4 +93,16 @@ public class StonecutterBlock extends Block { public boolean isPathfindable(BlockState state, BlockGetter world, BlockPos pos, PathComputationType type) { return false; } + + // Purpur start + @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) { + org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = level.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ()); + entity.hurt(net.minecraft.world.damagesource.DamageSource.STONECUTTER, level.purpurConfig.stonecutterDamage); + org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = null; + } + super.stepOn(level, pos, state, entity); + } + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java b/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java index 737d0405a195d322ffe9a57acadb9f6d645c03b8..d7bdf3c2a5b99ff7adb3e960ff356a1fad169de0 100644 --- a/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java +++ b/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java @@ -463,7 +463,7 @@ public class WalkNodeEvaluator extends NodeEvaluator { return BlockPathTypes.DANGER_CACTUS; } - if (blockState.is(Blocks.SWEET_BERRY_BUSH)) { + if (blockState.is(Blocks.SWEET_BERRY_BUSH) || blockState.is(Blocks.STONECUTTER)) { return BlockPathTypes.DANGER_OTHER; } @@ -495,7 +495,7 @@ public class WalkNodeEvaluator extends NodeEvaluator { return BlockPathTypes.POWDER_SNOW; } else if (blockState.is(Blocks.CACTUS)) { return BlockPathTypes.DAMAGE_CACTUS; - } else if (blockState.is(Blocks.SWEET_BERRY_BUSH)) { + } else if (blockState.is(Blocks.SWEET_BERRY_BUSH) || blockState.is(Blocks.STONECUTTER)) { return BlockPathTypes.DAMAGE_OTHER; } else if (blockState.is(Blocks.HONEY_BLOCK)) { return BlockPathTypes.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 b6f2bae38781f16c46ad515f34d829074b58e70d..e1753ed5f7f72a4861666cd7929ab52b7891d5f0 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -1039,6 +1039,10 @@ public class CraftEventFactory { cause = DamageCause.MAGIC; } else if (source == DamageSource.IN_FIRE) { cause = DamageCause.FIRE; + // Purpur start + } else if (source == DamageSource.STONECUTTER) { + cause = DamageCause.CONTACT; + // Purpur end } else { throw new IllegalStateException(String.format("Unhandled damage of %s by %s from %s", entity, damager, source.msgId)); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java index f0051835d259ecfd0300653645c3942749a31937..161dc422a331d02132d5158efeef8ac2150a4d0f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -176,6 +176,11 @@ public class PurpurConfig { pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput); } + public static String deathMsgStonecutter = " has sawed themself in half"; + private static void deathMessages() { + deathMsgStonecutter = getString("settings.messages.death-message.stonecutter", deathMsgStonecutter); + } + public static String serverModName = "Purpur"; private static void serverModName() { serverModName = getString("settings.server-mod-name", serverModName); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 8e3e8db4c77bdc15a7f77c5c981e338c0cd0dd39..69cf9d1f726295f54a28f328a1fb4cb1d97d6824 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -430,6 +430,11 @@ public class PurpurWorldConfig { spawnerDeactivateByRedstone = getBoolean("blocks.spawner.deactivate-by-redstone", spawnerDeactivateByRedstone); } + public float stonecutterDamage = 0.0F; + private void stonecutterSettings() { + stonecutterDamage = (float) getDouble("blocks.stonecutter.damage", stonecutterDamage); + } + public boolean turtleEggsBreakFromExpOrbs = true; public boolean turtleEggsBreakFromItems = true; public boolean turtleEggsBreakFromMinecarts = true;