From 73cb6b7a22846e854eb3befe660515678f24cb5f Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 14 Dec 2020 19:08:57 +0100 Subject: [PATCH] Don't save book entity statically to save space --- mods/ITEMS/mcl_enchanting/engine.lua | 28 ----------------- mods/ITEMS/mcl_enchanting/init.lua | 45 ++++++++++++++-------------- 2 files changed, 23 insertions(+), 50 deletions(-) diff --git a/mods/ITEMS/mcl_enchanting/engine.lua b/mods/ITEMS/mcl_enchanting/engine.lua index 3f06d99c5d..ac12857b97 100644 --- a/mods/ITEMS/mcl_enchanting/engine.lua +++ b/mods/ITEMS/mcl_enchanting/engine.lua @@ -574,34 +574,6 @@ function mcl_enchanting.look_at(self, pos2) self.object:set_yaw(yaw + math.pi) end -function mcl_enchanting.check_book(pos) - local has_enchanting_table = minetest.get_node(pos).name == "mcl_enchanting:table" - local obj_pos = vector.add(pos, mcl_enchanting.book_offset) - if not has_enchanting_table then - for _, obj in pairs(minetest.get_objects_inside_radius(obj_pos, 0.2)) do - local luaentity = obj:get_luaentity() - if luaentity and luaentity.name == "mcl_enchanting:book" then - obj:remove() - return - end - end - else - for _, obj in pairs(minetest.get_objects_inside_radius(obj_pos, 0.2)) do - local luaentity = obj:get_luaentity() - if luaentity and luaentity.name == "mcl_enchanting:book" then - return - end - end - local obj = minetest.add_entity(obj_pos, "mcl_enchanting:book") - if obj then - local lua = obj:get_luaentity() - if lua then - lua._table_pos = table.copy(pos) - end - end - end -end - function mcl_enchanting.get_bookshelves(pos) local absolute, relative = {}, {} for i, rp in ipairs(mcl_enchanting.bookshelf_positions) do diff --git a/mods/ITEMS/mcl_enchanting/init.lua b/mods/ITEMS/mcl_enchanting/init.lua index 6049069ad9..08e8f86572 100644 --- a/mods/ITEMS/mcl_enchanting/init.lua +++ b/mods/ITEMS/mcl_enchanting/init.lua @@ -142,6 +142,16 @@ minetest.register_craftitem("mcl_enchanting:book_enchanted", { stack_max = 1, }) +local spawn_book_entity = function(pos) + local obj = minetest.add_entity(vector.add(pos, mcl_enchanting.book_offset), "mcl_enchanting:book") + if obj then + local lua = obj:get_luaentity() + if lua then + lua._table_pos = table.copy(pos) + end + end +end + minetest.register_entity("mcl_enchanting:book", { initial_properties = { visual = "mesh", @@ -151,26 +161,13 @@ minetest.register_entity("mcl_enchanting:book", { pointable = false, physical = false, textures = {"mcl_enchanting_book_entity.png"}, + static_save = false, }, _player_near = false, _table_pos = nil, - get_staticdata = function(self) - local pstr = "" - if self._table_pos then - pstr = minetest.serialize(self._table_pos) - end - return pstr - end, on_activate = function(self, staticdata) - if staticdata ~= "" then - local data = minetest.deserialize(staticdata) - self._table_pos = data - end self.object:set_armor_groups({immortal = 1}) mcl_enchanting.set_book_animation(self, "close") - if self._table_pos then - mcl_enchanting.check_book(self._table_pos) - end end, on_step = function(self, dtime) local old_player_near = self._player_near @@ -226,13 +223,7 @@ minetest.register_node("mcl_enchanting:table", { mcl_enchanting.show_enchanting_formspec(clicker) end, on_construct = function(pos) - local obj = minetest.add_entity(vector.add(pos, mcl_enchanting.book_offset), "mcl_enchanting:book") - if obj then - local lua = obj:get_luaentity() - if lua then - lua._table_pos = table.copy(pos) - end - end + spawn_book_entity(pos) end, after_dig_node = function(pos, oldnode, oldmetadata, digger) local dname = (digger and digger:get_player_name()) or "" @@ -284,7 +275,6 @@ minetest.register_abm({ chance = 1, nodenames = "mcl_enchanting:table", action = function(pos) - mcl_enchanting.check_book(pos) local absolute, relative = mcl_enchanting.get_bookshelves(pos) for i, ap in ipairs(absolute) do if math.random(10) == 1 then @@ -303,6 +293,17 @@ minetest.register_abm({ end }) +minetest.register_lbm({ + label = "(Re-)spawn book entity above enchanting table", + name = "mcl_enchanting:spawn_book_entity", + nodenames = {"mcl_enchanting:table"}, + run_at_every_load = true, + action = function(pos) + spawn_book_entity(pos) + end, +}) + + minetest.register_on_mods_loaded(mcl_enchanting.initialize) minetest.register_on_joinplayer(mcl_enchanting.initialize_player) minetest.register_on_player_receive_fields(mcl_enchanting.handle_formspec_fields)