Rename crafting mod to mcl_inventory
34
mods/HUD/mcl_inventory/README.txt
Normal file
|
@ -0,0 +1,34 @@
|
|||
Minetest mod "Crafting"
|
||||
=======================
|
||||
Version: 2.0.1
|
||||
|
||||
License of source code and Textures: WTFPL
|
||||
------------------------------------
|
||||
copyright (c) 2013-2014 by BlockMen
|
||||
|
||||
This program is free software. It comes without any warranty, to
|
||||
the extent permitted by applicable law. You can redistribute it
|
||||
and/or modify it under the terms of the Do What The Fuck You Want
|
||||
To Public License, Version 2, as published by Sam Hocevar. See
|
||||
http://sam.zoy.org/wtfpl/COPYING for more details.
|
||||
|
||||
|
||||
--USING the mod--
|
||||
=================
|
||||
|
||||
This mod changes the players inventory (survival and creative) with more slots (9*4 instead of 8*4)
|
||||
Like known from Minecraft you have a 2x2 crafting grid at inventory now. Furthermore a categorized creative
|
||||
inventory and a support for stu's 3d armor mod (To use the armor and a preview of player).
|
||||
|
||||
Left items in the crafting slots are dropped infront of you.
|
||||
|
||||
|
||||
Workbench
|
||||
_________
|
||||
|
||||
With following recipe you craft a workbench (aka crafting table):
|
||||
|
||||
wood wood
|
||||
wood wood
|
||||
|
||||
The workbench has a 3x3 crafting grid, that allows to use all recipes.
|
439
mods/HUD/mcl_inventory/creative.lua
Normal file
|
@ -0,0 +1,439 @@
|
|||
mcl_inventory.creative_inventory_size = 0
|
||||
|
||||
-- Prepare player info table
|
||||
local players = {}
|
||||
|
||||
local function set_inv(filter, player)
|
||||
local playername = player:get_player_name()
|
||||
local inv = minetest.get_inventory({type="detached", name="creative_"..playername})
|
||||
inv:set_size("main", 0)
|
||||
local creative_list = {}
|
||||
for name,def in pairs(minetest.registered_items) do
|
||||
if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0) and def.description and def.description ~= "" then
|
||||
if filter ~= "" then
|
||||
local is_redstone = function(def)
|
||||
return def.mesecons or def.groups.mesecon or def.groups.mesecon_conductor_craftable or def.groups.mesecon_effecor_off
|
||||
end
|
||||
local is_tool = function(def)
|
||||
return def.groups.tool or (def.tool_capabilities ~= nil and def.tool_capabilities.damage_groups == nil)
|
||||
end
|
||||
local is_weapon = function(def)
|
||||
return def.groups.weapon or def.groups.weapon_ranged or def.groups.ammo or def.groups.armor_head or def.groups.armor_torso or def.groups.armor_legs or def.groups.armor_feet
|
||||
end
|
||||
if filter == "\0blocks" then
|
||||
if def.groups.building_block then
|
||||
table.insert(creative_list, name)
|
||||
end
|
||||
elseif filter == "\0deco" then
|
||||
if def.groups.deco_block then
|
||||
table.insert(creative_list, name)
|
||||
end
|
||||
elseif filter == "\0redstone" then
|
||||
if is_redstone(def) then
|
||||
table.insert(creative_list, name)
|
||||
end
|
||||
elseif filter == "\0rail" then
|
||||
if def.groups.transport then
|
||||
table.insert(creative_list, name)
|
||||
end
|
||||
elseif filter == "\0food" then
|
||||
if def.groups.food or def.groups.eatable then
|
||||
table.insert(creative_list, name)
|
||||
end
|
||||
elseif filter == "\0tools" then
|
||||
if is_tool(def) then
|
||||
table.insert(creative_list, name)
|
||||
end
|
||||
elseif filter == "\0combat" then
|
||||
if is_weapon(def) then
|
||||
table.insert(creative_list, name)
|
||||
end
|
||||
elseif filter == "\0brew" then
|
||||
if def.groups.brewitem then
|
||||
table.insert(creative_list, name)
|
||||
end
|
||||
elseif filter == "\0matr" then
|
||||
if def.groups.craftitem then
|
||||
table.insert(creative_list, name)
|
||||
end
|
||||
elseif filter == "\0misc" then
|
||||
if not def.groups.building_block and not def.groups.deco_block and not is_redstone(def) and not def.groups.transport and not def.groups.food and not def.groups.eatable and not is_tool(def) and not is_weapon(def) and not def.groups.craftitem and not def.groups.brewitem then
|
||||
|
||||
table.insert(creative_list, name)
|
||||
end
|
||||
elseif filter == "\0all" then
|
||||
table.insert(creative_list, name)
|
||||
else --for all other
|
||||
if string.find(string.lower(def.name), filter) or string.find(string.lower(def.description), filter) then
|
||||
table.insert(creative_list, name)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
table.sort(creative_list)
|
||||
inv:set_size("main", #creative_list)
|
||||
for _,itemstring in ipairs(creative_list) do
|
||||
inv:add_item("main", ItemStack(itemstring))
|
||||
end
|
||||
mcl_inventory.creative_inventory_size = #creative_list
|
||||
end
|
||||
|
||||
local function init(player)
|
||||
local playername = player:get_player_name()
|
||||
local inv = minetest.create_detached_inventory("creative_"..playername, {
|
||||
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
|
||||
if minetest.setting_getbool("creative_mode") then
|
||||
return count
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end,
|
||||
allow_put = function(inv, listname, index, stack, player)
|
||||
return 0
|
||||
end,
|
||||
allow_take = function(inv, listname, index, stack, player)
|
||||
if minetest.setting_getbool("creative_mode") then
|
||||
return -1
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end,
|
||||
on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
|
||||
end,
|
||||
on_put = function(inv, listname, index, stack, player)
|
||||
end,
|
||||
on_take = function(inv, listname, index, stack, player)
|
||||
print(player:get_player_name().." takes item from creative inventory; listname="..dump(listname)..", index="..dump(index)..", stack="..dump(stack))
|
||||
if stack then
|
||||
print("stack:get_name()="..dump(stack:get_name())..", stack:get_count()="..dump(stack:get_count()))
|
||||
end
|
||||
end,
|
||||
}, playername)
|
||||
set_inv("\0all", player)
|
||||
end
|
||||
|
||||
-- Create the trash field
|
||||
local trash = minetest.create_detached_inventory("trash", {
|
||||
allow_put = function(inv, listname, index, stack, player)
|
||||
if minetest.setting_getbool("creative_mode") then
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end,
|
||||
on_put = function(inv, listname, index, stack, player)
|
||||
inv:set_stack(listname, index, "")
|
||||
end,
|
||||
})
|
||||
trash:set_size("main", 1)
|
||||
|
||||
local noffset = {} -- numeric tab offset
|
||||
local offset = {} -- string offset:
|
||||
local boffset = {} --
|
||||
local hoch = {}
|
||||
local bg = {}
|
||||
|
||||
noffset["blocks"] = {-0.29,-0.25}
|
||||
noffset["deco"] = {0.98,-0.25}
|
||||
noffset["redstone"] = {2.23,-0.25}
|
||||
noffset["rail"] = {3.495,-0.25}
|
||||
noffset["misc"] = {4.75,-0.25}
|
||||
noffset["nix"] = {8.99,-0.25}
|
||||
noffset["food"] = {-0.29,8.12}
|
||||
noffset["tools"] = {0.98,8.12}
|
||||
noffset["combat"] = {2.23,8.12}
|
||||
noffset["brew"] = {3.495,8.12}
|
||||
noffset["matr"] = {4.74,8.12}
|
||||
noffset["inv"] = {8.99,8.12}
|
||||
|
||||
for k,v in pairs(noffset) do
|
||||
offset[k] = tostring(v[1]) .. "," .. tostring(v[2])
|
||||
boffset[k] = tostring(v[1]+0.19) .. "," .. tostring(v[2]+0.25)
|
||||
end
|
||||
|
||||
hoch["blocks"] = ""
|
||||
hoch["deco"] = ""
|
||||
hoch["redstone"] = ""
|
||||
hoch["rail"] = ""
|
||||
hoch["misc"] = ""
|
||||
hoch["nix"] = ""
|
||||
hoch["default"] = ""
|
||||
hoch["food"] = "^[transformfy"
|
||||
hoch["tools"] = "^[transformfy"
|
||||
hoch["combat"] = "^[transformfy"
|
||||
hoch["brew"] = "^[transformfy"
|
||||
hoch["matr"] = "^[transformfy"
|
||||
hoch["inv"] = "^[transformfy"
|
||||
|
||||
local dark_bg = "crafting_creative_bg_dark.png"
|
||||
|
||||
local function reset_menu_item_bg()
|
||||
bg["blocks"] = dark_bg
|
||||
bg["deco"] = dark_bg
|
||||
bg["redstone"] = dark_bg
|
||||
bg["rail"] = dark_bg
|
||||
bg["misc"] = dark_bg
|
||||
bg["nix"] = dark_bg
|
||||
bg["food"] = dark_bg
|
||||
bg["tools"] = dark_bg
|
||||
bg["combat"] = dark_bg
|
||||
bg["brew"] = dark_bg
|
||||
bg["matr"] = dark_bg
|
||||
bg["inv"] = dark_bg
|
||||
bg["default"] = dark_bg
|
||||
end
|
||||
|
||||
|
||||
mcl_inventory.set_creative_formspec = function(player, start_i, pagenum, show, page, filter)
|
||||
reset_menu_item_bg()
|
||||
pagenum = math.floor(pagenum) or 1
|
||||
local pagemax = math.floor((mcl_inventory.creative_inventory_size-1) / (9*5) + 1)
|
||||
local slider_height
|
||||
if pagemax == 1 then
|
||||
slider_height = 4.525
|
||||
else
|
||||
slider_height = 4/pagemax
|
||||
end
|
||||
local slider_pos = slider_height*(pagenum-1)+2.20
|
||||
local name = "nix"
|
||||
local formspec = ""
|
||||
local main_list
|
||||
local playername = player:get_player_name()
|
||||
local listrings = "listring[detached:creative_"..playername..";main]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[detached:trash;main]"
|
||||
|
||||
if page ~= nil then name = page end
|
||||
bg[name] = "crafting_creative_bg.png"
|
||||
local inv_bg = "crafting_inventory_creative.png"
|
||||
if name == "inv" then
|
||||
inv_bg = "crafting_inventory_creative_survival.png"
|
||||
-- Survival inventory slots
|
||||
main_list = "list[current_player;main;0,3.75;9,3;9]"..
|
||||
-- armor
|
||||
"list[detached:"..playername.."_armor;armor;2.5,1.3;1,1;1]"..
|
||||
"list[detached:"..playername.."_armor;armor;2.5,2.75;1,1;2]"..
|
||||
"list[detached:"..playername.."_armor;armor;5.5,1.3;1,1;3]"..
|
||||
"list[detached:"..playername.."_armor;armor;5.5,2.75;1,1;4]"..
|
||||
--TODO: armor_slot_imgs..
|
||||
-- crafting guide button
|
||||
"image_button[9,1;1,1;craftguide_book.png;__mcl_craftguide;]"..
|
||||
"tooltip[__mcl_craftguide;Show crafting recipes]"..
|
||||
-- achievements button
|
||||
"image_button[9,2;1,1;mcl_achievements_button.png;__mcl_achievements;]"..
|
||||
"tooltip[__mcl_achievements;Achievements]"
|
||||
|
||||
-- For shortcuts
|
||||
listrings = listrings ..
|
||||
"listring[detached:"..playername.."_armor;armor]"..
|
||||
"listring[current_player;main]"
|
||||
else
|
||||
inv_bg = inv_bg .. "^crafting_inventory_creative_scroll.png"
|
||||
-- Creative inventory slots
|
||||
main_list = "list[detached:creative_"..playername..";main;0,1.75;9,5;"..tostring(start_i).."]" ..
|
||||
-- ... and scroll bar
|
||||
"image_button[9.03,1.74;0.85,0.6;crafting_creative_up.png;creative_prev;]"..
|
||||
"image[9.04," .. tostring(slider_pos) .. ";0.75,"..tostring(slider_height) .. ";crafting_slider.png]"..
|
||||
"image_button[9.03,6.15;0.85,0.6;crafting_creative_down.png;creative_next;]"
|
||||
end
|
||||
local function tab(current, check)
|
||||
local img
|
||||
if current == check then
|
||||
img = "crafting_creative_active.png"
|
||||
else
|
||||
img = "crafting_creative_inactive.png"
|
||||
end
|
||||
return "image[" .. offset[check] .. ";1.5,1.44;" .. img .. hoch[check].. "]" ..
|
||||
"image[" .. boffset[check] .. ";1,1;crafting_creative_marker.png]"
|
||||
end
|
||||
local fnt = ""
|
||||
if name ~= "inv" then
|
||||
fnt = "image[0,1;5,0.75;fnt_"..name..".png]"
|
||||
end
|
||||
formspec = "size[10,9.3]"..
|
||||
mcl_vars.inventory_header..
|
||||
"background[-0.19,-0.25;10.5,9.87;"..inv_bg.."]"..
|
||||
"label[-5,-5;"..name.."]"..
|
||||
"item_image_button[-0.1,0;1,1;mcl_core:brick_block;blocks;]".. --build blocks
|
||||
tab(name, "blocks") ..
|
||||
"tooltip[blocks;Building Blocks]"..
|
||||
"item_image_button[1.15,0;1,1;mcl_flowers:peony;deco;]".. --decoration blocks
|
||||
tab(name, "deco") ..
|
||||
"tooltip[deco;Decoration Blocks]"..
|
||||
"item_image_button[2.415,0;1,1;mesecons:redstone;redstone;]".. --redstone
|
||||
tab(name, "redstone") ..
|
||||
"tooltip[redstone;Redstone]"..
|
||||
"item_image_button[3.693,0;1,1;mcl_minecarts:golden_rail;rail;]".. --transportation
|
||||
tab(name, "rail") ..
|
||||
"tooltip[rail;Transportation]"..
|
||||
"item_image_button[4.93,0;1,1;bucket:bucket_lava;misc;]".. --miscellaneous
|
||||
tab(name, "misc") ..
|
||||
"tooltip[misc;Miscellaneous]"..
|
||||
"item_image_button[9.19,0;1,1;mcl_compass:compass;nix;]".. --search
|
||||
tab(name, "nix") ..
|
||||
"tooltip[nix;Search Items]"..
|
||||
fnt..
|
||||
"list[current_player;main;0,7;9,1;]"..
|
||||
main_list..
|
||||
"item_image_button[-0.1,8.37;1,1;mcl_core:apple;food;]".. --foodstuff
|
||||
tab(name, "food") ..
|
||||
"tooltip[food;Foodstuffs]"..
|
||||
"item_image_button[1.15,8.37;1,1;mcl_core:axe_iron;tools;]".. --tools
|
||||
tab(name, "tools") ..
|
||||
"tooltip[tools;Tools]"..
|
||||
"item_image_button[2.415,8.37;1,1;mcl_core:sword_gold;combat;]".. --combat
|
||||
tab(name, "combat") ..
|
||||
"tooltip[combat;Combat]"..
|
||||
"item_image_button[3.693,8.37;1,1;mcl_potions:potion_water;brew;]".. --brewing
|
||||
tab(name, "brew") ..
|
||||
"tooltip[brew;Brewing]"..
|
||||
"item_image_button[4.938,8.37;1,1;mcl_core:stick;matr;]".. --materials
|
||||
tab(name, "matr") ..
|
||||
"tooltip[matr;Materials]"..
|
||||
"item_image_button[9.19,8.37;1,1;mcl_chests:chest;inv;]".. --inventory
|
||||
tab(name, "inv") ..
|
||||
"tooltip[inv;Survival Inventory]"..
|
||||
"list[detached:trash;main;9,7;1,1;]"..
|
||||
"image[9,7;1,1;crafting_creative_trash.png]"..
|
||||
listrings
|
||||
|
||||
if name == "nix" then
|
||||
if filter == nil then
|
||||
filter = ""
|
||||
end
|
||||
formspec = formspec .. "field[5.3,1.3;4,0.75;suche;;"..minetest.formspec_escape(filter).."]"
|
||||
formspec = formspec .. "field_close_on_enter[suche;false]"
|
||||
end
|
||||
if pagenum ~= nil then formspec = formspec .. "p"..tostring(pagenum) end
|
||||
|
||||
-- inventory marker
|
||||
formspec = formspec .. "cin"
|
||||
|
||||
player:set_inventory_formspec(formspec)
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
local page = nil
|
||||
if not minetest.setting_getbool("creative_mode") then
|
||||
return
|
||||
end
|
||||
|
||||
local name = player:get_player_name()
|
||||
|
||||
if fields.blocks then
|
||||
set_inv("\0blocks",player)
|
||||
page = "blocks"
|
||||
elseif fields.deco then
|
||||
set_inv("\0deco",player)
|
||||
page = "deco"
|
||||
elseif fields.redstone then
|
||||
set_inv("\0redstone",player)
|
||||
page = "redstone"
|
||||
elseif fields.rail then
|
||||
set_inv("\0rail",player)
|
||||
page = "rail"
|
||||
elseif fields.misc then
|
||||
set_inv("\0misc",player)
|
||||
page = "misc"
|
||||
elseif fields.nix then
|
||||
set_inv("\0all",player)
|
||||
page = "nix"
|
||||
elseif fields.food then
|
||||
set_inv("\0food",player)
|
||||
page = "food"
|
||||
elseif fields.tools then
|
||||
set_inv("\0tools",player)
|
||||
page = "tools"
|
||||
elseif fields.combat then
|
||||
set_inv("\0combat",player)
|
||||
page = "combat"
|
||||
elseif fields.brew then
|
||||
set_inv("\0brew",player)
|
||||
page = "brew"
|
||||
elseif fields.matr then
|
||||
set_inv("\0matr",player)
|
||||
page = "matr"
|
||||
elseif fields.inv then
|
||||
page = "inv"
|
||||
elseif fields.suche == "" and not fields.creative_next and not fields.creative_prev then
|
||||
set_inv("\0all", player)
|
||||
page = "nix"
|
||||
elseif fields.suche ~= nil and not fields.creative_next and not fields.creative_prev then
|
||||
set_inv(string.lower(fields.suche),player)
|
||||
page = "nix"
|
||||
end
|
||||
|
||||
if page then
|
||||
players[name].page = page
|
||||
end
|
||||
if players[name].page then
|
||||
page = players[name].page
|
||||
end
|
||||
|
||||
-- Figure out current page from formspec
|
||||
local formspec = player:get_inventory_formspec()
|
||||
|
||||
local size = string.len(formspec)
|
||||
local start_i = players[name].start_i
|
||||
if fields.creative_prev then
|
||||
start_i = start_i - 9*5
|
||||
end
|
||||
if fields.creative_next then
|
||||
start_i = start_i + 9*5
|
||||
end
|
||||
if start_i < 0 then
|
||||
start_i = start_i + 9*5
|
||||
end
|
||||
if start_i >= mcl_inventory.creative_inventory_size then
|
||||
start_i = start_i - 9*5
|
||||
end
|
||||
if start_i < 0 or start_i >= mcl_inventory.creative_inventory_size then
|
||||
start_i = 0
|
||||
end
|
||||
players[name].start_i = start_i
|
||||
|
||||
local filter
|
||||
if fields.suche ~= nil and fields.suche ~= "" then
|
||||
filter = fields.suche
|
||||
players[name].filter = filter
|
||||
end
|
||||
|
||||
mcl_inventory.set_creative_formspec(player, start_i, start_i / (9*5) + 1, false, page, filter)
|
||||
end)
|
||||
|
||||
|
||||
if minetest.setting_getbool("creative_mode") then
|
||||
minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
|
||||
-- Place infinite nodes, except for shulker boxes
|
||||
local group = minetest.get_item_group(itemstack:get_name(), "shulker_box")
|
||||
return group == 0 or group == nil
|
||||
end)
|
||||
|
||||
function minetest.handle_node_drops(pos, drops, digger)
|
||||
if not digger or not digger:is_player() then
|
||||
return
|
||||
end
|
||||
local inv = digger:get_inventory()
|
||||
if inv then
|
||||
for _,item in ipairs(drops) do
|
||||
item = ItemStack(item):get_name()
|
||||
if not inv:contains_item("main", item) then
|
||||
inv:add_item("main", item)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
if not players[name] then
|
||||
players[name] = {}
|
||||
players[name].page = "nix"
|
||||
players[name].filter = ""
|
||||
players[name].start_i = 0
|
||||
end
|
||||
init(player)
|
||||
end)
|
3
mods/HUD/mcl_inventory/depends.txt
Normal file
|
@ -0,0 +1,3 @@
|
|||
mcl_init
|
||||
mcl_core
|
||||
mcl_sounds
|
1
mods/HUD/mcl_inventory/description.txt
Normal file
|
@ -0,0 +1 @@
|
|||
Adds the player inventory, creative inventory and crafting table.
|
211
mods/HUD/mcl_inventory/init.lua
Normal file
|
@ -0,0 +1,211 @@
|
|||
mcl_inventory = {}
|
||||
|
||||
local show_armor = false
|
||||
if minetest.get_modpath("3d_armor") ~= nil then show_armor = true end
|
||||
|
||||
local function item_drop(itemstack, dropper, pos)
|
||||
if dropper:is_player() then
|
||||
local v = dropper:get_look_dir()
|
||||
local p = {x=pos.x, y=pos.y+1.2, z=pos.z}
|
||||
p.x = p.x+(math.random(1,3)*0.2)
|
||||
p.z = p.z+(math.random(1,3)*0.2)
|
||||
local obj = minetest.add_item(p, itemstack)
|
||||
if obj then
|
||||
v.x = v.x*4
|
||||
v.y = v.y*4 + 2
|
||||
v.z = v.z*4
|
||||
obj:setvelocity(v)
|
||||
end
|
||||
else
|
||||
minetest.add_item(pos, itemstack)
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local function drop_fields(player, name)
|
||||
local inv = player:get_inventory()
|
||||
for i,stack in ipairs(inv:get_list(name)) do
|
||||
item_drop(stack, player, player:getpos())
|
||||
stack:clear()
|
||||
inv:set_stack(name, i, stack)
|
||||
end
|
||||
end
|
||||
|
||||
local player_armor = {}
|
||||
|
||||
local function update_armor(player)
|
||||
return
|
||||
end
|
||||
|
||||
local function set_inventory(player)
|
||||
if minetest.setting_getbool("creative_mode") then
|
||||
mcl_inventory.set_creative_formspec(player, 0, 1)
|
||||
return
|
||||
end
|
||||
local inv = player:get_inventory()
|
||||
inv:set_width("craft", 2)
|
||||
inv:set_size("craft", 4)
|
||||
|
||||
local player_name = player:get_player_name()
|
||||
-- TODO: Use player.png to allow for custom skins
|
||||
local img = "crafting_player2d.png"
|
||||
local armor_img = ""
|
||||
if show_armor then
|
||||
armor_img = ""
|
||||
if player_armor[player_name] ~= nil then
|
||||
img = img .. player_armor[player_name]
|
||||
end
|
||||
end
|
||||
local img_element = "image[0.6,0.2;3,4;"..img.."]"
|
||||
if show_armor and armor.textures[player_name] and armor.textures[player_name].preview then
|
||||
img = armor.textures[player_name].preview
|
||||
local s1 = img:find("character_preview")
|
||||
if s1 ~= nil then
|
||||
s1 = img:sub(s1+21)
|
||||
img = "crafting_player2d.png"..s1
|
||||
end
|
||||
img_element = "image[1.1,0.2;2,4;"..img.."]"
|
||||
end
|
||||
|
||||
local armor_slots = {"head", "torso", "legs", "feet"}
|
||||
local armor_slot_imgs = ""
|
||||
for a=1,4 do
|
||||
if inv:get_stack("armor", a+1):is_empty() then
|
||||
armor_slot_imgs = armor_slot_imgs .. "image[0,"..(a-1)..";1,1;crafting_slot_"..armor_slots[a]..".png]"
|
||||
end
|
||||
end
|
||||
|
||||
local form = "size[9,8.75]"..
|
||||
"background[-0.19,-0.25;9.41,9.49;crafting_formspec_bg.png^crafting_inventory.png"..armor_img.."]"..
|
||||
mcl_vars.inventory_header..
|
||||
img_element..
|
||||
--armor
|
||||
"list[detached:"..player_name.."_armor;armor;0,0;1,1;1]"..
|
||||
"list[detached:"..player_name.."_armor;armor;0,1;1,1;2]"..
|
||||
"list[detached:"..player_name.."_armor;armor;0,2;1,1;3]"..
|
||||
"list[detached:"..player_name.."_armor;armor;0,3;1,1;4]"..
|
||||
armor_slot_imgs..
|
||||
-- craft and inventory
|
||||
"list[current_player;main;0,4.5;9,3;9]"..
|
||||
"list[current_player;main;0,7.74;9,1;]"..
|
||||
"list[current_player;craft;4,1;2,2]"..
|
||||
"list[current_player;craftpreview;7,1.5;1,1;]"..
|
||||
-- crafting guide button
|
||||
"image_button[8,0;1,1;craftguide_book.png;__mcl_craftguide;]"..
|
||||
"tooltip[__mcl_craftguide;Show crafting recipes]"..
|
||||
-- achievements button
|
||||
"image_button[8,1;1,1;mcl_achievements_button.png;__mcl_achievements;]"..
|
||||
"tooltip[__mcl_achievements;Achievements]"..
|
||||
-- for shortcuts
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_player;craft]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[detached:"..player_name.."_armor;armor]"..
|
||||
-- inventory marker
|
||||
"inv"
|
||||
|
||||
player:set_inventory_formspec(form)
|
||||
end
|
||||
|
||||
local function set_workbench(player)
|
||||
player:get_inventory():set_width("craft", 3)
|
||||
player:get_inventory():set_size("craft", 9)
|
||||
|
||||
local form = "size[9,8.75]"..
|
||||
"background[-0.19,-0.25;9.41,9.49;crafting_formspec_bg.png^crafting_inventory_workbench.png]"..
|
||||
mcl_vars.inventory_header..
|
||||
"list[current_player;main;0,4.5;9,3;9]"..
|
||||
"list[current_player;main;0,7.74;9,1;]"..
|
||||
"list[current_player;craft;1.75,0.5;3,3;]"..
|
||||
"list[current_player;craftpreview;6.1,1.5;1,1;]"..
|
||||
"image_button[8,0;1,1;craftguide_book.png;__mcl_craftguide;]"..
|
||||
"tooltip[__mcl_craftguide;Show crafting recipes]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_player;craft]"..
|
||||
-- inventory marker
|
||||
"wob"
|
||||
|
||||
--player:set_inventory_formspec(form)
|
||||
minetest.show_formspec(player:get_player_name(), "main", form)
|
||||
end
|
||||
|
||||
--drop craf items and reset inventory on closing
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if fields.quit then
|
||||
local formspec = player:get_inventory_formspec()
|
||||
local size = string.len(formspec)
|
||||
local marker = string.sub(formspec,size-2)
|
||||
if marker == "inv" or marker == "wob" or marker == "cin" then
|
||||
drop_fields(player,"craft")
|
||||
set_inventory(player)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Drop crafting grid items on leaving
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
drop_fields(player, "craft")
|
||||
end)
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
--init inventory
|
||||
set_inventory(player)
|
||||
player:get_inventory():set_width("main", 9)
|
||||
player:get_inventory():set_size("main", 36)
|
||||
|
||||
--set hotbar size
|
||||
player:hud_set_hotbar_itemcount(9)
|
||||
--add hotbar images
|
||||
player:hud_set_hotbar_image("crafting_hotbar.png")
|
||||
player:hud_set_hotbar_selected_image("crafting_hotbar_selected.png")
|
||||
|
||||
if show_armor then
|
||||
local armor_orginal = armor.set_player_armor
|
||||
armor.set_player_armor = function(self, player)
|
||||
armor_orginal(self, player)
|
||||
update_armor(player)
|
||||
set_inventory(player)
|
||||
end
|
||||
end
|
||||
|
||||
--[[ Make sure the crafting grid is empty. Why? Because the player might have
|
||||
items remaining in the crafting grid from the previous join; this is likely
|
||||
when the server has been shutdown and the server didn't clean up the player
|
||||
inventories. ]]
|
||||
drop_fields(player, "craft")
|
||||
end)
|
||||
|
||||
minetest.register_node("mcl_inventory:workbench", {
|
||||
description = "Crafting Table",
|
||||
tiles = {"crafting_workbench_top.png", "default_wood.png", "crafting_workbench_side.png",
|
||||
"crafting_workbench_side.png", "crafting_workbench_front.png", "crafting_workbench_front.png"},
|
||||
paramtype2 = "facedir",
|
||||
paramtype = "light",
|
||||
groups = {handy=1,axey=1, deco_block=1},
|
||||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
set_workbench(clicker)
|
||||
end,
|
||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||
_mcl_blast_resistance = 12.5,
|
||||
_mcl_hardness = 2.5,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "mcl_inventory:workbench",
|
||||
recipe = {
|
||||
{"group:wood", "group:wood"},
|
||||
{"group:wood", "group:wood"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "mcl_inventory:workbench",
|
||||
burntime = 15,
|
||||
})
|
||||
|
||||
minetest.register_alias("crafting:workbench", "mcl_inventory:workbench")
|
||||
|
||||
if minetest.setting_getbool("creative_mode") then
|
||||
dofile(minetest.get_modpath("mcl_inventory").."/creative.lua")
|
||||
end
|
1
mods/HUD/mcl_inventory/mod.conf
Normal file
|
@ -0,0 +1 @@
|
|||
name = mcl_inventory
|
BIN
mods/HUD/mcl_inventory/textures/crafting_creative_active.png
Normal file
After Width: | Height: | Size: 374 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_creative_bg.png
Normal file
After Width: | Height: | Size: 340 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_creative_bg_dark.png
Normal file
After Width: | Height: | Size: 228 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_creative_down.png
Normal file
After Width: | Height: | Size: 870 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_creative_inactive.png
Normal file
After Width: | Height: | Size: 376 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_creative_marker.png
Normal file
After Width: | Height: | Size: 187 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_creative_trash.png
Normal file
After Width: | Height: | Size: 308 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_creative_up.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
mods/HUD/mcl_inventory/textures/crafting_formspec_bg.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
mods/HUD/mcl_inventory/textures/crafting_formspec_bg2.png
Normal file
After Width: | Height: | Size: 8.5 KiB |
BIN
mods/HUD/mcl_inventory/textures/crafting_hotbar.png
Normal file
After Width: | Height: | Size: 483 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_hotbar_selected.png
Normal file
After Width: | Height: | Size: 462 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_inventory.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
mods/HUD/mcl_inventory/textures/crafting_inventory_9_slots.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
mods/HUD/mcl_inventory/textures/crafting_inventory_chest.png
Normal file
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 4.1 KiB |
BIN
mods/HUD/mcl_inventory/textures/crafting_inventory_creative.png
Normal file
After Width: | Height: | Size: 7.9 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.7 KiB |
BIN
mods/HUD/mcl_inventory/textures/crafting_inventory_workbench.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
mods/HUD/mcl_inventory/textures/crafting_player2d.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
mods/HUD/mcl_inventory/textures/crafting_slider.png
Normal file
After Width: | Height: | Size: 134 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_slot_feet.png
Normal file
After Width: | Height: | Size: 431 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_slot_head.png
Normal file
After Width: | Height: | Size: 406 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_slot_legs.png
Normal file
After Width: | Height: | Size: 389 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_slot_torso.png
Normal file
After Width: | Height: | Size: 455 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_workbench_front.png
Normal file
After Width: | Height: | Size: 801 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_workbench_side.png
Normal file
After Width: | Height: | Size: 768 B |
BIN
mods/HUD/mcl_inventory/textures/crafting_workbench_top.png
Normal file
After Width: | Height: | Size: 1,012 B |
BIN
mods/HUD/mcl_inventory/textures/fnt_blocks.png
Normal file
After Width: | Height: | Size: 844 B |
BIN
mods/HUD/mcl_inventory/textures/fnt_brew.png
Normal file
After Width: | Height: | Size: 410 B |
BIN
mods/HUD/mcl_inventory/textures/fnt_chest.png
Normal file
After Width: | Height: | Size: 325 B |
BIN
mods/HUD/mcl_inventory/textures/fnt_combat.png
Normal file
After Width: | Height: | Size: 524 B |
BIN
mods/HUD/mcl_inventory/textures/fnt_deco.png
Normal file
After Width: | Height: | Size: 947 B |
BIN
mods/HUD/mcl_inventory/textures/fnt_ender_chest.png
Normal file
After Width: | Height: | Size: 380 B |
BIN
mods/HUD/mcl_inventory/textures/fnt_food.png
Normal file
After Width: | Height: | Size: 658 B |
BIN
mods/HUD/mcl_inventory/textures/fnt_matr.png
Normal file
After Width: | Height: | Size: 576 B |
BIN
mods/HUD/mcl_inventory/textures/fnt_misc.png
Normal file
After Width: | Height: | Size: 744 B |
BIN
mods/HUD/mcl_inventory/textures/fnt_nix.png
Normal file
After Width: | Height: | Size: 751 B |
BIN
mods/HUD/mcl_inventory/textures/fnt_rail.png
Normal file
After Width: | Height: | Size: 859 B |
BIN
mods/HUD/mcl_inventory/textures/fnt_redstone.png
Normal file
After Width: | Height: | Size: 425 B |
BIN
mods/HUD/mcl_inventory/textures/fnt_shulker_box.png
Normal file
After Width: | Height: | Size: 430 B |
BIN
mods/HUD/mcl_inventory/textures/fnt_tools.png
Normal file
After Width: | Height: | Size: 487 B |