diff --git a/LICENSE.txt b/LICENSE.txt index f166cc5..bce588e 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,8 +1,7 @@ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Copyright (C) 2022 SaKeL Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -55,7 +54,7 @@ modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. - + Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a @@ -111,7 +110,7 @@ modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. - + GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION @@ -158,7 +157,7 @@ Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - + 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 @@ -216,7 +215,7 @@ instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. - + Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. @@ -267,7 +266,7 @@ Library will still fall under Section 6.) distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. - + 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work @@ -329,7 +328,7 @@ restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. - + 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined @@ -370,7 +369,7 @@ subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. - + 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or @@ -422,7 +421,7 @@ conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. - + 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is @@ -454,49 +453,3 @@ RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! \ No newline at end of file diff --git a/api.lua b/api.lua index 2150dab..ae995ab 100644 --- a/api.lua +++ b/api.lua @@ -1,3 +1,21 @@ +--[[ + X Enchanting. Adds Enchanting Mechanics and API. + Copyright (C) 2022 SaKeL + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to juraj.vajda@gmail.com +--]] + local S = minetest.get_translator(minetest.get_current_modname()) ---@type XEnchanting @@ -288,6 +306,7 @@ local function get_table_length(table) return length end +---@diagnostic disable-next-line: unused-local function XEnchanting.has_tool_group(self, name) if minetest.get_item_group(name, 'pickaxe') > 0 then return 'pickaxe' @@ -321,10 +340,12 @@ function XEnchanting.set_tool_enchantability(self, tool_def) }) end +---@diagnostic disable-next-line: unused-local function XEnchanting.get_enchanted_tool_capabilities(self, tool_def, enchantments) local tool_stack = ItemStack({ name = tool_def.name }) local tool_capabilities = tool_stack:get_tool_capabilities() + ---@diagnostic disable-next-line: unused-local for i, enchantment in ipairs(enchantments) do -- Efficiency if enchantment.id == 'efficiency' then @@ -439,6 +460,7 @@ function XEnchanting.get_enchanted_tool_capabilities(self, tool_def, enchantment return tool_capabilities end +---@diagnostic disable-next-line: unused-local function XEnchanting.get_randomseed(self) return tonumber(tostring(os.time()):reverse():sub(1, 9)) --[[@as integer]] end @@ -447,6 +469,7 @@ function XEnchanting.get_enchanted_descriptions(self, enchantments) local enchantments_desc = {} local enchantments_desc_masked = {} + ---@diagnostic disable-next-line: unused-local for i, enchantment in ipairs(enchantments) do local add_roman_numbers = true @@ -503,6 +526,7 @@ function XEnchanting.set_enchanted_tool(self, pos, itemstack, level, player_name ---@type table local final_enchantments_meta = {} + ---@diagnostic disable-next-line: unused-local for i, enchantment in ipairs(final_enchantments) do stack_meta:set_float('is_' .. enchantment.id, enchantment.value) -- store only necessary data, keeping the meta optimized @@ -611,6 +635,7 @@ function XEnchanting.get_enchantment_data(self, player, nr_of_bookshelfs, tool_d if not enchantment_def.groups then group_enchantments[enchantment_name] = enchantment_def else + ---@diagnostic disable-next-line: unused-local for i, group in ipairs(enchantment_def.groups) do if minetest.get_item_group(tool_def.name, group) > 0 then group_enchantments[enchantment_name] = enchantment_def @@ -697,6 +722,7 @@ function XEnchanting.get_enchantment_data(self, player, nr_of_bookshelfs, tool_d local total_weight = 0 -- calculate total weight + ---@diagnostic disable-next-line: unused-local for j, enchantment in ipairs(possible_enchantments) do total_weight = total_weight + self.enchantment_defs[enchantment.id].weight end diff --git a/bitbucket-pipelines.yml b/bitbucket-pipelines.yml index 531a658..186a530 100644 --- a/bitbucket-pipelines.yml +++ b/bitbucket-pipelines.yml @@ -31,36 +31,6 @@ pipelines: script: - nvm use v17.2.0 - npm run lua-diagnostics - branches: - master: - - step: - name: Install Node Dependencies - caches: - - node-modules - - npm - - nvm - script: - - nvm install v17.2.0 - - npm i -g npm@8 - - npm ci - - parallel: - - step: - name: Lua Check - script: - - apt-get update - - apt-get -y install lua5.1 - - apt-get -y install luarocks - - luarocks install luacheck - - luacheck . - - step: - name: Lua Diagnostics - caches: - - node-modules - - npm - - nvm - script: - - nvm use v17.2.0 - - npm run lua-diagnostics tags: "*": - step: diff --git a/init.lua b/init.lua index 6d171bc..cc87492 100644 --- a/init.lua +++ b/init.lua @@ -1,5 +1,20 @@ --- X Enchanting --- by SaKeL +--[[ + X Enchanting. Adds Enchanting Mechanics and API. + Copyright (C) 2022 SaKeL + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to juraj.vajda@gmail.com +--]] local path = minetest.get_modpath('x_enchanting') local mod_start_time = minetest.get_us_time() @@ -156,6 +171,7 @@ minetest.register_on_mods_loaded(function() end end) +---@diagnostic disable-next-line: unused-local minetest.register_on_joinplayer(function(player, last_login) XEnchanting.form_context[player:get_player_name()] = nil @@ -164,6 +180,7 @@ minetest.register_on_joinplayer(function(player, last_login) end end) +---@diagnostic disable-next-line: unused-local minetest.register_on_leaveplayer(function(player, timed_out) XEnchanting.form_context[player:get_player_name()] = nil end) @@ -229,6 +246,7 @@ function minetest.handle_node_drops(pos, drops, digger) return old_handle_node_drops(pos, drops, digger) end +---@diagnostic disable-next-line: unused-local minetest.register_on_player_hpchange(function(player, hp_change, reason) -- Curse of Vanishing if (player:get_hp() + hp_change) <= 0 then diff --git a/scripts/deploy.js b/scripts/deploy.js index db93ac1..d777447 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -1,3 +1,21 @@ +/** + * Deploy code to CDB + * Copyright (C) 2022 SaKeL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to juraj.vajda@gmail.com + */ + import fetch from 'node-fetch' import yargs from 'yargs/yargs' import {hideBin} from 'yargs/helpers' diff --git a/scripts/lls-check.js b/scripts/lls-check.js index 5b3e371..6c19659 100644 --- a/scripts/lls-check.js +++ b/scripts/lls-check.js @@ -1,3 +1,21 @@ +/** + * Run LUA diagnostics in continuous integration + * Copyright (C) 2022 SaKeL + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to juraj.vajda@gmail.com + */ + import * as path from 'node:path' import * as fs from 'node:fs' import {exec} from 'node:child_process' diff --git a/table.lua b/table.lua index 694fe78..0c3630f 100644 --- a/table.lua +++ b/table.lua @@ -1,3 +1,22 @@ +--[[ + X Enchanting. Adds Enchanting Mechanics and API. + Copyright (C) 2022 SaKeL + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to juraj.vajda@gmail.com +--]] + +---@diagnostic disable-next-line screwdriver = minetest.global_exists('screwdriver') and screwdriver --[[@as MtgScrewdriver]] local S = minetest.get_translator(minetest.get_current_modname()) @@ -59,6 +78,7 @@ minetest.register_node('x_enchanting:table', { ---@param placer ObjectRef | nil ---@param itemstack ItemStack ---@param pointed_thing PointedThingDef + ---@diagnostic disable-next-line: unused-local after_place_node = function(pos, placer, itemstack, pointed_thing) local meta = minetest.get_meta(pos) @@ -79,6 +99,7 @@ minetest.register_node('x_enchanting:table', { ---@param clicker ObjectRef ---@param itemstack ItemStack ---@param pointed_thing? PointedThingDef + ---@diagnostic disable-next-line: unused-local on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) local meta = minetest.get_meta(pos) local p_name = clicker:get_player_name() @@ -123,6 +144,7 @@ minetest.register_node('x_enchanting:table', { ---@param pos Vector ---@param intensity? number ---@return table | nil + ---@diagnostic disable-next-line: unused-local on_blast = function(pos, intensity) if minetest.is_protected(pos, '') then return @@ -159,11 +181,13 @@ minetest.register_node('x_enchanting:table', { and inv:is_empty('trade') and not minetest.is_protected(pos, player:get_player_name()) end, + ---@diagnostic disable-next-line: unused-local on_rotate = function(pos, node, user, mode, new_param2) return false end, ---@param pos Vector ---@param elapsed number + ---@diagnostic disable-next-line: unused-local on_timer = function(pos, elapsed) -- entity local table_scroll = minetest.get_objects_inside_radius(pos, 0.9) @@ -234,6 +258,7 @@ minetest.register_node('x_enchanting:table', { end -- symbol particles + ---@diagnostic disable-next-line: unused-local for i = 1, 10, 1 do local pos_random = bookshelfs[math.random(1, #bookshelfs)] local x = pos.x - pos_random.x @@ -275,6 +300,7 @@ minetest.register_node('x_enchanting:table', { ---@param index number ---@param stack ItemStack ---@param player ObjectRef + ---@diagnostic disable-next-line: unused-local allow_metadata_inventory_put = function(pos, listname, index, stack, player) local st_meta = stack:get_meta() local st_name = stack:get_name() @@ -302,6 +328,7 @@ minetest.register_node('x_enchanting:table', { ---@param index number ---@param stack ItemStack ---@param player ObjectRef + ---@diagnostic disable-next-line: unused-local allow_metadata_inventory_take = function(pos, listname, index, stack, player) local st_name = stack:get_name() @@ -325,6 +352,7 @@ minetest.register_node('x_enchanting:table', { ---@param to_index number ---@param count number ---@param player ObjectRef + ---@diagnostic disable-next-line: unused-local allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) return 0 end, @@ -333,6 +361,7 @@ minetest.register_node('x_enchanting:table', { ---@param index number ---@param stack ItemStack ---@param player ObjectRef + ---@diagnostic disable-next-line: unused-local on_metadata_inventory_put = function(pos, listname, index, stack, player) local meta = minetest.get_meta(pos) local p_name = player:get_player_name() @@ -368,6 +397,7 @@ minetest.register_node('x_enchanting:table', { ---@param index number ---@param stack ItemStack ---@param player ObjectRef + ---@diagnostic disable-next-line: unused-local on_metadata_inventory_take = function(pos, listname, index, stack, player) local meta = minetest.get_meta(pos) local p_name = player:get_player_name() @@ -403,6 +433,7 @@ minetest.register_node('x_enchanting:table', { ---@param formname string ---@param fields table ---@param sender ObjectRef + ---@diagnostic disable-next-line: unused-local on_receive_fields = function(pos, formname, fields, sender) local p_name = sender:get_player_name() @@ -481,12 +512,14 @@ minetest.register_entity('x_enchanting:table_scroll', { }, ---@param self table ---@param killer ObjectRef + ---@diagnostic disable-next-line: unused-local on_death = function(self, killer) self.object:remove() end, ---@param self table ---@param staticdata StringAbstract ---@param dtime_s number + ---@diagnostic disable-next-line: unused-local on_activate = function(self, staticdata, dtime_s) self._scroll_closed = true self._tablechecktimer = 5 @@ -500,6 +533,7 @@ minetest.register_entity('x_enchanting:table_scroll', { ---@param self table ---@param dtime number ---@param moveresult? table + ---@diagnostic disable-next-line: unused-local on_step = function(self, dtime, moveresult) local pos = self.object:get_pos() @@ -528,6 +562,7 @@ minetest.register_entity('x_enchanting:table_scroll', { local found_player = false if #objects > 0 then + ---@diagnostic disable-next-line: unused-local for i, obj in ipairs(objects) do if obj:is_player() and obj:get_pos() then -- player @@ -589,6 +624,7 @@ minetest.register_entity('x_enchanting:table_scroll', { ---@param dir Vector ---@param damage number ---@return boolean | nil + ---@diagnostic disable-next-line: unused-local on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir, damage) return true end diff --git a/types/minetest.type.lua b/types/minetest.type.lua index 567da2a..8cb5ff3 100644 --- a/types/minetest.type.lua +++ b/types/minetest.type.lua @@ -16,6 +16,7 @@ ---@field get_node fun(pos: Vector): NodeDef Returns the node at the given position as table in the format `{name="node_name", param1=0, param2=0}`, returns `{name="ignore", param1=0, param2=0}` for unloaded areas. ---@field registered_nodes table Map of registered node definitions, indexed by name ---@field registered_ores table Map of registered ore definitions, indexed by name +---@field registered_craftitems table Map of registered craft items, indexed by name ---@field after fun(time: number|integer, func: fun(...), ...): JobTable Call the function `func` after `time` seconds, may be fractional. Optional: Variable number of arguments that are passed to `func`. ---@field sound_play fun(spec: SimpleSoundSpec|string, parameters: SoundParamDef, ephemeral?: boolean): any Returns a `handle`. Ephemeral sounds will not return a handle and can't be stopped or faded. It is recommend to use this for short sounds that happen in response to player actions (e.g. door closing). ---@field add_particlespawner fun(particlespawner_definition: ParticlespawnerDef): number|integer Add a `ParticleSpawner`, an object that spawns an amount of particles over `time` seconds. Returns an `id`, and -1 if adding didn't succeed. diff --git a/types/object.type.lua b/types/object.type.lua index 3fea64e..e662c5b 100644 --- a/types/object.type.lua +++ b/types/object.type.lua @@ -45,6 +45,7 @@ ---@field get_rotation fun(self: ObjectRef): Vector returns the rotation, a vector (radians) ---@field get_attach fun(self: ObjectRef): any Returns parent, bone, position, rotation, forced_visible, or nil if it isn't attached. ---@field set_attach fun(self: ObjectRef, parent: ObjectRef, bone?: string, position?: Vector, rotation?: Vector, forced_visible?: boolean): any Returns parent, bone, position, rotation, forced_visible, or nil if it isn't attached. +---@field drops table Custom for mob drops ---`ObjectRef` armor groups ---@class ObjectRefArmorGroups diff --git a/types/xenchanting.type.lua b/types/xenchanting.type.lua index d544062..a5ad609 100644 --- a/types/xenchanting.type.lua +++ b/types/xenchanting.type.lua @@ -50,5 +50,5 @@ ---@class EnchantmentDataSlot ---@field level number ---@field final_enchantments Enchantment[] ----@field tool_cap_data ToolCapabilitiesDef +---@field tool_cap_data ToolCapabilitiesDef | nil ---@field descriptions {["enchantments_desc"]: string, ["enchantments_desc_masked"]: string }