summaryrefslogtreecommitdiff
path: root/railtrack/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'railtrack/init.lua')
-rw-r--r--railtrack/init.lua197
1 files changed, 197 insertions, 0 deletions
diff --git a/railtrack/init.lua b/railtrack/init.lua
new file mode 100644
index 0000000..373fcaa
--- /dev/null
+++ b/railtrack/init.lua
@@ -0,0 +1,197 @@
+local modpath = minetest.get_modpath(minetest.get_current_modname())
+
+dofile(modpath.."/railtrack.lua")
+
+railtrack:register_rail(":default:rail", {
+ description = "Rail",
+ tiles = {"default_rail.png", "default_rail_curved.png",
+ "default_rail_t_junction.png", "default_rail_crossing.png"},
+ railtype = "rail",
+})
+
+railtrack:register_rail("railtrack:superrail", {
+ description = "Superconducting Rail",
+ tiles = {"carts_rail_sup.png", "carts_rail_curved_sup.png",
+ "carts_rail_t_junction_sup.png", "carts_rail_crossing_sup.png"},
+ railtype = "superrail",
+ acceleration = 0,
+})
+
+railtrack:register_rail("railtrack:powerrail", {
+ description = "Powered Rail",
+ tiles = {"carts_rail_pwr.png", "carts_rail_curved_pwr.png",
+ "carts_rail_t_junction_pwr.png", "carts_rail_crossing_pwr.png"},
+ railtype = "powerrail",
+ acceleration = 4,
+ mesecons = {
+ effector = {
+ action_on = function(pos, node)
+ railtrack:set_acceleration(pos, 4)
+ end,
+ action_off = function(pos, node)
+ railtrack:set_acceleration(pos, RAILTRACK_FRICTION_FLAT)
+ end,
+ },
+ },
+})
+
+railtrack:register_rail("railtrack:brakerail", {
+ description = "Braking Rail",
+ tiles = {"carts_rail_brk.png", "carts_rail_curved_brk.png",
+ "carts_rail_t_junction_brk.png", "carts_rail_crossing_brk.png"},
+ railtype = "brakerail",
+ acceleration = -4,
+ mesecons = {
+ effector = {
+ action_on = function(pos, node)
+ railtrack:set_acceleration(pos, -4)
+ end,
+ action_off = function(pos, node)
+ railtrack:set_acceleration(pos, RAILTRACK_FRICTION_FLAT)
+ end,
+ },
+ },
+})
+
+railtrack:register_rail("railtrack:switchrail", {
+ description = "Switching Rail",
+ tiles = {"carts_rail_swt.png", "carts_rail_curved_swt.png",
+ "carts_rail_t_junction_swt.png", "carts_rail_crossing_swt.png"},
+ railtype = "switchrail",
+ acceleration = 0,
+ mesecons = {
+ effector = {
+ action_on = function(pos, node)
+ local meta = minetest.get_meta(pos)
+ meta:set_string("rotations", "RFLB")
+ end,
+ action_off = function(pos, node)
+ local meta = minetest.get_meta(pos)
+ meta:set_string("rotations", nil)
+ end,
+ },
+ },
+})
+
+minetest.register_privilege("rails", "Player can dig and place rails.")
+
+minetest.register_tool("railtrack:fixer", {
+ description = "Rail Fixer",
+ inventory_image = "railtrack_fixer.png",
+ wield_image = "railtrack_fixer.png",
+ on_use = function(itemstack, user, pointed_thing)
+ local pos = minetest.get_pointed_thing_position(pointed_thing, false)
+ local name = user:get_player_name()
+ if not pos or not name or pointed_thing.type ~= "node" then
+ return
+ end
+ if not railtrack:is_railnode(pos) then
+ minetest.chat_send_player(name, "Not a rail node!")
+ return
+ end
+ if not minetest.is_singleplayer() then
+ if not minetest.check_player_privs(name, {rails=true}) then
+ minetest.chat_send_player(name, "Requires rails privilege")
+ return
+ end
+ end
+ local node = minetest.get_node(pos)
+ minetest.remove_node(pos)
+ set_node(pos, node)
+ local def = minetest.registered_items[node.name] or {}
+ if type(def.after_place_node) == "function" then
+ def.after_place_node(pos, user, node)
+ end
+ end,
+})
+
+minetest.register_tool("railtrack:inspector", {
+ description = "Rail Inspector",
+ inventory_image = "railtrack_inspector.png",
+ wield_image = "railtrack_inspector.png",
+ on_use = function(itemstack, user, pointed_thing)
+ local name = user:get_player_name()
+ local pos = minetest.get_pointed_thing_position(pointed_thing, false)
+ if not name or not pos then
+ return
+ end
+ local node = minetest.get_node(pos) or {}
+ if not railtrack:is_railnode(pos) or not node.name then
+ minetest.chat_send_player(name, "Not a rail node!")
+ return
+ end
+ local ref = minetest.registered_items[node.name] or {}
+ local meta = minetest.get_meta(pos)
+ local form = ""
+ local size = 2.5
+ form = form.."label[0.5,0.5;POS: "..minetest.pos_to_string(pos).."]"
+ local railtype = ref.railtype or "NIL"
+ form = form.."label[0.5,1.0;RAILTYPE: "..railtype.."]"
+ local contype = meta:get_string("contype") or "NIL"
+ form = form.."label[0.5,1.5;CONTYPE: "..contype.."]"
+ local accel = meta:get_string("acceleration") or "NIL"
+ form = form.."label[0.5,2.0;ACCEL: "..accel.."]"
+ local s_junc = meta:get_string("junctions")
+ if s_junc then
+ local junctions = minetest.deserialize(s_junc)
+ if junctions then
+ form = form.."label[0.5,2.5;JUNCTIONS:]"
+ for i, p in ipairs(junctions) do
+ size = size + 0.5
+ form = form.."label[0.5,"..size..";#"..i.." "
+ ..minetest.pos_to_string(p).."]"
+ end
+ end
+ end
+ local s_cons = meta:get_string("connections")
+ if s_cons then
+ local cons = minetest.deserialize(s_cons)
+ if cons then
+ size = size + 0.5
+ form = form.."label[0.5,"..size..";CONNECTIONS:]"
+ for i, p in pairs(cons) do
+ size = size + 0.5
+ form = form.."label[0.5,"..size..";#"..i.." "
+ ..minetest.pos_to_string(p).."]"
+ end
+ end
+ end
+ local s_rots = meta:get_string("rotations")
+ if s_rots then
+ size = size + 0.5
+ form = form.."label[0.5,"..size..";ROTATIONS: "..s_rots.."]"
+ end
+ form = form.."button_exit[3.0,"..(size + 1)..";2,0.5;;Ok]"
+ form = "size[8,"..(size + 2).."]"..form
+ minetest.show_formspec(name, "info", form)
+ end,
+})
+
+minetest.register_craft({
+ output = "railtrack:powerrail 2",
+ recipe = {
+ {"default:rail", "default:mese_crystal_fragment", "default:rail"},
+ }
+})
+
+minetest.register_craft({
+ output = "railtrack:brakerail 2",
+ recipe = {
+ {"default:rail", "default:coal_lump", "default:rail"},
+ }
+})
+
+minetest.register_craft({
+ output = "railtrack:switchrail 2",
+ recipe = {
+ {"default:rail", "default:mese", "default:rail"},
+ }
+})
+
+minetest.register_craft({
+ output = "railtrack:superrail 2",
+ recipe = {
+ {"default:rail", "default:diamond", "default:rail"},
+ }
+})
+