From 5ae6dfeb342c57edf210effc207e7a9947f091a2 Mon Sep 17 00:00:00 2001 From: flux <25628292+fluxionary@users.noreply.github.com> Date: Mon, 22 Aug 2022 12:31:08 -0700 Subject: [PATCH] add option to re-enable legacy recipe changes --- .github/workflows/build.yml | 16 +--- .pre-commit-config.yaml | 33 +++++++++ README.md | 3 + moreblocks_legacy_recipes/.luacheckrc | 29 ++++++++ moreblocks_legacy_recipes/LICENSE.md | 13 ++++ moreblocks_legacy_recipes/README.md | 18 +++++ moreblocks_legacy_recipes/init.lua | 102 ++++++++++++++++++++++++++ moreblocks_legacy_recipes/mod.conf | 3 + settingtypes.txt | 3 + 9 files changed, 206 insertions(+), 14 deletions(-) create mode 100644 moreblocks_legacy_recipes/.luacheckrc create mode 100644 moreblocks_legacy_recipes/LICENSE.md create mode 100644 moreblocks_legacy_recipes/README.md create mode 100644 moreblocks_legacy_recipes/init.lua create mode 100644 moreblocks_legacy_recipes/mod.conf diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c0ffd5e..41eb622 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,23 +12,11 @@ jobs: - name: Install pre-commit run: pip3 install pre-commit - - name: Run pre-commit - run: pre-commit run --all-files - - name: install luarocks run: sudo apt-get install -qq luarocks - name: install luacheck via luarocks run: luarocks install --local luacheck - - name: luacheck invsaw - run: $HOME/.luarocks/bin/luacheck --config ./invsaw/.luacheckrc -q ./invsaw - - - name: luacheck moreblocks - run: $HOME/.luarocks/bin/luacheck --config ./moreblocks/.luacheckrc -q ./moreblocks - - - name: luacheck stairsplus - run: $HOME/.luarocks/bin/luacheck --config ./stairsplus/.luacheckrc -q ./stairsplus - - - name: luacheck stairsplus_legacy - run: $HOME/.luarocks/bin/luacheck --config ./stairsplus_legacy/.luacheckrc -q ./stairsplus_legacy + - name: Run pre-commit + run: pre-commit run --all-files diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5935809..41dbf63 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -8,3 +8,36 @@ repos: - id: mixed-line-ending args: [ --fix=lf ] + + - repo: local + hooks: + - id: luacheck_invsaw + name: luacheck_invsaw + language: system + entry: luacheck + pass_filenames: false + args: [--config,./invsaw/.luacheckrc,-q,./invsaw] + - id: luacheck_moreblocks + name: luacheck_moreblocks + language: system + entry: luacheck + pass_filenames: false + args: [--config,./moreblocks/.luacheckrc,-q,./moreblocks] + - id: luacheck_moreblocks_legacy_recipes + name: luacheck_moreblocks_legacy_recipes + language: system + entry: luacheck + pass_filenames: false + args: [--config,./moreblocks_legacy_recipes/.luacheckrc,-q,./moreblocks_legacy_recipes] + - id: luacheck_stairsplus + name: luacheck_stairsplus + language: system + entry: luacheck + pass_filenames: false + args: [--config,./stairsplus/.luacheckrc,-q,./stairsplus] + - id: luacheck_stairsplus_legacy + name: luacheck_stairsplus_legacy + language: system + entry: luacheck + pass_filenames: false + args: [--config,./stairsplus_legacy/.luacheckrc,-q,./stairsplus_legacy] diff --git a/README.md b/README.md index e2c2c44..2b81a08 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,9 @@ The 3.0.0 release of moreblocks introduces a "legacy" mode, which is on by defau allow new servers to not commit to creating as many nodes as older versions, while not breaking anything on existing servers. See `settingtypes.txt` for available settings. +By defaulthe 3.0.0 release disables certain recipe overrides that were part of moreblocks 2.*. To re-enable +them, set `moreblocks_legacy_recipes.enabled = true`. + ### Settings See `settingtypes.txt` for available settings. diff --git a/moreblocks_legacy_recipes/.luacheckrc b/moreblocks_legacy_recipes/.luacheckrc new file mode 100644 index 0000000..1d50310 --- /dev/null +++ b/moreblocks_legacy_recipes/.luacheckrc @@ -0,0 +1,29 @@ +std = "lua51+luajit+minetest+moreblocks_legacy_recipes" +unused_args = false +max_line_length = 120 + +stds.minetest = { + read_globals = { + "DIR_DELIM", + "minetest", + "core", + "dump", + "vector", + "nodeupdate", + "VoxelManip", + "VoxelArea", + "PseudoRandom", + "ItemStack", + "default", + "table", + "math", + "string", + } +} + +stds.moreblocks_legacy_recipes = { + globals = { + }, + read_globals = { + }, +} diff --git a/moreblocks_legacy_recipes/LICENSE.md b/moreblocks_legacy_recipes/LICENSE.md new file mode 100644 index 0000000..67f5f7f --- /dev/null +++ b/moreblocks_legacy_recipes/LICENSE.md @@ -0,0 +1,13 @@ +# zlib license + +Copyright © 2011-2020 Hugo Locurcio and contributors + +**This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.** + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. diff --git a/moreblocks_legacy_recipes/README.md b/moreblocks_legacy_recipes/README.md new file mode 100644 index 0000000..a8525c9 --- /dev/null +++ b/moreblocks_legacy_recipes/README.md @@ -0,0 +1,18 @@ + +code to increase the productivity of some recipes which was originally part of +[moreblocks](https://github.com/minetest-mods/moreblocks/) but has since been removed. + +copied directly from +https://github.com/minetest-mods/moreblocks/blob/1a03b041dd49cf52e8d5d84e72206718055b1455/redefinitions.lua + +## License + +Copyright © 2011-2020 Hugo Locurcio and contributors + +- More Blocks code is licensed under the zlib license, see + [`LICENSE.md`](LICENSE.md) for details. +- Unless otherwise specified, More Blocks textures are licensed under + [CC BY-SA 3.0 Unported](https://creativecommons.org/licenses/by-sa/3.0/). + +`moreblocks_copperpatina.png` was created by pithydon, and is licensed under +[CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/). diff --git a/moreblocks_legacy_recipes/init.lua b/moreblocks_legacy_recipes/init.lua new file mode 100644 index 0000000..9b50570 --- /dev/null +++ b/moreblocks_legacy_recipes/init.lua @@ -0,0 +1,102 @@ +-- disabled by default +if not minetest.settings:get_bool("moreblocks_legacy_recipes.enabled", false) then + return +end + +--[[ +More Blocks: redefinitions of default stuff + +Copyright © 2011-2020 Hugo Locurcio and contributors. +Licensed under the zlib license. See LICENSE.md for more information. +--]] + +local modname = minetest.get_current_modname() + +-- Redefine some of the default crafting recipes to be more productive + +-- Auxiliary function: take a recipe as returned by get_all_craft_recipes +-- and turn it into a table that can be used to clear a craft or declare a new one +local reconstruct_internal_craft = function(recipe) + local recp = { + { "", "", "" }, + { "", "", "" }, + { "", "", "" }, + } + local width = recipe.width + for idx, item in pairs(recipe.items) do + local row = math.ceil(idx / width) + local col = idx - (row-1)*width + recp[row][col] = item + end + return recp +end + +-- Change the amount produced by recipe by apply func to the old amount +local change_recipe_amount = function(product, recipe, func) + -- if width == 0, this is a shapeless recipe, for which the + -- internal and Lua API recipe table is the same. + -- Otherwise we need to reconstruct the table for the shaped recipe. + local shapeless = (recipe.width == 0) + local recp = shapeless and recipe.items or reconstruct_internal_craft(recipe) + + local oldamount = tonumber(recipe.output:match(" [0-9]+$") or "1") + + local newamount = func(oldamount) + + -- remove old crafting recipe + local redo = { recipe = recp } + -- preserve shapelessness + if shapeless then + redo.type = "shapeless" + end + minetest.clear_craft(redo) + + -- new output + redo.output = ("%s %d"):format(product, newamount) + minetest.register_craft(redo) + + minetest.log("action", ("[MOD]%s: recipe for %s production: %d => %d"):format( + modname, product, oldamount, newamount + )) +end + +local increase_craft_production = function(product, func) + local recipes = minetest.get_all_craft_recipes(product) + for _, r in pairs(recipes) do + if r.type == "normal" or r.method == "normal" then + change_recipe_amount(product, r, func) + end + end +end + +-- Increase the crafting production according to the rules from the table, which is in the form: +-- { +-- { detector, amount changing function } +-- { detector, amount changing function } +-- } +-- TODO: consider exporting this function to other mods +local increase_craft_production_table = function(map_table) + for product, _ in pairs(minetest.registered_items) do + for _, tab in pairs(map_table) do + local detector = tab[1] + local func = tab[2] + if detector(product) then + increase_craft_production(product, func) + -- only apply one boost + break + end + end + end +end + +increase_craft_production_table({ + { function(n) return n:match('^default:sign_wall') end, function(old) return old + 1 end }, + { function(n) return n == 'default:paper' end, function(old) return old*4 end }, + { function(n) return n:match('^carts:.*rail$') or n:match('^default:.*rail$') end, + function(old) return old + old/2 end }, +}) + +minetest.register_craft({ + type = "toolrepair", + additional_wear = -0.10, -- Tool repair buff (10% bonus instead of 2%). +}) diff --git a/moreblocks_legacy_recipes/mod.conf b/moreblocks_legacy_recipes/mod.conf new file mode 100644 index 0000000..37cdbcd --- /dev/null +++ b/moreblocks_legacy_recipes/mod.conf @@ -0,0 +1,3 @@ +name = moreblocks_legacy_recipes +description = adds back recipe changes that used to be part of moreblocks +optional_depends = carts, default diff --git a/settingtypes.txt b/settingtypes.txt index a8e71ba..bb3d102 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -7,6 +7,9 @@ invsaw.creative_priv (Priv to use the inventory saw w/out a saw item) string cre # The item that a normal player has to have to use the saw in inventory invsaw.saw_item (Saw item) string stairsplus:circular_saw +# whether to increase the yield of certain crafting recipes as in moreblocks 2.* +moreblocks_legacy_recipes.enabled (Enable legacy recipes) bool false + # Add a yellow outline around trap nodes, to make them visibly distinct moreblocks.outline_trap_nodes (Outline trap nodes) bool true