summaryrefslogtreecommitdiff
path: root/init.lua
blob: 7dff2c63fef4515e47d0068871bc33250561a21d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
local old_itc = technic.is_tier_cable

local old_gct = technic.get_cable_tier

technic.is_tier_cable = function(name,tier)
	local itcresult = old_itc(name,tier)
	if itcresult then
		return itcresult
	elseif minetest.registered_nodes[name] and minetest.registered_nodes[name]._origcable then
		return old_itc(minetest.registered_nodes[name]._origcable,tier)
	end
end

technic.get_cable_tier = function(name)
	local gctresult = old_gct(name)
	if gctresult then
		return gctresult
	elseif minetest.registered_nodes[name] and minetest.registered_nodes[name]._origcable then
		return old_gct(minetest.registered_nodes[name]._origcable)
	end
end

local cables = {
	["technic:lv_cable"] = "technic_adminnodes:lv_cable_admin",
	["technic:mv_cable"] = "technic_adminnodes:mv_cable_admin",
	["technic:hv_cable"] = "technic_adminnodes:hv_cable_admin",
}

for oldname,newname in pairs(cables) do
	local def = table.copy(minetest.registered_nodes[oldname])
	for group in pairs(def.groups) do
		if not string.find(group,"technic") then def.groups[group] = nil end
	end
	for face,img in ipairs(def.tiles) do
		def.tiles[face] = img.."^[resize:64x64^(technic_adminnodes_cable_overlay.png^[opacity:128)"
	end
	def.groups.not_in_creative_inventory = 1
	def.drop = ""
	def.mod_origin = nil
	def.description = "Unbreakable "..def.description
	def.name = nil
	def._origcable = oldname
	def.inventory_image = "[combine:32x32:0,0="..def.inventory_image..":15,15=(basic_materials_padlock.png\\^[resize\\:16x16)"
	minetest.register_node(newname,def)
end

for _,tier in ipairs({"lv","mv","hv",}) do
	local metafieldname = string.upper(tier).."_EU_supply"
	minetest.register_node("technic_adminnodes:generator_"..tier,{
		description = "Magical "..string.upper(tier).." Power Supply",
		paramtype2 = "facedir",
		on_rotate = minetest.global_exists("screwdriver") and screwdriver.rotate_simple,
		groups = {
			not_in_creative_inventory = 1,
			technic_machine = 1,
			["technic_"..tier] = 1,
		},
		tiles = {
			"technic_"..tier.."_generator_top.png",
			"technic_machine_bottom.png",
			"technic_"..tier.."_generator_side.png",
			"technic_"..tier.."_generator_side.png",
			"technic_"..tier.."_generator_side.png",
			"technic_"..tier.."_generator_front.png^technic_adminnodes_generator_overlay.png",
		},
		on_construct = function(pos)
			local meta = minetest.get_meta(pos)
			local default = 1000
			meta:set_int("amount",default)
			meta:set_string("infotext","Magical "..string.upper(tier).." Power Supply Has No Network")
			meta:set_string("formspec","field[amount;EU to generate;${amount}")
		end,
		technic_run = function(pos)
			local meta = minetest.get_meta(pos)
			local amount = meta:get_int("amount")
			meta:set_int(string.upper(tier).."_EU_supply",amount)
			meta:set_string("infotext","Magical "..string.upper(tier).." Power Supply, producing "..technic.EU_string(amount))
		end,
		connect_sides = {
			"bottom",
			"back",
			"left",
			"right",
		},
		on_receive_fields = function(pos,formname,fields,sender)
			local name = sender:get_player_name()
			if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then
				minetest.record_protection_violation(pos,name)
				return
			end
			local meta = minetest.get_meta(pos)
			if tonumber(fields.amount) then
				local newamount = math.min(10^9,math.max(0,math.floor(tonumber(fields.amount))))
				meta:set_int("amount",newamount)
				meta:set_string("infotext","Magical "..string.upper(tier).." Power Supply, producing "..technic.EU_string(newamount))
			end
		end,
	})
	technic.register_machine(string.upper(tier),"technic_adminnodes:generator_"..tier,technic.producer)
end