From 33c4c9d552c7f113a21405456e67c0e4752674a8 Mon Sep 17 00:00:00 2001 From: Novatux Date: Wed, 5 Apr 2017 02:57:22 -0400 Subject: [PATCH] let tubes break if they're "over-pressure" that is, if there are more than X number of items in a tube. Default is 40 in a tube, but breaking is also disabled by default. (original framework by Novatux, with changes by VanessaE) --- item_transport.lua | 19 +++++++++++++++++++ routing_tubes.lua | 23 +++++++++++++++++++++++ textures/pipeworks_broken_tube_end.png | Bin 0 -> 1545 bytes textures/pipeworks_broken_tube_inv.png | Bin 0 -> 923 bytes textures/pipeworks_broken_tube_noctr.png | Bin 0 -> 1581 bytes textures/pipeworks_broken_tube_plain.png | Bin 0 -> 1803 bytes textures/pipeworks_broken_tube_short.png | Bin 0 -> 830 bytes 7 files changed, 42 insertions(+) create mode 100644 textures/pipeworks_broken_tube_end.png create mode 100644 textures/pipeworks_broken_tube_inv.png create mode 100644 textures/pipeworks_broken_tube_noctr.png create mode 100644 textures/pipeworks_broken_tube_plain.png create mode 100644 textures/pipeworks_broken_tube_short.png diff --git a/item_transport.lua b/item_transport.lua index 12d9e7a..215b65e 100644 --- a/item_transport.lua +++ b/item_transport.lua @@ -1,4 +1,8 @@ local luaentity = pipeworks.luaentity +local enable_max_limit = minetest.setting_get("pipeworks_enable_items_per_tube_limit") +local max_tube_limit = minetest.setting_get("pipeworks_max_items_per_tube") or 40 + +pipeworks.tube_item_count = {} function pipeworks.tube_item(pos, item) error("obsolete pipeworks.tube_item() called; change caller to use pipeworks.tube_inject_item() instead") @@ -77,6 +81,21 @@ local function go_next(pos, velocity, stack) end end + if enable_max_limit then + local itemcount = #minetest.get_objects_inside_radius(pos, 0.5) + + local h = minetest.hash_node_position(pos) + if itemcount > max_tube_limit then + cmeta:set_string("the_tube_was", minetest.serialize(cnode)) + print("[Pipeworks] Warning - a tube at "..minetest.pos_to_string(pos).." broke due to too many items ("..itemcount..")") + minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"}) + pipeworks.scan_for_tube_objects(pos) + pipeworks.tube_item_count[h] = 0 + else + pipeworks.tube_item_count[h] = itemcount + end + end + if not next_positions[1] then return false, nil end diff --git a/routing_tubes.lua b/routing_tubes.lua index f415c3e..fa5cefe 100644 --- a/routing_tubes.lua +++ b/routing_tubes.lua @@ -1,3 +1,4 @@ + -- the default tube and default textures pipeworks.register_tube("pipeworks:tube", "Pneumatic tube segment") minetest.register_craft( { @@ -9,6 +10,28 @@ minetest.register_craft( { }, }) +pipeworks.register_tube("pipeworks:broken_tube", { + description = "Broken Tube (you hacker you)", + plain = { { name = "pipeworks_broken_tube_plain.png", backface_culling = false, color = nodecolor } }, + noctr = { { name = "pipeworks_broken_tube_plain.png", backface_culling = false, color = nodecolor } }, + ends = { { name = "pipeworks_broken_tube_end.png", color = nodecolor } }, + short = { name = "pipeworks_broken_tube_short.png", color = nodecolor }, + node_def = { + drop = "pipeworks:tube_1", + groups = {not_in_creative_inventory = 1, tubedevice_receiver = 1}, + tube = { + insert_object = function(pos, node, stack, direction) + minetest.item_drop(stack, nil, pos) + return ItemStack("") + end, + can_insert = function(pos,node,stack,direction) + return true + end, + priority = 50, + } + } +}) + -- the high priority tube is a low-cpu replacement for sorting tubes in situations -- where players would use them for simple routing (turning off paths) -- without doing actual sorting, like at outputs of tubedevices that might both accept and eject items diff --git a/textures/pipeworks_broken_tube_end.png b/textures/pipeworks_broken_tube_end.png new file mode 100644 index 0000000000000000000000000000000000000000..1829f8c0bf3d37ab4013c0cc2e0f7742ee61a115 GIT binary patch literal 1545 zcmV+k2KM=hP)k#005ZVWCkhzP@LfDlBCaiNI@1;(bI z^*k=Ry1S~os%I)p-K3MLo_kMy_dLIITBxuttHBzlrF_R@{T293_Ab+?0-#TXw{XWx z1g#>n8h|zWtYn_QoqJakldwJjJGgW+&(7Qq8{I`muLZ!xBF;R2ELUc9;2_xb0qCJK zw_csu5s(no2cX4slH51`9DtZ+eE@vcXI^|%b>NFG98ip=C0)QDq*g25ZQn6KKb3mLP zxG2T92r!{O4a7LPVl-ae%zdJ2cdD9*Tv`R+Uy>hmY>ZZ&c|cKKE!+{JNSzw+aSQ+R zfsB2iUnhWQ*8?U_HIc{{x=bE+#%of?~2vAB#2)O^j6xR)`R~I9Lo>r-hHl5(y595|YrwBjzB2 zL5n3Uga#2N0S*vik`U8F2?*%o5n#}!hs6NFVF(BoFA0Dq5Fo$n4gs)=PlSs>zyKE$ zik}=LlVFh8QdX0Zm@w(WjMiim|!EY{Wd+ zLlOHZmQ**01!NoTMwdM<*<&lGEbb#bJfhazo*mj6QH&;H1Dk zeOKJMdRd;9MxZAEPRftEdo8d?fU~l#k8-;o>LWcNBZ$UKfL<+;+no(VYu8APfsiK( za3pupqcQ}Zs!KeV2bM~c)(n8M_9p^OI4mQz=hrELcf=r?tA>7w+)Hvpb8kH( z-ALtcD}2d`b03P`w14ON^|Wgi7^Taa^AsjYSs&^ zJg+T2_KA#rpixo_rn-tJaEqw>DE`OmqAX19AIjE@>YmY|pE_aDdY~=*v_UCfrzOj( zjT;MsuU*jnD~C%>a7+SPsRnNA-e{PyNTpIx?M&_~Jf0K(P+?0wBn1#HoU~*BoRE83 z-VNv13LZl?1OgsvKC2CZO|gi1BlV}NT25^C$Oq0!z6a_MungSS4LO=q&q+BW+X_2a zlXkV7o_{3UngI|jfMCy=AmpBI2>h%tYR$J4o+=!dZFPw!UcSC3BgmFo7}!K8Z_-Zl zR)U3vM;k#f2~kY`KzWM>&kzpKro|8on;vTn@L4D12@Y=)(IBD2DiIbDT@D~L_!k$8 z9$v~IT;#G2hzPMUQEWmKk0t)bz{J48CMG~h@L1t51RIM6A&>wTJ|WBa*eD@NlK}!a zbg(!`n;i}iGsMNDkA+DLtkA{i(?M8Aun=NwT;LzpSfNQ1NKh2PBH;y14iW;dfS4G? zz(DAdFu)Gz?asgAyHgElkQ?g2pTp!J7py)*&t<2bJ-!;%=C6iu`<;E1_ywR(3NafSb z4XdSq=Q*VmY#&TuBfEr+gS$)n`dS(oFv!gZHZx3mMAX8{6Ou{*8aOi=$TMaTG{YeG z-2^>aGvd$5?0weibV3M95pT+tg7RPPCyjju;9=6{x|U6lM&(=T3`2|MnNjT24HfVS z>vX~;Vj5hKyIMrA&I|Z7Dmr1spKSX0X(^s^{w%L{i7Foj_0IqougV4 zi)b$RG{>XEI#Y2koe#{$#&o^HuQLi9tOD_ynGV1vDIDhRlLoAkAoDU#=v15)SK2*f vSU3&el<5wm;t!V<%dxu)Ck%)xX7~RA&o%}h4#<$b00000NkvXXu0mjfORTX5 literal 0 HcmV?d00001 diff --git a/textures/pipeworks_broken_tube_inv.png b/textures/pipeworks_broken_tube_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8d70761ca5f73d84dbb7ebbf0f2526154de094 GIT binary patch literal 923 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 IM6N<$g4q3l)c^nh literal 0 HcmV?d00001