From 56d484f69b1cf7b556f90c5b4bb3e27abe2c8be3 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sat, 2 May 2020 18:50:25 +0200 Subject: [PATCH] Make mobs and bed use mcl_explosions --- mods/ENTITIES/mcl_mobs/api.lua | 49 ++++++++++--------------------- mods/ENTITIES/mcl_mobs/mod.conf | 2 +- mods/ENTITIES/mobs_mc/creeper.lua | 3 +- mods/ENTITIES/mobs_mc/wither.lua | 3 +- mods/ITEMS/mcl_beds/functions.lua | 5 ++-- 5 files changed, 21 insertions(+), 41 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 6cfd4fc718..dd0d2e5dd3 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -93,7 +93,7 @@ local node_snow = "mcl_core:snow" mobs.fallback_node = minetest.registered_aliases["mapgen_dirt"] or "mcl_core:dirt" local mod_weather = minetest.get_modpath("mcl_weather") ~= nil -local mod_tnt = minetest.get_modpath("mcl_tnt") ~= nil +local mod_explosions = minetest.get_modpath("mcl_explosions") ~= nil local mod_mobspawners = minetest.get_modpath("mcl_mobspawners") ~= nil local mod_hunger = minetest.get_modpath("mcl_hunger") ~= nil local mod_worlds = minetest.get_modpath("mcl_worlds") ~= nil @@ -2218,26 +2218,10 @@ local do_states = function(self, dtime) local pos = self.object:get_pos() - -- dont damage anything if area protected or next to water - if minetest.find_node_near(pos, 1, {"group:water"}) - or minetest.is_protected(pos, "") then - - node_break_radius = 1 - end - - self.object:remove() - - if mobs_griefing and mod_tnt and tnt and tnt.boom - and not minetest.is_protected(pos, "") then - - tnt.boom(pos, { - radius = node_break_radius, - damage_radius = entity_damage_radius, - sound = self.sounds.explode, - is_tnt = false, - }) + if mod_explosions then + if mobs_griefing and not minetest.is_protected(pos, "") then + mcl_explosions.explode(self.object:get_pos(), self.explosion_strength, { drop_chance = 1.0 }, self.object) else - minetest.sound_play(self.sounds.explode, { pos = pos, gain = 1.0, @@ -2247,6 +2231,8 @@ local do_states = function(self, dtime) entity_physics(pos, entity_damage_radius) effect(pos, 32, "tnt_smoke.png", nil, nil, node_break_radius, 1, 0) end + end + self.object:remove() return true end @@ -3365,8 +3351,8 @@ minetest.register_entity(name, { runaway_timer = 0, pathfinding = def.pathfinding, immune_to = def.immune_to or {}, - explosion_radius = def.explosion_radius, - explosion_damage_radius = def.explosion_damage_radius, + explosion_radius = def.explosion_radius, -- LEGACY + explosion_damage_radius = def.explosion_damage_radius, -- LEGACY explosion_timer = def.explosion_timer or 3, allow_fuse_reset = def.allow_fuse_reset ~= false, stop_to_explode = def.stop_to_explode ~= false, @@ -3393,6 +3379,7 @@ minetest.register_entity(name, { texture_mods = {}, shoot_arrow = def.shoot_arrow, sounds_child = def.sounds_child, + explosion_strength = def.explosion_strength, -- End of MCL2 extensions on_spawn = def.on_spawn, @@ -3838,7 +3825,6 @@ end -- no damage to nodes explosion function mobs:safe_boom(self, pos, radius) - minetest.sound_play(self.sounds and self.sounds.explode or "tnt_explode", { pos = pos, gain = 1.0, @@ -3853,17 +3839,12 @@ end -- make explosion with protection and tnt mod check function mobs:boom(self, pos, radius) - if mobs_griefing - and mod_tnt and tnt and tnt.boom - and not minetest.is_protected(pos, "") then - - tnt.boom(pos, { - radius = radius, - damage_radius = radius, - sound = self.sounds and self.sounds.explode, - explode_center = true, - is_tnt = false, - }) + if mod_explosions then + if mobs_griefing and not minetest.is_protected(pos, "") then + mcl_explosions.explode(pos, self.explosion_strength, { drop_chance = 1.0 }, self.object) + else + mobs:safe_boom(self, pos, radius) + end else mobs:safe_boom(self, pos, radius) end diff --git a/mods/ENTITIES/mcl_mobs/mod.conf b/mods/ENTITIES/mcl_mobs/mod.conf index aed560132b..a32827a65b 100644 --- a/mods/ENTITIES/mcl_mobs/mod.conf +++ b/mods/ENTITIES/mcl_mobs/mod.conf @@ -1,2 +1,2 @@ name = mcl_mobs -optional_depends = mcl_weather, mcl_tnt, mcl_hunger, mcl_worlds, invisibility, lucky_block, cmi, doc_identifier, mcl_armor +optional_depends = mcl_weather, mcl_explosions, mcl_hunger, mcl_worlds, invisibility, lucky_block, cmi, doc_identifier, mcl_armor diff --git a/mods/ENTITIES/mobs_mc/creeper.lua b/mods/ENTITIES/mobs_mc/creeper.lua index b8afb88e30..d38269734a 100644 --- a/mods/ENTITIES/mobs_mc/creeper.lua +++ b/mods/ENTITIES/mobs_mc/creeper.lua @@ -36,9 +36,8 @@ mobs:register_mob("mobs_mc:creeper", { runaway_from = { "mobs_mc:ocelot", "mobs_mc:cat" }, attack_type = "explode", - explosion_radius = 3, + explosion_strength = 3, reach = 4, - explosion_damage_radius = 7, explosion_timer = 1.5, allow_fuse_reset = true, stop_to_explode = true, diff --git a/mods/ENTITIES/mobs_mc/wither.lua b/mods/ENTITIES/mobs_mc/wither.lua index 7686efc97b..ebbbf92fb1 100644 --- a/mods/ENTITIES/mobs_mc/wither.lua +++ b/mods/ENTITIES/mobs_mc/wither.lua @@ -49,8 +49,7 @@ mobs:register_mob("mobs_mc:wither", { lava_damage = 0, fire_damage = 0, attack_type = "dogshoot", - explosion_radius = 3, - explosion_fire = false, + explosion_strength = 8, dogshoot_stop = true, arrow = "mobs_mc:wither_skull", reach = 5, diff --git a/mods/ITEMS/mcl_beds/functions.lua b/mods/ITEMS/mcl_beds/functions.lua index 802a64da5d..d73154ee46 100644 --- a/mods/ITEMS/mcl_beds/functions.lua +++ b/mods/ITEMS/mcl_beds/functions.lua @@ -5,6 +5,7 @@ local pi = math.pi local player_in_bed = 0 local is_sp = minetest.is_singleplayer() local weather_mod = minetest.get_modpath("mcl_weather") ~= nil +local explosions_mod = minetest.get_modpath("mcl_explosions") ~= nil -- Helper functions @@ -307,8 +308,8 @@ function mcl_beds.on_rightclick(pos, player, is_top) if dim == "nether" or dim == "end" then -- Bed goes BOOM in the Nether or End. minetest.remove_node(pos) - if minetest.get_modpath("mcl_tnt") then - tnt.boom(pos, {radius = 4, damage_radius = 4, is_tnt = false}) + if explosions_mod then + mcl_explosions.explode(pos, 5, {drop_chance = 1.0, fire = true}) end return end