From f6804600ba24965d7598f4c86559fea2438d49b5 Mon Sep 17 00:00:00 2001 From: AFCMS Date: Sat, 10 Sep 2022 22:34:31 +0200 Subject: [PATCH] Grindstone menu --- .luacheckrc | 24 ++++--- mods/ITEMS/mcl_grindstone/init.lua | 110 +++++++++++++++++------------ textures/grindstone_gui_9.png | Bin 0 -> 100 bytes 3 files changed, 76 insertions(+), 58 deletions(-) create mode 100644 textures/grindstone_gui_9.png diff --git a/.luacheckrc b/.luacheckrc index 9d0b8cb2a..69c015665 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -1,10 +1,12 @@ +---@diagnostic disable + unused_args = false allow_defined_top = true max_line_length = false redefined = false globals = { - "minetest", "core", + "minetest", "core", } read_globals = { @@ -40,16 +42,16 @@ read_globals = { "factorial" } }, - ------ - --MODS - ------ + ------ + --MODS + ------ - --GENERAL - "default", + --GENERAL + "default", - --ENTITIES - "cmi", + --ENTITIES + "cmi", - --HUD - "sfinv", "sfinv_buttons", "unified_inventory", "cmsg", "inventory_plus", -} \ No newline at end of file + --HUD + "sfinv", "sfinv_buttons", "unified_inventory", "cmsg", "inventory_plus", +} diff --git a/mods/ITEMS/mcl_grindstone/init.lua b/mods/ITEMS/mcl_grindstone/init.lua index 00c373536..ddd1e8812 100644 --- a/mods/ITEMS/mcl_grindstone/init.lua +++ b/mods/ITEMS/mcl_grindstone/init.lua @@ -1,37 +1,52 @@ -- Code based from mcl_anvils local S = minetest.get_translator(minetest.get_current_modname()) +local F = minetest.formspec_escape +local C = minetest.colorize local MAX_WEAR = 65535 --- formspecs -local function get_grindstone_formspec() - return "size[9,8.75]".. - "image[3,1.5;1.5,1;gui_crafting_arrow.png]".. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]".. - "label[1,0.1;"..minetest.formspec_escape(minetest.colorize("#313131", S("Repair & Disenchant"))).."]".. - "list[context;main;0,0;8,4;]".. - "list[current_player;main;0,4.5;9,3;9]".. - mcl_formspec.get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - mcl_formspec.get_itemslot_bg(0,7.74,9,1).. - "list[context;input;1,1;1,1;]".. - mcl_formspec.get_itemslot_bg(1,1,1,1).. - "list[context;input;1,2;1,1;1]".. - mcl_formspec.get_itemslot_bg(1,2,1,1).. - "list[context;output;6,1.5;1,1;]".. - mcl_formspec.get_itemslot_bg(6,1.5,1,1).. - "listring[context;output]".. - "listring[current_player;main]".. - "listring[context;input]".. - "listring[current_player;main]" -end +local grindstone_formspec = table.concat({ + "formspec_version[6]", + "size[11.75,10.425]", + + "label[0.375,0.375;" .. F(C(mcl_formspec.label_color, S("Repair & Disenchant"))) .. "]", + + mcl_formspec.get_itemslot_bg_v4(2.875, 1.25, 1, 1), + "list[context;input;2.875,1.25;1,1;]", + + mcl_formspec.get_itemslot_bg_v4(2.875, 2.625, 1, 1), + "list[context;input;2.875,2.625;1,1;1]", + + "image[2.375,1;2,2.875;grindstone_gui_9.png;2]", + + "image[1.875,1.5;0.5,2.875;grindstone_gui_9.png;2]", + "image[4.375,1.5;0.5,2.875;grindstone_gui_9.png;2]", + + "image[5.5,1.95;1.5,1;gui_crafting_arrow.png]", + + mcl_formspec.get_itemslot_bg_v4(7.875, 1.9375, 1, 1), + "list[context;output;7.875,1.9375;1,1;]", + + "label[0.375,4.7;" .. F(C(mcl_formspec.label_color, S("Inventory"))) .. "]", + + mcl_formspec.get_itemslot_bg_v4(0.375, 5.1, 9, 3), + "list[current_player;main;0.375,5.1;9,3;9]", + + mcl_formspec.get_itemslot_bg_v4(0.375, 9.05, 9, 1), + "list[current_player;main;0.375,9.05;9,1;]", + + "listring[context;output]", + "listring[current_player;main]", + "listring[context;input]", + "listring[current_player;main]", +}) -- Creates a new item with the wear of the items and custom name local function create_new_item(name_item, meta, wear) local new_item = ItemStack(name_item) if wear ~= nil then - new_item:set_wear(wear) + new_item:set_wear(wear) end local new_meta = new_item:get_meta() new_meta:set_string("name", meta:get_string("name")) @@ -86,7 +101,6 @@ local function fix_stack_size(stack) return count end - -- Update the inventory slots of an grindstone node. -- meta: Metadata of grindstone node local function update_grindstone_slots(meta) @@ -122,8 +136,8 @@ local function update_grindstone_slots(meta) else new_output = "" end - -- Check if at least one input has an item - -- Check if the item is's an enchanted book or tool + -- Check if at least one input has an item + -- Check if the item is's an enchanted book or tool elseif (not input1:is_empty() and input2:is_empty()) or (input1:is_empty() and not input2:is_empty()) then if input2:is_empty() then local def1 = input1:get_definition() @@ -168,10 +182,10 @@ end -- Drop any items inside the grindstone if destroyed local function drop_grindstone_items(pos, meta) local inv = meta:get_inventory() - for i=1, inv:get_size("input") do + for i = 1, inv:get_size("input") do local stack = inv:get_stack("input", i) if not stack:is_empty() then - local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} + local p = { x = pos.x + math.random(0, 10) / 10 - 0.5, y = pos.y, z = pos.z + math.random(0, 10) / 10 - 0.5 } minetest.add_item(p, stack) end end @@ -181,11 +195,11 @@ local node_box = { type = "fixed", -- created with nodebox editor fixed = { - {-0.25, -0.25, -0.375, 0.25, 0.5, 0.375}, - {-0.375, -0.0625, -0.1875, -0.25, 0.3125, 0.1875}, - {0.25, -0.0625, -0.1875, 0.375, 0.3125, 0.1875}, - {0.25, -0.5, -0.125, 0.375, -0.0625, 0.125}, - {-0.375, -0.5, -0.125, -0.25, -0.0625, 0.125}, + { -0.25, -0.25, -0.375, 0.25, 0.5, 0.375 }, + { -0.375, -0.0625, -0.1875, -0.25, 0.3125, 0.1875 }, + { 0.25, -0.0625, -0.1875, 0.375, 0.3125, 0.1875 }, + { 0.25, -0.5, -0.125, 0.375, -0.0625, 0.125 }, + { -0.375, -0.5, -0.125, -0.25, -0.0625, 0.125 }, } } @@ -193,11 +207,14 @@ minetest.register_node("mcl_grindstone:grindstone", { description = S("Grindstone"), _tt_help = S("Used to disenchant/fix tools"), _doc_items_longdesc = S("Grindstone disenchants tools and armour except for curses, and repairs two items of the same type it is also the weapon smith's work station."), - _doc_items_usagehelp = S("To use the grindstone, rightclick it, Two input slots (on the left) and a single output slot.").."\n".. - S("To disenchant an item place enchanted item in one of the input slots and take the disenchanted item from the output.").."\n".. - S("To repair a tool you need a tool of the same type and material, put both items in the input slot and the output slot will combine two items durabilities with 5% bonus.").."\n".. - S("If both items have enchantments the player will get xp from both items from the disenchant.").."\n".. - S("Curses cannot be removed and will be transfered to the new repaired item, if both items have a different curse the curses will be combined."), + _doc_items_usagehelp = S("To use the grindstone, rightclick it, Two input slots (on the left) and a single output slot.") + .. "\n" .. + S("To disenchant an item place enchanted item in one of the input slots and take the disenchanted item from the output.") + .. "\n" .. + S("To repair a tool you need a tool of the same type and material, put both items in the input slot and the output slot will combine two items durabilities with 5% bonus.") + .. "\n" .. + S("If both items have enchantments the player will get xp from both items from the disenchant.") .. "\n" .. + S("Curses cannot be removed and will be transfered to the new repaired item, if both items have a different curse the curses will be combined."), tiles = { "grindstone_top.png", "grindstone_top.png", @@ -212,7 +229,7 @@ minetest.register_node("mcl_grindstone:grindstone", { selection_box = node_box, collision_box = node_box, sounds = mcl_sounds.node_sound_stone_defaults(), - groups = {pickaxey = 1, deco_block = 1}, + groups = { pickaxey = 1, deco_block = 1 }, after_dig_node = function(pos, oldnode, oldmetadata, digger) local meta = minetest.get_meta(pos) @@ -268,7 +285,7 @@ minetest.register_node("mcl_grindstone:grindstone", { local meta = minetest.get_meta(pos) if from_list == "output" and to_list == "input" then local inv = meta:get_inventory() - for i=1, inv:get_size("input") do + for i = 1, inv:get_size("input") do if i ~= to_index then local istack = inv:get_stack("input", i) istack:set_count(math.max(0, istack:get_count() - count)) @@ -289,8 +306,8 @@ minetest.register_node("mcl_grindstone:grindstone", { if not input1:is_empty() and not input2:is_empty() then -- Get xp earnt from the enchanted items xp_earnt = calculate_xp(input1) + calculate_xp(input1) - input1:take_item() - input2:take_item() + input1:take_item(1) + input2:take_item(1) inv:set_stack("input", 1, input1) inv:set_stack("input", 2, input2) else @@ -320,14 +337,13 @@ minetest.register_node("mcl_grindstone:grindstone", { local inv = meta:get_inventory() inv:set_size("input", 2) inv:set_size("output", 1) - local form = get_grindstone_formspec() - meta:set_string("formspec", form) + meta:set_string("formspec", grindstone_formspec) end, on_rightclick = function(pos, node, player, itemstack) if not player:get_player_control().sneak then local meta = minetest.get_meta(pos) update_grindstone_slots(meta) - meta:set_string("formspec", get_grindstone_formspec()) + meta:set_string("formspec", grindstone_formspec) end end, _mcl_blast_resistance = 6, @@ -337,7 +353,7 @@ minetest.register_node("mcl_grindstone:grindstone", { minetest.register_craft({ output = "mcl_grindstone:grindstone", recipe = { - { "mcl_core:stick", "mcl_stairs:slab_stone_rough", "mcl_core:stick"}, - { "group:wood", "", "group:wood"}, + { "mcl_core:stick", "mcl_stairs:slab_stone_rough", "mcl_core:stick" }, + { "group:wood", "", "group:wood" }, } }) diff --git a/textures/grindstone_gui_9.png b/textures/grindstone_gui_9.png new file mode 100644 index 0000000000000000000000000000000000000000..b2fffcb56dde72da4bd92a0c432c7df377a91611 GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0y~yU;weXIM^5%7