From 836967362ea10386b34ddc887df6f27b2a7f7421 Mon Sep 17 00:00:00 2001 From: MirceaKitsune Date: Mon, 7 Jul 2014 17:01:09 +0300 Subject: [PATCH] Simple workbench by MirceaKitsune --- mods/workbench/README.md | 4 + mods/workbench/depends.txt | 1 + mods/workbench/init.lua | 123 ++++++++++++++++++ .../textures/workbench_3x3_bottom.png | Bin 0 -> 469 bytes .../textures/workbench_3x3_front.png | Bin 0 -> 3306 bytes .../workbench/textures/workbench_3x3_side.png | Bin 0 -> 3258 bytes mods/workbench/textures/workbench_3x3_top.png | Bin 0 -> 3329 bytes 7 files changed, 128 insertions(+) create mode 100644 mods/workbench/README.md create mode 100644 mods/workbench/depends.txt create mode 100644 mods/workbench/init.lua create mode 100644 mods/workbench/textures/workbench_3x3_bottom.png create mode 100644 mods/workbench/textures/workbench_3x3_front.png create mode 100644 mods/workbench/textures/workbench_3x3_side.png create mode 100644 mods/workbench/textures/workbench_3x3_top.png diff --git a/mods/workbench/README.md b/mods/workbench/README.md new file mode 100644 index 00000000..98a205e1 --- /dev/null +++ b/mods/workbench/README.md @@ -0,0 +1,4 @@ +minetest_mods_workbench +======================= + +Workbench mod for Minetest diff --git a/mods/workbench/depends.txt b/mods/workbench/depends.txt new file mode 100644 index 00000000..1810f69e --- /dev/null +++ b/mods/workbench/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/workbench/init.lua b/mods/workbench/init.lua new file mode 100644 index 00000000..2c73b347 --- /dev/null +++ b/mods/workbench/init.lua @@ -0,0 +1,123 @@ +-- Workbench mod by MirceaKitsune + +-- Inventory crafting grid size. Use nil to leave the default formspec untouched, recommended if other mods change the inventory window. +local INVENTORY_CRAFT = 2 + +-- +-- Internal workbench functions: +-- + +local function move_items(s_inv, s_listname, d_inv, d_listname) + local s_size = s_inv:get_size(s_listname) + for i = 1, s_size do + local stack = s_inv:get_stack(s_listname, i) + if stack and not stack:is_empty() then + d_inv:add_item(d_listname, stack) + end + end + s_inv:set_list(s_listname, {}) +end + +local inventory_persistence = {} + +local function inventory_set_size(player, size) + size = math.min(6, math.max(1, size)) + local inv = player:get_inventory() + if inv:get_size("craft") ~= size*size then + move_items(inv, "craft", inv, "main") + inv:set_size("craft", size*size) + inv:set_width("craft", size) + end +end + +local function inventory_set_formspec(player, size) + size = math.min(6, math.max(1, size)) + local inv = player:get_inventory() + local msize_x = math.min(inv:get_size("main"), 8) + local msize_y = math.min(math.ceil(inv:get_size("main") / 8), 4) + local fsize_x = math.max(msize_x, size + 2) + local fsize_y = msize_y + size + 1.25 + + local formspec = "size["..fsize_x..","..fsize_y.."]" + ..default.gui_bg + ..default.gui_bg_img + ..default.gui_slots + .."list[current_player;main;"..(fsize_x-msize_x)..","..(fsize_y-msize_y)..";"..msize_x..",1;]" + .."list[current_player;main;"..(fsize_x-msize_x)..","..(fsize_y-msize_y+1.25)..";"..msize_x..","..(msize_y - 1)..";"..msize_x.."]" + .."list[current_player;craft;"..(fsize_x-size-2)..",0;"..size..","..size..";]" + .."list[current_player;craftpreview;"..(fsize_x-1)..","..(size/2-0.5)..";1,1;]" + for i = 0, msize_x - 1, 1 do + formspec = formspec.."image["..(fsize_x-msize_x + i)..","..(fsize_y-msize_y)..";1,1;gui_hb_bg.png]" + end + player:set_inventory_formspec(formspec) +end + +local function inventory_set(player, size) + local name = player:get_player_name() + local inv = player:get_inventory() + + -- When size is a number, we want to presist inventory settings and activate the workbench settings + -- When size is nil, we want to re-activate the persisted inventory settings + if not size then + inv:set_size("craft", inventory_persistence[name].craft_size) + inv:set_width("craft", inventory_persistence[name].craft_width) + player:set_inventory_formspec(inventory_persistence[name].formspec) + inventory_persistence[name] = nil + else + inventory_persistence[name] = {} + inventory_persistence[name].craft_size = inv:get_size("craft") + inventory_persistence[name].craft_width = inv:get_width("craft") + inventory_persistence[name].formspec = player:get_inventory_formspec() + + inventory_set_size(player, size) + inventory_set_formspec(player, size) + end +end + +minetest.register_on_joinplayer(function(player) + if minetest.setting_getbool("creative_mode") then + inventory_set_size(player, 3) + elseif INVENTORY_CRAFT then + minetest.after(0, function() + inventory_set_size(player, INVENTORY_CRAFT) + inventory_set_formspec(player, INVENTORY_CRAFT) + end) + end +end) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname == "workbench:workbench" and fields.quit then + inventory_set(player, _) + end +end) + +-- +-- Item definitions: +-- + +minetest.register_node("workbench:3x3", { + description = "WorkBench", + tiles = {"workbench_3x3_top.png", "workbench_3x3_bottom.png", "workbench_3x3_side.png", + "workbench_3x3_side.png", "workbench_3x3_side.png", "workbench_3x3_front.png"}, + paramtype2 = "facedir", + groups = {choppy=2,oddly_breakable_by_hand=2}, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Workbench") + end, + on_rightclick = function(pos, node, clicker) + inventory_set(clicker, 3) + minetest.show_formspec(clicker:get_player_name(), "workbench:workbench", clicker:get_inventory_formspec()) + end, +}) + +minetest.register_craft({ + output = 'workbench:3x3', + recipe = { + {'group:wood', 'group:wood', ''}, + {'group:wood', 'group:wood', ''}, + {'', '', ''}, + } +}) diff --git a/mods/workbench/textures/workbench_3x3_bottom.png b/mods/workbench/textures/workbench_3x3_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..da449cf7ea53239c1decbc1d0a0126cc6bb627d7 GIT binary patch literal 469 zcmV;`0V@89P)zQTLNkH*(;81HMF!J(6a1M1Tz&<3e>{kqs#iH( z0YgYWT(X?6!cB{x^2Wc22T-mT!uvK)ykf?FYQKz zI}fcdN|c>ZiX7(cSBZ79G|3D`7S=@1Vdhe7{Ff-hpec$;D-cF)`v;9#&00000 LNkvXXu0mjfLvY4Q literal 0 HcmV?d00001 diff --git a/mods/workbench/textures/workbench_3x3_front.png b/mods/workbench/textures/workbench_3x3_front.png new file mode 100644 index 0000000000000000000000000000000000000000..0b843f7b27705c31930c28b87c077a346fb1ae3e GIT binary patch literal 3306 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 literal 0 HcmV?d00001 diff --git a/mods/workbench/textures/workbench_3x3_side.png b/mods/workbench/textures/workbench_3x3_side.png new file mode 100644 index 0000000000000000000000000000000000000000..1f5c728f1f133268de7408cbb251056ccb58d5d7 GIT binary patch literal 3258 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 literal 0 HcmV?d00001 diff --git a/mods/workbench/textures/workbench_3x3_top.png b/mods/workbench/textures/workbench_3x3_top.png new file mode 100644 index 0000000000000000000000000000000000000000..75dfa4ede7f46a07e4b2e53c451f7bd2e1cf6b53 GIT binary patch literal 3329 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 LNkvXXu0mjfn;SHP literal 0 HcmV?d00001