From 167434085cf62f133aaeaeadd7f9eb80d946189f Mon Sep 17 00:00:00 2001 From: Maciej Kasatkin Date: Tue, 21 Aug 2012 07:18:33 +0200 Subject: [PATCH] upload --- .gitattributes | 22 + .gitignore | 163 +++++ concrete.lua | 74 +++ copper_chest.lua | 162 +++++ depends.txt | 7 + dyes.lua | 40 ++ electric.lua | 588 ++++++++++++++++++ gold_chest.lua | 452 ++++++++++++++ grinder.lua | 236 +++++++ init.lua | 55 ++ iron_chest.lua | 151 +++++ mining_laser_mk1.lua | 153 +++++ mithril_chest.lua | 145 +++++ music_player.lua | 124 ++++ ores.lua | 60 ++ silver_chest.lua | 197 ++++++ solar.lua | 23 + sounds/technic_laser.ogg | Bin 0 -> 13465 bytes textures/technic_battery.png | Bin 0 -> 247 bytes textures/technic_battery_box_bottom.png | Bin 0 -> 439 bytes textures/technic_battery_box_side.png | Bin 0 -> 602 bytes textures/technic_battery_box_top.png | Bin 0 -> 208 bytes textures/technic_battery_reload.png | Bin 0 -> 8201 bytes textures/technic_coal_dust.png | Bin 0 -> 144 bytes textures/technic_concrete_block.png | Bin 0 -> 2319 bytes textures/technic_copper_chest_front.png | Bin 0 -> 2614 bytes textures/technic_copper_chest_locked.png | Bin 0 -> 2682 bytes textures/technic_copper_chest_side.png | Bin 0 -> 2568 bytes textures/technic_copper_chest_top.png | Bin 0 -> 2521 bytes textures/technic_copper_dust.png | Bin 0 -> 146 bytes textures/technic_diamond.png | Bin 0 -> 693 bytes textures/technic_electric_furnace_bottom.png | Bin 0 -> 423 bytes textures/technic_electric_furnace_front.png | Bin 0 -> 443 bytes .../technic_electric_furnace_front_active.png | Bin 0 -> 448 bytes textures/technic_electric_furnace_side.png | Bin 0 -> 399 bytes textures/technic_electric_furnace_top.png | Bin 0 -> 393 bytes textures/technic_gold_chest_front.png | Bin 0 -> 2653 bytes textures/technic_gold_chest_front_black.png | Bin 0 -> 2659 bytes textures/technic_gold_chest_front_blue.png | Bin 0 -> 2666 bytes textures/technic_gold_chest_front_brown.png | Bin 0 -> 2674 bytes textures/technic_gold_chest_front_cyan.png | Bin 0 -> 2675 bytes .../technic_gold_chest_front_dark_green.png | Bin 0 -> 2672 bytes .../technic_gold_chest_front_dark_grey.png | Bin 0 -> 2659 bytes textures/technic_gold_chest_front_green.png | Bin 0 -> 2665 bytes textures/technic_gold_chest_front_grey.png | Bin 0 -> 2678 bytes textures/technic_gold_chest_front_magenta.png | Bin 0 -> 2673 bytes textures/technic_gold_chest_front_orange.png | Bin 0 -> 2667 bytes textures/technic_gold_chest_front_pink.png | Bin 0 -> 2672 bytes textures/technic_gold_chest_front_red.png | Bin 0 -> 2661 bytes textures/technic_gold_chest_front_violet.png | Bin 0 -> 2668 bytes textures/technic_gold_chest_front_white.png | Bin 0 -> 2660 bytes textures/technic_gold_chest_front_yellow.png | Bin 0 -> 2669 bytes textures/technic_gold_chest_locked.png | Bin 0 -> 2717 bytes textures/technic_gold_chest_locked_black.png | Bin 0 -> 2720 bytes textures/technic_gold_chest_locked_blue.png | Bin 0 -> 2728 bytes textures/technic_gold_chest_locked_brown.png | Bin 0 -> 2736 bytes textures/technic_gold_chest_locked_cyan.png | Bin 0 -> 2735 bytes .../technic_gold_chest_locked_dark_green.png | Bin 0 -> 2734 bytes .../technic_gold_chest_locked_dark_grey.png | Bin 0 -> 2722 bytes textures/technic_gold_chest_locked_green.png | Bin 0 -> 2724 bytes textures/technic_gold_chest_locked_grey.png | Bin 0 -> 2732 bytes .../technic_gold_chest_locked_magenta.png | Bin 0 -> 2732 bytes textures/technic_gold_chest_locked_orange.png | Bin 0 -> 2728 bytes textures/technic_gold_chest_locked_pink.png | Bin 0 -> 2730 bytes textures/technic_gold_chest_locked_red.png | Bin 0 -> 2721 bytes textures/technic_gold_chest_locked_violet.png | Bin 0 -> 2728 bytes textures/technic_gold_chest_locked_white.png | Bin 0 -> 2723 bytes textures/technic_gold_chest_locked_yellow.png | Bin 0 -> 2728 bytes textures/technic_gold_chest_side.png | Bin 0 -> 2617 bytes textures/technic_gold_chest_top.png | Bin 0 -> 2558 bytes textures/technic_gold_dust.png | Bin 0 -> 185 bytes textures/technic_grinder_front.png | Bin 0 -> 777 bytes textures/technic_grinder_side.png | Bin 0 -> 692 bytes textures/technic_grinder_top.png | Bin 0 -> 465 bytes textures/technic_iron_chest_front.png | Bin 0 -> 2515 bytes textures/technic_iron_chest_locked.png | Bin 0 -> 2603 bytes textures/technic_iron_chest_side.png | Bin 0 -> 2478 bytes textures/technic_iron_chest_top.png | Bin 0 -> 2432 bytes textures/technic_iron_dust.png | Bin 0 -> 148 bytes textures/technic_laser_beam.png | Bin 0 -> 119 bytes textures/technic_lv_cable.png | Bin 0 -> 458 bytes textures/technic_lv_cable_wield.png | Bin 0 -> 205 bytes textures/technic_machine_bottom.png | Bin 0 -> 572 bytes textures/technic_mineral_diamond.png | Bin 0 -> 904 bytes textures/technic_mining_laser_mk1.png | Bin 0 -> 358 bytes textures/technic_mithril_chest_front.png | Bin 0 -> 2656 bytes textures/technic_mithril_chest_locked.png | Bin 0 -> 2716 bytes textures/technic_mithril_chest_side.png | Bin 0 -> 2616 bytes textures/technic_mithril_chest_top.png | Bin 0 -> 2558 bytes textures/technic_mithril_dust.png | Bin 0 -> 140 bytes textures/technic_music_player_bottom.png | Bin 0 -> 744 bytes textures/technic_music_player_side.png | Bin 0 -> 788 bytes textures/technic_music_player_top.png | Bin 0 -> 916 bytes textures/technic_power_meter.png | Bin 0 -> 209 bytes textures/technic_power_meter_bg.png | Bin 0 -> 278 bytes textures/technic_power_meter_fg.png | Bin 0 -> 465 bytes textures/technic_rebar.png | Bin 0 -> 813 bytes textures/technic_silver_chest_front.png | Bin 0 -> 2241 bytes textures/technic_silver_chest_locked.png | Bin 0 -> 2368 bytes textures/technic_silver_chest_side.png | Bin 0 -> 2146 bytes textures/technic_silver_chest_top.png | Bin 0 -> 2226 bytes textures/technic_silver_dust.png | Bin 0 -> 148 bytes textures/technic_solar_panel_side.png | Bin 0 -> 465 bytes textures/technic_solar_panel_top.png | Bin 0 -> 569 bytes textures/technic_tin_dust.png | Bin 0 -> 152 bytes textures/technic_workshop_bottom.png | Bin 0 -> 744 bytes textures/technic_workshop_side.png | Bin 0 -> 589 bytes textures/technic_workshop_top.png | Bin 0 -> 555 bytes tool_workshop.lua | 93 +++ water.lua | 588 ++++++++++++++++++ wires.lua | 400 ++++++++++++ 111 files changed, 3733 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 concrete.lua create mode 100644 copper_chest.lua create mode 100644 depends.txt create mode 100644 dyes.lua create mode 100644 electric.lua create mode 100644 gold_chest.lua create mode 100644 grinder.lua create mode 100644 init.lua create mode 100644 iron_chest.lua create mode 100644 mining_laser_mk1.lua create mode 100644 mithril_chest.lua create mode 100644 music_player.lua create mode 100644 ores.lua create mode 100644 silver_chest.lua create mode 100644 solar.lua create mode 100644 sounds/technic_laser.ogg create mode 100644 textures/technic_battery.png create mode 100644 textures/technic_battery_box_bottom.png create mode 100644 textures/technic_battery_box_side.png create mode 100644 textures/technic_battery_box_top.png create mode 100644 textures/technic_battery_reload.png create mode 100644 textures/technic_coal_dust.png create mode 100644 textures/technic_concrete_block.png create mode 100644 textures/technic_copper_chest_front.png create mode 100644 textures/technic_copper_chest_locked.png create mode 100644 textures/technic_copper_chest_side.png create mode 100644 textures/technic_copper_chest_top.png create mode 100644 textures/technic_copper_dust.png create mode 100644 textures/technic_diamond.png create mode 100644 textures/technic_electric_furnace_bottom.png create mode 100644 textures/technic_electric_furnace_front.png create mode 100644 textures/technic_electric_furnace_front_active.png create mode 100644 textures/technic_electric_furnace_side.png create mode 100644 textures/technic_electric_furnace_top.png create mode 100644 textures/technic_gold_chest_front.png create mode 100644 textures/technic_gold_chest_front_black.png create mode 100644 textures/technic_gold_chest_front_blue.png create mode 100644 textures/technic_gold_chest_front_brown.png create mode 100644 textures/technic_gold_chest_front_cyan.png create mode 100644 textures/technic_gold_chest_front_dark_green.png create mode 100644 textures/technic_gold_chest_front_dark_grey.png create mode 100644 textures/technic_gold_chest_front_green.png create mode 100644 textures/technic_gold_chest_front_grey.png create mode 100644 textures/technic_gold_chest_front_magenta.png create mode 100644 textures/technic_gold_chest_front_orange.png create mode 100644 textures/technic_gold_chest_front_pink.png create mode 100644 textures/technic_gold_chest_front_red.png create mode 100644 textures/technic_gold_chest_front_violet.png create mode 100644 textures/technic_gold_chest_front_white.png create mode 100644 textures/technic_gold_chest_front_yellow.png create mode 100644 textures/technic_gold_chest_locked.png create mode 100644 textures/technic_gold_chest_locked_black.png create mode 100644 textures/technic_gold_chest_locked_blue.png create mode 100644 textures/technic_gold_chest_locked_brown.png create mode 100644 textures/technic_gold_chest_locked_cyan.png create mode 100644 textures/technic_gold_chest_locked_dark_green.png create mode 100644 textures/technic_gold_chest_locked_dark_grey.png create mode 100644 textures/technic_gold_chest_locked_green.png create mode 100644 textures/technic_gold_chest_locked_grey.png create mode 100644 textures/technic_gold_chest_locked_magenta.png create mode 100644 textures/technic_gold_chest_locked_orange.png create mode 100644 textures/technic_gold_chest_locked_pink.png create mode 100644 textures/technic_gold_chest_locked_red.png create mode 100644 textures/technic_gold_chest_locked_violet.png create mode 100644 textures/technic_gold_chest_locked_white.png create mode 100644 textures/technic_gold_chest_locked_yellow.png create mode 100644 textures/technic_gold_chest_side.png create mode 100644 textures/technic_gold_chest_top.png create mode 100644 textures/technic_gold_dust.png create mode 100644 textures/technic_grinder_front.png create mode 100644 textures/technic_grinder_side.png create mode 100644 textures/technic_grinder_top.png create mode 100644 textures/technic_iron_chest_front.png create mode 100644 textures/technic_iron_chest_locked.png create mode 100644 textures/technic_iron_chest_side.png create mode 100644 textures/technic_iron_chest_top.png create mode 100644 textures/technic_iron_dust.png create mode 100644 textures/technic_laser_beam.png create mode 100644 textures/technic_lv_cable.png create mode 100644 textures/technic_lv_cable_wield.png create mode 100644 textures/technic_machine_bottom.png create mode 100644 textures/technic_mineral_diamond.png create mode 100644 textures/technic_mining_laser_mk1.png create mode 100644 textures/technic_mithril_chest_front.png create mode 100644 textures/technic_mithril_chest_locked.png create mode 100644 textures/technic_mithril_chest_side.png create mode 100644 textures/technic_mithril_chest_top.png create mode 100644 textures/technic_mithril_dust.png create mode 100644 textures/technic_music_player_bottom.png create mode 100644 textures/technic_music_player_side.png create mode 100644 textures/technic_music_player_top.png create mode 100644 textures/technic_power_meter.png create mode 100644 textures/technic_power_meter_bg.png create mode 100644 textures/technic_power_meter_fg.png create mode 100644 textures/technic_rebar.png create mode 100644 textures/technic_silver_chest_front.png create mode 100644 textures/technic_silver_chest_locked.png create mode 100644 textures/technic_silver_chest_side.png create mode 100644 textures/technic_silver_chest_top.png create mode 100644 textures/technic_silver_dust.png create mode 100644 textures/technic_solar_panel_side.png create mode 100644 textures/technic_solar_panel_top.png create mode 100644 textures/technic_tin_dust.png create mode 100644 textures/technic_workshop_bottom.png create mode 100644 textures/technic_workshop_side.png create mode 100644 textures/technic_workshop_top.png create mode 100644 tool_workshop.lua create mode 100644 water.lua create mode 100644 wires.lua diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ebd21a --- /dev/null +++ b/.gitignore @@ -0,0 +1,163 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Rr]elease/ +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.vspscc +.builds +*.dotCover + +## TODO: If you have NuGet Package Restore enabled, uncomment this +#packages/ + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf + +# Visual Studio profiler +*.psess +*.vsp + +# ReSharper is a .NET coding add-in +_ReSharper* + +# Installshield output folder +[Ee]xpress + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish + +# Others +[Bb]in +[Oo]bj +sql +TestResults +*.Cache +ClientBin +stylecop.* +~$* +*.dbmdl +Generated_Code #added for RIA/Silverlight projects + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML + + + +############ +## Windows +############ + +# Windows image file caches +Thumbs.db + +# Folder config file +Desktop.ini + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +bin +var +sdist +develop-eggs +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg + +# Mac crap +.DS_Store diff --git a/concrete.lua b/concrete.lua new file mode 100644 index 0000000..0a480a0 --- /dev/null +++ b/concrete.lua @@ -0,0 +1,74 @@ + +minetest.register_craft({ + output = 'technic:rebar 6', + recipe = { + {'','', 'default:steel_ingot'}, + {'','default:steel_ingot',''}, + {'default:steel_ingot', '', ''}, + } +}) + +minetest.register_craft({ + output = 'technic:concrete 5', + recipe = { + {'default:stone','technic:rebar','default:stone'}, + {'technic:rebar','default:stone','technic:rebar'}, + {'default:stone','technic:rebar','default:stone'}, + } +}) + +minetest.register_craft({ + output = 'technic:concrete_post 4', + recipe = { + {'default:stone','technic:rebar','default:stone'}, + {'default:stone','technic:rebar','default:stone'}, + {'default:stone','technic:rebar','default:stone'}, +} +}) + +minetest.register_craftitem("technic:rebar", { + description = "Rebar", + inventory_image = "technic_rebar.png", + stack_max = 99, +}) + +minetest.register_craftitem("technic:concrete", { + description = "Concrete Block", + inventory_image = "technic_concrete_block.png", + stack_max = 99, +}) + +minetest.register_craftitem("technic:concrete_post", { + description = "Concrete Post", + inventory_image = "technic_concrete_post.png", + stack_max = 99, +}) + + + +-- NODES: + +minetest.register_node("technic:concrete", { + description = "Concrete Block", + tile_images = {"technic_concrete_block.png",}, + is_ground_content = true, + groups = {cracky=1}, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("technic:concrete_post", { + description = "Concrete Post", + drawtype = "fencelike", + tiles = {"technic_concrete_block.png"}, + inventory_image = "default_fence.png", + wield_image = "default_fence.png", + paramtype = "light", + is_ground_content = true, + selection_box = { + type = "fixed", + fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, + }, + + groups = {cracky=1}, + sounds = default.node_sound_stone_defaults(), +}) \ No newline at end of file diff --git a/copper_chest.lua b/copper_chest.lua new file mode 100644 index 0000000..cf1ae06 --- /dev/null +++ b/copper_chest.lua @@ -0,0 +1,162 @@ +minetest.register_craft({ + output = 'technic:copper_chest 1', + recipe = { + {'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'}, + {'moreores:copper_ingot','technic:iron_chest','moreores:copper_ingot'}, + {'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:copper_locked_chest 1', + recipe = { + {'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'}, + {'moreores:copper_ingot','technic:iron_locked_chest','moreores:copper_ingot'}, + {'moreores:copper_ingot','moreores:copper_ingot','moreores:copper_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:copper_locked_chest 1', + recipe = { + {'default:steel_ingot'}, + {'technic:copper_chest'}, + } +}) + +minetest.register_craftitem("technic:copper_chest", { + description = "Copper Chest", + stack_max = 99, +}) +minetest.register_craftitem("technic:copper_locked_chest", { + description = "Copper Locked Chest", + stack_max = 99, +}) + +minetest.register_node("technic:copper_chest", { + description = "Copper Chest", + tiles = {"technic_copper_chest_top.png", "technic_copper_chest_top.png", "technic_copper_chest_side.png", + "technic_copper_chest_side.png", "technic_copper_chest_side.png", "technic_copper_chest_front.png"}, + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "invsize[10,9;]".. + "list[current_name;main;0,0;10,4;]".. + "list[current_player;main;0,5;8,4;]") + meta:set_string("infotext", "Copper Chest") + local inv = meta:get_inventory() + inv:set_size("main", 10*4) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + + on_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in chest at "..minetest.pos_to_string(pos)) + return minetest.node_metadata_inventory_move_allow_all( + pos, from_list, from_index, to_list, to_index, count, player) + end, + on_metadata_inventory_offer = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to chest at "..minetest.pos_to_string(pos)) + return minetest.node_metadata_inventory_offer_allow_all( + pos, listname, index, stack, player) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from chest at "..minetest.pos_to_string(pos)) + end, +}) + + +local function has_locked_chest_privilege(meta, player) + if player:get_player_name() ~= meta:get_string("owner") then + return false + end + return true +end + +minetest.register_node("technic:copper_locked_chest", { + description = "Copper Locked Chest", + tiles = {"technic_copper_chest_top.png", "technic_copper_chest_top.png", "technic_copper_chest_side.png", + "technic_copper_chest_side.png", "technic_copper_chest_side.png", "technic_copper_chest_locked.png"}, + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer) + local meta = minetest.env:get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Copper Locked Chest (owned by ".. + meta:get_string("owner")..")") + end, +on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "invsize[10,9;]".. + "list[current_name;main;0,0;10,4;]".. + "list[current_player;main;0,5;8,4;]") + meta:set_string("infotext", "Copper Locked Chest") + meta:set_string("owner", "") + local inv = meta:get_inventory() + inv:set_size("main", 10*4) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in locked chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to locked chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from locked chest at "..minetest.pos_to_string(pos)) + end, +}) diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..d2e492a --- /dev/null +++ b/depends.txt @@ -0,0 +1,7 @@ +default +moreores +stairs +flowers +dye + + diff --git a/dyes.lua b/dyes.lua new file mode 100644 index 0000000..a81988e --- /dev/null +++ b/dyes.lua @@ -0,0 +1,40 @@ +minetest.register_craft({ + type = "cooking", + output = "dye:black 2", + recipe = "default:coal_lump", +}) +minetest.register_craft({ + type = "cooking", + output = "dye:green 2", + recipe = "default:cactus", +}) +minetest.register_craft({ + type = "cooking", + output = "dye:red 2", + recipe = "flowers:flower_rose", +}) +minetest.register_craft({ + type = "cooking", + output = "dye:blue 2", + recipe = "flowers:flower_viola", +}) +minetest.register_craft({ + type = "cooking", + output = "dye:white 2", + recipe = "flowers:flower_dandelion_white", +}) +minetest.register_craft({ + type = "cooking", + output = "dye:yellow 2", + recipe = "flowers:flower_dandelion_yellow", +}) +minetest.register_craft({ + type = "cooking", + output = "dye:orange 2", + recipe = "flowers:flower_tulip", +}) +minetest.register_craft({ + type = "cooking", + output = "dye:brown 2", + recipe = "default:dry_shrub", +}) \ No newline at end of file diff --git a/electric.lua b/electric.lua new file mode 100644 index 0000000..6ddaa46 --- /dev/null +++ b/electric.lua @@ -0,0 +1,588 @@ +minetest.register_alias("battery", "technic:battery") +minetest.register_alias("battery_box", "technic:battery_box") +minetest.register_alias("electric_furnace", "technic:electric_furnace") + + +minetest.register_craft({ + output = 'technic:battery 1', + recipe = { + {'default:wood', 'moreores:copper_ingot', 'default:wood'}, + {'default:wood', 'moreores:tin_ingot', 'default:wood'}, + {'default:wood', 'moreores:copper_ingot', 'default:wood'}, + } +}) + +minetest.register_craft({ + output = 'technic:battery_box 1', + recipe = { + {'technic:battery', 'default:wood', 'technic:battery'}, + {'technic:battery', 'moreores:copper_ingot', 'technic:battery'}, + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:electric_furnace', + recipe = { + {'default:brick', 'default:brick', 'default:brick'}, + {'default:brick', '', 'default:brick'}, + {'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'}, + } +}) + + +--minetest.register_craftitem("technic:battery", { +-- description = "Recharcheable battery", +-- inventory_image = "technic_battery.png", +-- stack_max = 1, +--}) + +minetest.register_tool("technic:battery", +{description = "RE Battery", +inventory_image = "technic_battery.png", +energy_charge = 0, +tool_capabilities = {max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}}) + +minetest.register_craftitem("technic:battery_box", { + description = "Battery box", + stack_max = 99, +}) + + + +battery_box_formspec = + "invsize[8,9;]".. + "image[1,1;1,2;technic_power_meter_bg.png]".. + "list[current_name;src;3,1;1,1;]".. + "image[4,1;1,1;technic_battery_reload.png]".. + "list[current_name;dst;5,1;1,1;]".. + "label[0,0;Battery box]".. + "label[3,0;Charge]".. + "label[5,0;Discharge]".. + "label[1,3;Power level]".. + "list[current_player;main;0,5;8,4;]" + +minetest.register_node("technic:battery_box", { + description = "Battery box", + tiles = {"technic_battery_box_top.png", "technic_battery_box_bottom.png", "technic_battery_box_side.png", + "technic_battery_box_side.png", "technic_battery_box_side.png", "technic_battery_box_side.png"}, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + technic_power_machine=1, + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("infotext", "Battery box") + meta:set_float("technic_power_machine", 1) + meta:set_string("formspec", battery_box_formspec) + local inv = meta:get_inventory() + inv:set_size("src", 1) + inv:set_size("dst", 1) + battery_charge = 0 + max_charge = 60000 + 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, +}) + +electric_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;dst;5,1;2,2;]".. + "list[current_player;main;0,5;8,4;]".. + "label[0,0;Electric Furnace]".. + "label[1,3;Power level]" + +minetest.register_node("technic:electric_furnace", { + description = "Electric furnace", + tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png", + "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_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", electric_furnace_formspec) + meta:set_string("infotext", "Electric 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 + 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 + elseif not inv:is_empty("src") then + return false + end + return true + end, +}) + +minetest.register_node("technic:electric_furnace_active", { + description = "Electric Furnace", + tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png", + "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front_active.png"}, + paramtype2 = "facedir", + light_source = 8, + drop = "technic:electric_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", electric_furnace_formspec) + meta:set_string("infotext", "Electric 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:electric_furnace","technic:electric_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;dst;5,1;2,2;]".. + "list[current_player;main;0,5;8,4;]".. + "label[0,0;Electric Furnace]".. + "label[1,3;Power level]") + + local inv = meta:get_inventory() + + local furnace_is_cookin = meta:get_float("furnace_is_cookin") + + + local srclist = inv:get_list("src") + local cooked=nil + + if srclist then + cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) + 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") + 3) + if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then + -- check if there's room for output in "dst" list + if inv:room_for_item("dst",cooked.item) then + -- Put result in "dst" list + inv:add_item("dst", cooked.item) + -- take stuff from "src" list + srcstack = inv:get_stack("src", 1) + srcstack:take_item() + inv:set_stack("src", 1, srcstack) + else + print("Furnace inventory full!") + end + meta:set_string("src_time", 0) + end + end + end + + + + + if srclist then + cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) + if cooked.time>0 then + hacky_swap_node(pos,"technic:electric_furnace_active") + meta:set_string("infotext","Furnace active") + meta:set_string("furnace_is_cookin",1) + -- meta:set_string("formspec", electric_furnace_formspec) + meta:set_string("src_time", 0) + return + end + + end + + hacky_swap_node(pos,"technic:electric_furnace") + meta:set_string("infotext","Furnace inactive") + meta:set_string("furnace_is_cookin",0) + -- meta:set_string("formspec", electric_furnace_formspec) + meta:set_string("src_time", 0) + + +end, +}) + + + + +function take_EU_from_net(pos, EU_to_take) + local meta = minetest.env:get_meta(pos) + local pos1=pos + pos1.z=pos1.z +1 + local meta1 = minetest.env:get_meta(pos1) + charge=meta1:get_float("battery_charge") + charge=charge - EU_to_take + meta1:set_float("battery_charge",charge) +end + + LV_nodes_visited = {} + +function get_RE_item_load (load1,max_load) +if load1==0 then load1=65535 end +local temp = 65536-load1 +temp= temp/65535*max_load +return math.floor(temp + 0.5) +end + +function set_RE_item_load (load1,max_load) +if load1 == 0 then return 65535 end +local temp=load1/max_load*65535 +temp=65536-temp +return math.floor(temp) +end + +minetest.register_abm({ + nodenames = {"technic:battery_box"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local meta = minetest.env:get_meta(pos) + charge= meta:get_float("battery_charge") + max_charge= 60000 + + local inv = meta:get_inventory() + if inv:is_empty("src")==false then + srcstack = inv:get_stack("src", 1) + src_item=srcstack:to_table() + if src_item["name"]== "technic:battery" then + local load1=tonumber((src_item["wear"])) + load1=get_RE_item_load(load1,10000) + load_step=1000 + if load1<10000 and charge>0 then + if charge-load_step<0 then load_step=charge end + if load1+load_step>10000 then load_step=10000-load1 end + load1=load1+load_step + charge=charge-load_step + + load1=set_RE_item_load(load1,10000) + src_item["wear"]=tostring(load1) + inv:set_stack("src", 1, src_item) + end + end + end + meta:set_float("battery_charge",charge) + + + if inv:is_empty("src")==false then + srcstack = inv:get_stack("src", 1) + src_item=srcstack:to_table() + if src_item["name"]== "technic:laser_mk1" then + local load1=tonumber((src_item["wear"])) + load1=get_RE_item_load(load1,40000) + load_step=1000 + if load1<40000 and charge>0 then + if charge-load_step<0 then load_step=charge end + if load1+load_step>40000 then load_step=40000-load1 end + load1=load1+load_step + charge=charge-load_step + load1=set_RE_item_load(load1,40000) + src_item["wear"]=tostring(load1) + inv:set_stack("src", 1, src_item) + end + end + end + meta:set_float("battery_charge",charge) + + + if inv:is_empty("dst") == false then + srcstack = inv:get_stack("dst", 1) + src_item=srcstack:to_table() + if src_item["name"]== "technic:battery" then + local load1=tonumber((src_item["wear"])) + load1=get_RE_item_load(load1,10000) + load_step=1000 + if load1>0 and chargemax_charge then load_step=max_charge-charge end + if load1-load_step<0 then load_step=load1 end + load1=load1-load_step + charge=charge+load_step + + load1=set_RE_item_load(load1,10000) + src_item["wear"]=tostring(load1) + inv:set_stack("dst", 1, src_item) + end + end + end + + + meta:set_float("battery_charge",charge) + meta:set_string("infotext", "Battery box: "..charge.."/"..max_charge); + + local load = math.floor(charge/60000 * 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;]".. + "image[4,1;1,1;technic_battery_reload.png]".. + "list[current_name;dst;5,1;1,1;]".. + "label[0,0;Battery box]".. + "label[3,0;Charge]".. + "label[5,0;Discharge]".. + "label[1,3;Power level]".. + "list[current_player;main;0,5;8,4;]") + + local pos1={} + + pos1.y=pos.y-1 + pos1.x=pos.x + pos1.z=pos.z + + + meta1 = minetest.env:get_meta(pos1) + if meta1:get_float("cablelike")~=1 then return end + + local LV_nodes = {} + local PR_nodes = {} + local RE_nodes = {} + + LV_nodes[1]={} + LV_nodes[1].x=pos1.x + LV_nodes[1].y=pos1.y + LV_nodes[1].z=pos1.z + LV_nodes[1].visited=false + + +table_index=1 + repeat + check_LV_node (PR_nodes,RE_nodes,LV_nodes,table_index) + table_index=table_index+1 + if LV_nodes[table_index]==nil then break end + until false + + +local pos1={} +i=1 + repeat + if PR_nodes[i]==nil then break end + pos1.x=PR_nodes[i].x + pos1.y=PR_nodes[i].y + pos1.z=PR_nodes[i].z + local meta1 = minetest.env:get_meta(pos1) + local active=meta1:get_float("active") + if active==1 then charge=charge+80 end + i=i+1 + until false + +if charge>max_charge then charge=max_charge end + +i=1 + repeat + if RE_nodes[i]==nil then break end + pos1.x=RE_nodes[i].x -- loading all conected machines buffers + pos1.y=RE_nodes[i].y + pos1.z=RE_nodes[i].z + local meta1 = minetest.env:get_meta(pos1) + local internal_EU_buffer=meta1:get_float("internal_EU_buffer") + local internal_EU_buffer_size=meta1:get_float("internal_EU_buffer_size") + + local charge_to_give=200 + if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then + charge_to_give=internal_EU_buffer_size-internal_EU_buffer + end + if charge-charge_to_give<0 then charge_to_give=charge end + + internal_EU_buffer=internal_EU_buffer+charge_to_give + meta1:set_float("internal_EU_buffer",internal_EU_buffer) + charge=charge-charge_to_give; + + i=i+1 + until false + + meta:set_float("battery_charge",charge) + meta:set_string("infotext", "Battery box: "..charge.."/"..max_charge); + + +end +}) + +function add_new_cable_node (LV_nodes,pos1) +local i=1 + repeat + if LV_nodes[i]==nil then break end + if pos1.x==LV_nodes[i].x and pos1.y==LV_nodes[i].y and pos1.z==LV_nodes[i].z then return false end + i=i+1 + until false +LV_nodes[i]={} +LV_nodes[i].x=pos1.x +LV_nodes[i].y=pos1.y +LV_nodes[i].z=pos1.z +LV_nodes[i].visited=false +return true +end + +function check_LV_node (PR_nodes,RE_nodes,LV_nodes,i) + local pos1={} + pos1.x=LV_nodes[i].x + pos1.y=LV_nodes[i].y + pos1.z=LV_nodes[i].z + LV_nodes[i].visited=true + new_node_added=false + + pos1.x=pos1.x+1 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.x=pos1.x-2 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.x=pos1.x+1 + + pos1.y=pos1.y+1 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.y=pos1.y-2 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.y=pos1.y+1 + + pos1.z=pos1.z+1 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.z=pos1.z-2 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.z=pos1.z+1 +return new_node_added +end + +function check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) +meta = minetest.env:get_meta(pos1) +if meta:get_float("cablelike")==1 then new_node_added=add_new_cable_node(LV_nodes,pos1) end +if minetest.env:get_node(pos1).name == "technic:solar_panel" 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 +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 +end + + +function get_connected_charge (charge,pos1) + local charge1=0 + local meta={} + if minetest.env:get_node(pos1).name == "technic:battery_box" then + print ("found batbox") + meta = minetest.env:get_meta(pos1) + return meta:get_float("cable_OUT") + end + + if minetest.env:get_node(pos1).name == "technic:lv_cable" then + meta = minetest.env:get_meta(pos1) + charge1=meta:get_float("cable_OUT") + if charge1>charge then + charge=charge1 + end + end +return charge +end + +minetest.register_node("technic:solar_panel", { + tiles = {"technic_solar_panel_top.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png", + "technic_solar_panel_side.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png"}, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + description="Solar Panel", + active = false, + technic_power_machine=1, + drawtype = "nodebox", + paramtype = "light", + is_ground_content = true, + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_float("technic_power_machine", 1) + meta:set_string("infotext", "Solar Panel") + meta:set_float("active", false) + end, +}) + +minetest.register_craft({ + output = 'technic:solar_panel 1', + recipe = { + {'default:sand', 'default:sand','default:sand'}, + {'default:sand', 'moreores:copper_ingot','default:sand'}, + {'default:sand', 'default:sand','default:sand'}, + + } +}) + +minetest.register_abm( + {nodenames = {"technic:solar_panel"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + + local pos1={} + pos1.y=pos.y+1 + pos1.x=pos.x + pos1.z=pos.z + + local light = minetest.env:get_node_light(pos1, nil) + local meta = minetest.env:get_meta(pos) + if light == nil then light = 0 end + if light >= 12 then + meta:set_string("infotext", "Solar Panel is active ") + meta:set_float("active",1) + else + meta:set_string("infotext", "Solar Panel is inactive"); + meta:set_float("active",0) + end + end, +}) \ No newline at end of file diff --git a/gold_chest.lua b/gold_chest.lua new file mode 100644 index 0000000..44fb313 --- /dev/null +++ b/gold_chest.lua @@ -0,0 +1,452 @@ +local chest_mark_colors = { + '', -- regular chest, without color bar + '_black', + '_blue', + '_brown', + '_cyan', + '_dark_green', + '_dark_grey', + '_green', + '_grey', + '_magenta', + '_orange', + '_pink', + '_red', + '_violet', + '_white', + '_yellow', +} + +minetest.register_craft({ + output = 'technic:gold_chest 1', + recipe = { + {'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'}, + {'moreores:gold_ingot','technic:silver_chest','moreores:gold_ingot'}, + {'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:gold_locked_chest 1', + recipe = { + {'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'}, + {'moreores:gold_ingot','technic:silver_locked_chest','moreores:gold_ingot'}, + {'moreores:gold_ingot','moreores:gold_ingot','moreores:gold_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:gold_locked_chest 1', + recipe = { + {'default:steel_ingot'}, + {'technic:gold_chest'}, + } +}) + +minetest.register_craftitem("technic:gold_chest", { + description = "Gold Chest", + stack_max = 99, +}) +minetest.register_craftitem("technic:gold_locked_chest", { + description = "Gold Locked Chest", + stack_max = 99, +}) + +for i, state in ipairs(chest_mark_colors) do +minetest.register_node("technic:gold_chest".. state, { + description = "Gold Chest", + tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png", + "technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_front"..state..".png"}, + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "invsize[12,9;]".. + "list[current_name;main;0,0;12,4;]".. + "list[current_player;main;0,5;8,4;]") + meta:set_string("infotext", "Gold Chest") + local inv = meta:get_inventory() + inv:set_size("main", 12*4) + end, + + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + + on_punch = function (pos, node, puncher) + chest_punched (pos,node,puncher); + end, + + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.env:get_meta(pos); + fields.text = fields.text or "" + meta:set_string("text", fields.text) + meta:set_string("infotext", '"'..fields.text..'"') + + meta:set_string("formspec", + "invsize[12,9;]".. + "list[current_name;main;0,0;12,4;]".. + "list[current_player;main;0,5;8,4;]") + end, + + on_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in chest at "..minetest.pos_to_string(pos)) + return minetest.node_metadata_inventory_move_allow_all( + pos, from_list, from_index, to_list, to_index, count, player) + end, + on_metadata_inventory_offer = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to chest at "..minetest.pos_to_string(pos)) + return minetest.node_metadata_inventory_offer_allow_all( + pos, listname, index, stack, player) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from chest at "..minetest.pos_to_string(pos)) + end, +}) +end + + +local function has_locked_chest_privilege(meta, player) + if player:get_player_name() ~= meta:get_string("owner") then + return false + end + return true +end + +for i, state in ipairs(chest_mark_colors) do +minetest.register_node("technic:gold_locked_chest".. state, { + description = "Gold Locked Chest", + tiles = {"technic_gold_chest_top.png", "technic_gold_chest_top.png", "technic_gold_chest_side.png", + "technic_gold_chest_side.png", "technic_gold_chest_side.png", "technic_gold_chest_locked"..state..".png"}, + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer) + local meta = minetest.env:get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Gold Locked Chest (owned by ".. + meta:get_string("owner")..")") + end, + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "invsize[12,9;]".. + "list[current_name;main;0,0;12,4;]".. + "list[current_player;main;0,5;8,4;]") + meta:set_string("infotext", "Gold Locked Chest") + meta:set_string("owner", "") + local inv = meta:get_inventory() + inv:set_size("main", 12*4) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + + on_punch = function (pos, node, puncher) + local meta = minetest.env:get_meta(pos); + if (has_locked_chest_privilege(meta, puncher)) then + locked_chest_punched (pos,node,puncher); + end + end, + + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.env:get_meta(pos); + fields.text = fields.text or "" + meta:set_string("text", fields.text) + meta:set_string("infotext", '"'..fields.text..'"') + + meta:set_string("formspec", + "invsize[12,9;]".. + "list[current_name;main;0,0;12,4;]".. + "list[current_player;main;0,5;8,4;]") + end, + + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in locked chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to locked chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from locked chest at "..minetest.pos_to_string(pos)) + end, +}) +end + +function chest_punched (pos,node,puncher) + + local player_tool = puncher:get_wielded_item(); + local item=player_tool:get_name(); + if item == "dye:black" then + if (hacky_swap_node(pos,"technic:gold_chest_black")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:blue" then + if (hacky_swap_node(pos,"technic:gold_chest_blue")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:brown" then + if (hacky_swap_node(pos,"technic:gold_chest_brown")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:cyan" then + if (hacky_swap_node(pos,"technic:gold_chest_cyan")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:dark_green" then + if (hacky_swap_node(pos,"technic:gold_chest_dark_green")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:dark_grey" then + if (hacky_swap_node(pos,"technic:gold_chest_dark_grey")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:green" then + if (hacky_swap_node(pos,"technic:gold_chest_green")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:grey" then + if (hacky_swap_node(pos,"technic:gold_chest_grey")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:magenta" then + if (hacky_swap_node(pos,"technic:gold_chest_magenta")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:orange" then + if (hacky_swap_node(pos,"technic:gold_chest_orange")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:pink" then + if (hacky_swap_node(pos,"technic:gold_chest_pink")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:red" then + if (hacky_swap_node(pos,"technic:gold_chest_red")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:violet" then + if (hacky_swap_node(pos,"technic:gold_chest_violet")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:white" then + if (hacky_swap_node(pos,"technic:gold_chest_white")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:yellow" then + if (hacky_swap_node(pos,"technic:gold_chest_yellow")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + + local meta = minetest.env:get_meta(pos); + meta:set_string("formspec", "hack:sign_text_input") + end + + +function locked_chest_punched (pos,node,puncher) + + local player_tool = puncher:get_wielded_item(); + local item=player_tool:get_name(); + if item == "dye:black" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_black")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:blue" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_blue")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:brown" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_brown")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:cyan" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_cyan")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:dark_green" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_dark_green")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:dark_grey" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_dark_grey")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:green" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_green")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:grey" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_grey")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:magenta" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_magenta")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:orange" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_orange")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:pink" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_pink")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:red" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_red")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:violet" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_violet")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:white" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_white")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + if item == "dye:yellow" then + if (hacky_swap_node(pos,"technic:gold_locked_chest_yellow")) then + player_tool:take_item(1); + puncher:set_wielded_item(player_tool); + return + end + end + + local meta = minetest.env:get_meta(pos); + meta:set_string("formspec", "hack:sign_text_input") + end + \ No newline at end of file diff --git a/grinder.lua b/grinder.lua new file mode 100644 index 0000000..b0c6722 --- /dev/null +++ b/grinder.lua @@ -0,0 +1,236 @@ +minetest.register_craftitem( "technic:coal_dust", { + description = "Coal Dust", + inventory_image = "technic_coal_dust.png", + on_place_on_ground = minetest.craftitem_place_item, + }) + +minetest.register_craftitem( "technic:iron_dust", { + description = "Iron Dust", + inventory_image = "technic_iron_dust.png", + on_place_on_ground = minetest.craftitem_place_item, + }) + +minetest.register_craft({ + type = "cooking", + output = "default:steel_ingot", + recipe = "technic:iron_dust", +}) + +minetest.register_craftitem( "technic:copper_dust", { + description = "Copper Dust", + inventory_image = "technic_copper_dust.png", + on_place_on_ground = minetest.craftitem_place_item, + }) +minetest.register_craft({ + type = "cooking", + output = "moreores:copper_ingot", + recipe = "technic:copper_dust", +}) + +minetest.register_craftitem( "technic:tin_dust", { + description = "Tin Dust", + inventory_image = "technic_tin_dust.png", + on_place_on_ground = minetest.craftitem_place_item, + }) +minetest.register_craft({ + type = "cooking", + output = "moreores:tin_ingot", + recipe = "technic:tin_dust", +}) + +minetest.register_craftitem( "technic:silver_dust", { + description = "Silver Dust", + inventory_image = "technic_silver_dust.png", + on_place_on_ground = minetest.craftitem_place_item, + }) +minetest.register_craft({ + type = "cooking", + output = "moreores:silver_ingot", + recipe = "technic:silver_dust", +}) + +minetest.register_craftitem( "technic:gold_dust", { + description = "Gold Dust", + inventory_image = "technic_gold_dust.png", + on_place_on_ground = minetest.craftitem_place_item, + }) +minetest.register_craft({ + type = "cooking", + output = "moreores:gold_ingot", + recipe = "technic:gold_dust", +}) + +minetest.register_craftitem( "technic:mithril_dust", { + description = "Mithril Dust", + inventory_image = "technic_mithril_dust.png", + on_place_on_ground = minetest.craftitem_place_item, + }) +minetest.register_craft({ + type = "cooking", + output = "moreores:mithril_ingot", + recipe = "technic:mithril_dust", +}) + +minetest.register_alias("grinder", "technic:grinder") +minetest.register_craft({ + output = 'technic:grinder', + recipe = { + {'default:desert_stone', 'default:desert_stone', 'default:desert_stone'}, + {'default:desert_stone', 'technic:diamond', 'default:desert_stone'}, + {'default:stone', 'moreores:copper_ingot', 'default:stone'}, + } +}) + +minetest.register_craftitem("technic:grinder", { + description = "Grinder", + stack_max = 99, +}) + +grinder_formspec = + "invsize[8,9;]".. + "image[1,1;1,2;technic_power_meter_bg.png]".. + "label[0,0;Grinder]".. + "label[1,3;Power level]".. + "list[current_name;src;3,1;1,1;]".. + "list[current_name;dst;5,1;2,2;]".. + "list[current_player;main;0,5;8,4;]" + + +minetest.register_node("technic:grinder", { + description = "Grinder", + tiles = {"technic_grinder_top.png", "technic_machine_bottom.png", "technic_grinder_side.png", + "technic_grinder_side.png", "technic_grinder_side.png", "technic_grinder_front.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; + grind_time=0; + grinded = nil; + src_time = 0; + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("infotext", "Grinder") + meta:set_float("technic_power_machine", 1) + meta:set_float("internal_EU_buffer", 0) + meta:set_float("internal_EU_buffer_size", 5000) + meta:set_string("formspec", grinder_formspec) + meta:set_float("grind_time", 0) + + local inv = meta:get_inventory() + inv:set_size("src", 1) + inv:set_size("dst", 4) + + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + if not inv:is_empty("src") then + return false + end + if not inv:is_empty("dst") then + return false + end + + return true + end, + +}) + +minetest.register_abm({ + nodenames = {"technic:grinder"}, + 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 grind_cost=200 + + local load = math.floor((charge/max_charge)*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]".. + "label[0,0;Grinder]".. + "label[1,3;Power level]".. + "list[current_name;src;3,1;1,1;]".. + "list[current_name;dst;5,1;2,2;]".. + "list[current_player;main;0,5;8,4;]" + ) + + + + local inv = meta:get_inventory() + +-- local grinder_on = meta:get_float("grinder_on") + + + local srclist = inv:get_list("src") + if inv:is_empty("src") then meta:set_float("grinder_on",0) end + + + if (meta:get_float("grinder_on") == 1) then + if charge>=grind_cost then + charge=charge-grind_cost; + meta:set_float("internal_EU_buffer",charge) + meta:set_float("src_time", meta:get_float("src_time") + 1) + if meta:get_float("src_time") >= meta:get_float("grind_time") then + -- check if there's room for output in "dst" list + grinded = get_grinded_item (inv:get_stack("src", 1)) + if inv:room_for_item("dst",grinded) then + -- Put result in "dst" list + inv:add_item("dst", grinded) + -- take stuff from "src" list + srcstack = inv:get_stack("src", 1) + srcstack:take_item() + inv:set_stack("src", 1, srcstack) + if inv:is_empty("src") then meta:set_float("grinder_on",0) end + + + + else + print("Grinder inventory full!") + end + meta:set_float("src_time", 0) + end + end + end + + if (meta:get_float("grinder_on")==0) then + local grinded=nil + if not inv:is_empty("src") then + grinded = get_grinded_item (inv:get_stack("src", 1)) + if grinded then meta:set_float("grinder_on",1) end + grind_time=4 + meta:set_float("grind_time",grind_time) + meta:set_float("src_time", 0) + end + end + + + end +}) + +function get_grinded_item (items) +new_item =nil +src_item=items:to_table() +item_name=src_item["name"] + +if item_name=="default:stone" then new_item=ItemStack("default:sand") return new_item end +if item_name=="default:cobble" then new_item=ItemStack("default:gravel") return new_item end +if item_name=="default:gravel" then new_item=ItemStack("default:dirt") return new_item end +if item_name=="default:desert_stone" then new_item=ItemStack("default:desert_sand") return new_item end +if item_name=="default:iron_lump" then new_item=ItemStack("technic:iron_dust 2") return new_item end +if item_name=="default:coal_lump" then new_item=ItemStack("technic:coal_dust 2") return new_item end +if item_name=="moreores:copper_lump" then new_item=ItemStack("technic:copper_dust 2") return new_item end +if item_name=="moreores:tin_lump" then new_item=ItemStack("technic:tin_dust 2") return new_item end +if item_name=="moreores:silver_lump" then new_item=ItemStack("technic:silver_dust 2") return new_item end +if item_name=="moreores:gold_lump" then new_item=ItemStack("technic:gold_dust 2") return new_item end +if item_name=="moreores:mithril_lump" then new_item=ItemStack("technic:mithril_dust 2") return new_item end + +return nil +end \ No newline at end of file diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..52e1716 --- /dev/null +++ b/init.lua @@ -0,0 +1,55 @@ +-- Minetest 0.4.1 mod: technic + +minetest.register_alias("rebar", "technic:rebar") +minetest.register_alias("concrete", "technic:concrete") +minetest.register_alias("concrete_post", "technic:concrete_post") +minetest.register_alias("iron_chest", "technic:iron_chest") +minetest.register_alias("iron_locked_chest", "technic:iron_locked_chest") +minetest.register_alias("copper_chest", "technic:copper_chest") +minetest.register_alias("copper_locked_chest", "technic:copper_locked_chest") +minetest.register_alias("silver_chest", "technic:silver_chest") +minetest.register_alias("silver_locked_chest", "technic:silver_locked_chest") +minetest.register_alias("gold_chest", "technic:gold_chest") +minetest.register_alias("gold_locked_chest", "technic:gold_locked_chest") +minetest.register_alias("mithril_chest", "technic:mithril_chest") +minetest.register_alias("mithril_locked_chest", "technic:mithril_locked_chest") + +dofile(minetest.get_modpath("technic").."/concrete.lua") +dofile(minetest.get_modpath("technic").."/iron_chest.lua") +dofile(minetest.get_modpath("technic").."/copper_chest.lua") +dofile(minetest.get_modpath("technic").."/silver_chest.lua") +dofile(minetest.get_modpath("technic").."/gold_chest.lua") +dofile(minetest.get_modpath("technic").."/mithril_chest.lua") +dofile(minetest.get_modpath("technic").."/electric.lua") +dofile(minetest.get_modpath("technic").."/wires.lua") +dofile(minetest.get_modpath("technic").."/dyes.lua") +dofile(minetest.get_modpath("technic").."/ores.lua") + +dofile(minetest.get_modpath("technic").."/tool_workshop.lua") +dofile(minetest.get_modpath("technic").."/music_player.lua") +dofile(minetest.get_modpath("technic").."/grinder.lua") +dofile(minetest.get_modpath("technic").."/mining_laser_mk1.lua") + + +function has_locked_chest_privilege(meta, player) + if player:get_player_name() ~= meta:get_string("owner") then + return false + end + return true +end + + +function hacky_swap_node(pos,name) + local node = minetest.env:get_node(pos) + local meta = minetest.env:get_meta(pos) + local meta0 = meta:to_table() + if node.name == name then + return nil + end + node.name = name + local meta0 = meta:to_table() + minetest.env:set_node(pos,node) + meta = minetest.env:get_meta(pos) + meta:from_table(meta0) + return 1 +end \ No newline at end of file diff --git a/iron_chest.lua b/iron_chest.lua new file mode 100644 index 0000000..d6a4cc2 --- /dev/null +++ b/iron_chest.lua @@ -0,0 +1,151 @@ +minetest.register_craft({ + output = 'technic:iron_chest 1', + recipe = { + {'default:steel_ingot','default:steel_ingot','default:steel_ingot'}, + {'default:steel_ingot','default:chest','default:steel_ingot'}, + {'default:steel_ingot','default:steel_ingot','default:steel_ingot'}, + } +}) +minetest.register_craft({ + output = 'technic:iron_locked_chest 1', + recipe = { + {'default:steel_ingot'}, + {'technic:iron_chest'}, + } +}) + + +minetest.register_craftitem("technic:iron_chest", { + description = "Iron Chest", + stack_max = 99, +}) +minetest.register_craftitem("technic:iron_locked_chest", { + description = "Iron Locked Chest", + stack_max = 99, +}) + +minetest.register_node("technic:iron_chest", { + description = "Iron Chest", + tiles = {"technic_iron_chest_top.png", "technic_iron_chest_top.png", "technic_iron_chest_side.png", + "technic_iron_chest_side.png", "technic_iron_chest_side.png", "technic_iron_chest_front.png"}, + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "invsize[9,9;]".. + "list[current_name;main;0,0;9,4;]".. + "list[current_player;main;0,5;8,4;]") + meta:set_string("infotext", "Iron Chest") + local inv = meta:get_inventory() + inv:set_size("main", 9*4) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + on_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in chest at "..minetest.pos_to_string(pos)) + return minetest.node_metadata_inventory_move_allow_all( + pos, from_list, from_index, to_list, to_index, count, player) + end, + on_metadata_inventory_offer = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to chest at "..minetest.pos_to_string(pos)) + return minetest.node_metadata_inventory_offer_allow_all( + pos, listname, index, stack, player) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from chest at "..minetest.pos_to_string(pos)) + end, +}) + +local function has_locked_chest_privilege(meta, player) + if player:get_player_name() ~= meta:get_string("owner") then + return false + end + return true +end + +minetest.register_node("technic:iron_locked_chest", { + description = "Iron Locked Chest", + tiles = {"technic_iron_chest_top.png", "technic_iron_chest_top.png", "technic_iron_chest_side.png", + "technic_iron_chest_side.png", "technic_iron_chest_side.png", "technic_iron_chest_locked.png"}, + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer) + local meta = minetest.env:get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Locked Iron Chest (owned by ".. + meta:get_string("owner")..")") + end, +on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "invsize[9,9;]".. + "list[current_name;main;0,0;9,4;]".. + "list[current_player;main;0,5;8,4;]") + meta:set_string("infotext", "Iron Locked Chest") + meta:set_string("owner", "") + local inv = meta:get_inventory() + inv:set_size("main", 9*4) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in locked chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to locked chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from locked chest at "..minetest.pos_to_string(pos)) + end, +}) diff --git a/mining_laser_mk1.lua b/mining_laser_mk1.lua new file mode 100644 index 0000000..a2569e3 --- /dev/null +++ b/mining_laser_mk1.lua @@ -0,0 +1,153 @@ +laser_mk1_max_charge=40000 + +local laser_shoot = function(itemstack, player, pointed_thing) + local playerpos=player:getpos() + local dir=player:get_look_dir() + direction_y=math.abs(math.floor(dir.y*100)) + print (direction_y) + if direction_y>50 then entity_name="technic:laser_beam_entityV" + else entity_name="technic:laser_beam_entity" end + local obj=minetest.env:add_entity({x=playerpos.x,y=playerpos.y+1.6,z=playerpos.z},entity_name) + if obj:get_luaentity().player == nil then + obj:get_luaentity().player = player + end + obj:setvelocity({x=dir.x*19, y=dir.y*19, z=dir.z*19}) + obj:setacceleration({x=dir.x*-2, y=0, z=dir.z*-2}) + obj:setyaw(player:get_look_yaw()+math.pi) + if obj:get_luaentity().player == nil then + obj:get_luaentity().player = player + end + obj:get_luaentity().node = player:get_inventory():get_stack("main", 1):get_name() + minetest.sound_play("technic_laser", {pos = playerpos, gain = 1.0, max_hear_distance = 10,}) + return true +end + + +minetest.register_tool("technic:laser_mk1", { + description = "Mining Laser MK1", + inventory_image = "technic_mining_laser_mk1.png", + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + item=itemstack:to_table() + local charge=tonumber((item["wear"])) + if charge ==0 then charge =65535 end + charge=get_RE_item_load(charge,laser_mk1_max_charge) + if charge-400>0 then + laser_shoot(item, user, pointed_thing) + charge =charge-400; + charge=set_RE_item_load(charge,laser_mk1_max_charge) + item["wear"]=tostring(charge) + itemstack:replace(item) + end + return itemstack + end, +}) + +minetest.register_craft({ + output = 'technic:laser_mk1', + recipe = { + {'technic:diamond', 'default:steel_ingot', 'technic:battery'}, + {'', 'default:steel_ingot', 'technic:battery'}, + {'', '', 'moreores:copper_ingot'}, + } +}) + + + +minetest.register_node("technic:laser_beam_box", { + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + { -0.5 , -0.1, -0.1 , 0.1 , 0.1 , 0.1 }, + { -0.1 , -0.1 , -0.1 , 0.5, 0.1 , 0.1 }, + } + }, + tiles = {"technic_laser_beam.png"}, + groups = {not_in_creative_inventory=1}, +}) + +minetest.register_node("technic:laser_beam_boxV", { + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + { -0.1 , -0.1 , -0.1 , 0.1 , 0.5, 0.1 }, + { -0.1 , -0.5, -0.1 , 0.1 , 0.1 , 0.1 }, + + } + }, + tiles = {"technic_laser_beam.png"}, + groups = {not_in_creative_inventory=1}, +}) + +LASER_BEAM_ENTITY={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.2, y=0.2}, + textures = {"technic:laser_beam_box"}, + lastpos={}, + max_range=15, + count=0, +-- digger=nil, + collisionbox = {0,0,0,0,0,0}, +} + +LASER_BEAM_ENTITY.on_step = function(self, dtime) + self.timer=self.timer+dtime + local pos = self.object:getpos() + local node = minetest.env:get_node(pos) + if self.lastpos.x~=nil then lazer_it (pos, node, self.player) end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} + self.count=self.count+1 + if self.count>=self.max_range then self.object:remove() end +end + +LASER_BEAM_ENTITYV={ + physical = false, + timer=0, + visual = "wielditem", + visual_size = {x=0.2, y=0.2}, + textures = {"technic:laser_beam_boxV"}, + lastpos={}, + max_range=15, + count=0, + collisionbox = {0,0,0,0,0,0}, +} + +LASER_BEAM_ENTITYV.on_step = function(self, dtime) + self.timer=self.timer+dtime + local pos = self.object:getpos() + local node = minetest.env:get_node(pos) + if self.lastpos.x~=nil then lazer_it (pos, node, self.player,self.count) end + + self.lastpos={x=pos.x, y=pos.y, z=pos.z} + self.count=self.count+1 + if self.count==self.max_range then self.object:remove() end +end + + +minetest.register_entity("technic:laser_beam_entity", LASER_BEAM_ENTITY) +minetest.register_entity("technic:laser_beam_entityV", LASER_BEAM_ENTITYV) + +function lazer_it (pos, node, player,count) + if node.name == "air" then return end + if node.name == "default:lava_source" then return end + if node.name == "default:lava_flowing" then return end + if node.name == "default:water_source" then minetest.env:remove_node(pos) return end + if node.name == "default:water_flowing" then minetest.env:remove_node(pos) return end + if node.name == "ignore" then minetest.env:remove_node(pos) return end + + if player then + local drops = minetest.get_node_drops(node.name, "default:pick_mese") + if player:get_inventory() then + local _, dropped_item + for _, dropped_item in ipairs(drops) do + player:get_inventory():add_item("main", dropped_item) + end + end + minetest.env:remove_node(pos) + end + +end \ No newline at end of file diff --git a/mithril_chest.lua b/mithril_chest.lua new file mode 100644 index 0000000..89683f8 --- /dev/null +++ b/mithril_chest.lua @@ -0,0 +1,145 @@ +minetest.register_craft({ + output = 'technic:mithril_chest 1', + recipe = { + {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'}, + {'moreores:mithril_ingot','technic:gold_chest','moreores:mithril_ingot'}, + {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:mithril_locked_chest 1', + recipe = { + {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'}, + {'moreores:mithril_ingot','technic:gold_locked_chest','moreores:mithril_ingot'}, + {'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:mithril_locked_chest 1', + recipe = { + {'default:steel_ingot'}, + {'technic:mithril_chest'}, + } +}) + +minetest.register_node("technic:mithril_chest", { + description = "Mithril Chest", + tiles = {"technic_mithril_chest_top.png", "technic_mithril_chest_top.png", "technic_mithril_chest_side.png", + "technic_mithril_chest_side.png", "technic_mithril_chest_side.png", "technic_mithril_chest_front.png"}, + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "invsize[13,9;]".. + "list[current_name;main;0,0;13,4;]".. + "list[current_player;main;0,5;8,4;]") + meta:set_string("infotext", "Mithril Chest") + local inv = meta:get_inventory() + inv:set_size("main", 13*4) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + + on_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in chest at "..minetest.pos_to_string(pos)) + return minetest.node_metadata_inventory_move_allow_all( + pos, from_list, from_index, to_list, to_index, count, player) + end, + on_metadata_inventory_offer = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to chest at "..minetest.pos_to_string(pos)) + return minetest.node_metadata_inventory_offer_allow_all( + pos, listname, index, stack, player) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from chest at "..minetest.pos_to_string(pos)) + end, +}) + +minetest.register_node("technic:mithril_locked_chest", { + description = "Mithril Locked Chest", + tiles = {"technic_mithril_chest_top.png", "technic_mithril_chest_top.png", "technic_mithril_chest_side.png", + "technic_mithril_chest_side.png", "technic_mithril_chest_side.png", "technic_mithril_chest_locked.png"}, + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer) + local meta = minetest.env:get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Mithril Locked Chest (owned by ".. + meta:get_string("owner")..")") + end, +on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "invsize[13,9;]".. + "list[current_name;main;0,0;13,4;]".. + "list[current_player;main;0,5;8,4;]") + meta:set_string("infotext", "Mithril Locked Chest") + meta:set_string("owner", "") + local inv = meta:get_inventory() + inv:set_size("main", 13*4) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in locked chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to locked chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from locked chest at "..minetest.pos_to_string(pos)) + end, +}) diff --git a/music_player.lua b/music_player.lua new file mode 100644 index 0000000..72adee1 --- /dev/null +++ b/music_player.lua @@ -0,0 +1,124 @@ + +minetest.register_alias("music_player", "technic:music_player") +minetest.register_craft({ + output = 'technic:music_player', + recipe = { + {'default:wood', 'default:wood', 'default:wood'}, + {'technic:diamond', 'technic:diamond', 'technic:diamond'}, + {'default:stone', 'moreores:copper_ingot', 'default:stone'}, + } +}) + +minetest.register_craftitem("technic:music_player", { + description = "Music Player", + stack_max = 99, +}) + +music_player_formspec = + "invsize[8,9;]".. + "image[1,1;1,2;technic_power_meter_bg.png]".. + "label[0,0;Music Player]".. + "label[1,3;Power level]".. + "button[5,2;1,1;track1;1]".. + "button[6,2;1,1;track2;2]" + + +minetest.register_node("technic:music_player", { + description = "Music Player", + tiles = {"technic_music_player_top.png", "technic_machine_bottom.png", "technic_music_player_side.png", + "technic_music_player_side.png", "technic_music_player_side.png", "technic_music_player_side.png"}, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + technic_power_machine=1, + internal_EU_buffer=0, + internal_EU_buffer_size=5000, + music_player_on=0, + music_handle = 0, + music_player_current_track =1, + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("infotext", "Music Player") + meta:set_float("technic_power_machine", 1) + meta:set_float("internal_EU_buffer", 1) + meta:set_float("internal_EU_buffer_size", 5000) + meta:set_string("formspec", music_player_formspec) + meta:set_float("music_player_on", 0) + meta:set_float("music_player_current_track", 1) + end, + + on_receive_fields = function(pos, formanme, fields, sender) + + local meta = minetest.env:get_meta(pos) + player_on=meta:get_float("music_player_on") + music_handle=meta:get_float("music_handle") + music_player_current_track=meta:get_float("music_player_current_track") + if fields.track1 then music_player_current_track=1 end + if fields.track2 then music_player_current_track=2 end + if fields.track3 then music_player_current_track=3 end + if fields.track4 then music_player_current_track=4 end + if fields.track5 then music_player_current_track=5 end + if fields.track6 then music_player_current_track=6 end + if fields.track7 then music_player_current_track=7 end + if fields.track8 then music_player_current_track=8 end + if fields.track9 then music_player_current_track=9 end + meta:set_float("music_player_current_track",music_player_current_track) + if fields.play and player_on==1 then + minetest.sound_stop(music_handle) + music_handle=minetest.sound_play("technic_track"..music_player_current_track, {pos = pos, gain = 1.0,loop = true, max_hear_distance = 72,}) + end + if fields.stop then + minetest.sound_stop(music_handle) + end + meta:set_float("music_handle",music_handle) + end, +}) + +minetest.register_abm({ + nodenames = {"technic:music_player"}, + 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") + player_on=meta:get_float("music_player_on") + music_player_current_track=meta:get_float("music_player_current_track") + local play_cost=80 + + if charge>play_cost then + charge=charge-play_cost; + meta:set_float("internal_EU_buffer",charge) + meta:set_float("music_player_on",1) + else + player_on=0 + meta:set_float("music_player_on",0) + minetest.sound_stop(music_handle) + end + local load = math.floor((charge/max_charge)*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]".. + "label[0,0;Music Player]".. + "label[1,3;Power level]".. + "button[4,1;1,1;track1;1]".. + "button[5,1;1,1;track2;2]".. + "button[6,1;1,1;track3;3]".. + "button[4,2;1,1;track4;4]".. + "button[5,2;1,1;track5;5]".. + "button[6,2;1,1;track6;6]".. + "button[4,3;1,1;track7;7]".. + "button[5,3;1,1;track8;8]".. + "button[6,3;1,1;track9;9]".. + "button[4,4;1,2;play;Play]".. + "button[6,4;1,2;stop;Stop]".. + "label[4,0;Current track "..tostring(music_player_current_track).."]" + + ) + + + + + end +}) + diff --git a/ores.lua b/ores.lua new file mode 100644 index 0000000..f1304b2 --- /dev/null +++ b/ores.lua @@ -0,0 +1,60 @@ +minetest.register_node( "technic:mineral_diamond", { + description = "Diamond Ore", + tile_images = { "default_stone.png^technic_mineral_diamond.png" }, + is_ground_content = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), + drop = 'craft "technic:diamond" 1', +}) + +minetest.register_craftitem( "technic:diamond", { + description = "Diamond", + inventory_image = "technic_diamond.png", + on_place_on_ground = minetest.craftitem_place_item, +}) + +local function generate_ore(name, wherein, minp, maxp, seed, chunks_per_volume, ore_per_chunk, height_min, height_max) + if maxp.y < height_min or minp.y > height_max then + return + end + local y_min = math.max(minp.y, height_min) + local y_max = math.min(maxp.y, height_max) + local volume = (maxp.x-minp.x+1)*(y_max-y_min+1)*(maxp.z-minp.z+1) + local pr = PseudoRandom(seed) + local num_chunks = math.floor(chunks_per_volume * volume) + local chunk_size = 3 + if ore_per_chunk <= 4 then + chunk_size = 2 + end + local inverse_chance = math.floor(chunk_size*chunk_size*chunk_size / ore_per_chunk) + --print("generate_ore num_chunks: "..dump(num_chunks)) + for i=1,num_chunks do + if (y_max-chunk_size+1 <= y_min) then return end + local y0 = pr:next(y_min, y_max-chunk_size+1) + if y0 >= height_min and y0 <= height_max then + local x0 = pr:next(minp.x, maxp.x-chunk_size+1) + local z0 = pr:next(minp.z, maxp.z-chunk_size+1) + local p0 = {x=x0, y=y0, z=z0} + for x1=0,chunk_size-1 do + for y1=0,chunk_size-1 do + for z1=0,chunk_size-1 do + if pr:next(1,inverse_chance) == 1 then + local x2 = x0+x1 + local y2 = y0+y1 + local z2 = z0+z1 + local p2 = {x=x2, y=y2, z=z2} + if minetest.env:get_node(p2).name == wherein then + minetest.env:set_node(p2, {name=name}) + end + end + end + end + end + end + end + --print("generate_ore done") +end + +minetest.register_on_generated(function(minp, maxp, seed) +generate_ore("technic:mineral_diamond", "default:stone", minp, maxp, seed+20, 1/11/11/11, 1, -31000, -450) +end) \ No newline at end of file diff --git a/silver_chest.lua b/silver_chest.lua new file mode 100644 index 0000000..66a915a --- /dev/null +++ b/silver_chest.lua @@ -0,0 +1,197 @@ +minetest.register_craft({ + output = 'technic:silver_chest 1', + recipe = { + {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'}, + {'moreores:silver_ingot','technic:copper_chest','moreores:silver_ingot'}, + {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:silver_locked_chest 1', + recipe = { + {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'}, + {'moreores:silver_ingot','technic:copper_locked_chest','moreores:silver_ingot'}, + {'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:silver_locked_chest 1', + recipe = { + {'default:steel_ingot'}, + {'technic:silver_chest'}, + } +}) + +minetest.register_craftitem("technic:silver_chest", { + description = "Silver Chest", + stack_max = 99, +}) +minetest.register_craftitem("technic:silver_locked_chest", { + description = "Silver Locked Chest", + stack_max = 99, +}) + +minetest.register_node("technic:silver_chest", { + description = "Silver Chest", + tiles = {"technic_silver_chest_top.png", "technic_silver_chest_top.png", "technic_silver_chest_side.png", + "technic_silver_chest_side.png", "technic_silver_chest_side.png", "technic_silver_chest_front.png"}, + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "invsize[11,9;]".. + "list[current_name;main;0,0;11,4;]".. + "list[current_player;main;0,5;8,4;]") + meta:set_string("infotext", "Silver Chest") + local inv = meta:get_inventory() + inv:set_size("main", 11*4) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + + on_punch = function (pos, node, puncher) + local meta = minetest.env:get_meta(pos); + meta:set_string("formspec", "hack:sign_text_input") + end, + + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.env:get_meta(pos); + fields.text = fields.text or "" + meta:set_string("text", fields.text) + meta:set_string("infotext", '"'..fields.text..'"') + + meta:set_string("formspec", + "invsize[11,9;]".. + "list[current_name;main;0,0;11,4;]".. + "list[current_player;main;0,5;8,4;]") + end, + + on_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in chest at "..minetest.pos_to_string(pos)) + return minetest.node_metadata_inventory_move_allow_all( + pos, from_list, from_index, to_list, to_index, count, player) + end, + on_metadata_inventory_offer = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to chest at "..minetest.pos_to_string(pos)) + return minetest.node_metadata_inventory_offer_allow_all( + pos, listname, index, stack, player) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from chest at "..minetest.pos_to_string(pos)) + end, + +}) + +local function has_locked_chest_privilege(meta, player) + if player:get_player_name() ~= meta:get_string("owner") then + return false + end + return true +end + +minetest.register_node("technic:silver_locked_chest", { + description = "Silver Locked Chest", + tiles = {"technic_silver_chest_top.png", "technic_silver_chest_top.png", "technic_silver_chest_side.png", + "technic_silver_chest_side.png", "technic_silver_chest_side.png", "technic_silver_chest_locked.png"}, + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer) + local meta = minetest.env:get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Silver Locked Chest (owned by ".. + meta:get_string("owner")..")") + end, +on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", + "invsize[11,9;]".. + "list[current_name;main;0,0;11,4;]".. + "list[current_player;main;0,5;8,4;]") + meta:set_string("infotext", "Silver Locked Chest") + meta:set_string("owner", "") + local inv = meta:get_inventory() + inv:set_size("main", 11*4) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + + on_punch = function (pos, node, puncher) + local meta = minetest.env:get_meta(pos); + meta:set_string("formspec", "hack:sign_text_input") + end, + + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.env:get_meta(pos); + fields.text = fields.text or "" + meta:set_string("text", fields.text) + meta:set_string("infotext", '"'..fields.text..'"') + + meta:set_string("formspec", + "invsize[11,9;]".. + "list[current_name;main;0,0;11,4;]".. + "list[current_player;main;0,5;8,4;]") + end, + + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.env:get_meta(pos) + if not has_locked_chest_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a locked chest belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in locked chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " moves stuff to locked chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + minetest.log("action", player:get_player_name().. + " takes stuff from locked chest at "..minetest.pos_to_string(pos)) + end, +}) diff --git a/solar.lua b/solar.lua new file mode 100644 index 0000000..2d397f9 --- /dev/null +++ b/solar.lua @@ -0,0 +1,23 @@ +minetest.register_abm( + {nodenames = {"technic:solar_panel"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + + local pos1={} + pos1.y=pos.y+1 + pos1.x=pos.x + pos1.z=pos.z + + local light = minetest.env:get_node_light(pos1, nil) + local meta = minetest.env:get_meta(pos) + if light == nil then light = 0 end + if light >= 12 then + meta:set_string("infotext", "Solar Panel is active ") + meta:set_float("active",1) + else + meta:set_string("infotext", "Solar Panel is inactive"); + meta:set_float("active",0) + end + end, +}) \ No newline at end of file diff --git a/sounds/technic_laser.ogg b/sounds/technic_laser.ogg new file mode 100644 index 0000000000000000000000000000000000000000..19be08015f88865b06079a4134405d91252c8df8 GIT binary patch literal 13465 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 literal 0 HcmV?d00001 diff --git a/textures/technic_battery_box_bottom.png b/textures/technic_battery_box_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..1b3cf4813728c1017266e71bb5daf6d99bb79381 GIT binary patch literal 439 zcmV;o0Z9IdP)V#$^zoX=;HRaI30#u)p)0|20pV~naYGc$8{Uu(I$yGKMsthLl?W+XFHcz4$q zCpqUN3Bb$%s3z&|BqIXATI&nwSt=T-LYS&jAr{X}Gpj0+Duh{oPtP>7)ZP)1nIvzw zn}{Rg^?F6b{eBl$M3BsV-z9yFv2EM)`FuPcno06yJWl5VsDe^&+BE*ouGAkYZ`*jP&(L%JP4Q h>J({O`=izl+Xs@8NMY|`33C7d002ovPDHLkV1oIJvf%&# literal 0 HcmV?d00001 diff --git a/textures/technic_battery_box_side.png b/textures/technic_battery_box_side.png new file mode 100644 index 0000000000000000000000000000000000000000..5a8a976b3df4d30ea3b4288b67f021a753bcfb6e GIT binary patch literal 602 zcmV-g0;TLfEE$q(i)60!;e0%o!hlYzfb z+~*8AUk;F^prCjQMK_|ND9rrKOm|OLxu`g}X}YWHy{dYzAkXt&uh+IMA_73$wgAA) z8YCiSM#K<8nx@V<1c2>!n`N1ZIOjBbv)L?{O8@`>Yi$T2%d*vKMMQKw9zzIqT@Q!D zq9_1hy%q%6xA<9@&Q-iHuovzguP-@knIL`1%PuHU@=Js9BAta|o*(lq?* zr+@eMk8}L+;=^t?ZkqV%V~w->-XK9DxIRYbxUM2uK!VwQ@5gsvSA4z3;H7EUT4WYm zRs8L%8zeYLFinYBypytMt4FXsNK!OlnmT&V#^7i~uvjbrKtvFcnRRF)Qr(O(01#s& zB4dn*popk&F-B&NF)Bt?Hpb|knH6C5L*IyaI-RD|X<3$ccXw4)6-9AApVb!SvN1+P z6cMeCh?mR7d*AQ(MdWZeXuPX~UABmX5RxQOKJUFTW;7aUV~VlXqE4nEHI;|}AWc(6 zs^6+d+qS6OM1**&hKSyKT`Fzte~eYhL?p(j74tk-0mkF8{_1(teLkOeJ}8+^*6nYn otagq{b~EK)hW5}==#p#ZUkpz@a!{XE z)7O>#4hOdor{Js3u!%q+$r9Iy66gHf+|;}h2Ir#G#FEq$h4Rdj3IKwQDEI*U|_Ig*DfcE`S$g8g^yV3^tfA;wY5(lIPl@e$K<9MwH>iB zF)=5?9zSx*ZFuqT&rf4Vy~it-yW954GB7;tYWaQi*tOX}QyDy6{an^LB{Ts5Pf9}; literal 0 HcmV?d00001 diff --git a/textures/technic_battery_reload.png b/textures/technic_battery_reload.png new file mode 100644 index 0000000000000000000000000000000000000000..164b4acfc8386c6af41407a74c26a42dbdd7a7af GIT binary patch literal 8201 zcmV+kAokyhP)000McNliru+z1U7EgVJkg3|y1AC^f( zK~#9!<$HOQRn@WnS9_n~PCee9=x(~3v1tYwq*WvWA_x&ANCb%!YJ8|c4Mu$=&U2zs zBO0P2j%Y;k;(!sA!4VV?P^JcKnr?=k>G9sa!#QW~dVe$y$;->iFQC7--mAOzTK7!* zocea{s@hex3CEcj3<80n0nlGv`S!5_U>rSW{`MUNBL1uMU(?a^-TimJ=U7P`ZvY4c zS1nXBtVR#KgTox*aVm^Sf0e!0L=Ipke>k30VKK%fp87s z=yS(|`R|mb|As|r?H>9glkqOYe6lq|Zg0(y^$dT65nx8}XbbU@%Z%5+;!1MFOh)V{`uf%^3m{wlQf*-7=y=V0oyp9ZRGHq_~1+Kry+ek?g}HS8)1qoU+GB>HReT=L4hPv9T|p?wguTtxqSp4ca=muP%)aIf2er zJK(z74@rhLS=#K8p%cne9E}npo`GomoIrFgV&cyoDe7~v-Gx=6w;vqE#RVHgY5{^eN?;3 zm~!;fT^BITe;I^-`iVLwS`Iem<2^Ppj(KyE-!FIc4M-SsWFsz{J%tXRa)=%f{jvD; za&e*g(x}S!a2b0zJD7u%lvJ=4fG7NrtRb`pJPlF|b~QY$;RyvIf+v!&+yrd51F>W~ zB$?QhmyajUI18(0pZBY_%uhZNSLb|!Ma44|-uw^bqCquqk8WE--_;c0Bmq*~ P0 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 literal 0 HcmV?d00001 diff --git a/textures/technic_coal_dust.png b/textures/technic_coal_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..4a1da0c80f9feafc7124f8b8fe96e5c8f83662a1 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rhea8DPnt+0M1n=^VKr0wLUHx3vIVCg!0K!}`=l}o! literal 0 HcmV?d00001 diff --git a/textures/technic_concrete_block.png b/textures/technic_concrete_block.png new file mode 100644 index 0000000000000000000000000000000000000000..91364f33f5d51e6b83765b15bb57ac1fab0698a6 GIT binary patch literal 2319 zcmV+q3GnubP)#R7{j`*<9PuCBMxgFDP1`4F-AC!lQBBC+eXO+?>){ttOy?;cb3KDose=z z6`U3N7`U7ZKYo1Y^YcNi6=Pso7J_%Q-m%u=oW(lJ+qWC7K`9w)1q?i&2O@$hc;~2f z5JF&CB04&$6s)tT8fsHi2daV*A$pILS{S_%mw*+65n+h|?>z=kRj%ve{nsbP7-~th zT4}8z#>`?wFh)49%yAq5JRVQ1b2uvuRmK?f-Z`&KZH<&OtyN^(Hs0?~z_4u_PQZId z${FVzITvahhzR%llhy}{;pfl)!5HD&+Z!SVYvwn`!2A0L&*R|Z{R3lQ4URDsV}xZ{ zsHL#23){9L+ACtfTA|i5k4`&c3|Gn+W9WU5OXE0Z_acVZw>MgEwANAWC?KMM!H0lz z4kMQ9O57h$6iB&XP(rYX70&a*ZTk%nLhyhmM$c#+=PJ%;PyqcZq|=7w^VcWezr9jg z=XTp^CDU4`sG-z?>job@IcItwgy7N9F#xJK=XiYH+4dcGo)@hT`jr@CP>N%X9vB4g z`Mf`9trKHpT~}&rh_wt=taUsePY}x(1MeN)J5-ezJjZdeZX2~0dLKAvDYX%TL#*JP z;0$2IphFp|)Y>@D3ss0qM8vZ15gmi;Itd~2eHLfdh90_;j!Wun~>tcy3y$@8O56Gn=)_^MBIlTAuUeP|d-yeur zj_cxiCJgYmzy1b544zVi);lRB)WE*27_mGacXSM*cU&pqoCw>tq8O|dK0co~XE9>% z&SEV%=jeUVTF3i9ADw^w`|qS&X{}JJqQK*EV2qNTCj>uP(gv!XkIy@;502wxTNluQ zSV7ixVObVpjHD~E#E7avbzrT*I}h4Oh@GhP&LiS5 zhB-tbV1U*d06*StSZjH?ZFo2NURwhUxpYK?HF|>gIA_t(sb#XnIfq#1Ij%G@TPsF{ z$K#k&o-(CYu9Q%PQVJ<0wryn$#W~?P6V3_F3EQ?1y`}d)uS;g3$CYMbwQ)QTu9OJD zkJ}-wO`$b$dB7jtCcGk+`2^eZQ=2}z5w9~A<)ObiouHEyb=It!&!qd4n+_n80#1{ zbAKLKnR9TS7cVb6A0Ky0tvG90*M&X?0IhYbb&N4^t#^8^EYY)XD~BY`D^E(hg1-p>xb^V4!hxUR%d&{4VV8{T_rZ9E=d zYTtK6rW;}mtn17h>k?p0FYMcjdpu9pH4>aHR7x#T^DC=eB7VN%WWs6!j43OImStsK*BMks z=e!a+qXnQ}AhHY{3{|f474LhB7HGnD!mS^Jojvlh(2S)uhYT@VA;dC^D5 z7;vq1_HDx$_;%ZPKA$t58N<45I5E`LIG!iVy0EM(I+Rip+ZMl+?dIKH378%!Ib)2{ zo$zwo0j0HxdLx1}LMatztwnWUjN$YCVDvHD(;2tCcPwjUS>r@=aG+6mC{Yj}6D>L{GZS>aIww=)jPQobIi;m@D%h{()=DAGFK2}_KWoVmT+V03!#_^@E@ z%nrr~?;oGIF&d9&ruT+5hM~%DKfZIN3&R|s<4oN4jeXy#wbJ_x9k-Vot#wB4^j1-n z(L1NkqrXzYmdX+X06Ax_bRotPLcmT=SaL3e5LwsA@jN-Nix?cvI=T*Gh+L`A+QHCi zyluN-bnyFcZ+v_{$)#fLG-S$!S{uE0#5k@i5tlgsi)CHnTzMF z&Y9ylamSg!7;gK pLtt4vs){OL46SuST)w)8{{?77tH*U*h@Aic002ovPDHLkV1g4LUh)6{ literal 0 HcmV?d00001 diff --git a/textures/technic_copper_chest_front.png b/textures/technic_copper_chest_front.png new file mode 100644 index 0000000000000000000000000000000000000000..1769435837308c08dc1812fae4b7977cc235fec6 GIT binary patch literal 2614 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 literal 0 HcmV?d00001 diff --git a/textures/technic_copper_chest_side.png b/textures/technic_copper_chest_side.png new file mode 100644 index 0000000000000000000000000000000000000000..2c7943f3939438696a300b5dada720ba251d02b3 GIT binary patch literal 2568 zcmV+j3itJiP)V^j*V5^nxcChlBlvTC!uw~>(Tmxf++_H-|4kmQiIXKehrgmZ zmzeD(?&`eHR45QY49Lk6HQmR){|V9zp%Rb^)sz(1pP0;-)X|ex*Vyy7pfnnRu@$`f zFFH9VpZ`6J*&O}bfA}4{vg4qLgf>Cgn(E^j>E1&++mhG@g71?L5oY&L`Izm`&qzZ@ zR6BTWP;H5nimY8zt}OZ8$JjHAvJE&3LK1=}Ob&Q7nIdO1mdhnlDNQOop{oh5BX%`% zb3uLj3LEABS6PgN!7hW{eX7+lCUnH{9&s?C`*cBQ3WDnpKw>MlZ~m8}tcbybki-xW z(*v@dT{cHA$zq363Yld&byZ@0gltUc8ibG-B}l_fr3--*3ca|;_UtW5w20{vGu@*+ zdxvlhT@*x>+{T+L7$>4%9wG3_0J0IApP!QWmb$ZKS%%zhx3nJ2@+)jz5rG&zp)Lrv zC3*+m5h8RaFHp@EvN0;nSs%S3mjSi2KtUgdy6~)Ko#4PO|?1x;_)3dhwBI z-amz)3z72Oj~H9x%n(7OTAeV+QuOi>$=$EPbr2)b``Yj4~SAj3<#;nV@HZ7BpGJ1pt`&u*8=AEk?DZ)^4D*~He)xer&&jfkEXy#);G{%NAKq5@XIYIgQr)z>8~OgMm)?6q z2y|V?r>3D94ya|#U;p$c%DQGCTE2dKAN}m@IalkNKu2(nH*enDf+&RW3m6$=NRs3h zHlHg##&`=WYb{;Z{Q^c(%3C09w_D1pro`jko}<4x7_%NHgz;TQS;oP^0Yy;|W4r}U znx+ULegUH|2mKt(moSPk(zfj_sDu!VMk976I}~+;+@3KRXXuZO;@j_k&)3Tt+BW#7 zf5hB*jJ-OCa!phTW_KT36~uaT+nJIQqyizqTY|Ir5D3aJy#EBh`A96UXh_J$6I@-O zi<)o$_Mhm4;`Qo~7tek|JFhr7KIh))U$`d=r0=NDpEFx5v9Tf+moy(scJF_SJG%ti zfDlCM0D+LQAKVN`$0PjqlKSWWVYa-7tu2G~DbY{KmJji(EBMQQa_TaU)9!qe5*)z8G>ky3!{sm9J8YB0f_zCZzlo)ywxQGOI;vwa%d zl5H=kk6$1Gtqmb~+P0(W96B+GDA3+}0+vv1iA1P2Y&KU+e)VhI$M+<4K@jwwKxyRs z5MrQs|C~$)#9%@IM6&@TV!NW~TJk#&@xf!dis&p+2!eB1Bm#kT4v+7bAT@>I1{eu>5- zhP(Ytgg}ge7$PxvQsKxGftLo6kCDOlGF=n}UA0B~2C=hGvU~(xO?0kzL~TWImf$@& zOWV{m$InUe$jOr7c*6SlHHq(FX9?pys;d>m*s~&r8!NARe-Q&=eSvq5qA1Xt&4ygo zh{XfUXhL!P5+iyL2_b0pkR*1{)(E9ZT#XcxIGSPh9#EaXCdU$&k4W+%C$F9|!UO$b z#+w1cS%hnVh?W9~)J@ICgS6JtBxADCg!=ql?{>XID%CGTy&+^1NC(6ikV2w{I|KyX z$#aZ|Fq)I3Ios2B>}p4D^sSS2Z9~k)J-&TFNQqF2R%Tdhk*&2{+sM_sXNY>!uR9W# zPY{DCMnP9?Nfw7NnBKrhVxl8aH*R_N4)yAoEOr=^B9+DsW{?iizN1*3A+#Y9Z*BUO zSG3k5KV7acMiUP}3#Vqkp70{0+uvK3%R5|MBnt9HkjDIebF7UNfK1nM@|P z2E-VHQi>!=ZV#EC9gp|@iAgDiQtH;6#2B%*ukx3XD;gb;|ItNiAj5aRaTmu~5E0N#79udlhdxS*_R e@+7d_oAZCC;eVc!XGCoP0000 zz%v47`JTP^O#b7q|DNjOf$P0zI4D@mrr5kkN)UoaYmG4mZ43frS%$SaP1BG_00=^! z=d^8ubB+WA@A2LfLO^SS2((Sj&FzN6v1Bze^aewW#W9}`_~|cyVp#O4jwM=aQc9$h z$g+$q%Sb5^V?-&1wH5%S6aX_|BZ;?oWnVXh#(?_5cuOSzi=ok%JttkG!FB% zF|3~b%s?ad%A>gz4E2r0Yvmba2-%B1kd8iy;dQkRSw{&ajgu?)H|r zyTh0N@xSqBK0JScSuB?HdIjO_|IiN`(&Uu!*^kth3cJ6- z-(Gf|iUt8vL`_c7(-Yi>-yrWHIs>KA^^wEoE0e`3RSM+g26y=uw80=)SHkQ6rqv7j zi(gsJ7pRmVH-^W(gfbc0Rg_;Y$X4GWy&)L^9bMODj4*qQ9!%N4e~u0c ziu)@iVlktbolst{v9TqMR-|G=`}K-gABeu~i0VrAzyCjnV@ZkuM3G`drjO{2XY4+{ zLPCp(LTO_##^6GN-iX-Nh$yTU^4Q$LE_l(HWT7FU2qB$3N)nJ#AXW#WYe>OE@Wce|`Ac-Y zhu#RC_t}1YO3=v}tDuzzo((DmQgzEei29Gj^bI2rQnU@`B@=|3mruj<^9vOH?sInG8}Q3k`-u2%#$=GX@bM zAI|WH4H*#;1xkYmv8~BYzDG?~T_;K-O5vR6c=?Wj0R}Tfgw6U5R)HQ&5!)w)fIn<7 z%cmq;bbJsYMNf?3jw%8oLUZ*ND-pSqS7%3fos-%lw{L$Vo2-!0^4mmG7$}Sodt=mS z$zlDPp07y3k-Q_C95tMwqhr5*NpJoDJ%5OpPR6x1SZh%+c7|ezh}QS44fT=Y=`ZB7 zQ*5*4`1zb{yddfvNNAH`Y)<1G@%k-=1|<-^Bf1)2AIVlvQNjDzQ+_p zD5m7GqP=)c@Q#!~j78-|r*x@v#}otk_kYGrA7DexadSg9nvwcbOueK2^oEc+*o`sV zYi-EK&>LbUuswf+oj*X0SD4Un_;QJT@B?BCObTRLfOIcXDF$MHOg4Xr@fDlje?t$a z&>JG#3+mg?WG7D`FHqG6r>$_;?@2LqWKo@~FNu^j|olH8JB1PvSvs9 z;qUkmkSqs*6aozA4A1_6?f0>^%b7;$ZXRVYLz^7c90}zP$_>i)@znt_hS;B=jivtd zih&lwzCM26YLNd65e}M+dA5|rTq8;d*y}w&@Bmp+?3hWT(%dtw`Q?iKr<% zeGdV=qp2(E^$T(WYI4e8G-11bLl#;XpTcNGd3)W>yGSST2#D_TMT*4j6r^K+=ZfyS*Uu6()L8F~zQ)QeLm=<4~v1$i{Q7-oEHU2HkW8 z+i@esK#BpQAR{5FTUOL|yJ5TC(i={wF5h)&H+YoR9Sqfu*qcCJkWxg6LJ!77g!cRe zRuT*sWO<+cr+3VZr*F-DlJ-qa>Wv5?kV0qo!B~7Y>>wBnhwQ3~+jq~AYS-b8!uKag zF~w?V%RSlh42tPpNLJY7$@E=Xo;{$tUeil0*5)W}@WmYR0VcE@t}hT{NpyTLB(}a= z)zt0HXYx!FfB0wWpZ>L5K!~KK#GHJO4CdtRp5xbR^5rAc^t4+^wE?Ax-cx^kPUgyQ z>849kt|EW(GiG{1-y{xoi=LiRKKmCAXTM@>#?99+$bbFkza?b{OwNAhu-&j+ESXFu z7}F&dYwf*Pd|NW1v+xkYUAoa|t?zM9DdC(Wgh1Q2v~7#`p6zza&CLyi$%O6t1+hJ1 z4&HEe@rmm7C4-{R_H@g1Iz?-JU%^g%F{hwC^)U{sR>yU)5$>9Ok zR$2;Cwqo+*G;;YooK7c<3ah=2FE9wueI#&000&Mih?zF!W%an8-EukoNOn0 zo`=^e!(Qe@io2TJH^37Mk^1 z^v1`K$uDDab`Dmv1WG9cx(KT*qeL)aX_>;PVW?m-lFRLF2Y;5h<5c_8?X}h6S3|?F zn?)=v6Sy5E5IH?&W@nK~r2w4)f`-uUp6B^UBvR873BUer#$1j|#YHjQI bx6kw)?!dxZ$$ZS|00000NkvXXu0mjf2W&f& literal 0 HcmV?d00001 diff --git a/textures/technic_electric_furnace_bottom.png b/textures/technic_electric_furnace_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..15fa6defbc5115973d4e1043549feec371408ef5 GIT binary patch literal 423 zcmV;Y0a*TtP)#) zeJUQeyE4)MM1h*Q1EX!*1J1JS2O1Fp7n`M)N!$QR9eUac_b9t|u~({yvS-b!>N~ z^kSivU|iMpC7XWx7-$Z_bTYY`O->80=hOLYHjGt*n9|Yi$UOj{>qQL!z5y3bm)vfx RE-3&2002ovPDHLkV1n4htGoaJ literal 0 HcmV?d00001 diff --git a/textures/technic_electric_furnace_front.png b/textures/technic_electric_furnace_front.png new file mode 100644 index 0000000000000000000000000000000000000000..755aadf56d0eb99b769a037112def7982985a6a6 GIT binary patch literal 443 zcmV;s0Yv_ZP)X&o5798V>^hTR;!_0E~8j1!uNd?3I&u(B~+_bG#ZU3LBHR}Xf%T3 zh7dus+5DQh)oR(=>2%QTb`9>o6EC@DGMN_yZ9zCOvI_18gTdDd-8-Oh=25 l-w62I_yd3a&h%vr_kWv3!5ET3n6%oN7>rr`>j2k#mboV5wB-LrxYPC?W z*HJ7M5ex=@LN1p>rBXq&*@UarYIYDoGMPjy7DFTwK`0bLI2=Ya8buv%lI z<#NG(zqh^L_9UWuQ+dK{HpBUR2EX}y{+5L8^?E%xPN6_!zu&i@#bSZm?Pgdmm)Pxg zW}^>vVen`)`kzEjl=>3^vz|^TT(4In*lac!3eMr;l4_x)5%JR<1(J{%6fX0s{F^1h%biq&cbfB~49nFX(1*IiS?5jYNjnTAIQeY(I! z6GlXnAZTVn1J1e0(((8`8@lbL(7fAjL2&S&hpyf?0MazQ8Ub%FJI5(=%n>s|9i|My zaUh*{toIE^F5)Oo5;jwq5!s9<3%hw9hmpuYGofV^^C$7f?N#wN@$uFDF1^UIr#!na tcwR1+c|O%DUQFqn^-n(m!zgM1@B;`CmR=06o8$lh002ovPDHLkV1h4JotFRr literal 0 HcmV?d00001 diff --git a/textures/technic_electric_furnace_top.png b/textures/technic_electric_furnace_top.png new file mode 100644 index 0000000000000000000000000000000000000000..fbadd9ac94983864e335c69537d4210d1c72b89b GIT binary patch literal 393 zcmV;40e1e0P)M6D9kWYNb@5M$JtgRen1KZ#7>$r-%K{0pLt=r%8i_6Z7yKc!V$F_$MT5H4)O1&6W@YBh z_kH;K8IA}RwkVXXzA?|b^be_BHbLEE-0mrIJWVt=SfvK(!&%w`#%eDV9_ zgOs|gP)ZR(AcQ~^MMP0V2m$XsQc8?507xkT@ZJN^b=}i9LI|w2SZfhNAcVj<$IF*5 z+13^1#W!qQi+*f1`yc(3FOEwRwd7#`Ef3eP*%WK)PVn&uN0h}9Ne=`>5Qqj$lHqzq zBFkOGF3^gE`8;Q}DJhCA=#=A=eTvl$-dU^}qW1rUb(ioz?o-}=`wI2vzxc(!%x80^ zn|~vz{u_ej==cQTTViRcT8okbB|TCI0+0=-3`WPSA8&~xh_pmWLDzLWl$zs%F<^ilg5$@6s+E|q;o)8|*?U26-w=g&XC1%= z7>xEAWGScTr^M3YMUF)y{gy~U?AN@#wj3QjV|90qbS)tOLeTXAGuY>|6N3>shlf8$ zDy4~3Pt!S?&eL?Bu6pElaZ2kHgx&vr02Pmz&F0+P-Vv*oBpaiWF}Du|MeXQZKuR!F zoSuHq?W)83fD+(bARF#6oeX(%c7>50N-1QLq!eXM*=gb=rEWb+!YH;3bWH#R0vj~L z$svoY3yf$PqEW_9{&jU(HKoC@dHW{ai#3Ad8~F z^`8BMLyD@~wV#Kg-ettOK<_-x!Trq{^d%}Dk|hzZPcO-hV>HSc4~J~49*H0XP;yrr zLI46bMa%O3g7LsJpYK6{?RJa4y}M;UE_qvAlNpE9DSc41bwOezS_zDn2;0-Po+e5d z5BE7eJ44fwWD|^ntD8sC7)(0Cc0Dq*Xa!XlNF&KC_asJw%82thk9R9p7WB3(fH6n1 z!=w|2!wHMU6-o*sB?t)8SW&i;`*uuK8ZN62=|*VjX^H{&TS2UIR*gjMy+Bm|MJxlo z2czY#E+UETJ!Nf?+czx3A5)fF^u@(np1*ibn7^bqipACc5=Rb!q_Y7TrPv_(_181j z{XRGM4+x={PF}Eout#ruZtw2dYzpEyV)nY@qkPOSe{xUoyvvZobtR>9gyaZEpm->` zxVS)PenT!T_p`sED=YFO!x)WVcX&dl$k`t2=4+A!A|+XGwkQc%no!jZ)pko&R?J5G zM0oDI=d{z$sM?-DL_U~MyIUI3uuA?ElMTpMUz3Fm;-CNNAHsL9-%^E`EKT|H%P&dO zlq5+=k_2N6Qc9M~CEtJl8rM5?q;bw6gusUYJ|LCE+8z@{eD>Mzk)$c!d%CWpX&RcQ zp{{Gb`sypnx@I6+KKb|s`r9|xEY~%j4&V2@e*O9hMBe)!!00^}AP|Dzm3IgrKuSRz zM_6n5kKg>}2QZRSJ^`sH3d*Xc#L>UGM*rkw$a)yzhsWe;!pZRo+wGPR!V_@fINnA3 zJ1`0%JQ1?*dxQ`_fYJNt--AjBL7wM~#v`_MgDe(|hY9+=QGELOAMx?C9OW9SH@{|n z^o)9aP1{s>BKEQo+p59Z66Ynpmc%-slt2oweW0-cyaN?+c=BVa^$oo*s9nt7IHs&x zXgfangTJH=F{g{?y!!SVv~`M$%WICy|KuQDkwq=#-G&!OL$*ajUEWeWEIEGm0rm0{ zXDvd2bphc(2|?>TiB6deBevT+R+lS2Jeg8#)`ZoTzQ}lfaLjgjkA3s6EUPgW)t_OV zLVxl3=j@FH+0DN*-Fr^8xu#yPxVSU?==gxDu^3N{f#=6loDbAh#l__n0!UO~m~{N?!yoZb1Z1A)WV+@stJrQHm>qn`Xu5|j zZ#lobV>mqqq0pfwlJ>~~C25Ax35cESrn=#N@g1}MBSzynM%J7!R*YvS=*SRJqeZ)` zrEW_sEAl)?3n9=t0ueC2;PHOJXgEUC5&Dwtvc~oS74hT;;%r8gj#w?uF&dl?1RsDk z_jiKnY=(0dsts3{Z&4x;8%gg1o61pCo~e!yUZ9@p+-Xt&|| z@(rzpIFe6An`T2kd~rlRh#3qL@;pZZY&IL>G-q#b#{MKCi3Dv^f@`>6b(F0`nGsSM z7FSnH2aefnj*@VBagI^D%}6uY6^H<%EcgcR192pgI%Y7OaecdFn0TskyVIGfs_1)1 zHa?=*mN*~KTH<`5Y#e#2&{80UqbY7kjK`!CCZmjpb%T~YX*OXnI%HE+IKMM60)Z3) z>jJh9)UD&{@-2~UkvgSmTB@o-?lfJpxI87ej@lZcIK}8)I^$^9az->eW2sV-e8&0Z z4UzPi?2th|=JMh#Mmf?n1Dz2F_;=>U`M@CR8K;3jL=+Ejekb>GyWLV&6(U&De8P19 z8C_?weW10Tvhlkp-reicadUM_s(bR$nEh$Oo3jNc)a&1Kug0Y8Yro=M9750aw>c22saw zpfHhuXoQIqG#!^Wk3^9sgxv%sg`j97x~@Y$KHL+Ti1^trkte?*>}Zd*EyMW-q=Oto z$<^(a>HLuKc)XhtlqAxE)&>@rXGEe#iCqth09|L99eu)NGGY+JW6?94WVnN0QBMB? zZ6Y2X?-Bp__kSIv$(WveN>OZ>&*zNCW3<*7V=%^`lp>0vry&!-xt)>$D5X$J?FOiK zXK$^=IY-xZbX`Z^_pH}z9v&XZM!w)UiWX#-DK00000 LNkvXXu0mjf#r^%m literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_front_black.png b/textures/technic_gold_chest_front_black.png new file mode 100644 index 0000000000000000000000000000000000000000..6d0fe5ef92cbe391090415627ee76867353ad670 GIT binary patch literal 2659 zcmV-p3Y_(cP){T20YV8#+1eRV;f&6%=Ws;4{@wnba~QmEj$pu`*68XE&c0{ewf9{ zG1PU9F$S$QLI{eYU_2hPSY~Xm`Gip$?NQQAJnlaHh)xnSo9B3*&l^ao2*VI-Eyh}u zlz5(p5CS0uIDvB(=Nwg4T^CeHsVK{Ws;ZGv0s?Dl-hcmnW?4ph{5hE|(O0?V{(}en z=8YUr%(=0B#PIBZbU9<53m*R9Cgag-w6v?+TA*=LZlma0X#!2G#I_-^jxHumY1RAA1gw&K(!*CXGYj41^aA;97o~BsgBcwxM zu(JckS6AfG52?!n`O)Lw;{IO5o!$)JQ^az?aQKpqowt$7rxi5#qQ*IBtRw1d(dqX2 z#lb#G8jK5QL>uQEo)Wa=gy*MM?A*AEQ~{wjND4qu)fR$H9={uMcQ@woBvh%R$5Fx;pOQ*rS)+R9DoDqwb|O-PiI5s6R^nZYVXFs9%9T)MNSJhawttAP8nU7!NfP9I zKBuk?H*eiyG|O=~jCD*iLs}S`#!=N4<0P-n4$$NXzfHg8^KAc=er#!X+N=-yOqUfB zfpZQiK}(4cAOwu(C6~h^Hrj&qjZK7u`FxIk{ra4ZV8P+57jz?wlL3wJDY7|HAkj+T zYl*5G^3swzkK4O9cy@3=q)UQiK#DQX~>j*uCRX%Zd zo6DD%%$pjW~csjreA+ zXoqd`N)UJM(Y*dwJn3i}@U=t=@U*0AEQ`#LF1}$Ve@u~&&?hIy?A?|${U4zHh?AoO zk_d2;qB2OYMdJ*A_xTMnHhFb%fs!6;{Y^HvHfidbi;D{;(;0!USvy>CCt2rr-n+y) zN7!1&7bUjISvEBySjV`6*<{Ku&rZ;BJz?M#O!l6TEizj1KT`Q2LWord$dG9J29xD~ zvOa*RrswzJF>@(85AQm|v{MvhnKl;O;xyft+LK8;; zySuwsYiXJWYc2A6_A8|bd>_yE5kgSc^)*W?L-ITi;Cn-QV@7Yz&{`va^!r;y^o(zTFLRN zd+dMnCFkV0Uq z6m1tINrDza;Cmhph~$#j!&BDQ`e;g|O&OmbQ8l17NCeh7{CGgv?lV3+B=iKvIvV2; zV$Q3fWOHkii@Ko0l9TTa(NYlllEye@X~T5Uu;Kd%Bap@zs>U!+Yv!q;NJl(7d_iaX zhbSG<4lQxuFvcN-qto9Z^x^s8A)a=4et_~5tOMr+bur=SbjaG)9ilL#6B@K^u+~vj zhN_V$DJY6&72jH|7LnIrEL4r9~qjR)0-_HfXh|;_u3OtmkC@PB-kXP{Oli%Rk!3nKagl$@AfXQUSUX-xY?eO>i ze#rlg@&EGfivJIu{N5$~#4%dTA?hKsETgJx`WtUCnNImtBUB|q#}s)%mSrmqXzg+G z-2uWizw!?-P7}s$8skljUDbP|Pl<5t&bjH9S5S$+jw!*aPq&*yV=kkRVz(Czm5*+)xy zvBxquND0#K;geyS8m%Q+X%Ik?By_j#@%qI+!Yabf9)qsWzx~%SgVunxj#~A+h_R*w z+n^K(3{qM0EMs0MWK~s^qRZBLm($Z1Bz{d*TOwcLDM6Ob38FSqdo;!(g<#P2u}*S+ z`jlSO5JVmNZOQ)gA$x0%R;X5Yw~l3A62%?z%2JyZqgq1Y+Ei7Atm>M1<@5EkL#)Y> zLLem=)g=f*x)Gd@OSZRn2%^?1a0-ZZK`XH2jYn_&21jRCbfcP9qzHV#>!Cf5K-L_+ zxFiZZtcBV*w1RmVP}enbG#(Lz9`UW;#=G?gNS7g8Nu7^a-+qfE@<_xLM`!13Z46lJ zhPbA{lNEugD9eh|!!L>D6zOt=EfA)pNT=-Fy3e2&(hEz@M@#nBHE!qknfHD|7u_TjjVD~bI-x(GZ=dQ Rt^5E0002ovPDHLkV1mdS6TScd literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_front_blue.png b/textures/technic_gold_chest_front_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..7efe651c71deb40ab9c9d7e54c274ba455415360 GIT binary patch literal 2666 zcmV-w3YGPVP)s;jE2yL#gya>NlOaz+NN5gkaF$m2=IhL^;V16y$9!0;d7 z$s9Rz>fC@6!!TgL2E2swrj=B4n(CFRZWg<1fBU=lI;bY&N#;Z^c<&y(bAQ_rfBZ*( z=!$&7#kiu~N?2d-5r!eoIhv+HDTU{GD5Y@D5d;Cg?^6^7&N%>t5QJe!RaKN_i4X!~ z40T;&j6rLS5Q3s87>~y+mKodYK4H{Gdz5q%kGl^)WG#uA&2v1@=XFV`2*VI-Eyh}u zlz5(p5CS0uIDvB(=Nwg4T{l!nsVK{Ws;ZGv0s?Dl-h1yoW?4ph^ck5g(U-aA{(}en z`i&e<%(=0B$nf+T>2k(A7d-s_O~zL*(bBH|)&h+q2x5#4h~)xn9mYZ~BDS~Nyt-Pj zn9p&l#anlF8NWQm*@lu9dg~|5E6r!_*EoCf1oiR9AOCz~bDPfO9|_VgsOyHCx9?(_ zipaA}mkrYMkWwIo!Z=CX-k`ntHlvFnL7-9ELr6_oH4J9~xAyuh3x^gZ<7tW&K0-PK z20MGk`0|oG`T=!WAU}Nk8{FTExYM2Cdx}^t7!F^sx$`}w@@WMPzNm2y8taJGwpi=* z_{Fn*lr$I@(14jh03>9yG!3^;u;q!p9|QJ0|AXE>U$$P88E5JC{^oNvB) z!o|44IERt~V=QrdlkGu=ulG+0RlUMk+-k8{X3TO)D@n)-i&BF1*s|v5I6w+P(MbAR zw>dugmRMH=NuSNZCeM$~5UycSN`%xnu>$XU3|n1LQm%k1L&BuP)BOW{)sPh>Ns=Jv z^Eq{GxOwXqSF;?4!&t{OGo*!~X&hB;F-~%R`V38u@Z0oSK2P^g=*5=yTAPi2kLj{P zB5=+jC1@!T0)&9^yyVsJkj=JWV{?FTFrUxSFJE4;87w$BKcf>_oD67$Pm#@u0*O`v zUrSWoke8O!dEDN;!P95Yh;&Ji^oc#k;foRNNZ^MNb?uO@Kx;?~OB^V+I*!m&SmhIU zwt4m974xP>XL-g*?Qm1)sBnw*{w62KM{gP%>qtUPQPs@MfMxD+u|G%IHEQRm(}=I< zigws0uLSYhJ(`#QfhQeJ1HP6>0iKprjb)J;(#6-zjw+&BpdwJyRWd$ z5w4mQ9TaHZZPWHktC>=`lL4C-l97$=)Yqi;PzM&s2Vh5Mspu84_*ZV6yx# zHu^C2G}GA}PdV0-fHcd<(*=3DWV^phq7CQi7S;L#W@&?M6y4r{Y&N72Dbux|61Nlj z>HjdPCy2lL%RhHteEAKTi%6o7$B!T5`#y0T6Gaie?<1vTF<JV)gV^% zbk3o*qAV-4(){R0k5F2_k>@9s`&KNPf7EFSmeC_!*>zC|GU5KCbInW`a$@4sbH-_}uj9#CiwMI(Ga5yB(OK=Un zP8j zjAu)lD#KWbagxXfB|!?P4dj)@Sp!0I>+S<4qZ6E5lG=!!e!ygwBj-!*ee?;Xl^mVl zWB=X0caSH7#Hkj5CQ#xPH7=Bc4buXuWJ#@hA| zP&%R=TH?TAj6(>=T5pHYhvx?ec-rCl0m@IX4xAIz#e~C?A?sUrh{BMy(4b|5wT_}P zREH5`OyPZ|EhGtHm6mE;7q9s=B7P`4*Gu6v3~u1febwI;O}AvMgI+ zKx>cVZ=WHYxz?;-T^Xkd<2H?PD-0}`ORUIP7Zo}l@O$_F9$StuW|fSTTrD22D=i$M zCy>%1bxag_ytDNEAoVx8k^Jf)Lp-h6hg#m4!RjYm1YgpOgkT%zamIXcK_^>*m> zdVDbcYq}eTWp0oXq~FCS!!$KoOR~}+fFw!iY~ADK**>CG5U%af@A&-Ze;@I~ZOi(a zT5(>)SW|*+PznSZDGYg*F)tLdswzs+VQZtq$;lasUsKhV$d`CZkfn2isEyPfjj>1} z=y!aqlU$rUp&K;>(HgzBWdHe)y>&+`R4b>pj%8jF#cSl1r8cXCtR)n#O;uIMs;-$= zK3_dOz?vK>1X6-g9fBaF6T!u}WP5vuAZlIH3}Ri-3M_f!(cQSg;pruvsHPPu0w3_Y zXwM^%HHT-fhyo95p*9Y!U|t5)b&b3lUlD{J@vYy)yY)Lrmmyq9onNuB{T4~&k%&tU zPcPWo?6ckpaZQ0ID*{zfmK7%lUl7YF(&Y$SAWTV-PT9G2pME!_8P$7*c-3BF!Tcq{{Z*S zzruU(3^WXQ=V2)i&`7eXi>i_Rs_L=c{Bq8S@ZuF^81}X=kU%0c5jW!Ix#yfK{_-#W z+~(Pmt4T?-5!35+34#D?Ep=VvI1aAs;y4c0T72Kf^E~oA$65=35P~2GD9e(fC=f!R zwWg{nwALu45JHgWIg`nR-`69!0J>G_t4nYuLj6oZN zBPFiuB7{Il0ajqG!CFgMmbVEVq;x2XoU*KtQUU^_D?a@2L*{8pa`GjqDNr|=;?d*B z{N9}mS1h=*ea!IukYqJykqMr>cbCcd8YRv8v<9dxz8|5DPb8NZW6=gO5wgAA3AY-{s=@bDYmU`|Ot+gKgT=U*RWTQ&ly0?>#`* zC82AWt!kv}BBekG2W=%$bA#sKT}D?!d|%-x7apb?CVyXH#CE9Z(n#Yrz6okZzN$%}vf<4{7)Xe%Qfp^cjw(EK^NcTZ9lqD&ytL z=Uh!nw6!==ptT`t4%pso^WDKYfm5w97Bw0yS1I#M(uiZy+~7EZUSw!_85WR2kk^v_ z);&&7z9&*8e%xoUIpEdF1;W-W3yF{lE7sucMX=QYN6Ix&Wk3+Od2w)r=hUQmK^(`( z#bQBKY3}atGoEKyEZSIRsV2!ab!{mtgSL{(^FtIF!fVoPc)U0`qZ=8TttK1&F0)mM zL}0B&N>EZF1PB3>MZuflF@vUHW3Y*^uvjcm*Vk7J{3S=17qmlzl|Hrb$kPR(FHw%b zQxd1D$qGYaUGDAP;l<%0p(^m>K9OrVem$ZY3cMhssw~pxCKjN=it zw|VpW4U4)$rCG|z+2O9raDpv*{Q+mECqE?C#u5jLysVh(O;(x9)xiSCw5Y75N&J6<1p78aySD0$e32Yr`_tB+KuZ%b${GW7O&C348Y>b@x4#7jk-h zNE`xIl9w9kHmI%U@4vi5$|jei5sq}}bvN1E+N7>3Mxzna*&N?f^p2L?k2m>7Ta>-W%##{ZJ9N66r1K%UNSL+$fT$VM zPyUl>HAVdG-~5&R`kR-eHY5%Mo;`bp=Xpd?L>Pv6o`;l@X68EKkQmL*?&@dZhi6N!wEe&++kpZ>`o+39=W2oyIV+`_^`yI!@_dHzBLkK}tRku}I3zF-)06z%QTQPdOhEfVCCBxy6G%LW? zblXkTlly&c#tPlsCH6fY{OElqlL?bJg}f{lh#!QLQs~)I-!tQ zpePEA)>ziX>U6s_n+=kp#90p6=(ka$RPgBIpYrbACPEwL&;O1m_a3phIj1Z#YVESy z>@b>B-%wjVP`YXN~_DGWy`Sj^iKK=Lu z0+BG-dmpI+d^6?yVadkkE;RuSH)Hgh16KK3kZJ?c5lA7ZjlokAurzl*!tk*vSg=-5f;_L+_N~!q5W4l+Qk9yQhZZSQE-(HIS2;*D)>_is;CdmAIAb`PG%fam^ClibtPWDcuwfMI2iKMAcdf;1;6;&K8HtVG#VkMZlD0B(7*NXP^!r1wHA4J$H&9ze5H+c_U1MOiT46*=Pn3A!fKNWL=yFc2Eyh?J zxgI>;Mv_|sS0JTDsE8z6~EK3T}W^1F(+1UlLS5a1m(37~1AWatd zVH2rbYQ08tzwKeHov_9aTXdU}gI7cLdX`4utUJP3R#`z9wa7|CrPmHwNyu%J zvMiBhRk0{NzI}0o(HT+*qy+7>@%?~y2v?JW?d=`>u(39r0wR^u@C{k*(%HDf@%aty zu%Zz<_#WVPP_BzFD~>PT5c)30K&36pfkoj{RTXkP8RG{o(f-eH_x~7aQ-m$3vN0Rm z?+}MBvAE&*{EDqXpI$q_);X>$@tu;QC^)-Zp2FQvpKh^-cDD!oH`wky;pgvhyZ`_I07*qoM6N<$g6IAsEC2ui literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_front_cyan.png b/textures/technic_gold_chest_front_cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..e33d76dffff4bc23770ee97ab1bb219535d7c4d9 GIT binary patch literal 2675 zcmV-(3XJuMP)krgb)-(!DKRFxyslc_=Hg#?NQQAJZ|6n0i7gfzR2-BpVyF55r!ewT8y-30q^miLTyXEZ*O^?sL`%E=S_?FeAc!$GAeKw4br=h|h}hn4b8)p~ zxme&-i??p=GI@E5vkfIJ^wv*URGQD+Z}aTYBh<$qfBcKl#x~vQKMjO&J)*twHs@z!fk+^^gZgbK>pyt?{a4^;#O~t?s?9ZIBdzpsFndn>=_o;EY%gj(U4j}}w&iVT5 zN1RP6jB_X{Fvb$MH`w0n@^Jr@P}OUW#jO_0RmMD*w339ZuqY)M#Fmbq;{YiHMI#w* z-Q@V_8)97%BttefH+XvV4B;A>q|1lQ<&P-xEA;X45qmc!P5--SKjQfC z2}uMvNl_W3*P?NTzx(VO8JoN~KSxQAL4T9YtxcM`=KTDe>1qZcz>HGEW<9qv-WF$>w7UkuvN2K5;u? znEp4@dW!g)zy3@2#g|``xrihRdGO!?zV8#qF;NuZ`#w@imWw5i9zDi6hadPaJogrKU*bwMF< zKv|YpV{ojS)$8|Zw_BuTg<6go4ZG;`OmOGJAMy6}Ho{oukN%c>H}9~xJf$jg8so9s z?lGCKXsQfjCB{i2ACv?spf-?K7H16z&5hf4nVz5EYy}eDoDtyVq%TH%PpUCr4L|c5Wk;M<7dlSs;bL zRw>#pNseMw^+^R!{MY}oL9gb_$%3{_)Tq&17wP^4EpK6plF z`+F!I(GD$f;4sD^grn2nA@t$t!2zCjcz%HL6RZR01a&dx@MO$j>lRTM(g_V(HdyN@ zDnr#sloS+2vyN}AR*T4MFc!+ZvRP?QvvU0Zsr`HR*=zCQexRx83bEi}M%I%O|P*yDuOl9`ECbYf=0%J(CD;a~Km-yg40)EZC={})DoW91Yt-fB z3fHEpDr8mHEGnO`9v@&$juZkZ!Kf}l5Ymm{Y*Mnly+aVS)`3$%tP5I!C2u@>qiYk|Le4bK?%fUPv!2 zIlEf1H`2JBKV;GS31Q@MIk`mq)h9o5=!nscyG$mRZ0_Eo*X^RUMk_@ShG?w`e1Glr zN&$kVSu2?kpp-&u4S==l9kQ+}s=A`8>Q~{$a5b57@#2{NaD%Ipub?T=nF|>|d&!qi z&q$Jl<#I)@*F#E)@B0Kn@aEvxTd}qFjpFfZ>L;bdIk#@@t3XqhB~?{ntz|Zwadvh_ h`uUf{0qkyX@V}sTG8z0T$3p-B002ovPDHLkV1hup{w4qb literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_front_dark_green.png b/textures/technic_gold_chest_front_dark_green.png new file mode 100644 index 0000000000000000000000000000000000000000..3088bbf55a40785f8ca42b6558eebd396239c76d GIT binary patch literal 2672 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 X3tBTz8GPL100000NkvXXu0mjf3Gf8V literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_front_grey.png b/textures/technic_gold_chest_front_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..eae7e6971a950d7ae13bedd5fbb59c0f6dfd9317 GIT binary patch literal 2678 zcmV-+3W@cJP)q^Dny*%E!7YwmyW z0l$4C#}f-~?4B^ZcuKmOv&aPxeteV3_zErU`fn}JID#O?*nn6rvDRTME9EiUs2Z$H*ej= zG!>C&nXMY6=OLv)2!(NyxILh~^$w%UAwi%~+CxZ9Sv3sj0fz^DR)s^0lF2N^3LhaI z0)w4DWpaH@9{q&6ERa8c^gG-?h`7_8<9mu&E*TDAu(kIir1EJ64Zf&x4jSu-Hg?$P z^!WADBa}247tn|{&N)0KXvrzh&ac_KaTloqLT!)~fS{@^1lv4%H{|Yq%%ew-kivnd z8uHSSmxipgn0(5M^CL>@;~Y2u2hwY^v%Ss5iy^I`B#62MtvqSm%8A z-D55%6~;M~6c}TP+gt2zclh?`f>70KjK!@M%T>lam$Z_Etgt90*o-Y3evSjA5EPB1 zzjKST)9;COMUeE_+TP;X>2ri@Se6nYHBPL-yBWhy7nGE1pvsUi>G0&}7+*DHMM;t* z$i-qoT^nv59x|TiI2^`0W|<)^3{B&xYKw7_mlsdbYU{^n1)! z6%v7S4k=| z68Ku8>V~|uq|W2k{tccyeM+QDf}~IEIZj@TXh#A+jHqjebOl;NT3F&hvD0ycp28}h zxU&Z1%S}KRbP!*jPsrYKp36ZnjzF9+yW8l-;0qjyjF_ zcA;p8ZSqPGZ``A~`d2*ZXd3XfL<;bWiCIZ$j9ijvr`UkNt)h|(SF3) z$y1UDaFU`jNUufX41f2<4KlWQIU1p)$7XMv?VW9!x@I&QF`dl`e9h+Zk~_(O-+%8F z);Yq~0AG~YCTG>uh+u$m1@q~QA1=<&aXqE)6-*C4BU@&);(w&_Lxd3P4v-4mfp66s)MpadO{`u#mc|k04KK$u>h(Gz`KXlXi5`-p> z0`~X!vDVTw4c1!ZYwlM{5%@ly?<0huuItxTS__irc>r$(>5Uk@*+XlMl#=0aNS2r2 z8hV{J`oWz(*JF)o?~?>RcYpLQlgR`j2TVujIJqLV5qtfB={!d+R^0peGfFEt zeR+?gZ@)r4c<|w`R$0kj`VX`h|4cW?8BgZCvmc;rhHuA=rzy7%Z=%Z=L?UIw&yXg? zBgH2Jvm(%r{T^sLWi-0v-a&*dX4L5jQ|H_|7$C|K_Ud1lz4($Zhnr++hJ5(&As>JA z9-&CtI(QeULjpVH`(edkd!L4omX|a7;fPhS7No|4R01gkjkWk%0*?0HhxkF8wwH5! z_KM9xpUy^%Fc~MOXG~Iw6^d5S@bO3Q^6=q9WRfKKEIH^DOs|J*-?&e^w?&f<`Sr<5 z`n$KWPU2DGs|IigAc|t7jzFxhqV3lVPrqSj|0b=@7KxYf^mNQ%?=Dh#1hT}J1yTrX zm7?vEBuUUh2z<}O0g+sBH9Ti?vxlZc+LX!V2~`7HgG6AR!;kxf?H-ehV?s}0tfMgw zAr`zGO15{l8Px?FtT_Ar7%c^%FKLWpo;J*u4O_mCFal|ep=u0^v}TbSige7AEY>*kU@d-9a&-V{D@W7AXXEsQKx}3CAZt&}v24riBKWPNy713Eht7 z)cajD75^t%>&K`DdjIozUIMLK{C}}{^RlK3jPN z%@O=&Bh)2A#}s)%mSt-UXzg+K{ZoW%_)VX{I87M0X^dNAV6|FdMaHJ62wDRU#Su+0 zrZEm{9ZIeTk2jGPj?fcG=@2?5jyzsn&(X@#YIU*BF`mrWNHlMkz2;&eG>uivCfCq0 ztX3=ZVzEF68Li$P{a%mpvwvbMHmq`klpy^sJ{hK|(OQy~22nziBy{_Q_c>9;JKQmuPl#8^{;ZBPnCAdte4XBmq^A*-sQ6diU39nR06llV1NZHat| zrvzELAc)#X?a`Pun)@9e>m--wkLgAYL9{`yEjfBN- zx?#!Xc*Vg$vP<2LJ#7 literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_front_magenta.png b/textures/technic_gold_chest_front_magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..6daed3b4bc557279fb1a0c5ad1052c97191cdd48 GIT binary patch literal 2673 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 literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_front_orange.png b/textures/technic_gold_chest_front_orange.png new file mode 100644 index 0000000000000000000000000000000000000000..085c102890589e18fd4a7775756d0c88d120393d GIT binary patch literal 2667 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 ZZvmOHIhqE{YRmut002ovPDHLkV1f+n`0M}x literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_front_pink.png b/textures/technic_gold_chest_front_pink.png new file mode 100644 index 0000000000000000000000000000000000000000..eada4da8d91aac31705001674b5621930ce55a33 GIT binary patch literal 2672 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 literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_locked.png b/textures/technic_gold_chest_locked.png new file mode 100644 index 0000000000000000000000000000000000000000..91a8b73321ceda10f2b43c93e682ebefca7efed1 GIT binary patch literal 2717 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 XJVCP$lGTw=00000NkvXXu0mjf5t|_6 literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_locked_black.png b/textures/technic_gold_chest_locked_black.png new file mode 100644 index 0000000000000000000000000000000000000000..5a5a568715cb0567fd7e72e9f0e63d65619a0546 GIT binary patch literal 2720 zcmV;R3Sae!P)W6)Y7gdoc@hQlG#S;E?qPZ%}O9yzU=$MrkkqFIX>Pf|S3=T%6l z2*VI-Eyh}ulz5(p5CS0uIDvB(=Nv^*yu45$r6SKWilRhH2?(qydGpOT87B$zXCIT; z9DSK;Zol;w-`Gm=#DuN21Nz7N%x7aJso>77*BB07pru`8Yk|rU1Tn@2#Bz$Y4r3t| z5o>D=E(TMklL=1M*}b;G@WnCCR^-&tt3PB?X#UH6o#TfOQQ!aG_de+L)@Tj?o?w2T zvaEP*=Q^e;h&;>HtU`JoQVN7n7$=DvJsQh5IX~+Y1RAA1gw*6kMSmQyz1d}!IkdM@WajV8{CmFE7cWw<+@sdH3#J-q?!R?Tqm~MJ%WE`_EZkzkyUf^`OERCC))* z9Z_?YW~;*&`+F#9FfO1H4V-g$N>G<0o*Z4WzI7d`0zz$&WPqS3Ed(pveIw-hM$Fy2 zcaZ>|sz`H3nj4bbV$u=MkM_u|k8|Jv97wOh>dFeo&->JaoFHlw)VuW0M@$n#Q8|PV z#5(2k&mVF&EHKWYq`(+U+*oF9rNx82V?tFfYOGePF`XrhQ%Sv6BgrgE36^3@(@$}L z6oRahbXRvceD;)B7X-B~%PY$~d3J(u71LZIq{fLw@h-)%+6E=%qEKZ>SZncU?=ilr zNV1$-t%jUTCX}V&we4*N;}nO(SjSajm}iEnaulV-ILYbpKAIHaH|W%T9_<~`i7kz0 zgI>48)vQ1waLyqmXeki_gn;2B=c0eWazoHtUO_mROeW~Fvom_(l*gwhv?7a>0hRE{ zk_k~D(MsTJi7G47+%k6_I~!X(+TSPAIYF&U>^TmepVNp0ei%`f4(T$qhIwX*1I22~ z5qb)%eB#y`7tb%4R3$P^Q!dI?YC1)QZC2K|$+PsUi=Bg7sBum(HY+@zt?<#_gv2zN znl9tHYg>T#YAq%F&2DcCX*$!+-yfZ+`omc)}oU&T-LWZF8GxYOs}}-B}?S_sPVZ ztHy6qtH*Tb|H-HvA^zge|J2?8^m7syQHw(E-o1WXdP^Kcy@R z0Lrog0j8?R^OC{ff^K(-jrBFY{hjY%?f=Mgnx-U4LQxca^wCEoX+|VczV^{oQwo8y&Jd#~OnJ1kmnuXfzrmS&p3b>2+J^ z^F(m_z4y8KS_5G$X;QGUzJarj`=9Oe{`=qO z3K35*l?VT|@;{_)^FK0IFK+0!rR$$ffjJJeb$)VzfKX9Ifc*OAI2kU750 zkV0UKIoeLB*J=wl^gRy;L~_Q9{t-)^4(lr|R_k+yX9pA&SU|AQ20!i+HaD2hQ+C^9 zv`z7*djw+2Y5$aNw~HS(X!;3rZN2T@aaCnRlo8F7^ey229hPm)&1lCSv(z9ZNWYCwf~iWhmL$1B0JU0;*6QoLIN3v3McCY=+w%F>Up}K- z@3PcXi=G!T*5qI-lmdZ4DodIqOfrQm@|;|>SnahqIy#}|mlUNX@+F=UB=ZSD)Ie&F z%2=cjbXz{wNzRTQ(vB*Es7a?G*?ZDwbIDN;)gpK6n58*U+$1e5rCI!_mXNsyMNuG& zs$`aXeD>%G)}%-wkP?h)5d?Z1yy6 z{dbtOe@GB}T#g2aKfCw)4jr;|?QO0uE?C*PM!VHQYmHWlAPmu36ZrlDE|dZmKw^wR z2vAC)wFbc2#SB>%1w~m<6y-~}F${(yE=~{Wbe9<%eFjyAPFzU;rqM=u~^{P8wt)-MW=P1ip6EWm@PEizCYq`3*;_U2<`6r(e2e7fW a%zp#WLtNoA`m4VH0000T{fDvLzODglE0 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 literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_locked_dark_green.png b/textures/technic_gold_chest_locked_dark_green.png new file mode 100644 index 0000000000000000000000000000000000000000..084dae50f0b07df0752fd4dc95f0d6aefbba6767 GIT binary patch literal 2734 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 literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_locked_dark_grey.png b/textures/technic_gold_chest_locked_dark_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..629e33cec163b946e0f06262a553b3bb82d5d842 GIT binary patch literal 2722 zcmV;T3SISyP);?fw$YX)sc0a1z-PQHz&Z^F;d}rQwM6k$idxzM}S;ZeMZ5MZsPswy1E!F636$H7{Q@B4V3N0wz+YXJ~K5Cj25 zQIO|3LI||hlx2z58l@CM2(m0=Fc>hMC9E%d1YsTJlGBJ?_V4}{OL4?_lH$4^uO+2J z5Cj-w(8l0MiR-!uArMl460J3tAP$uI^=mqQItq20fEsaZ@>LE<0N7J>~j*6 zqpnlMop;{hd)q0ln6SNmO!w@F`E1N272LgjgF*i#N}9#j8lbZHeuOqYk(^?TMH@&( z$ohJntNxVfWP){S?A_dC@bV06DspP5wVyI66#rwt!`XueI6wZ;kAB|itkW3$1OEIT zWm$1!cOP99gsx#UtB|gXlma0fw3S5l4)v8=^e(&jzQR#1LMrm2qC584*=jS(EK1}I zMstkt5Yi&hnDG&V>ua*`UCKN|9vmF-)^^BVYmDbQL~=^E`<#`HH;|4;&9Cr8iM3D} zOSrVgQlrJ!M~664qpeRR>R4-W9YIYFd2)Kq#`Zqa@d=bhk^zFEG~lmt@K(V7X2ik4 z0TRGU1zbe1qqCAByv$qbGoSdI)!UWx^z z5M-64y|&BAv!_I=z>nLktgi6n**U^iOmm5l3M&@NyBxt<6C5cQiz)+xxWU82$9PUf zlI6s4jGRm+l%?jz&JO)?ip8RhWt3>K?OF7j#xu5f&zs3F`9ll1?z?@x?if&|sxcB|NfZ zLg-7BBk+{ODJ#<4Ft;wdo7+4*IwDj#e%vNo?kJkN@SX*T$O9YD#Zz!tZwX(XX!VCt%W#HSSuLoRi4jQ`Sfr?qL-NJ zHsiVEKMyOk(wY)S`c(@B)Mo3kS%6aDAKM z>{oQ!Fme^6@dVeg)FYR@{abwUAD{63AABEIXr#$GD>|%i?J!L>rgCVuR!PQPGBIaV z{~h95M0@_<49g+num1AS?Y%D_k=T$p3^+JA!1Fw!C?X6)JkLW)$#gR1i+f*E76kxh zS%CmuRpfa|zkfx$z0BsuIzRaELyY-0p3^iXNfL^p;L}e(B}p?vk@Eg~zk&F}Klpt+ z98WRaIe(LB7g<$60j3>mI183LylJ;~<2f`{IHy3UQT#c~xX(S$=be zQVJ<0-ENmO&9GL}YSdA8Z??JaEA-MPvFEe@#%%_J0Yb`GWhC)E4~gOI^n}4xkHKJw zwSwDs-r~jiITtUlSXx>lh$3EIbotJAze`kak>xo?Yb+puW~)WLUMI1AB?%R>EoCL&-A$-&Uxq72KP@=E_wrcy&h>&u(`2`HI{o{9r4jeKj!@T zImNWk2fIVw+Xa)2DCa$NnXu_~-MV6-IX5p;J&B(RKeCN;T4Krk|R>Nb;RwHA0-DP$A4)xXw)x68s#}~BM_b^uC ziX2C1v=wM8@PY{CMf~&e2Yhn2##RQW=J70 z#T;cO)Z%#2hMwzUfl$tP**#^s)na3{!CGz3;PRNF0s{yZ+2BQOf~8I7^OU{j7-dr2 z=^?(Da?!n@-EQLrb(Xw@lc$d{Mi6)sB?aSo#r34Z^E`wQC|zlaN;8?47^|@KdDx%v z_TAqk?cJvyqzG%#+Tti!YHgro#goU6X+-eD{Vq~okfkXWNtq2fKCRf!H*J4vSo$X9m{`splatdSjH> zz)2+S_8No!HLjxp7ELGwU-c%0{x%LdSz!=DP-w~TzOOlYa!#!lVyYSn1jFHwtuUs& z9PoEfZ{RD#|E=iT;}Bq-|BnhSdGGnJXvLQPbOK=$nIvqy*_T@kr2BiBggz*9ahvV;XB6UY;MazmX9vZP9L|{M%>G zc&BApUUC+m7ZFD1U@9DEVPz={X_7F>9AuH_M! zQn^&xAcdga@Gw?#dHR56SmB3DwCa+>CtbFdEw#Ww0M=M$X-*g|krswhF9=yl$ZVaW zD3C=}GRs}QdiVsRQ=||`3EFAk`vHv*E(ba5>l^rC?Ul_SQW-VhkXA0u&Njzq*EGVC zTIk?=fZIg5F1{=|KEERLU5tTJTa*Kn+@~x`WPi}d4LzdW-^Shf8PX;Qn^UHJI_rDH zp-U{TIX=5&ZKcg}BfwS}t}O7Kf;=xceSD8dj*vD*m<*wFviXROojbIf0nH%ivOi<1 zqp%yl$E5jF{K(~c*hl=u$A4r|0n0bvWps7L>gG+FjRs07l;hwB0ZJ)+&s)HS;{XdF z(OM$}IF5r-3IJmk8B!JnMOjc338*SLmO91yzPhY(V$C$NcFpsYM~v z>5OKxiIfu0^YDHDn~Pu5&}-a!?T*)HDJ9lg%JTJ#81g))C<=@*j7B3aFE5#Y@gh($ literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_locked_green.png b/textures/technic_gold_chest_locked_green.png new file mode 100644 index 0000000000000000000000000000000000000000..9ea18184939ae18864c5e29cb09989818e17606c GIT binary patch literal 2724 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 e16W^O;=chk$XykS_css#00003OPwc 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 literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_locked_red.png b/textures/technic_gold_chest_locked_red.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfe5d4e9f4bad3cdf29a08103ba7c74809beb73 GIT binary patch literal 2721 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 i%!BQBN_kz3NT4T zK~z}7wUyi zKPIs``YP4jdgBegxt-#P3ES&O^iB_%&&Etr!R?!`Fz7!=OS|~31u91n#26b8%PH16 zjD=K0tgkn?>`$3aCOB1R@7gAV=chPZkyA&neV<98`7if%PVe7Gz5Cto{tyTM=GCsP~nRb z=b*BVXlae5W}7b#4^YxzTtFonIOp(`pe~1ed2+?Z_C8VtgxVm<06|e&2v)iCTFCxp z%$+-TkN}>lNOMP;8MEyCd(?xRAZiiRJM=DwOcO&< zIfM|zI_2}v?{hvVFwUW*z!*#1SYds&$-RS9LRBt$tX8Wroh6J@NxfDh$t+3r9=o20tS>SiWjdOyrS>@?$m5&Z4 zBxZ@J=`fy4{{5iBs1}*pChFd%EVCCv=J2&d3h=a~s4T;&;r!$tW4B3~rs$)SW43k` zRr@B|k2pR$q!s~Ak`)H&)v27}uRq=789WP_J^#REwp&tJeg&!h>STI0_ zMC;oOXa7OB10zo}8c*<)qY-=T?cdGgV~X@+x#cC&%LeXYY)Ut^Xwsrdo>*KaZy3=mSjFe6Fe`$#OOC&vsf zFBlAlI48Jy>ouM|dBWNAOO}?F2;-RNXFb0Djc*V)+GKf-H3kO=pw({EXf#N&969UJ z?KIIBiQv}T?{VXm2Etgz_y3aHySJEJol@i}mGRhGYVi-hfTC!kgd~h>WJy9gy2O<^ zuU_B7qS@Qq=lt;@&rTlmgSUQ8A!p2O#6~AzI8Kq188_bffYM5i&R*r<-d)t~H^27d z**s@s{*N>!Kcf|-^ao>ZYz8Qs;M+b|!#Qu<*x=rA%Gt$$i;D}=q+oMn6K5TFKRe{T z_ul2n(vR<#_Gi9rpF}&)rx_ygAdxdJ=9E4FXt&n%uF z(Wpf{yBPDv^$MjWoz5DA{uQ1w01GD+g4`%}_TNX5lNENMtTJHy;IBA3Ij3HauvHxm zg5hw;R#amxjJWyE@9}@3`@i-p{QvPcKmAjd8=C%f0#OT@By);hvJ$w5(EH9}A=S7S)IoJxNpb=}NFr-PsBvZ&D&&frTwQiG>lPA>tlA^RkzQj|4WIiE? z8c6L?8H*HxPSeLa$@$5BT2Vz1EzxdB4!-QMwd|;e3IRCln58*UyhK`9O0!7FT0-U; z6h(n7s*+jm@!5kfu_i?dfs|lWlOPCbMsPmJSzq5Ei0UtB2C>el2bQ$*Xmz(aI=!M9 zmDD3e-~(O@?Rf;UN?tf}$)aitcUI`1dxCt}F+oT4bO)-oE6I6psU{>i7r d0c@_X@ZW7`RYh*8L{|U+002ovPDHLkV1mjXEbjmS literal 0 HcmV?d00001 diff --git a/textures/technic_gold_chest_locked_yellow.png b/textures/technic_gold_chest_locked_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..2856165d6dc92bc35010f6912447992684e7403a GIT binary patch literal 2728 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 UZJ{Wz>%07*qoM6N<$f}VcIi~s-t literal 0 HcmV?d00001 diff --git a/textures/technic_gold_dust.png b/textures/technic_gold_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..00c1a2fa976fabba58422b5db592fa2d445fac31 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rhe22U5qkcwMx`wwz8IWV}iZwb)) z_5Z$x&SjDCyK7sNUI=_K*8eId+jZ`Df*$kd1eN~dkAFV+*kfpxvRSm=dsW&wJ>g}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 literal 0 HcmV?d00001 diff --git a/textures/technic_grinder_front.png b/textures/technic_grinder_front.png new file mode 100644 index 0000000000000000000000000000000000000000..a28dbc14a3f1e896957cbed2beb4eced6f48c529 GIT binary patch literal 777 zcmV+k1NQuhP);}h1$8XGW#)92cTM6s05;0S?m#heOKKDIK|VtL?! zhf?+QOjlR;t~yRk;~@44`_Yd$P5E%Q7RSGWiN~#^#Mk*a?$;B7+qDJZ$8A%<_~y$z z9&&R~=b0J&PWwfKe6cu-D}8a94T5*4X?<_b3LhtY_?7g_`6Ly-Tiz~zsrUM9Fe;s zTKO36biI05Uy!eJlaI=1vf!sZ9T{%?G`!NCi?#(0=RK06v%3ugfAwk<$Ds?lBJ3|{ z=jeo>tE;7m?8O#he6E|f^m`Qy1TgFKVaDsltly7FFo<|KEQp0d@OwPq8=u?#e2&h| z3A4^S?Zr%B1}dM+Vku){F_jc#(Y~acdKW%?*^c zx8Uk?VtAlmc%ZjO*y-q!Tz5yia8G9ks>OoTRZ3-)3PmVexmGTTD|Tn+q5eJ*VoWhQ z>+k6nx6E@2)--B$RLd2pN?`|dMKESZV$j)(zHY~}Gv>$~i+2>UN=59}8?Y)>C?05& zOlR!KJKVEppjXf)7lHlfnV6kbDaF^f#v6fk~y4(cD+Fbw<$dI~;b@9U^Q00000NkvXX Hu0mjfy@7E8 literal 0 HcmV?d00001 diff --git a/textures/technic_grinder_side.png b/textures/technic_grinder_side.png new file mode 100644 index 0000000000000000000000000000000000000000..af562f26abcc8e59f4ceade8f72a45daccee1105 GIT binary patch literal 692 zcmV;l0!#ggP)p zmFBNaSV+EWq($ZL;|y-A3Eb*|+j0nslXu5y?3x)-LRAF)53Q^eQ^gM}B+b}p*USoY z$h{V_*SYE{{{>4ejVi8nXEtF&DttaE%H(w|`KHLMwJaXuB6om|-eRX~6pMJ5TPG?_ z$h?h#na*aLdP-na61!FodtI+Mm3QJAY$^wSz0=YP$V!~fLz@Oyg`oJTY=3Iuk3Nm! zI#fYbg!zKTM)zz#n+jKZ}XWjePqU&$2i&e`R5QY0RD#|8nDSO!$F&f_oL>Ajp3KSxV4?E78a4R7(xcv3UWLhqB=DTM)+N2bw zQSOq4`UTA^QS$o+y+4_>e<;iIs%y}8P?Fg63zGMbrUahXcX`@1Q>59oTY9a=LA5NYVTWz|hDM{X-Ef|KG6fmFl~ zA}B;&G&4fEY-h=;CCTE3ZaG34I(zL5d7Z3~fC_=%*IiwTLGe7D@G%)d-+ literal 0 HcmV?d00001 diff --git a/textures/technic_iron_chest_front.png b/textures/technic_iron_chest_front.png new file mode 100644 index 0000000000000000000000000000000000000000..79d5b49eb7912f64954ce5ca92f4b61d2c943a35 GIT binary patch literal 2515 zcmV;^2`u)BP)S?vdJsP>y4S2bF{)OS20efJ;X9K=^exK*!HarcDT&jh|5^HC1%_TA-d`Ob5 z=7~UV@x{A__~(E6N1tuhJgiC@^@LuxORZMJdylmir4(9gwAKIwK|mOWAf*JrIR`*d6o-3+5Ex@H#vp`12!XYhw{PFFPPc5PKe5gY`Z?DO z-~5I_zl##kYQ)@3u2{UhP?(H2Z@%H-;Q_Z>5WAPvlcf5%_W)RH0qFJGEEX>;URH#) zknwoTCbFXK_N1<^@t# zTPSuDcRC%0g8}#V_XJv_v_=R)Q50lp#%OeeDGkPytk-J*gaGRt^Z7HY<%(v#MOl{U zzxnIGMJq{`Z^-i;QWP-B}yhi}u zd+JHTa5&)eYz7G0ttRy(;ra2AG)=MA9wzWr+|1Cj{Pmt|r$AA!sxjByr5y z`8g`kw38Qb-m?Pg1_H6*|x2pON8 zlIJ-}NjjY_^Z7Gc1@wDE!g|8(r$15mOT>Tv$G`cr^J})gMm>)C;fEiHk5m$4O2Q!EyYJo+#WBvg%AB%{EXzpKlplZmkxiPC zh@4-4^BVo(;+FX$#ZlnOlJoQPLl8OVei26dTmX;v4iMly2#``xs|6Ti_^&_y@fTqv zcYG2;uv)FyY*RK^%8Og{UyhqBngOnPLL-hCpNv_r*9ZAXDXG!y6oo2|@jCM0ZKW2(=-~S!M<1xN0`S9USyn1!Q)6)~1ZC))P>a$v} zNwcgDo%8x4#TOm05Y>2_(g+vIt{WHKR5(_P2V zynFkW@87>iHX4nJKv9k7=VxA@zG5)wv6wHpo=zDajSlz=ArQN4s3*xGFDimbuC6AW z93Rsk^sxx0H=j8f9Z{==SZk|b0`eV{jYb14gdq5WOt-T;I_)mrdGey%LEnnACNbe7BWPpF_q5=A)gNYe}{CCk-{EH8NVYK(K9 zq9`cKvQmXHc;}FSF$Ewi2*O&3bDlgeC`>_~7hGLUDT)H66mcBmy{Fx75{4l+pFd;E zk|@*+`+d?ZMJl=Lf>i)rTwGF?S*1eC^FXT zHQVi$s8(aM*`R}fB#xFk!E7O~xKXg1r(?RJZGj=`YMYPC49+Brv>WkhjY=^c1_UZ8Y9t5K)dZt=2Q0%en zt#+I9$rLXX-A;#AtHs5|1wsg#jmF_zv5#c8KVL+3q!1)gNNH_l)9dw`&1QqOmUgSf zcswT0^UB?fsbX|@b7?J`&4$a#6;exjohJQGi;Ii%9Y@-9pINUtFM+I!H??1>RE_gW5qOgdnLW9FK-vPiG(lj!%wg z)a(53kN<-TbX8!yC(r@TT1sO;sj4FaX_`@%7HNzj&;gxR>(B{*cDIUD&00Vdgg9FT zO{38OFSwfAAeE-otdqnslgWfAiHYMFx$BmBmeQ;#Y*}EfK`4pXwIpK%y&fMDQV4-mm4WqpU1qZxQcB`DMr%zR$HY62n9gnq z1BvtwN{2*XOj*hN?c3k{VQ@5LbaYI=H{fM42Rybc`TF&1N@Lh$IeDHj9*@CuAk|)K zPfyQy?+**xlkYFy{0dtZWLZI;WgH!iI6i(wquIh(%gxOc@$dio4_=0Ky5nzIt(Nrr zecJ6dT5G~EJT&7V2oCbv!}KLj_62s&ezR-F)q$sS!^L93)6)};R*RRLkGNukUYDA? z*=N%Kn^CVPj7B3moeoN=!vgj%-Z$KRBJLNn|G&SskLvx2xhM*(wYct{|D?yoSw}>-i-hN002ovPDHLkV1mbv&Km## literal 0 HcmV?d00001 diff --git a/textures/technic_iron_chest_locked.png b/textures/technic_iron_chest_locked.png new file mode 100644 index 0000000000000000000000000000000000000000..6229487d87f2171fee4d53df02da4e9a3a1f46ab GIT binary patch literal 2603 zcmV+`3e@$9P)y>6FUt%h?BV+=|uwAN^?0q{Hz z-}lL~j6Z#9wHkSzQxpXNWm!^|c3VOW;KmY5$B&vrb z+Z{?NoO3wm@H`LC^Ki~#twlSwB6I7b&k_zv2G=9=ksf`^_5ldi8VX05HY? z(Cf8Xub)^yZSZS8`+Lf=s>IP~fFJl+`xTS-A5g#ihhP4t-|aD9d}g&;Vy)rq z?2N)1tPmtwj+9ji#s0>fPKV)Oz}?*)p4KR>5kipXIcbtI8XZxT1w~O3$1wmxfU%a< zYRTq#L$lGOEK2lu-+hNtiZtJmWf?_TGFvPdos7xKlCm^70OzpI(eL$$qKNbJbA)qf zrI1o$j6q6CUX)CyGhY4KDbw2-MOk9@u#`nXyVIf9>k-vkj7B45MUV==JTJ)eoafDk z$z*~x7Mw!>&N&+OI>X_B&$AgIXt$a)>UEY64P!t8WEGqH= zLI`}{r(Ulg;PE_-35RxDW z0GM1&Q9`nKcti+Ax6@*HG+>h?WTj-Y+;O*9GM~-q4+jV>u-4LQwUAPhrs(hTte<0)ghm)}a(c=SKm4Az zUw=jD353m%wSeAmNS0+NCFyj!tX503^62-5)WVS2<&QMnGvYu0@4$@my zNziOXSW}{uVzb%s{rBJh#Ej&gPeKSbn+@AtLX4rjoTL9@++^MKu+0;qAYeQm6UXtP zeWaAsYBj7ee4b8OFCTe&TH_GBe)F2U#hkl`C5?K6dZWSp{erh|-x9Uj2XkVt4N(-) zYPHxV2_l};ZU*RwRPp6Ef6wrEj4MjsfA|BZrzbo~Q>l84z8KhW%w4C^eNPKWJw%l$*lH{bjf7I?Uy^YQ(U=)x*) zr*jr}cWA9J4n9wBIXxaCgk-acnJ?yi@#YKu_`5%H|M41(L~XHG^()M`G)n97)dEKR^#no)$7Lg4M= zR#}$JXA3&*F3vi#ykxOh92l>p#5za2)uLXnvtF<9YBkc#kmozvy2)ZbV>ldA6gits z%=Oh30KV^IjUh=A(j>w2Jgjx-YIDbKm*AXZx81Q^E&0VS-m;kAlOzd+QdQK_nnACN zw1%sTPbja(;CO&_mL#dv^Leu&&2mmp$5`vg^ZWo^UKBWMkw8)8fJ8Q;2*2iIts~2F z@**e8a;~p$$@3hg6k!j@S|=xg#UW4GHOUkG+}b#=fh48wzTdY*TP>0)oqt#+G>$t_MOx}6TKR*TEaON6Mp z<7KXRv1I!)Ujz-L5Yz*o(wIu7<2Yu!-C~TP-D)u&kIAwOV+=)6R5rSQxip6DcFWb| z8mT3{PLqD8#pUJ2o+EAA%@&XM_ZU}I!a0Wngi>gwuofQIF~*oG4{V;FQCct@4(YVp zTwGqFlse>mr4%?vUKFT3G(rgKjXKApAvd=(kRHb;M?{SVzkl}w%F|VVaSl&=SYs%Q z0+gyUB9J60WoeK_k>hEPPOEjugfBc$dr~!P9)ag$O%<=BC;}(Ao=lNS(`q)Thar>6 zgrFW0h9PpFEwePCSyPxY$Cv`4Bx0YEilRW~dDV6wKYk=l)5EwG1Obgk15ayK@s`o? z5sgN8a7ZBpQdI)h?{%5YW=JUs!w{`CVHgqy0oGY=XLEc{BAtcOA`uitS+)7wufO`u z;AqHbbV9$^=V`qH9HuP!;?*n4qF|e5WLe61JO;;sR4=Xe__)M5cR1J!`F{5L&oO0A zn&xC_%F)q?2UeoXQX}8;Gt?_;Tkc>UgJG9pe zOn=IgmjL_1{$ihutAVFd!}WU2(jvY_~f?-!U5Y`9Gv)wHW$}d5i!6 N002ovPDHLkV1f+#4+8)I literal 0 HcmV?d00001 diff --git a/textures/technic_iron_chest_side.png b/textures/technic_iron_chest_side.png new file mode 100644 index 0000000000000000000000000000000000000000..e12daa5ca14af9da672cb93c10163c88364603c0 GIT binary patch literal 2478 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 literal 0 HcmV?d00001 diff --git a/textures/technic_iron_dust.png b/textures/technic_iron_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..6038df65e766b2d33fb3937fb79598c8188ae4ff GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@RheXipc%kcwMx`wY1b7;v~2yES)n zI;pUn{9EoUa_U#ntKD*6_5%6A7tz;Bz^<;e!ifYva0y85}Sb4q9e040?*=>Px# literal 0 HcmV?d00001 diff --git a/textures/technic_laser_beam.png b/textures/technic_laser_beam.png new file mode 100644 index 0000000000000000000000000000000000000000..4814a9b2de182135a9a55125c6e1c3fb7ea985ed GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9F5%Rrd1{m#mKpdfpR zr>`sf9S%WZT}kabk4^%G#5`RbLp07O|2gjNgAjs3IZ97TDFVb3n|#@fSRwc^yN=@-JBe*))qTIH zSNy86=lyKkA6i>J2pAu4_^iF=^8jpoPe+?^9}s_DtGHbTqu1Px9+=TrgsI<<(RpnzXhM1lKS*(c4C zPXm@M^Oww`Jx_o6z^s`AKkJ9UwVMO;e!$bA`5<8Q$Dh4%HMg}E>@EqgF|Gat4-az` z1>_eQo(<~x5h$5*DUtH#+0Stnt$e*m`})JPNqapu2^Yo%6<>kN`u&W03Bbjh+Ezg# z=?Ud0fu3-gx|9Afx@j7!zybav3RHkkU27T+s*s4fQ56+SXU&lz(}31%~)ofOU2WFX+mer1RD zz9S7&RDX7{ZE)++mV3TMGm*2#;AHOXd&hkycdgmluq(X!t$%c_dF6raXPJHleF<{m zai96)qU*oMMYY$gr=FV@zL}GSiK8rkS+w9sizopr E059E8*8l(j literal 0 HcmV?d00001 diff --git a/textures/technic_machine_bottom.png b/textures/technic_machine_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..48a47b09edbb4a7693efa130cbccea336d9510ca GIT binary patch literal 572 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 W+|tLD&kmvh00009VaUQ literal 0 HcmV?d00001 diff --git a/textures/technic_mithril_chest_side.png b/textures/technic_mithril_chest_side.png new file mode 100644 index 0000000000000000000000000000000000000000..0763511c5785382299d349d35317af4f932beb09 GIT binary patch literal 2616 zcmV-83di+{P)e84Uibz40(us|hP?8k7X~aq0@T%$vobRxhl-qH zB!j$@7tBsn6X1do7v$x=|Noss@o)e7FJZsia7NRou6X)wkBV6DYk`*aT>1a)2W@bJKPyJOOeNQ(|S#xNQceD>?l>0~)& zS)!C8gg^*^D2j-ph!6tad!&@aaSVWz5&-W#08P_8jS)g%jKLU#5CS0t&N<$`eap5i z*?AUSs?RTi(|I_dPI3AAp?{|`K z=N{`k)1wy{D{w($n-VD%0fi6}0t^Oy4#$0NZf_APL8=HLC8ntnW=VJS9Pb)x6WEs< z1Rft0jfKd6r-vSEEc!QJ{g%oVR6-(E#jaLxd(F|aF|&&XV>|=_ArOLRJnEBV zUCz#a#QKPi7AWPZnt)IdyV_xI&Nw=L!Nt`FjB!{8QUts=jQTlA?{j*S1z%04NToCm zg)@7cZO_$u&wPG?49!!Kg%Ic#3B%C=_lpaxkLY!CIz_@}d5x_%c-MfC)K+nN@;&wT zmf$@?NPO^&20c2x374}UFkYdQLZ)d(wc8?nMV4haQ?&)73L2k0O+X3DWIW_@evS#6 ze!oY5FyX`HDaJU2-=l;8L0c25K*R%t(g*~JhAfSloqmsVfu^oW(-ghgY;Zm>nI7}u z@|+M9K6re+B{&O0AP|6KesPHn5uG9>iVH5!zX#Q>LL5h|9_~Z+78*5 zYpxoDh`NmXT>>TB?H0MXSy1jO7MG`Z5tF6~X%uixi4X#*G%C*UGNG;wiiYv9$HU@1 z#zCi3pyQnT+iQZ*2%7g=VP2RKp=RFP!U2% zq>c&R(v&OCXBTwzwq1eQe8#rg@%lLBXehb3IL8qqRgAX{iS}se38AfWM}`v#aTL+% zPuSdFBBO$XQI9xDdH2J6jBWEGcu&8RQ4~2+MTFov9BQT`&33nAHk+XfzosJ%fA~t! z>>fx%Ac`D92msO~FqtGQ*9Fc!{vHDO25asSMzC+n-(T~vs_-;; zYdJYNc>w@3WOv$ zgR?c>M`$g1^@|tWE=zXX9ZEE$odcR`jd6iL{QWU?Eyh>`0`E;5QbOUaBZ+e2e89tI&FZ@=hKH|N z8_8~cOIB`~K6}n`anFDL*NQ?e`OWb)#wqj{UwnZ|hy3~LhNEXwZthlW))lcnXL9ff zrY_mnn%R7gvmPHLQYwVhPrcsK(DVAmh?ALPy*Au0P8lBjk`OFax#Rlc6dwd3L|BpY z`qN+I>Ls$%=}^0bT8vmOA9(qE%4j^|c3E+Eb;9&ugp^QQi9;eBTOYduM#nT-0FrUW68qIJYw4QJ=)cvquz-1>mGbj;ZOQdrS zAtmSM=NRiyVNaSRj~Eq56(fYAb{ZcfX{;Ia3Ko~|2`DCmoKCmL#q1PMMA0e8l2$}Q zXix7go)j5%(K3)_3BfdcCIF*G$Gk2Ez%L^BLBQ zw)GICkwZ!F&bA*PPU5^E&r_aFC)_NqaKuax59oAkl4 zo*a_rIRp?wVM2@-DO%Xp5pQN#k)qQsO2-tLCP@;km)tLAC>0a%?Mn!OprSSg_4e(X zKOP(&FgZNtlcS8Yg&`0K-tgkZb871;s|Mk=j1Qj^5Lg$GQh^XiU$T6-!v@{H9Rdi* z(D3TjFW4JsnmyiZ>5X3Uk8c$(4X`8=OE*P{)=C+Tdf$6$MpOCCjp7$ z7^T!>T#F|OX%n>Vd8OKqjGyErgn%&y=NwJbJPFEbwc_sXj-uaZHUAFZ?9f}Q`EYef z_2V@~o-v(H84Ly}rJg46vGqtP@%~X#KQbaA#M6Ht+tN=HaL%z@F8T1`1G};!i#*eV aG5-(Ki?Hg;qy?}500002=ma)!UN@Nmn8 z%0*eFs_LmWdTP2oz})%Dz>J^5@ZA8u@C*0_=H2`T2JD%x?y8bfseQ|oawB=p313js zm_PyqNH8PfM121r>fitTZ?fO4xq0&R%7XDhg-bI;AOw#w25T+GS`?5Z3C^X|b&VhZ zC=_X$(lj+~+af^l9`8LN1dOpL1x>x@?qSJ#vt`=1WMvQQXc>)4e)z-h=@mJ<%@$(} zB7%sJBne59AR@#V(OTo213+sHK#UQ9rfFW^QA*LaEp6MPltL**2!T&O{lt2^W4rht z)^&@$uPxK>e}_-M=gwQsni0qI3!WYyAncjF|1GQ4iXa-~Ib)?LiULhw?-NiU!IKzI zIheA2dSLzZK$cp@hwr(&yT|)LnMVHU$3E6=$&Wnqzx|B)@A&6#mdqR>|%w{t_z8e!l3kVWD$|NYI(bgf+(`;AFPtOpgpN~FtbgPB~ zVpN=+%?UWPaYWyc+KAPE@A5!SP$@1+=nW@4-JheAlIduGOEdoZ%Qsrz@j_x`*vl!) z0&NmRBCS|NyYBq0MJLvFVCj$9ZdQnLpmbLOrD>Zz-yK!-235xaZP41{n?1Le-!QJE zC`tm3%hS(@%5Zswu^BOXcAG~&yy=mr2GA%JF?eDO&oosX*>0~Epi{IqC=`VgtO?Y0 z!?!O#Q&kmZua8m+K~T0tyB=9;84gOW&wil^28o^+T3n*Y%OOoL93Rh_j7J=dMrhk% z+!%{<4jp4xu82b$+hvJR@3;KsyN?VGW^8MCxSlf@R2U^7f=Rkb@XeO%>sxeEbn_mX zjwkhsqr(HTykNZxJlrmrO$Ovy0!m@6B}o#rh!8?Rh=@eW+~Az0iH57o1=Z+~;lUxB zec}EiagJ_dss6+{=$d1Bl6TCBD8JW z9YF{Ig+gNJGXHQy*&DE_;r8-`EbozJIc-ciKffTfH6jsXEXH-2ce8Ji82RDj5rg4~ zCRjGB3-aEGJkQzeVZOKo=@imhi+&+pmKxGD#glQq_{y-FQuYS4LGyHX!iS?NiE{)J z(8V*`JrV;F14WiGJUC?ED!zXCOxf#`rYWoCBb(&~hlf*~OW5vO>TXIq>5f9jfgrqn zGb7J)p0<(Zan58i#wCiqx125(gl60QDP6WoX(akrHT;M7BYM4(y*J!ncjYho75lp7 z^6Z$70!wR#2-rewK%;KREaqw$E_<&L|Hugs<+w1(Pi0`?ipilWF#6WjSA zZSj(Fe0t7wI^*D=EC2H58?(a+&Lz}d(}vEd_udV`iq;$U zjpy?Eo)}t`(I{mQgldpe76oVLOHdYx9zl58D!9GiV04IYJ?jmeE#?U7l?(0u312@E zLdJf-$42R-w%tD=BHZsIo7D}UK7Hcka?NfJ$^=9rT3g1WiV!uY^RJ+D@-l-M+1E9o zd3@RtniFPkjtCLzrX_|3r6SSSC_+~S-wyXz1e zNC<7jBoS>LR)m9Uz|GYHZF^X|rmb5v&mfwN57?}qkQgw!lTqJnuxW|X1`*BO@)1nR zpkGk*$L!X3L^1RSeI}zJ+s(3*-)9e@v?hiY37*jII9nXk#tw8LM!fgvrfF%KhWUI> z>jOsiWO@25qY7;tN*U^4iK5Azr5co6pMOIzOsaxjf56%4F_DC_SCXgZm8>F>7(I~; zo%FF<$n%u_Zi9%Ro4N}iM4>R%HDd zmy2KUQ8OI$sQNjN50@Po)&H~d#=J`M<7$c0rZXfj8_Z;UKy@(Td~u48svA8NSrRZB zV({Ja5i}txiX!99Y{Jd;1p&wGa7wR#z{#)wO^6-oM1(W}Yr5~n=nX1VLiU`}gmtePp|9P+`sZ@EwA}2SIBCN}=PH<-;9bY?mF~5~8Kyye^qM zd-@QScj>(fSYqP1Ddc4c>cJs}*;5ca*~+tHsa6W`kXO%hkm>yI(IUi=5SL zMO9T8V_pMz`LMMXtu-+|o7CrEUhZF>dGBAJy#x?KV7Xj!b#=vNyCY8`v+0=s0|571 UseL(XI{*Lx07*qoM6N<$g23Y9asU7T literal 0 HcmV?d00001 diff --git a/textures/technic_mithril_dust.png b/textures/technic_mithril_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..6afc44a274f5cf91346fcd8d8f01b6285209bc55 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@RheU{4pvkcwN$2@_CUALkd$`##@sGfR?$CtH(A(}pm~3kxh-7*EX52w#!vD3UGa nlyQ}(g;DA!$F?l1u11C>4Z0_l+Fv#Ujc4$5^>bP0l+XkKMV>B< literal 0 HcmV?d00001 diff --git a/textures/technic_music_player_bottom.png b/textures/technic_music_player_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..bd8fd552c2a437827de5a64016350a0019ab3ff6 GIT binary patch literal 744 zcmVP)c)I5Y%TSb}C8Pv8!;3QwO^58-WA@VZdM~Ki=tG=V7a)ot>GU?jGgt%RTPDe#7(A zGsfdFX7d?LYYE4-<*^+Lu4iLu8c@{*=8TJX4-b#HzxxK|$M>IjV)A4%!E82#rY#Ug zK9ek@S%}T1Mi~1rO$|vJ!}nc&8<!0y9$85whf%kMg;aAprl;^KJPqwPE7yl;1Fth)vo<0=uPIT6@IU@mpkb&je|;rXWQ(hoh(Z$~1@ zm|S9i+!9TT{jf#MW^oe24;(mDOR-qMwhfY&pez#>$}k-F$cvOoJ^w4%?vnp8<0;9k zaOFrv5t2{?O2A4P<=XBV?08zTez~4-7U%YcW?f;|Z_sWEsuZx8g(VX!7SpsD6pwl* zoVi|QxZMVv&Idk>;K$;Gl9!^4&~0nvWemqNIm!-AQ^L^aPz*zZ>zdL71NE*cTgLCA z%JF(0*nN%jxyRe3C(1R8q;#lBL)mh4MW-P=!U{r1I#5Vgk-V5P{rP((Iu{k^eZL*? z`nvn{1f>om4=LX$LQA29ux=1~{{w<$3;lk>StG*D(5w=;;*M$vDeF~WP)z;v+JYkSvVNCWVYaLs|SBS4dM6hfY>)5dhoE_FSy(66aKS1B%pn} z^%z_8K%K65aGY_A2>C4AhKn^X&R5$ZIn#raOq=jQss)E>xA;d!EB3TT92jn#>a|du zdcWO^+f5(dyDQ;&YlEw*2;H?d5w}FxIMD1wpX)USJ=GX(e}~iM$6;A7E{#SgPQKdc z#87J$N=izQpPw%%E-uEf=Z%PPi@t_(l$MsFyu2Jvr&D;)Rf(I;Ufi#?LhU8$v9C8E zCnpEFxw#@jLA%|Kii!$ct#{*W#VaBJog8)#GQ`16z?InqH8mc=WH^M0P!Q2b7_-qyEX+&`=BK9+84G|l;lSvVKQ|Q> zW?wiM!sPe_6r0C`V+f6o2-rXbM}`sb4`FQBFLC;;BU6NN+R=$gOh>1nvZjGdDhWeR zz)b2`PN%S9q=gwHGtWBa$yS{H!rZ(-C6*QuUzkU1eh%8=0+R6<(g{tNIWlvM@ww#1 z*%^tmPuCLAVsR)-nFXB0>GV@tT!d(|iFF*rZ5d}Bd(5gCI)p1zHFp<)eP;^*K=5$W{|8C5YnP-kRnYFB;kZfcNAx^ZDTS`|%HE`)5sV Suttjj0000^lOiET&UP@Y7ModgWM?qOlT~kX_QeM|USHnP6LsNs1ot>SFgG-o;OISln zOiF`f@c#gVAP0jGgAg;LAOn*iBeNjm|09fxfNo@E1Oo;rU}Rzjx|N-SlZ#t`fr*is znTds&m6e4BsInF)$G{@UDx_%W$R-?^$gWfnAuRebI{N?Mn?>~P2Vq{>3cn3&AJcQ&QpvM`RSXh`@*g^hbWGV+@ zWL#6ZJv3rd420(J(IotnU5dmADe#qlWla^hksL7#~v@N&VJ_8{j}|~q`^-0&B-fG zA74HavSh7T)m4KpuXdjl&8<;f7#(w5r>r`?^YH4*bvF`<_;s7Zby736&G#=9JQUQu zD}Ls){X%>-nJYfe|622(;kN1eaMnK@fBrKVpE>rQK`LJVM0UmFBR+MxF7wwI{%81T zQtQ?J>7S0>&gh@}S=9fi-BUPbzs2G|!#b#BKTtA0X6^kCZe~ksi&x$|SzfC@yHL&C ej^P{wbK`Lb?FuK8$ERg`)Gb4%n{2oLe-i+4E?mR_ literal 0 HcmV?d00001 diff --git a/textures/technic_power_meter.png b/textures/technic_power_meter.png new file mode 100644 index 0000000000000000000000000000000000000000..f1e51207bd5675970b5d04371bb58bcb36f74ab4 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^Aa()=8<13qecTA7*pj^6T^Rm@;DWu&Cj&(|3p^r= z85sChgD_*?n5G{%+`B^F?&M3Kzm~ND wIkSFNoy>^g|Ggvbkio3=?w`K`If1PV2e~AyB?B(h0&QaOboFyt=akR{0Q4|QJOBUy literal 0 HcmV?d00001 diff --git a/textures/technic_power_meter_bg.png b/textures/technic_power_meter_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..9667cda8a446a34550df1f34e8a3cf77e379eb4a GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_r*>Ak5hJ=ExtQAbW|YuPgf<4jx`vrc)*|?|?#!JzX3_A`ZWuV#syKLBRF?`FGC* zEH{XM5LtGPca2Sx0E;e*Vw1o|!^9w!y>lm)+VKSQobmZsVPt&G=isT2?2pX*R;=v# z#(S58c|ya2%4Y&;haI+FUuzR|%s9}Nl}V`0?!!Z#KdtPuqOQ$bu=}uqQ!x!+ueF1$25d_gI*~E(OYC>TmxVDQI$=1@e)3r%^v%r6q zlAN4#a{5QeE(|jc#mr-N0BMv}O+!@?NU)`(@l8wsNJRH&Gu#7ad<>Av$m}@= zYQ7w3fmE&?kf{JDx3B>=z&r2;io|G1WeJz&DL1LGJ7&<>n);G6^VKTdxEKcR1j5$R1^00000NkvXX Hu0mjfT$#dB literal 0 HcmV?d00001 diff --git a/textures/technic_rebar.png b/textures/technic_rebar.png new file mode 100644 index 0000000000000000000000000000000000000000..16d1fc541cd007378cc0ced0ca55127ec9d11952 GIT binary patch literal 813 zcmV+|1JeA7P)Yxd6vpvqW;(V! zHlBE76_4%6vWk@uMF^=CQD6~~(wCIBVnrAI6#Y)D*?=IBAZV3BP$N-^f=DeaH79fJVR;&F0z&i;*aLn9VYo7qPm?X*2^SldE%9mwXzH$Ws09Kae z6W{kY27^JT*=$~9jBRnw|8WHXfH#!VeE{F|dcD((vE@9^Zy95lD*%i!hm_JH48tp7 z7!IYBb4scE#u)7c003I+UkM?dG)+I5o0~gF2pJ0@ezDfN0RYfa%EyF|m1?zmCW@j} zA;g{#;?NZU0Jsoh*IN5ktJO;D_4=yTdXsZLb_D={w?c^hN~QAka5(HWo6WPF^IMcs z?g{{F?V(cY58wB%j7FmcDP^@NiU(3k>jVG*Qp(>r=eg&3pS4=8^IGc{lgVV?8DNHZ z#yJmawc6!0P1k}TxH}$?-#7yRFr4$JTI)0Ic6%jBl0~icoh-|kD*ymU#@Id2^A?tt zmabZBPZL768Dr8F0M=Tel-ki+U+(w&Unr&Ol+uSn2<-#_078f&%d)*72(AtWgLNT< z&hz|dt+jOmm>uO`Qp$ryqw#IG+g(#iy`D~|&y6u|006)k`&|ezO_F4z-|v4K1i_1= zqoV_7001C_JmZ|JG)+H`<9NL+%bhIC{&WTaUED!e*T)Zb~K$%Z%QeR6Ts{y6s7c0 rQ4}r4*x!`Whf+$7caVqo{ilBc1GJl=xluv200000NkvXXu0mjfdTMa{ literal 0 HcmV?d00001 diff --git a/textures/technic_silver_chest_front.png b/textures/technic_silver_chest_front.png new file mode 100644 index 0000000000000000000000000000000000000000..fe5ce2cb61a5af37f2b061eb8c988aee985d09e6 GIT binary patch literal 2241 zcmV;y2tN0TP)*BK(_H)CCDShD+7Vi@SsMksez(6);!$0S*Y)Y zWCDZ$idA+0bIyOxq4k$9|D>usW0iJ9!vT}=7~l6%N+G4hwrw28!Eqb_T-U|(JnFjU z{>%4$nx>&`TL8MQqw6|z56iNs>zeI$OPUwVVuxTD;dr!6CPO~@#pgtWkTNf@Z5yQ& zN-12|#dTejQuKX~5CYHh01!d|(Dyw6P1Bg~Se8ZGwzO@FWm#C3g_M#{KmC-fEXWt% zlGQEFrgoTp_z9nX_8G%4FFtHnxd34(^{5A5CjhpkWvCL8jZ-Z zj5JMgU6)6X9eExVgD82sw^}l#-^d3H^}ibc*xq zU;Tzr5_5EPWFWk~y=69=(Y7s8$_LYrMk5A;0dL>FH8cnzXxkRswrSgz<#Nf>r%zcf zmvmi6-}hLSMc?;CQN+o~3BK?1`0-;L+jekW_W@s0O6t0P@L;7BVHh%*OgKM3$FeMj z!y#c9a&vQo<2VMPzVCVS<_%Ixf*?Q$LErZzNkSaQoS&cLx-PbDBZ45LC}n3Wz?>}r?*8vT*L4CK5yT?MJYvH*LVL<(-bKsv)PQY zEREW$sxt6NDe3#3%galerXdIdeBU>d#Bod<$5d5i4)N0=@;v9}<_6#QnNFuDrO2`j zakILiC&B#I(-yWJgiS)Kwt$H&KnVaRAS;`;g;Aq2K<8#t?~Vtu=zZ5ytx zmZ-kR_dUwI%_gyAOM||+?8NdI-?@&rH z91ame&@>HoUDLJ=3X8PJSu7Sf!~Q@dTGsm=ON><<~X zfMFO=lodsmQRD@aWQL1md%LD>Tk5)|C<>A!VZYx~RTWv5;SC2wcFRy5u>Sdvzo{S2 z-ccx@VHoo2)hog*DFFr|p63yU;R9N1+a`RUq(TVF zvgG9C1k1AMx(?TMna}6O)Ha(nKm7QHqHM7L{NGYtl5O>pFAo?080!B#0=A2*Z#hN!aan zJbChj@pw#@Wn5lfGM!Ehr$6ljS_7Jj#bUv1He);G0mv1Yb?tm z&vWX!=E;*MD5YrI)=;Pa>bfSSyrV#`mF@&>+nSiQZQGR8IF9jspVexGloHo<8IQ+i zTQovl*RfbE=(^7I1RY%S`TRjBIRJ;lf!S$(PF{nGy6I1YW^6UQ;D)e7JDDT?AwKU(qQ@tC40jH)AT_($@APme7_0n6uh{&Fil%)L1?SgkSV3iwEFZq*L5^UQN-otB|-?| zI3|iB7K;UzWtlM3s@HGZwoOCwecyP3$g+&0C{RifMUg3^+RK}!F}Wb6q%2Dl*-4Tx z8jX1O?w!%da5!YU-5Ml*x_*7%b2uE3Qj%pE&f#z{Vv6IK#bRM7xDTZ+85)To2$)W% zESF1!5KJZ$27>{wU%xi~aDRie3F%NO%aX(4fY8$>Ny7E@wef@dd+T|gfmH~>U@$-_ zWoU?^h#&~KxVSJ;t~a7-8e{MGhtfaeMBO&*(*tK`XJ(hRIfY?}>$+rF#&kL*48sR4 zSy#5vXvAu@GWu(m>VjkXqtxEY-Xliuh&eccY&oJ zZre6eN*0U7gWrU@NzLbTMxzm)=aJ{Rxwh>(9M5IFxyAbXU;n6tH)MSBF=={WI-N2a zjm#9f5o_zz576s%|1kRS+SK&=HBCd;b?oCNkk)|Sq}^`Ea=9eW3qnuvcsAw#w$gn7zonU8 P00000NkvXXu0mjf52s_t literal 0 HcmV?d00001 diff --git a/textures/technic_silver_chest_locked.png b/textures/technic_silver_chest_locked.png new file mode 100644 index 0000000000000000000000000000000000000000..0f8b1f03e40df3d3997bd5015107ba477bbbbfe3 GIT binary patch literal 2368 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 Y4`eBC;L;OB?f?J)07*qoM6N<$g5l*koB#j- literal 0 HcmV?d00001 diff --git a/textures/technic_silver_chest_top.png b/textures/technic_silver_chest_top.png new file mode 100644 index 0000000000000000000000000000000000000000..353a11cf228541b4bf5a9ab84da13944a8f7f8c0 GIT binary patch literal 2226 zcmV;j2u=5iP)Mo(%WLq^<71~owC#G5ymk}LsLs! z*TwTZJkLXGO&Ep*K}fMJK=X7t5JxdpRZ^BEj^j|*HFaInG!3rjBOEA;g4^Yi^?Jiz z77)d4JfD(o>hslif1r~l-2Zop@B5g`bzQujiw{2`Mxzl)obs?uUfTq-h$`G-YpZkNf+3 z>bka@E6bA4pFfjj8Br9Wl;Z5{%(g-ZfvhB(^_nz{84U)As;UuMad>cm>$*6O!+btx zGMU)^n@ej=uh*m7?Q(p4Yy-Qli&DydUtV5vaByH-VX9NtHE|sC!w)|Y1_AAM8uMs;Vf8f;`V(1=d;<1OcPbh}mq0>$;?AN~hCdu~<-+B~8=dI1WMxj*gDF zzrROojpH~drReo~3d+yJ_1n&&vqQ)X9JSGIR1h*AnEB}Yd`3YowHTo@d`bIXPi>cb9&@Z` zQi|zxO26MHj$>A<701WNOePb2-?tbOj==UqYt3e};oZA;BuRo&%7QG4B0SHt+HOD@ z1c3#m5CSPB@87?t)9E0D;P&>GPNzd0$0(&ZKR>rv@H`Lka=Q7xPZ)-L`t*t6a7db_ zmS%6>yutH48`RLue8MoK-|wTf=EH{%^m;vf-)FU2u~;l@`K6RLVWrel3k<4FdFs06 z=H`aIy*;b#d7e{Ml|`_*Z@3Qd_U&8ZI7SG;#l;0#meFdpkW!N8IYm*}N}EeK;t3F8 z7;$;qroY*-L1c7~C z6a^O-7wqrv6GhQ0B{ltb9LKg(RJF7eG#;*L8qUwptz4SP)$MkPqKNr?Zna}H8u9q} zXnmgn*K|64g%70^Ns{o@S6>mw@t0}nx=*`_qKM&eNT<^w2m;EoL~G4*xkO6&?1lp_ zE-pxtgq@uo3r@q1Fbuzd>sb|FYQld= z=eaGN0hSRQgJ#EZ2*Z%cWWsDV!}ongqY?dnpC5nx(ONOBwbcNVfWeCy_u}^MmfOXG z;c&?1$+dg z3R%|Yp{n@!(@)k)IgVrJLKucDmrHhccZuWJE@JRuoY8DHBM1V*FtpS)*(OHZ6X=A&x@aXF)NCld>#1JUpb;YT-Bzzx?tG`}_NL;Jg&5)6>&e$OqVNw|xEe z*LEDQ*K0qLpk;0OPzs>xVu$@?{3L>$KR z4R{Ye(=>mHJzhzWiNVLYc#Eu#*g*g?oOP|FC-FzQLf|=ii1RJdynM?-8A_-N_aKdF zAqN7e-Svw&!-xo4e}0#jgL|A?-;?oBHcoej$6d4dtILs$D9;2iAlk23m%CTc5^$#k zz!|8Iw}wFpR6NZ>fhw--7FtS(Bl^IJns}NVq**))r~h~bbf&2) zG*Y*A7+?Me)P)StFOlm<`38f50YOv5D~SrI8Re;?6H~Vc7_(#c#X3mnhddK4BhLtt z(ShqgdBGWsB&N|?WD(d9q%&ihBodZq5QI+MBzEWqe@x>K{&dISA4~-800000NkvXX Hu0mjfYM9WK literal 0 HcmV?d00001 diff --git a/textures/technic_solar_panel_top.png b/textures/technic_solar_panel_top.png new file mode 100644 index 0000000000000000000000000000000000000000..492764bfa9ad30d2f356222481ea5d62e74ea5a9 GIT binary patch literal 569 zcmV-90>=G`P){7Q*wcbK!|An|8Lsvj-4FpgYnvU$Fn=*m1SA998nZu zNF0VC{r`VCf*_!ke2TK?jT0x#R5y2WoQBs4rCH1Kg#l-d&m31c_wxGA^BEVc1ZlgK z#UI}Mq)mKco%m2 zbmWWP%>GdWNWJ?Xv)MR-jb-IvkQW!sVR)dO8aQsT-lktD!F63)$*0sDNatDI0C3BFZ9ZL>-8^ytzUj?2DWW~)3&cvRs)*l`!`PPIR40|CnZT=n*C&4`T$^b+wK?kJ!6O>wlkm) zk{E_RS*hN5qSFB4=PYjxK#Tf>ro4e1zzSB@z!~|$os_yk-Y0-E-WCuk!}A){tLh1g zMA2W4ZdXF;M=m=UPt4E= zzj9_4YuFuwdb=6x=2;5oIoMuclGvSfj7Nl-QFNo<&siNm-U6*+@O1TaS?83{1OOnH BIK2P> literal 0 HcmV?d00001 diff --git a/textures/technic_workshop_bottom.png b/textures/technic_workshop_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..bd8fd552c2a437827de5a64016350a0019ab3ff6 GIT binary patch literal 744 zcmVP)c)I5Y%TSb}C8Pv8!;3QwO^58-WA@VZdM~Ki=tG=V7a)ot>GU?jGgt%RTPDe#7(A zGsfdFX7d?LYYE4-<*^+Lu4iLu8c@{*=8TJX4-b#HzxxK|$M>IjV)A4%!E82#rY#Ug zK9ek@S%}T1Mi~1rO$|vJ!}nc&8<!0y9$85whf%kMg;aAprl;^KJPqwPE7yl;1Fth)vo<0=uPIT6@IU@mpkb&je|;rXWQ(hoh(Z$~1@ zm|S9i+!9TT{jf#MW^oe24;(mDOR-qMwhfY&pez#>$}k-F$cvOoJ^w4%?vnp8<0;9k zaOFrv5t2{?O2A4P<=XBV?08zTez~4-7U%YcW?f;|Z_sWEsuZx8g(VX!7SpsD6pwl* zoVi|QxZMVv&Idk>;K$;Gl9!^4&~0nvWemqNIm!-AQ^L^aPz*zZ>zdL71NE*cTgLCA z%JF(0*nN%jxyRe3C(1R8q;#lBL)mh4MW-P=!U{r1I#5Vgk-V5P{rP((Iu{k^eZL*? z`nvn{1f>om4=LX$LQA29ux=1~{{w<$3;lk>StG*D(5w=;;*M$vDeF~q z*>c)I5Jl%3Qsq7$+AA}eZyu19lcdmX}{l_Gc?DjA$KW!)BX2jWO~U8#h?3yjZk3^ z+m2eTmZsCG4u^vUCXhR)ZL2cQ!{JarZ)bLRPTDGFS1(!Kt6DZpB18lxP+eR{TPBl< z8jXfYpjhbS;-_8Tq}6gbuSf1LmrFUSog|6UG&Q3JyWP(E&09b-cfiKD!&_laVT}L@ zoleK}a{wOujL>zvUF*bPFfe?^(P(6Tj!O^_wI-np1fXDGLIh3yHaNpf!eX&_&B#W( z-8Sp>darMRY_t&yg4OLj9*=UoYa&BXYv+)+UjGUH!2fhLA!k+t9LYikEW b@Avf&iyxZ*H1>Kc00000NkvXXu0mjfBFPl| literal 0 HcmV?d00001 diff --git a/textures/technic_workshop_top.png b/textures/technic_workshop_top.png new file mode 100644 index 0000000000000000000000000000000000000000..feae1413cbcd0b80de948d43bc5bbb8e1c3b3765 GIT binary patch literal 555 zcmV+`0@VG9P)=B?X3DA;ebhqqPHk4WR=KUYw;1jq%6x)#{-JN7F%Q96e6{Tq^_Hi7m z(P*ezt*YH_D@l@p4|6{D^?F?%m%7=gZZ-p*wtSs;W_7(Wug|kow_620>@Di$a9L0L zMLYAK^Tle;3V2k%-pH8~$NNdFtM!~7yGsN6I8A;7X7qLbmy|oiSOQ>>ol8{SOGk9p zp0V|)K53{xcifmVqzBb;OGHeqR+CpMmGpKTS!S~0yx(2W<=ULSdzm44J&J4(9gMrg zpohl?URUb{L*Vp)BgQ|fLaSITDhL8SACz>r6Do=#dBC8e<4cA9c3?cwgg~mX`o6C) z3~ePrr_+%~n+|Iezdsgr(ww$r7)fq6^9GlSXap_pgAk33LbKU4-tb2l=nzarP>_T@ zD+rzFpkqD;8c+cT%3rSKwVMoE2Qc>i?FBOua355RfVB~rDD7qee(a$FI*b5jfvRpM zECC35E52PO$h8i>E-`zMp%bDrt#qwiF3V%4QJJdn1RmK5q$;#HgN!q}Ko_$%@_2B- zldQK}p-mk#&|8`N|5q>}NlKduCdNbr0okdHlWxF~73fgIN5Y+WNZrbqwGpB1H8RTZ t;$dJsRm5TCf_t|3K-+4yY!7_&`vE9;zJYVApHKh*002ovPDHLkV1jQH`wsvB literal 0 HcmV?d00001 diff --git a/tool_workshop.lua b/tool_workshop.lua new file mode 100644 index 0000000..86130ff --- /dev/null +++ b/tool_workshop.lua @@ -0,0 +1,93 @@ +minetest.register_alias("tool_workshop", "technic:tool_workshop") +minetest.register_craft({ + output = 'technic:tool_workshop', + recipe = { + {'default:wood', 'default:wood', 'default:wood'}, + {'default:wood', 'technic:diamond', 'default:wood'}, + {'default:stone', 'moreores:copper_ingot', 'default:stone'}, + } +}) + +minetest.register_craftitem("technic:tool_workshop", { + description = "Tool Workshop", + stack_max = 99, +}) + +workshop_formspec = + "invsize[8,9;]".. + "image[1,1;1,2;technic_power_meter_bg.png]".. + "list[current_name;src;3,1;1,1;]".. + "label[0,0;Tool Workshop]".. + "label[1,3;Power level]".. + "list[current_player;main;0,5;8,4;]" + +minetest.register_node("technic:tool_workshop", { + description = "Tool Workshop", + tiles = {"technic_workshop_top.png", "technic_machine_bottom.png", "technic_workshop_side.png", + "technic_workshop_side.png", "technic_workshop_side.png", "technic_workshop_side.png"}, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + technic_power_machine=1, + internal_EU_buffer=0; + internal_EU_buffer_size=2000; + + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("infotext", "Tool Workshop") + meta:set_float("technic_power_machine", 1) + meta:set_float("internal_EU_buffer", 1) + meta:set_float("internal_EU_buffer_size", 2000) + meta:set_string("formspec", workshop_formspec) + local inv = meta:get_inventory() + inv:set_size("src", 1) + end, + can_dig = function(pos,player) + local meta = minetest.env:get_meta(pos); + local inv = meta:get_inventory() + if not inv:is_empty("src") then + return false + end + return true + end, +}) + +minetest.register_abm({ + nodenames = {"technic:tool_workshop"}, + 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 load_step=2000 + local load_cost=200 + local inv = meta:get_inventory() + if inv:is_empty("src")==false then + srcstack = inv:get_stack("src", 1) + src_item=srcstack:to_table() + local load1=tonumber((src_item["wear"])) + if charge>load_cost then + if load1>1 then + if load1-load_step<0 then load_step=load1 load1=1 + else load1=load1-load_step end + charge=charge-load_cost + src_item["wear"]=tostring(load1) + inv:set_stack("src", 1, src_item) + end + end + end + + meta:set_float("internal_EU_buffer",charge) + + + local load = math.floor((charge/max_charge)*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;]".. + "label[0,0;Tool Workshop]".. + "label[1,3;Power level]".. + "list[current_player;main;0,5;8,4;]") + end +}) \ No newline at end of file diff --git a/water.lua b/water.lua new file mode 100644 index 0000000..6ddaa46 --- /dev/null +++ b/water.lua @@ -0,0 +1,588 @@ +minetest.register_alias("battery", "technic:battery") +minetest.register_alias("battery_box", "technic:battery_box") +minetest.register_alias("electric_furnace", "technic:electric_furnace") + + +minetest.register_craft({ + output = 'technic:battery 1', + recipe = { + {'default:wood', 'moreores:copper_ingot', 'default:wood'}, + {'default:wood', 'moreores:tin_ingot', 'default:wood'}, + {'default:wood', 'moreores:copper_ingot', 'default:wood'}, + } +}) + +minetest.register_craft({ + output = 'technic:battery_box 1', + recipe = { + {'technic:battery', 'default:wood', 'technic:battery'}, + {'technic:battery', 'moreores:copper_ingot', 'technic:battery'}, + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:electric_furnace', + recipe = { + {'default:brick', 'default:brick', 'default:brick'}, + {'default:brick', '', 'default:brick'}, + {'default:steel_ingot', 'moreores:copper_ingot', 'default:steel_ingot'}, + } +}) + + +--minetest.register_craftitem("technic:battery", { +-- description = "Recharcheable battery", +-- inventory_image = "technic_battery.png", +-- stack_max = 1, +--}) + +minetest.register_tool("technic:battery", +{description = "RE Battery", +inventory_image = "technic_battery.png", +energy_charge = 0, +tool_capabilities = {max_drop_level=0, groupcaps={fleshy={times={}, uses=10000, maxlevel=0}}}}) + +minetest.register_craftitem("technic:battery_box", { + description = "Battery box", + stack_max = 99, +}) + + + +battery_box_formspec = + "invsize[8,9;]".. + "image[1,1;1,2;technic_power_meter_bg.png]".. + "list[current_name;src;3,1;1,1;]".. + "image[4,1;1,1;technic_battery_reload.png]".. + "list[current_name;dst;5,1;1,1;]".. + "label[0,0;Battery box]".. + "label[3,0;Charge]".. + "label[5,0;Discharge]".. + "label[1,3;Power level]".. + "list[current_player;main;0,5;8,4;]" + +minetest.register_node("technic:battery_box", { + description = "Battery box", + tiles = {"technic_battery_box_top.png", "technic_battery_box_bottom.png", "technic_battery_box_side.png", + "technic_battery_box_side.png", "technic_battery_box_side.png", "technic_battery_box_side.png"}, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + technic_power_machine=1, + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("infotext", "Battery box") + meta:set_float("technic_power_machine", 1) + meta:set_string("formspec", battery_box_formspec) + local inv = meta:get_inventory() + inv:set_size("src", 1) + inv:set_size("dst", 1) + battery_charge = 0 + max_charge = 60000 + 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, +}) + +electric_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;dst;5,1;2,2;]".. + "list[current_player;main;0,5;8,4;]".. + "label[0,0;Electric Furnace]".. + "label[1,3;Power level]" + +minetest.register_node("technic:electric_furnace", { + description = "Electric furnace", + tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png", + "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_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", electric_furnace_formspec) + meta:set_string("infotext", "Electric 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 + 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 + elseif not inv:is_empty("src") then + return false + end + return true + end, +}) + +minetest.register_node("technic:electric_furnace_active", { + description = "Electric Furnace", + tiles = {"technic_electric_furnace_top.png", "technic_electric_furnace_bottom.png", "technic_electric_furnace_side.png", + "technic_electric_furnace_side.png", "technic_electric_furnace_side.png", "technic_electric_furnace_front_active.png"}, + paramtype2 = "facedir", + light_source = 8, + drop = "technic:electric_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", electric_furnace_formspec) + meta:set_string("infotext", "Electric 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:electric_furnace","technic:electric_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;dst;5,1;2,2;]".. + "list[current_player;main;0,5;8,4;]".. + "label[0,0;Electric Furnace]".. + "label[1,3;Power level]") + + local inv = meta:get_inventory() + + local furnace_is_cookin = meta:get_float("furnace_is_cookin") + + + local srclist = inv:get_list("src") + local cooked=nil + + if srclist then + cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) + 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") + 3) + if cooked and cooked.item and meta:get_float("src_time") >= cooked.time then + -- check if there's room for output in "dst" list + if inv:room_for_item("dst",cooked.item) then + -- Put result in "dst" list + inv:add_item("dst", cooked.item) + -- take stuff from "src" list + srcstack = inv:get_stack("src", 1) + srcstack:take_item() + inv:set_stack("src", 1, srcstack) + else + print("Furnace inventory full!") + end + meta:set_string("src_time", 0) + end + end + end + + + + + if srclist then + cooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) + if cooked.time>0 then + hacky_swap_node(pos,"technic:electric_furnace_active") + meta:set_string("infotext","Furnace active") + meta:set_string("furnace_is_cookin",1) + -- meta:set_string("formspec", electric_furnace_formspec) + meta:set_string("src_time", 0) + return + end + + end + + hacky_swap_node(pos,"technic:electric_furnace") + meta:set_string("infotext","Furnace inactive") + meta:set_string("furnace_is_cookin",0) + -- meta:set_string("formspec", electric_furnace_formspec) + meta:set_string("src_time", 0) + + +end, +}) + + + + +function take_EU_from_net(pos, EU_to_take) + local meta = minetest.env:get_meta(pos) + local pos1=pos + pos1.z=pos1.z +1 + local meta1 = minetest.env:get_meta(pos1) + charge=meta1:get_float("battery_charge") + charge=charge - EU_to_take + meta1:set_float("battery_charge",charge) +end + + LV_nodes_visited = {} + +function get_RE_item_load (load1,max_load) +if load1==0 then load1=65535 end +local temp = 65536-load1 +temp= temp/65535*max_load +return math.floor(temp + 0.5) +end + +function set_RE_item_load (load1,max_load) +if load1 == 0 then return 65535 end +local temp=load1/max_load*65535 +temp=65536-temp +return math.floor(temp) +end + +minetest.register_abm({ + nodenames = {"technic:battery_box"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local meta = minetest.env:get_meta(pos) + charge= meta:get_float("battery_charge") + max_charge= 60000 + + local inv = meta:get_inventory() + if inv:is_empty("src")==false then + srcstack = inv:get_stack("src", 1) + src_item=srcstack:to_table() + if src_item["name"]== "technic:battery" then + local load1=tonumber((src_item["wear"])) + load1=get_RE_item_load(load1,10000) + load_step=1000 + if load1<10000 and charge>0 then + if charge-load_step<0 then load_step=charge end + if load1+load_step>10000 then load_step=10000-load1 end + load1=load1+load_step + charge=charge-load_step + + load1=set_RE_item_load(load1,10000) + src_item["wear"]=tostring(load1) + inv:set_stack("src", 1, src_item) + end + end + end + meta:set_float("battery_charge",charge) + + + if inv:is_empty("src")==false then + srcstack = inv:get_stack("src", 1) + src_item=srcstack:to_table() + if src_item["name"]== "technic:laser_mk1" then + local load1=tonumber((src_item["wear"])) + load1=get_RE_item_load(load1,40000) + load_step=1000 + if load1<40000 and charge>0 then + if charge-load_step<0 then load_step=charge end + if load1+load_step>40000 then load_step=40000-load1 end + load1=load1+load_step + charge=charge-load_step + load1=set_RE_item_load(load1,40000) + src_item["wear"]=tostring(load1) + inv:set_stack("src", 1, src_item) + end + end + end + meta:set_float("battery_charge",charge) + + + if inv:is_empty("dst") == false then + srcstack = inv:get_stack("dst", 1) + src_item=srcstack:to_table() + if src_item["name"]== "technic:battery" then + local load1=tonumber((src_item["wear"])) + load1=get_RE_item_load(load1,10000) + load_step=1000 + if load1>0 and chargemax_charge then load_step=max_charge-charge end + if load1-load_step<0 then load_step=load1 end + load1=load1-load_step + charge=charge+load_step + + load1=set_RE_item_load(load1,10000) + src_item["wear"]=tostring(load1) + inv:set_stack("dst", 1, src_item) + end + end + end + + + meta:set_float("battery_charge",charge) + meta:set_string("infotext", "Battery box: "..charge.."/"..max_charge); + + local load = math.floor(charge/60000 * 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;]".. + "image[4,1;1,1;technic_battery_reload.png]".. + "list[current_name;dst;5,1;1,1;]".. + "label[0,0;Battery box]".. + "label[3,0;Charge]".. + "label[5,0;Discharge]".. + "label[1,3;Power level]".. + "list[current_player;main;0,5;8,4;]") + + local pos1={} + + pos1.y=pos.y-1 + pos1.x=pos.x + pos1.z=pos.z + + + meta1 = minetest.env:get_meta(pos1) + if meta1:get_float("cablelike")~=1 then return end + + local LV_nodes = {} + local PR_nodes = {} + local RE_nodes = {} + + LV_nodes[1]={} + LV_nodes[1].x=pos1.x + LV_nodes[1].y=pos1.y + LV_nodes[1].z=pos1.z + LV_nodes[1].visited=false + + +table_index=1 + repeat + check_LV_node (PR_nodes,RE_nodes,LV_nodes,table_index) + table_index=table_index+1 + if LV_nodes[table_index]==nil then break end + until false + + +local pos1={} +i=1 + repeat + if PR_nodes[i]==nil then break end + pos1.x=PR_nodes[i].x + pos1.y=PR_nodes[i].y + pos1.z=PR_nodes[i].z + local meta1 = minetest.env:get_meta(pos1) + local active=meta1:get_float("active") + if active==1 then charge=charge+80 end + i=i+1 + until false + +if charge>max_charge then charge=max_charge end + +i=1 + repeat + if RE_nodes[i]==nil then break end + pos1.x=RE_nodes[i].x -- loading all conected machines buffers + pos1.y=RE_nodes[i].y + pos1.z=RE_nodes[i].z + local meta1 = minetest.env:get_meta(pos1) + local internal_EU_buffer=meta1:get_float("internal_EU_buffer") + local internal_EU_buffer_size=meta1:get_float("internal_EU_buffer_size") + + local charge_to_give=200 + if internal_EU_buffer+charge_to_give>internal_EU_buffer_size then + charge_to_give=internal_EU_buffer_size-internal_EU_buffer + end + if charge-charge_to_give<0 then charge_to_give=charge end + + internal_EU_buffer=internal_EU_buffer+charge_to_give + meta1:set_float("internal_EU_buffer",internal_EU_buffer) + charge=charge-charge_to_give; + + i=i+1 + until false + + meta:set_float("battery_charge",charge) + meta:set_string("infotext", "Battery box: "..charge.."/"..max_charge); + + +end +}) + +function add_new_cable_node (LV_nodes,pos1) +local i=1 + repeat + if LV_nodes[i]==nil then break end + if pos1.x==LV_nodes[i].x and pos1.y==LV_nodes[i].y and pos1.z==LV_nodes[i].z then return false end + i=i+1 + until false +LV_nodes[i]={} +LV_nodes[i].x=pos1.x +LV_nodes[i].y=pos1.y +LV_nodes[i].z=pos1.z +LV_nodes[i].visited=false +return true +end + +function check_LV_node (PR_nodes,RE_nodes,LV_nodes,i) + local pos1={} + pos1.x=LV_nodes[i].x + pos1.y=LV_nodes[i].y + pos1.z=LV_nodes[i].z + LV_nodes[i].visited=true + new_node_added=false + + pos1.x=pos1.x+1 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.x=pos1.x-2 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.x=pos1.x+1 + + pos1.y=pos1.y+1 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.y=pos1.y-2 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.y=pos1.y+1 + + pos1.z=pos1.z+1 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.z=pos1.z-2 + check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) + pos1.z=pos1.z+1 +return new_node_added +end + +function check_LV_node_subp (PR_nodes,RE_nodes,LV_nodes,pos1) +meta = minetest.env:get_meta(pos1) +if meta:get_float("cablelike")==1 then new_node_added=add_new_cable_node(LV_nodes,pos1) end +if minetest.env:get_node(pos1).name == "technic:solar_panel" 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 +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 +end + + +function get_connected_charge (charge,pos1) + local charge1=0 + local meta={} + if minetest.env:get_node(pos1).name == "technic:battery_box" then + print ("found batbox") + meta = minetest.env:get_meta(pos1) + return meta:get_float("cable_OUT") + end + + if minetest.env:get_node(pos1).name == "technic:lv_cable" then + meta = minetest.env:get_meta(pos1) + charge1=meta:get_float("cable_OUT") + if charge1>charge then + charge=charge1 + end + end +return charge +end + +minetest.register_node("technic:solar_panel", { + tiles = {"technic_solar_panel_top.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png", + "technic_solar_panel_side.png", "technic_solar_panel_side.png", "technic_solar_panel_side.png"}, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + description="Solar Panel", + active = false, + technic_power_machine=1, + drawtype = "nodebox", + paramtype = "light", + is_ground_content = true, + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, + }, + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_float("technic_power_machine", 1) + meta:set_string("infotext", "Solar Panel") + meta:set_float("active", false) + end, +}) + +minetest.register_craft({ + output = 'technic:solar_panel 1', + recipe = { + {'default:sand', 'default:sand','default:sand'}, + {'default:sand', 'moreores:copper_ingot','default:sand'}, + {'default:sand', 'default:sand','default:sand'}, + + } +}) + +minetest.register_abm( + {nodenames = {"technic:solar_panel"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + + local pos1={} + pos1.y=pos.y+1 + pos1.x=pos.x + pos1.z=pos.z + + local light = minetest.env:get_node_light(pos1, nil) + local meta = minetest.env:get_meta(pos) + if light == nil then light = 0 end + if light >= 12 then + meta:set_string("infotext", "Solar Panel is active ") + meta:set_float("active",1) + else + meta:set_string("infotext", "Solar Panel is inactive"); + meta:set_float("active",0) + end + end, +}) \ No newline at end of file diff --git a/wires.lua b/wires.lua new file mode 100644 index 0000000..039dda6 --- /dev/null +++ b/wires.lua @@ -0,0 +1,400 @@ +--LV cable node boxes + + +minetest.register_alias("lv_cable", "technic:lv_cable") + +minetest.register_craft({ + output = 'technic:lv_cable 6', + recipe = { + {'moreores:copper_ingot', 'moreores:copper_ingot', 'moreores:copper_ingot'}, + } +}) + +minetest.register_craftitem("technic:lv_cable", { + description = "Low Voltage Copper Cable", + stack_max = 99, +}) + +minetest.register_node("technic:lv_cable", { + description = "Low Voltage Copper Cable", + tiles = {"technic_lv_cable.png"}, + inventory_image = "technic_lv_cable_wield.png", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + drop = "technic:lv_cable", + cablelike=1, + rules_x1=0, + rules_x2=0, + rules_y1=0, + rules_y2=0, + rules_z1=0, + rules_z2=0, + paramtype = "light", + drawtype = "nodebox", + selection_box = { + type = "fixed", + fixed = { + { -0.1 , -0.1 , -0.1 , 0.1 , 0.1 , 0.1 }, + }}, + node_box = { + type = "fixed", + fixed = { + { -0.1 , -0.1 , -0.1 , 0.1 , 0.1 , 0.1 }, + }}, + on_construct = function(pos) + meta=minetest.env:get_meta(pos) + meta:set_float("cablelike",1) + meta:set_float("x1",0) + meta:set_float("x2",0) + meta:set_float("y1",0) + meta:set_float("y2",0) + meta:set_float("z1",0) + meta:set_float("z2",0) + check_connections (pos) + end, + + after_dig_node = function (pos, oldnode, oldmetadata, digger) + check_connections_on_destroy (pos) + end, + +}) + + +str_y1= { -0.1 , -0.1 , -0.1 , 0.1 , 0.5, 0.1 } --0 y+ +str_x1= { -0.1 , -0.1 , -0.1 , 0.5, 0.1 , 0.1 } --0 x+ +str_z1= { -0.1 , -0.1 , 0.1 , 0.1 , 0.1 , 0.5 } --0 z+ +str_z2= { -0.1 , -0.1, -0.5 , 0.1 , 0.1 , 0.1 } --0 z- +str_y2= { -0.1 , -0.5, -0.1 , 0.1 , 0.1 , 0.1 } --0 y- +str_x2= { -0.5 , -0.1, -0.1 , 0.1 , 0.1 , 0.1 } --0 x- + + + +local x1,x2,y1,y2,z1,z2 +local count=0 + +for x1 = 0, 1, 1 do --x- +for x2 = 0, 1, 1 do --x+ +for y1 = 0, 1, 1 do --y- +for y2 = 0, 1, 1 do --y- +for z1 = 0, 1, 1 do --z- +for z2 = 0, 1, 1 do --z+ + +temp_x1={} temp_x2={} temp_y1={} temp_y2={} temp_z1={} temp_z2={} + +if x1==1 then temp_x1=str_x1 end +if x2==1 then temp_x2=str_x2 end +if y1==1 then temp_y1=str_y1 end +if y2==1 then temp_y2=str_y2 end +if z1==1 then temp_z1=str_z1 end +if z2==1 then temp_z2=str_z2 end + + +minetest.register_node("technic:lv_cable"..count, { + description = "Low Voltage Copper Cable", + tiles = {"technic_lv_cable.png"}, + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + drop = "technic:lv_cable", + rules_x1=0, + rules_x2=0, + rules_y1=0, + rules_y2=0, + rules_z1=0, + rules_z2=0, + cablelike=1, + paramtype = "light", + drawtype = "nodebox", + selection_box = { + type = "fixed", + fixed = { + temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2, + }}, + + node_box = { + type = "fixed", + fixed = { + temp_x1,temp_x2,temp_y1,temp_y2,temp_z1,temp_z2, + }}, + + after_dig_node = function (pos, oldnode, oldmetadata, digger) + check_connections_on_destroy (pos) + end, + +}) + +count=count+1 end end end end end end + +check_connections = function(pos) + local pos1={} + pos1.x=pos.x + pos1.y=pos.y + pos1.z=pos.z + + pos1.x=pos1.x+1 + if minetest.env:get_meta(pos1):get_float("cablelike")==1 then + x2=1 + x1=minetest.env:get_meta(pos1):get_float("x1") + y1=minetest.env:get_meta(pos1):get_float("y1") + y2=minetest.env:get_meta(pos1):get_float("y2") + z1=minetest.env:get_meta(pos1):get_float("z1") + z2=minetest.env:get_meta(pos1):get_float("z2") + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + hacky_swap_node(pos1,"technic:lv_cable"..rule) + meta=minetest.env:get_meta(pos1) + meta:set_float("x2",x2) + meta=minetest.env:get_meta(pos) + x1=1 + x2=minetest.env:get_meta(pos):get_float("x2") + y1=minetest.env:get_meta(pos):get_float("y1") + y2=minetest.env:get_meta(pos):get_float("y2") + z1=minetest.env:get_meta(pos):get_float("z1") + z2=minetest.env:get_meta(pos):get_float("z2") + meta:set_float("x1",x1) + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + hacky_swap_node(pos,"technic:lv_cable"..rule) + end + + pos1.x=pos1.x-2 + if minetest.env:get_meta(pos1):get_float("cablelike")==1 then + x1=1 + x2=minetest.env:get_meta(pos1):get_float("x2") + y1=minetest.env:get_meta(pos1):get_float("y1") + y2=minetest.env:get_meta(pos1):get_float("y2") + z1=minetest.env:get_meta(pos1):get_float("z1") + z2=minetest.env:get_meta(pos1):get_float("z2") + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + hacky_swap_node(pos1,"technic:lv_cable"..rule) + meta=minetest.env:get_meta(pos1) + meta:set_float("x1",x1) + meta=minetest.env:get_meta(pos) + x2=1 + x1=minetest.env:get_meta(pos):get_float("x1") + y1=minetest.env:get_meta(pos):get_float("y1") + y2=minetest.env:get_meta(pos):get_float("y2") + z1=minetest.env:get_meta(pos):get_float("z1") + z2=minetest.env:get_meta(pos):get_float("z2") + meta:set_float("x2",x2) + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + hacky_swap_node(pos,"technic:lv_cable"..rule) + end + + pos1.x=pos1.x+1 + + pos1.y=pos1.y+1 + if minetest.env:get_meta(pos1):get_float("cablelike")==1 then + y2=1 + x1=minetest.env:get_meta(pos1):get_float("x1") + x2=minetest.env:get_meta(pos1):get_float("x2") + y1=minetest.env:get_meta(pos1):get_float("y1") + z1=minetest.env:get_meta(pos1):get_float("z1") + z2=minetest.env:get_meta(pos1):get_float("z2") + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + hacky_swap_node(pos1,"technic:lv_cable"..rule) + meta=minetest.env:get_meta(pos1) + meta:set_float("y2",y2) + meta=minetest.env:get_meta(pos) + y1=1 + x1=minetest.env:get_meta(pos):get_float("x1") + x2=minetest.env:get_meta(pos):get_float("x2") + y2=minetest.env:get_meta(pos):get_float("y2") + z1=minetest.env:get_meta(pos):get_float("z1") + z2=minetest.env:get_meta(pos):get_float("z2") + meta:set_float("y1",y1) + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + hacky_swap_node(pos,"technic:lv_cable"..rule) + end + + if minetest.env:get_meta(pos1):get_float("technic_power_machine")==1 then + y1=1 + x1=minetest.env:get_meta(pos):get_float("x1") + x2=minetest.env:get_meta(pos):get_float("x2") + y2=minetest.env:get_meta(pos):get_float("y2") + z1=minetest.env:get_meta(pos):get_float("z1") + z2=minetest.env:get_meta(pos):get_float("z2") + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + hacky_swap_node(pos,"technic:lv_cable"..rule) + meta=minetest.env:get_meta(pos) + meta:set_float("y1",y1) + end + + + pos1.y=pos1.y-2 + if minetest.env:get_meta(pos1):get_float("cablelike")==1 then + y1=1 + x1=minetest.env:get_meta(pos1):get_float("x1") + x2=minetest.env:get_meta(pos1):get_float("x2") + y2=minetest.env:get_meta(pos1):get_float("y2") + z1=minetest.env:get_meta(pos1):get_float("z1") + z2=minetest.env:get_meta(pos1):get_float("z2") + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + hacky_swap_node(pos1,"technic:lv_cable"..rule) + meta=minetest.env:get_meta(pos1) + meta:set_float("y1",y1) + meta=minetest.env:get_meta(pos) + y2=1 + x1=minetest.env:get_meta(pos):get_float("x1") + x2=minetest.env:get_meta(pos):get_float("x2") + y1=minetest.env:get_meta(pos):get_float("y1") + z1=minetest.env:get_meta(pos):get_float("z1") + z2=minetest.env:get_meta(pos):get_float("z2") + meta:set_float("y2",y2) + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + hacky_swap_node(pos,"technic:lv_cable"..rule) + end + pos1.y=pos1.y+1 + + pos1.z=pos1.z+1 + if minetest.env:get_meta(pos1):get_float("cablelike")==1 then + z2=1 + x1=minetest.env:get_meta(pos1):get_float("x1") + x2=minetest.env:get_meta(pos1):get_float("x2") + y1=minetest.env:get_meta(pos1):get_float("y1") + y2=minetest.env:get_meta(pos1):get_float("y2") + z1=minetest.env:get_meta(pos1):get_float("z1") + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + hacky_swap_node(pos1,"technic:lv_cable"..rule) + meta=minetest.env:get_meta(pos1) + meta:set_float("z2",z2) + meta=minetest.env:get_meta(pos) + z1=1 + x1=minetest.env:get_meta(pos):get_float("x1") + x2=minetest.env:get_meta(pos):get_float("x2") + y1=minetest.env:get_meta(pos):get_float("y1") + y2=minetest.env:get_meta(pos):get_float("y2") + z2=minetest.env:get_meta(pos):get_float("z2") + meta:set_float("z1",z1) + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + hacky_swap_node(pos,"technic:lv_cable"..rule) + end + pos1.z=pos1.z-2 + if minetest.env:get_meta(pos1):get_float("cablelike")==1 then + z1=1 + x1=minetest.env:get_meta(pos1):get_float("x1") + x2=minetest.env:get_meta(pos1):get_float("x2") + y1=minetest.env:get_meta(pos1):get_float("y1") + y2=minetest.env:get_meta(pos1):get_float("y2") + z2=minetest.env:get_meta(pos1):get_float("z2") + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + hacky_swap_node(pos1,"technic:lv_cable"..rule) + meta=minetest.env:get_meta(pos1) + meta:set_float("z1",z1) + meta=minetest.env:get_meta(pos) + z2=1 + x1=minetest.env:get_meta(pos):get_float("x1") + x2=minetest.env:get_meta(pos):get_float("x2") + y1=minetest.env:get_meta(pos):get_float("y1") + y2=minetest.env:get_meta(pos):get_float("y2") + z1=minetest.env:get_meta(pos):get_float("z1") + meta:set_float("z2",z2) + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + hacky_swap_node(pos,"technic:lv_cable"..rule) + end + pos1.z=pos1.z+1 +end + +function make_rule_number (x1,x2,y1,y2,z1,z2) +local temp= z2+z1*2+y2*4+y1*8+x2*16+x1*32 +return temp +end + +check_connections_on_destroy = function(pos) + local pos1={} + pos1.x=pos.x + pos1.y=pos.y + pos1.z=pos.z + + pos1.x=pos1.x+1 + if minetest.env:get_meta(pos1):get_float("cablelike")==1 then + x2=0 + x1=minetest.env:get_meta(pos1):get_float("x1") + y1=minetest.env:get_meta(pos1):get_float("y1") + y2=minetest.env:get_meta(pos1):get_float("y2") + z1=minetest.env:get_meta(pos1):get_float("z1") + z2=minetest.env:get_meta(pos1):get_float("z2") + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end + if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end + meta=minetest.env:get_meta(pos1) + meta:set_float("x2",x2) + end + + pos1.x=pos1.x-2 + if minetest.env:get_meta(pos1):get_float("cablelike")==1 then + x1=0 + x2=minetest.env:get_meta(pos1):get_float("x2") + y1=minetest.env:get_meta(pos1):get_float("y1") + y2=minetest.env:get_meta(pos1):get_float("y2") + z1=minetest.env:get_meta(pos1):get_float("z1") + z2=minetest.env:get_meta(pos1):get_float("z2") + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end + if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end + meta=minetest.env:get_meta(pos1) + meta:set_float("x1",x1) + end + pos1.x=pos1.x+1 + + pos1.y=pos1.y+1 + if minetest.env:get_meta(pos1):get_float("cablelike")==1 then + y2=0 + x1=minetest.env:get_meta(pos1):get_float("x1") + x2=minetest.env:get_meta(pos1):get_float("x2") + y1=minetest.env:get_meta(pos1):get_float("y1") + z1=minetest.env:get_meta(pos1):get_float("z1") + z2=minetest.env:get_meta(pos1):get_float("z2") + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end + if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end + meta=minetest.env:get_meta(pos1) + meta:set_float("y2",y2) + end + + pos1.y=pos1.y-2 + if minetest.env:get_meta(pos1):get_float("cablelike")==1 then + y1=0 + x1=minetest.env:get_meta(pos1):get_float("x1") + x2=minetest.env:get_meta(pos1):get_float("x2") + y2=minetest.env:get_meta(pos1):get_float("y2") + z1=minetest.env:get_meta(pos1):get_float("z1") + z2=minetest.env:get_meta(pos1):get_float("z2") + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end + if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end + meta=minetest.env:get_meta(pos1) + meta:set_float("y1",y1) + end + pos1.y=pos1.y+1 + + pos1.z=pos1.z+1 + if minetest.env:get_meta(pos1):get_float("cablelike")==1 then + z2=0 + x1=minetest.env:get_meta(pos1):get_float("x1") + x2=minetest.env:get_meta(pos1):get_float("x2") + y1=minetest.env:get_meta(pos1):get_float("y1") + y2=minetest.env:get_meta(pos1):get_float("y2") + z1=minetest.env:get_meta(pos1):get_float("z1") + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end + if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end + meta=minetest.env:get_meta(pos1) + meta:set_float("z2",z2) + end + + pos1.z=pos1.z-2 + if minetest.env:get_meta(pos1):get_float("cablelike")==1 then + z1=0 + x1=minetest.env:get_meta(pos1):get_float("x1") + x2=minetest.env:get_meta(pos1):get_float("x2") + y1=minetest.env:get_meta(pos1):get_float("y1") + y2=minetest.env:get_meta(pos1):get_float("y2") + z2=minetest.env:get_meta(pos1):get_float("z2") + rule=make_rule_number(x1,x2,y1,y2,z1,z2) + if rule==0 then hacky_swap_node(pos1,"technic:lv_cable") end + if rule>0 then hacky_swap_node(pos1,"technic:lv_cable"..rule) end + meta=minetest.env:get_meta(pos1) + meta:set_float("z1",z1) + end + pos1.y=pos1.y+1 + +end +