64 lines
2.8 KiB
Lua
64 lines
2.8 KiB
Lua
local function FE(text)
|
|
return core.formspec_escape(text)
|
|
end
|
|
local function get_fs(name, witem,index)
|
|
local start = index - 1 or 0
|
|
local meta = witem:get_meta()
|
|
if not meta then return end
|
|
local toolcaps = witem:get_tool_capabilities()
|
|
if not toolcaps then return end
|
|
local descr = meta:get("description") or witem:get_description()
|
|
local color = meta:get_string("color",'')
|
|
local count_meta = meta:get_string("count_meta")
|
|
local full_punch_interval = dump(toolcaps.full_punch_interval,'')
|
|
local max_drop_level = dump(toolcaps.max_drop_level,'')
|
|
local groupcaps = FE(core.serialize(toolcaps.groupcaps))
|
|
local damage_groups = FE(core.serialize(toolcaps.damage_groups))
|
|
|
|
local fs = "size[10.2,12]" ..
|
|
"list[current_player;main;9,0.1;1,1;"..start.."]" ..
|
|
"field[0.4,0.6;3,1;description;Description;"..descr.."]" ..
|
|
"field_close_on_enter[description;false]" ..
|
|
"field[0.4,1.6;3,1;color;Color;"..color.."]" ..
|
|
"field_close_on_enter[color;false]" ..
|
|
"field[0.4,2.6;3,1;count_meta;Count_meta;"..count_meta.."]" ..
|
|
"field_close_on_enter[count_meta;false]" ..
|
|
"field[3.4,0.6;2.5,1;full_punch_interval;Full punch interval;"..full_punch_interval.."]" ..
|
|
"field_close_on_enter[full_punch_interval;false]" ..
|
|
"field[3.4,1.6;2.5,1;max_drop_level;Max drop level;"..max_drop_level.."]" ..
|
|
"field_close_on_enter[max_drop_level;false]" ..
|
|
"textarea[0.4,3.5;10,4.8;groupcaps;Groupcaps;"..groupcaps.."]" ..
|
|
"textarea[0.4,7.9;10,4.8;damage_groups;Damage groups;"..damage_groups.."]" ..
|
|
"button[3.1,2.3;2.2,1;apply;Apply]"
|
|
core.show_formspec(name,"itemeditor",fs)
|
|
end
|
|
|
|
core.register_privilege("itemedit","Allows to use item editor")
|
|
core.register_chatcommand("itemedit",{
|
|
description = "Modify a wielded item",
|
|
privs = {itemedit=true},
|
|
func = function(name,param)
|
|
local player = core.get_player_by_name(name)
|
|
if not player then return false, "No Player" end
|
|
local witem = player:get_wielded_item()
|
|
local index = player:get_wield_index()
|
|
if not witem then return false, "Error getting wielded item" end
|
|
if witem:get_name() == "" then return false, "Please take item in hand" end
|
|
get_fs(name,witem,index)
|
|
end})
|
|
|
|
core.register_on_player_receive_fields(function(player, formname, fields)
|
|
if formname ~= "itemeditor" then return end
|
|
local name = player:get_player_name()
|
|
if not name then return end
|
|
local witem = player:get_wielded_item()
|
|
local meta = witem:get_meta()
|
|
if fields.apply then
|
|
meta:set_string("description",fields.description)
|
|
meta:set_string("color",fields.color)
|
|
meta:set_string("count_meta",fields.count_meta)
|
|
meta:set_tool_capabilities({full_punch_interval=fields.full_punch_interval,max_drop_level=fields.max_drop_level,groupcaps=core.deserialize(fields.groupcaps),damage_groups=core.deserialize(fields.damage_groups)})
|
|
player:set_wielded_item(witem)
|
|
end
|
|
end)
|