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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 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.obj b/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.obj new file mode 100644 index 000000000..ca12b682e --- /dev/null +++ b/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.obj @@ -0,0 +1,159 @@ +# Blender v2.79 (sub 0) OBJ File: 'shulkerbox2.blend' +# www.blender.org +mtllib shulkerbox2.mtl +o low1_Cube.006 +v -0.500000 -0.500001 0.500000 +v -0.500000 0.062499 0.500000 +v -0.500000 -0.500001 -0.500000 +v -0.500000 0.062499 -0.500000 +v 0.500000 -0.500001 0.500000 +v 0.500000 0.062499 0.500000 +v 0.500000 -0.500001 -0.500000 +v 0.500000 0.062499 -0.500000 +vt 0.250000 0.187500 +vt -0.000000 0.187500 +vt -0.000000 0.312500 +vt 0.250000 0.312500 +vt 1.000000 0.187500 +vt 0.750000 0.187500 +vt 0.750000 0.312500 +vt 1.000000 0.312500 +vt 0.500000 0.187500 +vt 0.500000 0.312500 +vt 0.750000 0.562500 +vt 0.750000 0.312500 +vt 0.500000 0.312500 +vt 0.500000 0.562500 +vt 0.500000 0.562500 +vt 0.250000 0.562500 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +usemtl None +s off +f 1/1/1 3/2/1 4/3/1 2/4/1 +f 3/5/2 7/6/2 8/7/2 4/8/2 +f 7/6/3 5/9/3 6/10/3 8/7/3 +f 5/9/4 1/1/4 2/4/4 6/10/4 +f 3/11/5 1/12/5 5/13/5 7/14/5 +f 8/15/6 6/10/6 2/4/6 4/16/6 +o top1_Cube.005 +v -0.500313 -0.220552 0.500313 +v -0.500313 0.530073 0.500313 +v -0.500313 -0.220552 -0.500313 +v -0.500313 0.530073 -0.500313 +v 0.500313 -0.220552 0.500313 +v 0.500313 0.530073 0.500313 +v 0.500313 -0.220552 -0.500313 +v 0.500313 0.530073 -0.500313 +vt 0.250000 0.562500 +vt -0.000000 0.562500 +vt -0.000000 0.750000 +vt 0.250000 0.750000 +vt 1.000000 0.562500 +vt 0.750000 0.562500 +vt 0.750000 0.750000 +vt 1.000000 0.750000 +vt 0.500000 0.562500 +vt 0.500000 0.750000 +vt 0.750000 1.000000 +vt 0.750000 0.750000 +vt 0.500000 0.750000 +vt 0.500000 1.000000 +vt 0.500000 1.000000 +vt 0.250000 1.000000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +usemtl None +s off +f 9/17/7 11/18/7 12/19/7 10/20/7 +f 11/21/8 15/22/8 16/23/8 12/24/8 +f 15/22/9 13/25/9 14/26/9 16/23/9 +f 13/25/10 9/17/10 10/20/10 14/26/10 +f 11/27/11 9/28/11 13/29/11 15/30/11 +f 16/31/12 14/26/12 10/20/12 12/32/12 +o top2_Cube.002 +v -0.500247 -0.220392 0.500247 +v -0.500247 0.530234 0.500247 +v -0.500247 -0.220392 -0.500378 +v -0.500247 0.530234 -0.500378 +v 0.500378 -0.220392 0.500247 +v 0.500378 0.530234 0.500247 +v 0.500378 -0.220392 -0.500378 +v 0.500378 0.530234 -0.500378 +vt 0.250000 0.562500 +vt 0.250000 0.750000 +vt -0.000000 0.750000 +vt -0.000000 0.562500 +vt 1.000000 0.562500 +vt 1.000000 0.750000 +vt 0.750000 0.750000 +vt 0.750000 0.562500 +vt 0.500000 0.750000 +vt 0.500000 0.562500 +vt 0.750000 1.000000 +vt 0.500000 1.000000 +vt 0.500000 0.750000 +vt 0.750000 0.750000 +vt 0.500000 1.000000 +vt 0.250000 1.000000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl None +s off +f 17/33/13 18/34/13 20/35/13 19/36/13 +f 19/37/14 20/38/14 24/39/14 23/40/14 +f 23/40/15 24/39/15 22/41/15 21/42/15 +f 21/42/16 22/41/16 18/34/16 17/33/16 +f 19/43/17 23/44/17 21/45/17 17/46/17 +f 24/47/18 20/48/18 18/34/18 22/41/18 +o low2_Cube.001 +v -0.499935 -0.499936 0.499935 +v -0.499935 0.062565 0.499935 +v -0.499935 -0.499936 -0.500066 +v -0.499935 0.062565 -0.500066 +v 0.500066 -0.499936 0.499935 +v 0.500066 0.062565 0.499935 +v 0.500066 -0.499936 -0.500066 +v 0.500066 0.062565 -0.500066 +vt 0.250000 0.187500 +vt 0.250000 0.312500 +vt -0.000000 0.312500 +vt -0.000000 0.187500 +vt 1.000000 0.187500 +vt 1.000000 0.312500 +vt 0.750000 0.312500 +vt 0.750000 0.187500 +vt 0.500000 0.312500 +vt 0.500000 0.187500 +vt 0.750000 0.562500 +vt 0.500000 0.562500 +vt 0.500000 0.312500 +vt 0.750000 0.312500 +vt 0.500000 0.562500 +vt 0.250000 0.562500 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl None +s off +f 25/49/19 26/50/19 28/51/19 27/52/19 +f 27/53/20 28/54/20 32/55/20 31/56/20 +f 31/56/21 32/55/21 30/57/21 29/58/21 +f 29/58/22 30/57/22 26/50/22 25/49/22 +f 27/59/23 31/60/23 29/61/23 25/62/23 +f 32/63/24 28/64/24 26/50/24 30/57/24 diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.0.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.0.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e97e22b366b6e89688b7a2f8c715af89e1eb6a0d GIT binary patch literal 20229 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 W4h{|u4h{|u4h{|u4h{|u4h{~{=e4W= literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.1.ogg b/mods/ITEMS/mcl_chests/sounds/mcl_chests_shulker_close.1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d61c81ccb5c4685599aafeca4d3d6f553d30488d GIT binary patch literal 18671 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%0Ae4Tl?V&`^arbU ztxPF1@E9G>+Wx2$#w4Zu%LM1;(hQa_B}^ z={O8Cy*3y%s5$1DU%Fn;@K24D48ljDdZ6k!J8X=NR$rqJD zzZLEA5S9jwyfQ8fwKy*l_#)OW zWb{He$H4!nua$6EI+jslhJ5>GMk(SMT@btw{4kLUc7Umo1HAg~7b%!rbL>kRHC8v9 z!p<8pwfBRL3Z6?yK5tQd#1JIWS1=7ey;!MHQu***MdV1`QyVhK$1M^Jt!Q46HLXxQcJ{;mGU>H^AK$*^N>sc%)y zyB{mD)>YTogFBjhWe9ix4dzJ#K&k4jcEGdZa%#vU^&pRGW0rl{#@odtw_gY~=Y`sm zf>x^rVeb@nb)(^2GUzUhVB4hIp||@7X>CW`>DtmL_$A&-?$b&86?yPUQ3K&k>JQ(J zFGqK1EN*672@e9u>%D(n^PE3^EK(4idBaXiJ%JVfc8q*EW5)S~y&jhXU+?U<4XRN_ zarqz4KKg9}tTK)mSs4IV1Xa!aY$wHjJdLo&#k}HTG1504 z$C~QKdHo@T^*z(6h=W+-MkZ0cHJc}+(~Y#3HG;o^bo~{f-KS=`ck`q0_y9g(+L2fQ zjiUivvbc5E!@@*PYPhNnL@UfD(HPcqn)!%f>c$-u#+vlZfFg&RX^Jx2wlfO=y^_oR z;mnw6+@yCf!oZPSTde>V3AbR|Lm@@B-5p`F)Mdwk3vo zw=0Y%?$|&s=RK!OQwkZcTyAcAu-)c3==7j#(hG+Qsx0W=7!N? z{=u{>yvI5C(if6JecUWVL$x&#PUGBZuft0%5xBecTT&B8RxK%Wy-I}JfuWgc#~r$hGV0 z_uy|46jVUQc%d@=+UD9-jLB_%%%WDGZsD@okp8OLB5O`BjPWQkefVpFdt_&GKcXZq zMytZEePLD|uq@!7*>DNjPo=)DgZR9-^5|t6I{eAafxNbqNr;=wHH(R8N|Ei|i6n+K z@co+!m$1u5!J2%vBZ+1Q0&_-vE|QMzv0f~Hd_m>oS;~z3C>3-)vMZ_s=iRg zEv?d+S7@%KE6s1PF7h(Ccx8yp*c@KU2D8=@cNzWa1l*W^GwqCpx1K^TxC^LXnTQkh z+NORgFPGEFVPCUF`g;CJNKI~0gxE?0vB#bz1*$#hhX@F^Y@VkkK_)N9upagOAAa%f zgv{l*V{j@?r)QcFC-9`hgT^M)((yVnVP1h*aaQcm<6QSj+%%u`YHXn>bbi3gur{8c?zOU!;ajZyE*+xT-zU>wKI=4SX~;8o zqp6Gv2Cexiee^{VJ{&g=X_jU_3NAVmR9`GtMKLL~^y<9z^dp2Z{q$w;L~tI~uPn*c z#}ZqlOpF| zmiCneyiLWzABlcraMg@AmM#usxmFSl?p4)dT9u$!vvZ_Y{t#ysihpx8vKw6@d;N)8 z!_Ukmy5zb}_xW9$e#~a`WGO34I=I&ICqeo^+)7$c&GWaYXQ7*jMO(JYv&FbRMWT+k z(+k%`;LrM^YLe@m%&b!PAVtu9ue12uqP$EGwi?pZyffd`akFQ|C?6`w`;z2WY#gx> zIPb8qECo=rKA?C25|-v~Ag@*2rOp-|)B+OD<=%7UeFo#_#lgQ3L*Svos7E_T)lB&S z%^hI%dg;{|bJ?!*&`N$x*wK%_&U{fW~*>T_T1JXqp>>&sf&fPrhN5n1Pyh~Rf zl$~lv`;~W=r)iu->$zYzA*Nads3(;q?OCCxFRLk1U7WG>@0u@zP?WCnN;CZYIDYs} zEp=b7ItfP8)MeATMmc<1K7I)5E+un*wX|f*po@bvQ8m+zylX0D{ry9jq$;4`nf2f>yJ$ZsIbu9JC~Gq;Z?2z=@u;&?3#H|h|r ztRFE;sW5-xjLqvy5s$YYQ`h`|x=7oq2q6B7CBqI;qqQk5&NPtEtk##e=y3PRj(D+F znGB;02z=ic8Z}68a@%s+udW%#Zb9>LEC?I0z+T7XjH9kRJ=X$CP4pmTK3Ejaao#rl zf?GWLPAXyV@!Ab4k4F354bgo0wy>kgte)?Oza_F32MY*M^Y?uOX}K7^k9`Gg5iMX< zKUcl1vrgoOQ{W0A7yGSKwl*7z%vmUpm%$g#N2(XBOaMBstxA_ zW9SYz)nDk!$G9o>lgWv8UC=Kx6>)esX;&F4 zA}jOLYlnQ7fC7e1Iqa|FTG@Dt`+RKtkHI|rkH%h;Ud53Jg$WIg`}S}KG+T(v#rII9 z-^Qs@q4^~PhOL2F-UcZU_bYZr``SDZE7o-zl+>4GVyv&D-*<_Qj*g*smbbc8%Ccnm zcTJ`kA}qt^TJtke8;tqbv!x_zc;ht)d+5|zriYrj5CUr(xQ%=b=tU&IMe7U1bz1Fs z|KKJ_-RSc(LXNZrUI8h=Twa_DY1#SY>R6+OYvpnLw~hfirNGsAP1^&zz36~tT*Hbr z$M8~7Ie1yCHgo90ep~-Lj1M~6BZUcD!T7Co)O`=+;aOlTEZ7NgT_K^3zi$G?og3v5 zsY(;>2vhiEV`9Cro?(?<)moEo!SLBX^b1=ETS@lCY0Q|8ls=lzt4ZZfHvhcb(|hY` zNAuNM%wQC#u^ia+hK=aF&=Hu6HKUNhROjoO-njbE@WsnVS-Of3$=LOVfHF#TA)DVA zWy}#?EBx^Lhm4AZdk6f{P5?k>j|oYCob)Z2|KUur%Oaz<-vP9WRdtIYkqN zGsYGYPC+9R?aG##6T;gch4#8Cdx)Qgn!T{oPoIr`QPEs&D`0EikN*{hhLpTaSjeA zP?7sdlIC@!1WL^D+DGx?iw`|BSDoV~EPsB1xKgBW+HvinMmIhN-y|$JJ_9U-%9kQskyFcm>b>%|@|Lo2 zO64D*hb_FYcp3B+&VtW2NcrqOjIwG6J0QCI%E?4mCGDPLZoto6K%;u1;hZ9Sx`48P zmBfPUHzup=Bb3m;368&Tnt=hk@q>>1uVFUu1759#;3yxgq;!Oo>;oNO!M=rx$xFG6 zc;X4XD;--logHWS;@OL@-zq>^3D#65rvErr;mFSvkHpF_+-j~j(qa1JkzY(5K!?Pv z9XQC8MV?T1cebFvCgoFv$Bfh`RUnKCp}JPW$w$b z!pxhwa_6;g7A~pJ>}Jz&eK<5a;=z8jvmffqp(mDs_y#mEWV^Y@tw;2D_~gbC#Vd8S zXEM>zGah=YtV>&N(UgTEmA_Xb5`RyyOo=e!yJBGhtP~-bi1n+xJM-`o3JlIXWGW6) z8=?p5c>Vl+iT9luJ=yif^RvUoAt?Byg*j+lK^{n)xgGFI+3rIYk(^dG=xEgiZ`Dox z6)3|Qd|YlU&OBu*01M`*wUT8jLZOfMSo!on;>4x`XsmSTxeo zA-d5}dEO-&&U+B^qJF%xi$n-D_bnVyN1dLTkh;OD{edfhPb7}^BI6y3mND6|3EQpL z{M!zX8AD^2;Uid{HTMBFU9M+?%AWOfgJSg%W8D%9K!O54nr(G!TU(zvk&GtQY;dLf zP`B*K*}!2}+C()c+;Khe#gh2e>UviAyqY)(eZ^~Yxl#=b-i^X(oB#<>ke8w-6mNV| z(Ii}xVplQR9zRw|K6i1gqflK>c}v>U_$DqNkv_o<=ZAho%#Z$TQak4b?pgZ0yagd%d|D}rK;b7cFpME2!nof zR-cXR20OOT`ywe!=xAKf<)!0L z*1ltl6s}FHNzER+x6dIDX(sc_z(Njnb@K45?UqA`C4^Dn^^otzh#&<}y}Rb5?iY4Y z79DcmMWF>61rSfm_((_4rk9$|i{udd$)2AFl#|fb(FK_Vft;)^2u&Rhmea3C(Vib= z9#Py1P|>cr2)+@iWXY34Lo9zaA;a9JDXlGBqS~}R?_|Y+ zU1(_c@_vzk1ABI_O@2(eEH}Jhw~Y~MRFChFlX^+CM;OYnp85UP*qpvscvwYPQ@hsd zS7ba>Q;p)D`^-4!B64jhjCiFG#^Nj9!=K=_q4SfIVhSB<3*Gyb4mbiwYV8DTPuASV zV(B2^C6*rVC^hx~Qyo9U1^v1iQh-#}|Kc(`fmiC_d3r}VY8PA4!>WXIctTRMy`$?3 z{QDB7ph?j?8Fm8+k9B8lx+kFu`qlNeOQ>w^S7Q%hRp}uDWp1Abu@Jdm z-a!aL@RQhd7wT-+TyW}63r&7~Dtgq{D_Q{|L=U!CD*h0u`4-VhZn$Nn91P;`Uq2y! zCusvdk*Jc!sDe!o@^WKcANAKH9ayxC3kT=8-rC(!_j2R(qi@p(Y!vY1Tguf7oJ9N# z8^jx$S03Q_+}UZywR%`$o5~AdqIaW}Z91-aJ=!DizIj;Uw7qgN3>-b(8L80nEnI4m zyQ^(X;X9ytS^w=mN@@UJNFq$cJ4XaWVNf8Ni^L;FxylAe2E@sEbfHw%D5-)=oi6xE^(9IJYs>-I@u zcE)p~r8Tux|C5s-Wuqm#oixwRo3n!qI{g6Bpy>DH9cr!D3b*6a#r|906UN%nnLaiW z#7Q4EK#J~z%jE9P3j?J-!BLE0FAz{}os$=_JI&iSLXC?}Lo`9`*NV$2^P1thGXq6G(@vpBnHH_wRuRB4G0LClA1%Ux*+905DhH z1JAbgWn!YcF2Oq(7w-SwjF^(mb~A9(kL6zGUlah= zafipZIce#Jr6{gfXUGhcAB}&KjhyzadE1we=S4zlB39hJ3|De?0ZOr(zuk-K<;*$&xWXQAt!K>qu^c-(O#d- zxFCb`mpHo%9b*Pw;R?{+?`AkLgh4ymseape6H)0~BKiXCa1Sy(+qkWv8-3bN0>4D^ zS`C;L@L9x?8Y)8a(A0sl&4Q@Di|>0UE$yEl=1U&m+<*T0_#30iBTVc3IPsomw+*%Z zHJxbC*^&0H0->RZBbmH=t=dcal%MsohSbX=k-S7Rir=3dNA0h67y5_DIX;ka%hj#i zP*kESc64xVX%b7tUq{7{javXtWTP8-_5sF7Q~)ZD3Bxm5zRzD2gK|(2sGN`E=4Ciq z+bV$qIHS=a^+jX)XKq~paQHw8ucL}0BI9NmvmbE!Skt%x({oEL9&Hf%e*(h83o~IGT(k|`x zlJxOF1n{=m-V`hqKmfi)#By0P+xYnR@7GBcaF_J`feH*E zi^80UTsEW)05{hTm0#$0zWUPctCZJf9{PGJJpcP@-u3?;wmg45&l(>Xocy@A>_6=5 z6J4FK>i@jGArktQ0N%+`a9@uD0IgDY=fD4+vteO*bX$hFqbXy_G)z;UOOux9460Y) zKUZaqy!5toHE=W|&tun`49B^D|CWqNrEDP40kB0bNnmT&t0VIWfRq}J-=(j-yR^6E^ws~DhwmRv)_+$mlLrryy=8%F^XJ=J6I>&! z^I0#mtqIWq2uISmL=3AcnwQJ2b(G_BWtkt3qjdMC3m-J0Qgu~TIKzHF zCQZlKwuo*RfYkDMxS8U7eXSa!4^jY_rsc}7-$wSnyO)QgDzNiVY z0RUPRFvKg0WJ<-fcC`(RO3Tg4gEOY90HFMG6fUeKzxe>D0iH!%>;A_b_`U-WaIEZa zS#F~oDB>asGXnqs5E4Jq|4-bz`tI1D2fp|7U&;OS_Gf%@U-j^_lb-q0Cx^cIcr41; zL@1~T>YL*`aF(PDLNUX zGhjkK;82w9f>?V#9Wwv`W@`AJu5dE|4FJAHysYaFE3m(BstzXe0e$Z(NdW)=K-l$H z-hH+*=ZM|0ty{L|ef@p9k@xIB^YVY2gGy!b@xA7m)7Y8Ku7^@8wQCdNIP2U#ePn=oc-g0KAgBD-CV=k6+hbt#tHtX%3M!#- zxb9b&7tb5^8soS^ex%a@0H^{0zD4}I)i1$-0{{U400000%mxk)4h{|u4h{|u4h{|u Y4h{|u4h{|u4h{|u4h{|u4h{|u4xb0j1ONa4 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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�>}H?jkO>Q4~$U&0KrI)t1!bhW6>bJ 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 aB?s007iv)#Rmx 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 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 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 EUm;u$RR910 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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%0D^kS2L5I!;m~(Ix@7BhMT1 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 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)