mirror of
				https://github.com/minetest-mods/i3.git
				synced 2025-11-04 10:05:31 +01:00 
			
		
		
		
	Show colored item from meta in crafting guide
This commit is contained in:
		
							
								
								
									
										75
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										75
									
								
								init.lua
									
									
									
									
									
								
							@@ -178,7 +178,7 @@ local fs_elements = {
 | 
			
		||||
local styles = sprintf([[
 | 
			
		||||
	style_type[field;border=false;bgcolor=transparent]
 | 
			
		||||
	style_type[label,field;font_size=16]
 | 
			
		||||
	style_type[image_button;border=false;sound=i3_click]
 | 
			
		||||
	style_type[button,image_button;border=false;sound=i3_click]
 | 
			
		||||
	style_type[item_image_button;border=false;bgimg_hovered=%s;sound=i3_click]
 | 
			
		||||
 | 
			
		||||
	style[cancel;fgimg=%s;fgimg_hovered=%s;content_offset=0]
 | 
			
		||||
@@ -192,9 +192,9 @@ local styles = sprintf([[
 | 
			
		||||
	style[waypoint_add;fgimg=%s;fgimg_hovered=%s;content_offset=0]
 | 
			
		||||
	style[waypoint_delete;fgimg=%s;fgimg_hovered=%s;content_offset=0]
 | 
			
		||||
	style[waypoint_teleport;fgimg=%s;fgimg_hovered=%s;content_offset=0]
 | 
			
		||||
	style[pagenum,no_item,no_rcp;border=false;font=bold;font_size=18;content_offset=0]
 | 
			
		||||
	style[btn_bag,btn_armor,btn_skins;font=bold;font_size=18;border=false;content_offset=0;sound=i3_click]
 | 
			
		||||
	style[craft_rcp,craft_usg;border=false;noclip=true;font_size=16;sound=i3_craft;
 | 
			
		||||
	style[pagenum,no_item,no_rcp;font=bold;font_size=18;content_offset=0]
 | 
			
		||||
	style[btn_bag,btn_armor,btn_skins;font=bold;font_size=18;content_offset=0;sound=i3_click]
 | 
			
		||||
	style[craft_rcp,craft_usg;noclip=true;font_size=16;sound=i3_craft;
 | 
			
		||||
	      bgimg=i3_btn9.png;bgimg_hovered=i3_btn9_hovered.png;
 | 
			
		||||
	      bgimg_pressed=i3_btn9_pressed.png;bgimg_middle=4,6]
 | 
			
		||||
]],
 | 
			
		||||
@@ -1405,15 +1405,23 @@ local function get_output_fs(fs, data, rcp, is_recipe, shapeless, right, btn_siz
 | 
			
		||||
		local name = item:get_name()
 | 
			
		||||
		local count = item:get_count()
 | 
			
		||||
		local bt_s = ITEM_BTN_SIZE * 1.2
 | 
			
		||||
 | 
			
		||||
		fs("image", X, Y - 0.11, bt_s, bt_s, PNG.slot)
 | 
			
		||||
 | 
			
		||||
		local _name = fmt("_%s", name)
 | 
			
		||||
 | 
			
		||||
		fs("item_image_button",
 | 
			
		||||
			X + 0.11, Y, ITEM_BTN_SIZE, ITEM_BTN_SIZE,
 | 
			
		||||
			fmt("%s %u", name, count * (is_recipe and data.scrbar_rcp or data.scrbar_usg or 1)),
 | 
			
		||||
			_name, "")
 | 
			
		||||
		if meta:get_string("color") ~= "" then
 | 
			
		||||
			fs(fmt("style_type[list;size=%f]", ITEM_BTN_SIZE))
 | 
			
		||||
			fs(fmt("list[detached:i3_output_rcp;main;%f,%f;1,1;]", X + 0.11, Y))
 | 
			
		||||
			fs("button",  X + 0.11, Y, ITEM_BTN_SIZE, ITEM_BTN_SIZE, _name, "")
 | 
			
		||||
 | 
			
		||||
			local inv = minetest.get_inventory({type = "detached", name = "i3_output_rcp"})
 | 
			
		||||
			inv:set_stack("main", 1, item)
 | 
			
		||||
		else
 | 
			
		||||
			fs("image", X, Y - 0.11, bt_s, bt_s, PNG.slot)
 | 
			
		||||
 | 
			
		||||
			fs("item_image_button",
 | 
			
		||||
				X + 0.11, Y, ITEM_BTN_SIZE, ITEM_BTN_SIZE,
 | 
			
		||||
				fmt("%s %u", name, count * (is_recipe and data.scrbar_rcp or data.scrbar_usg or 1)),
 | 
			
		||||
				_name, "")
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		local def = reg_items[name]
 | 
			
		||||
		local unknown = not def or nil
 | 
			
		||||
@@ -1462,9 +1470,11 @@ local function get_grid_fs(fs, data, rcp, is_recipe)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	for i = 1, width * rows do
 | 
			
		||||
		local _item = rcp.items[i] or ""
 | 
			
		||||
		local item = clean_name(_item)
 | 
			
		||||
		local name = match(item, "%S*")
 | 
			
		||||
		local item  = rcp.items[i] or ""
 | 
			
		||||
		      item  = ItemStack(item)
 | 
			
		||||
		local meta  = item:get_meta()
 | 
			
		||||
		local name  = item:get_name()
 | 
			
		||||
		local count = item:get_count()
 | 
			
		||||
 | 
			
		||||
		local X = ceil((i - 1) % width - width)
 | 
			
		||||
		X = X + (X * 0.2) + data.xoffset + 3.9
 | 
			
		||||
@@ -1491,7 +1501,7 @@ local function get_grid_fs(fs, data, rcp, is_recipe)
 | 
			
		||||
 | 
			
		||||
		if is_group(name) then
 | 
			
		||||
			groups = extract_groups(name)
 | 
			
		||||
			item = groups_to_items(groups)
 | 
			
		||||
			name = groups_to_items(groups)
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		local label = groups and "\nG" or ""
 | 
			
		||||
@@ -1522,10 +1532,10 @@ local function get_grid_fs(fs, data, rcp, is_recipe)
 | 
			
		||||
			fs("image", X, Y, btn_size, btn_size, PNG.slot)
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		local btn_name = groups and fmt("group|%s|%s", groups[1], item) or item
 | 
			
		||||
		local btn_name = groups and fmt("group|%s|%s", groups[1], name) or name
 | 
			
		||||
 | 
			
		||||
		fs("item_image_button", X, Y, btn_size, btn_size,
 | 
			
		||||
			fmt("%s %u", item, is_recipe and data.scrbar_rcp or data.scrbar_usg or 1),
 | 
			
		||||
			fmt("%s %u", name, count * (is_recipe and data.scrbar_rcp or data.scrbar_usg or 1)),
 | 
			
		||||
			btn_name, label)
 | 
			
		||||
 | 
			
		||||
		local def = reg_items[name]
 | 
			
		||||
@@ -1535,7 +1545,6 @@ local function get_grid_fs(fs, data, rcp, is_recipe)
 | 
			
		||||
		local weird = name ~= "" and desc and weird_desc(desc) or nil
 | 
			
		||||
		local burntime = fuel_cache[name] and fuel_cache[name].burntime
 | 
			
		||||
 | 
			
		||||
		local meta = ItemStack(_item):get_meta()
 | 
			
		||||
		local short_desc = meta:get_string("short_description")
 | 
			
		||||
		local long_desc  = meta:get_string("description")
 | 
			
		||||
		local meta_desc  = (short_desc ~= "" and short_desc) or (long_desc ~= "" and long_desc)
 | 
			
		||||
@@ -1563,6 +1572,13 @@ local function get_grid_fs(fs, data, rcp, is_recipe)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function get_rcp_lbl(fs, data, panel, rn, is_recipe)
 | 
			
		||||
	local rcp = is_recipe and panel.rcp[data.rnum] or panel.rcp[data.unum]
 | 
			
		||||
 | 
			
		||||
	if rcp.custom then
 | 
			
		||||
		fs("hypertext", data.xoffset + 4.8, data.yoffset + 0.2, 3, 0.6, "custom_rcp",
 | 
			
		||||
			fmt("<global size=16><right><i>%s</i></right>", ES"Custom recipe"))
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local lbl = ES("Usage @1 of @2", data.unum, rn)
 | 
			
		||||
 | 
			
		||||
	if is_recipe then
 | 
			
		||||
@@ -1572,7 +1588,7 @@ local function get_rcp_lbl(fs, data, panel, rn, is_recipe)
 | 
			
		||||
	local one = rn == 1
 | 
			
		||||
	local y = data.yoffset + 3.3
 | 
			
		||||
 | 
			
		||||
	fs("hypertext", data.xoffset + (one and 4.7 or 3.95), y, 3, 0.6, "",
 | 
			
		||||
	fs("hypertext", data.xoffset + (one and 4.7 or 3.95), y, 3, 0.6, "rcp_num",
 | 
			
		||||
		fmt("<global size=16><right>%s</right>", lbl))
 | 
			
		||||
 | 
			
		||||
	if not one then
 | 
			
		||||
@@ -1585,7 +1601,6 @@ local function get_rcp_lbl(fs, data, panel, rn, is_recipe)
 | 
			
		||||
		fs("image_button", data.xoffset + 7.5,  y, size, size, "", next_name, "")
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local rcp = is_recipe and panel.rcp[data.rnum] or panel.rcp[data.unum]
 | 
			
		||||
	get_grid_fs(fs, data, rcp, is_recipe)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@@ -1631,7 +1646,7 @@ local function get_model_fs(fs, data, def, model_alias)
 | 
			
		||||
		t[#t + 1] = t[#t]
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	fs("model", data.xoffset + 6.6, data.yoffset + 0.05, 1.3, 1.3, "",
 | 
			
		||||
	fs("model", data.xoffset + 6.6, data.yoffset + 0.05, 1.3, 1.3, "preview",
 | 
			
		||||
		def.mesh, concat(t, ","), "0,0", "true", "true",
 | 
			
		||||
		model_alias and model_alias.frames or "")
 | 
			
		||||
end
 | 
			
		||||
@@ -1724,16 +1739,16 @@ local function get_rcp_extra(player, data, fs, panel, is_recipe, is_usage)
 | 
			
		||||
	local rn = panel.rcp and #panel.rcp
 | 
			
		||||
 | 
			
		||||
	if rn then
 | 
			
		||||
		local rcp_normal = is_recipe and panel.rcp[data.rnum].type == "normal"
 | 
			
		||||
		local usg_normal = is_usage and panel.rcp[data.unum].type == "normal"
 | 
			
		||||
		local rcp_ok = is_recipe and panel.rcp[data.rnum].type == "normal"
 | 
			
		||||
		local usg_ok = is_usage and panel.rcp[data.unum].type == "normal"
 | 
			
		||||
		local max_stacks_rcp, max_stacks_usg = 0, 0
 | 
			
		||||
		local inv = player:get_inventory()
 | 
			
		||||
 | 
			
		||||
		if rcp_normal then
 | 
			
		||||
		if rcp_ok then
 | 
			
		||||
			max_stacks_rcp = get_stack_max(inv, data, is_recipe, panel.rcp[data.rnum])
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		if usg_normal then
 | 
			
		||||
		if usg_ok then
 | 
			
		||||
			max_stacks_usg = get_stack_max(inv, data, is_recipe, panel.rcp[data.unum])
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
@@ -1924,7 +1939,7 @@ local function get_ctn_content(fs, data, player, yoffset, ctn_len, award_list, a
 | 
			
		||||
	fs("box", (data.subcat - 1) * 1.18, yextra + 0.45, 1, 0.045, "#f9826c")
 | 
			
		||||
 | 
			
		||||
	local function not_installed(modname)
 | 
			
		||||
		fs("hypertext", 0, yextra + 0.9, ctn_len, 0.6, "",
 | 
			
		||||
		fs("hypertext", 0, yextra + 0.9, ctn_len, 0.6, "not_installed",
 | 
			
		||||
			fmt("<center><style color=#7bf font=mono>%s</style> not installed</center>", modname))
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
@@ -1932,7 +1947,7 @@ local function get_ctn_content(fs, data, player, yoffset, ctn_len, award_list, a
 | 
			
		||||
		fs(fmt("list[detached:%s_backpack;main;0,%f;1,1;]", ESC(name), yextra + 0.7))
 | 
			
		||||
 | 
			
		||||
		if not data.bag:get_stack("main", 1):is_empty() then
 | 
			
		||||
			fs("hypertext", 1.2, yextra + 0.89, ctn_len - 1.9, 0.8, "",
 | 
			
		||||
			fs("hypertext", 1.2, yextra + 0.89, ctn_len - 1.9, 0.8, "bpk",
 | 
			
		||||
				ES("The inventory is extended by @1 slots", BAG_SIZES[data.bag_size] - INV_SIZE))
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
@@ -2610,6 +2625,12 @@ local trash = create_inventory("i3_trash", {
 | 
			
		||||
 | 
			
		||||
trash:set_size("main", 1)
 | 
			
		||||
 | 
			
		||||
local output_rcp = create_inventory("i3_output_rcp", {})
 | 
			
		||||
output_rcp:set_size("main", 1)
 | 
			
		||||
 | 
			
		||||
local output_usg = create_inventory("i3_output_usg", {})
 | 
			
		||||
output_usg:set_size("main", 1)
 | 
			
		||||
 | 
			
		||||
core.register_on_player_inventory_action(function(player, _, _, info)
 | 
			
		||||
	local name = player:get_player_name()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
local mt = ItemStack("default:wood")
 | 
			
		||||
mt:get_meta():set_string("description", "test wood")
 | 
			
		||||
mt:get_meta():set_string("color", "#000")
 | 
			
		||||
mt:get_meta():set_string("color", "green")
 | 
			
		||||
 | 
			
		||||
local mt2 = ItemStack("dye:red")
 | 
			
		||||
mt2:get_meta():set_string("description", "test red")
 | 
			
		||||
@@ -15,6 +15,11 @@ minetest.register_craft({
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
i3.register_craft({
 | 
			
		||||
	result = "default:ladder_wood 2",
 | 
			
		||||
	items = {"default:copper_ingot 7, default:tin_ingot, default:steel_ingot 2"},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
i3.register_craft({
 | 
			
		||||
	grid = {
 | 
			
		||||
		"X  #",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user