summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--street_signs/init.lua147
-rw-r--r--street_signs/models/street_signs_basic_top_only.obj196
-rw-r--r--street_signs/models/street_signs_basic_top_only_entity.obj45
-rw-r--r--travelnet/init.lua25
4 files changed, 383 insertions, 30 deletions
diff --git a/street_signs/init.lua b/street_signs/init.lua
index b2237d9..e679d18 100644
--- a/street_signs/init.lua
+++ b/street_signs/init.lua
@@ -29,25 +29,6 @@ street_signs.modpath = minetest.get_modpath("street_signs")
local DEFAULT_TEXT_SCALE = {x=10, y=10}
-street_signs.standard_sign_model = {
- nodebox = {
- type = "fixed",
- fixed = {
- { -1/32, 23/16, -1/32, 1/32, 24/16, 1/32 },
- { -1/32, 18/16, -8/16, 1/32, 23/16, 8/16 },
- { -1/32, 17/16, -1/32, 1/32, 18/16, 1/32 },
- { -8/16, 12/16, -1/32, 8/16, 17/16, 1/32 },
- { -1/16, -8/16, -1/16, 1/16, 12/16, 1/16 },
- }
- },
- yaw = {
- 0,
- math.pi / -2,
- math.pi,
- math.pi / 2,
- }
-}
-
-- infinite stacks
if not minetest.settings:get_bool("creative_mode") then
@@ -386,10 +367,13 @@ street_signs.update_sign = function(pos, fields)
-- if there is no entity
local signnode = minetest.get_node(pos)
local signname = signnode.name
- local text = minetest.add_entity(pos, "street_signs:text")
- local yaw = street_signs.standard_sign_model.yaw[minetest.get_node(pos).param2 + 1]
- if not yaw then return end
- text:setyaw(yaw)
+ local def = minetest.registered_items[signname]
+ local obj = minetest.add_entity(pos, "street_signs:text")
+ if not def.entity_info then return end
+ obj:setyaw(def.entity_info.yaw[signnode.param2 + 1])
+ obj:set_properties({
+ mesh = def.entity_info.mesh,
+ })
end
function street_signs.receive_fields(pos, formname, fields, sender)
@@ -408,14 +392,25 @@ function street_signs.receive_fields(pos, formname, fields, sender)
end
end
+local cbox = {
+ type = "fixed",
+ fixed = {
+ { -1/32, 23/16, -1/32, 1/32, 24/16, 1/32 },
+ { -1/32, 18/16, -8/16, 1/32, 23/16, 8/16 },
+ { -1/32, 17/16, -1/32, 1/32, 18/16, 1/32 },
+ { -8/16, 12/16, -1/32, 8/16, 17/16, 1/32 },
+ { -1/16, -8/16, -1/16, 1/16, 12/16, 1/16 },
+ }
+}
+
minetest.register_node("street_signs:sign_basic", {
description = "Basic street name sign",
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
drawtype = "mesh",
- node_box = street_signs.standard_sign_model.nodebox,
- selection_box = street_signs.standard_sign_model.nodebox,
+ node_box = cbox,
+ selection_box = cbox,
mesh = "street_signs_basic.obj",
tiles = { "street_signs_basic.png" },
groups = {choppy=2, dig_immediate=2},
@@ -432,6 +427,62 @@ minetest.register_node("street_signs:sign_basic", {
on_punch = function(pos, node, puncher)
street_signs.update_sign(pos)
end,
+ entity_info = {
+ mesh = "street_signs_basic_entity.obj",
+ yaw = {
+ 0,
+ math.pi / -2,
+ math.pi,
+ math.pi / 2,
+ }
+ }
+})
+
+cbox = {
+ type = "fixed",
+ fixed = {
+ { -1/32, 7/16, -1/32, 1/32, 8/16, 1/32 },
+ { -1/32, 2/16, -8/16, 1/32, 7/16, 8/16 },
+ { -1/32, 1/16, -1/32, 1/32, 2/16, 1/32 },
+ { -8/16, -4/16, -1/32, 8/16, 1/16, 1/32 },
+ { -1/16, -8/16, -1/16, 1/16, -4/16, 1/16 },
+
+ }
+}
+
+minetest.register_node("street_signs:sign_basic_top_only", {
+ description = "Basic street name sign, top only",
+ paramtype = "light",
+ sunlight_propagates = true,
+ paramtype2 = "facedir",
+ drawtype = "mesh",
+ node_box = cbox,
+ selection_box = cbox,
+ mesh = "street_signs_basic_top_only.obj",
+ tiles = { "street_signs_basic.png" },
+ groups = {choppy=2, dig_immediate=2},
+ default_color = "f",
+ on_construct = function(pos)
+ street_signs.construct_sign(pos)
+ end,
+ on_destruct = function(pos)
+ street_signs.destruct_sign(pos)
+ end,
+ on_receive_fields = function(pos, formname, fields, sender)
+ street_signs.receive_fields(pos, formname, fields, sender)
+ end,
+ on_punch = function(pos, node, puncher)
+ street_signs.update_sign(pos)
+ end,
+ entity_info = {
+ mesh = "street_signs_basic_top_only_entity.obj",
+ yaw = {
+ 0,
+ math.pi / -2,
+ math.pi,
+ math.pi / 2,
+ }
+ }
})
local signs_text_on_activate
@@ -439,10 +490,16 @@ local signs_text_on_activate
signs_text_on_activate = function(self)
local pos = self.object:getpos()
local meta = minetest.get_meta(pos)
+ local signnode = minetest.get_node(pos)
+ local signname = signnode.name
+ local def = minetest.registered_items[signname]
local text = meta:get_string("text")
- if text and minetest.registered_nodes[minetest.get_node(pos).name] then
+ if text and def and def.entity_info then
text = trim_input(text)
set_obj_text(self.object, text, nil, pos)
+ self.object:set_properties({
+ mesh = def.entity_info.mesh,
+ })
end
end
@@ -487,6 +544,44 @@ if minetest.get_modpath("signs_lib") then
})
end
+
+minetest.register_craft({
+ output = "street_signs:sign_basic_top_only",
+ recipe = {
+ { "dye:green", "default:sign_wall_steel", "dye:green" },
+ { "dye:white", "default:steel_ingot", "" },
+
+ }
+})
+
+minetest.register_craft({
+ output = "street_signs:sign_basic_top_only",
+ recipe = {
+ { "dye:green", "default:sign_wall_steel", "dye:green" },
+ { "", "default:steel_ingot", "dye:white" },
+ }
+})
+
+if minetest.get_modpath("signs_lib") then
+ minetest.register_craft({
+ output = "street_signs:sign_basic_top_only",
+ recipe = {
+ { "signs:sign_wall_green" },
+ { "default:steel_ingot" },
+ }
+ })
+end
+
+minetest.register_craft({
+ output = "street_signs:sign_basic",
+ recipe = {
+ { "street_signs:sign_basic_top_only" },
+ { "default:steel_ingot" }
+ }
+})
+
+
+
-- restore signs' text after /clearobjects and the like, the next time
-- a block is reloaded by the server.
diff --git a/street_signs/models/street_signs_basic_top_only.obj b/street_signs/models/street_signs_basic_top_only.obj
new file mode 100644
index 0000000..73db1ba
--- /dev/null
+++ b/street_signs/models/street_signs_basic_top_only.obj
@@ -0,0 +1,196 @@
+# Blender v2.79 (sub 0) OBJ File: 'street signs basic.blend'
+# www.blender.org
+o Cube
+v 0.062500 -0.250000 -0.062500
+v 0.062500 -0.250000 0.062500
+v -0.062500 -0.250000 -0.062500
+v -0.062500 -0.250000 0.062500
+v 0.031250 0.437500 -0.500000
+v 0.031250 0.437500 0.500000
+v -0.031250 0.437500 -0.500000
+v -0.031250 0.437500 0.500000
+v 0.031250 0.125000 -0.500000
+v 0.031250 0.125000 0.500000
+v -0.031250 0.125000 0.500000
+v -0.031250 0.125000 -0.500000
+v 0.500000 0.062500 -0.031250
+v 0.500000 0.062500 0.031250
+v -0.500000 0.062500 0.031250
+v -0.500000 0.062500 -0.031250
+v 0.500000 -0.250000 -0.031250
+v 0.500000 -0.250000 0.031250
+v -0.500000 -0.250000 0.031250
+v -0.500000 -0.250000 -0.031250
+v 0.031250 0.062500 -0.031250
+v 0.031250 0.062500 0.031250
+v -0.031250 0.062500 -0.031250
+v -0.031250 0.062500 0.031250
+v 0.031250 0.125000 -0.031250
+v 0.031250 0.125000 0.031250
+v -0.031250 0.125000 0.031250
+v -0.031250 0.125000 -0.031250
+v 0.031250 0.437500 -0.031250
+v 0.031250 0.437500 0.031250
+v -0.031250 0.437500 -0.031250
+v -0.031250 0.437500 0.031250
+v 0.031250 0.500000 -0.031250
+v 0.031250 0.500000 0.031250
+v -0.031250 0.500000 0.031250
+v -0.031250 0.500000 -0.031250
+v -0.062500 -0.500000 0.062500
+v 0.062500 -0.500000 0.062500
+v -0.062500 -0.500000 -0.062500
+v 0.062500 -0.500000 -0.062500
+vt 0.281250 0.593750
+vt 0.156250 0.593750
+vt 0.156250 0.531250
+vt 0.281250 0.531250
+vt 0.781250 0.093750
+vt 0.718750 0.093750
+vt 0.718750 0.593750
+vt 0.781250 0.593750
+vt 0.781250 0.093750
+vt 0.781250 0.593750
+vt 0.718750 0.593750
+vt 0.718750 0.093750
+vt 1.000000 0.968750
+vt 1.000000 0.812500
+vt 0.000000 0.812500
+vt 0.000000 0.968750
+vt 0.000000 0.968750
+vt 0.000000 0.812500
+vt 1.000000 0.812500
+vt 1.000000 0.968750
+vt 0.968750 0.593750
+vt 0.968750 0.437500
+vt 0.906250 0.437500
+vt 0.906250 0.593750
+vt 0.906250 0.593750
+vt 0.906250 0.437500
+vt 0.968750 0.437500
+vt 0.968750 0.593750
+vt 0.718750 0.093750
+vt 0.718750 0.593750
+vt 0.781250 0.593750
+vt 0.781250 0.093750
+vt 0.718750 0.093750
+vt 0.781250 0.093750
+vt 0.781250 0.593750
+vt 0.718750 0.593750
+vt 1.000000 0.781250
+vt 1.000000 0.625000
+vt 0.000000 0.625000
+vt 0.000000 0.781250
+vt 0.000000 0.781250
+vt 0.000000 0.625000
+vt 1.000000 0.625000
+vt 1.000000 0.781250
+vt 0.968750 0.593750
+vt 0.968750 0.437500
+vt 0.906250 0.437500
+vt 0.906250 0.593750
+vt 0.906250 0.593750
+vt 0.906250 0.437500
+vt 0.968750 0.437500
+vt 0.968750 0.593750
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.531250 0.781250
+vt 0.468750 0.781250
+vt 0.468750 0.812500
+vt 0.531250 0.812500
+vt 0.468750 0.781250
+vt 0.531250 0.781250
+vt 0.531250 0.812500
+vt 0.468750 0.812500
+vt 0.468750 0.781250
+vt 0.468750 0.812500
+vt 0.531250 0.781250
+vt 0.531250 0.812500
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.218750 0.468750
+vt 0.156250 0.468750
+vt 0.156250 0.437500
+vt 0.218750 0.437500
+vt 0.531250 0.968750
+vt 0.468750 0.968750
+vt 0.468750 1.000000
+vt 0.531250 1.000000
+vt 0.468750 0.968750
+vt 0.531250 0.968750
+vt 0.531250 1.000000
+vt 0.468750 1.000000
+vt 0.531250 0.968750
+vt 0.468750 0.968750
+vt 0.468750 1.000000
+vt 0.468750 0.968750
+vt 0.531250 0.968750
+vt 0.531250 1.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.562500 0.500000
+vt 0.437500 0.500000
+vt 0.437500 0.625000
+vt 0.562500 0.625000
+vt 0.437500 0.500000
+vt 0.562500 0.500000
+vt 0.562500 0.625000
+vt 0.437500 0.625000
+vt 0.562500 0.500000
+vt 0.562500 0.625000
+vt 0.437500 0.500000
+vt 0.437500 0.625000
+vn 0.0000 1.0000 0.0000
+vn 0.0000 -1.0000 0.0000
+vn -1.0000 0.0000 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 0.0000 -1.0000
+vn 0.0000 0.0000 1.0000
+g Cube_Cube_top
+s off
+f 4/1/1 2/2/1 1/3/1 3/4/1
+f 8/5/1 6/6/1 5/7/1 7/8/1
+f 11/9/2 12/10/2 9/11/2 10/12/2
+f 7/13/3 12/14/3 11/15/3 8/16/3
+f 6/17/4 10/18/4 9/19/4 5/20/4
+f 5/21/5 9/22/5 12/23/5 7/24/5
+f 8/25/6 11/26/6 10/27/6 6/28/6
+f 15/29/1 14/30/1 13/31/1 16/32/1
+f 19/33/2 20/34/2 17/35/2 18/36/2
+f 13/37/5 17/38/5 20/39/5 16/40/5
+f 15/41/6 19/42/6 18/43/6 14/44/6
+f 16/45/3 20/46/3 19/47/3 15/48/3
+f 14/49/4 18/50/4 17/51/4 13/52/4
+f 24/53/2 23/54/2 21/55/2 22/56/2
+f 27/57/1 26/58/1 25/59/1 28/60/1
+f 23/61/3 24/62/3 27/63/3 28/64/3
+f 22/65/4 21/66/4 25/67/4 26/68/4
+f 21/66/5 23/69/5 28/70/5 25/67/5
+f 24/62/6 22/71/6 26/72/6 27/63/6
+f 32/73/2 31/74/2 29/75/2 30/76/2
+f 35/77/1 34/78/1 33/79/1 36/80/1
+f 31/81/3 32/82/3 35/83/3 36/84/3
+f 30/85/4 29/86/4 33/87/4 34/88/4
+f 29/89/5 31/90/5 36/91/5 33/87/5
+f 32/92/6 30/93/6 34/94/6 35/83/6
+g Cube_Cube_top_NONE
+f 37/95/2 39/96/2 40/97/2 38/98/2
+g Cube_Cube_right
+f 39/99/3 37/100/3 4/101/3 3/102/3
+g Cube_Cube_left
+f 38/103/4 40/104/4 1/105/4 2/106/4
+g Cube_Cube_back
+f 37/100/6 38/107/6 2/108/6 4/101/6
+g Cube_Cube_front
+f 40/104/5 39/109/5 3/110/5 1/105/5
diff --git a/street_signs/models/street_signs_basic_top_only_entity.obj b/street_signs/models/street_signs_basic_top_only_entity.obj
new file mode 100644
index 0000000..522676e
--- /dev/null
+++ b/street_signs/models/street_signs_basic_top_only_entity.obj
@@ -0,0 +1,45 @@
+# Blender v2.79 (sub 0) OBJ File: 'street signs entity.blend'
+# www.blender.org
+o Cube
+v 0.039063 0.437500 -0.500000
+v 0.039063 0.437500 0.500000
+v -0.039063 0.437500 -0.500000
+v -0.039063 0.437500 0.500000
+v 0.039063 0.125000 -0.500000
+v 0.039063 0.125000 0.500000
+v -0.039063 0.125000 0.500000
+v -0.039063 0.125000 -0.500000
+v 0.500000 0.062500 -0.039063
+v 0.500000 0.062500 0.039063
+v -0.500000 0.062500 0.039063
+v -0.500000 0.062500 -0.039063
+v 0.500000 -0.250000 -0.039063
+v 0.500000 -0.250000 0.039063
+v -0.500000 -0.250000 0.039063
+v -0.500000 -0.250000 -0.039063
+vt 0.000000 1.000000
+vt 0.000000 0.750000
+vt 1.000000 0.750000
+vt 1.000000 1.000000
+vt -0.000000 0.750000
+vt -0.000000 0.500000
+vt 1.000000 0.500000
+vt 1.000000 0.750000
+vt 0.000000 0.500000
+vt 0.000000 0.250000
+vt 1.000000 0.250000
+vt 1.000000 0.500000
+vt -0.000000 0.250000
+vt -0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 0.250000
+vn -1.0000 0.0000 0.0000
+vn 1.0000 0.0000 0.0000
+vn 0.0000 0.0000 -1.0000
+vn 0.0000 0.0000 1.0000
+g Cube_Cube_top
+s off
+f 3/1/1 8/2/1 7/3/1 4/4/1
+f 2/5/2 6/6/2 5/7/2 1/8/2
+f 9/9/3 13/10/3 16/11/3 12/12/3
+f 11/13/4 15/14/4 14/15/4 10/16/4
diff --git a/travelnet/init.lua b/travelnet/init.lua
index 5be6cac..c72238a 100644
--- a/travelnet/init.lua
+++ b/travelnet/init.lua
@@ -22,8 +22,11 @@
Please configure this mod in config.lua
Changelog:
+ 22.09.18 - If in creative mode, wield a diamond pick to dig the station. This avoids
+ conflicts with too fast punches.
24.12.17 - Added support for localization through intllib.
Added localization for German (de).
+ Door opening/closing can now handle more general doors.
17.07.17 - Added more detailled licence information.
TNT and DungeonMasters ought to leave travelnets and elevators untouched now.
Added function to register elevator doors.
@@ -137,6 +140,13 @@ travelnet.check_if_trying_to_dig = function( puncher, node )
if( not( puncher) or not( puncher:get_wielded_item())) then
return false;
end
+ -- show menu when in creative mode
+ if( creative
+ and creative.is_enabled_for(puncher:get_player_name())
+ and (not(puncher:get_wielded_item())
+ or puncher:get_wielded_item():get_name()~="default:pick_diamond")) then
+ return false;
+ end
local tool_capabilities = puncher:get_wielded_item():get_tool_capabilities();
if( not( tool_capabilities )
or not( tool_capabilities["groupcaps"])
@@ -593,8 +603,7 @@ travelnet.open_close_door = function( pos, player, mode )
-- at least for homedecor, same facedir would mean "door closed"
-- do not close the elevator door if it is already closed
- if( mode==1 and ( door_node.name == 'travelnet:elevator_door_glass_closed'
- or door_node.name == 'travelnet:elevator_door_steel_closed'
+ if( mode==1 and ( string.sub( door_node.name, -7 ) == '_closed'
-- handle doors that change their facedir
or ( door_node.param2 == this_node.param2
and door_node.name ~= 'travelnet:elevator_door_glass_open'
@@ -602,8 +611,7 @@ travelnet.open_close_door = function( pos, player, mode )
return;
end
-- do not open the doors if they are already open (works only on elevator-doors; not on doors in general)
- if( mode==2 and ( door_node.name == 'travelnet:elevator_door_glass_open'
- or door_node.name == 'travelnet:elevator_door_steel_open'
+ if( mode==2 and ( string.sub( door_node.name, -5 ) == '_open'
-- handle doors that change their facedir
or ( door_node.param2 ~= this_node.param2
and door_node.name ~= 'travelnet:elevator_door_glass_closed'
@@ -846,6 +854,15 @@ travelnet.can_dig = function( pos, player, description )
local owner = meta:get_string('owner');
local network_name = meta:get_string( "station_network" );
+ -- in creative mode, accidental digging could happen too easily when trying to update the net
+ if(creative and creative.is_enabled_for(player:get_player_name())) then
+ -- only a diamond pick can dig the travelnet
+ if( not(player:get_wielded_item())
+ or player:get_wielded_item():get_name()~="default:pick_diamond") then
+ return false;
+ end
+ end
+
-- players with that priv can dig regardless of owner
if( minetest.check_player_privs(name, {travelnet_remove=true})
or travelnet.allow_dig( name, owner, network_name )) then