kay27 2021-02-27 22:44:34 +04:00
parent bf81bb7f07
commit 21e6c5ad1f

View File

@ -517,39 +517,61 @@ mcl_structures.register_structures = function(structure_type, structures)
registered_structures[structure_type] = structures registered_structures[structure_type] = structures
end end
-- helper - finds the rotation value for a certain direction
-- https://forum.minetest.net/viewtopic.php?t=13280
-- by Exilyth
local function dir_to_rotation(p_dir)
if p_dir.x == 0 and p_dir.z > 0 then
return "0"
end
if p_dir.x == 0 and p_dir.z < 0 then
return "180"
end
if p_dir.x > 0 and p_dir.z == 0 then
return "90"
end
if p_dir.x < 0 and p_dir.z == 0 then
return "270"
end
return "0"
end
-- Debug command -- Debug command
minetest.register_chatcommand("spawnstruct", { minetest.register_chatcommand("spawnstruct", {
params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_portal_shrine", params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_portal_shrine",
description = S("Generate a pre-defined structure near your position."), description = S("Generate a pre-defined structure near your position."),
privs = {debug = true}, privs = {debug = true},
func = function(name, param) func = function(name, param)
local pos = minetest.get_player_by_name(name):get_pos() local player = minetest.get_player_by_name(name)
if not pos then if not player then return end
return local pos = player:get_pos()
end if not pos then return end
pos = vector.round(pos) pos = vector.round(pos)
local dir = minetest.yaw_to_dir(player:get_look_horizontal())
local rot = dir_to_rotation(dir)
local pr = PseudoRandom(pos.x+pos.y+pos.z)
local errord = false local errord = false
local message = S("Structure placed.") local message = S("Structure placed.")
if param == "desert_temple" then if param == "desert_temple" then
mcl_structures.generate_desert_temple(pos) mcl_structures.generate_desert_temple(pos, rot, pr)
elseif param == "desert_well" then elseif param == "desert_well" then
mcl_structures.generate_desert_well(pos) mcl_structures.generate_desert_well(pos, rot, pr)
elseif param == "igloo" then elseif param == "igloo" then
mcl_structures.generate_igloo(pos) mcl_structures.generate_igloo(pos, rot, pr)
elseif param == "witch_hut" then elseif param == "witch_hut" then
mcl_structures.generate_witch_hut(pos) mcl_structures.generate_witch_hut(pos, rot, pr)
elseif param == "boulder" then elseif param == "boulder" then
mcl_structures.generate_boulder(pos) mcl_structures.generate_boulder(pos, rot, pr)
elseif param == "fossil" then elseif param == "fossil" then
mcl_structures.generate_fossil(pos) mcl_structures.generate_fossil(pos, rot, pr)
elseif param == "ice_spike_small" then elseif param == "ice_spike_small" then
mcl_structures.generate_ice_spike_small(pos) mcl_structures.generate_ice_spike_small(pos, rot, pr)
elseif param == "ice_spike_large" then elseif param == "ice_spike_large" then
mcl_structures.generate_ice_spike_large(pos) mcl_structures.generate_ice_spike_large(pos, rot, pr)
elseif param == "end_exit_portal" then elseif param == "end_exit_portal" then
mcl_structures.generate_end_exit_portal(pos) mcl_structures.generate_end_exit_portal(pos, rot, pr)
elseif param == "end_portal_shrine" then elseif param == "end_portal_shrine" then
mcl_structures.generate_end_portal_shrine(pos) mcl_structures.generate_end_portal_shrine(pos, rot, pr)
elseif param == "" then elseif param == "" then
message = S("Error: No structure type given. Please use “/spawnstruct <type>”.") message = S("Error: No structure type given. Please use “/spawnstruct <type>”.")
errord = true errord = true