From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Encode42 Date: Thu, 29 Apr 2021 20:28:18 -0400 Subject: [PATCH] Config for health to impact Creeper explosion radius diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java index cf585d2eaf743d38e06084609ff4c220e096cf71..b0e5146f0cf33f8fbc97c4c51edee252ad06e6a9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -366,9 +366,10 @@ public class Creeper extends Monster implements PowerableMob { if (!this.level.isClientSide) { Explosion.BlockInteraction explosion_effect = (this.level.purpurConfig.creeperBypassMobGriefing || this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) && level.purpurConfig.creeperAllowGriefing ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.NONE; // Purpur float f = this.isPowered() ? 2.0F : 1.0F; + float multiplier = this.level.purpurConfig.creeperHealthRadius ? this.getHealth() / this.getMaxHealth() : 1; // Purpur // CraftBukkit start - ExplosionPrimeEvent event = new ExplosionPrimeEvent(this.getBukkitEntity(), this.explosionRadius * f, false); + ExplosionPrimeEvent event = new ExplosionPrimeEvent(this.getBukkitEntity(), (this.explosionRadius * f) * multiplier, false); // Purpur this.level.getCraftServer().getPluginManager().callEvent(event); if (!event.isCancelled()) { this.dead = true; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index fb33eb38503d9eb74ad65edfc2b75d0e2e558422..6dfba9bbc2c25044e8c5a676259f439a2a5348ef 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -899,6 +899,7 @@ public class PurpurWorldConfig { public boolean creeperBypassMobGriefing = false; public boolean creeperTakeDamageFromWater = false; public boolean creeperExplodeWhenKilled = false; + public boolean creeperHealthRadius = false; private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); @@ -914,6 +915,7 @@ public class PurpurWorldConfig { creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing); creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); + creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); } public boolean dolphinRidable = false;