Add files via upload
parent
fc9139afdc
commit
174a341f7c
193
init.lua
193
init.lua
|
@ -1,53 +1,30 @@
|
||||||
multiplacer = {}
|
|
||||||
|
|
||||||
multiplacer.max_blox = 1024
|
|
||||||
|
|
||||||
local add_3dx2 = function(a,b)
|
local add_3dx2 = function(a,b)
|
||||||
return {x=a.x+b.x,y=a.y+b.y,z=a.z+b.z}
|
return {x=a.x+b.x,y=a.y+b.y,z=a.z+b.z}
|
||||||
end
|
end
|
||||||
|
|
||||||
local sub_3dx2 = function(a,b)
|
|
||||||
return {x=a.x-b.x,y=a.y-b.y,z=a.z-b.z}
|
|
||||||
end
|
|
||||||
|
|
||||||
local mul_3dx2 = function(a,b)
|
local mul_3dx2 = function(a,b)
|
||||||
return {x=a.x*b.x,y=a.y*b.y,z=a.z*b.z}
|
return {x=a.x*b.x,y=a.y*b.y,z=a.z*b.z}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
multiplacer = {}
|
||||||
|
|
||||||
|
multiplacer.max_blox = 1024
|
||||||
|
|
||||||
multiplacer.activate = function(itemstack, player, delete, pointed_thing, mode1, on_axis, missing_areas)
|
multiplacer.activate = function(itemstack, player, delete, pointed_thing, mode1, on_axis, missing_areas)
|
||||||
|
|
||||||
if( player == nil or pointed_thing == nil) then
|
if( player == nil or pointed_thing == nil) then
|
||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
if( pointed_thing.type ~= "node" ) then
|
|
||||||
|
local has, missing = minetest.check_player_privs(player, {multiplacer = true, areas = true})
|
||||||
|
if not has then
|
||||||
|
if missing["multiplacer"] then
|
||||||
|
minetest.chat_send_player( player:get_player_name(), "Hey! You can't use this tool because you do not have the \"multiplacer\" privilege.");
|
||||||
|
end
|
||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
local inv = player:get_inventory()
|
local inv = player:get_inventory()
|
||||||
|
|
||||||
-- credit to sokomine
|
|
||||||
|
|
||||||
local item = itemstack:to_table();
|
|
||||||
|
|
||||||
-- make sure it is defined
|
|
||||||
if( not( item[ "metadata"] ) or item["metadata"]=="" ) then
|
|
||||||
item["metadata"] = "default:dirt 0 0";
|
|
||||||
end
|
|
||||||
|
|
||||||
-- regain information about nodename, param1 and param2
|
|
||||||
local daten = item[ "metadata"]:split( " " );
|
|
||||||
|
|
||||||
if minetest.get_item_group(daten[1], "liquid") > 0 then
|
|
||||||
minetest.chat_send_player( player:get_player_name(), "Cannot place liquids.");
|
|
||||||
return nil;
|
|
||||||
end
|
|
||||||
|
|
||||||
-- the old format stored only the node name
|
|
||||||
if( #daten < 3 ) then
|
|
||||||
daten[2] = 0;
|
|
||||||
daten[3] = 0;
|
|
||||||
end
|
|
||||||
|
|
||||||
local w = inv:get_stack("main", 1):get_count()
|
local w = inv:get_stack("main", 1):get_count()
|
||||||
local h = inv:get_stack("main", 2):get_count()
|
local h = inv:get_stack("main", 2):get_count()
|
||||||
local l = inv:get_stack("main", 3):get_count()
|
local l = inv:get_stack("main", 3):get_count()
|
||||||
|
@ -55,43 +32,59 @@ multiplacer.activate = function(itemstack, player, delete, pointed_thing, mode1,
|
||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
local start = minetest.get_pointed_thing_position( pointed_thing, mode1);
|
if( pointed_thing.type ~= "node" ) then
|
||||||
local inv = player:get_inventory()
|
minetest.chat_send_player( name, " Error: No node selected.");
|
||||||
local look_dir = player:get_look_dir()
|
return nil;
|
||||||
local axis_dir = {x=look_dir.x/math.abs(look_dir.x), y=-look_dir.y/math.abs(look_dir.y), z=look_dir.z/math.abs(look_dir.z)}
|
end
|
||||||
local yaw = player:get_look_horizontal()
|
|
||||||
local msin = math.sin(yaw)
|
|
||||||
local mcos = math.cos(yaw)
|
|
||||||
local pos
|
|
||||||
|
|
||||||
|
local item = itemstack:to_table();
|
||||||
|
if( not( item[ "metadata"] ) or item["metadata"]=="" ) then
|
||||||
|
item["metadata"] = "default:dirt 0 0";
|
||||||
|
end
|
||||||
|
|
||||||
|
local daten = item[ "metadata"]:split( " " );
|
||||||
|
if minetest.get_item_group(daten[1], "liquid") > 0 then
|
||||||
|
minetest.chat_send_player( player:get_player_name(), "Cannot place liquids.");
|
||||||
|
return nil;
|
||||||
|
end
|
||||||
|
|
||||||
|
if( #daten < 3 ) then
|
||||||
|
daten[2] = 0;
|
||||||
|
daten[3] = 0;
|
||||||
|
end
|
||||||
|
|
||||||
|
local pos
|
||||||
|
local look_dir = player:get_look_dir()
|
||||||
|
local yaw = player:get_look_horizontal()
|
||||||
|
local start = minetest.get_pointed_thing_position(pointed_thing, mode1);
|
||||||
|
local axis_dir = {x=look_dir.x/math.abs(look_dir.x),y=-look_dir.y/math.abs(look_dir.y),z=look_dir.z/math.abs(look_dir.z)}
|
||||||
for iw = 0, w-1 do
|
for iw = 0, w-1 do
|
||||||
for ih = 0, h-1 do
|
for ih = 0, h-1 do
|
||||||
for il = 0, l-1 do
|
for il = 0, l-1 do
|
||||||
-- if on_axis then
|
if yaw < math.pi/4 or yaw > 7*math.pi/4 or (yaw > 3*math.pi/4 and yaw < 5*math.pi/4) then
|
||||||
if yaw < math.pi/4 or yaw > 7*math.pi/4 or (yaw > 3*math.pi/4 and yaw < 5*math.pi/4) then
|
pos = add_3dx2(start, mul_3dx2(axis_dir, {x=il, y=ih, z=iw}))
|
||||||
pos = add_3dx2(start, mul_3dx2(axis_dir, {x=il, y=ih, z=iw}))
|
else
|
||||||
else
|
pos = add_3dx2(start, mul_3dx2(axis_dir, {x=iw, y=ih, z=il}))
|
||||||
pos = add_3dx2(start, mul_3dx2(axis_dir, {x=iw, y=ih, z=il}))
|
end
|
||||||
end
|
local node = minetest.get_node_or_nil(pos)
|
||||||
-- else
|
if node ~= nil then
|
||||||
-- pos = add_3dx2(start, {x=iw*look_dir.x,y=ih,z=il*look_dir.z})
|
if not minetest.is_protected(pos, player:get_player_name()) then
|
||||||
-- end
|
if not areas then
|
||||||
if not minetest.is_protected(pos, player:get_player_name()) then
|
if delete then
|
||||||
if not areas then
|
if node.name == daten[1] then
|
||||||
if delete then
|
minetest.set_node(pos, {name = "air"});
|
||||||
if minetest.get_node(pos).name == daten[1] then
|
end
|
||||||
minetest.set_node(pos, {name = "air"});
|
else
|
||||||
|
minetest.add_node( pos, { name = daten[1], param1 = daten[2], param2 = daten[3] } );
|
||||||
end
|
end
|
||||||
else
|
elseif #areas:getNodeOwners(pos) > 0 or not missing_areas or player:get_player_name() == "nri" then
|
||||||
minetest.add_node( pos, { name = daten[1], param1 = daten[2], param2 = daten[3] } );
|
if delete then
|
||||||
end
|
if name.name == daten[1] then
|
||||||
elseif #areas:getNodeOwners(pos) > 0 or not missing_areas or player:get_player_name() == "nri" then
|
minetest.set_node(pos, {name = "air"});
|
||||||
if delete then
|
end
|
||||||
if minetest.get_node(pos).name == daten[1] then
|
elseif node.name == "air" then
|
||||||
minetest.set_node(pos, {name = "air"});
|
minetest.add_node( pos, { name = daten[1], param1 = daten[2], param2 = daten[3] } );
|
||||||
end
|
end
|
||||||
else
|
|
||||||
minetest.add_node( pos, { name = daten[1], param1 = daten[2], param2 = daten[3] } );
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -101,52 +94,6 @@ multiplacer.activate = function(itemstack, player, delete, pointed_thing, mode1,
|
||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
-- minetest.register_tool("multiplacer:angle_placer", {
|
|
||||||
-- description = "Placer Tool",
|
|
||||||
-- inventory_image = "multiplacer_angle_placer.png",
|
|
||||||
-- liquids_pointable = true,
|
|
||||||
-- tool_capabilities = {
|
|
||||||
-- full_punch_interval = 0.9,
|
|
||||||
-- max_drop_level = 0,
|
|
||||||
-- groupcaps = {
|
|
||||||
-- crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1},
|
|
||||||
-- snappy = {times={[3]=0.40}, uses=0, maxlevel=1},
|
|
||||||
-- oddly_breakable_by_hand = {times={[1]=7.00,[2]=4.00,[3]=1.40},
|
|
||||||
-- uses=0, maxlevel=3}
|
|
||||||
-- },
|
|
||||||
-- damage_groups = {fleshy=1},
|
|
||||||
-- },
|
|
||||||
-- on_use = function(itemstack, user, pointed_thing)
|
|
||||||
-- multiplacer.activate(itemstack, user, true, pointed_thing, above, false)
|
|
||||||
-- end,
|
|
||||||
-- on_place = function(itemstack, placer, pointed_thing)
|
|
||||||
-- local name = placer:get_player_name()
|
|
||||||
-- local keys = placer:get_player_control()
|
|
||||||
-- if not keys["sneak"] then
|
|
||||||
-- return multiplacer.activate(itemstack, placer, false, pointed_thing, 0, false)
|
|
||||||
-- end
|
|
||||||
|
|
||||||
-- -- credit to sokomine
|
|
||||||
-- if( pointed_thing.type ~= "node" ) then
|
|
||||||
-- minetest.chat_send_player( name, " Error: No node selected.");
|
|
||||||
-- return nil;
|
|
||||||
-- end
|
|
||||||
|
|
||||||
-- local pos = minetest.get_pointed_thing_position( pointed_thing, under );
|
|
||||||
-- local node = minetest.get_node_or_nil( pos );
|
|
||||||
|
|
||||||
-- local metadata = "default:dirt 0 0";
|
|
||||||
-- if( node ~= nil and node.name ) then
|
|
||||||
-- metadata = node.name..' '..node.param1..' '..node.param2;
|
|
||||||
-- end
|
|
||||||
-- itemstack:set_metadata( metadata );
|
|
||||||
|
|
||||||
-- minetest.chat_send_player( name, "Angle_placer tool set to: '"..metadata.."'.");
|
|
||||||
|
|
||||||
-- return itemstack; -- nothing consumed but data changed
|
|
||||||
-- end
|
|
||||||
-- })
|
|
||||||
|
|
||||||
minetest.register_privilege("multiplacer", {
|
minetest.register_privilege("multiplacer", {
|
||||||
description = "Can use the multiplacer tool",
|
description = "Can use the multiplacer tool",
|
||||||
give_to_single_player = true
|
give_to_single_player = true
|
||||||
|
@ -161,6 +108,7 @@ minetest.register_chatcommand("mp_max_blox", {
|
||||||
privs = {
|
privs = {
|
||||||
mp_max_blox = true
|
mp_max_blox = true
|
||||||
},
|
},
|
||||||
|
description = "Syntax: /mp_max_blox <number>: Command to change the maximum volume limit for the multiplacer tool."
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
local num = tonumber(param)
|
local num = tonumber(param)
|
||||||
if num ~= nil then
|
if num ~= nil then
|
||||||
|
@ -188,37 +136,16 @@ minetest.register_tool("multiplacer:axis_placer", {
|
||||||
multiplacer.activate(itemstack, user, true, pointed_thing, above, true, missing["areas"])
|
multiplacer.activate(itemstack, user, true, pointed_thing, above, true, missing["areas"])
|
||||||
end,
|
end,
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
|
|
||||||
local has, missing = minetest.check_player_privs(placer, {multiplacer = true, areas = true})
|
|
||||||
if not has then
|
|
||||||
if missing["multiplacer"] then
|
|
||||||
minetest.chat_send_player( player:get_player_name(), "Hey! You can't use this tool because you do not have the \"multiplacer\" privilege.");
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local name = placer:get_player_name()
|
|
||||||
local keys = placer:get_player_control()
|
local keys = placer:get_player_control()
|
||||||
if not keys["sneak"] then
|
if not keys["sneak"] then
|
||||||
return multiplacer.activate(itemstack, placer, false, pointed_thing, 0, true, missing["areas"])
|
return multiplacer.activate(itemstack, placer, false, pointed_thing, 0, true, missing["areas"])
|
||||||
end
|
end
|
||||||
|
|
||||||
-- credit to sokomine
|
|
||||||
if( pointed_thing.type ~= "node" ) then
|
|
||||||
minetest.chat_send_player( name, " Error: No node selected.");
|
|
||||||
return nil;
|
|
||||||
end
|
|
||||||
|
|
||||||
local pos = minetest.get_pointed_thing_position( pointed_thing, under );
|
|
||||||
local node = minetest.get_node_or_nil( pos );
|
|
||||||
|
|
||||||
local metadata = "default:dirt 0 0";
|
local metadata = "default:dirt 0 0";
|
||||||
if( node ~= nil and node.name ) then
|
if( node ~= nil and node.name ) then
|
||||||
metadata = node.name..' '..node.param1..' '..node.param2;
|
metadata = node.name..' '..node.param1..' '..node.param2;
|
||||||
end
|
end
|
||||||
itemstack:set_metadata( metadata );
|
itemstack:set_metadata( metadata );
|
||||||
|
|
||||||
minetest.chat_send_player( name, "Axis_placer tool set to: '"..metadata.."'.");
|
minetest.chat_send_player( name, "Axis_placer tool set to: '"..metadata.."'.");
|
||||||
|
return itemstack;
|
||||||
return itemstack; -- nothing consumed but data changed
|
|
||||||
end
|
end
|
||||||
})
|
})
|
Loading…
Reference in New Issue