Use tabs in rp_supertools

This commit is contained in:
Wuzzy 2024-04-17 07:42:29 +02:00
parent e250afd0d7
commit 6032df3e64

View File

@ -4,174 +4,169 @@ local GROWTH_TOOL_USES = 13
local CHILD_TOOL_USES = 13 local CHILD_TOOL_USES = 13
local grow_tall = function(pos, y_dir, nodename) local grow_tall = function(pos, y_dir, nodename)
local newpos local newpos
for i=1, 10 do for i=1, 10 do
newpos = vector.add(pos, vector.new(0,i*y_dir,0)) newpos = vector.add(pos, vector.new(0,i*y_dir,0))
local newnode = minetest.get_node(newpos) local newnode = minetest.get_node(newpos)
if newnode.name == "air" then if newnode.name == "air" then
minetest.set_node(newpos, {name=nodename}) minetest.set_node(newpos, {name=nodename})
return true return true
elseif newnode.name ~= nodename then elseif newnode.name ~= nodename then
return false return false
end end
end end
return false return false
end end
minetest.register_craftitem( minetest.register_craftitem("rp_supertools:growth_tool", {
"rp_supertools:growth_tool", description = S("Growth Tool"),
{ _tt_help = S("Make plants and mobs grow instantly"),
description = S("Growth Tool"), inventory_image = "rp_supertools_growth_tool.png",
_tt_help = S("Make plants and mobs grow instantly"), wield_image = "rp_supertools_growth_tool.png",
inventory_image = "rp_supertools_growth_tool.png", groups = { supertool = 1, tool = 1 },
wield_image = "rp_supertools_growth_tool.png", stack_max = 1,
groups = { supertool = 1, tool = 1 }, on_secondary_use = function(itemstack, placer, pointed_thing)
stack_max = 1, -- Handle growing child mobs into adults
on_secondary_use = function(itemstack, placer, pointed_thing) if pointed_thing.type == "object" then
-- Handle growing child mobs into adults local obj = pointed_thing.ref
if pointed_thing.type == "object" then local ent = obj:get_luaentity()
local obj = pointed_thing.ref if ent and ent._cmi_is_mob and ent._child then
local ent = obj:get_luaentity() rp_mobs.turn_into_adult(ent)
if ent and ent._cmi_is_mob and ent._child then if not minetest.is_creative_enabled(placer:get_player_name()) then
rp_mobs.turn_into_adult(ent) itemstack:add_wear_by_uses(GROWTH_TOOL_USES)
if not minetest.is_creative_enabled(placer:get_player_name()) then end
itemstack:add_wear_by_uses(GROWTH_TOOL_USES) local pos = obj:get_pos()
end minetest.log("action", "[rp_supertools] " .. placer:get_player_name() .. " used groth tool on mob '"..ent.name.."' at "..minetest.pos_to_string(pos, 1))
local pos = obj:get_pos() end
minetest.log("action", "[rp_supertools] " .. placer:get_player_name() .. " used groth tool on mob '"..ent.name.."' at "..minetest.pos_to_string(pos, 1)) return itemstack
end end
return itemstack end,
end on_place = function(itemstack, placer, pointed_thing)
end, -- Handle pointed node handlers and protection
on_place = function(itemstack, placer, pointed_thing) local handled, handled_itemstack = util.on_place_pointed_node_handler(itemstack, placer, pointed_thing)
-- Handle pointed node handlers and protection if handled then
local handled, handled_itemstack = util.on_place_pointed_node_handler(itemstack, placer, pointed_thing) return handled_itemstack
if handled then end
return handled_itemstack if util.handle_node_protection(placer, pointed_thing) then
end return itemstack
if util.handle_node_protection(placer, pointed_thing) then end
return itemstack
end
if pointed_thing.type ~= "node" then if pointed_thing.type ~= "node" then
return itemstack return itemstack
end end
-- Handle growing nodes -- Handle growing nodes
local apos = pointed_thing.above local apos = pointed_thing.above
local upos = pointed_thing.under local upos = pointed_thing.under
local unode = minetest.get_node(upos) local unode = minetest.get_node(upos)
local anode = minetest.get_node(apos) local anode = minetest.get_node(apos)
local diff = vector.subtract(apos, upos) local diff = vector.subtract(apos, upos)
local used = false local used = false
if minetest.get_item_group(unode.name, "sapling") ~= 0 then if minetest.get_item_group(unode.name, "sapling") ~= 0 then
used = default.grow_sapling(upos) used = default.grow_sapling(upos)
elseif diff.y > 0 and unode.name == "rp_default:dirt" and anode.name == "air" then elseif diff.y > 0 and unode.name == "rp_default:dirt" and anode.name == "air" then
local biomedata = minetest.get_biome_data(upos) local biomedata = minetest.get_biome_data(upos)
local biome = minetest.get_biome_name(biomedata.biome) local biome = minetest.get_biome_name(biomedata.biome)
if default.is_dry_biome(biome) then if default.is_dry_biome(biome) then
minetest.set_node(upos, {name="rp_default:dirt_with_dry_grass"}) minetest.set_node(upos, {name="rp_default:dirt_with_dry_grass"})
else else
minetest.set_node(upos, {name="rp_default:dirt_with_grass"}) minetest.set_node(upos, {name="rp_default:dirt_with_grass"})
end end
used = true used = true
elseif diff.y > 0 and unode.name == "rp_default:swamp_dirt" and anode.name == "air" then elseif diff.y > 0 and unode.name == "rp_default:swamp_dirt" and anode.name == "air" then
minetest.set_node(upos, {name="rp_default:dirt_with_swamp_grass"}) minetest.set_node(upos, {name="rp_default:dirt_with_swamp_grass"})
used = true used = true
elseif diff.y > 0 and unode.name == "rp_default:dirt_with_grass" and anode.name == "air" then elseif diff.y > 0 and unode.name == "rp_default:dirt_with_grass" and anode.name == "air" then
minetest.set_node(apos, {name="rp_default:grass"}) minetest.set_node(apos, {name="rp_default:grass"})
used = true used = true
elseif diff.y > 0 and unode.name == "rp_default:dirt_with_dry_grass" and anode.name == "air" then elseif diff.y > 0 and unode.name == "rp_default:dirt_with_dry_grass" and anode.name == "air" then
minetest.set_node(apos, {name="rp_default:dry_grass"}) minetest.set_node(apos, {name="rp_default:dry_grass"})
used = true used = true
elseif diff.y > 0 and unode.name == "rp_default:dirt_with_swamp_grass" and anode.name == "air" then elseif diff.y > 0 and unode.name == "rp_default:dirt_with_swamp_grass" and anode.name == "air" then
minetest.set_node(apos, {name="rp_default:swamp_grass"}) minetest.set_node(apos, {name="rp_default:swamp_grass"})
used = true used = true
elseif diff.y > 0 and unode.name == "rp_default:alga_block" and minetest.get_item_group(anode.name, "water") > 0 then elseif diff.y > 0 and unode.name == "rp_default:alga_block" and minetest.get_item_group(anode.name, "water") > 0 then
minetest.set_node(upos, {name="rp_default:alga_on_alga_block", param2 = 16}) minetest.set_node(upos, {name="rp_default:alga_on_alga_block", param2 = 16})
used = true used = true
elseif minetest.get_item_group(unode.name, "alga") == 1 then elseif minetest.get_item_group(unode.name, "alga") == 1 then
local grown = default.grow_underwater_leveled_plant(upos, unode) local grown = default.grow_underwater_leveled_plant(upos, unode)
used = grown == true used = grown == true
elseif unode.name == "rp_default:grass" then elseif unode.name == "rp_default:grass" then
minetest.set_node(upos, {name="rp_default:tall_grass"}) minetest.set_node(upos, {name="rp_default:tall_grass"})
used = true used = true
elseif unode.name == "rp_default:seagrass_on_dirt" then elseif unode.name == "rp_default:seagrass_on_dirt" then
minetest.set_node(upos, {name="rp_default:tall_seagrass_on_dirt"}) minetest.set_node(upos, {name="rp_default:tall_seagrass_on_dirt"})
used = true used = true
elseif unode.name == "rp_default:seagrass_on_swamp_dirt" then elseif unode.name == "rp_default:seagrass_on_swamp_dirt" then
minetest.set_node(upos, {name="rp_default:tall_seagrass_on_swamp_dirt"}) minetest.set_node(upos, {name="rp_default:tall_seagrass_on_swamp_dirt"})
used = true used = true
elseif unode.name == "rp_default:seagrass_on_sand" then elseif unode.name == "rp_default:seagrass_on_sand" then
minetest.set_node(upos, {name="rp_default:tall_seagrass_on_sand"}) minetest.set_node(upos, {name="rp_default:tall_seagrass_on_sand"})
used = true used = true
elseif unode.name == "rp_default:seagrass_on_fertilized_dirt" then elseif unode.name == "rp_default:seagrass_on_fertilized_dirt" then
minetest.set_node(upos, {name="rp_default:tall_seagrass_on_fertilized_dirt"}) minetest.set_node(upos, {name="rp_default:tall_seagrass_on_fertilized_dirt"})
used = true used = true
elseif unode.name == "rp_default:seagrass_on_fertilized_swamp_dirt" then elseif unode.name == "rp_default:seagrass_on_fertilized_swamp_dirt" then
minetest.set_node(upos, {name="rp_default:tall_seagrass_on_fertilized_swamp_dirt"}) minetest.set_node(upos, {name="rp_default:tall_seagrass_on_fertilized_swamp_dirt"})
used = true used = true
elseif unode.name == "rp_default:seagrass_on_fertilized_sand" then elseif unode.name == "rp_default:seagrass_on_fertilized_sand" then
minetest.set_node(upos, {name="rp_default:tall_seagrass_on_fertilized_sand"}) minetest.set_node(upos, {name="rp_default:tall_seagrass_on_fertilized_sand"})
used = true used = true
elseif minetest.get_item_group(unode.name, "farming_plant") == 1 then elseif minetest.get_item_group(unode.name, "farming_plant") == 1 then
local udef = minetest.registered_nodes[unode.name] local udef = minetest.registered_nodes[unode.name]
if udef then if udef then
local plantname = udef._rp_farming_plant_name local plantname = udef._rp_farming_plant_name
local has_grown = farming.next_stage(upos, plantname) local has_grown = farming.next_stage(upos, plantname)
if has_grown then if has_grown then
used = true used = true
end end
end end
elseif (unode.name == "rp_default:papyrus" or unode.name == "rp_default:cactus" or unode.name == "rp_default:thistle") then elseif (unode.name == "rp_default:papyrus" or unode.name == "rp_default:cactus" or unode.name == "rp_default:thistle") then
local grown = grow_tall(upos, 1, unode.name) local grown = grow_tall(upos, 1, unode.name)
if grown then if grown then
used = true used = true
end end
elseif (unode.name == "rp_default:vine") then elseif (unode.name == "rp_default:vine") then
local grown = grow_tall(upos, -1, unode.name) local grown = grow_tall(upos, -1, unode.name)
if grown then if grown then
used = true used = true
end end
end end
if used then
minetest.sound_play({name="rp_farming_place_nonseed", gain=0.75}, {pos=pointed_thing.under}, true)
if not minetest.is_creative_enabled(placer:get_player_name()) then
itemstack:add_wear_by_uses(GROWTH_TOOL_USES)
end
if used then minetest.log("action", "[rp_supertools] " .. placer:get_player_name() .. " used growth tool on "..unode.name.." at "..minetest.pos_to_string(upos))
minetest.sound_play({name="rp_farming_place_nonseed", gain=0.75}, {pos=pointed_thing.under}, true) end
if not minetest.is_creative_enabled(placer:get_player_name()) then
itemstack:add_wear_by_uses(GROWTH_TOOL_USES)
end
minetest.log("action", "[rp_supertools] " .. placer:get_player_name() .. " used growth tool on "..unode.name.." at "..minetest.pos_to_string(upos)) return itemstack
end end,
return itemstack
end,
}) })
minetest.register_craftitem( minetest.register_craftitem("rp_supertools:degrowth_tool", {
"rp_supertools:degrowth_tool", description = S("Degrowth Tool"),
{ _tt_help = S("Turn mobs into children"),
description = S("Degrowth Tool"), inventory_image = "rp_supertools_degrowth_tool.png",
_tt_help = S("Turn mobs into children"), wield_image = "rp_supertools_degrowth_tool.png",
inventory_image = "rp_supertools_degrowth_tool.png", groups = { supertool = 1, tool = 1 },
wield_image = "rp_supertools_degrowth_tool.png", stack_max = 1,
groups = { supertool = 1, tool = 1 }, on_secondary_use = function(itemstack, placer, pointed_thing)
stack_max = 1, if pointed_thing.type ~= "object" then
on_secondary_use = function(itemstack, placer, pointed_thing) return itemstack
if pointed_thing.type ~= "object" then end
return itemstack local obj = pointed_thing.ref
end local ent = obj:get_luaentity()
local obj = pointed_thing.ref if ent and ent._cmi_is_mob and not ent._child and rp_mobs.mobdef_has_tag(ent.name, "child_exists") then
local ent = obj:get_luaentity() local pos = obj:get_pos()
if ent and ent._cmi_is_mob and not ent._child and rp_mobs.mobdef_has_tag(ent.name, "child_exists") then rp_mobs.turn_into_child(obj)
local pos = obj:get_pos() if not minetest.is_creative_enabled(placer:get_player_name()) then
rp_mobs.turn_into_child(obj) itemstack:add_wear_by_uses(CHILD_TOOL_USES)
if not minetest.is_creative_enabled(placer:get_player_name()) then end
itemstack:add_wear_by_uses(CHILD_TOOL_USES) minetest.log("action", "[rp_supertools] " .. placer:get_player_name() .. " used degrowth tool on '"..ent.name.."' at "..minetest.pos_to_string(pos, 1))
end end
minetest.log("action", "[rp_supertools] " .. placer:get_player_name() .. " used degrowth tool on '"..ent.name.."' at "..minetest.pos_to_string(pos, 1)) return itemstack
end end,
return itemstack
end,
}) })