Repository navigation
Lua next pairs
Jacky edited this page Apr 20, 2023
·
1 revision
Using next()/pairs() to iterate through fields is deprecated, as the semantics has been updated to list all children fields since 2.0-beta8. This means that fields like enchantments.size will now appear when using next()/pairs(). To avoid breaking your code, you should migrate to field.children() or enchantments.entries() depending on your use case.
Use enchantments.entries(), which will return an iterator that yields enchantmentID (string) and level (number)
Instead of
for ench, lvl in pairs(trade.result_item.enchantments) do
-- ...
endDo:
for ench, lvl in trade.result_item.enchantments.entries() do
-- ...
endInstead of
ench = next(trade.result_item.enchantments)
lvl = trade.result_item.enchantments[ench]Do:
ench, lvl = trade.result_item.enchantments.entries()()Use field.children(), which will return an iterator that yields fieldName (string)
Instead of
for k, v in pairs(trade.villager.inventory) do
-- use k and v (field?)
endDo:
for k in trade.villager.inventory.children() do
-- ...
local v = trade.villager.inventory[k]
endlocal iterable = field.children
local iterator = iterable()
-- Lua generic for
-- See PIL 7.2
while true do
local _v1, _v2, ... = iterator()
if _v1 == nil do break end
-- user code
end