--[[ TechAge ======= Copyright (C) 2019-2023 Joachim Stolberg AGPL v3 See LICENSE.txt for more information Wind turbine helper function ]]-- local S = techage.S local P = minetest.string_to_pos local M = minetest.get_meta local OCEAN = "ocean" if minetest.global_exists("asuna") then OCEAN = "below" end local function chat_message(player_name, msg) if player_name then minetest.chat_send_player(player_name, S("[TA4 Wind Turbine]").." "..msg) end return false, msg end -- num_turbines is the mx number of valid wind turbines. In the case of a tool -- it should be 0, in case of the rotor: 1 function techage.valid_place_for_windturbine(pos, player_name, num_turbines) local pos1, pos2, num -- Check if occean (only for tool) if num_turbines == 0 and pos.y ~= 1 then return chat_message(player_name, S("This is not the surface of the ocean!")) end local node = minetest.get_node(pos) if num_turbines == 0 and node.name ~= "default:water_source" then return chat_message(player_name, S("This is no ocean water!")) end local data = minetest.get_biome_data({x=pos.x, y=-2, z=pos.z}) if data then local name = minetest.get_biome_name(data.biome) if not string.find(name, OCEAN) then return chat_message(player_name, S("This is a").." "..name.." "..S("biome and no ocean!")) end end -- check the space over ocean pos1 = {x=pos.x-20, y=2, z=pos.z-20} pos2 = {x=pos.x+20, y=22, z=pos.z+20} num = #minetest.find_nodes_in_area(pos1, pos2, {"air", "ignore"}) if num < (41 * 41 * 21 * 0.9) then techage.mark_region(player_name, pos1, pos2, "") return chat_message(player_name, S("Here is not enough wind\n(A free air space of 41x41x21 m is necessary)!")) end -- Check for water surface (occean) pos1 = {x=pos.x-20, y=1, z=pos.z-20} pos2 = {x=pos.x+20, y=1, z=pos.z+20} num = #minetest.find_nodes_in_area(pos1, pos2, {"default:water_source", "default:water_flowing", "ignore"}) if num < (41*41 * 0.8) then techage.mark_region(player_name, pos1, pos2, "") return chat_message(player_name, S("Here is not enough water (41x41 m)!")) end -- Check for next wind turbine pos1 = {x=pos.x-13, y=2, z=pos.z-13} pos2 = {x=pos.x+13, y=22, z=pos.z+13} num = #minetest.find_nodes_in_area(pos1, pos2, {"techage:ta4_wind_turbine"}) if num > num_turbines then techage.mark_region(player_name, pos1, pos2, "") return chat_message(player_name, S("The next wind turbines is too close!")) end if num_turbines == 0 then chat_message(player_name, minetest.pos_to_string(pos).." ".. S("is a suitable place for a wind turbine!")) end return true, "ok" end