forked from Mineclonia/Mineclonia
Compare commits
8 Commits
issue-temp
...
formspec-u
Author | SHA1 | Date |
---|---|---|
E | 842cc6d1e4 | |
E | 32172676f3 | |
E | 164b65a2ca | |
E | 412c1ac5d6 | |
E | 5d0c9c77cd | |
E | ccc1ce566f | |
E | 519c3814aa | |
E | 5255c0e6d0 |
|
@ -9,3 +9,31 @@ function mcl_formspec.get_itemslot_bg(x, y, w, h)
|
|||
end
|
||||
return out
|
||||
end
|
||||
|
||||
-- From the Minetest Lua API doc, "Migrating to Real Coordinates"
|
||||
local padding, spacing = 3/8, 5/4
|
||||
|
||||
function mcl_formspec.size2r(w, h)
|
||||
return (((w-1)*spacing) + (padding*2) + 1)..","..(((h-1)*spacing) + (padding*2) + 1)
|
||||
end
|
||||
|
||||
local function i2r(i)
|
||||
return (i*spacing)+padding
|
||||
end
|
||||
mcl_formspec.i2r=i2r
|
||||
|
||||
function mcl_formspec.xy2r(x, y)
|
||||
return i2r(x)..","..i2r(y)
|
||||
end
|
||||
|
||||
function mcl_formspec.get_itemslot_bgv2(x, y, w, h)
|
||||
local out = ""
|
||||
x=i2r(x)-padding
|
||||
y=i2r(y)-padding
|
||||
for i = 0, w - 1, 1 do
|
||||
for j = 0, h - 1, 1 do
|
||||
out = out .."image["..x+i2r(i)..","..y+i2r(j)..";1,1;mcl_formspec_itemslot.png]"
|
||||
end
|
||||
end
|
||||
return out
|
||||
end
|
||||
|
|
|
@ -144,6 +144,47 @@ local on_destruct_hanging_banner = function(pos)
|
|||
return on_destruct_banner(pos, true)
|
||||
end
|
||||
|
||||
local function escape(text)
|
||||
return text:gsub("%^", "\\%^"):gsub(":", "\\:") -- :gsub("%(", "\\%("):gsub("%)", "\\%)")
|
||||
end
|
||||
|
||||
local make_banner_overlay = function(base_color, layers)
|
||||
local colorize = mcl_banners.colors[base_color][4]
|
||||
-- Base texture with base color
|
||||
local base = "(mcl_banners_item_base.png^(mcl_banners_item_overlay.png^[colorize:"..colorize..":"..base_color_ratio..")^[resize:32x32)"
|
||||
|
||||
-- Optional pattern layers
|
||||
if layers then
|
||||
local lovl = ""
|
||||
for l=1, #layers do
|
||||
local layerinfo = layers[l]
|
||||
local pattern = "mcl_banners_" .. layerinfo.pattern .. ".png"
|
||||
local color = mcl_banners.colors[layerinfo.color][4]
|
||||
|
||||
-- Generate layer texture
|
||||
local layer = "((("..pattern.."^[mask:mcl_banners_front.png)^[colorize:"..color..":"..layer_ratio..")^[mask:"..pattern..")"
|
||||
|
||||
lovl = (lovl ~= "" and (lovl .. "^") or "") .. layer
|
||||
end
|
||||
|
||||
return "[combine:32x32:0,0=" .. escape(base) .. ":7,3=" .. escape("("..lovl.."^[resize:50x38)")
|
||||
end
|
||||
return base
|
||||
end
|
||||
|
||||
function mcl_banners.get_overlay(istk)
|
||||
local imeta = istk:get_meta()
|
||||
local layers_raw = imeta:get_string("layers")
|
||||
if not layers_raw or layers_raw == "" then
|
||||
return
|
||||
end
|
||||
local basec = imeta:get("fake_base") or istk:get_definition()._base_color
|
||||
if not basec then
|
||||
basec="unicolor_white"
|
||||
end
|
||||
return make_banner_overlay(basec, minetest.deserialize(layers_raw))
|
||||
end
|
||||
|
||||
local make_banner_texture = function(base_color, layers)
|
||||
local colorize
|
||||
if mcl_banners.colors[base_color] then
|
||||
|
@ -389,10 +430,6 @@ for colorid, colortab in pairs(mcl_banners.colors) do
|
|||
|
||||
local layer = "(([combine:20x40:-2,-2="..pattern.."^[resize:16x24^[colorize:"..color..":"..layer_ratio.."))"
|
||||
|
||||
function escape(text)
|
||||
return text:gsub("%^", "\\%^"):gsub(":", "\\:") -- :gsub("%(", "\\%("):gsub("%)", "\\%)")
|
||||
end
|
||||
|
||||
finished_banner = "[combine:32x32:0,0=" .. escape(base) .. ":8,4=" .. escape(layer)
|
||||
end
|
||||
|
||||
|
@ -420,6 +457,7 @@ for colorid, colortab in pairs(mcl_banners.colors) do
|
|||
groups = groups,
|
||||
stack_max = 16,
|
||||
|
||||
_base_color=colorid,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local above = pointed_thing.above
|
||||
local under = pointed_thing.under
|
||||
|
|
|
@ -485,11 +485,12 @@ local banner_pattern_craft = function(itemstack, player, old_craft_grid, craft_i
|
|||
|
||||
local imeta = itemstack:get_meta()
|
||||
imeta:set_string("layers", minetest.serialize(layers))
|
||||
local idef=itemstack:get_definition()
|
||||
|
||||
local mname = ometa:get_string("name")
|
||||
-- Only change description if banner does not have a name
|
||||
if mname == "" then
|
||||
local odesc = itemstack:get_definition().description
|
||||
local odesc = idef.description
|
||||
local description = mcl_banners.make_advanced_banner_description(odesc, layers)
|
||||
imeta:set_string("description", description)
|
||||
else
|
||||
|
@ -500,10 +501,13 @@ local banner_pattern_craft = function(itemstack, player, old_craft_grid, craft_i
|
|||
if craft_predict then
|
||||
local itemid_prefix = "mcl_banners:banner_preview"
|
||||
local coloritemid = dye_to_itemid_mapping[dye]
|
||||
return ItemStack(itemid_prefix .. "_" .. matching_pattern .. "_" .. coloritemid)
|
||||
else
|
||||
return itemstack
|
||||
local is=ItemStack(itemid_prefix .. "_" .. matching_pattern .. "_" .. coloritemid)
|
||||
local im=is:get_meta()
|
||||
im:from_table(imeta:to_table())
|
||||
im:set_string("fake_base", idef._base_color)
|
||||
return is
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
minetest.register_craft_predict(function(itemstack, player, old_craft_grid, craft_inv)
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 5.2 KiB |
|
@ -1,3 +0,0 @@
|
|||
mcl_init
|
||||
mcl_formspec
|
||||
mcl_sounds
|
|
@ -1 +0,0 @@
|
|||
Adds a crafting table.
|
|
@ -1,5 +1,59 @@
|
|||
local S = minetest.get_translator("mcl_crafting_table")
|
||||
local formspec_escape = minetest.formspec_escape
|
||||
local show_formspec = minetest.show_formspec
|
||||
local C = minetest.colorize
|
||||
local text_color = "#313131"
|
||||
local itemslot_bg = mcl_formspec.get_itemslot_bg
|
||||
|
||||
mcl_crafting_table = {
|
||||
last_table={}
|
||||
}
|
||||
function mcl_crafting_table.show_crafting_form(player, overlay)
|
||||
player:get_inventory():set_width("craft", 3)
|
||||
player:get_inventory():set_size("craft", 9)
|
||||
|
||||
show_formspec(player:get_player_name(), "mcl_crafting_table:main",
|
||||
"size[9,8.75]"..
|
||||
"image[4.7,1.5;1.5,1;gui_crafting_arrow.png]"..
|
||||
"label[0,4;"..formspec_escape(C(text_color, S("Inventory"))).."]".. --"#313131"
|
||||
"list[current_player;main;0,4.5;9,3;9]"..
|
||||
itemslot_bg(0,4.5,9,3)..
|
||||
"list[current_player;main;0,7.74;9,1;]"..
|
||||
itemslot_bg(0,7.74,9,1)..
|
||||
"label[1.75,0;"..formspec_escape(C(text_color, S("Crafting"))).."]"..
|
||||
"list[current_player;craft;1.75,0.5;3,3;]"..
|
||||
itemslot_bg(1.75,0.5,3,3)..
|
||||
"list[current_player;craftpreview;6.1,1.5;1,1;]"..
|
||||
itemslot_bg(6.1,1.5,1,1)..
|
||||
"image_button[0.75,1.5;1,1;craftguide_book.png;__mcl_craftguide;]"..
|
||||
"tooltip[__mcl_craftguide;"..formspec_escape(S("Recipe book")).."]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_player;craft]"..
|
||||
(overlay and "image[7.1,1.5;1,1;"..formspec_escape(overlay).."]" or "")
|
||||
-- The overlay can be scooted back over top of the craftpreview once this formspec is
|
||||
-- updated to version 3.
|
||||
)
|
||||
end
|
||||
|
||||
if minetest.get_modpath("mcl_banners") then
|
||||
minetest.register_craft_predict(function(itemstack, player, old_craft_grid, craft_inv)
|
||||
if mcl_crafting_table.last_table[player:get_player_name()] then
|
||||
local ovl=mcl_banners.get_overlay(itemstack)
|
||||
mcl_crafting_table.show_crafting_form(player, ovl)
|
||||
end
|
||||
end)
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= "mcl_crafting_table:main" then
|
||||
return false
|
||||
end
|
||||
if fields["quit"] then
|
||||
mcl_crafting_table.last_table[player:get_player_name()]=nil
|
||||
minetest.close_formspec(player:get_player_name(), formname)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
local show_crafting_form = mcl_crafting_table.show_crafting_form --cache function for better performances
|
||||
minetest.register_node("mcl_crafting_table:crafting_table", {
|
||||
description = S("Crafting Table"),
|
||||
_tt_help = S("3×3 crafting grid"),
|
||||
|
@ -12,27 +66,8 @@ minetest.register_node("mcl_crafting_table:crafting_table", {
|
|||
paramtype2 = "facedir",
|
||||
groups = {handy=1,axey=1, deco_block=1, material_wood=1,flammable=-1},
|
||||
on_rightclick = function(pos, node, player, itemstack)
|
||||
player:get_inventory():set_width("craft", 3)
|
||||
player:get_inventory():set_size("craft", 9)
|
||||
|
||||
local form = "size[9,8.75]"..
|
||||
"image[4.7,1.5;1.5,1;gui_crafting_arrow.png]"..
|
||||
"label[0,4;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
|
||||
"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)..
|
||||
"label[1.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Crafting"))).."]"..
|
||||
"list[current_player;craft;1.75,0.5;3,3;]"..
|
||||
mcl_formspec.get_itemslot_bg(1.75,0.5,3,3)..
|
||||
"list[current_player;craftpreview;6.1,1.5;1,1;]"..
|
||||
mcl_formspec.get_itemslot_bg(6.1,1.5,1,1)..
|
||||
"image_button[0.75,1.5;1,1;craftguide_book.png;__mcl_craftguide;]"..
|
||||
"tooltip[__mcl_craftguide;"..minetest.formspec_escape(S("Recipe book")).."]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_player;craft]"
|
||||
|
||||
minetest.show_formspec(player:get_player_name(), "main", form)
|
||||
mcl_crafting_table.last_table[player:get_player_name()]=node
|
||||
show_crafting_form(player)
|
||||
end,
|
||||
sounds = mcl_sounds.node_sound_wood_defaults(),
|
||||
_mcl_blast_resistance = 2.5,
|
||||
|
|
|
@ -1 +1,4 @@
|
|||
name = mcl_crafting_table
|
||||
description = Adds a crafting table.
|
||||
depends = mcl_init, mcl_formspec, mcl_sounds
|
||||
optional_depends = mcl_banners
|
||||
|
|
Loading…
Reference in New Issue