From 7cfb3874a381d5923611242b4cf7756d86049def Mon Sep 17 00:00:00 2001
From: Kevin Zheng <kevinz5000@gmail.com>
Date: Wed, 06 Aug 2014 19:08:48 +0200
Subject: [PATCH] Evenly distribute charge across multiple batteries

---
 technic/machines/other/frames.lua |   32 +++++++++++++++++++++++++-------
 1 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/technic/machines/other/frames.lua b/technic/machines/other/frames.lua
index b3a179b..427e60b 100644
--- a/technic/machines/other/frames.lua
+++ b/technic/machines/other/frames.lua
@@ -3,6 +3,8 @@
 
 frames = {}
 
+local infinite_stacks = minetest.setting_getbool("creative_mode") and minetest.get_modpath("unified_inventory") == nil
+
 local frames_pos = {}
 
 -- Helpers
@@ -220,6 +222,7 @@
 		paramtype = "light",
 		frame=1,
 		drop="technic:frame_111111",
+		sunlight_propagates = true,
 		frame_connect_all=function(nodename)
 			l2={}
 			l1={{x=-1,y=0,z=0},{x=1,y=0,z=0},{x=0,y=-1,z=0},{x=0,y=1,z=0},{x=0,y=0,z=-1},{x=0,y=0,z=1}}
@@ -265,10 +268,12 @@
 			else
 				minetest.set_node(pos, {name = itemstack:get_name()})
 			end
-			itemstack:take_item()
+			if not infinite_stacks then
+				itemstack:take_item()
+			end
 			return itemstack
 		end,
-		on_rightclick = function(pos, node, placer, itemstack)
+		on_rightclick = function(pos, node, placer, itemstack, pointed_thing)
 			if is_supported_node(itemstack:get_name()) then
 				if minetest.is_protected(pos, placer:get_player_name()) then
 					minetest.log("action", placer:get_player_name()
@@ -312,6 +317,11 @@
 				obj:get_luaentity():set_node({name=node.name})
 				
 				return itemstack
+			else
+				--local pointed_thing = {type = "node", under = pos}
+				if pointed_thing then
+					minetest.item_place_node(itemstack, placer, pointed_thing)
+				end
 			end
 		end,
 	})
@@ -532,11 +542,15 @@
 		nnode.name = frames_pos[pos_to_string(nnodepos)]
 	end
 	local meta = minetest.get_meta(pos)
+	if meta:get_int("last_moved") == minetest.get_gametime() then
+		return
+	end
 	local owner = meta:get_string("owner")
 	if minetest.registered_nodes[nnode.name].frame==1 then
 		local connected_nodes=get_connected_nodes(nnodepos)
 		move_nodes_vect(connected_nodes,dir,pos,owner)
 	end
+	minetest.get_meta(vector.add(pos, dir)):set_int("last_moved", minetest.get_gametime())
 end
 
 minetest.register_node("technic:frame_motor",{
@@ -788,11 +802,11 @@
 })
 
 minetest.register_tool("technic:template_tool",{
-	description = S("Template tool"),
+	description = S("Template Tool"),
 	inventory_image = "technic_template_tool.png",
 	on_use = function(itemstack, puncher, pointed_thing)
 		local pos = pointed_thing.under
-		if pos == nil or (minetest.is_protected and minetest.is_protected(pos, placer:get_player_name())) then
+		if pos == nil or (minetest.is_protected and minetest.is_protected(pos, puncher:get_player_name())) then
 			return nil
 		end
 		local node = minetest.get_node(pos)
@@ -833,15 +847,19 @@
 	local dir = minetest.facedir_to_dir(node.param2)
 	local nnode=minetest.get_node(nnodepos)
 	local meta = minetest.get_meta(pos)
+	if meta:get_int("last_moved") == minetest.get_gametime() then
+		return
+	end
 	local owner = meta:get_string("owner")
 	if nnode.name == "technic:template" then
 		local connected_nodes=get_template_nodes(nnodepos)
 		move_nodes_vect(connected_nodes,dir,pos,owner)
 	end
+	minetest.get_meta(vector.add(pos, dir)):set_int("last_moved", minetest.get_gametime())
 end
 
 minetest.register_node("technic:template_motor",{
-	description = S("Template motor"),
+	description = S("Template Motor"),
 	tiles = {"pipeworks_filter_top.png^[transformR90", "technic_lv_cable.png", "technic_lv_cable.png",
 		"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png"},
 	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
@@ -867,7 +885,7 @@
 	output = 'technic:frame_motor',
 	recipe = {
 		{'',					'technic:frame_111111',	''},
-		{'group:mesecons_conductor_craftable',	'technic:motor',	'group:mesecons_conductor_craftable'},
+		{'group:mesecon_conductor_craftable',	'technic:motor',	'group:mesecon_conductor_craftable'},
 		{'',					'technic:frame_111111',	''},
 	}
 })
@@ -895,7 +913,7 @@
 	output = 'technic:template_motor',
 	recipe = {
 		{'',					'technic:template',	''},
-		{'group:mesecons_conductor_craftable',	'technic:motor',	'group:mesecons_conductor_craftable'},
+		{'group:mesecon_conductor_craftable',	'technic:motor',	'group:mesecon_conductor_craftable'},
 		{'',					'technic:template',	''},
 	}
 })

--
Gitblit v1.8.0