diff options
| -rw-r--r-- | electric.lua | 2 | ||||
| -rw-r--r-- | init.lua | 1 | ||||
| -rw-r--r-- | textures/technic_water_mill_side.png | bin | 0 -> 907 bytes | |||
| -rw-r--r-- | textures/technic_water_mill_top.png | bin | 0 -> 828 bytes | |||
| -rw-r--r-- | textures/technic_water_mill_top_active.png | bin | 0 -> 819 bytes | |||
| -rw-r--r-- | water_mill.lua | 128 | 
6 files changed, 131 insertions, 0 deletions
| diff --git a/electric.lua b/electric.lua index 172e73e..10e1e6c 100644 --- a/electric.lua +++ b/electric.lua @@ -513,6 +513,8 @@ if minetest.env:get_node(pos1).name == "technic:generator" then 	new_node_added=  if minetest.env:get_node(pos1).name == "technic:generator_active" then 	new_node_added=add_new_cable_node(PR_nodes,pos1) end		  if minetest.env:get_node(pos1).name == "technic:geothermal" then 	new_node_added=add_new_cable_node(PR_nodes,pos1) end		  if minetest.env:get_node(pos1).name == "technic:geothermal_active" then 	new_node_added=add_new_cable_node(PR_nodes,pos1) end		 +if minetest.env:get_node(pos1).name == "technic:water_mill" then 	new_node_added=add_new_cable_node(PR_nodes,pos1) end		 +if minetest.env:get_node(pos1).name == "technic:water_mill_active" then 	new_node_added=add_new_cable_node(PR_nodes,pos1) end		  if minetest.env:get_node(pos1).name == "technic:electric_furnace" then 	new_node_added=add_new_cable_node(RE_nodes,pos1) end		  if minetest.env:get_node(pos1).name == "technic:electric_furnace_active" then 	new_node_added=add_new_cable_node(RE_nodes,pos1) end		  if minetest.env:get_node(pos1).name == "technic:tool_workshop" then 	new_node_added=add_new_cable_node(RE_nodes,pos1) end		 @@ -34,6 +34,7 @@ dofile(minetest.get_modpath("technic").."/mining_laser_mk1.lua")  dofile(minetest.get_modpath("technic").."/generator.lua")  dofile(minetest.get_modpath("technic").."/solar_panel.lua")  dofile(minetest.get_modpath("technic").."/geothermal.lua") +dofile(minetest.get_modpath("technic").."/water_mill.lua")  function has_locked_chest_privilege(meta, player) diff --git a/textures/technic_water_mill_side.png b/textures/technic_water_mill_side.pngBinary files differ new file mode 100644 index 0000000..f4bdb16 --- /dev/null +++ b/textures/technic_water_mill_side.png diff --git a/textures/technic_water_mill_top.png b/textures/technic_water_mill_top.pngBinary files differ new file mode 100644 index 0000000..601ff15 --- /dev/null +++ b/textures/technic_water_mill_top.png diff --git a/textures/technic_water_mill_top_active.png b/textures/technic_water_mill_top_active.pngBinary files differ new file mode 100644 index 0000000..f02bec6 --- /dev/null +++ b/textures/technic_water_mill_top_active.png diff --git a/water_mill.lua b/water_mill.lua new file mode 100644 index 0000000..ad0738c --- /dev/null +++ b/water_mill.lua @@ -0,0 +1,128 @@ +minetest.register_alias("water_mill", "technic:water_mill") + +minetest.register_craft({ +	output = 'technic:water_mill', +	recipe = { +		{'default:stone', 'default:stone', 'default:stone'}, +		{'default:wood', 'technic:diamond', 'default:wood'}, +		{'default:stone', 'moreores:copper_ingot', 'default:stone'}, +	} +}) + +minetest.register_craftitem("technic:water_mill", { +	description = "Water Mill", +	stack_max = 99, +})  + +water_mill_formspec = +	"invsize[8,4;]".. +	"image[1,1;1,2;technic_power_meter_bg.png]".. +	"label[0,0;Water Mill]".. +	"label[1,3;Power level]".. +	"list[current_player;main;0,5;8,4;]" +	 + +minetest.register_node("technic:water_mill", { +	description = "Water Mill", +	tiles = {"technic_water_mill_top.png", "technic_machine_bottom.png", "technic_water_mill_side.png", +		"technic_water_mill_side.png", "technic_water_mill_side.png", "technic_water_mill_side.png"}, +	paramtype2 = "facedir", +	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, +	legacy_facedir_simple = true, +	sounds = default.node_sound_wood_defaults(), +	technic_power_machine=1, +	internal_EU_buffer=0; +	internal_EU_buffer_size=5000; +	burn_time=0; +	on_construct = function(pos) +		local meta = minetest.env:get_meta(pos) +		meta:set_string("infotext", "Water Mill") +		meta:set_float("technic_power_machine", 1) +		meta:set_float("internal_EU_buffer", 0) +		meta:set_float("internal_EU_buffer_size", 3000) +		meta:set_string("formspec", water_mill_formspec)	 +		end,	 + +}) + +minetest.register_node("technic:water_mill_active", { +	description = "Water Mill", +	tiles = {"technic_water_mill_top_active.png", "technic_machine_bottom.png", "technic_water_mill_side.png", +		"technic_water_mill_side.png", "technic_water_mill_side.png", "technic_water_mill_side.png"}, +	paramtype2 = "facedir", +	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1}, +	legacy_facedir_simple = true, +	sounds = default.node_sound_wood_defaults(), +	drop="technic:water_mill", +	technic_power_machine=1, +	internal_EU_buffer=0; +	internal_EU_buffer_size=0; +}) + +minetest.register_abm({ +	nodenames = {"technic:water_mill","technic:water_mill_active"}, +	interval = 1, +	chance = 1, +	action = function(pos, node, active_object_count, active_object_count_wider) + +	local meta = minetest.env:get_meta(pos) +	local charge= meta:get_float("internal_EU_buffer") +	local max_charge= meta:get_float("internal_EU_buffer_size") +	local water_nodes = 0 +	local lava_nodes = 0 +	local production_level=0 +	local load_step=0 + +	pos.x=pos.x+1 +	local check=check_node_around (pos) +	if check==1 then water_nodes=water_nodes+1 end +	pos.x=pos.x-2 +	check=check_node_around (pos) +	if check==1 then water_nodes=water_nodes+1 end +	pos.x=pos.x+1 +	pos.z=pos.z+1 +	check=check_node_around (pos) +	if check==1 then water_nodes=water_nodes+1 end +	pos.z=pos.z-2 +	check=check_node_around (pos) +	if check==1 then water_nodes=water_nodes+1 end +	pos.z=pos.z+1 +	 +	if water_nodes==1 then production_level=25 load_step=30 end +	if water_nodes==2 then production_level=50 load_step=60 end +	if water_nodes==3 then production_level=75 load_step=90 end +	if water_nodes==4 then production_level=100 load_step=120 end + +        if production_level>0 then +		if charge+load_step>max_charge then +		load_step=max_charge-charge +		end +		if load_step>0 then  +		charge=charge+load_step +		meta:set_float("internal_EU_buffer",charge) +		end +	end + +	local load = math.floor((charge/max_charge)*100) +	meta:set_string("formspec", +				"invsize[8,4;]".. +				"image[1,1;1,2;technic_power_meter_bg.png^[lowpart:".. +						(load)..":technic_power_meter_fg.png]".. +				"label[0,0;Water Mill]".. +				"label[1,3;Power level]".. +				"label[4,0;Production at "..tostring(production_level).."%]" +				) +				 +	if production_level>0 and minetest.env:get_node(pos).name=="technic:water_mill" then +		hacky_swap_node (pos,"technic:water_mill_active") +		return +	end +	if production_level==0 then hacky_swap_node (pos,"technic:water_mill") end +end +})  + +function check_node_around (pos) +local node=minetest.env:get_node(pos) +if node.name=="default:water_flowing"  then return 1 end +return 0 +end
\ No newline at end of file | 
