From feaf000b00db79a12a273971e8b4e2b51539f19c Mon Sep 17 00:00:00 2001
From: teknomunk <teknomunk@protonmail.com>
Date: Thu, 23 Jan 2025 06:45:13 -0600
Subject: [PATCH] Turn powered rail conductor states into functions

---
 mods/ENTITIES/mcl_minecarts/rails.lua         | 20 +++++++++++++++++--
 mods/ENTITIES/mcl_minecarts/rails/powered.lua | 16 +++++++++++----
 2 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/mods/ENTITIES/mcl_minecarts/rails.lua b/mods/ENTITIES/mcl_minecarts/rails.lua
index c4b3c9a4c..22ccd9b4f 100644
--- a/mods/ENTITIES/mcl_minecarts/rails.lua
+++ b/mods/ENTITIES/mcl_minecarts/rails.lua
@@ -239,10 +239,26 @@ local function make_mesecons(base_name, suffix, base_mesecons)
 		mesecons.conductor = table.copy(base_mesecons.conductor)
 
 		if mesecons.conductor.onstate then
-			mesecons.conductor.onstate = base_mesecons.conductor.onstate..suffix
+			if type(mesecons.conductor.onstate) == "function" then
+				local old_onstate = mesecons.conductor.onstate
+				mesecons.conductor.onstate = function(pos, node)
+					local res = old_onstate(pos, node)
+					return {res[1]..suffix, res[2]}
+				end
+			else
+				mesecons.conductor.onstate = base_mesecons.conductor.onstate..suffix
+			end
 		end
 		if base_mesecons.conductor.offstate then
-			mesecons.conductor.offstate = base_mesecons.conductor.offstate..suffix
+			if type(mesecons.conductor.offstate) == "function" then
+				local old_offstate = mesecons.conductor.offstate
+				mesecons.conductor.offstate = function(pos, node)
+					local res = old_offstate(pos, node)
+					return {res[1]..suffix, res[2]}
+				end
+			else
+				mesecons.conductor.offstate = base_mesecons.conductor.offstate..suffix
+			end
 		end
 	end
 
diff --git a/mods/ENTITIES/mcl_minecarts/rails/powered.lua b/mods/ENTITIES/mcl_minecarts/rails/powered.lua
index f249799bb..976672e7e 100644
--- a/mods/ENTITIES/mcl_minecarts/rails/powered.lua
+++ b/mods/ENTITIES/mcl_minecarts/rails/powered.lua
@@ -21,8 +21,12 @@ mod.register_curves_rail("mcl_minecarts:golden_rail_v2",{
 	mesecons = {
 		conductor = {
 			state = mesecon.state.off,
-			offstate = "mcl_minecarts:golden_rail_v2",
-			onstate  = "mcl_minecarts:golden_rail_v2_on",
+			offstate = function(pos, node)
+				return {"mcl_minecarts:golden_rail_v2", node.param2}
+			end,
+			onstate  = function(pos, node)
+				return {"mcl_minecarts:golden_rail_v2_on", node.param2}
+			end,
 			rules = mod.rail_rules_long,
 		},
 	},
@@ -73,8 +77,12 @@ mod.register_curves_rail("mcl_minecarts:golden_rail_v2_on",{
 	mesecons = {
 		conductor = {
 			state = mesecon.state.on,
-			offstate = "mcl_minecarts:golden_rail_v2",
-			onstate  = "mcl_minecarts:golden_rail_v2_on",
+			offstate = function(pos, node)
+				return {"mcl_minecarts:golden_rail_v2", node.param2}
+			end,
+			onstate  = function(pos, node)
+				return {"mcl_minecarts:golden_rail_v2_on", node.param2}
+			end,
 			rules = mod.rail_rules_long,
 		},
 	},