forked from mtcontrib/x_enchanting
Use node meta for formspec
This commit is contained in:
parent
db8d3e7a29
commit
1dd7beaae0
15
api.lua
15
api.lua
@ -32,14 +32,7 @@ XEnchanting = {
|
|||||||
['default:sword_bronze'] = 22,
|
['default:sword_bronze'] = 22,
|
||||||
['default:sword_steel'] = 14,
|
['default:sword_steel'] = 14,
|
||||||
['default:sword_mese'] = 15,
|
['default:sword_mese'] = 15,
|
||||||
['default:sword_diamond'] = 10,
|
['default:sword_diamond'] = 10
|
||||||
-- hoes
|
|
||||||
['farming:hoe_wood'] = 15,
|
|
||||||
['farming:hoe_stone'] = 5,
|
|
||||||
['farming:hoe_steel'] = 14,
|
|
||||||
['farming:hoe_bronze'] = 22,
|
|
||||||
['farming:hoe_mese'] = 15,
|
|
||||||
['farming:hoe_diamond'] = 10,
|
|
||||||
},
|
},
|
||||||
roman_numbers = {
|
roman_numbers = {
|
||||||
[1] = 'I',
|
[1] = 'I',
|
||||||
@ -343,14 +336,14 @@ function XEnchanting.get_enchanted_tool_capabilities(self, tool_def, enchantment
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
function XEnchanting.set_enchanted_tool(self, itemstack, level, player_name)
|
function XEnchanting.set_enchanted_tool(self, pos, itemstack, level, player_name)
|
||||||
local data = self.form_context[player_name].data
|
local data = self.form_context[player_name].data
|
||||||
local pos = self.form_context[player_name].pos
|
|
||||||
local capabilities = data.slots[level].tool_cap_data.tool_capabilities
|
local capabilities = data.slots[level].tool_cap_data.tool_capabilities
|
||||||
local description = data.slots[level].tool_cap_data.enchantments_desc
|
local description = data.slots[level].tool_cap_data.enchantments_desc
|
||||||
local final_enchantments = data.slots[level].final_enchantments
|
local final_enchantments = data.slots[level].final_enchantments
|
||||||
local inv = minetest.get_meta(pos):get_inventory()
|
local inv = minetest.get_meta(pos):get_inventory()
|
||||||
local tool_def = minetest.registered_tools[itemstack:get_name()]
|
local tool_def = minetest.registered_tools[itemstack:get_name()]
|
||||||
|
local node_meta = minetest.get_meta(pos)
|
||||||
|
|
||||||
if not tool_def then
|
if not tool_def then
|
||||||
return
|
return
|
||||||
@ -374,7 +367,7 @@ function XEnchanting.set_enchanted_tool(self, itemstack, level, player_name)
|
|||||||
self.randomseed = tonumber(tostring(os.time()):reverse():sub(1, 9)) --[[@as number]]
|
self.randomseed = tonumber(tostring(os.time()):reverse():sub(1, 9)) --[[@as number]]
|
||||||
|
|
||||||
local formspec = self:get_formspec(pos, player_name)
|
local formspec = self:get_formspec(pos, player_name)
|
||||||
minetest.show_formspec(player_name, 'x_enchanting:table', formspec)
|
node_meta:set_string('formspec', formspec)
|
||||||
|
|
||||||
minetest.sound_play('x_enchanting_enchant', {
|
minetest.sound_play('x_enchanting_enchant', {
|
||||||
gain = 0.3,
|
gain = 0.3,
|
||||||
|
58
table.lua
58
table.lua
@ -70,6 +70,9 @@ minetest.register_node('x_enchanting:table', {
|
|||||||
|
|
||||||
meta:set_string('owner', player_name)
|
meta:set_string('owner', player_name)
|
||||||
meta:set_string('infotext', S('Enchanting Table') .. ' (' .. S('owned by') .. ' ' .. player_name .. ')')
|
meta:set_string('infotext', S('Enchanting Table') .. ' (' .. S('owned by') .. ' ' .. player_name .. ')')
|
||||||
|
|
||||||
|
local formspec = XEnchanting:get_formspec(pos, player_name)
|
||||||
|
meta:set_string('formspec', formspec)
|
||||||
end,
|
end,
|
||||||
---@param pos Vector
|
---@param pos Vector
|
||||||
---@param node NodeDef
|
---@param node NodeDef
|
||||||
@ -77,6 +80,7 @@ minetest.register_node('x_enchanting:table', {
|
|||||||
---@param itemstack ItemStack
|
---@param itemstack ItemStack
|
||||||
---@param pointed_thing? PointedThingDef
|
---@param pointed_thing? PointedThingDef
|
||||||
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
local p_name = clicker:get_player_name()
|
local p_name = clicker:get_player_name()
|
||||||
|
|
||||||
if minetest.is_protected(pos, p_name) then
|
if minetest.is_protected(pos, p_name) then
|
||||||
@ -103,11 +107,11 @@ minetest.register_node('x_enchanting:table', {
|
|||||||
local data = XEnchanting:get_enchantment_data(#bookshelfs, minetest.registered_tools[item_stack:get_name()])
|
local data = XEnchanting:get_enchantment_data(#bookshelfs, minetest.registered_tools[item_stack:get_name()])
|
||||||
local formspec = XEnchanting:get_formspec(pos, p_name, data)
|
local formspec = XEnchanting:get_formspec(pos, p_name, data)
|
||||||
|
|
||||||
minetest.show_formspec(p_name, 'x_enchanting:table', formspec)
|
meta:set_string('formspec', formspec)
|
||||||
else
|
else
|
||||||
local formspec = XEnchanting:get_formspec(pos, p_name)
|
local formspec = XEnchanting:get_formspec(pos, p_name)
|
||||||
|
|
||||||
minetest.show_formspec(p_name, 'x_enchanting:table', formspec)
|
meta:set_string('formspec', formspec)
|
||||||
end
|
end
|
||||||
|
|
||||||
return itemstack
|
return itemstack
|
||||||
@ -326,8 +330,9 @@ minetest.register_node('x_enchanting:table', {
|
|||||||
---@param stack ItemStack
|
---@param stack ItemStack
|
||||||
---@param player ObjectRef
|
---@param player ObjectRef
|
||||||
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
local p_name = player:get_player_name()
|
local p_name = player:get_player_name()
|
||||||
local inv = minetest.get_meta(pos):get_inventory()
|
local inv = meta:get_inventory()
|
||||||
|
|
||||||
if not inv:is_empty('item') then
|
if not inv:is_empty('item') then
|
||||||
-- bookshelfs
|
-- bookshelfs
|
||||||
@ -341,11 +346,11 @@ minetest.register_node('x_enchanting:table', {
|
|||||||
local data = XEnchanting:get_enchantment_data(#bookshelfs, minetest.registered_tools[item_stack:get_name()])
|
local data = XEnchanting:get_enchantment_data(#bookshelfs, minetest.registered_tools[item_stack:get_name()])
|
||||||
local formspec = XEnchanting:get_formspec(pos, p_name, data)
|
local formspec = XEnchanting:get_formspec(pos, p_name, data)
|
||||||
|
|
||||||
minetest.show_formspec(p_name, 'x_enchanting:table', formspec)
|
meta:set_string('formspec', formspec)
|
||||||
else
|
else
|
||||||
local formspec = XEnchanting:get_formspec(pos, p_name)
|
local formspec = XEnchanting:get_formspec(pos, p_name)
|
||||||
|
|
||||||
minetest.show_formspec(p_name, 'x_enchanting:table', formspec)
|
meta:set_string('formspec', formspec)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
---@param pos Vector
|
---@param pos Vector
|
||||||
@ -354,8 +359,9 @@ minetest.register_node('x_enchanting:table', {
|
|||||||
---@param stack ItemStack
|
---@param stack ItemStack
|
||||||
---@param player ObjectRef
|
---@param player ObjectRef
|
||||||
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
local p_name = player:get_player_name()
|
local p_name = player:get_player_name()
|
||||||
local inv = minetest.get_meta(pos):get_inventory()
|
local inv = meta:get_inventory()
|
||||||
|
|
||||||
if not inv:is_empty('item') then
|
if not inv:is_empty('item') then
|
||||||
-- bookshelfs
|
-- bookshelfs
|
||||||
@ -369,23 +375,22 @@ minetest.register_node('x_enchanting:table', {
|
|||||||
local data = XEnchanting:get_enchantment_data(#bookshelfs, minetest.registered_tools[item_stack:get_name()])
|
local data = XEnchanting:get_enchantment_data(#bookshelfs, minetest.registered_tools[item_stack:get_name()])
|
||||||
local formspec = XEnchanting:get_formspec(pos, p_name, data)
|
local formspec = XEnchanting:get_formspec(pos, p_name, data)
|
||||||
|
|
||||||
minetest.show_formspec(p_name, 'x_enchanting:table', formspec)
|
meta:set_string('formspec', formspec)
|
||||||
else
|
else
|
||||||
local formspec = XEnchanting:get_formspec(pos, p_name)
|
local formspec = XEnchanting:get_formspec(pos, p_name)
|
||||||
|
|
||||||
minetest.show_formspec(p_name, 'x_enchanting:table', formspec)
|
meta:set_string('formspec', formspec)
|
||||||
end
|
end
|
||||||
end
|
end,
|
||||||
})
|
-- form receive fields
|
||||||
|
---@param pos Vector
|
||||||
|
---@param formname string
|
||||||
|
---@param fields table
|
||||||
|
---@param sender ObjectRef
|
||||||
|
on_receive_fields = function(pos, formname, fields, sender)
|
||||||
|
local p_name = sender:get_player_name()
|
||||||
|
|
||||||
-- form receive fields
|
if fields.quit then
|
||||||
---@param player ObjectRef
|
|
||||||
---@param formname string
|
|
||||||
---@param fields table
|
|
||||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|
||||||
local p_name = player:get_player_name()
|
|
||||||
|
|
||||||
if formname ~= 'x_enchanting:table' or fields.quit then
|
|
||||||
XEnchanting.form_context[p_name] = nil
|
XEnchanting.form_context[p_name] = nil
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@ -404,7 +409,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local pos = XEnchanting.form_context[p_name].pos
|
|
||||||
local inv = minetest.get_meta(pos):get_inventory()
|
local inv = minetest.get_meta(pos):get_inventory()
|
||||||
|
|
||||||
if inv:is_empty('trade') or inv:is_empty('item') then
|
if inv:is_empty('trade') or inv:is_empty('item') then
|
||||||
@ -427,11 +431,13 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||||||
|
|
||||||
-- Enchant item
|
-- Enchant item
|
||||||
XEnchanting:set_enchanted_tool(
|
XEnchanting:set_enchanted_tool(
|
||||||
|
pos,
|
||||||
item_stack,
|
item_stack,
|
||||||
selected_slot,
|
selected_slot,
|
||||||
p_name
|
p_name
|
||||||
)
|
)
|
||||||
end)
|
end
|
||||||
|
})
|
||||||
|
|
||||||
----
|
----
|
||||||
--- Entity (Scroll)
|
--- Entity (Scroll)
|
||||||
@ -530,9 +536,21 @@ minetest.register_entity('x_enchanting:table_scroll', {
|
|||||||
if self._player and self._scroll_closed then
|
if self._player and self._scroll_closed then
|
||||||
self._scroll_closed = false
|
self._scroll_closed = false
|
||||||
self.object:set_animation(unpack(XEnchanting.scroll_animations.scroll_open))
|
self.object:set_animation(unpack(XEnchanting.scroll_animations.scroll_open))
|
||||||
|
|
||||||
|
minetest.sound_play('x_enchanting_scroll', {
|
||||||
|
gain = 0.3,
|
||||||
|
pos = pos,
|
||||||
|
max_hear_distance = 10
|
||||||
|
}, true)
|
||||||
elseif not self._player and not self._scroll_closed then
|
elseif not self._player and not self._scroll_closed then
|
||||||
self._scroll_closed = true
|
self._scroll_closed = true
|
||||||
self.object:set_animation(unpack(XEnchanting.scroll_animations.scroll_close))
|
self.object:set_animation(unpack(XEnchanting.scroll_animations.scroll_close))
|
||||||
|
|
||||||
|
minetest.sound_play('x_enchanting_scroll', {
|
||||||
|
gain = 0.3,
|
||||||
|
pos = pos,
|
||||||
|
max_hear_distance = 10
|
||||||
|
}, true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
---@field has_tool_group fun(self: XEnchanting, name: string): string | boolean Check if tool has one of the known tool groups, returns `false` otherwise.
|
---@field has_tool_group fun(self: XEnchanting, name: string): string | boolean Check if tool has one of the known tool groups, returns `false` otherwise.
|
||||||
---@field set_tool_enchantability fun(self: XEnchanting, tool_def: ItemDef): nil Sets `enchantibility` group and values from base table (`XEnchanting.tools_enchantability`) to all registered tools (atching known group names). If tool has already `enchantibility` group defined it will take the defined value insted.
|
---@field set_tool_enchantability fun(self: XEnchanting, tool_def: ItemDef): nil Sets `enchantibility` group and values from base table (`XEnchanting.tools_enchantability`) to all registered tools (atching known group names). If tool has already `enchantibility` group defined it will take the defined value insted.
|
||||||
---@field get_enchanted_tool_capabilities fun(self: XEnchanting, tool_def: ItemDef, enchantments: Enchantments[]): GetEnchantedToolCapabilitiesReturn Applies enchantments to item tool capabilities.
|
---@field get_enchanted_tool_capabilities fun(self: XEnchanting, tool_def: ItemDef, enchantments: Enchantments[]): GetEnchantedToolCapabilitiesReturn Applies enchantments to item tool capabilities.
|
||||||
---@field set_enchanted_tool fun(self: XEnchanting, itemstack: ItemStack, level: number, player_name: string): nil Set choosen enchantment and its modified tool capabilities to itemstack and `item` inventory. This will also get new `randomseed`.
|
---@field set_enchanted_tool fun(self: XEnchanting, pos: Vector, itemstack: ItemStack, level: number, player_name: string): nil Set choosen enchantment and its modified tool capabilities to itemstack and `item` inventory. This will also get new `randomseed`.
|
||||||
---@field get_enchantment_data fun(self: XEnchanting, nr_of_bookshelfs: number, tool_def: ItemDef): EnchantmentData Algoritm to get aplicable random enchantments.
|
---@field get_enchantment_data fun(self: XEnchanting, nr_of_bookshelfs: number, tool_def: ItemDef): EnchantmentData Algoritm to get aplicable random enchantments.
|
||||||
---@field get_formspec fun(self: XEnchanting, pos: Vector, player_name: string, data?: EnchantmentData): string Builds and returns `formspec` string
|
---@field get_formspec fun(self: XEnchanting, pos: Vector, player_name: string, data?: EnchantmentData): string Builds and returns `formspec` string
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user