From 65219d34a24aa989a4b0518f1f9b704ff8740bd1 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Thu, 28 Jan 2021 20:53:57 +0100 Subject: [PATCH 1/5] Animated shulkerboxes --- mods/ITEMS/mcl_chests/init.lua | 216 ++++++++++++------ .../mcl_chests/models/mcl_chests_shulker.b3d | Bin 0 -> 84495 bytes .../mcl_chests/models/mcl_chests_shulker.obj | 159 +++++++++++++ .../sounds/mcl_chests_shulker_close.0.ogg | Bin 0 -> 20229 bytes .../sounds/mcl_chests_shulker_close.1.ogg | Bin 0 -> 18671 bytes .../sounds/mcl_chests_shulker_close.2.ogg | Bin 0 -> 13252 bytes .../sounds/mcl_chests_shulker_close.3.ogg | Bin 0 -> 15917 bytes .../sounds/mcl_chests_shulker_close.4.ogg | Bin 0 -> 18013 bytes .../sounds/mcl_chests_shulker_open.0.ogg | Bin 0 -> 17732 bytes .../sounds/mcl_chests_shulker_open.1.ogg | Bin 0 -> 15746 bytes .../sounds/mcl_chests_shulker_open.2.ogg | Bin 0 -> 15652 bytes .../sounds/mcl_chests_shulker_open.3.ogg | Bin 0 -> 13255 bytes .../sounds/mcl_chests_shulker_open.4.ogg | Bin 0 -> 20122 bytes 13 files changed, 300 insertions(+), 75 deletions(-) create mode 100644 mods/ITEMS/mcl_chests/models/mcl_chests_shulker.b3d create mode 100644 mods/ITEMS/mcl_chests/models/mcl_chests_shulker.obj create mode 100644 mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.0.ogg create mode 100644 mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.1.ogg create mode 100644 mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.2.ogg create mode 100644 mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.3.ogg create mode 100644 mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.4.ogg create mode 100644 mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.0.ogg create mode 100644 mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.1.ogg create mode 100644 mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.2.ogg create mode 100644 mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.3.ogg create mode 100644 mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.4.ogg diff --git a/mods/ITEMS/mcl_chests/init.lua b/mods/ITEMS/mcl_chests/init.lua index 6c37cff35..0f1e44c10 100644 --- a/mods/ITEMS/mcl_chests/init.lua +++ b/mods/ITEMS/mcl_chests/init.lua @@ -3,12 +3,19 @@ local mod_doc = minetest.get_modpath("doc") -- Chest Entity local animate_chests = (minetest.settings:get_bool("animated_chests") ~= false) -local entity_animation_speed = 25 local entity_animations = { - ["open"] = {x = 0, y = 10}, - ["open_partly"] = {x = 0, y = 7}, - ["close"] = {x = 10, y = 20}, - ["close_partly"] = {x = 13, y = 20}, + shulker = { + speed = 50, + open = {x = 45, y = 95}, + close = {x = 95, y = 145}, + }, + chest = { + speed = 25, + open = {x = 0, y = 10}, + open_partly = {x = 0, y = 7}, + close = {x = 10, y = 20}, + close_partly = {x = 13, y = 20}, + } } minetest.register_entity("mcl_chests:chest", { @@ -21,9 +28,10 @@ minetest.register_entity("mcl_chests:chest", { }, set_animation = function(self, animname) - local anim = entity_animations[animname] + local anim_table = entity_animations[self.animation_type] + local anim = anim_table[animname] if not anim then return end - self.object:set_animation(anim, entity_animation_speed, 0, false) + self.object:set_animation(anim, anim_table.speed, 0, false) end, open = function(self, playername, partly) @@ -54,10 +62,11 @@ minetest.register_entity("mcl_chests:chest", { end end, - initialize = function(self, node_pos, node_name, textures, dir, double, sound_prefix, mesh_prefix) + initialize = function(self, node_pos, node_name, textures, dir, double, sound_prefix, mesh_prefix, animation_type) self.node_pos = node_pos self.node_name = node_name self.sound_prefix = sound_prefix + self.animation_type = animation_type local obj = self.object obj:set_properties({ textures = textures, @@ -117,19 +126,22 @@ local function find_entity(pos) end end -local function create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, dir, entity_pos) +local function get_entity_info(pos, param2, double, dir, entity_pos) dir = dir or minetest.facedir_to_dir(param2) - entity_pos = entity_pos or get_entity_pos(pos, dir, double) + return dir, get_entity_pos(pos, dir, double) +end + +local function create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, animation_type, dir, entity_pos) + dir, entity_pos = get_entity_info(pos, param2, double, dir, entity_pos) local obj = minetest.add_entity(entity_pos, "mcl_chests:chest") local luaentity = obj:get_luaentity() - luaentity:initialize(pos, node_name, textures, dir, double, sound_prefix, mesh_prefix) + luaentity:initialize(pos, node_name, textures, dir, double, sound_prefix, mesh_prefix, animation_type) return luaentity end -local function find_or_create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, dir) - local dir = dir or minetest.facedir_to_dir(param2) - local entity_pos = get_entity_pos(pos, dir, double) - return find_entity(entity_pos) or create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, dir, entity_pos) +local function find_or_create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, animation_type, dir, entity_pos) + dir, entity_pos = get_entity_info(pos, param2, double, dir, entity_pos) + return find_entity(entity_pos) or create_entity(pos, node_name, textures, param2, double, sound_prefix, mesh_prefix, animation_type, dir, entity_pos) end local no_rotate, simple_rotate @@ -139,7 +151,8 @@ if minetest.get_modpath("screwdriver") then if screwdriver.rotate_simple(pos, node, user, mode, new_param2) ~= false then local nodename = node.name local nodedef = minetest.registered_nodes[nodename] - find_or_create_entity(pos, nodename, nodedef._chest_entity_textures, new_param2, false, nodedef._chest_entity_sound, nodedef._chest_entity_mesh):set_yaw(minetest.facedir_to_dir(new_param2)) + local dir = minetest.facedir_to_dir(new_param2) + find_or_create_entity(pos, nodename, nodedef._chest_entity_textures, new_param2, false, nodedef._chest_entity_sound, nodedef._chest_entity_mesh, nodedef._chest_entity_animation_type, dir):set_yaw(dir) else return false end @@ -161,12 +174,13 @@ local function back_is_blocked(pos, dir) return not def or def.groups.opaque == 1 or not def2 or def2.groups.opaque == 1 end -- To be called if a player opened a chest -local player_chest_open = function(player, pos, node_name, textures, param2, double, sound, mesh) +local player_chest_open = function(player, pos, node_name, textures, param2, double, sound, mesh, shulker) local name = player:get_player_name() - open_chests[name] = {pos = pos, node_name = node_name, textures = textures, param2 = param2, double = double, sound = sound, mesh = mesh} + open_chests[name] = {pos = pos, node_name = node_name, textures = textures, param2 = param2, double = double, sound = sound, mesh = mesh, shulker = shulker} if animate_chests then local dir = minetest.facedir_to_dir(param2) - find_or_create_entity(pos, node_name, textures, param2, double, sound, mesh, dir):open(name, back_is_blocked(pos, dir) or double and back_is_blocked(mcl_util.get_double_container_neighbor_pos(pos, param2, node_name:sub(-4)), dir)) + local blocked = not shulker and (back_is_blocked(pos, dir) or double and back_is_blocked(mcl_util.get_double_container_neighbor_pos(pos, param2, node_name:sub(-4)), dir)) + find_or_create_entity(pos, node_name, textures, param2, double, sound, mesh, shulker and "shulker" or "chest", dir):open(name, blocked) end end @@ -198,11 +212,11 @@ local chest_update_after_close = function(pos) if node.name == "mcl_chests:trapped_chest_on_small" then minetest.swap_node(pos, {name="mcl_chests:trapped_chest_small", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_small") + find_or_create_entity(pos, "mcl_chests:trapped_chest_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_small") mesecon.receptor_off(pos, trapped_chest_mesecons_rules) elseif node.name == "mcl_chests:trapped_chest_on_left" then minetest.swap_node(pos, {name="mcl_chests:trapped_chest_left", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_left") + find_or_create_entity(pos, "mcl_chests:trapped_chest_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left") mesecon.receptor_off(pos, trapped_chest_mesecons_rules) local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left") @@ -214,7 +228,7 @@ local chest_update_after_close = function(pos) local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right") minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_left", param2 = node.param2}) - find_or_create_entity(pos_other, "mcl_chests:trapped_chest_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_left") + find_or_create_entity(pos_other, "mcl_chests:trapped_chest_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left") mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules) end end @@ -227,7 +241,7 @@ local player_chest_close = function(player) return end if animate_chests then - find_or_create_entity(open_chest.pos, open_chest.node_name, open_chest.textures, open_chest.param2, open_chest.double, open_chest.sound, open_chest.mesh):close(name) + find_or_create_entity(open_chest.pos, open_chest.node_name, open_chest.textures, open_chest.param2, open_chest.double, open_chest.sound, open_chest.mesh, open_chest.shulker and "shulker" or "chest"):close(name) end chest_update_after_close(open_chest.pos) @@ -374,6 +388,7 @@ minetest.register_node(small_name, { _chest_entity_textures = small_textures, _chest_entity_sound = "default_chest", _chest_entity_mesh = "mcl_chests_chest", + _chest_entity_animation_type = "chest", paramtype = "light", paramtype2 = "facedir", stack_max = 64, @@ -410,15 +425,15 @@ minetest.register_node(small_name, { minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_right",param2=param2}) local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "right") minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_left", param2 = param2 }) - create_entity(p, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true, "default_chest", "mcl_chests_chest") + create_entity(p, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") elseif minetest.get_node(mcl_util.get_double_container_neighbor_pos(pos, param2, "left")).name == "mcl_chests:"..canonical_basename.."_small" then minetest.swap_node(pos, {name="mcl_chests:"..canonical_basename.."_left",param2=param2}) - create_entity(pos, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true, "default_chest", "mcl_chests_chest") + create_entity(pos, "mcl_chests:"..canonical_basename.."_left", left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") local p = mcl_util.get_double_container_neighbor_pos(pos, param2, "left") minetest.swap_node(p, { name = "mcl_chests:"..canonical_basename.."_right", param2 = param2 }) else minetest.swap_node(pos, { name = "mcl_chests:"..canonical_basename.."_small", param2 = param2 }) - create_entity(pos, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest") + create_entity(pos, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") end end, after_place_node = function(pos, placer, itemstack, pointed_thing) @@ -498,6 +513,7 @@ minetest.register_node(left_name, { _chest_entity_textures = left_textures, _chest_entity_sound = "default_chest", _chest_entity_mesh = "mcl_chests_chest", + _chest_entity_animation_type = "chest", paramtype = "light", paramtype2 = "facedir", groups = {handy=1,axey=1, container=5,not_in_creative_inventory=1, material_wood=1,flammable=-1,chest_entity=1,double_chest=1}, @@ -512,7 +528,7 @@ minetest.register_node(left_name, { n.name = "mcl_chests:"..canonical_basename.."_small" minetest.swap_node(pos, n) end - create_entity(pos, left_name, left_textures, param2, true, "default_chest", "mcl_chests_chest") + create_entity(pos, left_name, left_textures, param2, true, "default_chest", "mcl_chests_chest", "chest") end, after_place_node = function(pos, placer, itemstack, pointed_thing) minetest.get_meta(pos):set_string("name", itemstack:get_meta():get_string("name")) @@ -533,7 +549,7 @@ minetest.register_node(left_name, { close_forms(canonical_basename, p) minetest.swap_node(p, { name = small_name, param2 = param2 }) - create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest") + create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") end, after_dig_node = drop_items_chest, on_blast = on_chest_blast, @@ -680,7 +696,7 @@ minetest.register_node("mcl_chests:"..basename.."_right", { close_forms(canonical_basename, p) minetest.swap_node(p, { name = small_name, param2 = param2 }) - create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest") + create_entity(p, small_name, small_textures, param2, false, "default_chest", "mcl_chests_chest", "chest") local meta = minetest.get_meta(pos) end, after_dig_node = drop_items_chest, @@ -845,7 +861,7 @@ register_chest("trapped_chest", }}, function(pos, node, clicker) minetest.swap_node(pos, {name="mcl_chests:trapped_chest_on_small", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_on_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_on_small") + find_or_create_entity(pos, "mcl_chests:trapped_chest_on_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_on_small") mesecon.receptor_on(pos, trapped_chest_mesecons_rules) end, function(pos, node, clicker) @@ -853,7 +869,7 @@ register_chest("trapped_chest", meta:set_int("players", 1) minetest.swap_node(pos, {name="mcl_chests:trapped_chest_on_left", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_on_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_on_left") + find_or_create_entity(pos, "mcl_chests:trapped_chest_on_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_on_left") mesecon.receptor_on(pos, trapped_chest_mesecons_rules) local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left") @@ -867,7 +883,7 @@ register_chest("trapped_chest", mesecon.receptor_on(pos, trapped_chest_mesecons_rules) minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_on_left", param2 = node.param2}) - find_or_create_entity(pos_other, "mcl_chests:trapped_chest_on_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_on_left") + find_or_create_entity(pos_other, "mcl_chests:trapped_chest_on_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_on_left") mesecon.receptor_on(pos_other, trapped_chest_mesecons_rules) end ) @@ -888,13 +904,13 @@ local function close_if_trapped_chest(pos, player) if node.name == "mcl_chests:trapped_chest_on_small" then minetest.swap_node(pos, {name="mcl_chests:trapped_chest_small", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_small") + find_or_create_entity(pos, "mcl_chests:trapped_chest_small", {"mcl_chests_trapped.png"}, node.param2, false, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_small") mesecon.receptor_off(pos, trapped_chest_mesecons_rules) player_chest_close(player) elseif node.name == "mcl_chests:trapped_chest_on_left" then minetest.swap_node(pos, {name="mcl_chests:trapped_chest_left", param2 = node.param2}) - find_or_create_entity(pos, "mcl_chests:trapped_chest_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_left") + find_or_create_entity(pos, "mcl_chests:trapped_chest_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left") mesecon.receptor_off(pos, trapped_chest_mesecons_rules) local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "left") @@ -908,7 +924,7 @@ local function close_if_trapped_chest(pos, player) local pos_other = mcl_util.get_double_container_neighbor_pos(pos, node.param2, "right") minetest.swap_node(pos_other, {name="mcl_chests:trapped_chest_left", param2 = node.param2}) - find_or_create_entity(pos_other, "mcl_chests:trapped_chest_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest"):reinitialize("mcl_chests:trapped_chest_left") + find_or_create_entity(pos_other, "mcl_chests:trapped_chest_left", {"mcl_chests_trapped_double.png"}, node.param2, true, "default_chest", "mcl_chests_chest", "chest"):reinitialize("mcl_chests:trapped_chest_left") mesecon.receptor_off(pos_other, trapped_chest_mesecons_rules) player_chest_close(player) @@ -995,6 +1011,7 @@ minetest.register_node("mcl_chests:ender_chest_small", { _chest_entity_textures = {"mcl_chests_ender.png"}, _chest_entity_sound = "mcl_chests_enderchest", _chest_entity_mesh = "mcl_chests_chest", + _chest_entity_animation_type = "chest", tiles = {"mcl_chests_blank.png"}, --[[{"mcl_chests_ender_chest_top.png", "mcl_chests_ender_chest_bottom.png", "mcl_chests_ender_chest_right.png", "mcl_chests_ender_chest_left.png", @@ -1011,10 +1028,10 @@ minetest.register_node("mcl_chests:ender_chest_small", { on_construct = function(pos) local meta = minetest.get_meta(pos) meta:set_string("formspec", formspec_ender_chest) - create_entity(pos, "mcl_chests:ender_chest_small", {"mcl_chests_ender.png"}, minetest.get_node(pos).param2, false, "mcl_chests_enderchest", "mcl_chests_chest") + create_entity(pos, "mcl_chests:ender_chest_small", {"mcl_chests_ender.png"}, minetest.get_node(pos).param2, false, "mcl_chests_enderchest", "mcl_chests_chest", "chest") end, on_rightclick = function(pos, node, clicker) - player_chest_open(clicker, pos, "mcl_chests:ender_chest_small", {"mcl_chests_ender.png"}, minetest.get_node(pos).param2, false, "mcl_chests_enderchest", "mcl_chests_chest") + player_chest_open(clicker, pos, "mcl_chests:ender_chest_small", {"mcl_chests_ender.png"}, node.param2, false, "mcl_chests_enderchest", "mcl_chests_chest") end, on_receive_fields = function(pos, formname, fields, sender) if fields.quit then @@ -1027,16 +1044,6 @@ minetest.register_node("mcl_chests:ender_chest_small", { on_rotate = simple_rotate, }) -minetest.register_lbm({ - label = "Update shulker box formspecs (0.51.0)", - name = "mcl_chests:update_formspecs_0_51_0", - nodenames = { "group:shulker_box" }, - action = function(pos, node) - minetest.registered_nodes[node.name].on_construct(pos) - minetest.log("action", "[mcl_chests] Node formspec updated at "..minetest.pos_to_string(pos)) - end, -}) - minetest.register_on_joinplayer(function(player) local inv = player:get_inventory() inv:set_size("enderchest", 9*3) @@ -1129,6 +1136,8 @@ for color, desc in pairs(boxtypes) do end end + local small_name = "mcl_chests:"..color.."_shulker_box_small" + minetest.register_node("mcl_chests:"..color.."_shulker_box", { description = desc, _tt_help = S("27 inventory slots") .. "\n" .. S("Can be carried around with its contents"), @@ -1136,43 +1145,26 @@ for color, desc in pairs(boxtypes) do _doc_items_entry_name = entry_name, _doc_items_longdesc = longdesc, _doc_items_usagehelp = usagehelp, - tiles = { - "mcl_chests_"..color.."_shulker_box_top.png", -- top + tiles = {mob_texture}, + drawtype = "mesh", + mesh = "mcl_chests_shulker.obj", + --[["mcl_chests_"..color.."_shulker_box_top.png", -- top "[combine:16x16:-32,-28="..mob_texture, -- bottom "[combine:16x16:0,-36="..mob_texture..":0,-16="..mob_texture, -- side "[combine:16x16:-32,-36="..mob_texture..":-32,-16="..mob_texture, -- side "[combine:16x16:-16,-36="..mob_texture..":-16,-16="..mob_texture, -- side - "[combine:16x16:-48,-36="..mob_texture..":-48,-16="..mob_texture, -- side - }, - groups = {handy=1,pickaxey=1, container=3, deco_block=1, dig_by_piston=1, shulker_box=1}, + "[combine:16x16:-48,-36="..mob_texture..":-48,-16="..mob_texture, -- side]]-- + groups = {handy=1,pickaxey=1, container=3, deco_block=1, dig_by_piston=1, shulker_box=1, old_shulker_box_node=1}, is_ground_content = false, sounds = mcl_sounds.node_sound_stone_defaults(), stack_max = 1, drop = "", paramtype = "light", paramtype2 = "facedir", --- TODO: Make shulker boxes rotatable --- This doesn't work, it just destroys the inventory: --- on_place = minetest.rotate_node, on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", formspec_shulker_box(nil)) - local inv = meta:get_inventory() - inv:set_size("main", 9*3) - end, - _on_dispense = function(stack, pos, droppos, dropnode, dropdir) - -- Place shulker box as node - if minetest.registered_nodes[dropnode.name].buildable_to then - minetest.set_node(droppos, {name = stack:get_name(), param2 = minetest.dir_to_facedir(dropdir)}) - local ninv = minetest.get_inventory({type="node", pos=droppos}) - local imetadata = stack:get_metadata() - local iinv_main = minetest.deserialize(imetadata) - ninv:set_list("main", iinv_main) - ninv:set_size("main", 9*3) - set_shulkerbox_meta(minetest.get_meta(droppos), stack:get_meta()) - stack:take_item() - end - return stack + local node = minetest.get_node(pos) + node.name = small_name + minetest.set_node(pos, node) end, after_place_node = function(pos, placer, itemstack, pointed_thing) local nmeta = minetest.get_meta(pos) @@ -1193,6 +1185,79 @@ for color, desc in pairs(boxtypes) do return nil end end, + _on_dispense = function(stack, pos, droppos, dropnode, dropdir) + -- Place shulker box as node + if minetest.registered_nodes[dropnode.name].buildable_to then + minetest.set_node(droppos, {name = small_name, param2 = minetest.dir_to_facedir(dropdir)}) + local ninv = minetest.get_inventory({type="node", pos=droppos}) + local imetadata = stack:get_metadata() + local iinv_main = minetest.deserialize(imetadata) + ninv:set_list("main", iinv_main) + ninv:set_size("main", 9*3) + set_shulkerbox_meta(minetest.get_meta(droppos), stack:get_meta()) + stack:take_item() + end + return stack + end, + }) + + minetest.register_node(small_name, { + description = desc, + _tt_help = S("27 inventory slots") .. "\n" .. S("Can be carried around with its contents"), + _doc_items_create_entry = create_entry, + _doc_items_entry_name = entry_name, + _doc_items_longdesc = longdesc, + _doc_items_usagehelp = usagehelp, + drawtype = "nodebox", + tiles = {"mcl_chests_blank.png"}, + _chest_entity_textures = {mob_texture}, + _chest_entity_sound = "mcl_chests_shulker", + _chest_entity_mesh = "mcl_chests_shulker", + _chest_entity_animation_type = "shulker", + groups = {handy=1,pickaxey=1, container=3, deco_block=1, dig_by_piston=1, shulker_box=1, chest_entity=1, not_in_creative_inventory=1}, + is_ground_content = false, + sounds = mcl_sounds.node_sound_stone_defaults(), + stack_max = 1, + drop = "", + paramtype = "light", + paramtype2 = "facedir", +-- TODO: Make shulker boxes rotatable +-- This doesn't work, it just destroys the inventory: +-- on_place = minetest.rotate_node, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", formspec_shulker_box(nil)) + local inv = meta:get_inventory() + inv:set_size("main", 9*3) + create_entity(pos, small_name, {mob_texture}, minetest.get_node(pos).param2, false, "mcl_chests_shulker", "mcl_chests_shulker", "shulker") + end, + after_place_node = function(pos, placer, itemstack, pointed_thing) + local nmeta = minetest.get_meta(pos) + local imetadata = itemstack:get_metadata() + local iinv_main = minetest.deserialize(imetadata) + local ninv = nmeta:get_inventory() + ninv:set_list("main", iinv_main) + ninv:set_size("main", 9*3) + set_shulkerbox_meta(nmeta, itemstack:get_meta()) + + if minetest.is_creative_enabled(placer:get_player_name()) then + if not ninv:is_empty("main") then + return nil + else + return itemstack + end + else + return nil + end + end, + on_rightclick = function(pos, node, clicker) + player_chest_open(clicker, pos, small_name, {mob_texture}, node.param2, false, "mcl_chests_shulker", "mcl_chests_shulker", true) + end, + on_receive_fields = function(pos, formname, fields, sender) + if fields.quit then + player_chest_close(sender) + end + end, on_destruct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() @@ -1238,6 +1303,7 @@ for color, desc in pairs(boxtypes) do if mod_doc and not is_canonical then doc.add_entry_alias("nodes", "mcl_chests:"..canonical_shulker_color.."_shulker_box", "nodes", "mcl_chests:"..color.."_shulker_box") + doc.add_entry_alias("nodes", "mcl_chests:"..canonical_shulker_color.."_shulker_box_small", "nodes", "mcl_chests:"..color.."_shulker_box_small") end minetest.register_craft({ @@ -1282,7 +1348,7 @@ local function select_and_spawn_entity(pos, node) local node_name = node.name local node_def = minetest.registered_nodes[node_name] local double_chest = minetest.get_item_group(node_name, "double_chest") > 0 - create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest, node_def._chest_entity_sound, node_def._chest_entity_mesh) + create_entity(pos, node_name, node_def._chest_entity_textures, node.param2, double_chest, node_def._chest_entity_sound, node_def._chest_entity_mesh, node_def._chest_entity_animation_type) end minetest.register_lbm({ @@ -1296,7 +1362,7 @@ minetest.register_lbm({ minetest.register_lbm({ label = "Replace old chest nodes", name = "mcl_chests:replace_old", - nodenames = {"mcl_chests:chest", "mcl_chests:trapped_chest", "mcl_chests:trapped_chest_on", "mcl_chests:ender_chest"}, + nodenames = {"mcl_chests:chest", "mcl_chests:trapped_chest", "mcl_chests:trapped_chest_on", "mcl_chests:ender_chest", "group:old_shulker_box_node"}, run_at_every_load = true, action = function(pos, node) local node_name = node.name diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.b3d b/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.b3d new file mode 100644 index 0000000000000000000000000000000000000000..86dde145ba44c0859b4d2f75e85d4f235ef76dcc GIT binary patch literal 84495 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 a4h{|u4h{|u4h{|u4h{|u4h{|u4h{~V2h9Wk literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.2.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..865e819097a165dfd8f9d33100842a5ac74366e5 GIT binary patch literal 13252 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 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.3.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..20388a4031c79ce6126f3725651da6fdaf87abcd GIT binary patch literal 15917 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 SFnK36b`ex_06_o0DgO)6hOff_ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.4.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4a3616448907e8f495c25558beefc2becf37aaaa GIT binary patch literal 18013 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 ZFD8$F&NQ&)wXtUwwlCmM4QJ&e008);A&CG0 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.0.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.0.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c63da1d10100e556c33004a56234d736af14469c GIT binary patch literal 17732 zcma*P1y~%-(kMK*OK=Fmf-QmI9wcaRUEH1E9-IVscXtoL-GaM&a1RjN?JjxG{m%LB z|KI0+{q*+MOjTEPbyf9L&(4mVsi_hG4g9MlTKxlX+$ustkw7`y*c+HTyqtm(DFc9K zNC8}+{(d(=$-VUaukz9p3UcJCt%!rU@k06UG79q#qc;$|nz^mndpUbkGD~va^Q^TKlS>WUKLpOpDjZR{-^$ZSl=K3WR8;Z*#J&D2Kt@JXR+&%9#>v{~FMkmm9(JyR3SY2Zf<#TnM$Y z8%xQGeRk0SbC5PaPEiu{PZP%6i}+U$GRRnj;0cYQJ|ezw4gnRU*`u=T{i7Bc-~&+; z=!?RUs3abmAeK9$9K&Kzz~-A`6`f*}nPRsByEuVWon}-Z)fjR(1!=)fs)K7tsV3?P#{cgsXx2{$2twwv&yG@Dky2EVvd^9#;qMIh0}z`ED$@5T zvh_K95O);mbCi~dS00Gh8miSo``<=*F*^VVVzc!q()Y#C%dxV9mH5EQ>@!MyGs@uq zLHYXEUm%J=rJE#u_CaKgQU5zFJ`lE;Us07%|B(bC_!PZG85|Rxxx7YH?GoAxhOA}pqdwpj6nE-sdaePA8}{ma}CI`ya+8isu$2qX~^1JAH9 z4Z#L0#?f*wWc)XNw^?x*LVvq8F2-8${e=i~<4z?0&FTdj{KtI+0l>#@mNqaacF)5u zz`g+Vi7t-X(IzH$i+iBF=2x2aPwv80rP151G>310H75gr|MX(TAo2hL`+iVi);DCj z;=G&?x{|W0VU{8K>VGu{We|Tx0r|xUp_I=MScFy1tfbYji-Xet8T2UkZrVQ)1u-fa z#Eanxjd37MAznNPD$0vN{!hbUQcW?xnRtae@e0zu)Ui`yIV`G)GkOJ9J|&1hgN;=a zoE8$SAP%gV=($wyv{dK0JRiQw6|wmr)$qR}2M~h9dVYnb`Qhmk!}pJZ(qJh;QRU4D4#i z%-eYvS={j1H7dS^n5?MGXcUf75;W{ZQ6Ia4HnJo^xFV9inADsRWGF%n84BAUUW^9| zC_wy{xu3b4zAWLMF87V!kms>nPc2a?kA%TDuL|%YpxRn+=DKU^2M<5lFo`+=^ zTn_03AV5AS+2c{TP=b&vl>w?EGRQwpaTK%@r8vmEO$-Uwf;6R3Zp1f!A>8okzL=nV zVx>{gF0tS6$L%!V@sG5SOGO71hSCm;`f z3uh%Kr{!5E{Ul>;eA$^9CvbwNalE#EgQqs3wKiwO7@O6SBlv~*+DaEcV4*HtUm2{c zYP`UyqK@aaj33eThgA%G>7?ZBuN`l!+YqkJ?YycQp*|O{KkKyF;G_*Aj^D-)=(QN? zWjd&`|JC%JzWoQbm$BMk&JYDT!86wo(O#N!;l_VCtKZ6~&iZT5#T#FHW*3#TRSZ@! zmQ`62*H^smd;cIgSLbhd<++(;rM-tD+$Kw?vy2y^c}-Y<{Mu9hlUhJN#6h5590Yq% zFq`}xv=0{)AO_mSQNpC_A#=o3{7sgp%nVQNAS>BJ949X+Ngg*%*Gr}xA<>@}izR6W ziknnK$j+CSw8)N|RkUC(nASKX%fpd0XNa5B_zdcu)(FQn#ANBqGaCMglwX4*DFK48 z+Re%v<)+Keo0gO)2Zu=vq~%U>(-!ApDS?V>A*}M_@T4S}>!ua07W>G_6`^G~AE>tvN&QtVa2ZaJm=a zmgO_^8e!ZJ;Sg3al9mwRnwIPZaR!!^kWq!c>eXAeVThvks6t2##={>GscJ{Lkw87O+z3>)5Cs@| zR4hOsh!zZxD;#}Kl% z5ICR3XjTkbZe-;xxR0CAzfGh`P7SJm{ zSxK7WuaFsKaEep3$gd4kG%v526-0zAHY}15YiNiU*Cc4X1As%wfDZpICR9Ka0wDM@ zf>CZ$OoL(Wy)0Hl=AATOOuF7QUvwcvTnGYk!5Zb>BlE))+Jzv55VKzp`Eiqw^v_RG za{mPZ%6EK0#3>>J0G%x)E&8Eg2(3wGxhL=TY^9mLv(->LFvHNu#8r!_1qXHzUB8G6+$Mj8R&7aRic z1Ln0T2Mqxd9h=c#C43;ZHw@zrgyf^lyJ^Cbpq?a$QBXdC;V}1ZoIw~wCkIFZo8~ae z-3vi*?-IW>X$}!D&0pw08l?XpC5j=*7P-pbtQ-sBpVXWk^PePL>R*{U-hbrm|IXh3 zFHpjNCR+bJPm(MK1ly4jfM2T5^~9TXMms37^)K~~*{Xk&n);^*>O0*i9?xapUeP_rl}&yUjxtL#m)V1T%?VOZ^K zngb+y@eGIA=QL1&HEUbI=hF|nfcU)XpA&0;ZA}i@<_LwoOe(}5$p6~n#bwAvBws8r z`rft-VQ6$BE3oEv|k!xY;4>uxU)Qu@E>{vr8`{dYtALh{cc zl^@o>pzQw*A(8vZ|8owM5Aj#XA%r+T4pZoFH`;7JOi83{h>OC!tio^iD02rXEZNq7 z!pNKTO9DQq0AM%&`LMXBpKLqJZ&uPM&R+gAW4vO>M^k2#PmlnLKut@pAHfGTJiI0pWsju;PWzV=nI9P}c~B1& zPLz)?w)K|{G`WUOBp%Ux^nW(%Pyh)4#GsK;P^552phsdvVMf1-!HUI>gSaoGK>J_- zK9q1lK|v-Fxm}wulp;ocdEHyERR5qMEh6GS`xV%~@IRaR4vv4&FPr%nF$>yLysRuN z>x|qVxLFx_x&FKZf#}$H_!t=I85lUYnNQv^a&YfLV0Ml}I(i0r#`mm@7hBsaHMlZx z7yVyf&y3Rg6c9i+ShZZdHF3j3thydc#Gq<|{xI!*`c=1&=T_D=jlaEnBo_GrsRt%# z$y#*vQkQD&n$n>o)BfE0%+SK;4HCKI*OLQXsT*_QNV}0c^quGeVYlK>@GNSu+aE?E zNZk$!$&=Sy=`2!MH;cad0=~mJckxBnwc(v9KFi$XurfDaE~sRDz}B0m*XiGhQQ_SasT{A zI&UW{TxXj090R(|<-h~}`$?`$Ag_@<2;p?@NoBjORH$twSf@C&ecI5wWrT1DmPIl) z4{0F$kKtve8;1i)ABD+>q-<-k#h$9k8>N(qS5#uF-Bn$0QWvfVH4fc0?A4hHP!v+* ziTHA$k=9xS&qf+5IocTuNP7-(RLO_JJR-B%gg~s2v2J`Fj(1bcr{aLvkO)Zq%L_Iqk=RU!9l zEftmsL;o1CnSRXXWg&;HRy2kD{0`xn?#&@mpg48u-ScnnQ@L`95#oy-m)qap?IovO zs#lkGW)#)d%@bzxk9Xhx*cR+;mFDagCl-a>S%A0a+S*XwDV+#i?P4CoCz^e{vyyH< zF*zWdzlX<}GP95S*dT8L&tEkwo%*D-Ju`aL(qMkz5JAYuTD3BD-AA(VOZnol?JCp1 z`Gt0FhQ*huHlA%CO&oJbE#e#2EmZM1}wp2cf4nPL`pWLQtprTb*N zX5}hY-}VF1G>C~;sUU!1QZ0_&b?%zC?Ssv?52U&ZR@Dy9sZxcJ5S#pDG^ni~9#XpE zV`kAiXLd|@r|of==DRg=FiN3CIO96faR2D(RP|dou<_~GGFPT_l9Paov^{rsH)FmgjOF`Nbb0rIp~Nm|l)X~RJB4DSKb-6` zDen@0ljD6?tmHyB@ zYEuyZ@@kE@4;K}~MgEn;WVQ;7B}?eLqQxgAXW=s&=)88HFg{^Nn>hBW)7RWTU)7?& z8Lz86()eYSq3b}v(tfXaNZ-8N8w5pKWe?>#Rb698(MUafuBfP1o5`x;j%VJwEQ112-odkm@*d|qKSuxs-zphDDt`UL zP7P0sW2n{7OW@~Gkz9%o2B;Tmj(|C_A#HhNj4vZFfc0wGsf78&`m@Exsc0vj=!u=N zv9+f2H~U3o<@XCvd-segnO}eu?yRfm3fD{drizVf;n$gUSO*7Rhn6hsjh~-5$BU81 z;=!7cNG#^CUg$#~@6xXnQDuxW?l+`OpYBE*gJ7f=z<&ISrIv8ySvZ}l2*Qa1mpcl& z12%B;N2L|iimaP3;-;59^U^DyXyF)&!pN>q^<)a$EXAy*_H%e^bF7I1Msh9~24wuY z3VdM`au-kKE^94ry5pF)4Y|cywUUhI6vFP}=9|7P8%`J0pEpN7M{Go~ZS)3+r0pE| z>e4E!Fj2;3y78D0mBr97@=msES4#byV$(hE<9_m?36IAEqR`dSp30n9==Qn$GFOMU zdxACIhcbeeXYFOoukIggy80;Dat~7ArNhY=DLNeq0MQ z!z_qKuER9nt6;2=RFY!%+fTLT&T)Y43jVF_*%MBB)T#|MX^2B&?G7Doz{83`jb)wi zF}7~}zRN{ID)qPG5{=S|lk^mttV;|Wz=&uQ`OuKlQQ|}siA^+fjctYqy?munWaGPO z=C7?u*#S@#hCxJEy*DZ4s#V>NO0e-@^bL^OBv9Py1<%!kCn-GZYO@b*A-azZuL( zwgPxtTBg8j40iYe*uKEGq~b)=_r=eAzw{GwC-p@Y-7P5BT{`qIov5VIrMGq|Qn%gL z0BM~|6vX?do)Z?pL1@IsvyH!aT0HW%?0luR_k|~=HPScbOFbuVy@lKd9D3PHPRtBX zyV~tPD#gKC5-xLy z8x@e6oWof5tpYULmr-%4BQV)x8auw5pfBn^fZzeRMrT zSXQMJ=DitImJu6+lPvBHa2%(Wa_0NWdZq6e_`oEjpCq+8-`^G7koxs8!f5tl;$c=~ zaAR?BjdoR?AH(q+Em&on(Mws;rUTX9;Q{<=hoWYj%b2ldD#tr-Nhw1O>=|2#c2!1v zv(=^JO^U*m{)!mci24$#-xIO<=^86)V9g?kxvq}EUu9>nJDJ5cI&p6i186(Gl$qRl zkMaS22)DnF;c$NpDk<^Ffh*UCzWa>xKyu)!pLA>1J3N?zkcKxj_0EQM4aSHFh4m)s zv~%MT)cK9WZD|dbTfw9BLHTVd^HOSVRt#O2r612~0bf$xJTjazHOgCwqTR2Ty3sy_ zO*Wp>s6^jxxPJ^+zP}tH+J}?bnQ-#Eu{~=!TJMJyK_22uPH3>1AI#u_I^hu`P0iQa zC^ElrxL*7ExeXg-CwTFUNigY;D*vO^gwZJ(G1Pn@i8d&8kf0-{4F&Duevp6 z7ongPJtZ}EDq!F<;o$-f-Y_2uU`aiY_qKAinB<1n%t&g4`%XNAlC{BRKO2c?>#p;$ zae;KFPy;qAg8c6675!xhF{~;e&C`kcdFq?egEvx52WyIB%u%%Ib>~CeB@SJL$Zu%{u|HOy?;X)I28mWz?(;!ub1OdgWy3 zJE`MZ&YFY4&3$gW=U>lUeH^J*zl)Tdyj=dUOa0WA3-B9oq0mW*oC0HMMCPgm;Gb*! z{={N8XFgwxOIzN%hLf#5^tPKWH6SArhxD-(X}LbK&H3yk#-@mRbGXd19sesVGpca$ z?Obf6vU`J4pD+5kGQU%uo7(ozJ(kotzqEG?N4mmt2v}oZQ&v98FWY2;E;En3gAE+~i2l!GYO8z$~fo$jj$pWc_r0-u+Ey^ivm)lC+L zntzFY2t<*RzU@i8LG-Snf&>2vP~v0#UFwIDfU39P>h_WUNXzu;Q|)}Z_3iKVzEE{O zl?BEww$nQck=yoTK%)>uPL_vOzVl*j9oC2IvehjdkD}58fu|-dUr|Z=!q|~o$jwU8 z=Vvru&E7cJg&dj3?q8swTr?n20y+o72YAfzw&QAr)en_ROr(N^Ni4bi1m#SGg5{IX zo(VC`dUwye&AgLsEA`KNPsniVn!vU5KkJG9hO@f^auI{@2tVKUA z6xs)owQ@z3v{p>E%i=TmYMkN}cA74dP zw;mX;@o(Bw>MrlItZLc%PMmV?%lDJW<*fgf#u{nhp%=vL*;MB#IG&Ei6gG>jed=V? zx1yu}ny6L^KV3RcAicm-k5A<_bn5DNk&(97Gg-MLq4ept--n+{@NInk(XtM>wA4Dq zysXmR012K)d;5D?SlLZ*L-m)!64{^s5DAZ~@oBu{vubHP!IN(94Z4no=0G(qZkhU| zb~g9*4EWcrh%f)X6#)YQBMIp0K}!q27Pi+w?-<{6@^bvy-`hB*e+Ocqqi1JhJER4H z=xJzKS(%yG-(Tr8r`@qn_~)e{Z{aSlN~)(Mb)aU!G7W#0@r^WsC&Tb?yQAN<|Kswz zqm$gaU-NxpGIz2kr?u6AQ_Bx3XQXMd-FNDY0ap@_GSsRATCvmvpU;h2_X9dfu7vRx z1429%1G8|f=jkR}@ZAd?Uga9;q%Zh9G`hB)sf8vP9X!;x*%Id&Tvt7*%+AqO5XX&J z&pn-r=@~_;oYMF%i3-oph5g={&UKc6mu>x)AiUjp^XlVAd#I!p7d_-8#jS~u3$mU$ zN9%5>*N*%5$=boSgY;H~75YUae&_&y2%E{kHzzu+|GS( zqu|uj13r@e+z^}K^Gbr%y0J{2&ei-@VRylbKux;sZ{ewfKMr6332#?sZaTSaAGn;^uvd9H%PLkrhw5ATD@#9*98?OV( z*Bdbs8I4Wc15wrf2wbPTd-<&)>JoUZ7pTm=DUi`w@;oRr%{V-lA(tKfqK5AgFpaAZqnZiYR^>wgH zWw8d!Dv)n%tnzIXoAR{^rxrzM=vg8iT3mnl%Z$yC(G6PjMo?i0!t(& zv&Cfs3l>|F=i@7RC#>R8f!`!8FEh<)DAW902|uZux@JVf(7{C&Qb~=K_?57l!5^K7 z7DW_{#Q8Dr%D=lnn^A8l@)c0lxuRUG_4p~&V+eC(G`97tH8*77K14!u3Sx22s?}Ag z)fR7$S9_U#pD;ApTCs8dazn}ah2>m{-u%}e9@pFoi<7`>A zYrz2-cf;Ex0(hLwoc3&!ZC_rEQS%`KsHpgUZm!voM1>|LlrEr}dqr?o>6ZvK z@#*ib?0ec>y5s#MaEyiI8NG6l2DO~FlT!W@X|Vh7H%x)fR@>(8Ac2sf(#MmjO+<^J(IhF7Um%_-8q&VEj|4vKMQ_SPsJM&#usPXgt4&5N!^ur2? z{%~hFbZj@Kg5rrN-gCZ}Cry$F*Zs9C0>DA!v`OUpi_DudPho6tn0Y-~|Lu=eABuan z$zyfn0)S4=(V&Z=+A5=;1>t!P#^b2L0_CT)oXPriGk8RbX5#>qWHz3R-QHedEEqg@x@!M;gggJ>lc0$E)d8$d$VSDl2J7ESNadN;z$RA~^V64~q zDF`-u&1O7ESvj8GWP|?b71xtv*7+h|p=9{+Zr2=27*7vc!=?LXcst-E+~4CQN}oeP z4H6i(?AC?VDL@xV6agG*-UaOzG(cNYBfRZ6zQ;HiIRYG^5x1hAKOY(@2g+_eXRk+k zm$cH2BR}UM=Ds4YiK13A#hWra6~~r*lyl`gk7YSzrc9ZwtY4cOk?y`hS2A`&E zFRwtm4fVo>M4plI{ljpEa>gwc(Xn4_kc9f1TLbv2ej$V@h380xsQE6<2TKeuPU74nFEaU zcoOfzu`6bdlq~rM+elIt6~rb#)Kt3wcgb9 zv~9Mi$M&5C?yB0NT=447|J5}MI*;ckvpV;B7?sX1RT;yrJhlWh+UX<~hJ6|_T+SwI zvf5e=$DCEc*U7ffH8KR!MqFclBeC{*;ZCKZ*XOfInWx%t{n~#DXOT9GS7{!@Z<;96!m(9j(5mWhOh&ZSImT9n0*AMqikwlTl8bSr#< zA_AbEkVniV!byEk(#t-Tr-M2lWww+_9T+V;7LmGTI_Hkh$$G#g*GkIA?Lsja zYmpkJO2k@at_Kj8iCyYZ`C8kUI(Gx{68EghXJ3~0Uro+Yuv5Gn8#oESVM6_&_0iYr z_n*(*O|?H?M_R$6DfPWU)+pSWwtN)l)tgVJs15f>3tU(^Lc^K0ygP=+$qSkOlhaB< zypy(g8xqir8^X!#OWwANU4QWFcYGB`RQ-1tG2p35+FXW>HEV>8{$fB!LBMA*jtSS? zWPOpOI0l*_x4rLhXbt>Y3$}eu&YSdyfKg)A)MU)2kK3=xw^9y9X@uPG% z^y?8BHqkfg9X>C|%W*TlVg5vV-|`d_Eo#qe{iqA4`SB0K11?*@YCGF7kEOdx@Hb#^ z3PFE{zj5=u0-1GMq?N)`}4qSE4TS!Xd#{NWUatJeR8+^|w} zd}{%J9^#}xXX-^@6&TC~B{;$9;ve9yW{O9GH>$u+f&n`5o~j*f{eib0Z}eFM*kPcy3V%hEC~s@v^ltFCjsIo`s-Kv-_ETjd1hp24*pfq4_94aiYr za6x>hvTS1U?mGdZA4$@&E1G~qB!QphL$a7q8YyYcvz*0k@Y7Q$bzHR9euRmc4tA)F zd*o6n5B(wZZ{uN|P*u#v&=|40h2@Uw1+<-`bJv52b0V_{`;+y?&gproO|XYnxOGm=OfP*=+kl6DIuvE!a6-zkgXTC^7BNO-%=97MJxQ(L~jSpVI z85G_8Wq^~hbC7!wh2fqU3wVg7W6NJZ_MLb`sR;@zZHh3KL`2;1;rgAni=zHv#DwzU zSjXr^4jcfaWf3qiNmd%huz&&BEDAseI@A8zkteb?M?q(b5$&WGx41pB$VB?bAPuG? ze>zf7pY`6*GZrSlk#rWc$w`aY!=&}h^6xNcoOys zs7e;Gqb=CgSL5#quA+*kt}wivv#E zQ5)-ZdAf5X)rftZ63Zr0Z8)N$8CqyPoV>A*8Pf8(%1A|TO7~dA=N;ac65hz&4k&X#e)cav(UjPrfFt8Cn`u*Y{u+t^Z+5q0P{)As1`KM0DpZ*_ZC?gTZ5fjp7m) zk=^U`GaQqzx}a~#`k}&r)C#pHQNB89?(w$!khP=&>Mb)y<6r?`$uom`#}nlG^by*c zq!*WiIWdN0dE!e?q(rD`#-at;cqX`l1Pxu8rxSkbr|7-6gdm|Kf_Qw*P)Hvlw^hbz zK;6+7)QfkH(+x#AZx?7SHTK_Ur^XI0zY~aeOoDy+d#iX1 z1eo)uWW!bQd zAvm{WSd&mfp$=s-#_KfG7Tvklsa$95CY1#NdrGaKgmjs%$14c9C0 zA6r;l(`xgNesK>==V88@o4{%t=$=lt{=#I*$uN=^Zy#flahw=M8^mc)WJE`nn1w5S zkkI|H>-#|o$q`w3$GM1x?YZy7fUKwJe+< zvVkyAD`e~|H^uLv3P}nesyTp|aX8_q!U~-oid)67Y2=1(QN;1K7IHeF##;0Vb3CmRuxe8N^a@oh_;aYAbnlPHsUp7da$8`B0 zK7StNqjW|OG?9IbZ&z#`C+YSy>!!IS$}9BGs2OEo<_j7J9AzZs!=h)%R{CNyn4>uM zi;}C)xlrM!VYF+Jq>rOSkC2Ko(nU; zJ3NXVRo>=Pn3!hwg3r&ZP)~Oku0i_+(PJkxY~aSFyIf>aSZO7bqz4hIwy!bLpq~Tz z_-?DtkH3A5%NF+oRiAlB+O7^(RjbT3-sQ%O@927*_RN%Lgee%dv}16EerU*qad8nV z7vLZL`Rdomt}AGp2a9PmWK{AsOcQ1OV!MX8EodxP(a%xeRCGG?y?s3n?waLY8C^f} z(UWXS3c}|QJ}J^t!>M_qO{46LmC_P3ubaI`;<68SCtifG*1^@0>`>|xDWDG6h-T=G zfX%M~W4msdqY8+$uCVd$HKI2-&u2cDs7bDC3urylgM`@V{1QHMmg#J3_hQdDdw|Yh zn00y+25$-HYp5Z@%6b$RDR|%zSTIGGn4KyBdgGX?z4rKcpSa(LCLTpvm@K^N+8?5R z6Kw*X#bZiYNObqMT6TbgFU>44l5Se6LE8D1M7nwTt$0Bo_NQ6Y6=Kgqm`9-L4pZg|c0YBhO+}33x^y-<4J{h|MBZ zmHujVli$=jl)y_4?k=#Qfzex-;dZ43Rt9kFQFQdARYv3PG`=ryDSkTLac}8u5kgTL7j_FcqCj=0P26HkgP2a7rTgXu->OQo4CdGwgKz^biLFT-5 zG1AI$veAOhraAlWSr)aopge8h?j^uh?twXCq!)7>QS;@^VMZH5bJq~c&cRT2TnZj1 zj7>P7ZSm`M!-!nHImK`pupv(c`x(~Ud`;Zp&<7njPxjT^u!2E&^gD4iBBusW;$EFu z{i+Tcrg38q?F>s9XZYH8X|CUO%7v>SvO&>(15ZYPx*HjobAFP#3t32i7q-E(pgqBxt)_6#MaND^_(WK$p z$O-(UCqq#A+kg5;31^WS2LVSlF76yo@E$G909~p3o5$bsfl+sl!>M6DxCxPCy=^#o z65;O}zGD%zuu6Ax1|>@js~EGEB8$iKhd-OnuI;u@Hn3Smo$wLip6-@~yfX*c;Q<-v zkXDi-9z#CC2%ASq>}s zH>d@2Z-~OydC}_R^OzavSy>(2L<)MBdUGeCTgfiayIwW7m4?X?S>`T!qBc0Okf-w2 z?aRJxZqCNO3Lh5j8Vn}U`23?5cffB`UXJa|M%WT(Bk?WLS3Ayb<)aHS^w)%@SIuma zJAK|%nSrfk&%$0)3$Kz7s;sUMWg!3ALmW%($q~nKb{*z4ZiI=_COPsX;zgb2`Ey7R zmrJb6Y-w)%gNFG=HSjdt93Dj{rRLXn#h;=RZN-`U(^0*qf`LvySz%%o#=PK8u>Sz_ z-;!VHEd99J>^rN5IjkrMuPY?KwLI9}$CffW4{feX3QRnwE)iaBNuFvU`g+A}Gd0sH ztAqN$v%L;eoD)84ibSPIKlkBO0h5P;-F$f<>;mJ>{GssW*!EE!N>wS5_Wog6N_L@y zdoG(xSnB?pu7I{Q#lx@n?B0_T8D@$l)bg>aC#d+6^GE0|ZMf{P(3E(ky*~0!P?}Hg z8oM2-wVt5XR*DK_i#DB=G}SJJvan3HuLSN=Z7DPto0l%#`c}6t-b6`Eij~7e1xGe+ z@E<(pLeGvrWK7P#8I5v&CSX8U z9YbvP?i)g#o%FpUbxK#5=>mwgwZ4HOECmlgYp~KvUrWe-UoOh1L~7n)H_EZ?QPxjT zU9Sp;^itd3V*#^7iT$u@Up23#wLei&%qSyHtLU3RkM#AN@nU82ti-1y(qNnF$Y@g(GD&+~*%npx7SAtL3 zEi;l8tHF3>p2oIO=8qbc-(lx+C{5`&u61KK9=YjpSuJIU@Dt>nHkIEAVxtNUL60+d z&hPLa;{P-`pKwhj*Fj|rk}Dj+!wC4O?-fT0jxba!{eFCX0_Q=OTN3+W6T_47v;$}>ER zFhLKADj}IU?_We_3!CNG8>$U)79#7R8wzyzCcJ_%k9RUuN7kcaZQ2|T7*Nk5eqnmo zlWYVV_uZ^Cw4WyK(4$U`q^#oxhh~{q+69;jtEQJ*#%YwZp!ZwpI^5$la_+T{;qvO? zxZt0W`}58clQ+D(#n@8bE>!ibH~-r1HN&`o?V!m_lUF-Ro~3cIv2!qro6Q|g!gi3| zkD$a&%<0JKgaP=8*sakv5gsHs$P2PE-Up8YZrtxW;&P9N9y6#Cp|Vb5{ZKiN2rLYm zkEC~gmR77(Y92hKm)XVMOv_K)$(oP6*@aQBv|uwYH+Xi@b92w-!Y9u4(Pku&TlL8K zL}_VvOX%WqmIrMH?>4x|(R3+4b2XL7pYE2T%;xh!RMC%O$5EBd0rapcb3TouGrQ^<={1U-fJ*@W)WdJHMA!2%J zk`Z5Bk$}$*@<(9AKLazg{#r)|E_57&En2cG{nU-S$?+mY)!ITNk)m-sjj}PEw2^o zmdQ?q9felK8B0}ZKgjlv8tK9xyVyQ1==K!GE~bj6Ub^xipji1T>Pt|yUU7c7ZwU!e zW`|=}Gdk1AuQ!Oh-@qnYfjiE` z;VMiwZwgF7*{1-w__r0;xF$ZdOX()EfjaTMpSG7b{-5+_EHVTPL|bt$+RG)1isL)vkJgn!nw(p%9EcrtPp6el zg{801e?dj6PL+jUpdF9lLVkY`F$Ty?4Fnukb}SqISl}$VP-Il%4lIzAxFY9dBmJ^M z0xlx4O#wD&DZXTcWm3lmcOf*zHR0ZDrRUI@h`re1D$ZGxPrp_{SDW%stlS@X@8b(Q z^XNfG?j8oX^3ksVV&p&)+y14Da#U5?~@JGyBVgD@l|&u`K! zp){CnXu4x(F`{Y6!AQ6_!pxHN*qco?7RErkC;crO|4pLxD^<0rg8?pFxn-yQZz93aBMy>& z7Jk-e>FUddPT1_SX;or_lyV#NkR2{)FUxbCx{4J8420{*+c7d-Dk9X|XV;yNa~aeIzi+GY z4;oT3+rv`AZ_DIJ8O@7g7?aojR8*(;S0N7>3%vgVtV%L+S9deiSgHGI%)NqJQm6bv zgJMTM+c-mklkOa8Jy_XV?1a^eIn`1AwL!$5TBrWuBL{ z&k7vj(<`oQw;)pX&KldULlV>v^!5l!hF3iW1g|JIZ@Ke4K!n)ppSu(q@!x8H4%_3$ ziByCEbkr?3`OkNS6}&@3_CTpuUS*KyeSZ!gvc%hF0rLENgQdEf&QAikXJNPe0fC3t zBt(&EMAf6!PkL_6K4rsJ2~r{_WP;Qw`Hx`p`VKtLs#8%tJ4AX_6}K@b5&PnV0b8rl z{))_}^XxoDdZI(iB4;BY$(7gUItdO#|Y5W8(#~ zxzUz-E{)|`Hx%A)Wv~&8c&zksUu9ihR4R@4HIWzz-x3_vewP<++`39o(+;2a38Jv2 zOYenhbTnK0=WP(MfZoeHAOPUy41VcN{NW}V2y#z zacRN4<+dXfrx%O~PhR?P$<;bANKF{Kv)LliWyxlwcy`5Ct?~ITMflK-TVLw4H;T29 zaL|L_a6yb)lZvvGq&=18O&FT>2(x1SRY4$f1mpQzkwvy3KC&`%L2|UZRCV-e&$5>3)}~&_Zbux)NosD= z?Z~}ESGIH+jY*UIH4`rPpvC7T5oo|!$#S~Eli~LLNUWV}OK@^~Md5dE#(^RAv1Zyi z8uxkI;V7o#@R4!T2~K|wO4Crw5-a{VW1|Ifr+vXC@!PsK{Bj#Hc7OE0B>02WH*2 zLx8gPrPL(i^g~t!rDlk0WvVupWeYQU_p~9ys3j$mP&FsFwV~%n3tbpqw~MFS8$I4_ zPj~Gjx1speR+k&0fx4@xAM{n?2d5ryZDtP;-PzzJcFu*7oX);Wx(hkE^4zpsxHh&t zUxqkDzry(i^5DDX^sesbhBfhi~? zIrp63x$nL2{cnH0O-)yIRaaM4PxZ{8XknoWfPsINcJ;r2nS0|Zhyvv9;B0K=^3Vm6 zCfBrUt6dy+ZyF82p!LKIS2nVrO9w`4)h7tZUB8THOtsE^`6rC+7ZLN&e z|FEZ&q2yp=<6z@u=S7AS5W|0}4)&guaQ>A4qF`rXqkL&)Z)A%HN2^uZ; zQc)E(8C5mG{{u|~$4I`Cl6fU5sq%l~NdE{>P>_73CaCJ*W^ek3zk-#$nTfNJxhn|i zuZ9pYadi-Y3MXclr|WzS zT&DN{fCz}t%i`3Us>sVi%qXRzoY$bz19bWHQs~Aj&@I6;QyYbXyfqyKSqKg4BP}EV zZaxuIsvv9?X{unnKaFu1RY9`x0HiS8c>vN&8HmZzM;R#3v7MJ2#lKTlGt7^{Tsta; zS=EK3YR5hO-35DqK0iT47V@`=VDCZwqX#8?E@H^UrZJ+Z51hjx1?kS199w_Yq6GZm zY6876crsOFgJWch$J8S@%*wce6P%J0TnZE1b}$b&n1T70?IH?w)RKmjMMtFEdFq|*a4WTn13a~38Z7!sNcoKtH?qzLq!|)uT^-_b*P#97wF~L?9niuw)#0nPbeFe(G^YfBe|oV>7*z<7b04HI>n%D% zab8Y1LrGcn5XT@>&A*!6GPpluK!W1LFv_QhY$B?r7Sn6Fr63u9Cp`?^O#d5EaHCSf zy%?F;3=hr}?!^O;qP#fte;N*(W`do3>YNl`Fa0y(BrxGKlY9sh&V+3|1XSQSKx{7CNiuf>9ZoLWEL&!|Q%wX z%djZRcd7K@Isdcz?;!kl}Le8HcYsxiWm|acGorx#5)mg9=~R#6PzV@m2yoSL~>_qhie5n&|B7 zd8b)WjDqPLj;uJ ze#_p+-bLg*EYqJQG0cvZkzj^$Q%g(<_#wA5f)?s{4?FpYCJIXG5T zVGbWY5T?OOk}cF!x}CL_GsSIPn8# zRX4XE({4t|W_pCLrl#CrNj_$YdPa>tdc^j6yip@ucJr>V2jUAm1HzEG`bZ-+n1P1b z9Iv_-f$tB(sLuzSFJWhHs_wyhiDm|kk$O<~C5dZu%{o$;2rJyk#tT&TrcHxs#L6pt~al;|0kCC)yNIu*_Ko1UrJ0Oxx z#R&H20|74~n|P|&4BeEj*eW}ed1~y)R4%V%yU7xiWM!!mCK-At)uLqj(&KStEg=cx zDk$0cO0qWD3DYVz>;;qBdz5*2vR2FqA4*TGrkClJWVve!?l*fIBz{AC3x?uK8M*J(5M zP?|=`^e4lG%fN+ecPA%2=4VK8iG#CBj8hqc`#+SfI50|9CciFDRt`QZS=p*!6?i%` zm8xRH4Id#>T&E&y!(6YeD#z`Ht%9CkO8}Qqr*31--18tjk3f#0s*b?M4!(Im2*=TZ z3n$QtEbrEYk0_WlwyT;V(NPeDCn&OT1y$gPR2{q4DQ&OA|7gzKGp$|zAe`YrxNZ5= ztabzxE*#D(PSzGKT*sEXAi>zS3O=j%54nzQ-TI_ zz_nn8Cm(-e7g^z5HwgWa78)P{59J=pZlWM$;(VgOQKDQt6KsZjBDh`h@l4=*3z5rX zF$l5AuqZtwNJ*9f5{wOB>U?-Ij!p(o>TE|7G|Au-`n#DJVj5$zhh({^aX_8~y^^IX z4uG#Hvs;3SO@3X3idA{-vZQqfak-;DGNo(PIw9Fp-hNVc~DqZrq~&-CVZXP z;fMt7T{uG9hTHuC(M=-90JpZuCz||e?FjbGNp0Jz=~Nq8<{nL(Z%qKOfP?~6B9Kb* z&=H|AaGCy5!XIvXlL%-iJRfD>Oc$4hbSJwEL-L7ChM=1X#u0FxT;K_8y2~)M2abSl zl07u(E>RE7ALt(q+W(6Z#qeZ{O8rk(j)U?yHRs0uo21MAD^n-zV*ehdIaoyma_4+|*`*~$xgEQVIhB@0E(4^)zs zp@F-PY< zzpv_s?6%>Q%;qipdC@wlWxNdcV&}^y6JQmc=QsO z3~|qBV*tzcj)1>(rBg^^UQNf?@*i7M!H+p&5f6(B_Xny!ws>$EDhb&K3k*NF4BVi9 zu|Y8peGk|mYz}xI+^gV_7`$)vfeu@2>yNuVKxi5NqWeqo2m7Cf{(kDSW=&KH7qwtFmxc%MSsZ%-o{5^x7MV)8GFAqBPwHe! zOp>LKjl*#nZgR(j$1No)z=lo586X0}BkF?-3POYcS(RT#*>w>S*Kjz{G0}U2T*j>s z0PLVX%-AqZOdQ;jfE;6fKvUPS55*rdGP3qP#umpHB)tVU${{%)_>Txty40i03IGlLg1i1Uc3)mkE@TW!!3kx%k z%I#c5pq4NV%IjJ~r1^`6x2ULp&nt+3;J=4?5zfEphr|4X7zr(ubbe0GWp)8!0WP)| zd`FB-^h{iWLQE`-EX*%n@Uk#6v9j=ULpb^P_>P&F82O;r@D3I>7H)R-tFv8id{JcA zj|jYdx0dij5d*MLiZQ3~{u#FEVO={`ei{DqfvD>-QY%e{ccH+mkDE>>dEh*>!55>w z;W-sI6`)JOeln8NljrlltGT~K;ZYTdT%MKCyb=4!{z+@;tH8KxoPJ4u5K6T=Wd(DAbNDc8nY;eA@C4IO4&DL{8{{FtuV6ml!cifk4 z$d>dI?;#8pUmvW_{{C5qYeR2G=Mn>v5KC;HQ3^9$=7tf8Ro|hIMy*0oYKqQx&B-Y$W4$G0=ui0)0L`e?4X2Wpf9A`;N?D;qz5k=4bn>LC3V0P#OP`bVSRr;~GKY|I0 z+8RFoN>3xD_s7R?fL_lA;o4OcZLg`|9bL=;u16y9I3>PA6#Z7%*F{&nPEa9jg>J&` z*plU^S6j?oE)NG!bs>w2{!!umw6^vIQA!)Z^RWQun@xM3nvr;Wu0= z!{ajggYde!={6zixBc}Zd&R*qeVO2_+|r0cgI6&6f!SxOyLY)^Uj*g>9NxVw)p7f> zl?%s?ll%}jVXbx{h1U`49U`Pk@>)-GF*|}eII%H&k-!(lO^qrxeHI&phb_+vQBvNe z&XG57?M=$x61FkzOuNt4UEk&&Bb&J#%t>8%A-pSbtBlC`MuQ=WKR#AMYkKpcZ+2$! z#{7J&*~usG#7u5t{y4(kC*WB+RW)b>X-tR$A?=H0^LW*jv<>4*%l5Iix0zd7M$Nn~ zzmIp>%oAU|vh$=S0kb9C=LkGc#Vwk~yL*SB(u>}oYfv>_y6JPW`gpeI$v=0+alFm= z+NG}T)ZmI@S1Cj7VL)nh0&>mQCrW6=wFTqdb?HlK-gh_;BPfN~J4TC;R&HL zui4cON~Z?ar|GKgu|W&kV6yYtCz|_<;l^p0^JwCBcPWA*L!;EqPh5X1bh{hPiz%Fe zdWAhxx&;9|G`OiHp6$&##<_rlKxv${;<_Yka^(4(!@Q`u2b)ncETPGlJIde4POoI+ z8O4}CocjF+HfUGJ1WVCrPTZ6y@|v6>7dqZuHNhZynNoZ8CAs;VpV$k=ANZE<{Tw!rUXuTm^micBU=vsnl^jZWx>M=_oYFXG(ai0fvf8}9 zUrKZRkZ)QqHPuh9d_tBikJCMI}YEw%8y){_9$gCjKfMV)e?(*p4hNU!^fE-cGcT1LrSjmf3x&lP6_Lg#{@V2rO+_Xh zx{8wj6m;le^1C0@VIoqR(W@9*gv=H}KN4K?rxyn_TOUtvI;yte79LtyNe4{%bXfvuK`QBC3&>NNuoMek=oIbpc zVj=yxz}`~^q4^%P=QxTLq|BcFxK+X*f}YX3tn34L1RvZrQniDfURh`Tpug2NZL(KW z7L+hXr1K_4z?Wzh1tG-jmWcZ})chO+VIC)W3HEC?7}NQoEQ?=FeYdSN$oSNDb3YJV z_wx72ebxHr2bXD#0U^VkO8e>F4=0VJA|Hi%Kb7JEcofkdpPfcdLhJqfXqLspotD#U z7PD4U8+e5;UQ>_^&-S{NRNYe6rM~tKH`J;4xjHa_$prm*?4=KofiV~%oxg?owi-~f zQUdQ{gG!-pLO(Q)W`-BuB~`UiG`5^I8hPH_@s1W_j3mNzqR~G6_5$)Y-aEUu`Fl1i`B}Zhw ziN0;y#EUC##KrPYq^2=7C4G)Nn`u75U(FxNKrx55n2=r3iiRPK@o85y^ zv3qd_9GxYP=O_qN!@_3{P6WsxuE+0DI8qN69W4u3K>JVl!96y1ufna(D~{Vpp7PXu zGkxZ)SdKDUehgQq2CD#>+9dm=-CiS z0(Wh~KLTikP{@9VNX3mWI=thNy*2^pQw^PO9NM&k3qNNn5Jg{6i@JYUC=-u$)$XRv zZI%kP3Ca@APQqrZOdbbg-i6a;y(YmtZ^xg$bfAuv*JL$0*$^GG~gXE|u1umBrqJ-8Z zYhoOE7YJmJjoe*n7N3UPBadR@y-w!9S5;-TL{RUNRbD#37b*o@%wQ1u+MEjS6$>)W^c_dL*=T2Spz= z_FVd-rJz2;+yLG&fmGI-FPd|96UjRL6VW%7qG1qg(~BBwGx-7R8Hg)?!cS7@8(gpx%6r%0_@gJ(oUP9q-RdnGj(4<7)PbfW1^vZsh7O$-7T**i zMC>m4Rd%{l8M~$P$5HUN!Y4_pt)GvYFh|E!D%lNMBaZ zk;q5}U!ZRK7_%Fs_#=VO)A^?Bs!LuNneG2xzld$5K~9oy;i9LqS%SH3ik79)d$*EeMf2$(p7Y3Y*{nvFy0lT(c*ula}EqX82~;svfs$WYaEoO&6E4YEU&lj{I0~^`>@jyE;B8|FfOmB~CRRQ;(S?@?g`L#M0{B z(;u-1gF_r=w6ej)eN2kNvC*b=5X>s03vXSSog9_YUrNZy2^4c%eENkXJEe?NT z5%oMq`JwST@^KpnEPl+TDqqb+oZm8@raAKqaWjq{)lDO<9(|mHv{b3sK!cex?jq)f;juW9eF(2cvd^gXU1APk>i)=HK1CS@tanW zbWaOv`O$l}c}6jZK*`pN_-W<+q8Llh$0Lm##&3H7)9-;t(rtH@flx)X??p!40&6*? z&v+oVG^)rf$Ioc4MJX@u&f1z7N~x>?yn`f;nCUCgJ4Li)!u-OPK>uVy8{f1~5z&ly zCck_Vl(|H8y^Q1S^3u~XLPK<%tY?})0c-(%3W!Cqonfu?AM@0s0 zdBAJ)wI~w=IuNZ_0ND;fTtwyYqq##OwqUl*7n!o}CWl4>%%VJtM{M%0Q-^YQQICGs zG9oG7eq{sU9VewGAPXyMI(!wIStXmScenF|Js<+mCaN_<of_F=C)%bbCuv*^iH5W0+0;#hC?OiI~R-F}_OxX17A;bMfr3e$4r zwbs|OeUWLRa<p(Av6J!Oi%-2P%zFhu<;iGHr0iq5Bk4@R0vv<*aNeQqi?z6iUF9>>Z| z^L7kUy?g;elOJ23At3TE^IC|l-`9ek<3w)QH}3DoinjQE(q!+`HueFiHc~QES>>RI?Od=r43&r=tHT;$p}D?Q;YoSrRxKbl;o{8P+#sA#o%?@xi7cy zp(b1KI?R2eJE)i|L>RXFw7B-xOv$*|k^WQjR#ir(o&;kS4=SN^s(Uv$>cEF7#a1bO$4_76{)nHX3Y7%8R#L*oW9V! zHxUe7hKgKFi)YoAUb~G5syvcmWM`AKG+)Nr(<)kpPK0T-yxxReUELmUniYR7 z{h1b9A{yAZJ=0)hqBt{`( z{SY#H_`NxguNf$Dh=`Hgk5DhIYXyfiEHHrQ9qnHFotU9KeA(Cm>!PtJU4&eHrD!q8V!3$#Yho2Yug0!; zyr|aHrWA{v9~07Y()oUO61cAq8(#p(gmT%3p~UmMIjoCBPGyvns#A;w5R0&fvtePU zutVkweg$I1v*Ju>47+<&Z2hv`*(F-JW-YLf*YRes)$JR!Vl>-cooZ1&Z`Eu#u)|K= zJ*b+Vvn}Xw#)!T~wtL^cKU`_jvAl{S8FPWWDMr9S0U9hzueM4V-?TpyMXDAdF_c z!iT@TTcof372dQX&L)pkeWO6QicbSfsBw!s^nJGCM7RsTowTtUPSS9%FsqHEvvR*_ zbY|ynE)QO_xQ@J1(1X8LOIbgqp$GVt#9RzpBj_;dr!fj@f1-ZPfdpu^pbC4HZu zzbl5KHpkpq$5l`cMZGvUz4-{pm3E(%VawWm{6=OV=eVeHHM`jLu?*RbDkEZ6bB9$d zO4r8A0HX{cg@OpTxzlnkMp%TXL?K-*WT52@iI)BQeM?h+(FI#&O zpdph}B7 z{g6P!_(e;8#C`0pyHst><98{)99}Uag0+Z0s5j-W-pq1xmMXbtWqsZWLG}C~8$H{f zTdwJc3OEz8-zaEPb#lJ*Vg}D>&#OPCOq?JWS!J+gV0BV#5;YmOX<=AVR=<7&Ff!mw z+O^YZqCn{!`gLK#6BH9qFq2Gkfi@_fTcmxbA+ID!QmaEnrJO*4vHVyVSt%2e>aYHT zPK0Lh`Av^#y`~PwPq7=rSBd-!I5UDQFL>5of24jbRe=90k^e%0_{QUx?x!3Ahg6kH zlJ&w%8eH}Wt|Nl-g7_JM313=0mmCqa6FjltXFNSfy~3tmNEj?bCg20iSQZ){8L~xh zWbycKOhR)s_YxAK-B%o>Ya6t8q$&(;)i7S{P)l)drRp-B;H~af_W~GQ6E~W-<5*q* zM?gLO+AY~*+~pUER?@#uN*un$H@`1(F^t9m=zHjgj9wJ;a7xa+E^qhKIVhRfh8XhMZ#a&ajt(lTaf; zw$A-P1FM)}L|CwBv8@k!us>S-@?%`VqMD&Tz{KJ}&i%EJjN|jSqXtQ^U!C-o(=uDO zPt+u`1+r6t-8j-S-_3K=R}3n+iC51%)&;vbe`^hltK?+gHvwel>9|T(c3}wHh5ndA zj?v}~8!slz?o&Q-yd3*N{lU8vT0XU}TTgCssS!?CWkHN|GCHhu0BG~6osqC(N+?i0 zdhbKN1if=oZH?aNH$v^S1J1Bpc!(mihrTrWOk`xV$-!nWZx|fZhjgCa)naOjoj1Fq z*x7$XH_<5U^)(v(tl-%8sCLTAt7@M5Xcb34AWwdtC22FI@~XtL3}Nzk%U84+*7+&U zH>G{mPt|QE0P{D^g-69Pfo_ZDScLmB60T&=v)>aUnA;8F8F)xPHCDLX8>%=vs!~!c z=un)yuUw{fdBGwc(b9f(^uo=T0&dukD}RlC(m0M7s0!$bTAmjRjhD5Nd|y$OGq#8j z^J)k+ZL!#oT5d;?DK-_|TpGR;T51l?*~>}GBDnkKEWV6asDGORaX*{c zoH^8MhF1GI^VnRuoMbFyygD&;#+_ap@pbmTc7Q5qHdjefTy&+9%kFahnB0-utR=1* ze?=xrP=rYJhJq5(Bvdd>tMKWZ*uL+pwc2BK{;hL!^AVyf4lBQogx=j(igZ5AD$lEr z(=iQtLyi1hkRH_+H^1kcF2~oO{fhHmZe&m-yoY!)At%#yvm|1AymfuwWwWVN#~-%v=_Z!>7H=LeNQt%x=*ZK zbUv`NO(5!o9Qf%q;01;pPJ_HBMW+-A;;X1ROYZ)>vS)9%mQQs*+1}M!g;FBB} zZ4*!s3|I9~;6!wNrq#SGz_GFmj;n9LL}9HtAx&cs2*2+=L^oKtSNDsnAh9YYvBbJ$ z@yyLD5d;;5p#$zjwYp34k(6yZlDJbATWGnvzImB}qoi#3&>UysSc}R^$oJsUTQbuT z8{z)sD~!xJ=>tL1OAdvLACYSdoienfg8m`R2C!k}!?>p^TeS%%d>o3kMtSFtbMa+J zk`Fy2Gn+!mgMyw!29ZT$v7am2Tse8QI*5^Pe>kuV*~m!dIihIRNYt4{Qe!l)=w=Ml zO;I-=f2wZ3JZ2l>>BVMwZ!ld>4Ey!7=`m3=wfd10_W}NUy?Sqpg^|v-@dNt3{B^hN zSSUMZI|B<6QUzLQy6pvT;=$|6l{8Nu_8GGVHsk)q&OT|Pj-A`#p>Q>2w=8S{^icDc zkI%eH>Uo6`ibyFiw<+FrNkpEy$t-aArlQwpKQFdtqrP%)ySDX(KQdTBkDwAtUT>%T z@?wnffCbkvGW!*4NYHrKs-Klk4`xi-bhw8hQPvt1U;<;{zH<^LoroBJON@6oXdz>@ zqyKSf47#h&?j}L=V;mSTy}ue*}x)uS$1<){MsRYJeY#HTwfCi|Oy@#7~Ecdxgr|gmXVu>md%RG-yvXY(a0bm8R-t zhg4cGt^>OTc1nE^vc&3(uV$|FJ!PYd>Rjtc#e!(>x-4Bu!hUw zRFO!5vX|9)id^H5h3l%0mN%cve*UuOcDU=;3q8ku(t3&3MxBR++LVW?*yh`sn%H=t zF7962>AlEIug!3P<#cWIbazYNnDO9#dpHn{w#%9egG}{I1XCSR^&U2E5dAwmwIBPo zf?K29d9FAA<9T(;j71MUhe{<*jrXrte$cj^guNOxC$unyn&Onzs+C2~WL8^%RxL~Wxw2$Jvl<&J6Icc;HivX_P(uKi zB-~bO(**ZOyeQv>4MlykJDd#_b@34<*7n=5!~_uULd>(QfAqQFJ{sEUzjT}49Jt9l zTdKOW5|iVgl`$8gzX`j4tD_(8N_MdF1T_+6y#g2#5#gguo_V&(wmm^#NAi8FDn3vC zi6u|=nnaYLssy^Il#Jzzf!h{Re~vyBy1@{YJSmHsuQJ|#&uJrj@6F*hIA+7bgjBLf2?7Y{cJBPTx}hoB%ID=P~VGd&v* z_af;3x^RKtXP|x1WDEF6m2H;RN*s@GA=@5y@-+vU&B<4}pjK&kf}vU&;oIRzV0(It zFb#Pwqt9oi_wd&pU9<>PL0?Aw==|B-taj4B&6#qsYTN}y3afYC!PK5wNdK0Af4-}j zAT?wj`fF2ic+8(e@R2hQ<^sotb>Eu`XGh#QkCtL7$zF=OP8M#%X+Sd8+z8iAh6+;Y z#5O*N@VSY53ewJ*vmD&$P&fD}t}@r^u-xx^WU#vKA&ZvvTDFT_C z9*ty7gY8c@2*ovA<;U`W?3pWU|F}yN^7%~(NNtMwNDBHFdej9w=i*Wmha_Fp^I)3NejW=YhFqtq%vGDE& z=LBJWNnS1PK6DhxcaBzkiJ9y8(gPUUj$#zlQjYvlx%I&XSaK8?(^B0~D>yZ_9!HsD zW@eaLuoj*e5n>barZ4ZMDxyaZ$bILZ-aDiiD)0mZ;P5cz;0teKyiaH!qj0KFQmaU8 z${^wy@9e7zAV2w{txaKE(iJo0uW7Y$6U@@A*kkp4KZlczetotgpugE6Fy1*ePCJbE zC^=z!w%t8nG*V8?D@|VUDTU=B|EZ|vT`qE)Y7D8B!(QbtAHg2lZNbdp+fXWd>FqLn>A8C}Y!qLcMd9I^>}G=rjU?7-Y0_QvssuMhG3 zDyo|O$5?jkw3`l{+z}P9uuV{H#iCvKiY(dBSR~<=NnhjUAk3@b5y3poN*m)-p@P+Y zM88b-dW^l~de3%9cp;)J19v{4yB}h~8cI1n9nQw^%MT2GCyGX0i}2NCxEh#-9~Mg% z?`h&cy~H>-U@fEdWsJb+_|Z@OnKsCz^u+kl%1iO%#iQ$`6x51fdnBT6%Z)h%X<=o` zkUYRvv6+XJtliHpHqhkf&f$mVLadpWa*IMEzov3dOh;IE3iHi$ct~keBhPE}G_kkJ zA@UsTvGd{~UHRYZ^FPTL25`O1R^v^h%nx7Sir3xwpyw^C`mV_M;Fa|I!HUT=Id*B1 zH}k`{#${u~pCYAEy|1DQJII?i;?rrV_v+9k&cy4VOUJY2cH2>V%9_=ID(|Xv8y;2t z^eHnhk$z@XIg%&+nq%%OhBWQC!22TW``qQt#C5U+v|X8z?RapbDd?OAvC40)M;;N0 z_}J^#=^6hNv@j5Sdc>7jr%hGBw5Z%3HygDcwikn|;Y%cIs{D;0S-U*{kQRbI>3{UWo#o2_@ft_F7x95QiGY#9wI8!N zAGZuKqQF%M&$6?FV;M2;a^TzkZG%M#dYTLeMS6pbSFG>sDRjhwOQ&)_e_h8oy(FNu zQc+L;>6*)*6*PKR=OW(~4wlm0o7;JZ@x9KKHT75ez3Yq%*A+Uk=C_-YdLLy3b2fvt zZ^pWXoZ^KXsye#Tu%r>K66~aows5Xon>^6XWz?_;(N&OWe0c`8#F9(>yavYg&_1HQ z3&+NOtpB(YHuWHuBu>~qnCyz+MNbl~Z~u4qPqx?`$?d<-vzypgdDj*6D}%bbo7$db z+mNg+Cn;ew9T5nyMfg^Zw?M%}xeIB2gO)Uc&bRyedv>2JcSEO%xCQrz=Hn?Qra??s zIY0!vPbzn(FPVQ?&YjzHkmz*rJK-bj&cM;b;y~Y77MU@^0GRr0U@@ADg_P*BfiNth z@cXJR!aGi(=Nv=pt?ya6zrDe+;0aqz(=xV4jqlt1pwrN%3FvMM^)(K&SQFL~90y^U z%~z0nx(Q^|dk;jFwsu2j(rWqUrVleETMTD~4$kkK2-Fswbkf?Og8YE#dKA)xQ%5Gh z4o^2`UR(&?3+l+TrmR=(IyO|#U&Tj+22XWgAx~QS`f}dp6se_tJ$lJt7IBNlv>rw8 zF4TRRw8gP4FiIKx7SHCfJjID^XI*v zs}CxmyDqeRR*dOlEDLF ztr>8Z>N_HtMra|ZyeOMIBli<1&yI&)j3nZEj{8D0Y?$H zDKfeFFxD4VX~23U7pDI5ND-pU&lObf{e}0AC_a->{l)Vfr*QDXWm2mUYb6_9njtdJ z)fJ(ccFmHHL(;un#%4J?_emdi@jc1l4j4cLy`M@K>l2olU;#!uR&TL{i)V4Yq_=sZ zX``P~$3~Z4ltGBUxEr!($_QkQ7J$f(LQ0>qiYb~+ZF27*+@4%6?XP|tx7?YVk$SGu zqK$1QDk}_$IUtDpw5`MtLB<9l3vZbqTDuJYHWu&X8A`YEC82><>)FiHJ@5M^Ti#=x z*M5nSw5W58+=VW!SXOtUx1B%7X+e{uvQIzbClsFfm0+se6lk5QSa@R{4YHrJ0IC97 z=C)aTY(pZbQ^1!(1BF@hj|YX1>-!eOqiZVm{Zj61Pr8La%wMt9X)m82i*xo9eFa^b z1;0-k7ruXy%M5069AP;2X|2~4jtU`3vFbCxXfC_b5)Rm!LApHW;|TFAf8OW?Q|@r_ zBTH${O$ZJCpkC*f{v_8h3cRRvc_(%CP!v_6FZ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.2.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e1af5da85ec5ba1af07657b8586bc39a85cd4150 GIT binary patch literal 15652 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%0DsKb9JrR5 za}5m&SEO9(+E2vhjtO~+X^dTy6;PfVC`#jjtEaJn;b^1)l50ua9?;h4G{ zK{p%7<_AitEL(P`F9U?fY?MIx=7mSLJAGH>+7`t!4W#0TOy`5k@d8|wWLFeg7@qC7 zYHD9^@!Tf=!MO6a9>`pFgUG_{QJzAp<-FwK#obd9-NmOS+3gSsQNU(14rS`;=R8pp zp&sm_qzEE0rr7i5e2oqhCwfMW;SvitM&Aw;15fI5r>2 zp0l(azFqNgy6~4oPPl4ZI2mfy^=5DUD^a|8jR;!-X>Y%UCptOBCzUIe748-kw_ms(z0{mYU0e05kDp5Cw$ON*3|rwOp}>n^b>UyT5Aq5? z2TV65SI^6^J?-S_hc{#}aX@*IWA{=!-#$M7%X4Ua8oL*ne;(@3+k{R|83dg4dN61Og3#;!G%1W2GFtghfw zET<8b|HMN)+mAz@B_XEu6vR2>rNiQ*vD1uq@|A7Dwuszei|QstRX;*M|1eLklFI&5 z7!mtC&I{(6<@T+>pf~l{t(QF?+p3jM>t?_5vJo%Z7YS!uL+l z29?@w6t9z88E_mc)YDfy)&yyb3WPQJcM9K;CFgPIi!l~FjYeF&N^6tkuHj+LwnP=W zz9zLbu3rgoOS^Z;-LB*nJnhFXyQdi1Lj;f!UeDyn_DiWuaRK9>H*WEy%H|3Ely`;V zS>kD#664D+D?sF(K9;ejycb-6j<}JX zbN)Whur&G%&{=AsK5zHtuoSnce^D;JzWN|2^UnFSM=Jf>HBY1Q>cxp1{{UGR!j*0K z>$FL!d$B@JM6ml9`$<4slc`i(1VyGpzXeuH#kG-C$j%(f)rAOOgl{F|M?XF7&z?b4 znJtAWk>Tn3jX^n&3N7Ohm$k0$l&&AGF?w)$WVE;%GAYxBfk??S)HLITf7>Aj2b-8I wPeBwqt?OP2!NxGU2-RB6kd#mPQX}BsGM_C=-CeY7G~oic|JUt*0U=xtRR910 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.3.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_open.3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d7ad1a3a9718014d9a4bd69ac8ee88818f19e034 GIT binary patch literal 13255 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%0DA1{q+y3G+u!n<=&lK@YdZ8E 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�I2N#YoP+~+*_U< z0000Eo>h#?^2<6wY5%M6$c?O7T!{6+5T1A?_~f0aiH@A)A{u4OJ8|ax}CXjcD8u- z(Onur*{N2fpbOt{u>VQyV9{!bjkKQkx0d2{lK$%}X`U&7!3KUs9EbTw1Tel?Mh~L& zehnCzMMX+xk^%tTI`wEx)bStRzh3RXk6+om`|dUCtn`#i2X!z!OM!{=a6!86N9_yA zJ%t{rNEthK1r|ln~SE)7Ssh z(CiGr05C`eumDBVXBK|6GLnB!8URqz&imw9ZFWn8*`Z==Pyt?TRtIi1`?YmS0pQms zOsf6J0s!y>UPWxj`kt-?r+vskMGtPqVi8~}VqeA2%me@cY9f7ejJcoY1OMiw|4uV~ zTzA+STUOgzo>*-rVjdC@mjtP#2m-2Wj=H3sYouG+qm$)&HvUieosSSrCwF6kHHsjL zG2X)QW?jz@{Tg}kL^{Xu*O_z;WBK!RH~;_uteaEP_W2=IOoCoNbQN&GR^V0&HaKZ% z6$dD29t}Y6$ohb9I{ZGzSAab}2-rdIrcn=NB@-|K0Dx*jt=j7R^#5P4Z|)4y z{qoUY|N5cNwXOEQD4LhQtgtsgQLUrQGWacoL+=qH=pNmqdq!lfvvwk(88LJB;_pUb1Jn3MlpD0g3@Gfi)Z? zdIt}H{YEJOUPb)c`WHeVnuKLhOs13o004m2dKnfZvR8XY8*;k9@8^xH$N_UkD=Gib zyWp~2blBJPHpNdnKwh3wu-m3~IM~P5T%P8bQ%fSKn`FV-UW Date: Thu, 28 Jan 2021 23:59:01 -0600 Subject: [PATCH 2/5] Add experimental, pseudobiome-based village variation. --- mods/MAPGEN/mcl_villages/buildings.lua | 48 +++++++++++++++++++++++--- mods/MAPGEN/mcl_villages/const.lua | 48 ++++++++++++++++++-------- mods/MAPGEN/mcl_villages/paths.lua | 6 +++- mods/MAPGEN/mcl_villages/utils.lua | 5 +-- settingtypes.txt | 2 ++ 5 files changed, 88 insertions(+), 21 deletions(-) diff --git a/mods/MAPGEN/mcl_villages/buildings.lua b/mods/MAPGEN/mcl_villages/buildings.lua index 1dc9d0c25..db52bf2cc 100644 --- a/mods/MAPGEN/mcl_villages/buildings.lua +++ b/mods/MAPGEN/mcl_villages/buildings.lua @@ -270,7 +270,7 @@ function settlements.place_schematics_lvm(settlement_info, pr) local platform_material = settlement_info[i]["surface_mat"] platform_material_name = minetest.get_name_from_content_id(platform_material) -- pick random material - local material = wallmaterial[pr:next(1,#wallmaterial)] + --local material = wallmaterial[pr:next(1,#wallmaterial)] -- local building = building_all_info["mts"] local replace_wall = building_all_info["rplc"] @@ -280,7 +280,27 @@ function settlements.place_schematics_lvm(settlement_info, pr) {lua_use_comments = false, lua_num_indent_spaces = 0}).." return(schematic)" -- replace material if replace_wall == "y" then - schem_lua = schem_lua:gsub("mcl_core:cobble", material) + --Note, block substitution isn't matching node names exactly; so nodes that are to be substituted that have the same prefixes cause bugs. + -- Example: Attempting to swap out 'mcl_core:stonebrick'; which has multiple, additional sub-variants: (carved, cracked, mossy). Will currently cause issues, so leaving disabled. + if platform_material == "mcl_core:snow" or platform_material == "mcl_core:dirt_with_grass_snow" or platform_material == "mcl_core:podzol" then + schem_lua = schem_lua:gsub("mcl_core:tree", "mcl_core:sprucetree") + schem_lua = schem_lua:gsub("mcl_core:wood", "mcl_core:sprucewood") + --schem_lua = schem_lua:gsub("mcl_fences:fence", "mcl_fences:spruce_fence") + --schem_lua = schem_lua:gsub("mcl_stairs:slab_wood_top", "mcl_stairs:slab_sprucewood_top") + --schem_lua = schem_lua:gsub("mcl_stairs:stair_wood", "mcl_stairs:stair_sprucewood") + --schem_lua = schem_lua:gsub("mesecons_pressureplates:pressure_plate_wood_off", "mesecons_pressureplates:pressure_plate_sprucewood_off") + elseif platform_material == "mcl_core:sand" or platform_material == "mcl_core:redsand" then + schem_lua = schem_lua:gsub("mcl_core:tree", "mcl_core:sandstonecarved") + schem_lua = schem_lua:gsub("mcl_core:cobble", "mcl_core:sandstone") + schem_lua = schem_lua:gsub("mcl_core:wood", "mcl_core:sandstonesmooth") + --schem_lua = schem_lua:gsub("mcl_fences:fence", "mcl_fences:birch_fence") + --schem_lua = schem_lua:gsub("mcl_stairs:slab_wood_top", "mcl_stairs:slab_birchwood_top") + --schem_lua = schem_lua:gsub("mcl_stairs:stair_wood", "mcl_stairs:stair_birchwood") + --schem_lua = schem_lua:gsub("mesecons_pressureplates:pressure_plate_wood_off", "mesecons_pressureplates:pressure_plate_birchwood_off") + --schem_lua = schem_lua:gsub("mcl_stairs:stair_stonebrick", "mcl_stairs:stair_redsandstone") + --schem_lua = schem_lua:gsub("mcl_core:stonebrick", "mcl_core:redsandstonesmooth") + schem_lua = schem_lua:gsub("mcl_core:brick_block", "mcl_core:redsandstone") + end end schem_lua = schem_lua:gsub("mcl_core:dirt_with_grass", platform_material_name) @@ -321,7 +341,7 @@ function settlements.place_schematics(settlement_info, pr) local platform_material = settlement_info[i]["surface_mat"] --platform_material_name = minetest.get_name_from_content_id(platform_material) -- pick random material - local material = wallmaterial[pr:next(1,#wallmaterial)] + --local material = wallmaterial[pr:next(1,#wallmaterial)] -- local building = building_all_info["mts"] local replace_wall = building_all_info["rplc"] @@ -331,7 +351,27 @@ function settlements.place_schematics(settlement_info, pr) {lua_use_comments = false, lua_num_indent_spaces = 0}).." return(schematic)" -- replace material if replace_wall == "y" then - schem_lua = schem_lua:gsub("mcl_core:cobble", material) + --Note, block substitution isn't matching node names exactly; so nodes that are to be substituted that have the same prefixes cause bugs. + -- Example: Attempting to swap out 'mcl_core:stonebrick'; which has multiple, additional sub-variants: (carved, cracked, mossy). Will currently cause issues, so leaving disabled. + if platform_material == "mcl_core:snow" or platform_material == "mcl_core:dirt_with_grass_snow" or platform_material == "mcl_core:podzol" then + schem_lua = schem_lua:gsub("mcl_core:tree", "mcl_core:sprucetree") + schem_lua = schem_lua:gsub("mcl_core:wood", "mcl_core:sprucewood") + --schem_lua = schem_lua:gsub("mcl_fences:fence", "mcl_fences:spruce_fence") + --schem_lua = schem_lua:gsub("mcl_stairs:slab_wood_top", "mcl_stairs:slab_sprucewood_top") + --schem_lua = schem_lua:gsub("mcl_stairs:stair_wood", "mcl_stairs:stair_sprucewood") + --schem_lua = schem_lua:gsub("mesecons_pressureplates:pressure_plate_wood_off", "mesecons_pressureplates:pressure_plate_sprucewood_off") + elseif platform_material == "mcl_core:sand" or platform_material == "mcl_core:redsand" then + schem_lua = schem_lua:gsub("mcl_core:tree", "mcl_core:sandstonecarved") + schem_lua = schem_lua:gsub("mcl_core:cobble", "mcl_core:sandstone") + schem_lua = schem_lua:gsub("mcl_core:wood", "mcl_core:sandstonesmooth") + --schem_lua = schem_lua:gsub("mcl_fences:fence", "mcl_fences:birch_fence") + --schem_lua = schem_lua:gsub("mcl_stairs:slab_wood_top", "mcl_stairs:slab_birchwood_top") + --schem_lua = schem_lua:gsub("mcl_stairs:stair_wood", "mcl_stairs:stair_birchwood") + --schem_lua = schem_lua:gsub("mesecons_pressureplates:pressure_plate_wood_off", "mesecons_pressureplates:pressure_plate_birchwood_off") + --schem_lua = schem_lua:gsub("mcl_stairs:stair_stonebrick", "mcl_stairs:stair_redsandstone") + --schem_lua = schem_lua:gsub("mcl_core:stonebrick", "mcl_core:redsandstonesmooth") + schem_lua = schem_lua:gsub("mcl_core:brick_block", "mcl_core:redsandstone") + end end schem_lua = schem_lua:gsub("mcl_core:dirt_with_grass", platform_material) diff --git a/mods/MAPGEN/mcl_villages/const.lua b/mods/MAPGEN/mcl_villages/const.lua index 285152f54..20eeecd38 100644 --- a/mods/MAPGEN/mcl_villages/const.lua +++ b/mods/MAPGEN/mcl_villages/const.lua @@ -10,6 +10,7 @@ settlements.lvm = false settlements.last_settlement = os.time() +--[[ Manually set in 'buildings.lua' -- material to replace cobblestone with wallmaterial = { "mcl_core:junglewood", @@ -23,6 +24,7 @@ wallmaterial = { "mcl_core:sandstone", "mcl_core:sandstonesmooth2" } +--]] settlements.surface_mat = {} ------------------------------------------------------------------------------- -- Set array to list @@ -38,7 +40,7 @@ function settlements.grundstellungen() "mcl_core:sand", "mcl_core:redsand", --"mcl_core:silver_sand", - "mcl_core:snowblock" + "mcl_core:snow" } end -- @@ -52,19 +54,37 @@ schem_path = settlements.modpath.."/schematics/" -- -- list of schematics -- -schematic_table = { - {name = "large_house", mts = schem_path.."large_house.mts", hwidth = 11, hdepth = 12, hheight = 9, hsize = 14, max_num = 0.08, rplc = "n"}, - {name = "blacksmith", mts = schem_path.."blacksmith.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.055, rplc = "n"}, - {name = "butcher", mts = schem_path.."butcher.mts", hwidth = 11, hdepth = 8, hheight = 10, hsize = 14, max_num = 0.03, rplc = "n"}, - {name = "church", mts = schem_path.."church.mts", hwidth = 13, hdepth = 13, hheight = 14, hsize = 15, max_num = 0.04, rplc = "n"}, - {name = "farm", mts = schem_path.."farm.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.1, rplc = "n"}, - {name = "lamp", mts = schem_path.."lamp.mts", hwidth = 3, hdepth = 3, hheight = 13, hsize = 10, max_num = 0.1, rplc = "n"}, - {name = "library", mts = schem_path.."library.mts", hwidth = 12, hdepth = 12, hheight = 8, hsize = 13, max_num = 0.04, rplc = "n"}, - {name = "medium_house", mts = schem_path.."medium_house.mts", hwidth = 8, hdepth = 12, hheight = 8, hsize = 14, max_num = 0.08, rplc = "n"}, - {name = "small_house", mts = schem_path.."small_house.mts", hwidth = 9, hdepth = 7, hheight = 8, hsize = 13, max_num = 0.7, rplc = "n"}, - {name = "tavern", mts = schem_path.."tavern.mts", hwidth = 11, hdepth = 10, hheight = 10, hsize = 13, max_num = 0.050, rplc = "n"}, - {name = "well", mts = schem_path.."well.mts", hwidth = 6, hdepth = 8, hheight = 6, hsize = 10, max_num = 0.045, rplc = "n"}, -} +local basic_pseudobiome_villages = minetest.settings:get_bool("basic_pseudobiome_villages", false) + +if basic_pseudobiome_villages == true then + schematic_table = { + {name = "large_house", mts = schem_path.."large_house.mts", hwidth = 11, hdepth = 12, hheight = 9, hsize = 14, max_num = 0.08, rplc = "y"}, + {name = "blacksmith", mts = schem_path.."blacksmith.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.055, rplc = "y"}, + {name = "butcher", mts = schem_path.."butcher.mts", hwidth = 11, hdepth = 8, hheight = 10, hsize = 14, max_num = 0.03, rplc = "y"}, + {name = "church", mts = schem_path.."church.mts", hwidth = 13, hdepth = 13, hheight = 14, hsize = 15, max_num = 0.04, rplc = "y"}, + {name = "farm", mts = schem_path.."farm.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.1, rplc = "y"}, + {name = "lamp", mts = schem_path.."lamp.mts", hwidth = 3, hdepth = 3, hheight = 13, hsize = 10, max_num = 0.1, rplc = "n"}, + {name = "library", mts = schem_path.."library.mts", hwidth = 12, hdepth = 12, hheight = 8, hsize = 13, max_num = 0.04, rplc = "y"}, + {name = "medium_house", mts = schem_path.."medium_house.mts", hwidth = 8, hdepth = 12, hheight = 8, hsize = 14, max_num = 0.08, rplc = "y"}, + {name = "small_house", mts = schem_path.."small_house.mts", hwidth = 9, hdepth = 7, hheight = 8, hsize = 13, max_num = 0.7, rplc = "y"}, + {name = "tavern", mts = schem_path.."tavern.mts", hwidth = 11, hdepth = 10, hheight = 10, hsize = 13, max_num = 0.050, rplc = "y"}, + {name = "well", mts = schem_path.."well.mts", hwidth = 6, hdepth = 8, hheight = 6, hsize = 10, max_num = 0.045, rplc = "y"}, + } +else + schematic_table = { + {name = "large_house", mts = schem_path.."large_house.mts", hwidth = 11, hdepth = 12, hheight = 9, hsize = 14, max_num = 0.08, rplc = "n"}, + {name = "blacksmith", mts = schem_path.."blacksmith.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.055, rplc = "n"}, + {name = "butcher", mts = schem_path.."butcher.mts", hwidth = 11, hdepth = 8, hheight = 10, hsize = 14, max_num = 0.03, rplc = "n"}, + {name = "church", mts = schem_path.."church.mts", hwidth = 13, hdepth = 13, hheight = 14, hsize = 15, max_num = 0.04, rplc = "n"}, + {name = "farm", mts = schem_path.."farm.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.1, rplc = "n"}, + {name = "lamp", mts = schem_path.."lamp.mts", hwidth = 3, hdepth = 3, hheight = 13, hsize = 10, max_num = 0.1, rplc = "n"}, + {name = "library", mts = schem_path.."library.mts", hwidth = 12, hdepth = 12, hheight = 8, hsize = 13, max_num = 0.04, rplc = "n"}, + {name = "medium_house", mts = schem_path.."medium_house.mts", hwidth = 8, hdepth = 12, hheight = 8, hsize = 14, max_num = 0.08, rplc = "n"}, + {name = "small_house", mts = schem_path.."small_house.mts", hwidth = 9, hdepth = 7, hheight = 8, hsize = 13, max_num = 0.7, rplc = "n"}, + {name = "tavern", mts = schem_path.."tavern.mts", hwidth = 11, hdepth = 10, hheight = 10, hsize = 13, max_num = 0.050, rplc = "n"}, + {name = "well", mts = schem_path.."well.mts", hwidth = 6, hdepth = 8, hheight = 6, hsize = 10, max_num = 0.045, rplc = "n"}, + } +end -- -- list of settlements, load on server start up -- diff --git a/mods/MAPGEN/mcl_villages/paths.lua b/mods/MAPGEN/mcl_villages/paths.lua index 6601fc762..71347502d 100644 --- a/mods/MAPGEN/mcl_villages/paths.lua +++ b/mods/MAPGEN/mcl_villages/paths.lua @@ -164,7 +164,11 @@ function settlements.paths(settlement_info) -- replace surface node with mcl_core:grass_path if surface_point then - minetest.swap_node(surface_point,{name="mcl_core:grass_path"}) + if surface_mat == "mcl_core:sand" or surface_mat == "mcl_core:redsand" then + minetest.swap_node(surface_point,{name="mcl_core:sandstonesmooth2"}) + else + minetest.swap_node(surface_point,{name="mcl_core:grass_path"}) + end -- don't set y coordinate, surface might be too low or high starting_point.x = surface_point.x starting_point.z = surface_point.z diff --git a/mods/MAPGEN/mcl_villages/utils.lua b/mods/MAPGEN/mcl_villages/utils.lua index 0e892bfec..c55a55adb 100644 --- a/mods/MAPGEN/mcl_villages/utils.lua +++ b/mods/MAPGEN/mcl_villages/utils.lua @@ -9,7 +9,7 @@ local c_desert_sand = minetest.get_content_id("mcl_core:redsand" --local c_silver_sand = minetest.get_content_id("mcl_core:silver_sand") -- local c_air = minetest.get_content_id("air") -local c_snow = minetest.get_content_id("mcl_core:snowblock") +local c_snow = minetest.get_content_id("mcl_core:snow") local c_fern_1 = minetest.get_content_id("mcl_flowers:fern") local c_fern_2 = minetest.get_content_id("mcl_flowers:fern") local c_fern_3 = minetest.get_content_id("mcl_flowers:fern") @@ -55,7 +55,8 @@ function settlements.find_surface_lvm(pos, minp) --c_dirt_with_dry_grass, c_podzol, c_sand, - c_desert_sand + c_desert_sand, + c_snow } local cnt = 0 local itter -- count up or down diff --git a/settingtypes.txt b/settingtypes.txt index 5c9fc1778..d41ff369c 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -130,6 +130,8 @@ mcl_superflat_classic (Classic superflat map generation) bool false # game by a lot. mcl_node_particles (Block particles detail level) enum none high,medium,low,none +# If enabled, this will substitute a few blocks in village schematics so they blend into normal, snowy, and sandy areas. Defaults to false. +basic_pseudobiome_villages (Enables very basic, and experimental "pseudobiome-based" villages) bool false # If enabled, will run an LBM to fix the top 1/2 of double plants in mcimported worlds; defaults to true. fix_doubleplants (Mcimport double plant fixes) bool true From 30b4b9661ca1852f95114dd4422657738e5a5b37 Mon Sep 17 00:00:00 2001 From: kay27 Date: Fri, 29 Jan 2021 22:49:33 +0400 Subject: [PATCH 3/5] Villages cleanup --- mods/MAPGEN/mcl_villages/buildings.lua | 173 +--------------- mods/MAPGEN/mcl_villages/const.lua | 51 ++--- mods/MAPGEN/mcl_villages/convert_lua_mts.lua | 27 ++- mods/MAPGEN/mcl_villages/foundation.lua | 170 ++++------------ mods/MAPGEN/mcl_villages/init.lua | 173 ++-------------- mods/MAPGEN/mcl_villages/paths.lua | 93 --------- mods/MAPGEN/mcl_villages/utils.lua | 204 +++++-------------- 7 files changed, 150 insertions(+), 741 deletions(-) diff --git a/mods/MAPGEN/mcl_villages/buildings.lua b/mods/MAPGEN/mcl_villages/buildings.lua index db52bf2cc..05f08bdcc 100644 --- a/mods/MAPGEN/mcl_villages/buildings.lua +++ b/mods/MAPGEN/mcl_villages/buildings.lua @@ -61,8 +61,7 @@ function settlements.initialize_settlement_info(pr) local count_buildings = {} -- count_buildings table reset - for k,v in pairs(schematic_table) do - -- local name = schematic_table[v]["name"] + for k,v in pairs(settlements.schematic_table) do count_buildings[v["name"]] = 0 end @@ -74,96 +73,6 @@ function settlements.initialize_settlement_info(pr) return count_buildings, number_of_buildings, number_built end ------------------------------------------------------------------------------- --- fill settlement_info with LVM --------------------------------------------------------------------------------- -function settlements.create_site_plan_lvm(maxp, minp, pr) - local settlement_info = {} - local building_all_info - local possible_rotations = {"0", "90", "180", "270"} - -- find center of chunk - local center = { - x=maxp.x-half_map_chunk_size, - y=maxp.y, - z=maxp.z-half_map_chunk_size - } - -- find center_surface of chunk - local center_surface, surface_material = settlements.find_surface_lvm(center, minp) - -- go build settlement around center - if not center_surface then return false end - - -- add settlement to list - table.insert(settlements_in_world, center_surface) - -- save list to file - settlements.save() - -- initialize all settlement_info table - local count_buildings, number_of_buildings, number_built = settlements.initialize_settlement_info(pr) - -- first building is townhall in the center - building_all_info = schematic_table[1] - local rotation = possible_rotations[ pr:next(1, #possible_rotations ) ] - -- add to settlement info table - local index = 1 - settlement_info[index] = { - pos = center_surface, - name = building_all_info["name"], - hsize = building_all_info["hsize"], - rotat = rotation, - surface_mat = surface_material - } - -- increase index for following buildings - index = index + 1 - -- now some buildings around in a circle, radius = size of town center - local x, z, r = center_surface.x, center_surface.z, building_all_info["hsize"] - -- draw j circles around center and increase radius by math.random(2,5) - for j = 1,20 do - if number_built < number_of_buildings then - -- set position on imaginary circle - for j = 0, 360, 15 do - local angle = j * math.pi / 180 - local ptx, ptz = x + r * math.cos( angle ), z + r * math.sin( angle ) - ptx = settlements.round(ptx, 0) - ptz = settlements.round(ptz, 0) - local pos1 = { x=ptx, y=center_surface.y+50, z=ptz} - local pos_surface, surface_material = settlements.find_surface_lvm(pos1, minp) - if not pos_surface then break end - - local randomized_schematic_table = shuffle(schematic_table, pr) - -- pick schematic - local size = #randomized_schematic_table - for i = size, 1, -1 do - -- already enough buildings of that type? - if count_buildings[randomized_schematic_table[i]["name"]] < randomized_schematic_table[i]["max_num"]*number_of_buildings then - building_all_info = randomized_schematic_table[i] - -- check distance to other buildings - local distance_to_other_buildings_ok = settlements.check_distance(settlement_info, pos_surface, building_all_info["hsize"]) - if distance_to_other_buildings_ok then - -- count built houses - count_buildings[building_all_info["name"]] = count_buildings[building_all_info["name"]] +1 - - rotation = possible_rotations[ pr:next(1, #possible_rotations ) ] - number_built = number_built + 1 - settlement_info[index] = { - pos = pos_surface, - name = building_all_info["name"], - hsize = building_all_info["hsize"], - rotat = rotation, - surface_mat = surface_material - } - index = index + 1 - break - end - end - end - if number_of_buildings == number_built then - break - end - end - r = r + pr:next(2,5) - end - end - settlements.debug("really ".. number_built) - return settlement_info -end -------------------------------------------------------------------------------- -- fill settlement_info -------------------------------------------------------------------------------- function settlements.create_site_plan(maxp, minp, pr) @@ -188,7 +97,7 @@ function settlements.create_site_plan(maxp, minp, pr) -- initialize all settlement_info table local count_buildings, number_of_buildings, number_built = settlements.initialize_settlement_info(pr) -- first building is townhall in the center - building_all_info = schematic_table[1] + building_all_info = settlements.schematic_table[1] local rotation = possible_rotations[ pr:next(1, #possible_rotations ) ] -- add to settlement info table local index = 1 @@ -216,7 +125,7 @@ function settlements.create_site_plan(maxp, minp, pr) local pos_surface, surface_material = settlements.find_surface(pos1) if not pos_surface then break end - local randomized_schematic_table = shuffle(schematic_table, pr) + local randomized_schematic_table = shuffle(settlements.schematic_table, pr) -- pick schematic local size = #randomized_schematic_table for i = size, 1, -1 do @@ -255,80 +164,10 @@ end ------------------------------------------------------------------------------- -- evaluate settlement_info and place schematics ------------------------------------------------------------------------------- -function settlements.place_schematics_lvm(settlement_info, pr) - for i, built_house in ipairs(settlement_info) do - for j, schem in ipairs(schematic_table) do - if settlement_info[i]["name"] == schem["name"] then - building_all_info = schem - break - end - end - - local pos = settlement_info[i]["pos"] - local rotation = settlement_info[i]["rotat"] - -- get building node material for better integration to surrounding - local platform_material = settlement_info[i]["surface_mat"] - platform_material_name = minetest.get_name_from_content_id(platform_material) - -- pick random material - --local material = wallmaterial[pr:next(1,#wallmaterial)] - -- - local building = building_all_info["mts"] - local replace_wall = building_all_info["rplc"] - -- schematic conversion to lua - local schem_lua = minetest.serialize_schematic(building, - "lua", - {lua_use_comments = false, lua_num_indent_spaces = 0}).." return(schematic)" - -- replace material - if replace_wall == "y" then - --Note, block substitution isn't matching node names exactly; so nodes that are to be substituted that have the same prefixes cause bugs. - -- Example: Attempting to swap out 'mcl_core:stonebrick'; which has multiple, additional sub-variants: (carved, cracked, mossy). Will currently cause issues, so leaving disabled. - if platform_material == "mcl_core:snow" or platform_material == "mcl_core:dirt_with_grass_snow" or platform_material == "mcl_core:podzol" then - schem_lua = schem_lua:gsub("mcl_core:tree", "mcl_core:sprucetree") - schem_lua = schem_lua:gsub("mcl_core:wood", "mcl_core:sprucewood") - --schem_lua = schem_lua:gsub("mcl_fences:fence", "mcl_fences:spruce_fence") - --schem_lua = schem_lua:gsub("mcl_stairs:slab_wood_top", "mcl_stairs:slab_sprucewood_top") - --schem_lua = schem_lua:gsub("mcl_stairs:stair_wood", "mcl_stairs:stair_sprucewood") - --schem_lua = schem_lua:gsub("mesecons_pressureplates:pressure_plate_wood_off", "mesecons_pressureplates:pressure_plate_sprucewood_off") - elseif platform_material == "mcl_core:sand" or platform_material == "mcl_core:redsand" then - schem_lua = schem_lua:gsub("mcl_core:tree", "mcl_core:sandstonecarved") - schem_lua = schem_lua:gsub("mcl_core:cobble", "mcl_core:sandstone") - schem_lua = schem_lua:gsub("mcl_core:wood", "mcl_core:sandstonesmooth") - --schem_lua = schem_lua:gsub("mcl_fences:fence", "mcl_fences:birch_fence") - --schem_lua = schem_lua:gsub("mcl_stairs:slab_wood_top", "mcl_stairs:slab_birchwood_top") - --schem_lua = schem_lua:gsub("mcl_stairs:stair_wood", "mcl_stairs:stair_birchwood") - --schem_lua = schem_lua:gsub("mesecons_pressureplates:pressure_plate_wood_off", "mesecons_pressureplates:pressure_plate_birchwood_off") - --schem_lua = schem_lua:gsub("mcl_stairs:stair_stonebrick", "mcl_stairs:stair_redsandstone") - --schem_lua = schem_lua:gsub("mcl_core:stonebrick", "mcl_core:redsandstonesmooth") - schem_lua = schem_lua:gsub("mcl_core:brick_block", "mcl_core:redsandstone") - end - end - schem_lua = schem_lua:gsub("mcl_core:dirt_with_grass", platform_material_name) - - --[[ Disable special junglewood for now. - -- special material for spawning npcs - schem_lua = schem_lua:gsub("mcl_core:junglewood", "settlements:junglewood") - --]] - -- format schematic string - local schematic = loadstring(schem_lua)() - -- build foundation for the building an make room above - -- place schematic - - minetest.place_schematic_on_vmanip( - vm, - pos, - schematic, - rotation, - nil, - true) - end -end -------------------------------------------------------------------------------- --- evaluate settlement_info and place schematics -------------------------------------------------------------------------------- function settlements.place_schematics(settlement_info, pr) local building_all_info for i, built_house in ipairs(settlement_info) do - for j, schem in ipairs(schematic_table) do + for j, schem in ipairs(settlements.schematic_table) do if settlement_info[i]["name"] == schem["name"] then building_all_info = schem break @@ -338,7 +177,7 @@ function settlements.place_schematics(settlement_info, pr) local pos = settlement_info[i]["pos"] local rotation = settlement_info[i]["rotat"] -- get building node material for better integration to surrounding - local platform_material = settlement_info[i]["surface_mat"] + local platform_material = settlement_info[i]["surface_mat"] --platform_material_name = minetest.get_name_from_content_id(platform_material) -- pick random material --local material = wallmaterial[pr:next(1,#wallmaterial)] @@ -350,7 +189,7 @@ function settlements.place_schematics(settlement_info, pr) "lua", {lua_use_comments = false, lua_num_indent_spaces = 0}).." return(schematic)" -- replace material - if replace_wall == "y" then + if replace_wall then --Note, block substitution isn't matching node names exactly; so nodes that are to be substituted that have the same prefixes cause bugs. -- Example: Attempting to swap out 'mcl_core:stonebrick'; which has multiple, additional sub-variants: (carved, cracked, mossy). Will currently cause issues, so leaving disabled. if platform_material == "mcl_core:snow" or platform_material == "mcl_core:dirt_with_grass_snow" or platform_material == "mcl_core:podzol" then diff --git a/mods/MAPGEN/mcl_villages/const.lua b/mods/MAPGEN/mcl_villages/const.lua index 20eeecd38..09c174342 100644 --- a/mods/MAPGEN/mcl_villages/const.lua +++ b/mods/MAPGEN/mcl_villages/const.lua @@ -5,11 +5,6 @@ settlements.debug = function(message) minetest.log("verbose", "[mcl_villages] "..message) end --- switch for lvm -settlements.lvm = false - -settlements.last_settlement = os.time() - --[[ Manually set in 'buildings.lua' -- material to replace cobblestone with wallmaterial = { @@ -56,43 +51,25 @@ schem_path = settlements.modpath.."/schematics/" -- local basic_pseudobiome_villages = minetest.settings:get_bool("basic_pseudobiome_villages", false) -if basic_pseudobiome_villages == true then - schematic_table = { - {name = "large_house", mts = schem_path.."large_house.mts", hwidth = 11, hdepth = 12, hheight = 9, hsize = 14, max_num = 0.08, rplc = "y"}, - {name = "blacksmith", mts = schem_path.."blacksmith.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.055, rplc = "y"}, - {name = "butcher", mts = schem_path.."butcher.mts", hwidth = 11, hdepth = 8, hheight = 10, hsize = 14, max_num = 0.03, rplc = "y"}, - {name = "church", mts = schem_path.."church.mts", hwidth = 13, hdepth = 13, hheight = 14, hsize = 15, max_num = 0.04, rplc = "y"}, - {name = "farm", mts = schem_path.."farm.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.1, rplc = "y"}, - {name = "lamp", mts = schem_path.."lamp.mts", hwidth = 3, hdepth = 3, hheight = 13, hsize = 10, max_num = 0.1, rplc = "n"}, - {name = "library", mts = schem_path.."library.mts", hwidth = 12, hdepth = 12, hheight = 8, hsize = 13, max_num = 0.04, rplc = "y"}, - {name = "medium_house", mts = schem_path.."medium_house.mts", hwidth = 8, hdepth = 12, hheight = 8, hsize = 14, max_num = 0.08, rplc = "y"}, - {name = "small_house", mts = schem_path.."small_house.mts", hwidth = 9, hdepth = 7, hheight = 8, hsize = 13, max_num = 0.7, rplc = "y"}, - {name = "tavern", mts = schem_path.."tavern.mts", hwidth = 11, hdepth = 10, hheight = 10, hsize = 13, max_num = 0.050, rplc = "y"}, - {name = "well", mts = schem_path.."well.mts", hwidth = 6, hdepth = 8, hheight = 6, hsize = 10, max_num = 0.045, rplc = "y"}, - } -else - schematic_table = { - {name = "large_house", mts = schem_path.."large_house.mts", hwidth = 11, hdepth = 12, hheight = 9, hsize = 14, max_num = 0.08, rplc = "n"}, - {name = "blacksmith", mts = schem_path.."blacksmith.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.055, rplc = "n"}, - {name = "butcher", mts = schem_path.."butcher.mts", hwidth = 11, hdepth = 8, hheight = 10, hsize = 14, max_num = 0.03, rplc = "n"}, - {name = "church", mts = schem_path.."church.mts", hwidth = 13, hdepth = 13, hheight = 14, hsize = 15, max_num = 0.04, rplc = "n"}, - {name = "farm", mts = schem_path.."farm.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.1, rplc = "n"}, - {name = "lamp", mts = schem_path.."lamp.mts", hwidth = 3, hdepth = 3, hheight = 13, hsize = 10, max_num = 0.1, rplc = "n"}, - {name = "library", mts = schem_path.."library.mts", hwidth = 12, hdepth = 12, hheight = 8, hsize = 13, max_num = 0.04, rplc = "n"}, - {name = "medium_house", mts = schem_path.."medium_house.mts", hwidth = 8, hdepth = 12, hheight = 8, hsize = 14, max_num = 0.08, rplc = "n"}, - {name = "small_house", mts = schem_path.."small_house.mts", hwidth = 9, hdepth = 7, hheight = 8, hsize = 13, max_num = 0.7, rplc = "n"}, - {name = "tavern", mts = schem_path.."tavern.mts", hwidth = 11, hdepth = 10, hheight = 10, hsize = 13, max_num = 0.050, rplc = "n"}, - {name = "well", mts = schem_path.."well.mts", hwidth = 6, hdepth = 8, hheight = 6, hsize = 10, max_num = 0.045, rplc = "n"}, - } -end +settlements.schematic_table = { + {name = "large_house", mts = schem_path.."large_house.mts", hwidth = 11, hdepth = 12, hheight = 9, hsize = 14, max_num = 0.08 , rplc = basic_pseudobiome_villages }, + {name = "blacksmith", mts = schem_path.."blacksmith.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.055, rplc = basic_pseudobiome_villages }, + {name = "butcher", mts = schem_path.."butcher.mts", hwidth = 11, hdepth = 8, hheight = 10, hsize = 14, max_num = 0.03 , rplc = basic_pseudobiome_villages }, + {name = "church", mts = schem_path.."church.mts", hwidth = 13, hdepth = 13, hheight = 14, hsize = 15, max_num = 0.04 , rplc = basic_pseudobiome_villages }, + {name = "farm", mts = schem_path.."farm.mts", hwidth = 7, hdepth = 7, hheight = 13, hsize = 13, max_num = 0.1 , rplc = basic_pseudobiome_villages }, + {name = "lamp", mts = schem_path.."lamp.mts", hwidth = 3, hdepth = 3, hheight = 13, hsize = 10, max_num = 0.1 , rplc = false }, + {name = "library", mts = schem_path.."library.mts", hwidth = 12, hdepth = 12, hheight = 8, hsize = 13, max_num = 0.04 , rplc = basic_pseudobiome_villages }, + {name = "medium_house", mts = schem_path.."medium_house.mts", hwidth = 8, hdepth = 12, hheight = 8, hsize = 14, max_num = 0.08 , rplc = basic_pseudobiome_villages }, + {name = "small_house", mts = schem_path.."small_house.mts", hwidth = 9, hdepth = 7, hheight = 8, hsize = 13, max_num = 0.7 , rplc = basic_pseudobiome_villages }, + {name = "tavern", mts = schem_path.."tavern.mts", hwidth = 11, hdepth = 10, hheight = 10, hsize = 13, max_num = 0.050, rplc = basic_pseudobiome_villages }, + {name = "well", mts = schem_path.."well.mts", hwidth = 6, hdepth = 8, hheight = 6, hsize = 10, max_num = 0.045, rplc = basic_pseudobiome_villages }, +} + -- -- list of settlements, load on server start up -- settlements_in_world = {} -- --- min_distance between settlements --- -settlements.min_dist_settlements = 64 -- -- maximum allowed difference in height for building a sttlement -- diff --git a/mods/MAPGEN/mcl_villages/convert_lua_mts.lua b/mods/MAPGEN/mcl_villages/convert_lua_mts.lua index e66905ba0..cf30e0066 100644 --- a/mods/MAPGEN/mcl_villages/convert_lua_mts.lua +++ b/mods/MAPGEN/mcl_villages/convert_lua_mts.lua @@ -1,23 +1,22 @@ -- function settlements.convert_mts_to_lua() - local building = schem_path.."townhall.mts" - local str = minetest.serialize_schematic(building, "lua", {lua_use_comments = true, lua_num_indent_spaces = 0}).." return(schematic)" - local schematic = loadstring(str)() - local file = io.open(schem_path.."church"..".lua", "w") - file:write(dump(schematic)) - file:close() -print(dump(schematic)) + local building = schem_path.."townhall.mts" + local str = minetest.serialize_schematic(building, "lua", {lua_use_comments = true, lua_num_indent_spaces = 0}).." return(schematic)" + local schematic = loadstring(str)() + local file = io.open(schem_path.."church"..".lua", "w") + file:write(dump(schematic)) + file:close() + print(dump(schematic)) end - function settlements.mts_save() - local f = assert(io.open(schem_path.."hut.lua", "r")) - local content = f:read("*all").." return(schematic2)" - f:close() + local f = assert(io.open(schem_path.."hut.lua", "r")) + local content = f:read("*all").." return(schematic2)" + f:close() - local schematic2 = loadstring("schematic2 = "..content)() - local seb = minetest.serialize_schematic(schematic2, "mts", {}) + local schematic2 = loadstring("schematic2 = "..content)() + local seb = minetest.serialize_schematic(schematic2, "mts", {}) local filename = schem_path .. "hut2" .. ".mts" filename = filename:gsub("\"", "\\\""):gsub("\\", "\\\\") local file, err = io.open(filename, "wb") @@ -27,4 +26,4 @@ function settlements.mts_save() file:close() end print("Wrote: " .. filename) -end \ No newline at end of file +end diff --git a/mods/MAPGEN/mcl_villages/foundation.lua b/mods/MAPGEN/mcl_villages/foundation.lua index 677b4efdb..15936ef4c 100644 --- a/mods/MAPGEN/mcl_villages/foundation.lua +++ b/mods/MAPGEN/mcl_villages/foundation.lua @@ -1,28 +1,6 @@ ------------------------------------------------------------------------------- -- function to fill empty space below baseplate when building on a hill ------------------------------------------------------------------------------- -function settlements.ground_lvm(pos, pr) -- role model: Wendelsteinkircherl, Brannenburg - local c_dirt = minetest.get_content_id("mcl_core:dirt") - local c_stone = minetest.get_content_id("mcl_core:stone") - -- - local p2 = vector.new(pos) - local cnt = 0 - local mat = c_dirt - p2.y = p2.y-1 - while true do - cnt = cnt+1 - if cnt > 20 then break end - if cnt>pr:next(2,4) then mat = c_stone end - --minetest.swap_node(p2, {name="mcl_core:"..mat}) - local vi = va:index(p2.x, p2.y, p2.z) - data[vi] = mat - p2.y = p2.y-1 - end - -- return data -end -------------------------------------------------------------------------------- --- function to fill empty space below baseplate when building on a hill -------------------------------------------------------------------------------- function settlements.ground(pos, pr) -- role model: Wendelsteinkircherl, Brannenburg local p2 = vector.new(pos) local cnt = 0 @@ -41,113 +19,47 @@ end ------------------------------------------------------------------------------- -- function clear space above baseplate ------------------------------------------------------------------------------- -function settlements.terraform_lvm(settlement_info, pr) - local c_air = minetest.get_content_id("air") - local fheight - local fwidth - local fdepth - - - for i, built_house in ipairs(settlement_info) do - -- pick right schematic_info to current built_house - for j, schem in ipairs(schematic_table) do - if settlement_info[i]["name"] == schem["name"] - then - schematic_data = schem - break - end - end - local pos = settlement_info[i]["pos"] - if settlement_info[i]["rotat"] == "0" or settlement_info[i]["rotat"] == "180" - then - fwidth = schematic_data["hwidth"] - fdepth = schematic_data["hdepth"] - else - fwidth = schematic_data["hdepth"] - fdepth = schematic_data["hwidth"] - end - fheight = schematic_data["hheight"] * 3 -- remove trees and leaves above - -- - -- now that every info is available -> create platform and clear space above - -- - for zi = 0,fdepth-1 do - for yi = 0,fheight do - for xi = 0,fwidth-1 do - if yi == 0 then - local p = {x=pos.x+xi, y=pos.y, z=pos.z+zi} - settlements.ground_lvm(p, pr) - else - --break --todo - -- write ground - local vi = va:index(pos.x+xi, pos.y+yi, pos.z+zi) - if data[vi] ~= c_air - --local node = minetest.get_node_or_nil({x=p5.x+xi, y=p5.y+yi, z=p5.z+zi}) - --if node then - --if node.name ~= "air" - then - --minetest.swap_node({x=pos.x+xi, y=pos.y+yi, z=pos.z+zi},{name="air"}) - data[vi] = c_air - end - end - end - end - end - - end -end -------------------------------------------------------------------------------- --- function clear space above baseplate -------------------------------------------------------------------------------- function settlements.terraform(settlement_info, pr) - local fheight - local fwidth - local fdepth - local schematic_data + local fheight, fwidth, fdepth, schematic_data - for i, built_house in ipairs(settlement_info) do - -- pick right schematic_info to current built_house - for j, schem in ipairs(schematic_table) do - if settlement_info[i]["name"] == schem["name"] - then - schematic_data = schem - break - end - end - local pos = settlement_info[i]["pos"] - if settlement_info[i]["rotat"] == "0" or settlement_info[i]["rotat"] == "180" - then - fwidth = schematic_data["hwidth"] - fdepth = schematic_data["hdepth"] - else - fwidth = schematic_data["hdepth"] - fdepth = schematic_data["hwidth"] - end - --fheight = schematic_data["hheight"] * 3 -- remove trees and leaves above - fheight = schematic_data["hheight"] -- remove trees and leaves above - -- - -- now that every info is available -> create platform and clear space above - -- - for xi = 0,fwidth-1 do - for zi = 0,fdepth-1 do - for yi = 0,fheight *3 do - if yi == 0 then - local p = {x=pos.x+xi, y=pos.y, z=pos.z+zi} - settlements.ground(p, pr) - else - -- write ground - local p = {x=pos.x+xi, y=pos.y+yi, z=pos.z+zi} - minetest.forceload_block(p) - local node = minetest.get_node_or_nil(p) - if node then - if node.name ~= "air" - then - minetest.swap_node(p,{name="air"}) - end - end - end - end - end - end - - end + for i, built_house in ipairs(settlement_info) do + -- pick right schematic_info to current built_house + for j, schem in ipairs(settlements.schematic_table) do + if settlement_info[i]["name"] == schem["name"] then + schematic_data = schem + break + end + end + local pos = settlement_info[i]["pos"] + if settlement_info[i]["rotat"] == "0" or settlement_info[i]["rotat"] == "180" then + fwidth = schematic_data["hwidth"] + fdepth = schematic_data["hdepth"] + else + fwidth = schematic_data["hdepth"] + fdepth = schematic_data["hwidth"] + end + --fheight = schematic_data["hheight"] * 3 -- remove trees and leaves above + fheight = schematic_data["hheight"] -- remove trees and leaves above + -- + -- now that every info is available -> create platform and clear space above + -- + for xi = 0,fwidth-1 do + for zi = 0,fdepth-1 do + for yi = 0,fheight *3 do + if yi == 0 then + local p = {x=pos.x+xi, y=pos.y, z=pos.z+zi} + settlements.ground(p, pr) + else + -- write ground + local p = {x=pos.x+xi, y=pos.y+yi, z=pos.z+zi} + minetest.forceload_block(p) + local node = minetest.get_node_or_nil(p) + if node and node.name ~= "air" then + minetest.swap_node(p,{name="air"}) + end + end + end + end + end + end end diff --git a/mods/MAPGEN/mcl_villages/init.lua b/mods/MAPGEN/mcl_villages/init.lua index a931d9523..61e370d58 100644 --- a/mods/MAPGEN/mcl_villages/init.lua +++ b/mods/MAPGEN/mcl_villages/init.lua @@ -1,20 +1,12 @@ --- eclipse debugging lines ---require("debugger")(idehost, ideport, idekey) - ---zerobrane debugging lines ---package.cpath = package.cpath .. ";/usr/share/lua/5.2/?.so" ---package.path = package.path .. ";/usr/share/zbstudio/lualibs/mobdebug/?.lua" ---require('mobdebug').start() - settlements = {} -settlements.modpath = minetest.get_modpath("mcl_villages"); +settlements.modpath = minetest.get_modpath("mcl_villages") dofile(settlements.modpath.."/const.lua") dofile(settlements.modpath.."/utils.lua") dofile(settlements.modpath.."/foundation.lua") dofile(settlements.modpath.."/buildings.lua") dofile(settlements.modpath.."/paths.lua") -dofile(settlements.modpath.."/convert_lua_mts.lua") +--dofile(settlements.modpath.."/convert_lua_mts.lua") -- -- load settlements on server -- @@ -55,42 +47,20 @@ end -- on map generation, try to build a settlement -- local function build_a_settlement_no_delay(minp, maxp, blockseed) - local settlement_info local pr = PseudoRandom(blockseed) - -- + -- fill settlement_info with buildings and their data - -- - if settlements.lvm == true then - -- get LVM of current chunk - local vm, data, va, emin, emax = settlements.getlvm(minp, maxp) - settlement_info = settlements.create_site_plan_lvm(maxp, minp, pr) - else - settlement_info = settlements.create_site_plan(maxp, minp, pr) - end + local settlement_info = settlements.create_site_plan(maxp, minp, pr) if not settlement_info then return end -- evaluate settlement_info and prepair terrain - if settlements.lvm == true then - settlements.terraform_lvm(settlement_info, pr) - else - settlements.terraform(settlement_info, pr) - end + settlements.terraform(settlement_info, pr) -- evaluate settlement_info and build paths between buildings - if settlements.lvm == true then - settlements.paths_lvm(settlement_info, minp) - else - settlements.paths(settlement_info) - end + settlements.paths(settlement_info) -- evaluate settlement_info and place schematics - if settlements.lvm == true then - vm:set_data(data) - settlements.place_schematics_lvm(settlement_info, pr) - vm:write_to_map(true) - else - settlements.place_schematics(settlement_info, pr) - end + settlements.place_schematics(settlement_info, pr) -- evaluate settlement_info and initialize furnaces and chests settlements.initialize_nodes(settlement_info, pr) @@ -112,126 +82,27 @@ minetest.register_on_generated(function(minp, maxp, blockseed) -- don't build settlement underground if maxp.y < 0 then return end - -- don't build settlements too close to each other - --[[ - local center_of_chunk = { - x=maxp.x-half_map_chunk_size, - y=maxp.y-half_map_chunk_size, - z=maxp.z-half_map_chunk_size - } - local dist_ok = settlements.check_distance_other_settlements(center_of_chunk) - if dist_ok == false then return end - ]] - -- don't build settlements on (too) uneven terrain local height_difference = settlements.evaluate_heightmap(minp, maxp) if height_difference > max_height_difference then return end + -- new way - slow :((((( minetest.emerge_area(vector.subtract(minp,24), vector.add(maxp,24), ecb_build_a_settlement, {minp = vector.new(minp), maxp=vector.new(maxp), blockseed=blockseed}) -- old way - wait 3 seconds: -- minetest.after(3, ecb_build_a_settlement, nil, 1, 0, {minp = vector.new(minp), maxp=vector.new(maxp), blockseed=blockseed}) end) --- --- manually place buildings, for debugging only --- -minetest.register_craftitem("mcl_villages:tool", { - description = "mcl_villages build tool", - inventory_image = "default_tool_woodshovel.png", - - --[[ Disable on_use for now. - -- build single house - -- - on_use = function(itemstack, placer, pointed_thing) - local center_surface = pointed_thing.under - if center_surface then - local building_all_info = {name = "blacksmith", - mts = schem_path.."blacksmith.mts", - hsize = 13, - max_num = 0.9, - rplc = "n"} - settlements.build_schematic(center_surface, - building_all_info["mts"], - building_all_info["rplc"], - building_all_info["name"]) - --- settlements.convert_mts_to_lua() --- settlements.mts_save() - end - end, ---]] - -- - -- build ssettlement - -- - on_place = function(itemstack, placer, pointed_thing) - local pr = PseudoRandom(math.random(0,32767)) - -- enable debug routines - local center_surface = pointed_thing.under - if center_surface then - local minp = { - x=center_surface.x-half_map_chunk_size, - y=center_surface.y-half_map_chunk_size, - z=center_surface.z-half_map_chunk_size - } - local maxp = { - x=center_surface.x+half_map_chunk_size, - y=center_surface.y+half_map_chunk_size, - z=center_surface.z+half_map_chunk_size - } - -- - -- get LVM of current chunk - -- - local vm, data, va, emin, emax = settlements.getlvm(minp, maxp) - -- - -- fill settlement_info with buildings and their data - -- - local start_time = os.time() - local settlement_info - if settlements.lvm == true then - settlement_info = settlements.create_site_plan_lvm(maxp, minp, pr) - else - settlement_info = settlements.create_site_plan(maxp, minp, pr) - end - if not settlement_info then return end - -- - -- evaluate settlement_info and prepair terrain - -- - if settlements.lvm == true then - settlements.terraform_lvm(settlement_info, pr) - else - settlements.terraform(settlement_info, pr) - end - - -- - -- evaluate settlement_info and build paths between buildings - -- - if settlements.lvm == true then - settlements.paths_lvm(settlement_info, minp) - else - settlements.paths(settlement_info) - end - -- - -- evaluate settlement_info and place schematics - -- - if settlements.lvm == true then - vm:set_data(data) - settlements.place_schematics_lvm(settlement_info, pr) - vm:write_to_map(true) - else - settlements.place_schematics(settlement_info, pr) - end - - -- - -- evaluate settlement_info and initialize furnaces and chests - -- - settlements.initialize_nodes(settlement_info, pr) - local end_time = os.time() - minetest.chat_send_all("Time ".. end_time - start_time) --- - --settlements.convert_mts_to_lua() - --settlements.mts_save() - - end - end - }) - +-- manually place villages +if minetest.is_creative_enabled("") then + minetest.register_craftitem("mcl_villages:tool", { + description = "mcl_villages build tool", + inventory_image = "default_tool_woodshovel.png", + -- build ssettlement + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.under then return end + local minp = vector.subtract( pointed_thing.under, half_map_chunk_size) + local maxp = vector.add( pointed_thing.under, half_map_chunk_size) + build_a_settlement_no_delay(minp, maxp, math.random(0,32767)) + end + }) +end diff --git a/mods/MAPGEN/mcl_villages/paths.lua b/mods/MAPGEN/mcl_villages/paths.lua index 71347502d..4973171a6 100644 --- a/mods/MAPGEN/mcl_villages/paths.lua +++ b/mods/MAPGEN/mcl_villages/paths.lua @@ -1,99 +1,6 @@ ------------------------------------------------------------------------------- -- generate paths between buildings ------------------------------------------------------------------------------- -function settlements.paths_lvm(settlement_info, minp) - local c_grasspath = minetest.get_content_id("mcl_core:grass_path") - local starting_point - local end_point - local distance - --for k,v in pairs(settlement_info) do - starting_point = settlement_info[1]["pos"] - for o,p in pairs(settlement_info) do - - end_point = settlement_info[o]["pos"] - if starting_point ~= end_point - then - -- loop until end_point is reched (distance == 0) - while true do - - -- define surrounding pos to starting_point - local north_p = {x=starting_point.x+1, y=starting_point.y, z=starting_point.z} - local south_p = {x=starting_point.x-1, y=starting_point.y, z=starting_point.z} - local west_p = {x=starting_point.x, y=starting_point.y, z=starting_point.z+1} - local east_p = {x=starting_point.x, y=starting_point.y, z=starting_point.z-1} - -- measure distance to end_point - local dist_north_p_to_end = math.sqrt( - ((north_p.x - end_point.x)*(north_p.x - end_point.x))+ - ((north_p.z - end_point.z)*(north_p.z - end_point.z)) - ) - local dist_south_p_to_end = math.sqrt( - ((south_p.x - end_point.x)*(south_p.x - end_point.x))+ - ((south_p.z - end_point.z)*(south_p.z - end_point.z)) - ) - local dist_west_p_to_end = math.sqrt( - ((west_p.x - end_point.x)*(west_p.x - end_point.x))+ - ((west_p.z - end_point.z)*(west_p.z - end_point.z)) - ) - local dist_east_p_to_end = math.sqrt( - ((east_p.x - end_point.x)*(east_p.x - end_point.x))+ - ((east_p.z - end_point.z)*(east_p.z - end_point.z)) - ) - -- evaluate which pos is closer to the end_point - if dist_north_p_to_end <= dist_south_p_to_end and - dist_north_p_to_end <= dist_west_p_to_end and - dist_north_p_to_end <= dist_east_p_to_end - then - starting_point = north_p - distance = dist_north_p_to_end - - elseif dist_south_p_to_end <= dist_north_p_to_end and - dist_south_p_to_end <= dist_west_p_to_end and - dist_south_p_to_end <= dist_east_p_to_end - then - starting_point = south_p - distance = dist_south_p_to_end - - elseif dist_west_p_to_end <= dist_north_p_to_end and - dist_west_p_to_end <= dist_south_p_to_end and - dist_west_p_to_end <= dist_east_p_to_end - then - starting_point = west_p - distance = dist_west_p_to_end - - elseif dist_east_p_to_end <= dist_north_p_to_end and - dist_east_p_to_end <= dist_south_p_to_end and - dist_east_p_to_end <= dist_west_p_to_end - then - starting_point = east_p - distance = dist_east_p_to_end - end - -- find surface of new starting point - local surface_point, surface_mat = settlements.find_surface_lvm(starting_point, minp) - -- replace surface node with mcl_core:grass_path - if surface_point - then - local vi = va:index(surface_point.x, surface_point.y, surface_point.z) - data[vi] = c_grasspath - - --minetest.swap_node(surface_point,{name="mcl_core:grass_path"}) - -- don't set y coordinate, surface might be too low or high - starting_point.x = surface_point.x - starting_point.z = surface_point.z - end - if distance <= 1 or - starting_point == end_point - then - break - end - end - end - end - --end - --return data -end -------------------------------------------------------------------------------- --- generate paths between buildings -------------------------------------------------------------------------------- function settlements.paths(settlement_info) local starting_point local end_point diff --git a/mods/MAPGEN/mcl_villages/utils.lua b/mods/MAPGEN/mcl_villages/utils.lua index c55a55adb..96d540b57 100644 --- a/mods/MAPGEN/mcl_villages/utils.lua +++ b/mods/MAPGEN/mcl_villages/utils.lua @@ -1,5 +1,3 @@ -mcl_villages = {} - local c_dirt_with_grass = minetest.get_content_id("mcl_core:dirt_with_grass") local c_dirt_with_snow = minetest.get_content_id("mcl_core:dirt_with_grass_snow") --local c_dirt_with_dry_grass = minetest.get_content_id("mcl_core:dirt_with_dry_grass") @@ -43,57 +41,6 @@ function settlements.round(num, numDecimalPlaces) return math.floor(num * mult + 0.5) / mult end -------------------------------------------------------------------------------- --- function to find surface block y coordinate -------------------------------------------------------------------------------- -function settlements.find_surface_lvm(pos, minp) - --ab hier altes verfahren - local p6 = vector.new(pos) - local surface_mat = { - c_dirt_with_grass, - c_dirt_with_snow, - --c_dirt_with_dry_grass, - c_podzol, - c_sand, - c_desert_sand, - c_snow - } - local cnt = 0 - local itter -- count up or down - local cnt_max = 200 - -- starting point for looking for surface - local vi = va:index(p6.x, p6.y, p6.z) - if data[vi] == nil then return nil end - local tmp = minetest.get_name_from_content_id(data[vi]) - if data[vi] == c_air then - itter = -1 - else - itter = 1 - end - while cnt < cnt_max do - cnt = cnt+1 - local vi = va:index(p6.x, p6.y, p6.z) --- local tmp = minetest.get_name_from_content_id(data[vi]) --- if vi == nil --- then --- return nil --- end - for i, mats in ipairs(surface_mat) do - local node_check = va:index(p6.x, p6.y+1, p6.z) - if node_check and vi and data[vi] == mats and - (data[node_check] ~= c_water_source and - data[node_check] ~= c_water_flowing - ) - then - local tmp = minetest.get_name_from_content_id(data[node_check]) - return p6, mats - end - end - p6.y = p6.y + itter - if p6.y < 0 then return nil end - end - return nil --]] -end ------------------------------------------------------------------------------- -- function to find surface block y coordinate -- returns surface postion @@ -170,79 +117,58 @@ end -- check distance for new building ------------------------------------------------------------------------------- function settlements.check_distance(settlement_info, building_pos, building_size) - local distance - for i, built_house in ipairs(settlement_info) do - distance = math.sqrt( - ((building_pos.x - built_house["pos"].x)*(building_pos.x - built_house["pos"].x))+ - ((building_pos.z - built_house["pos"].z)*(building_pos.z - built_house["pos"].z))) - if distance < building_size or - distance < built_house["hsize"] - then - return false - end - end - return true -end -------------------------------------------------------------------------------- --- save list of generated settlements -------------------------------------------------------------------------------- -function settlements.save() - local file = io.open(minetest.get_worldpath().."/settlements.txt", "w") - if file then - file:write(minetest.serialize(settlements_in_world)) - file:close() - end -end -------------------------------------------------------------------------------- --- load list of generated settlements -------------------------------------------------------------------------------- -function settlements.load() - local file = io.open(minetest.get_worldpath().."/settlements.txt", "r") - if file then - local table = minetest.deserialize(file:read("*all")) - if type(table) == "table" then - return table - end - end - return {} -end -------------------------------------------------------------------------------- --- check distance to other settlements -------------------------------------------------------------------------------- ---[[ -function settlements.check_distance_other_settlements(center_new_chunk) - -- local min_dist_settlements = 300 - for i, pos in ipairs(settlements_in_world) do - local distance = vector.distance(center_new_chunk, pos) - -- minetest.chat_send_all("dist ".. distance) - if distance < settlements.min_dist_settlements then + local distance + for i, built_house in ipairs(settlement_info) do + distance = math.sqrt( + ((building_pos.x - built_house["pos"].x)*(building_pos.x - built_house["pos"].x))+ + ((building_pos.z - built_house["pos"].z)*(building_pos.z - built_house["pos"].z))) + if distance < building_size or distance < built_house["hsize"] then return false end end return true end -]] +------------------------------------------------------------------------------- +-- save list of generated settlements +------------------------------------------------------------------------------- +function settlements.save() + local file = io.open(minetest.get_worldpath().."/settlements.txt", "w") + if file then + file:write(minetest.serialize(settlements_in_world)) + file:close() + end +end +------------------------------------------------------------------------------- +-- load list of generated settlements +------------------------------------------------------------------------------- +function settlements.load() + local file = io.open(minetest.get_worldpath().."/settlements.txt", "r") + if file then + local table = minetest.deserialize(file:read("*all")) + if type(table) == "table" then + return table + end + end + return {} +end ------------------------------------------------------------------------------- -- fill chests ------------------------------------------------------------------------------- function settlements.fill_chest(pos, pr) - -- find chests within radius - --local chestpos = minetest.find_node_near(pos, 6, {"mcl_core:chest"}) - local chestpos = pos - -- initialize chest (mts chests don't have meta) - local meta = minetest.get_meta(chestpos) - if meta:get_string("infotext") ~= "Chest" then - -- For MineClone2 0.70 or before - -- minetest.registered_nodes["mcl_chests:chest"].on_construct(chestpos) - -- - -- For MineClone2 after commit 09ab1482b5 (the new entity chests) - minetest.registered_nodes["mcl_chests:chest_small"].on_construct(chestpos) - end - -- fill chest - local inv = minetest.get_inventory( {type="node", pos=chestpos} ) - function mcl_villages.get_treasures(pr) - local loottable = { - { + -- initialize chest (mts chests don't have meta) + local meta = minetest.get_meta(pos) + if meta:get_string("infotext") ~= "Chest" then + -- For MineClone2 0.70 or before + -- minetest.registered_nodes["mcl_chests:chest"].on_construct(pos) + -- + -- For MineClone2 after commit 09ab1482b5 (the new entity chests) + minetest.registered_nodes["mcl_chests:chest_small"].on_construct(pos) + end + -- fill chest + local inv = minetest.get_inventory( {type="node", pos=pos} ) + + local function get_treasures(pr) + local loottable = {{ stacks_min = 3, stacks_max = 8, items = { @@ -264,14 +190,13 @@ function settlements.fill_chest(pos, pr) { itemstring = "mobs_mc:gold_horse_armor", weight = 1 }, { itemstring = "mobs_mc:diamond_horse_armor", weight = 1 }, } - }, - } + }} local items = mcl_loot.get_multi_loot(loottable, pr) return items end -local items = mcl_villages.get_treasures(pr) -mcl_loot.fill_inventory(inv, "main", items) + local items = get_treasures(pr) + mcl_loot.fill_inventory(inv, "main", items) end ------------------------------------------------------------------------------- @@ -316,23 +241,23 @@ end local building_all_info function settlements.initialize_nodes(settlement_info, pr) for i, built_house in ipairs(settlement_info) do - for j, schem in ipairs(schematic_table) do + for j, schem in ipairs(settlements.schematic_table) do if settlement_info[i]["name"] == schem["name"] then building_all_info = schem break end end - local width = building_all_info["hwidth"] - local depth = building_all_info["hdepth"] - local height = building_all_info["hheight"] + local width = building_all_info["hwidth"] + local depth = building_all_info["hdepth"] + local height = building_all_info["hheight"] local p = settlement_info[i]["pos"] for yi = 1,height do for xi = 0,width do for zi = 0,depth do local ptemp = {x=p.x+xi, y=p.y+yi, z=p.z+zi} - local node = minetest.get_node(ptemp) + local node = minetest.get_node(ptemp) if node.name == "mcl_furnaces:furnace" or node.name == "mcl_chests:chest" or node.name == "mcl_anvils:anvil" then @@ -403,32 +328,11 @@ function settlements.evaluate_heightmap() return height_diff end ------------------------------------------------------------------------------- --- get LVM of current chunk -------------------------------------------------------------------------------- -function settlements.getlvm(minp, maxp) - local vm = minetest.get_voxel_manip() - local emin, emax = vm:read_from_map(minp, maxp) - local va = VoxelArea:new{ - MinEdge = emin, - MaxEdge = emax - } - local data = vm:get_data() - return vm, data, va, emin, emax -end -------------------------------------------------------------------------------- --- get LVM of current chunk -------------------------------------------------------------------------------- -function settlements.setlvm(vm, data) - -- Write data - vm:set_data(data) - vm:write_to_map(true) -end -------------------------------------------------------------------------------- -- Set array to list -- https://stackoverflow.com/questions/656199/search-for-an-item-in-a-lua-list ------------------------------------------------------------------------------- function settlements.Set (list) - local set = {} - for _, l in ipairs(list) do set[l] = true end - return set + local set = {} + for _, l in ipairs(list) do set[l] = true end + return set end From 948265fd6bd082c2ba66f2f5cb937c297ea96bb4 Mon Sep 17 00:00:00 2001 From: kay27 Date: Sat, 30 Jan 2021 04:42:53 +0400 Subject: [PATCH 4/5] Fix https://git.minetest.land/Wuzzy/MineClone2/issues/1028 - Make tree saplings grow in inactive areas (approx. time calc.) --- mods/ITEMS/mcl_core/functions.lua | 243 +++++++++++++++++++----------- 1 file changed, 152 insertions(+), 91 deletions(-) diff --git a/mods/ITEMS/mcl_core/functions.lua b/mods/ITEMS/mcl_core/functions.lua index b09ffdc86..232215c6b 100644 --- a/mods/ITEMS/mcl_core/functions.lua +++ b/mods/ITEMS/mcl_core/functions.lua @@ -899,99 +899,118 @@ local treelight = 9 local sapling_grow_action = function(tree_id, soil_needed, one_by_one, two_by_two, sapling) return function(pos) + local meta = minetest.get_meta(pos) + if meta:get("grown") then return end -- Checks if the sapling at pos has enough light and the correct soil - local sapling_is_growable = function(pos) - local light = minetest.get_node_light(pos) - local soilnode = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}) - local soiltype = minetest.get_item_group(soilnode.name, "soil_sapling") - return soiltype >= soil_needed and light and light >= treelight and not minetest.get_meta(pos):get("grown") + local light = minetest.get_node_light(pos) + if not light then return end + local low_light = (light < treelight) + + local delta = 1 + local current_game_time = minetest.get_day_count() + minetest.get_timeofday() + + local last_game_time = tonumber(meta:get_string("last_gametime")) + meta:set_string("last_gametime", tostring(current_game_time)) + + if last_game_time then + delta = current_game_time - last_game_time + elseif low_light then + return end - if sapling_is_growable(pos) then - -- Increase and check growth stage - local meta = minetest.get_meta(pos) - local stage = meta:get_int("stage") - if stage == nil then stage = 0 end - stage = stage + 1 - if stage >= 3 then - meta:set_string("grown", "true") - -- This sapling grows in a special way when there are 4 saplings in a 2×2 pattern - if two_by_two then - -- Check 8 surrounding saplings and try to find a 2×2 pattern - local is_sapling = function(pos, sapling) - return minetest.get_node(pos).name == sapling - end - local p2 = {x=pos.x+1, y=pos.y, z=pos.z} - local p3 = {x=pos.x, y=pos.y, z=pos.z-1} - local p4 = {x=pos.x+1, y=pos.y, z=pos.z-1} - local p5 = {x=pos.x-1, y=pos.y, z=pos.z-1} - local p6 = {x=pos.x-1, y=pos.y, z=pos.z} - local p7 = {x=pos.x-1, y=pos.y, z=pos.z+1} - local p8 = {x=pos.x, y=pos.y, z=pos.z+1} - local p9 = {x=pos.x+1, y=pos.y, z=pos.z+1} - local s2 = is_sapling(p2, sapling) - local s3 = is_sapling(p3, sapling) - local s4 = is_sapling(p4, sapling) - local s5 = is_sapling(p5, sapling) - local s6 = is_sapling(p6, sapling) - local s7 = is_sapling(p7, sapling) - local s8 = is_sapling(p8, sapling) - local s9 = is_sapling(p9, sapling) - -- In a 9×9 field there are 4 possible 2×2 squares. We check them all. - if s2 and s3 and s4 and check_tree_growth(pos, tree_id, { two_by_two = true }) then - -- Success: Remove saplings and place tree - minetest.remove_node(pos) - minetest.remove_node(p2) - minetest.remove_node(p3) - minetest.remove_node(p4) - mcl_core.generate_tree(pos, tree_id, { two_by_two = true }) - return - elseif s3 and s5 and s6 and check_tree_growth(p6, tree_id, { two_by_two = true }) then - minetest.remove_node(pos) - minetest.remove_node(p3) - minetest.remove_node(p5) - minetest.remove_node(p6) - mcl_core.generate_tree(p6, tree_id, { two_by_two = true }) - return - elseif s6 and s7 and s8 and check_tree_growth(p7, tree_id, { two_by_two = true }) then - minetest.remove_node(pos) - minetest.remove_node(p6) - minetest.remove_node(p7) - minetest.remove_node(p8) - mcl_core.generate_tree(p7, tree_id, { two_by_two = true }) - return - elseif s2 and s8 and s9 and check_tree_growth(p8, tree_id, { two_by_two = true }) then - minetest.remove_node(pos) - minetest.remove_node(p2) - minetest.remove_node(p8) - minetest.remove_node(p9) - mcl_core.generate_tree(p8, tree_id, { two_by_two = true }) - return - end - end - if one_by_one and tree_id == OAK_TREE_ID then - -- There is a chance that this tree wants to grow as a balloon oak - if math.random(1, 12) == 1 then - -- Check if there is room for that - if check_tree_growth(pos, tree_id, { balloon = true }) then - minetest.set_node(pos, {name="air"}) - mcl_core.generate_tree(pos, tree_id, { balloon = true }) - return - end - end - end + if low_light then + if delta < 1.2 then return end + if minetest.get_node_light(pos, 0.5) < treelight then return end + end - -- If this sapling can grow alone - if one_by_one and check_tree_growth(pos, tree_id) then - -- Single sapling - minetest.set_node(pos, {name="air"}) - local r = math.random(1, 12) - mcl_core.generate_tree(pos, tree_id) + -- TODO: delta is [days] missed in inactive area. Currently we just add it to stage, which is far from a perfect calculation... + + local soilnode = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}) + local soiltype = minetest.get_item_group(soilnode.name, "soil_sapling") + if soiltype < soil_needed then return end + + -- Increase and check growth stage + local meta = minetest.get_meta(pos) + local stage = meta:get_int("stage") + if stage == nil then stage = 0 end + stage = stage + math.max(1, math.floor(delta)) + if stage >= 3 then + meta:set_string("grown", "true") + -- This sapling grows in a special way when there are 4 saplings in a 2×2 pattern + if two_by_two then + -- Check 8 surrounding saplings and try to find a 2×2 pattern + local is_sapling = function(pos, sapling) + return minetest.get_node(pos).name == sapling + end + local p2 = {x=pos.x+1, y=pos.y, z=pos.z} + local p3 = {x=pos.x, y=pos.y, z=pos.z-1} + local p4 = {x=pos.x+1, y=pos.y, z=pos.z-1} + local p5 = {x=pos.x-1, y=pos.y, z=pos.z-1} + local p6 = {x=pos.x-1, y=pos.y, z=pos.z} + local p7 = {x=pos.x-1, y=pos.y, z=pos.z+1} + local p8 = {x=pos.x, y=pos.y, z=pos.z+1} + local p9 = {x=pos.x+1, y=pos.y, z=pos.z+1} + local s2 = is_sapling(p2, sapling) + local s3 = is_sapling(p3, sapling) + local s4 = is_sapling(p4, sapling) + local s5 = is_sapling(p5, sapling) + local s6 = is_sapling(p6, sapling) + local s7 = is_sapling(p7, sapling) + local s8 = is_sapling(p8, sapling) + local s9 = is_sapling(p9, sapling) + -- In a 9×9 field there are 4 possible 2×2 squares. We check them all. + if s2 and s3 and s4 and check_tree_growth(pos, tree_id, { two_by_two = true }) then + -- Success: Remove saplings and place tree + minetest.remove_node(pos) + minetest.remove_node(p2) + minetest.remove_node(p3) + minetest.remove_node(p4) + mcl_core.generate_tree(pos, tree_id, { two_by_two = true }) + return + elseif s3 and s5 and s6 and check_tree_growth(p6, tree_id, { two_by_two = true }) then + minetest.remove_node(pos) + minetest.remove_node(p3) + minetest.remove_node(p5) + minetest.remove_node(p6) + mcl_core.generate_tree(p6, tree_id, { two_by_two = true }) + return + elseif s6 and s7 and s8 and check_tree_growth(p7, tree_id, { two_by_two = true }) then + minetest.remove_node(pos) + minetest.remove_node(p6) + minetest.remove_node(p7) + minetest.remove_node(p8) + mcl_core.generate_tree(p7, tree_id, { two_by_two = true }) + return + elseif s2 and s8 and s9 and check_tree_growth(p8, tree_id, { two_by_two = true }) then + minetest.remove_node(pos) + minetest.remove_node(p2) + minetest.remove_node(p8) + minetest.remove_node(p9) + mcl_core.generate_tree(p8, tree_id, { two_by_two = true }) return end - else - meta:set_int("stage", stage) end + if one_by_one and tree_id == OAK_TREE_ID then + -- There is a chance that this tree wants to grow as a balloon oak + if math.random(1, 12) == 1 then + -- Check if there is room for that + if check_tree_growth(pos, tree_id, { balloon = true }) then + minetest.set_node(pos, {name="air"}) + mcl_core.generate_tree(pos, tree_id, { balloon = true }) + return + end + end + end + -- If this sapling can grow alone + if one_by_one and check_tree_growth(pos, tree_id) then + -- Single sapling + minetest.set_node(pos, {name="air"}) + local r = math.random(1, 12) + mcl_core.generate_tree(pos, tree_id) + return + end + else + meta:set_int("stage", stage) end end end @@ -1040,7 +1059,14 @@ minetest.register_abm({ neighbors = {"group:soil_sapling"}, interval = 25, chance = 2, - action = grow_oak, + action = grow_oak +}) +minetest.register_lbm({ + label = "Add growth for unloaded oak tree", + name = "mcl_core:lbm_oak", + nodenames = {"mcl_core:sapling"}, + run_at_every_load = true, + action = grow_oak }) -- Dark oak tree @@ -1050,7 +1076,14 @@ minetest.register_abm({ neighbors = {"group:soil_sapling"}, interval = 25, chance = 2, - action = grow_dark_oak, + action = grow_dark_oak +}) +minetest.register_lbm({ + label = "Add growth for unloaded dark oak tree", + name = "mcl_core:lbm_dark_oak", + nodenames = {"mcl_core:darksapling"}, + run_at_every_load = true, + action = grow_dark_oak }) -- Jungle Tree @@ -1060,7 +1093,14 @@ minetest.register_abm({ neighbors = {"group:soil_sapling"}, interval = 25, chance = 2, - action = grow_jungle_tree, + action = grow_jungle_tree +}) +minetest.register_lbm({ + label = "Add growth for unloaded jungle tree", + name = "mcl_core:lbm_jungle_tree", + nodenames = {"mcl_core:junglesapling"}, + run_at_every_load = true, + action = grow_jungle_tree }) -- Spruce tree @@ -1072,6 +1112,13 @@ minetest.register_abm({ chance = 2, action = grow_spruce }) +minetest.register_lbm({ + label = "Add growth for unloaded spruce tree", + name = "mcl_core:lbm_spruce", + nodenames = {"mcl_core:sprucesapling"}, + run_at_every_load = true, + action = grow_spruce +}) -- Birch tree minetest.register_abm({ @@ -1080,7 +1127,14 @@ minetest.register_abm({ neighbors = {"group:soil_sapling"}, interval = 25, chance = 2, - action = grow_birch, + action = grow_birch +}) +minetest.register_lbm({ + label = "Add growth for unloaded birch tree", + name = "mcl_core:lbm_birch", + nodenames = {"mcl_core:birchsapling"}, + run_at_every_load = true, + action = grow_spruce }) -- Acacia tree @@ -1090,7 +1144,14 @@ minetest.register_abm({ neighbors = {"group:soil_sapling"}, interval = 20, chance = 2, - action = grow_acacia, + action = grow_acacia +}) +minetest.register_lbm({ + label = "Add growth for unloaded acacia tree", + name = "mcl_core:lbm_acacia", + nodenames = {"mcl_core:acaciasapling"}, + run_at_every_load = true, + action = grow_spruce }) local function leafdecay_particles(pos, node) From b0f151147c16df6c3ee7e120988274d8e9d1ce58 Mon Sep 17 00:00:00 2001 From: kay27 Date: Sat, 30 Jan 2021 05:23:34 +0400 Subject: [PATCH 5/5] Fix the trees, https://git.minetest.land/Wuzzy/MineClone2/issues/1031 --- mods/ITEMS/mcl_core/functions.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_core/functions.lua b/mods/ITEMS/mcl_core/functions.lua index 232215c6b..3d47336f3 100644 --- a/mods/ITEMS/mcl_core/functions.lua +++ b/mods/ITEMS/mcl_core/functions.lua @@ -1134,7 +1134,7 @@ minetest.register_lbm({ name = "mcl_core:lbm_birch", nodenames = {"mcl_core:birchsapling"}, run_at_every_load = true, - action = grow_spruce + action = grow_birch }) -- Acacia tree @@ -1151,7 +1151,7 @@ minetest.register_lbm({ name = "mcl_core:lbm_acacia", nodenames = {"mcl_core:acaciasapling"}, run_at_every_load = true, - action = grow_spruce + action = grow_acacia }) local function leafdecay_particles(pos, node)