From 4d37e309e7c53b3396a917149c2099f9e5a5ad8d Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Thu, 5 Nov 2020 16:05:42 +0100 Subject: [PATCH] FrostWalker --- mods/CORE/mcl_enchanting/enchantments.lua | 19 ++++++++++++++++++- mods/CORE/mcl_enchanting/init.lua | 1 - mods/CORE/mcl_enchanting/mod.conf | 2 +- mods/CORE/walkover/init.lua | 11 +++++++++++ 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/mods/CORE/mcl_enchanting/enchantments.lua b/mods/CORE/mcl_enchanting/enchantments.lua index f232f11d1..01b1bd9a4 100644 --- a/mods/CORE/mcl_enchanting/enchantments.lua +++ b/mods/CORE/mcl_enchanting/enchantments.lua @@ -189,7 +189,7 @@ mcl_enchanting.enchantments.fortune = { requires_tool = false, } --- unimplemented +-- implemented using walkover.register_global mcl_enchanting.enchantments.frost_walker = { name = "Frost Walker", max_level = 2, @@ -204,6 +204,23 @@ mcl_enchanting.enchantments.frost_walker = { requires_tool = false, } +walkover.register_global(function(pos, _, player) + local boots = player:get_inventory():get_stack("armor", 5) + local frost_walker = mcl_enchanting.get_enchantment(boots, "frost_walker") + if frost_walker <= 0 then + return + end + local radius = frost_walker + 2 + local minp = {x = pos.x - radius, y = pos.y, z = pos.z - radius} + local maxp = {x = pos.x + radius, y = pos.y, z = pos.z + radius} + local positions = minetest.find_nodes_in_area_under_air(minp, maxp, "mcl_core:water_source") + for _, p in ipairs(positions) do + if vector.distance(pos, p) <= radius then + minetest.set_node(p, {name = "mcl_core:frosted_ice_0"}) + end + end +end) + -- implemented in mcl_bows mcl_enchanting.enchantments.infinity = { name = "Infinity", diff --git a/mods/CORE/mcl_enchanting/init.lua b/mods/CORE/mcl_enchanting/init.lua index 2398dc8b4..1d4a9f7c3 100644 --- a/mods/CORE/mcl_enchanting/init.lua +++ b/mods/CORE/mcl_enchanting/init.lua @@ -1,7 +1,6 @@ local modpath = minetest.get_modpath("mcl_enchanting") mcl_enchanting = { - lapis_itemstring = "mcl_dye:blue", book_offset = vector.new(0, 0.75, 0), roman_numerals = dofile(modpath .. "/roman_numerals.lua"), -- https://exercism.io/tracks/lua/exercises/roman-numerals/solutions/73c2fb7521e347209312d115f872fa49 enchantments = {}, diff --git a/mods/CORE/mcl_enchanting/mod.conf b/mods/CORE/mcl_enchanting/mod.conf index 3680b4fa9..fef460ab1 100644 --- a/mods/CORE/mcl_enchanting/mod.conf +++ b/mods/CORE/mcl_enchanting/mod.conf @@ -1,5 +1,5 @@ name = mcl_enchanting description = The rewrite of the Enchanting mod for MineClone2 -depends = mcl_formspec, tt, mcl_books +depends = mcl_formspec, tt, mcl_books, walkover optional_depends = screwdriver author = Fleckenstein diff --git a/mods/CORE/walkover/init.lua b/mods/CORE/walkover/init.lua index 1e2749ff5..6bbd505d2 100644 --- a/mods/CORE/walkover/init.lua +++ b/mods/CORE/walkover/init.lua @@ -1,4 +1,11 @@ -- register extra flavours of a base nodedef +walkover = {} +walkover.registered_globals = {} + +function walkover.register_global(func) + table.insert(walkover.registered_globals, func) +end + local timer = 0 minetest.register_globalstep(function(dtime) timer = timer + dtime; @@ -10,11 +17,15 @@ minetest.register_globalstep(function(dtime) if loc ~= nil then local nodeiamon = minetest.get_node(loc) + if nodeiamon ~= nil then local def = minetest.registered_nodes[nodeiamon.name] if def ~= nil and def.on_walk_over ~= nil then def.on_walk_over(loc, nodeiamon, player) end + for _, func in ipairs(walkover.registered_globals) do + func(loc, nodeiamon, player) + end end end end