Ignite tnt minecart by fire charge

This commit is contained in:
Wuzzy 2020-01-30 23:11:16 +01:00
parent 9f344b4307
commit 04c8a08cc4
4 changed files with 30 additions and 6 deletions

View File

@ -23,12 +23,16 @@ local function detach_driver(self)
end end
end end
local function activate_tnt_minecart(self) local function activate_tnt_minecart(self, timer)
if self._boomtimer then if self._boomtimer then
return return
end end
self.object:set_armor_groups({immortal=1}) self.object:set_armor_groups({immortal=1})
if timer then
self._boomtimer = timer
else
self._boomtimer = tnt.BOOMTIMER self._boomtimer = tnt.BOOMTIMER
end
self.object:set_properties({textures = { self.object:set_properties({textures = {
"mcl_tnt_blink.png", "mcl_tnt_blink.png",
"mcl_tnt_blink.png", "mcl_tnt_blink.png",
@ -600,7 +604,7 @@ register_minecart(
S("Minecarts can be used for a quick transportion on rails.") .. "\n" .. S("Minecarts can be used for a quick transportion on rails.") .. "\n" ..
S("Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type."), S("Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type."),
S("You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.") .. "\n" .. S("You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.") .. "\n" ..
S("To obtain the minecart, punch it while holding down the sneak key.") .. "\n" S("To obtain the minecart, punch it while holding down the sneak key.") .. "\n" ..
S("If it moves over a powered activator rail, you'll get ejected."), S("If it moves over a powered activator rail, you'll get ejected."),
"mcl_minecarts_minecart.b3d", "mcl_minecarts_minecart.b3d",
{"mcl_minecarts_minecart.png"}, {"mcl_minecarts_minecart.png"},

View File

@ -3605,6 +3605,7 @@ function mobs:register_arrow(name, def)
hit_player = def.hit_player, hit_player = def.hit_player,
hit_node = def.hit_node, hit_node = def.hit_node,
hit_mob = def.hit_mob, hit_mob = def.hit_mob,
hit_object = def.hit_object,
drop = def.drop or false, -- drops arrow as registered item when true drop = def.drop or false, -- drops arrow as registered item when true
collisionbox = {0, 0, 0, 0, 0, 0}, -- remove box around arrows collisionbox = {0, 0, 0, 0, 0, 0}, -- remove box around arrows
timer = 0, timer = 0,
@ -3671,7 +3672,7 @@ function mobs:register_arrow(name, def)
end end
end end
if self.hit_player or self.hit_mob then if self.hit_player or self.hit_mob or self.hit_object then
for _,player in pairs(minetest.get_objects_inside_radius(pos, 1.0)) do for _,player in pairs(minetest.get_objects_inside_radius(pos, 1.0)) do
@ -3690,11 +3691,18 @@ function mobs:register_arrow(name, def)
and entity._cmi_is_mob == true and entity._cmi_is_mob == true
and tostring(player) ~= self.owner_id and tostring(player) ~= self.owner_id
and entity.name ~= self.object:get_luaentity().name then and entity.name ~= self.object:get_luaentity().name then
self.hit_mob(self, player) self.hit_mob(self, player)
self.object:remove(); self.object:remove();
return
end
if entity
and self.hit_object
and (not entity._cmi_is_mob)
and tostring(player) ~= self.owner_id
and entity.name ~= self.object:get_luaentity().name then
self.hit_object(self, player)
self.object:remove();
return return
end end
end end

View File

@ -428,6 +428,9 @@ This function registers a arrow for mobs with the attack type shoot.
'hit_mob' a function that is called when the arrow hits a mob; 'hit_mob' a function that is called when the arrow hits a mob;
this function should hurt the mob, the parameters are this function should hurt the mob, the parameters are
(self, mob) (self, mob)
'hit_object' a function that is called when the arrow hits an object
that is neither a player nor a mob. this function should
hurt the object, the parameters are (self, object)
'hit_node' a function that is called when the arrow hits a node, the 'hit_node' a function that is called when the arrow hits a node, the
parameters are (self, pos, node) parameters are (self, pos, node)
'tail' when set to 1 adds a trail or tail to mob arrows 'tail' when set to 1 adds a trail or tail to mob arrows

View File

@ -95,6 +95,15 @@ mobs:register_arrow("mobs_mc:blaze_fireball", {
}, nil) }, nil)
end, end,
hit_object = function(self, object)
local lua = object:get_luaentity()
if lua then
if lua.name == "mcl_minecarts:tnt_minecart" then
lua:on_activate_by_rail(2)
end
end
end,
-- Node hit, make fire -- Node hit, make fire
hit_node = function(self, pos, node) hit_node = function(self, pos, node)
if node.name == "air" then if node.name == "air" then