forked from Mirrorlandia_minetest/minetest
Make dropped items colorable
This commit is contained in:
parent
4493d47a51
commit
71b02d626f
@ -155,6 +155,24 @@ function core.yaw_to_dir(yaw)
|
|||||||
return {x = -math.sin(yaw), y = 0, z = math.cos(yaw)}
|
return {x = -math.sin(yaw), y = 0, z = math.cos(yaw)}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function core.is_colored_paramtype(ptype)
|
||||||
|
return (ptype == "color") or (ptype == "colorfacedir") or
|
||||||
|
(ptype == "colorwallmounted")
|
||||||
|
end
|
||||||
|
|
||||||
|
function core.strip_param2_color(param2, paramtype2)
|
||||||
|
if not core.is_colored_paramtype(paramtype2) then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
if paramtype2 == "colorfacedir" then
|
||||||
|
param2 = math.floor(param2 / 32) * 32
|
||||||
|
elseif paramtype2 == "colorwallmounted" then
|
||||||
|
param2 = math.floor(param2 / 8) * 8
|
||||||
|
end
|
||||||
|
-- paramtype2 == "color" requires no modification.
|
||||||
|
return param2
|
||||||
|
end
|
||||||
|
|
||||||
function core.get_node_drops(node, toolname)
|
function core.get_node_drops(node, toolname)
|
||||||
-- Compatibility, if node is string
|
-- Compatibility, if node is string
|
||||||
local nodename = node
|
local nodename = node
|
||||||
@ -166,24 +184,17 @@ function core.get_node_drops(node, toolname)
|
|||||||
end
|
end
|
||||||
local def = core.registered_nodes[nodename]
|
local def = core.registered_nodes[nodename]
|
||||||
local drop = def and def.drop
|
local drop = def and def.drop
|
||||||
|
local ptype = def and def.paramtype2
|
||||||
|
-- get color, if there is color (otherwise nil)
|
||||||
|
local palette_index = core.strip_param2_color(param2, ptype)
|
||||||
if drop == nil then
|
if drop == nil then
|
||||||
-- default drop
|
-- default drop
|
||||||
|
if palette_index then
|
||||||
local stack = ItemStack(nodename)
|
local stack = ItemStack(nodename)
|
||||||
if def then
|
stack:get_meta():set_int("palette_index", palette_index)
|
||||||
local type = def.paramtype2
|
|
||||||
if (type == "color") or (type == "colorfacedir") or
|
|
||||||
(type == "colorwallmounted") then
|
|
||||||
local meta = stack:get_meta()
|
|
||||||
local color_part = param2
|
|
||||||
if (type == "colorfacedir") then
|
|
||||||
color_part = math.floor(color_part / 32) * 32;
|
|
||||||
elseif (type == "colorwallmounted") then
|
|
||||||
color_part = math.floor(color_part / 8) * 8;
|
|
||||||
end
|
|
||||||
meta:set_int("palette_index", color_part)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return {stack:to_string()}
|
return {stack:to_string()}
|
||||||
|
end
|
||||||
|
return {nodename}
|
||||||
elseif type(drop) == "string" then
|
elseif type(drop) == "string" then
|
||||||
-- itemstring drop
|
-- itemstring drop
|
||||||
return {drop}
|
return {drop}
|
||||||
@ -218,6 +229,12 @@ function core.get_node_drops(node, toolname)
|
|||||||
if good_rarity and good_tool then
|
if good_rarity and good_tool then
|
||||||
got_count = got_count + 1
|
got_count = got_count + 1
|
||||||
for _, add_item in ipairs(item.items) do
|
for _, add_item in ipairs(item.items) do
|
||||||
|
-- add color, if necessary
|
||||||
|
if item.inherit_color and palette_index then
|
||||||
|
local stack = ItemStack(add_item)
|
||||||
|
stack:get_meta():set_int("palette_index", palette_index)
|
||||||
|
add_item = stack:to_string()
|
||||||
|
end
|
||||||
got_items[#got_items+1] = add_item
|
got_items[#got_items+1] = add_item
|
||||||
end
|
end
|
||||||
if drop.max_items ~= nil and got_count == drop.max_items then
|
if drop.max_items ~= nil and got_count == drop.max_items then
|
||||||
|
@ -536,6 +536,21 @@ automatically transferred between node and item forms by the engine,
|
|||||||
when a player digs or places a colored node.
|
when a player digs or places a colored node.
|
||||||
You can disable this feature by setting the `drop` field of the node
|
You can disable this feature by setting the `drop` field of the node
|
||||||
to itself (without metadata).
|
to itself (without metadata).
|
||||||
|
To transfer the color to a special drop, you need a drop table.
|
||||||
|
Example:
|
||||||
|
|
||||||
|
minetest.register_node("mod:stone", {
|
||||||
|
description = "Stone",
|
||||||
|
tiles = {"default_stone.png"},
|
||||||
|
paramtype2 = "color",
|
||||||
|
palette = "palette.png",
|
||||||
|
drop = {
|
||||||
|
items = {
|
||||||
|
-- assume that mod:cobblestone also has the same palette
|
||||||
|
{items = {"mod:cobblestone"}, inherit_color = true },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
### Colored items in craft recipes
|
### Colored items in craft recipes
|
||||||
Craft recipes only support item strings, but fortunately item strings
|
Craft recipes only support item strings, but fortunately item strings
|
||||||
@ -2688,6 +2703,13 @@ and `minetest.auth_reload` call the authetification handler.
|
|||||||
* Convert a vector into a yaw (angle)
|
* Convert a vector into a yaw (angle)
|
||||||
* `minetest.yaw_to_dir(yaw)`
|
* `minetest.yaw_to_dir(yaw)`
|
||||||
* Convert yaw (angle) to a vector
|
* Convert yaw (angle) to a vector
|
||||||
|
* `minetest.is_colored_paramtype(ptype)`
|
||||||
|
* Returns a boolean. Returns `true` if the given `paramtype2` contains color
|
||||||
|
information (`color`, `colorwallmounted` or `colorfacedir`).
|
||||||
|
* `minetest.strip_param2_color(param2, paramtype2)`
|
||||||
|
* Removes everything but the color information from the
|
||||||
|
given `param2` value.
|
||||||
|
* Returns `nil` if the given `paramtype2` does not contain color information
|
||||||
* `minetest.get_node_drops(nodename, toolname)`
|
* `minetest.get_node_drops(nodename, toolname)`
|
||||||
* Returns list of item names.
|
* Returns list of item names.
|
||||||
* **Note**: This will be removed or modified in a future version.
|
* **Note**: This will be removed or modified in a future version.
|
||||||
@ -4275,6 +4297,7 @@ Definition tables
|
|||||||
{
|
{
|
||||||
items = {"foo:bar", "baz:frob"}, -- Items to drop.
|
items = {"foo:bar", "baz:frob"}, -- Items to drop.
|
||||||
rarity = 1, -- Probability of dropping is 1 / rarity.
|
rarity = 1, -- Probability of dropping is 1 / rarity.
|
||||||
|
inherit_color = true, -- To inherit palette color from the node
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user