2017-03-11 21:12:31 +01:00
local railuse = " Place them on the ground to build your railway, the rails will automatically connect to each other and will turn into curves, T-junctions, crossings and slopes as needed. "
2017-02-16 20:15:43 +01:00
-- Normal rail
minetest.register_node ( " mcl_minecarts:rail " , {
description = " Rail " ,
2017-03-11 21:12:31 +01:00
_doc_items_longdesc = " Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction. " ,
_doc_items_usagehelp = railuse ,
2017-02-16 20:15:43 +01:00
drawtype = " raillike " ,
tiles = { " default_rail.png " , " default_rail_curved.png " , " default_rail_t_junction.png " , " default_rail_crossing.png " } ,
is_ground_content = false ,
inventory_image = " default_rail.png " ,
wield_image = " default_rail.png " ,
paramtype = " light " ,
walkable = false ,
selection_box = {
type = " fixed " ,
-- but how to specify the dimensions for curved and sideways rails?
fixed = { - 1 / 2 , - 1 / 2 , - 1 / 2 , 1 / 2 , - 1 / 2 + 1 / 16 , 1 / 2 } ,
} ,
stack_max = 64 ,
2017-05-20 04:11:14 +02:00
groups = { handy = 1 , pickaxey = 1 , attached_node = 1 , rail = 1 , connect_to_raillike = 1 , dig_by_water = 1 , destroy_by_lava_flow = 1 , transport = 1 } ,
2017-06-06 21:10:24 +02:00
sounds = mcl_sounds.node_sound_metal_defaults ( ) ,
2017-02-22 16:03:59 +01:00
_mcl_blast_resistance = 3.5 ,
2017-02-27 01:33:34 +01:00
_mcl_hardness = 0.7 ,
2017-02-16 20:15:43 +01:00
} )
minetest.register_craft ( {
output = ' mcl_minecarts:rail 16 ' ,
recipe = {
{ ' mcl_core:iron_ingot ' , ' ' , ' mcl_core:iron_ingot ' } ,
{ ' mcl_core:iron_ingot ' , ' mcl_core:stick ' , ' mcl_core:iron_ingot ' } ,
{ ' mcl_core:iron_ingot ' , ' ' , ' mcl_core:iron_ingot ' } ,
}
} )
2017-01-05 15:23:14 +01:00
2017-08-28 16:59:10 +02:00
-- Function that get the input/output rules of the powered rails
local get_input_rules = function ( )
return {
{ x = - 1 , y = 0 , z = 0 } ,
{ x = 1 , y = 0 , z = 0 } ,
{ x = 0 , y = 0 , z = - 1 } ,
{ x = 0 , y = 0 , z = 1 } ,
}
end
local get_output_rules = function ( )
return { }
end
-- Powered rail
local powered_rail_template = {
2017-01-05 15:23:14 +01:00
description = " Powered Rail " ,
2017-08-28 16:59:10 +02:00
_doc_items_longdesc = " Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts. " ,
_doc_items_usagehelp = railuse .. " \n " .. " Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power. " ,
2017-01-05 15:23:14 +01:00
drawtype = " raillike " ,
tiles = { " carts_rail_pwr.png " , " carts_rail_curved_pwr.png " , " carts_rail_t_junction_pwr.png " , " carts_rail_crossing_pwr.png " } ,
inventory_image = " carts_rail_pwr.png " ,
wield_image = " carts_rail_pwr.png " ,
paramtype = " light " ,
2017-03-11 16:36:05 +01:00
is_ground_content = false ,
2017-01-05 15:23:14 +01:00
walkable = false ,
selection_box = {
type = " fixed " ,
fixed = { - 1 / 2 , - 1 / 2 , - 1 / 2 , 1 / 2 , - 1 / 2 + 1 / 16 , 1 / 2 } ,
} ,
2017-05-20 04:11:14 +02:00
groups = { handy = 1 , pickaxey = 1 , attached_node = 1 , rail = 1 , connect_to_raillike = 1 , dig_by_water = 1 , destroy_by_lava_flow = 1 , transport = 1 } ,
2017-08-28 16:59:10 +02:00
2017-06-06 21:10:24 +02:00
sounds = mcl_sounds.node_sound_metal_defaults ( ) ,
2017-01-05 15:23:14 +01:00
mesecons = {
effector = {
action_on = function ( pos , node )
2017-08-28 16:59:10 +02:00
minetest.swap_node ( pos , { name = " mcl_minecarts:golden_rail_on " , param2 = node.param2 } )
mesecon : receptor_on ( pos , get_input_rules ( ) )
2017-01-05 15:23:14 +01:00
end ,
} ,
2017-08-28 16:59:10 +02:00
receptor = {
state = mesecon.state . off ,
rules = get_output_rules ,
} ,
2017-01-05 15:23:14 +01:00
} ,
2017-08-28 16:59:10 +02:00
_rail_acceleration = - 3 ,
2017-02-22 16:03:59 +01:00
_mcl_blast_resistance = 3.5 ,
2017-02-27 01:33:34 +01:00
_mcl_hardness = 0.7 ,
2017-08-28 16:59:10 +02:00
}
minetest.register_node ( " mcl_minecarts:golden_rail " , powered_rail_template )
-- Powered rail (activated by redstone)
local powered_rail_on = table.copy ( powered_rail_template )
powered_rail_on.description = nil
powered_rail_on._doc_items_create_entry = false
powered_rail_on._doc_items_longdesc = nil
powered_rail_on._doc_items_usagehelp = nil
powered_rail_on.tiles = { " 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 " }
powered_rail_on.inventory_image = " mcl_minecarts_rail_golden_powered.png "
powered_rail_on.wield_image = " mcl_minecarts_rail_golden_powered.png "
powered_rail_on.groups . not_in_creative_inventory = 1
powered_rail_on.groups . transport = nil
powered_rail_on.mesecons = {
effector = {
action_off = function ( pos , node )
minetest.swap_node ( pos , { name = " mcl_minecarts:golden_rail " , param2 = node.param2 } )
mesecon : receptor_off ( pos , get_input_rules ( ) )
end ,
} ,
receptor = {
state = mesecon.state . on ,
rules = get_output_rules ,
}
}
powered_rail_on._rail_acceleration = 4
minetest.register_node ( " mcl_minecarts:golden_rail_on " , powered_rail_on )
if minetest.get_modpath ( " doc " ) then
doc.add_entry_alias ( " nodes " , " mcl_minecarts:golden_rail " , " nodes " , " mcl_minecarts:golden_rail_on " )
end
2017-01-05 15:23:14 +01:00
minetest.register_craft ( {
output = " mcl_minecarts:golden_rail 6 " ,
recipe = {
2017-01-31 23:32:56 +01:00
{ " 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 " } ,
2017-01-05 15:23:14 +01:00
}
} )