From b24d5884b5b55ae7ae68021e43db774c14f6cf3d Mon Sep 17 00:00:00 2001 From: Encode42 Date: Fri, 10 Jan 2025 23:04:03 -0800 Subject: [PATCH] Config to make Creepers explode on death Creepers exploded after being killed in the alpha days. This brings that back. --- ...ig-to-make-Creepers-explode-on-death.patch | 72 ------------------- .../features/0001-Ridables.patch | 12 ++-- ...-Configurable-entity-base-attributes.patch | 8 +-- ...oggle-for-water-sensitive-mob-damage.patch | 10 +-- .../world/entity/monster/Creeper.java.patch | 36 +++++++++- .../purpurmc/purpur/PurpurWorldConfig.java | 2 + 6 files changed, 52 insertions(+), 88 deletions(-) delete mode 100644 patches/server/0135-Config-to-make-Creepers-explode-on-death.patch diff --git a/patches/server/0135-Config-to-make-Creepers-explode-on-death.patch b/patches/server/0135-Config-to-make-Creepers-explode-on-death.patch deleted file mode 100644 index 32a927986..000000000 --- a/patches/server/0135-Config-to-make-Creepers-explode-on-death.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Encode42 -Date: Tue, 16 Mar 2021 19:50:58 -0400 -Subject: [PATCH] Config to make Creepers explode on death - -Creepers exploded after being killed in the alpha days. This brings that back. - -diff --git a/net/minecraft/world/entity/monster/Creeper.java b/net/minecraft/world/entity/monster/Creeper.java -index 76e0dcedc72576c0e0a85e09a762aa5e2b63c7ef..58ef6c538a33199e5a8423223c22c61bf91fccae 100644 ---- a/net/minecraft/world/entity/monster/Creeper.java -+++ b/net/minecraft/world/entity/monster/Creeper.java -@@ -65,6 +65,7 @@ public class Creeper extends Monster { - private int prevSpacebarCharge = 0; - private int powerToggleDelay = 0; - // Purpur end - Ridables -+ private boolean exploding = false; // Purpur - Config to make Creepers explode on death - - public Creeper(EntityType type, Level world) { - super(type, world); -@@ -274,6 +275,16 @@ public class Creeper extends Monster { - } - // Purpur end - Toggle for water sensitive mob damage - -+ // Purpur start - Config to make Creepers explode on death -+ @Override -+ protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(ServerLevel world, DamageSource damageSource) { -+ if (!this.exploding && this.level().purpurConfig.creeperExplodeWhenKilled && damageSource.getEntity() instanceof net.minecraft.server.level.ServerPlayer) { -+ this.explodeCreeper(); -+ } -+ return super.dropAllDeathLoot(world, damageSource); -+ } -+ // Purpur end - Config to make Creepers explode on death -+ - @Override - protected SoundEvent getHurtSound(DamageSource source) { - return SoundEvents.CREEPER_HURT; -@@ -362,6 +373,7 @@ public class Creeper extends Monster { - - public void explodeCreeper() { - Level world = this.level(); -+ this.exploding = true; // Purpur - Config to make Creepers explode on death - - if (world instanceof ServerLevel worldserver) { - float f = this.isPowered() ? 2.0F : 1.0F; -@@ -383,6 +395,7 @@ public class Creeper extends Monster { - // CraftBukkit end - } - -+ this.exploding = false; // Purpur - Config to make Creepers explode on death - } - - private void spawnLingeringCloud() { -diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c62a22c8c7821041d890123c61cb04fb43955108..36262ccf9c5d308230ad112078d14a78f41243bd 100644 ---- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -877,6 +877,7 @@ public class PurpurWorldConfig { - public boolean creeperAllowGriefing = true; - public boolean creeperBypassMobGriefing = false; - public boolean creeperTakeDamageFromWater = false; -+ public boolean creeperExplodeWhenKilled = false; - private void creeperSettings() { - creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); - creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -892,6 +893,7 @@ public class PurpurWorldConfig { - creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); - 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); - } - - public boolean dolphinRidable = false; diff --git a/purpur-server/minecraft-patches/features/0001-Ridables.patch b/purpur-server/minecraft-patches/features/0001-Ridables.patch index 32601366d..39dde407a 100644 --- a/purpur-server/minecraft-patches/features/0001-Ridables.patch +++ b/purpur-server/minecraft-patches/features/0001-Ridables.patch @@ -2412,7 +2412,7 @@ index c6d0700f29d6c8123e96efe225faf2d99202ac81..361bf346153912bcbfcf962d7f716dfe protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth(random::nextInt)); diff --git a/net/minecraft/world/entity/animal/horse/Llama.java b/net/minecraft/world/entity/animal/horse/Llama.java -index 7618207f4ec7adeec8496e426037e6d17689daab..be40cfeb2f387ba50dea086432a453a268f18579 100644 +index 7d4aad3c45d710488aba540ee5a535098ddd27ee..164a429d432badcb315e8ece406e29e576a11265 100644 --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java @@ -78,7 +78,51 @@ public class Llama extends AbstractChestedHorse implements VariantHolder(this, Player.class, true)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this)); } -@@ -298,6 +375,7 @@ public class Creeper extends Monster { +@@ -311,6 +388,7 @@ public class Creeper extends Monster { com.destroystokyo.paper.event.entity.CreeperIgniteEvent event = new com.destroystokyo.paper.event.entity.CreeperIgniteEvent((org.bukkit.entity.Creeper) getBukkitEntity(), ignited); if (event.callEvent()) { this.entityData.set(DATA_IS_IGNITED, event.isIgnited()); @@ -3332,7 +3332,7 @@ index 4585b7c867685f8419c4d2b5b90af5946d337f90..c6eeaf7b460408acfdf89d988b47b08e return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.3F).add(Attributes.ATTACK_DAMAGE, 8.0).add(Attributes.MAX_HEALTH, 80.0); } diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java -index 1ceb3f44f39de3f82c169d5cb17d50d7b5642ab0..42cd31dd78dcf2f8fd338032189931062827ab0b 100644 +index 2c27085f486c927e4a6e98f3eb0001ef0e7ac60f..41107379eb3376697638aace09441680d54fa181 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java @@ -90,9 +90,27 @@ public class EnderMan extends Monster implements NeutralMob { diff --git a/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch b/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch index b8c1deb90..d919f2d9c 100644 --- a/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch +++ b/purpur-server/minecraft-patches/features/0002-Configurable-entity-base-attributes.patch @@ -717,7 +717,7 @@ index 361bf346153912bcbfcf962d7f716dfe12ae2a7b..8bd118e82da9e4d4153de0a3efaf6d69 protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(generateMaxHealth(random::nextInt)); diff --git a/net/minecraft/world/entity/animal/horse/Llama.java b/net/minecraft/world/entity/animal/horse/Llama.java -index be40cfeb2f387ba50dea086432a453a268f18579..8b6beeff7ad0c7ca7bc09f505891f560096d5c9a 100644 +index 164a429d432badcb315e8ece406e29e576a11265..58e726dd33f572a31b4910b9ff666c4252fb03a9 100644 --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java @@ -124,6 +124,23 @@ public class Llama extends AbstractChestedHorse implements VariantHolder entityType, Level level) { + super(entityType, level); +@@ -161,6 +_,26 @@ } } @@ -13,10 +21,28 @@ + return super.finalizeSpawn(world, difficulty, spawnReason, entityData); + } + // Purpur end - Special mobs naturally spawn ++ ++ // Purpur start - Config to make Creepers explode on death ++ @Override ++ protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(ServerLevel world, DamageSource damageSource) { ++ if (!this.exploding && this.level().purpurConfig.creeperExplodeWhenKilled && damageSource.getEntity() instanceof net.minecraft.server.level.ServerPlayer) { ++ this.explodeCreeper(); ++ } ++ return super.dropAllDeathLoot(world, damageSource); ++ } ++ // Purpur end - Config to make Creepers explode on death + @Override protected SoundEvent getHurtSound(DamageSource damageSource) { return SoundEvents.CREEPER_HURT; +@@ -243,6 +_,7 @@ + } + + public void explodeCreeper() { ++ this.exploding = true; // Purpur - Config to make Creepers explode on death + if (this.level() instanceof ServerLevel serverLevel) { + float f = this.isPowered() ? 2.0F : 1.0F; + // CraftBukkit start @@ -250,7 +_,7 @@ if (!event.isCancelled()) { // CraftBukkit end @@ -26,3 +52,11 @@ this.spawnLingeringCloud(); this.triggerOnDeathMobEffects(serverLevel, Entity.RemovalReason.KILLED); this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.EXPLODE); // CraftBukkit - add Bukkit remove cause +@@ -261,6 +_,7 @@ + } + // CraftBukkit end + } ++ this.exploding = false; // Purpur - Config to make Creepers explode on death + } + + private void spawnLingeringCloud() { diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 3598290ff..f52cbfa21 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -869,6 +869,7 @@ public class PurpurWorldConfig { public boolean creeperAllowGriefing = true; public boolean creeperBypassMobGriefing = false; public boolean creeperTakeDamageFromWater = false; + public boolean creeperExplodeWhenKilled = false; private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); @@ -884,6 +885,7 @@ public class PurpurWorldConfig { creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); 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); } public boolean dolphinRidable = false;