From 745708505fb2a46625aadfb7d2411ee0382e659c Mon Sep 17 00:00:00 2001 From: Juraj Vajda Date: Thu, 23 Feb 2023 21:56:47 -0500 Subject: [PATCH] Prevent double enchantments and adding incompatible enchantments --- api.lua | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/api.lua b/api.lua index ed65b61..8932f7d 100644 --- a/api.lua +++ b/api.lua @@ -306,6 +306,17 @@ local function get_table_length(table) return length end +---Find element v of t satisfying f(v) +local function tableFind(t, f) + for _, v in ipairs(t) do + if f(v) then + return v + end + end + + return nil +end + ---@diagnostic disable-next-line: unused-local function XEnchanting.has_tool_group(self, name) if minetest.get_item_group(name, 'pickaxe') > 0 then @@ -767,11 +778,17 @@ function XEnchanting.get_enchantment_data(self, player, nr_of_bookshelfs, tool_d table.remove(possible_enchantments, idx) end end - else local probability = (probability_level + 1) / 50 - table.insert(final_enchantments, rand_ench) + local alreadyInTable = tableFind(final_enchantments, function(value) + return value.id == rand_ench.id + end) + + if not alreadyInTable then + table.insert(final_enchantments, rand_ench) + end + table.remove(possible_enchantments, rand_ench_idx) for idx, value in pairs(possible_enchantments) do