Update all rail types to new version

This commit is contained in:
teknomunk 2024-03-31 10:41:00 +00:00
parent 8773e515d6
commit f18bd9b8e7
1 changed files with 172 additions and 171 deletions

View File

@ -201,6 +201,25 @@ local BASE_DEF = {
update_rail_connections(pos, true) update_rail_connections(pos, true)
end, 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) local function register_curves_rail(base_name, tiles, def)
def = def or {} def = def or {}
local base_def = table.copy(BASE_DEF) local base_def = table.copy(BASE_DEF)
@ -303,9 +322,6 @@ local function register_rail_sloped(itemstring, def)
end end
mod.register_rail_sloped = register_rail_sloped mod.register_rail_sloped = register_rail_sloped
-- Register rails
dofile(modpath.."/rails/standard.lua")
-- Redstone rules -- Redstone rules
local rail_rules_long = local rail_rules_long =
{{x=-1, y= 0, z= 0, spread=true}, {{x=-1, y= 0, z= 0, spread=true},
@ -327,15 +343,6 @@ local rail_rules_long =
local rail_rules_short = mesecon.rules.pplate local rail_rules_short = mesecon.rules.pplate
-- Normal rail -- 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", { mod.register_curves_rail("mcl_minecarts:rail_v2", {
"default_rail.png", "default_rail.png",
"default_rail_curved.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_t_junction_on.png",
"default_rail_crossing.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 = { craft = {
output = "mcl_minecarts:rail_v2 16", output = "mcl_minecarts:rail_v2 16",
recipe = { 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) -- Powered rail (off = brake mode)
register_rail("mcl_minecarts:golden_rail", mod.register_straight_rail("mcl_minecarts:golden_rail_v2",{ "mcl_minecarts_rail_golden.png" },{
{"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"),
description = S("Powered Rail"), _doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts."),
_tt_help = S("Track for minecarts").."\n"..S("Speed up when powered, slow down when not powered"), _doc_items_usagehelp = railuse .. "\n" .. S("Without redstone power, the rail will brake minecarts. To make this rail accelerate"..
_doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts."), " minecarts, power it with redstone power."),
_doc_items_usagehelp = railuse .. "\n" .. S("Without redstone power, the rail will brake minecarts. To make this rail accelerate".. _doc_items_create_entry = false,
" minecarts, power it with redstone power."), _rail_acceleration = -3,
_rail_acceleration = -3, _max_acceleration_velocity = 8,
mesecons = { mesecons = {
conductor = { conductor = {
state = mesecon.state.off, state = mesecon.state.off,
offstate = "mcl_minecarts:golden_rail", offstate = "mcl_minecarts:golden_rail_v2",
onstate = "mcl_minecarts:golden_rail_on", onstate = "mcl_minecarts:golden_rail_v2_on",
rules = rail_rules_long, 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) -- Powered rail (on = acceleration mode)
register_rail("mcl_minecarts:golden_rail_on", mod.register_straight_rail("mcl_minecarts:golden_rail_v2_on",{ "mcl_minecarts_rail_golden_powered.png" },{
{"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,
_doc_items_create_entry = false, _max_acceleration_velocity = 8,
_rail_acceleration = 4, groups = {
_max_acceleration_velocity = 8, not_in_creative_inventory = 1,
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",
}, },
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) -- Activator rail (off)
register_rail("mcl_minecarts:activator_rail", mod.register_straight_rail("mcl_minecarts:activator_rail_v2", {"mcl_minecarts_rail_activator.png"},{
{"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"),
description = S("Activator Rail"), _doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts."),
_tt_help = S("Track for minecarts").."\n"..S("Activates minecarts when powered"), _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."),
_doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts."), mesecons = {
_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."), conductor = {
mesecons = { state = mesecon.state.off,
conductor = { offstate = "mcl_minecarts:activator_rail_v2",
state = mesecon.state.off, onstate = "mcl_minecarts:activator_rail_v2_on",
offstate = "mcl_minecarts:activator_rail", rules = rail_rules_long,
onstate = "mcl_minecarts:activator_rail_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) -- Activator rail (on)
register_rail("mcl_minecarts:activator_rail_on", mod.register_straight_rail("mcl_minecarts:activator_rail_v2_on", {"mcl_minecarts_rail_activator_powered.png"},{
{"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,
{ groups = {
_doc_items_create_entry = false, not_in_creative_inventory = 1,
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",
}, },
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) -- Detector rail (off)
register_rail("mcl_minecarts:detector_rail", mod.register_straight_rail("mcl_minecarts:detector_rail_v2",{"mcl_minecarts_rail_detector.png"},{
{"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"),
description = S("Detector Rail"), _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."),
_tt_help = S("Track for minecarts").."\n"..S("Emits redstone power when a minecart is detected"), _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."),
_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."), mesecons = {
_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."), receptor = {
mesecons = { state = mesecon.state.off,
receptor = { rules = rail_rules_short,
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 = { local newnode = {
name = "mcl_minecarts:detector_rail_on", name = "mcl_minecarts:detector_rail_v2_on",
param2 = node.param2 param2 = node.param2
} }
minetest.swap_node( pos, newnode ) minetest.swap_node( pos, newnode )
mesecon.receptor_on(pos) mesecon.receptor_on(pos)
end, 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) -- Detector rail (on)
register_rail("mcl_minecarts:detector_rail_on", mod.register_straight_rail("mcl_minecarts:detector_rail_v2_on",{"mcl_minecarts_rail_detector_powered.png"},{
{"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"}, groups = {
{ not_in_creative_inventory = 1,
_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",
}, },
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)
local newnode = {
-- Crafting name = "mcl_minecarts:detector_rail",
minetest.register_craft({ param2 = node.param2
output = "mcl_minecarts:golden_rail 6", }
recipe = { minetest.swap_node( pos, newnode )
{"mcl_core:gold_ingot", "", "mcl_core:gold_ingot"}, mesecon.receptor_off(pos)
{"mcl_core:gold_ingot", "mcl_core:stick", "mcl_core:gold_ingot"}, end,
{"mcl_core:gold_ingot", "mesecons:redstone", "mcl_core:gold_ingot"}, drop = "mcl_minecarts:detector_rail_v2",
}
}) })
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
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"},
}
})
-- Aliases -- Aliases
if minetest.get_modpath("doc") then if minetest.get_modpath("doc") then