From 19e2dc58eb345288f8198a4bec18f5fbd83654db Mon Sep 17 00:00:00 2001 From: teknomunk Date: Sun, 31 Mar 2024 10:41:00 +0000 Subject: [PATCH] Update all rail types to new version --- mods/ENTITIES/mcl_minecarts/rails.lua | 343 +++++++++++++------------- 1 file changed, 172 insertions(+), 171 deletions(-) diff --git a/mods/ENTITIES/mcl_minecarts/rails.lua b/mods/ENTITIES/mcl_minecarts/rails.lua index cc84390eb..e4770f39b 100644 --- a/mods/ENTITIES/mcl_minecarts/rails.lua +++ b/mods/ENTITIES/mcl_minecarts/rails.lua @@ -201,6 +201,25 @@ local BASE_DEF = { update_rail_connections(pos, true) end, } +local function register_straight_rail(base_name, tiles, def) + def = def or {} + local base_def = table.copy(BASE_DEF) + table_merge(base_def,{ + _mcl_minecarts = { base_name = base_name }, + drop = base_name, + }) + table_merge(base_def, def) + + -- Register the base node + mod.register_rail(base_name, table_merge(table.copy(base_def),{ + tiles = { tiles[1] }, + _mcl_minecarts = { + get_next_dir = rail_dir_straight + } + })) + BASE_DEF.craft = nil +end +mod.register_straight_rail = register_straight_rail local function register_curves_rail(base_name, tiles, def) def = def or {} local base_def = table.copy(BASE_DEF) @@ -303,9 +322,6 @@ local function register_rail_sloped(itemstring, def) end mod.register_rail_sloped = register_rail_sloped --- Register rails -dofile(modpath.."/rails/standard.lua") - -- Redstone rules local rail_rules_long = {{x=-1, y= 0, z= 0, spread=true}, @@ -327,15 +343,6 @@ local rail_rules_long = local rail_rules_short = mesecon.rules.pplate -- Normal rail -register_rail("mcl_minecarts:rail", - {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"}, - { - description = S("Rail"), - _tt_help = S("Track for minecarts"), - _doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction."), - _doc_items_usagehelp = railuse, - } -) mod.register_curves_rail("mcl_minecarts:rail_v2", { "default_rail.png", "default_rail_curved.png", @@ -343,6 +350,10 @@ mod.register_curves_rail("mcl_minecarts:rail_v2", { "default_rail_t_junction_on.png", "default_rail_crossing.png" },{ + description = S("Rail"), + _tt_help = S("Track for minecarts"), + _doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction."), + _doc_items_usagehelp = railuse, craft = { output = "mcl_minecarts:rail_v2 16", recipe = { @@ -352,188 +363,178 @@ mod.register_curves_rail("mcl_minecarts:rail_v2", { } }, }) - +register_rail("mcl_minecarts:rail", {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"}, {}, false ) -- deprecated -- Powered rail (off = brake mode) -register_rail("mcl_minecarts:golden_rail", - {"mcl_minecarts_rail_golden.png", "mcl_minecarts_rail_golden_curved.png", "mcl_minecarts_rail_golden_t_junction.png", "mcl_minecarts_rail_golden_crossing.png"}, - { - description = S("Powered Rail"), - _tt_help = S("Track for minecarts").."\n"..S("Speed up when powered, slow down when not powered"), - _doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts."), - _doc_items_usagehelp = railuse .. "\n" .. S("Without redstone power, the rail will brake minecarts. To make this rail accelerate".. - " minecarts, power it with redstone power."), - _rail_acceleration = -3, - mesecons = { - conductor = { - state = mesecon.state.off, - offstate = "mcl_minecarts:golden_rail", - onstate = "mcl_minecarts:golden_rail_on", - rules = rail_rules_long, - }, +mod.register_straight_rail("mcl_minecarts:golden_rail_v2",{ "mcl_minecarts_rail_golden.png" },{ + description = S("Powered Rail"), + _tt_help = S("Track for minecarts").."\n"..S("Speed up when powered, slow down when not powered"), + _doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts."), + _doc_items_usagehelp = railuse .. "\n" .. S("Without redstone power, the rail will brake minecarts. To make this rail accelerate".. + " minecarts, power it with redstone power."), + _doc_items_create_entry = false, + _rail_acceleration = -3, + _max_acceleration_velocity = 8, + mesecons = { + conductor = { + state = mesecon.state.off, + offstate = "mcl_minecarts:golden_rail_v2", + onstate = "mcl_minecarts:golden_rail_v2_on", + rules = rail_rules_long, }, + }, + drop = "mcl_minecarts:golden_rail_v2", + craft = { + output = "mcl_minecarts:golden_rail_v2 6", + recipe = { + {"mcl_core:gold_ingot", "", "mcl_core:gold_ingot"}, + {"mcl_core:gold_ingot", "mcl_core:stick", "mcl_core:gold_ingot"}, + {"mcl_core:gold_ingot", "mesecons:redstone", "mcl_core:gold_ingot"}, + } } -) +}) +register_rail("mcl_minecarts:golden_rail", {"mcl_minecarts_rail_golden.png", "mcl_minecarts_rail_golden_curved.png", "mcl_minecarts_rail_golden_t_junction.png", "mcl_minecarts_rail_golden_crossing.png"}, {}, false ) -- deprecated -- Powered rail (on = acceleration mode) -register_rail("mcl_minecarts:golden_rail_on", - {"mcl_minecarts_rail_golden_powered.png", "mcl_minecarts_rail_golden_curved_powered.png", "mcl_minecarts_rail_golden_t_junction_powered.png", "mcl_minecarts_rail_golden_crossing_powered.png"}, - { - _doc_items_create_entry = false, - _rail_acceleration = 4, - _max_acceleration_velocity = 8, - mesecons = { - conductor = { - state = mesecon.state.on, - offstate = "mcl_minecarts:golden_rail", - onstate = "mcl_minecarts:golden_rail_on", - rules = rail_rules_long, - }, - }, - drop = "mcl_minecarts:golden_rail", +mod.register_straight_rail("mcl_minecarts:golden_rail_v2_on",{ "mcl_minecarts_rail_golden_powered.png" },{ + _doc_items_create_entry = false, + _rail_acceleration = 4, + _max_acceleration_velocity = 8, + groups = { + not_in_creative_inventory = 1, }, - false -) + mesecons = { + conductor = { + state = mesecon.state.on, + offstate = "mcl_minecarts:golden_rail_v2", + onstate = "mcl_minecarts:golden_rail_v2_on", + rules = rail_rules_long, + }, + }, + drop = "mcl_minecarts:golden_rail_v2", +}) +register_rail("mcl_minecarts:golden_rail_on", {"mcl_minecarts_rail_golden_powered.png", "mcl_minecarts_rail_golden_curved_powered.png", "mcl_minecarts_rail_golden_t_junction_powered.png", "mcl_minecarts_rail_golden_crossing_powered.png"}, { }, false ) -- deprecated -- Activator rail (off) -register_rail("mcl_minecarts:activator_rail", - {"mcl_minecarts_rail_activator.png", "mcl_minecarts_rail_activator_curved.png", "mcl_minecarts_rail_activator_t_junction.png", "mcl_minecarts_rail_activator_crossing.png"}, - { - description = S("Activator Rail"), - _tt_help = S("Track for minecarts").."\n"..S("Activates minecarts when powered"), - _doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts."), - _doc_items_usagehelp = railuse .. "\n" .. S("To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail."), - mesecons = { - conductor = { - state = mesecon.state.off, - offstate = "mcl_minecarts:activator_rail", - onstate = "mcl_minecarts:activator_rail_on", - rules = rail_rules_long, - - }, +mod.register_straight_rail("mcl_minecarts:activator_rail_v2", {"mcl_minecarts_rail_activator.png"},{ + description = S("Activator Rail"), + _tt_help = S("Track for minecarts").."\n"..S("Activates minecarts when powered"), + _doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts."), + _doc_items_usagehelp = railuse .. "\n" .. S("To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail."), + mesecons = { + conductor = { + state = mesecon.state.off, + offstate = "mcl_minecarts:activator_rail_v2", + onstate = "mcl_minecarts:activator_rail_v2_on", + rules = rail_rules_long, }, - } -) + }, + craft = { + output = "mcl_minecarts:activator_rail_v2 6", + recipe = { + {"mcl_core:iron_ingot", "mcl_core:stick", "mcl_core:iron_ingot"}, + {"mcl_core:iron_ingot", "mesecons_torch:mesecon_torch_on", "mcl_core:iron_ingot"}, + {"mcl_core:iron_ingot", "mcl_core:stick", "mcl_core:iron_ingot"}, + } + }, +}) +register_rail("mcl_minecarts:activator_rail", {"mcl_minecarts_rail_activator.png", "mcl_minecarts_rail_activator_curved.png", "mcl_minecarts_rail_activator_t_junction.png", "mcl_minecarts_rail_activator_crossing.png"}, {} ) -- deprecated -- Activator rail (on) -register_rail("mcl_minecarts:activator_rail_on", - {"mcl_minecarts_rail_activator_powered.png", "mcl_minecarts_rail_activator_curved_powered.png", "mcl_minecarts_rail_activator_t_junction_powered.png", "mcl_minecarts_rail_activator_crossing_powered.png"}, - { - _doc_items_create_entry = false, - mesecons = { - conductor = { - state = mesecon.state.on, - offstate = "mcl_minecarts:activator_rail", - onstate = "mcl_minecarts:activator_rail_on", - rules = rail_rules_long, - }, - effector = { - -- Activate minecarts - action_on = function(pos, node) - local pos2 = { x = pos.x, y =pos.y + 1, z = pos.z } - local objs = minetest.get_objects_inside_radius(pos2, 1) - for _, o in pairs(objs) do - local l = o:get_luaentity() - if l and string.sub(l.name, 1, 14) == "mcl_minecarts:" and l.on_activate_by_rail then - l:on_activate_by_rail() - end - end - end, - }, - - }, - _mcl_minecarts_on_enter = function(pos, cart) - if cart.on_activate_by_rail then - cart:on_activate_by_rail() - end - end, - drop = "mcl_minecarts:activator_rail", +mod.register_straight_rail("mcl_minecarts:activator_rail_v2_on", {"mcl_minecarts_rail_activator_powered.png"},{ + _doc_items_create_entry = false, + groups = { + not_in_creative_inventory = 1, }, - false -) + mesecons = { + conductor = { + state = mesecon.state.on, + offstate = "mcl_minecarts:activator_rail_v2", + onstate = "mcl_minecarts:activator_rail_v2_on", + rules = rail_rules_long, + }, + effector = { + -- Activate minecarts + action_on = function(pos, node) + local pos2 = { x = pos.x, y =pos.y + 1, z = pos.z } + local objs = minetest.get_objects_inside_radius(pos2, 1) + for _, o in pairs(objs) do + local l = o:get_luaentity() + if l and string.sub(l.name, 1, 14) == "mcl_minecarts:" and l.on_activate_by_rail then + l:on_activate_by_rail() + end + end + end, + }, + + }, + _mcl_minecarts_on_enter = function(pos, cart) + if cart.on_activate_by_rail then + cart:on_activate_by_rail() + end + end, + drop = "mcl_minecarts:activator_rail_v2", +}) +register_rail("mcl_minecarts:activator_rail_on", {"mcl_minecarts_rail_activator_powered.png", "mcl_minecarts_rail_activator_curved_powered.png", "mcl_minecarts_rail_activator_t_junction_powered.png", "mcl_minecarts_rail_activator_crossing_powered.png"}, { }, false ) -- deprecated -- Detector rail (off) -register_rail("mcl_minecarts:detector_rail", - {"mcl_minecarts_rail_detector.png", "mcl_minecarts_rail_detector_curved.png", "mcl_minecarts_rail_detector_t_junction.png", "mcl_minecarts_rail_detector_crossing.png"}, - { - description = S("Detector Rail"), - _tt_help = S("Track for minecarts").."\n"..S("Emits redstone power when a minecart is detected"), - _doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. A detector rail is able to detect a minecart above it and powers redstone mechanisms."), - _doc_items_usagehelp = railuse .. "\n" .. S("To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail."), - mesecons = { - receptor = { - state = mesecon.state.off, - rules = rail_rules_short, - }, +mod.register_straight_rail("mcl_minecarts:detector_rail_v2",{"mcl_minecarts_rail_detector.png"},{ + description = S("Detector Rail"), + _tt_help = S("Track for minecarts").."\n"..S("Emits redstone power when a minecart is detected"), + _doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. A detector rail is able to detect a minecart above it and powers redstone mechanisms."), + _doc_items_usagehelp = railuse .. "\n" .. S("To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail."), + mesecons = { + receptor = { + state = mesecon.state.off, + rules = rail_rules_short, }, - _mcl_minecarts_on_enter = function(pos, cart) - local node = minetest.get_node(pos) + }, + _mcl_minecarts_on_enter = function(pos, cart) + local node = minetest.get_node(pos) - local newnode = { - name = "mcl_minecarts:detector_rail_on", - param2 = node.param2 - } - minetest.swap_node( pos, newnode ) - mesecon.receptor_on(pos) - end, + local newnode = { + name = "mcl_minecarts:detector_rail_v2_on", + param2 = node.param2 + } + minetest.swap_node( pos, newnode ) + mesecon.receptor_on(pos) + end, + craft = { + output = "mcl_minecarts:detector_rail_v2 6", + recipe = { + {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"}, + {"mcl_core:iron_ingot", "mesecons_pressureplates:pressure_plate_stone_off", "mcl_core:iron_ingot"}, + {"mcl_core:iron_ingot", "mesecons:redstone", "mcl_core:iron_ingot"}, + } } -) +}) +register_rail("mcl_minecarts:detector_rail", {"mcl_minecarts_rail_detector.png", "mcl_minecarts_rail_detector_curved.png", "mcl_minecarts_rail_detector_t_junction.png", "mcl_minecarts_rail_detector_crossing.png"}, {} ) -- deprecated -- Detector rail (on) -register_rail("mcl_minecarts:detector_rail_on", - {"mcl_minecarts_rail_detector_powered.png", "mcl_minecarts_rail_detector_curved_powered.png", "mcl_minecarts_rail_detector_t_junction_powered.png", "mcl_minecarts_rail_detector_crossing_powered.png"}, - { - _doc_items_create_entry = false, - mesecons = { - receptor = { - state = mesecon.state.on, - rules = rail_rules_short, - }, - }, - _mcl_minecarts_on_leave = function(pos, cart) - local node = minetest.get_node(pos) - - local newnode = { - name = "mcl_minecarts:detector_rail", - param2 = node.param2 - } - minetest.swap_node( pos, newnode ) - mesecon.receptor_off(pos) - end, - drop = "mcl_minecarts:detector_rail", +mod.register_straight_rail("mcl_minecarts:detector_rail_v2_on",{"mcl_minecarts_rail_detector_powered.png"},{ + groups = { + not_in_creative_inventory = 1, }, - false -) + _doc_items_create_entry = false, + mesecons = { + receptor = { + state = mesecon.state.on, + rules = rail_rules_short, + }, + }, + _mcl_minecarts_on_leave = function(pos, cart) + local node = minetest.get_node(pos) - --- Crafting -minetest.register_craft({ - output = "mcl_minecarts:golden_rail 6", - recipe = { - {"mcl_core:gold_ingot", "", "mcl_core:gold_ingot"}, - {"mcl_core:gold_ingot", "mcl_core:stick", "mcl_core:gold_ingot"}, - {"mcl_core:gold_ingot", "mesecons:redstone", "mcl_core:gold_ingot"}, - } + local newnode = { + name = "mcl_minecarts:detector_rail", + param2 = node.param2 + } + minetest.swap_node( pos, newnode ) + mesecon.receptor_off(pos) + end, + drop = "mcl_minecarts:detector_rail_v2", }) - -minetest.register_craft({ - output = "mcl_minecarts:activator_rail 6", - recipe = { - {"mcl_core:iron_ingot", "mcl_core:stick", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mesecons_torch:mesecon_torch_on", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mcl_core:stick", "mcl_core:iron_ingot"}, - } -}) - -minetest.register_craft({ - output = "mcl_minecarts:detector_rail 6", - recipe = { - {"mcl_core:iron_ingot", "", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mesecons_pressureplates:pressure_plate_stone_off", "mcl_core:iron_ingot"}, - {"mcl_core:iron_ingot", "mesecons:redstone", "mcl_core:iron_ingot"}, - } -}) - +register_rail("mcl_minecarts:detector_rail_on", {"mcl_minecarts_rail_detector_powered.png", "mcl_minecarts_rail_detector_curved_powered.png", "mcl_minecarts_rail_detector_t_junction_powered.png", "mcl_minecarts_rail_detector_crossing_powered.png"}, { }, false ) -- deprecated -- Aliases if minetest.get_modpath("doc") then