From 65102544f660bdeece8852305713a40f3cf6f892 Mon Sep 17 00:00:00 2001 From: Evert Prants Date: Sat, 11 Aug 2018 12:50:54 +0300 Subject: [PATCH] Add a node for automating buckets --- elepower_machines/crafting.lua | 10 ++ elepower_machines/machines/bucketer.lua | 140 ++++++++++++++++++ elepower_machines/machines/init.lua | 1 + .../textures/elepower_bucketer.png | Bin 0 -> 6718 bytes .../textures/elepower_canning_machine.png | Bin 6718 -> 6645 bytes 5 files changed, 151 insertions(+) create mode 100644 elepower_machines/machines/bucketer.lua create mode 100644 elepower_machines/textures/elepower_bucketer.png diff --git a/elepower_machines/crafting.lua b/elepower_machines/crafting.lua index 9f0fdf9..f02bd69 100644 --- a/elepower_machines/crafting.lua +++ b/elepower_machines/crafting.lua @@ -528,3 +528,13 @@ minetest.register_craft({ {"elepower_dynamics:steel_gear", "elepower_dynamics:tin_gear", "elepower_dynamics:steel_gear"}, } }) + +-- Bucketer +minetest.register_craft({ + output = "elepower_machines:bucketer", + recipe = { + {"", "elepower_dynamics:portable_tank", ""}, + {"elepower_dynamics:tin_can", "elepower_machines:machine_block", "elepower_dynamics:tin_can"}, + {"elepower_dynamics:servo_valve", "elepower_dynamics:tin_gear", "elepower_dynamics:servo_valve"}, + } +}) diff --git a/elepower_machines/machines/bucketer.lua b/elepower_machines/machines/bucketer.lua new file mode 100644 index 0000000..34e6048 --- /dev/null +++ b/elepower_machines/machines/bucketer.lua @@ -0,0 +1,140 @@ + +local function get_formspec(mode, buffer) + if not mode then + mode = 0 + end + + local rot = "^\\[transformR90" + if mode == 1 then + rot = "^\\[transformR270" + end + + return "size[8,8.5]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + ele.formspec.fluid_bar(7, 0.75, buffer).. + "list[context;src;3.5,1;1,1;]".. + "list[context;dst;3.5,2;1,1;]".. + "image_button[5.25,1;1,1;gui_furnace_arrow_bg.png" .. rot .. ";flip;]".. + "tooltip[flip;Toggle Extract/Insert]".. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. + "listring[current_player;main]".. + "listring[context;src]".. + "listring[current_player;main]".. + "listring[context;dst]".. + "listring[current_player;main]".. + default.get_hotbar_bg(0, 4.25) +end + +local function on_timer(pos, elapsed) + local refresh = false + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + + local buffer = fluid_lib.get_buffer_data(pos, "input") + local mode = meta:get_int("mode") + + local bucket_slot = inv:get_stack("src", 1) + local bucket_name = bucket_slot:get_name() + if mode == 0 and bucket_name == "bucket:bucket_empty" and buffer.amount >= 1000 then + -- Fill bucket + local bitem = bucket.liquids[buffer.fluid] + if bitem and bitem.itemname then + local bstack = ItemStack(bitem.itemname) + if inv:room_for_item("dst", bstack) then + inv:add_item("dst", bstack) + buffer.amount = buffer.amount - 1000 + + bucket_slot:take_item() + inv:set_stack("src", 1, bucket_slot) + + refresh = true + end + end + elseif mode == 1 and bucket.get_liquid_for_bucket(bucket_name) then + -- Empty bucket + local fluid = bucket.get_liquid_for_bucket(bucket_name) + if buffer.fluid == fluid or buffer.fluid == "" then + local bitem = ItemStack("bucket:bucket_empty") + if inv:room_for_item("dst", bitem) and buffer.amount + 1000 <= buffer.capacity then + buffer.amount = buffer.amount + 1000 + buffer.fluid = fluid + inv:add_item("dst", bitem) + + bucket_slot:take_item() + inv:set_stack("src", 1, bucket_slot) + + refresh = true + end + end + end + + if buffer.amount <= 0 then + buffer.amount = 0 + buffer.fluid = "" + end + + meta:set_int("input_fluid_storage", buffer.amount) + meta:set_string("input_fluid", buffer.fluid) + meta:set_string("formspec", get_formspec(mode, buffer)) + + return refresh +end + +local function get_fields(pos, formname, fields, sender) + if sender and sender ~= "" and minetest.is_protected(pos, sender:get_player_name()) then + return + end + + if fields["quit"] then return end + local meta = minetest.get_meta(pos) + + if fields["flip"] then + local fint = meta:get_int("mode") + if fint == 0 then + fint = 1 + else + fint = 0 + end + meta:set_int("mode", fint) + end + + minetest.get_node_timer(pos):start(1.0) +end + +ele.register_base_device("elepower_machines:bucketer", { + description = "Bucketer", + groups = {oddly_breakable_by_hand = 1, cracky = 1, fluid_container = 1, tube = 1}, + fluid_buffers = { + input = { + capacity = 8000, + drainable = false, + accepts = true, + }, + }, + on_timer = on_timer, + on_construct = function (pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + + inv:set_size("src", 1) + inv:set_size("dst", 1) + + meta:set_string("formspec", get_formspec()) + end, + tiles = { + "elepower_machine_top.png", "elepower_machine_base.png", "elepower_machine_side.png", + "elepower_machine_side.png", "elepower_machine_side.png", "elepower_bucketer.png", + }, + on_receive_fields = get_fields, + + allow_metadata_inventory_put = ele.default.allow_metadata_inventory_put, + allow_metadata_inventory_move = ele.default.allow_metadata_inventory_move, + allow_metadata_inventory_take = ele.default.allow_metadata_inventory_take, + + on_metadata_inventory_move = ele.default.metadata_inventory_changed, + on_metadata_inventory_put = ele.default.metadata_inventory_changed, + on_metadata_inventory_take = ele.default.metadata_inventory_changed, +}) diff --git a/elepower_machines/machines/init.lua b/elepower_machines/machines/init.lua index bbfac65..07415e9 100644 --- a/elepower_machines/machines/init.lua +++ b/elepower_machines/machines/init.lua @@ -28,3 +28,4 @@ dofile(mp .. "canning_machine.lua") -- Other dofile(mp .. "accumulator.lua") dofile(mp .. "lava_cooler.lua") +dofile(mp .. "bucketer.lua") diff --git a/elepower_machines/textures/elepower_bucketer.png b/elepower_machines/textures/elepower_bucketer.png new file mode 100644 index 0000000000000000000000000000000000000000..426840f73f28f323adae3f84958334619d67a9d6 GIT binary patch literal 6718 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 RqsTR+2nB)OyT(U;`!5Ka#rpsN literal 0 HcmV?d00001 diff --git a/elepower_machines/textures/elepower_canning_machine.png b/elepower_machines/textures/elepower_canning_machine.png index 426840f73f28f323adae3f84958334619d67a9d6..e9046c5fdf179f030b5ea73a305c55b51512de21 100644 GIT binary patch delta 1882 zcmV-g2c`JFH1#u(Bmn@CB_DrVlH@21{O1&V1SAlT<6s^UdxJgxCKxD}-PO|*Gj_M3 zge-|nNw!t}@872W!NFv$vf_h_&S@Mr+QdV2hL297&JDrR47rSI>t;HAzH5NF*0X1lof;lWJJz`Zre|4>`gQUw6n=b z2LmbZSZKJ7!(FBT$AyAI_7IHq{P?3&{Y0s?UQk3jY^)F$_soAr6rDLDr3q?agxUmE z2EgmQADveN24%n;u)(B{ZUOWkLa*d9gJ=Uq!FbjY`7#XvB19kv1_fhDJJbp}(w9&)(DAK{2c%B-@Zk zDsu&0Z{B}(H>aPF%;vSYj78b2-Un4OxE?3QR*byeO#z}-u*9dAc9sINV(F>KXO z`&;-aoga{v{0VhD_vgef1a(@54w-?{97Q(F?qgv0fVA2H>BsGx+l5VADskE2I(107 zblZGd*b1-vQo1uiw`9R{&EKgnmKEQ3QE1J~!si5By+EK1onFd$mr1$v_Tnq9 zHgbw2<9#~Rl^10=9u;!6gazc2-P)*;tdP}XD;SsN_zl)dpkYB%zmwIK&8uQt9 zl8rmk8Q^ztsS93z1edzt^@cz=5nvnS!J>c6w4a@YdoNexK8i^;qt1)@Wng&MS&i%L z$VzhdNb2b}*n2MCVS*@38uBb=Aj}74c2_Mhuf2#4dG`Vl_5oEi__cWG!Ji zHD)b2Wi~c7GdMXjF)}ujoCuE$IX5^tG%_|cH#jsfvo{GZ1td9PGcYhWG&L2@fhG+cJNXZWt(kR!KxbR5;6>lRZzvKn#W-UoQ$OFhJLK%G3&eNPl~0!gN!I z4tz{dk+f$sT<%C)2_fDkcZvPjeyzxQy*3d+RS^-+&t`_1oqTi7l^Cz8%;$3eM1-su zBdS{NRaKR92JUt{d?t^p#TcpUnz6dB!+Q^aa}F~@Rq>oDCvUfZTc*<~0Q>!(#bR*+ z$#No6hyZn6)3)t7m$q$7S9t^gr>dxG0RXI4s|!GW=bSqk!+Y&Kt&zDrxU zzrN$Iy1lx=1|z#|&klzGqxt_LN$X2y4mkcJ!*GK${{o1}FoGE(i52=l2;m|)gh1%S zP`R{#&o{O7<4pV{1wNkv`oN^}saWn>NLzUQd`noNJU1Vk(X8OS!@dkj=@{w!4Jn1T Uhajf;cK`qY07*qoM6N<$g7V3Gw*UYD delta 1952 zcmV;R2VeO0GrlyCBmoVRF$EQoItqVTvg9ZX{O1&N1SGK@2eU-X4d(chY_58^s-rt* z>{kX0ffA)8{8att@2393#pJXy)(01z)3{7DkrO&W&nt~5X)~VdMeoiJxw;1!B0($j zHMk|OkTdjo$@5w#L2lm`iggWKKL^rUh{H0lEiOYs(|}$JtF#spUY5;#zvh3ow2Q&N zZy_)Jw#J7W@KgO^#Iv)Gyus73_TEMG18d{qx6*-%ANFrU=eydf3`|^wMB`~XLIHdU zlF-hlbREdj7)c`HCQ`7)N_+I<_Uo^&Um;f;`l9>?rFW0M$lsV&!=ZaX4u;&_ew34a z$<;fhgSR)!&fS)O$f56l?0J8))_<*)&|00lOU7Z#Zf$CBW%QtTb#IMX4!6h8>d>9t z?}$4fB{JwN2(k-zrbrAL8yPB;s8JnlrVNOND|@ue8B}HkVE`GC^B~pqn;LtGQb0RP zMmPwhd}E3qFJpLy8;)71u`OV+=9I zlwdSr<%HP@3MpND$z?8kxyxVSidV|4vSgEOcG>5UV@`#O6y$Mn#g|ZGNtG%>shVo5 ztG>WBdB_7*13P2es9&s_3hDaD|EE{QczRkWQ+0xh&?xG&JA`AH73RI32h$%-=9ZL zM=CIMTKWZ;v#oBgrw|$6l;W$GzWDpLkd-+%xSM7!0auapevR2 zHGx=CaUr+8hz*s95=C>R7B8tKynOSbJIl{tQNxGs@L_(?Tk^>+s?_^Rs)N*0DZ~k) zpz6-q245^gHL-Xw=i8I+8H%@$j!JSxU5UyfqZcAIM$@Fs+gP%zBM@ve z&g0vuj){LU@~$u0O>Tm7WT&PCUsR!$Bh{dC|5(xQ&`LW-?DfKPWUqS5RWsq^m)mkq z-0GaB^@2m=QLaWDb&KzqwlChX$rj!ipEJ}mZ@5h-VJ|zzgyGnbaL!TO`n|AAn(O8-gJeGGGaU*Vr?^)GDm=f87K z%X|a?003W;F$Eq;i7^g<00;wjUf~mf62$8~!(*h)AHDWn1Gd49XGGk;h zEi_{^FfBMXH8d?|I5A>0WH2>2Fkv#2kO+?qGch?bIXE;hIXE>pvnvTN1tc!EAdz<73N<=UlquRh6ItA}8UR8Fcz@#e-Y2rEszxfEs-mixSz?_gmt{$oWrPq?f!K!k-X}+! zrs3iJN903+$rU_3asTCWlD^q&l8J}I0TIC+k4KzyXP2)G=Nz~{@J`454yvMBGsACh zcI^9~s3|!!khdHUe-Xg!4FF$%yKm&o$g&K8@4tVX7;iaE;Wocv_q?ZD_S`>w8ddF< zeTs{s7>~ffBY+5t>$^lUMgBM=&-3$-$1}0VfT5?w_1%l)-SZxR`Fws>)pdga8y=EK zBKaRK3EH+zkIoNnA>uI8SChMCPhHn9eKBwhh1HbTG{m;LWuHEPMX>-Y8K$u7_F!;Q mbFn6~4MEZhu>G|~5dHx?6w#@qdekHU0000