From 4fa8db9042cc89f9545d854d46d387a2baa19eab Mon Sep 17 00:00:00 2001 From: Joachim Stolberg Date: Sun, 6 Jun 2021 11:16:10 +0200 Subject: [PATCH] Add a chest_cart for the mod minecart --- tubelib_addons1/nodes.lua | 2 +- tubelib_addons2/locale/template.txt | 1 + tubelib_addons3/chest_cart.lua | 171 ++++++++++++++++++ tubelib_addons3/init.lua | 4 + tubelib_addons3/locale/template.txt | 4 + tubelib_addons3/locale/tubelib_addons3.de.tr | 4 + tubelib_addons3/mod.conf | 3 +- .../tubelib_addons3_chest_cart_bottom.png | Bin 0 -> 210 bytes .../tubelib_addons3_chest_cart_front.png | Bin 0 -> 262 bytes .../tubelib_addons3_chest_cart_side.png | Bin 0 -> 279 bytes .../tubelib_addons3_chest_cart_top.png | Bin 0 -> 248 bytes 11 files changed, 187 insertions(+), 2 deletions(-) create mode 100644 tubelib_addons3/chest_cart.lua create mode 100644 tubelib_addons3/textures/tubelib_addons3_chest_cart_bottom.png create mode 100644 tubelib_addons3/textures/tubelib_addons3_chest_cart_front.png create mode 100644 tubelib_addons3/textures/tubelib_addons3_chest_cart_side.png create mode 100644 tubelib_addons3/textures/tubelib_addons3_chest_cart_top.png diff --git a/tubelib_addons1/nodes.lua b/tubelib_addons1/nodes.lua index 87c892a..a956aff 100644 --- a/tubelib_addons1/nodes.lua +++ b/tubelib_addons1/nodes.lua @@ -118,7 +118,7 @@ end ------------------------------------------------------------------------------- -- Ethereal Farming ------------------------------------------------------------------------------- -fn("ethereal:strawberry_8", "ethereal:strawberry 2", "ethereal:strawberry 1") +fn("ethereal:strawberry_8", "ethereal:strawberry 2", "ethereal:strawberry_1") fn("ethereal:onion_5", "ethereal:wild_onion_plant 2", "ethereal:onion_1") diff --git a/tubelib_addons2/locale/template.txt b/tubelib_addons2/locale/template.txt index 1228f9a..1eecfc2 100644 --- a/tubelib_addons2/locale/template.txt +++ b/tubelib_addons2/locale/template.txt @@ -1,6 +1,7 @@ # textdomain: tubelib_addons2 + ### accesscontrol.lua ### Access code (4 digits):= diff --git a/tubelib_addons3/chest_cart.lua b/tubelib_addons3/chest_cart.lua new file mode 100644 index 0000000..5332f3d --- /dev/null +++ b/tubelib_addons3/chest_cart.lua @@ -0,0 +1,171 @@ +--[[ + + Tubelib Addons 3 + ================ + + Copyright (C) 2017-2020 Joachim Stolberg + + AGPL v3 + See LICENSE.txt for more information + + chest.lua + + A high performance chest + +]]-- + +-- Load support for I18n +local S = tubelib_addons3.S + +local P2S = function(pos) if pos then return minetest.pos_to_string(pos) end end +local S2P = minetest.string_to_pos +local M = minetest.get_meta + +local function on_rightclick(pos, node, clicker) + if clicker and clicker:is_player() then + if M(pos):get_int("userID") == 0 then + minecart.show_formspec(pos, clicker) + end + end +end + +local function formspec() + return "size[8,6]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + "list[context;main;3,0;2,2;]".. + "list[current_player;main;0,2.3;8,4;]".. + "listring[context;main]".. + "listring[current_player;main]" +end + +local function allow_metadata_inventory_put(pos, listname, index, stack, player) + local owner = M(pos):get_string("owner") + if owner ~= "" and owner ~= player:get_player_name() then + return 0 + end + return stack:get_count() +end + +local function allow_metadata_inventory_take(pos, listname, index, stack, player) + local owner = M(pos):get_string("owner") + if owner ~= "" and owner ~= player:get_player_name() then + return 0 + end + return stack:get_count() +end + +minetest.register_node("tubelib_addons3:chest_cart", { + description = S("TA Chest Cart"), + tiles = { + -- up, down, right, left, back, front + "tubelib_addons3_chest_cart_top.png", + "tubelib_addons3_chest_cart_bottom.png", + "tubelib_addons3_chest_cart_side.png", + "tubelib_addons3_chest_cart_side.png", + "tubelib_addons3_chest_cart_front.png", + "tubelib_addons3_chest_cart_front.png", + }, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-7/16, 3/16, -7/16, 7/16, 8/16, 7/16}, + {-8/16, -8/16, -8/16, 8/16, 3/16, 8/16}, + }, + }, + paramtype2 = "facedir", + paramtype = "light", + use_texture_alpha = true, + sunlight_propagates = true, + is_ground_content = false, + groups = {cracky = 2, crumbly = 2, choppy = 2}, + node_placement_prediction = "", + diggable = false, + + on_place = minecart.on_nodecart_place, + on_punch = minecart.on_nodecart_punch, + allow_metadata_inventory_put = allow_metadata_inventory_put, + allow_metadata_inventory_take = allow_metadata_inventory_take, + on_rightclick = on_rightclick, + + after_place_node = function(pos, placer) + local inv = M(pos):get_inventory() + inv:set_size('main', 4) + if placer and placer:is_player() then + minecart.show_formspec(pos, placer) + else + M(pos):set_string("formspec", formspec()) + end + end, + + set_cargo = function(pos, data) + local inv = M(pos):get_inventory() + for idx, stack in ipairs(data) do + inv:set_stack("main", idx, stack) + end + end, + + get_cargo = function(pos) + local inv = M(pos):get_inventory() + local data = {} + for idx = 1, 4 do + local stack = inv:get_stack("main", idx) + data[idx] = {name = stack:get_name(), count = stack:get_count()} + end + return data + end, + + has_cargo = function(pos) + local inv = minetest.get_meta(pos):get_inventory() + return not inv:is_empty("main") + end +}) + +minecart.register_cart_entity("tubelib_addons3:chest_cart_entity", "tubelib_addons3:chest_cart", "chest", { + initial_properties = { + physical = false, + collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + visual = "wielditem", + textures = {"tubelib_addons3:chest_cart"}, + visual_size = {x=0.66, y=0.66, z=0.66}, + static_save = false, + }, +}) + +tubelib.register_node("tubelib_addons3:chest_cart", {}, { + on_pull_stack = function(pos, side) + local meta = minetest.get_meta(pos) + return tubelib.get_stack(meta, "main") + end, + on_pull_item = function(pos, side) + local meta = minetest.get_meta(pos) + return tubelib.get_item(meta, "main") + end, + on_push_item = function(pos, side, item) + local meta = minetest.get_meta(pos) + return tubelib.put_item(meta, "main", item) + end, + on_unpull_item = function(pos, side, item) + local meta = minetest.get_meta(pos) + return tubelib.put_item(meta, "main", item) + end, + + on_recv_message = function(pos, topic, payload) + if topic == "state" then + local meta = minetest.get_meta(pos) + return tubelib.get_inv_state(meta, "main") + else + return "unsupported" + end + end, +}) + +minetest.register_craft({ + output = "tubelib_addons3:chest_cart", + recipe = { + {"default:junglewood", "default:chest_locked", "default:junglewood"}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + }, +}) diff --git a/tubelib_addons3/init.lua b/tubelib_addons3/init.lua index dd2beca..5f0d5a3 100644 --- a/tubelib_addons3/init.lua +++ b/tubelib_addons3/init.lua @@ -21,3 +21,7 @@ dofile(minetest.get_modpath("tubelib_addons3") .. '/distributor.lua') dofile(minetest.get_modpath("tubelib_addons3") .. '/pushing_chest.lua') dofile(minetest.get_modpath("tubelib_addons3") .. '/teleporter.lua') dofile(minetest.get_modpath("tubelib_addons3") .. '/funnel.lua') + +if minetest.global_exists("minecart") then + dofile(minetest.get_modpath("tubelib_addons3") .. '/chest_cart.lua') +end diff --git a/tubelib_addons3/locale/template.txt b/tubelib_addons3/locale/template.txt index c8b3db1..dca4125 100644 --- a/tubelib_addons3/locale/template.txt +++ b/tubelib_addons3/locale/template.txt @@ -7,6 +7,10 @@ HighPerf Chest= connected with= +### chest_cart.lua ### + +TA Chest Cart= + ### distributor.lua ### HighPerf Distributor= diff --git a/tubelib_addons3/locale/tubelib_addons3.de.tr b/tubelib_addons3/locale/tubelib_addons3.de.tr index ccd8084..9137367 100644 --- a/tubelib_addons3/locale/tubelib_addons3.de.tr +++ b/tubelib_addons3/locale/tubelib_addons3.de.tr @@ -7,6 +7,10 @@ HighPerf Chest=HighPerf Kiste connected with=verbunden mit +### chest_cart.lua ### + +TA Chest Cart=TA Kistenwagen + ### distributor.lua ### HighPerf Distributor=HighPerf Verteiler diff --git a/tubelib_addons3/mod.conf b/tubelib_addons3/mod.conf index cd72536..18f1527 100644 --- a/tubelib_addons3/mod.conf +++ b/tubelib_addons3/mod.conf @@ -1,3 +1,4 @@ name=tubelib_addons3 description=Tubelib Extension with High Performance nodes -depends=tubelib,tubelib_addons1,default +depends=tubelib,tubelib_addons1,default +optional_depends=minecart diff --git a/tubelib_addons3/textures/tubelib_addons3_chest_cart_bottom.png b/tubelib_addons3/textures/tubelib_addons3_chest_cart_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..7aa750fe519dc3656f757c2999f90dedc70364e3 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa3-AeXHPqFfJbALLFt>rcFgpuV zadB~2SXfR@j+K?w{Q2_@_H-Tts?7IvaSY+O9(q=huh~JM^`W}i0{2H|#??)J{2MCY zh?;HnP+9hn?W;##^s*JZ^!NWX^iz7SBAxaA_v-I0kDh&=?DAPAW5qmOZQ-`#Ic|DC zViF$yVqeO3XUZM}i^V!CemOhsz8H{au@)TPTFv0;>gTe~ HDWM4fkAY1P literal 0 HcmV?d00001 diff --git a/tubelib_addons3/textures/tubelib_addons3_chest_cart_front.png b/tubelib_addons3/textures/tubelib_addons3_chest_cart_front.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf8f769cddcf042f70a20a005da5f9724107c66 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!O@L2`t9yaZ{Q2|s^z@cDcpAtH zhlPbro;=w>Pp+`AFvL=&BF-YkL;J+Mw2mB?ZT(?ZR#vjY+z&TbwY9cw+O&y*@mf64 z9LAC$zhDN3XE)M-oC;4D#}J9jslD8M%!(W?j)7K3^S}Qq*G;>-?5^G11^Oz^OY8+E z+L>RqbnRKY^@f+`^oaLH&+jbS_QHBz#97xg`=672`lVGo_jx!~IG!n)@$(D+OGd^V zh7U4c2|R}2J1i{h#JseQ92Y%3y>0zrR#sLIH&<=iw5hGN zt&zR)KhQMBk|4ie28U-i(tw<1PZ!4!iOZqA+c$|5?J()G~E*k|}?#n!k-o3Gd2U!I}-iC=hjuuf<)_|DO%xjNVMW@?(@h{9*Z;W>2pZVGI$0X-^ ZW|g-b?2{JAsR5nC;OXk;vd$@?2>{&~W!nG% literal 0 HcmV?d00001 diff --git a/tubelib_addons3/textures/tubelib_addons3_chest_cart_top.png b/tubelib_addons3/textures/tubelib_addons3_chest_cart_top.png new file mode 100644 index 0000000000000000000000000000000000000000..646f9ecfbbd2131b0e358b25ee423b11697338f6 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!S%6Q7>(qR!B@N!k=cSc~>z+7q zVtar1yb8zFExz{p3Y#`rF{{BxFKap7ec9Dh2l?fNVHEsLbFL>zAoHMn4XN2@_ZJn=f zoSeI0{+}4e^M5%6ivvR)R!mh`=&-52Rgf`YHIKpk7p+&@xUcm-f2C?mNV0CWh0r>mdKI;Vst08!y&ga7~l literal 0 HcmV?d00001