fix place issue, double place bug and add settingtypes
This commit is contained in:
parent
c0c18c942f
commit
071842bfe2
@ -1,4 +0,0 @@
|
|||||||
moreores?
|
|
||||||
technic?
|
|
||||||
basic_machines?
|
|
||||||
default
|
|
39
init.lua
39
init.lua
@ -4,20 +4,32 @@ aviation = {}
|
|||||||
aviator_hud_id = {}
|
aviator_hud_id = {}
|
||||||
|
|
||||||
local getsetting = tonumber((minetest.settings:get("active_block_range")) or 1) * 32
|
local getsetting = tonumber((minetest.settings:get("active_block_range")) or 1) * 32
|
||||||
local flength = 1800 -- how many seconds you can fly
|
local flength = tonumber((minetest.settings:get("aviator_flight_length")) or 30) * 60 -- how many seconds you can fly
|
||||||
local checktime = 1 -- check interval
|
local checktime = 1 -- check interval
|
||||||
local maxdistance = 50 -- maxradius
|
local maxdistance = tonumber((minetest.settings:get("aviator_flight_radius")) or 50) -- maxradius
|
||||||
local timer = 0
|
local timer = 0
|
||||||
local trans = true -- no permanent forceload block if server shuts down
|
local trans = true -- no permanent forceload block if server shuts down
|
||||||
local force = false
|
local force = false
|
||||||
|
|
||||||
if minetest.get_modpath("mesecons_mvps") then -- pull and push resistant
|
|
||||||
mesecon.register_mvps_stopper("aviator:aviator")
|
if minetest.get_modpath("mesecons_mvps") then -- pull and push resistant to pistons
|
||||||
|
mesecon.register_mvps_stopper("aviator:aviator")
|
||||||
end
|
end
|
||||||
|
|
||||||
if maxdistance > getsetting then force = true end
|
if maxdistance > getsetting then force = true end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
local function aviator_get_air_pos(pos)
|
||||||
|
local nodes = minetest.find_nodes_in_area({x=pos.x-1, y=pos.y, z=pos.z-1}, {x=pos.x+1, y=pos.y+1, z=pos.z+1}, {"air"})
|
||||||
|
if not nodes or #nodes < 1 then
|
||||||
|
return nil
|
||||||
|
else
|
||||||
|
return nodes[math.random(#nodes)]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
local function aviator_remove(pos, player, leave)
|
local function aviator_remove(pos, player, leave)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
if aviation[name] ~= nil then
|
if aviation[name] ~= nil then
|
||||||
@ -76,7 +88,7 @@ if minetest.get_modpath("technic") and minetest.get_modpath("moreores") then
|
|||||||
elseif minetest.get_modpath("basic_machines") then
|
elseif minetest.get_modpath("basic_machines") then
|
||||||
|
|
||||||
-- do it with constructor !
|
-- do it with constructor !
|
||||||
basic_machines.craft_recipes["aviator"] = {item = "aviator:aviator", description = "let you fly "..math.floor(flength/60).."min in an area of "..maxdistance.." nodes", craft = {"default:diamondblock 256","basic_machines:power_rod 25", "default:mese 256","basic_machines:keypad"}, tex = "aviator_aviator_side"}
|
basic_machines.craft_recipes["aviator"] = {item = "aviator:aviator", description = "let you fly "..math.floor(flength/60).."min in an area of "..maxdistance.." nodes", craft = {"default:diamondblock 16","basic_machines:power_rod 25", "default:mese 16","basic_machines:keypad"}, tex = "aviator_aviator_side"}
|
||||||
table.insert(basic_machines.craft_recipe_order,"aviator")
|
table.insert(basic_machines.craft_recipe_order,"aviator")
|
||||||
basic_machines.hardness["aviator:aviator"] = 999999
|
basic_machines.hardness["aviator:aviator"] = 999999
|
||||||
|
|
||||||
@ -104,22 +116,27 @@ minetest.register_node("aviator:aviator", {
|
|||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
diggable = true,
|
diggable = true,
|
||||||
groups = {oddly_breakable_by_hand=3},
|
groups = {oddly_breakable_by_hand=3},
|
||||||
|
liquids_pointable = true,
|
||||||
light_source = 12,
|
light_source = 12,
|
||||||
|
node_placement_prediction = "", -- important to avoid double placement
|
||||||
|
|
||||||
on_blast = function() end, -- TNT resistant
|
on_blast = function() end, -- TNT resistant
|
||||||
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
local name = placer:get_player_name()
|
local name = placer:get_player_name()
|
||||||
local meta = minetest.deserialize(itemstack:get_metadata()) or {}
|
local meta = minetest.deserialize(itemstack:get_metadata()) or {}
|
||||||
|
local pos = aviator_get_air_pos(pointed_thing.under)
|
||||||
|
|
||||||
|
if not pos then return itemstack end
|
||||||
|
|
||||||
if not aviation[name] then
|
if not aviation[name] then
|
||||||
|
local nname = itemstack:get_name()
|
||||||
local timer = minetest.get_node_timer(pointed_thing.above)
|
local timer = minetest.get_node_timer(pos)
|
||||||
minetest.set_node(pointed_thing.above, {name="aviator:aviator"})
|
minetest.set_node(pos, {name=nname})
|
||||||
itemstack:take_item()
|
itemstack:take_item()
|
||||||
aviation[name]=pointed_thing.above
|
aviation[name]=pos
|
||||||
if force then
|
if force then
|
||||||
if core.forceload_block(pointed_thing.above,trans) == false then
|
if core.forceload_block(pos,trans) == false then
|
||||||
-- minetest.chat_send_all("Forceload Error")
|
-- minetest.chat_send_all("Forceload Error")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
4
mod.conf
4
mod.conf
@ -2,7 +2,7 @@ name = aviator
|
|||||||
title = Aviator
|
title = Aviator
|
||||||
author = Gundul
|
author = Gundul
|
||||||
description = Adds a craftable node to minetest. You get fly priv 50 nodes around that node
|
description = Adds a craftable node to minetest. You get fly priv 50 nodes around that node
|
||||||
optional_depends = technic,moreores,basic_machines
|
optional_depends = technic,moreores,basic_machines,mesecons_mvps
|
||||||
license = LGPL
|
license = LGPL
|
||||||
forum = https://forum.minetest.net/viewtopic.php?f=11&t=16661
|
forum = https://forum.minetest.net/viewtopic.php?f=11&t=16661
|
||||||
version = 1.4
|
version = 1.5
|
||||||
|
10
settingtypes.txt
Normal file
10
settingtypes.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# all settings for client menu or in minetest.conf on servers
|
||||||
|
|
||||||
|
# -
|
||||||
|
# maximum time an aviator can be used
|
||||||
|
aviator_flight_length (max flight length in minutes) int 30
|
||||||
|
|
||||||
|
# maximum radius in which an aviator works
|
||||||
|
aviator_flight_radius (max radius an aviator grants fly) int 50
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user