From 1f1562f630bf1f8cb0c40161a2a423a702c5a209 Mon Sep 17 00:00:00 2001 From: Maciej Kasatkin Date: Tue, 11 Sep 2012 12:56:38 +0200 Subject: [PATCH] Added Alloy Furnace --- alloy_furnace.lua | 237 ++++++++++++++++++ electric.lua | 2 + grinder.lua | 34 +++ init.lua | 1 + ores.lua | 6 + textures/technic_alloy_furnace_front.png | Bin 0 -> 498 bytes .../technic_alloy_furnace_front_active.png | Bin 0 -> 500 bytes textures/technic_alloy_furnace_side.png | Bin 0 -> 448 bytes textures/technic_alloy_furnace_top.png | Bin 0 -> 458 bytes textures/technic_bronze_dust.png | Bin 0 -> 1304 bytes textures/technic_chromium_dust.png | Bin 241 -> 1162 bytes textures/technic_chromium_ingot.png | Bin 230 -> 242 bytes textures/technic_copper_dust.png | Bin 146 -> 1252 bytes textures/technic_generator_front.png | Bin 302 -> 430 bytes textures/technic_generator_front_active.png | Bin 310 -> 454 bytes textures/technic_generator_side.png | Bin 245 -> 341 bytes textures/technic_generator_top.png | Bin 313 -> 388 bytes textures/technic_gold_dust.png | Bin 185 -> 1285 bytes textures/technic_iron_dust.png | Bin 148 -> 1199 bytes textures/technic_mithril_dust.png | Bin 140 -> 1289 bytes textures/technic_silver_dust.png | Bin 148 -> 1295 bytes textures/technic_stainless_steel_dust.png | Bin 0 -> 1145 bytes textures/technic_stainless_steel_ingot.png | Bin 0 -> 230 bytes textures/technic_tin_dust.png | Bin 152 -> 1261 bytes 24 files changed, 280 insertions(+) create mode 100644 alloy_furnace.lua create mode 100644 textures/technic_alloy_furnace_front.png create mode 100644 textures/technic_alloy_furnace_front_active.png create mode 100644 textures/technic_alloy_furnace_side.png create mode 100644 textures/technic_alloy_furnace_top.png create mode 100644 textures/technic_bronze_dust.png create mode 100644 textures/technic_stainless_steel_dust.png create mode 100644 textures/technic_stainless_steel_ingot.png diff --git a/alloy_furnace.lua b/alloy_furnace.lua new file mode 100644 index 0000000..f1852f8 --- /dev/null +++ b/alloy_furnace.lua @@ -0,0 +1,237 @@ +alloy_recipes ={} + +registered_recipes_count=1 + +function register_alloy_recipe (string1,count1, string2,count2, string3,count3) +alloy_recipes[registered_recipes_count]={} +alloy_recipes[registered_recipes_count].src1_name=string1 +alloy_recipes[registered_recipes_count].src1_count=count1 +alloy_recipes[registered_recipes_count].src2_name=string2 +alloy_recipes[registered_recipes_count].src2_count=count2 +alloy_recipes[registered_recipes_count].dst_name=string3 +alloy_recipes[registered_recipes_count].dst_count=count3 +registered_recipes_count=registered_recipes_count+1 +alloy_recipes[registered_recipes_count]={} +alloy_recipes[registered_recipes_count].src1_name=string2 +alloy_recipes[registered_recipes_count].src1_count=count2 +alloy_recipes[registered_recipes_count].src2_name=string1 +alloy_recipes[registered_recipes_count].src2_count=count1 +alloy_recipes[registered_recipes_count].dst_name=string3 +alloy_recipes[registered_recipes_count].dst_count=count3 +registered_recipes_count=registered_recipes_count+1 + + +end + +register_alloy_recipe ("technic:copper_dust",3, "technic:tin_dust",1, "technic:bronze_dust",4) +register_alloy_recipe ("moreores:copper_ingot",3, "moreores:tin_ingot",1, "moreores:bronze_ingot",4) +register_alloy_recipe ("technic:iron_dust",3, "technic:chromium_dust",1, "technic:stainless_steel_dust",4) + +minetest.register_alias("alloy_furnace", "technic:alloy_furnace") + + +minetest.register_craft({ + output = 'technic:alloy_furnace', + recipe = { + {'default:stone', 'default:stone', 'default:stone'}, + {'default:stone', '', 'default:stone'}, + {'moreores:gold_ingot', 'moreores:copper_ingot', 'moreores:gold_ingot'}, + } +}) + + +alloy_furnace_formspec = + "invsize[8,9;]".. + "image[1,1;1,2;technic_power_meter_bg.png]".. + "list[current_name;src;3,1;1,1;]".. + "list[current_name;src2;3,2;1,1;]".. + "list[current_name;dst;5,1;2,2;]".. + "list[current_player;main;0,5;8,4;]".. + "label[0,0;Alloy Furnace]".. + "label[1,3;Power level]" + +minetest.register_node("technic:alloy_furnace", { + description = "Electric alloy furnace", + tiles = {"technic_alloy_furnace_top.png", "technic_machine_bottom.png", "technic_alloy_furnace_side.png", + "technic_alloy_furnace_side.png", "technic_alloy_furnace_side.png", "technic_alloy_furnace_front.png"}, + paramtype2 = "facedir", + groups = {cracky=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_stone_defaults(), + technic_power_machine=1, + internal_EU_buffer=0; + interal_EU_buffer_size=2000; + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_float("technic_power_machine", 1) + meta:set_string("formspec", alloy_furnace_formspec) + meta:set_string("infotext", "Alloy furnace") + local inv = meta:get_inventory() + inv:set_size("src", 1) + inv:set_size("src2", 1) + inv:set_size("dst", 4) + local EU_used = 0 + local furnace_is_cookin = 0 + local cooked = nil + meta:set_float("internal_EU_buffer",0) + meta:set_float("internal_EU_buffer_size",2000) + + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + if not inv:is_empty("dst") then + return false end + if not inv:is_empty("src") then + return false end + if not inv:is_empty("src2") then + return false end + return true + end, +}) + +minetest.register_node("technic:alloy_furnace_active", { + description = "Alloy Furnace", + tiles = {"technic_alloy_furnace_top.png", "technic_machine_bottom.png", "technic_alloy_furnace_side.png", + "technic_alloy_furnace_side.png", "technic_alloy_furnace_side.png", "technic_alloy_furnace_front_active.png"}, + paramtype2 = "facedir", + light_source = 8, + drop = "technic:alloy_furnace", + groups = {cracky=2, not_in_creative_inventory=1}, + legacy_facedir_simple = true, + sounds = default.node_sound_stone_defaults(), + internal_EU_buffer=0; + interal_EU_buffer_size=2000; + technic_power_machine=1, + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_float("technic_power_machine", 1) + meta:set_string("formspec", alloy_furnace_formspec) + meta:set_string("infotext", "Alloy furnace"); + local inv = meta:get_inventory() + inv:set_size("src", 1) + inv:set_size("dst", 4) + local EU_used = 0 + local furnace_is_cookin = 0 + local cooked = nil + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + if not inv:is_empty("dst") then + return false + elseif not inv:is_empty("src") then + return false + end + return true + end, +}) + +minetest.register_abm({ + nodenames = {"technic:alloy_furnace","technic:alloy_furnace_active"}, + interval = 1, + chance = 1, + + action = function(pos, node, active_object_count, active_object_count_wider) + + local meta = minetest.env:get_meta(pos) + internal_EU_buffer=meta:get_float("internal_EU_buffer") + internal_EU_buffer_size=meta:get_float("internal_EU_buffer") + local load = math.floor(internal_EU_buffer/2000 * 100) + meta:set_string("formspec", + "invsize[8,9;]".. + "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:".. + (load)..":technic_power_meter_fg.png]".. + "list[current_name;src;3,1;1,1;]".. + "list[current_name;src2;3,2;1,1;]".. + "list[current_name;dst;5,1;2,2;]".. + "list[current_player;main;0,5;8,4;]".. + "label[0,0;Alloy Furnace]".. + "label[1,3;Power level]") + + local inv = meta:get_inventory() + + local furnace_is_cookin = meta:get_int("furnace_is_cookin") + + + local srclist = inv:get_list("src") + local srclist2 = inv:get_list("src2") + + srcstack = inv:get_stack("src", 1) + if srcstack then src_item1=srcstack:to_table() end + srcstack = inv:get_stack("src2", 1) + if srcstack then src_item2=srcstack:to_table() end + dst_index=nil + + if src_item1 and src_item2 then + dst_index=get_cook_result(src_item1,src_item2) + end + + + if (furnace_is_cookin == 1) then + if internal_EU_buffer>=150 then + internal_EU_buffer=internal_EU_buffer-150; + meta:set_float("internal_EU_buffer",internal_EU_buffer) + meta:set_float("src_time", meta:get_float("src_time") + 1) + if dst_index and meta:get_float("src_time") >= 4 then + -- check if there's room for output in "dst" list + dst_stack={} + dst_stack["name"]=alloy_recipes[dst_index].dst_name + dst_stack["count"]=alloy_recipes[dst_index].dst_count + if inv:room_for_item("dst",dst_stack) then + -- Put result in "dst" list + inv:add_item("dst",dst_stack) + -- take stuff from "src" list + for i=1,alloy_recipes[dst_index].src1_count,1 do + srcstack = inv:get_stack("src", 1) + srcstack:take_item() + inv:set_stack("src", 1, srcstack) + end + for i=1,alloy_recipes[dst_index].src2_count,1 do + srcstack = inv:get_stack("src2", 1) + srcstack:take_item() + inv:set_stack("src2", 1, srcstack) + end + + + else + print("Furnace inventory full!") + end + meta:set_string("src_time", 0) + end + end + end + + + + + if dst_index and meta:get_int("furnace_is_cookin")==0 then + hacky_swap_node(pos,"technic:alloy_furnace_active") + meta:set_string("infotext","Alloy Furnace active") + meta:set_int("furnace_is_cookin",1) + meta:set_string("src_time", 0) + return + end + + + if meta:get_int("furnace_is_cookin")==0 or dst_index==nil then + hacky_swap_node(pos,"technic:alloy_furnace") + meta:set_string("infotext","Alloy Furnace inactive") + meta:set_int("furnace_is_cookin",0) + meta:set_string("src_time", 0) + end + +end, +}) + +function get_cook_result(src_item1, src_item2) +local counter=registered_recipes_count-1 +for i=1, counter,1 do +if alloy_recipes[i].src1_name==src_item1["name"] and + alloy_recipes[i].src2_name==src_item2["name"] and + alloy_recipes[i].src1_count<=src_item1["count"] and + alloy_recipes[i].src2_count<=src_item2["count"] + then return i end +end +return nil +end \ No newline at end of file diff --git a/electric.lua b/electric.lua index 10e1e6c..b4c6cca 100644 --- a/electric.lua +++ b/electric.lua @@ -517,6 +517,8 @@ if minetest.env:get_node(pos1).name == "technic:water_mill" then new_node_added 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:alloy_furnace" then new_node_added=add_new_cable_node(RE_nodes,pos1) end +if minetest.env:get_node(pos1).name == "technic:alloy_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 if minetest.env:get_node(pos1).name == "technic:music_player" then new_node_added=add_new_cable_node(RE_nodes,pos1) end if minetest.env:get_node(pos1).name == "technic:grinder" then new_node_added=add_new_cable_node(RE_nodes,pos1) end diff --git a/grinder.lua b/grinder.lua index b0c6722..e214bdd 100644 --- a/grinder.lua +++ b/grinder.lua @@ -71,6 +71,40 @@ minetest.register_craft({ recipe = "technic:mithril_dust", }) +minetest.register_craftitem( "technic:chromium_dust", { + description = "Chromium Dust", + inventory_image = "technic_chromium_dust.png", + on_place_on_ground = minetest.craftitem_place_item, + }) +minetest.register_craft({ + type = "cooking", + output = "technic:chromium_ingot", + recipe = "technic:chromium_dust", +}) + +minetest.register_craftitem( "technic:bronze_dust", { + description = "Bronze Dust", + inventory_image = "technic_bronze_dust.png", + on_place_on_ground = minetest.craftitem_place_item, + }) +minetest.register_craft({ + type = "cooking", + output = "moreores:bronze_ingot", + recipe = "technic:bronze_dust", +}) + +minetest.register_craftitem( "technic:stainless_steel_dust", { + description = "Stainless Steel Dust", + inventory_image = "technic_stainless_steel_dust.png", + on_place_on_ground = minetest.craftitem_place_item, + }) + +minetest.register_craft({ + type = "cooking", + output = "technic:stainless_steel_ingot", + recipe = "technic:stainless_steel_dust", +}) + minetest.register_alias("grinder", "technic:grinder") minetest.register_craft({ output = 'technic:grinder', diff --git a/init.lua b/init.lua index fb7b8f6..6d60628 100644 --- a/init.lua +++ b/init.lua @@ -35,6 +35,7 @@ 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") +dofile(minetest.get_modpath("technic").."/alloy_furnace.lua") function has_locked_chest_privilege(meta, player) diff --git a/ores.lua b/ores.lua index d75a9ad..66255b7 100644 --- a/ores.lua +++ b/ores.lua @@ -84,6 +84,12 @@ minetest.register_craftitem( "technic:chromium_ingot", { on_place_on_ground = minetest.craftitem_place_item, }) +minetest.register_craftitem( "technic:stainless_steel_ingot", { + description = "Stainless Steel Ingot", + inventory_image = "technic_stainless_steel_ingot.png", + on_place_on_ground = minetest.craftitem_place_item, +}) + minetest.register_craft({ type = 'cooking', output = "technic:chromium_ingot", diff --git a/textures/technic_alloy_furnace_front.png b/textures/technic_alloy_furnace_front.png new file mode 100644 index 0000000000000000000000000000000000000000..669904906f95718a12589b509a86307e7ac9a252 GIT binary patch literal 498 zcmVPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2?G%i2qG%x(EtDd8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b0bfZ(K~yNuU6Q+QR8b5?*YY`c5+Xta z5=cn2{QoD>rl0^J4Kw$6Q`|`u;?j?;wQc+T>jw}qj4A-xyMd{y5D+4{C1H+{fFY2~ zs_VY4PzH<{RVKzchr~bUtI~}?AtVS((j5Zp;cl~-wiF4!E+y=t!x3A7T$jMd`-XI^ zJ_yaVSs~Bez}_S%C5q+ESa++ydewbI!jx?=s|4Z%s!GXcULtSUV~|KouU9nQNewHl@Hkg2=D@T~`BD;`hTs<%;w zdAY7_jwTN?&qiaJ&>?YF4n8Ys=IKLZR*>omw_MXK)5vSX)?>Yu9f2Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2?G%iGUO&dV*mgE8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b0bxl*K~yNuU6L`56hROKBWil)?p6W= z@DMf*AK+1Z1|G$4Fp!W|JJXdIvv)cuv%4xgvMc@k@hylLmMQ=_x`Cmp5D+4{AHrCc z1Pp;>RPD#yp$r(aRGApZSS0?r?n*ZTg^(ajNp}d$%fo6hY$+0c-%2<_hqKlK*{8t! z$A)yQJ_*g<%#i19;Aj$*62#s57hYw>2w zTD>l17`J_{V`*|3c{Uo$gbsIE;`?U-jkk*&%v qpWb1B{pfY^+<#({mt+e$^~_&%1Jv)M7RQbN0000Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2?G%k4Tb?NfdBvi8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b0WC>HK~yNuMUp#?+&~lqi|p2kGFModjLJ$)0YSPXKwh;jJc?9-ukt8%CaLZvQ|JnCFBx^OWuf0$q z1W^JUdH|rGPZ=fRK7QJ$-)BgiNrU+Cxfc8w9@1=(9*obm)UY3C5WJrUBd(^2!^VIn zfJjhRQ{#yjH3

Q8h^0og qWDKOS@8L8(AH*OyF(#D0d6|FQD)P&RnqUPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RX2?G%m3My0Dpa1{>8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b0XIoRK~yNug_5z76fq1$U(1>uvMuTe z$@%~9S^|b-sT*5OVDH>TpulCzU6Nkg`tkja!61RRkRqxKj*tPcJ%)kI2#h2`#y~ey zEq$naFQnE&kXttF`}WR1Vgtr;?#8j^f#bXZKmTlxXPdIeGmpLlzxxi%SprOas@1e- z&b{P52Jqeofb4Q&trlo5_B@i&Btg#>fP^84b>C|MXRms7Q=qsiQH4xi3~ze}zJ2M} zc=udROiK!b!nF$gH`?<5C7ZMXb8qS6*00H9~*@~tZtRk3>-?Ch^HxajO2vWDUEY67lH%IC^$2 ze@-iEdw#i=KqQtyxoE@}M~7h0QzlsSr1#9ISJT+YKYjzYhgTZj-!y-_sup)E*#gSU zI#jsK2n@@ZGsA&GK_i=Wlz@GHW@`U%m;K!-RUT0F#k}$7RAuSV2%y0Dw>euV^)}36)HrbPe=vyd~VW zD~f&Z-hWz-51mQKd1m4{5*mwO;6@nXXa>>oFlsByV9--^9_&X-DWIX+3V$Ghm)Fh$ z04$vACXGG^Gw5lbO)wmzlq{f>m|PZm=KxNubD*U&iVYpUYrEfE$lT?&g_&#-E|DiX zj>7E{Vd6P>D+KTc4kylsaP}t&zFHd|YO91lkig>k6=-Xo2EC5p)P*qO6FDMS^rD@lnyWA#Ph&iu!`zupgdz&0SQghuWaQN%l4%tdlOB|SPy$rC%ykF4k8e)M z`2oi8^B)0h`z}WIZf)P|bl9I{nu?&LAeGKz){Hu&Wf@MF2eo%O;SepzrsGhuD(r$D zm;4e&B?X$s;PqG#iez9ga4;D;^baN>SoCP{3TX5>AS)`08nC3r!|Z}#%}^*^%^1Gq zo>|@CTm3-w3sNlmbW&E#O+E*zD+PA=_z-EH=|n1(flYKlPK<#-10@7%K?7q9zulO? zG^YuXcowHFhA}EBaEV5URvxOV;btg>nkoTTuEpW?l;Qet5`)1MiOcz`Mg#3kXA1s5 zwIQX%-n(nnn$fZNI;Wj)*>h+>_t?@JoH!psYm*D2jfX#wK=Vu|(u#_!LrD}08p=f@ zbUKP`wt#Rn1Kz;FS7*bPk1wI7Qh-5ESzgsh|KLQ{#Bhm{7Q*&YyIedRvLP}BLt+3$exgdg)f+n8>dL2b1o&^JN z(I3UmgI7`SwW8c^L~J7WO<-8w6_k`GqKRA&naX4F*&5qzYa2RztzB=o&s(vm%5(0} zi^41GX0Pm6Ub|{~jdfM`_N9w!D$B&iyTv-U(`coXkkZGcM2QmrX?_O)Ht!u;vg;)P O0000 literal 0 HcmV?d00001 diff --git a/textures/technic_chromium_dust.png b/textures/technic_chromium_dust.png index 3c26862bc4931e0f312375684bfc43745c1611b6..a33358b80d43a9adcf255a374d299275c5503952 100644 GIT binary patch delta 1151 zcmV-_1c3YT0g4GBiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^pPPPe-5hv z01m4Gj_kzz00007bV*G`2iyq@3J^Dp(V+|g00b9FL_t(o!|j$!Xk1ko$A9O{eaxMi zd*_jfkNINv$n_y2$AaA1oqw)j6YIWzOv zc)6?rytOaAsXgT1O{gB*1;F&&+&lBj%a?7-3eHSVpM3A@_NEFDn@Rfi>ecs?hH>O_ zrNX1zwoz}lnOj==K8)i-W2Mqh4@7~J`|}%}A50m>k+$d2pUu+seO8-If1Fh6sfTj8 zsqu1o`vXzn>cWDt+-!beTh`$iMA!F;d{nR$X_`;TK;x*Hiye z0aq%OV#oJuN+~SUBn(6RFeGUhG}>)`Sy(^mYYqIhC$ji(Gv+QUB?RodO@(E?2h9T6YAYB$~*7dg73!q7#?5Q zxZ~d#nznbT(NIOl5m6KoL=g!g&~=?CiqI1YrswBLngd77OLMaQ9#$smMarPU&cBB3V|`8bY8fOEj9ALpv_9t*0+b}@2d zm5Z~pC%qteMAvlye}W*O&$fx~t_R4JjpV zw~G)0O-do9BxxAWp1E`>8ZVdk-&Mfp!yk#snVA!YroB?gWLR@uTAqiKN)g5}Y18E4 zT#j5Sg&&6NG0R%-G6)F6kc9Zt&7$L=ltPp8jzX5Mqm-iPe>keowm%&&myZKzr_Z0? zWtrxyEzf(o>-*%>X{40uMzt!k=`?Y??w22i$lKj-#DXZoGEKZ*kGWb6r4)JFCTSSt zQYjjqcgK#jX;N>uS*+KE5aODlX{YZQ!truBw|DpM(OwW7&=ZN_*`+0Id$CBZ(IA(} zU}zdG&m)^oe-lL!Znuk43RBk+LJ&m}UJ#(&w&-%DvOY6XsyL2C%k#RLlpnq}GII1U zAEGZ06nO5$Diaqj?C7)YeT(&abFjaEwBByN0kG0)VOti3OomFWMht8(6c9q-cDn%7 z+ijMcO>(IermoWqf>Z5Y?@TWUJ{~KTTmh*2eF;AqRn7AHXN|jJ<;lsX`?FbpetG%U z6N7{9jcWCouJ3DWuFK;?L#>O~uTPn}p6mMliXVopu~JEGeO|WMVvGMQe*oWb=Mf-% R!_@!)002ovPDHLkV1hf{G06Y` delta 223 zcmeC;{K%--8Q|y6%O%Cdz`(%k>ERLtq=i73gAGWAo$Cvqs3=p!r$%+OF*zBkv8706$wWvoN!0Z*C=O^BAMM4OpTU@^3@{D5U@Z{8PD$oe`+D z0suk?TjC{Pg)A|p-Z7to_jcqbF3XA|z;yzRY;xr_p7{m{VL{P+p$OSRn zU@#;`R5T{u5l|LmzzZ)HMI=L%4-tvT$3TQJ9bwY~9l&eoLii2AowOlglX>QbpIEzku>(pkx@kcX_5W9#8j22&ElkrPeT zy8QHfY8B9IL;PQlAice&sc$6PI+jjLO;JQ9n?>TFz|c5jD6z-kRRH`$VL*YcMH&hFhqr3OFe7IXTpxAXH#5GpOR$ z1ZDXO*N1I7V>XIFI31J+4IyJDHRIlaQ|oUfZrl~+*t(+cy9N^{22)ZRnh>3l1Q&YZ zbdOkE8#1X5I&nKJwjYg?G;P8`CqLiJu)WEP1RkkziMpwp^k|$4xW!=y)C2CI$MN?C ze7D9=-Oeam7I-=iuJ+52-?%@Sfg-O{I8~MMfI*&SQxkNetAYc+CTZu<}nX*l{E(zFAwer=-CBth7wJhfSg>Xsq@#nn)4~ z`k7g*6ZGi}Cr#pJmVjH~_%)NRVGCPAbpiB@*tj(CXo9xB9DZFevq+`B+{H**V%hNc z3|$5d$MTM$T!k(9LV2yx2(Oywd8IdQt&S#hMqQ;rMZhihogEhSm2O7HEJ_LudSeN) z!igqwWUN~TYU?v8^(yoyY+5@^I)`n_ybc0}12YF5Ll)tH%IOB z+jULsjGOY(Uu{^>y}5Mx)ktbhiC3$8=XgSW;T{iPUQV;P%1O|xai%9l!(9e(Q*!ZU zii|A@AciZrvfINz5^dz_B<+xo57|LG%2KQ>)E zyLeCRW3R3@ubAyQ{rSa2^Tv8l=1L?xFA}#n(rGfBvZ?Z`v|LKkH7dEU%!x~t^d>+` zo0HcwynS?pSw$Mfc?!{__0@%e?5^Kq_A~uS`=FS}vG`!xbc%JPM8BKKyJNhX=(Kj9BeYt2DMYY#R6 O00001q3MURb(6!g?7sPg}Rlb--WSQOb) z%sBFcNDP*uEb=|?dWj6f5blnM5D{dk>f5)7Ktuo#5!@Y3@s`ltS7D0s-Q9@@OjXwe zRbB7L;}L*y92<~`tXD)}d2-TsyB&SsbGcjqI2;bl^UUdVYMds_fAaKdbDAb@w;MIG z<|=k~EUhGczu&)!UqQ8znhy~{L~uTz-vp1xgRMycZ4WZx`Fs))YuzG(nKkt{fLfos zbG=@FJNze7RdQN&luZ-s9@JB^wA#R$V@X_=h5tqZ04&J>_xt^$xa+#cq1EO1CQ@g0 xG)eykvQELw*mCo_A*ru_rEMiwi*-M?;6Fee#8G4nH%}c0>HYpXhV@nrvM&z|hf41|p{l*oqktGRJXXLMa7| zz4I3UKKsk2B23!izPj9Jfp+hqZFaeljq4|7*nZnpAR;1So3udD>H{LyS~Zb#9@FEB zmn3F>qAjMBn3vO9%T787Bq+001BJ|6u?C00DDSM?wIu&K&6g000JJOGiWi{{a60|De66 zlaVeU2m=uzF?J|t^^sO5e*qy$L_t(I%Z-yeZo@zfL?0=Z?p>=;rAy@$L5>jQ6ggFj zM3?X%HXzbP!p*L&ASNK_#~IF$Tp7nP+#L}iBFIqHyKfPJhyWlWxI3EQC7`<(V1n}9 z-H8ZHRZD`ZmisUa08G==5Q#{+A_B|G$=-Dxec!X&?EqM>*Bp;We>R&~a5#K-_y?q_ V(Ks1%a2Ego002ovPDHLkV1mD?q>}&u delta 230 zcmV1nEI>n>4tWEV5njr;k$!~iK$n)n9)KnVFYvrnTV>4qa-@*fdN27wfdx_1z`(#A#7p7rCQzpxb9swEZyU~ gT6)xVGhA6CNkVeeuu&I=ipaS~AM04kYDolOk|S9U z&aLqQEA;0;((oi}9;go9Mo_hOcbrB#UgkSVM`ltwDUJ?+Nq>1wGAK#q`TdX`60000CB6XTShHVhIjof)%T)&;*(A vy9ZN>ZV`tTJD7z- diff --git a/textures/technic_generator_top.png b/textures/technic_generator_top.png index d5a8e88be812046106a88e5813f7e819c0ac2037..e2f3db3d82e50b0916a5b7d5302f51466ea821c3 100644 GIT binary patch delta 283 zcmV+$0p$L<0)zvQF%Je}OGiWi{{a60|De66laVeU2m=uyGl4xfn2}Z}f8R+&K~yNu zjZ#r=#V`mngsNBR{ZB`wB;JQ7g5EZ1d_<`WjxpHtJZLe-Ff)=Q-JK)=l6!CcbpU22 z6u{nF*(wvh)-p43MMRK{2>cz_bpcpwk@Q06oB-bU%}gPgxz1(p{>%E}{-?rL^{tw!XRL hm46Jlf2yYM`4_bU%w{|1@qqvU002ovPDHLkV1iB`gWmuE delta 210 zcmV;@04@K71Gxf_F_A+Z2m%5t6&4r~;*n@5f2K)9K~yNul~S<{10f7F*4HUfI!Z?H z5@ZCX$tYQYWm3{o{sbxfa*RQi{;I=g@YyC15zHvDw~;i_Ko&~u;6ic^KFgCLYtlw) zBQXzRNi>IFme#0-DUL?iLQBWmZi)T#eE>ks)0Czj^fk_A)O?yc2saVluctApES)-d zJoR9Pz&C5&49!|{maQe+4tvd(YJrIKZ*%s*X}JEGE%`U??|5DI4>l=oZbL7WQUCw| M07*qoM6N<$f++Z0Q2+n{ diff --git a/textures/technic_gold_dust.png b/textures/technic_gold_dust.png index 00c1a2fa976fabba58422b5db592fa2d445fac31..e545bb6c0e09a247e0e590df13320ff490cdf5ed 100644 GIT binary patch literal 1285 zcmV+g1^W7lP)Ta zK~z}7?Uq|?6jd0<|L4qYXLq~pwhP@YblWb477!sOh0qp6Q6omgNWd73;Sv*Xi7(y~ zNO`=%ymDt`<7W6x+RYcV}m2cW37KKw=~qp)ndw z_V;*lzDxe!_dhv6g$fn^&#je!DEbBljZ>@TNgK)NNu{-~<2K3#tuPboyk&T?M z@g*appgqz6OH-jFRLlx-9bNP4q8qz0eKHO3w|kKUJ4Ef{(wodKy#TueB6#5UnYflr zBhpZXxT=$Tmv=J>hm?ggw9c$4oPM>pe9OGtZO#4YQvs$aIYRkG#2q9c1h7p={uT&K z!xtw;ku`uRt_cze2id^+)H(*zbKhJpfAqZb_eM}W`TYHi6~_tZV#E^yN?E`uL#S?s zo&6cPTo%jb%2?dWVM-Ono?{nC$tEtx!N6;um9hN^Ve$gjQkZw zBtHQaugfL}FrK&oB8TAj*Fq8iuh)ZXSqF&>0Y^c24vp`v7ubZsX8x5!$PI<}E`hx2 zBmh9$({+lI>$*nbQ5J4$CYJ4hmNH;e1eIz)9TQZn!lA=Q&{8iV*bv5#aTQG=A3p6L zN9Rlm8yt&XE=>qLIj0%eT(()X)=Q1&J}BL+fc|9%hIE-Vl=m|1sY8!0349ZKe^CJK+1C$4B0zw!}Lq|=G55=5{@1qxBIRtHu z453;9tqlb6Q5_-&#FaF{wH%@f!_gsw2$aNXz2v}6OL%txHAg;qY_*ji*}%K}i-rcz z@N;IjV?R+ms}9-Z2&(H_!7LqS`Z9_ZAiJx;I1$7$kjb0yie-3f!}#XdSp@wu zZ0cbmvLrrgo3cdSTC=0Hg}d zcU`v}zdB<+>o=9Q9h*;dP57&*a<)0nN>M+(*8H!YG}~R%w7DI(Z5M6xmJ;t#x~#Wi juEwek715=Y`+qYXF!Wx@r!{pO&@Bv}u6{1-oD!M diff --git a/textures/technic_iron_dust.png b/textures/technic_iron_dust.png index 6038df65e766b2d33fb3937fb79598c8188ae4ff..aaecd2bc8b0da30bdc7ccb964781c4716c92e0c9 100644 GIT binary patch literal 1199 zcmV;g1W@~lP)Fa%8qpK-@dSEh*xn`)yFV}h|*pg>4O zT3ab7NhvfG3x5F{W8%Vv5l!3_FeFr+CN!kbkLgTj?(MxZckcVT5E>C8pwVd3XZhyj zoaa2}IVUeHV;Rf%Kcly|zjfWZ7Y%@Y`wsj&MF$5@190NR$&YsLeqZg}`Hnh#_`{0; z?d=_polpD~5=W1I{E2PbdkTdDt5>gPVPS#k>FFQhIDYHGh0m`(PA=_H1ABV<062d9 zvo{^b*%Jf-p63yUA*E6Y$8k2ST)FZ}TifeT{v!&UJUM8U%jILP>%Oa$5>XT(r6dRf zlv4PkW!LPr%_6A^X5&G zBmofld|nlc#T`P3(e>+Js$RZ4_V-3`>eQL-Ns`QJnx;(Cq|s;~r6iR~vADQM7>49> zIWn0Hwrx`=6a>%&d^b8e@=#+wkU)R`002Wn!&`3My7g5UhRQTeq3gd1W?2^V^YhrY zjqAGTx{hU8)M_=7BtZxvfTub--d0k|=l*O%#2*WHb#(&J*LUn&(=@lv&dw^&^MsU= zMx%ic0@E~6N}=mIFJ}pdoO$UcK?#iW}kIkmqw$(!omXCY!<^Xh@uF~vXD|TJw1(OSyZc4nwy&` zm&>@Wi|e{vyLJr#$8m_`m`0q|<4nlvFAeG)=>C8~~J3c%DbSUMG%YGMNnZdYyW`P8fy&NGZ`Y?e0i04CCps zv9ZHz*S_%c)vK3(Y;W&aQb6?f_Mc0oQticJkvqY7o=2@#!?tadQYfXCOsJG12m*p2 z03e^w%lk~Yb?eKywzjs{!Z3Wpw(X6RlaoeEOADn^iEK8D zWm)*XPbQN=N{R3LNGY*xo4dE6Uatd?PN$ien4qbt2~E>fk|ZLEqDTlaFg!eT@PTW1 z>C!jlD2hh*@9)|+Gc)r{OH0d+xw*MlSFKt#+GsSEq%D<7OP%??k6{?-x=xZLD5a=W zDvXbhV_6oaX%ffr7f}>_5Qbs%@bJ*V->>9DPw|l>JsdjJea~B0*Z$4a_U#ntKD*6_5%6A7tz;Bz^<;e!ifYva0y85}Sb4q9e040?*=>Px# diff --git a/textures/technic_mithril_dust.png b/textures/technic_mithril_dust.png index 6afc44a274f5cf91346fcd8d8f01b6285209bc55..988e4492ff301186d1b36f6372a7d453a9fb42a8 100644 GIT binary patch literal 1289 zcmV+k1@`)hP)7YOPTi4PK^p+F1}S!`4mBWY=|rKO#j($3b~&U)`0AB>5_1sbE#q~FU) zPX6=%U-F;--0Z}GK%r|8Z-LjY{sG5F4dbI;3~#umBs`MzTS z-s%Hm&Zms^z>e1{SiK>%HUx$1^Jk#z`jSBXC#?lDKkXkAShXPxz}B~KudS%i zwuT~k8m3Mpo;1196{obUrl~eK>#A0=Y0_8(w0jM#4p^+ut`F@qO}Q~|fUQWNX--1n zVX7up5(P5#Dp7?Zz%V2M zzXj7&X>C1?nNN^6%SABgmp3{uuT%sdIXzG6sbtIFYr(tk4J|Noa?om3q|2p{&J-|A ziLX*);I_%oP>!nVX38s@aC=HPapIy-M8*cjg~6UJc;!*G@PRr*Zl+ zq?EYI9u}_B2B~Njt-jhLUxAoiF?p}u7yS5-1=ekf@Zmlmk1zV^#+r?NvectIn$HW0 zofe^KlJYVYi$&nA_+|a^T8#FN6lG<8raxdOJdmY67~uW}2Ly~3idrdzu%lV4=S^!qZn^`zpZm2f zD!`djd&Jt8Lq|Lwbww`cAUSL>nvzVZvye(j%1RY{UX5a>LMmM#n+1mhdU`V?6C>pE zR{TCIiKN700V$m5$vza-g|noFi4(kJGdUy$>Vl0@wfL45l!qoqdpCWqHO=pB@Rl3P zLy_E5qoW2>>urFPXU|1MUCks6)5Ky?7>XKLtpY_62q94r#1fM7atGl7$%SujVi=O@ z$rJEaxEa-JiO0GT!b)F%H!fFzq1)|TZ@(l|Rdm?wp5p-G&O5o@^ZL$R%c3!3jjKd$ zK6QFPYo6t!v$Kbqnn@Hp75YLcs;eC2^OC-hfnk_<+$xG9$mJ!vK8mW^2?UC0Y55k9 zryQ%*le z=k04-xc#>yDem?VtymZ0=-~->>^-(9{K(Y0Oz!fPuF&$Q=Z%~>duwig$j}n8PM%pl zQ$PCY*{e|IDHM96;f~chAjdy1_CUALkd$`##@sGfR?$CtH(A(}pm~3kxh-7*EX52w#!vD3UGa nlyQ}(g;DA!$F?l1u11C>4Z0_l+Fv#Ujc4$5^>bP0l+XkKMV>B< diff --git a/textures/technic_silver_dust.png b/textures/technic_silver_dust.png index 947e0592ec6db07cadf81fcb9f9d6a6c87d5e58a..9092c90dc29505a7c9b735f7da056578cc4fc34f 100644 GIT binary patch literal 1295 zcmV+q1@QWbP)N`i&}y}YR8)Jb3WS+S;1w zbUG=TrU3vf%Oao8qqDOUy}i9)7zS>)8kCdf#-Q-G8qJeLEOE2 zcPEZnC=@nmn$9$v&C8mm<=k$!GCn^3b_Es|77&R+ynOi*`}glhtJOlGPyoX)=Q!oCVPV4K@x%?ofGCP+Hk$~C!)P=b=XY&NW}u42!gJ?QD_K`0bLv)P1U7&vm|i0O8_KkMr13QSK= z|3D@tCU~FE_qiYlA2%8e@H`KSqRg3@8LF?Z54x^{VHi}a)t%FTqF!4^mSy<;e$;9; z%+AijFbwcK55M1!P$-0QxeS`7Q79DP_xn*Ql`ua)PZ2_v_U_&L^IIkaz^<;Yepank zzhGJR_{_`i5Tv9Xpjyr$cAXoEd)n`0*!a z&z_x>Wf_7Xpja#-o6W*vv7l5cVR?BOcDo%6!$46KSglqRi$z?!b`2hn2M&h=&1Unb zm6esRpFVx+OC%Ck-fT(gT@TUy`}Z+4H1vnLsi~9Rx+79RjbuV zxm?ER=%{@C`t_W{;b80a`udF7!NeS*coRGXFFD9Y2x&zGF?dlA z0Z;z9cMu5(9$jW3u$Ns1qnnL$S>i>|A!Gv1(n)4B)7>*YT|HIh!R$f^LR<|f%J0jK3+`Sz1_0RF+WIt(<6mssF4x!B8=w6! zJd^-(n4*o1jn6I1y4dM-u&}UzG))o5aZ5^hJ`BU3pUMOpXKVYNzr`54nCCfyAb=18 zNs_>EoEL&1xEV#!!c&>RjT<+t!C>%(<2dhXt%(o8zkh$rwr$NhCt7PrDPb4}27>_{$H90!MwVrul!8)2(+k$|5r9KrF+z5R^;Xqx89y}dmh1Obs!LP`lj2u#z2QVNwy1-EY9f^FOIeIE}V zJb>dk=ytpCJP!bLk|cdf>5fwBBLFu)`QV-W-cUWhg66q8j$iJf(P*?cH#fCqStpfJ zFin#H0Amc4QgF^e2tmK!-*-Ri^*V;bA$;G5@B09NBuOxtOo(9^HKo*P0NVhrZd~7? zk9pwkrDHgKWe?Y`U27CYv1FPi0H7>Oc%BEXHTwNNlu`$ywrv|h5P)-z(P#wE^DvoA zkYyPx%K{+;OBm(K_x&KZVr ze0O)(n46nJzu(8q%nVG^#Aq~v>$*@%A^a%(dP)b1v0ZJ(x$3dsl0p}b5GypOh zjmDJHFIQGpKK{!XZl0^-l`DH#TU&d^^So2NUN1R%^yrx^%T@p!#Lx4*gRW<1XAgF+ zwMLqzNRkAu>%y`u2qCT(Me)55A_~JWBM%il(M|Zx86R(cH+b}2Xf$5*eP6_J++AE; z%;GqHsVE8~%Q7r3E~f2v`=((Sfe@lMnM~3!4E6N$GG)q?|15t1_apPve-GZm00000 LNkvXXu0mjfc!B{j literal 0 HcmV?d00001 diff --git a/textures/technic_stainless_steel_ingot.png b/textures/technic_stainless_steel_ingot.png new file mode 100644 index 0000000000000000000000000000000000000000..46fa2969138ec086e8a9b9bcb9a70fee7794f076 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRt!3HF+tk*dLq}Y|gW!U_%O?XxI14-? ziy0XBfU`+9({2mwI z`o3?i|My=kph=S^|7RAjeSHc51^^E(e)``jx~gjj0ATsXuC4bz_Jo{q|3mWe6|46F z!1Ru}qt2&}cEiy_2e4rEx_1;+-8eFk!KA5o!YP-ggk!OXxyQdB>A#X4O+MwX1}<2= z?w6Cl^{f#Jy=Iq+Xibel)v-|+$-)SR?@pvry_2U+A2*r?*k29Qqe*|~sx!RhbNEI=p%vQV6t! z!*I%FR2&PjWIKY97y`PE3nzOCfCk`j@8Ry74(1ITSo-Q40Du>^?(FElcy7OI+miYH zq^K%D1YbbI)$AYwx`ALg3YDn{7zS#t3+^>QL} zdE?i9O`o03T$YK{7!sVrYcxQL0-rwsDFqnw;q;Lnw1gsvwYA~u&>&jE5e!|vh+rfN zB1PI|(^N<~E(G5srRZh8fP1X_i|cP-(TnS`ch@$|U$pGP!Zquq-V&TGIEP=;NKsYj z!4Oo&V1zR2sFa z3$Io~I37o>T1B;D!?kTlDZx31qN)I{slu3l;_>b;-;A}jpU(|sPEPNb`>O=B@TCpA zgW>S<+(18w2&&J2tw5y$%`hM(AcTO|s6%iLDJASu5l*=TfDmtMhh-L_Fb3N!!pvns zDubpQ(1Sr(#R7y7NTkxTVwI^}$nQSU^VJGAuXD-mMkw^8V-_FrYBj{$QvgWzojpyl zWD-JfD2$;}wxIeL6jC6-K?GDQ4z!jKoU)1jpUy*YfoN+IMktJ$TS3LPKnkIpzlwli zz$ulG8|WuRQO+@+|MTmH(68&!r(W6AS+UE{1T=l-r5{hRu@fgFKRkqJYZ87)6R72lsFOttIJZ4^iiHYw^hk@BMCV{-R~G z67A{wVBe*|J7#v+m(HA;W1B@*u`NuU(P5qX?wei$MWvMaqlXSy0A%y?(xgd~|13WP XIWzX!=bTJ&00000NkvXXu0mjfR&z@1 literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@RhecuyC{kcwN$2@dXF;M=m=UPt4E= zzj9_4YuFuwdb=6x=2;5oIoMuclGvSfj7Nl-QFNo<&siNm-U6*+@O1TaS?83{1OOnH BIK2P> -- 2.30.2