Page MenuHome1F616EMO Bugtracker

No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None
diff --git a/rightclick_fix/init.lua b/rightclick_fix/init.lua
new file mode 100644
index 0000000..6602d57
--- /dev/null
+++ b/rightclick_fix/init.lua
@@ -0,0 +1,79 @@
+-- twi_mods/rightclick_fix/init.lua
+-- Fix node interaction on on_place tols
+-- Copyright (C) 2025 1F616EMO
+-- SPDX-License-Identifier: LGPL-2.1-or-later
+
+local fix_tools = {
+ -- Screwdrivers
+ "screwdriver:screwdriver",
+ "technic:sonic_screwdriver",
+
+ -- Advtrains tools
+ "advtrains:trackworker",
+ "advtrains:copytool",
+ "advtrains_interlocking:tool",
+ "advtrains_luaautomation:pcnaming",
+
+ -- Advtrains track placers
+ "advtrains:dtrack_atc_placer",
+ "advtrains:dtrack_bumper_placer",
+ "advtrains:dtrack_detector_off_placer",
+ "advtrains:dtrack_load_placer",
+ "advtrains:dtrack_placer",
+ "advtrains:dtrack_s3_placer",
+ "advtrains:dtrack_slopeplacer",
+ "advtrains:dtrack_sy_placer",
+ "advtrains:dtrack_unload_placer",
+ "advtrains:dtrack_xing90plusx_placer",
+ "advtrains:dtrack_xing_placer",
+ "advtrains:dtrack_xingdiag_placer",
+ "advtrains_interlocking:dtrack_npr_placer",
+ "advtrains_line_automation:dtrack_stop_placer",
+ "advtrains_luaautomation:dtrack_placer",
+}
+
+local function is_function_node(pos)
+ -- 1. Formspec meta check
+ local meta = core.get_meta(pos)
+ if meta:get("formspec") ~= nil then
+ return true
+ end
+
+ -- 2. Check on_rightclick
+ local node = core.get_node(pos)
+ local ndef = core.registered_nodes[node.name]
+ return ndef and ndef.on_rightclick and true or false
+end
+
+local function on_place(itemstack, placer, pointed_thing, old_on_place)
+ local pos = pointed_thing.under
+
+ if is_function_node(pos) then
+ local control = placer:get_player_control()
+ if control.sneak then
+ -- Do node function instead
+ local node = core.get_node(pos)
+ local ndef = core.registered_nodes[node.name]
+ if ndef.on_rightclick then
+ return ndef.on_rightclick(pos, node, placer, itemstack, pointed_thing)
+ end
+ return itemstack
+ end
+ end
+
+ return old_on_place(itemstack, placer, pointed_thing)
+end
+
+-- on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
+
+for _, name in ipairs(fix_tools) do
+ local def = core.registered_items[name]
+ local old_on_place = def.on_place
+ if old_on_place then
+ core.override_item(name, {
+ on_place = function(itemstack, placer, pointed_thing)
+ return on_place(itemstack, placer, pointed_thing, old_on_place)
+ end,
+ })
+ end
+end
diff --git a/rightclick_fix/mod.conf b/rightclick_fix/mod.conf
new file mode 100644
index 0000000..747b74a
--- /dev/null
+++ b/rightclick_fix/mod.conf
@@ -0,0 +1,2 @@
+name = rightclick_fix
+depends = screwdriver, technic, advtrains, advtrains_interlocking, advtrains_luaautomation, advtrains_train_track, advtrains_line_automation
\ No newline at end of file

File Metadata

Mime Type
text/x-diff
Expires
Wed, Jun 10, 10:45 AM (3 w, 3 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
13/0c/c7b358074c19e16ab2079058c610
Default Alt Text
(2 KB)

Event Timeline