From 463264c05b7baaa9edaa534adf65665779a58ec2 Mon Sep 17 00:00:00 2001 From: PrairieWind Date: Sat, 3 Sep 2022 15:48:39 -0600 Subject: [PATCH] Pillager Outpost, Schematics by RandomLegoBrick --- .../mcl_structures/pillager_outpost.lua | 104 ++++-------------- .../mcl_structures_pillager_outpost.mts | Bin 1217 -> 1601 bytes 2 files changed, 23 insertions(+), 81 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/pillager_outpost.lua b/mods/MAPGEN/mcl_structures/pillager_outpost.lua index 269561e92..324f40dc7 100644 --- a/mods/MAPGEN/mcl_structures/pillager_outpost.lua +++ b/mods/MAPGEN/mcl_structures/pillager_outpost.lua @@ -2,7 +2,7 @@ local modname = minetest.get_current_modname() local modpath = minetest.get_modpath(modname) local S = minetest.get_translator(modname) -local chance_per_chunk = 11 +local chance_per_chunk = 600 local noise_multiplier = 1.4 local random_offset = 555 local scanning_ratio = 0.00003 @@ -76,6 +76,28 @@ local function place(pos, rotation, pr) local node_below = minetest.get_node(pos_below) local nn = node_below.name, mcl_structures.place_schematic({pos = pos_outpost, schematic = outpost_schematic, pr = pr, on_placed = on_placed}) + local p1 = pos + local p2 = vector.offset(pos,14,20,14) + local spawnon = {"mcl_core:stripped_oak"} + local sp = minetest.find_nodes_in_area_under_air(p1,p2,spawnon) + for _,n in pairs(minetest.find_nodes_in_area(p1,p2,{"group:wall"})) do + local def = minetest.registered_nodes[minetest.get_node(n).name:gsub("_%d+$","")] + if def and def.on_construct then + def.on_construct(n) + end + end + if sp and #sp > 0 then + for i=1,5 do + local p = sp[pr:next(1,#sp)] + if p then + minetest.add_entity(p,"mobs_mc:pillager") + end + end + local p = sp[pr:next(1,#sp)] + if p then + minetest.add_entity(p,"mobs_mc:evoker") + end + end end local function get_place_rank(pos) @@ -91,86 +113,6 @@ local function get_place_rank(pos) return 10 * (#best_pos_list_surface) + 2 * (#other_pos_list_surface) + 5 * (#best_pos_list_underground) + #other_pos_list_underground end -local function spawn_pillager(pos) - minetest.add_entity({x = pos.x, y = pos.y + 1, z = pos.z}, "mobs_mc:pillager") -end -local function spawn_evoker(pos) - minetest.add_entity({x = pos.x, y = pos.y + 1, z = pos.z}, "mobs_mc:evoker") -end -minetest.register_node("mcl_structures:birchwood", { - description = S("Pillager Birch Wood"), - _doc_items_longdesc = doc.sub.items.temp.build, - tiles = {"mcl_core_planks_birch.png"}, - stack_max = 64, - drop = "mcl_core:birchwood", - groups = {handy=1,axey=1, flammable=3,wood=1,building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=20}, - sounds = mcl_sounds.node_sound_stone_defaults(), - is_ground_content = false, - _mcl_blast_resistance = 3, - _mcl_hardness = 2, - on_construct = spawn_pillager, -}) - -minetest.register_abm({ - label = "Spawn pillagers", - nodenames = {"mcl_structures:birchwood"}, - interval = 30, - chance = 3, - action = function(pos, node) - -- check the space above - local minetest_get_node = minetest.get_node - local x, y, z = pos.x, pos.y - 1, pos.z - local p = {x=x+6, y=y+15, z=z+6} - p.y = p.y + 1 - if minetest_get_node(p).name ~= "air" then return end - p.y = p.y + 1 - if minetest_get_node(p).name ~= "air" then return end - p.y = p.y - 1 - local pillagers_counter = 0 - for _, obj in pairs(minetest.get_objects_inside_radius(p, 30)) do - local lua_entity = obj:get_luaentity() - if luaentity and luaentity.name == "mobs_mc:pillager" then - pillagers_counter = pillagers_counter + 1 - if pillagers_counter > 7 then return end - end - end - if pillagers_counter <= 8 then - spawn_pillager(pos) - end - end -}) --- This is a temporary fix to the fact that totems of undying are unobtainable in survival. Minecraft Outposts dont have evokers. ---[[ -minetest.register_abm({ - label = "Spawn evokers", - nodenames = {"mcl_structures:birchwood"}, - interval = 200, - chance = 100, - action = function(pos, node) - -- check the space above - local minetest_get_node = minetest.get_node - local x, y, z = pos.x, pos.y - 1, pos.z - local p3 = {x=x+6, y=y+15, z=z+6} - p3.y = p3.y + 1 - if minetest_get_node(p3).name ~= "air" then return end - p3.y = p3.y + 1 - if minetest_get_node(p3).name ~= "air" then return end - p3.y = p3.y - 1 - local evoker_counter = 0 - for _, obj in pairs(minetest.get_objects_inside_radius(p3, 30)) do - local lua_entity = obj:get_luaentity() - if luaentity and luaentity.name == "mobs_mc:evoker" then - evoker_counter = evoker_counter + 1 - if evoker_counter > 0 then return end - elseif evoker_counter == 0 then - spawn_evoker(pos) - evoker_counter = evoker_counter + 1 - end - end - end -}) -]]-- - mcl_structures.register_structure({ name = "pillager_outpost", decoration = { diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_pillager_outpost.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_pillager_outpost.mts index 1d3a9be648da2d9e5dbb93698b41a7fcee1f9ae3..35424ad76d38c7262cd2aca076a0917fa0f6b9f5 100644 GIT binary patch literal 1601 zcmeYb3HD`RVc=yDWZGH&!oOojfIUI^eFvN^O5@bkPYF=_`u~kZ9QFeTOVm5?Nj3bN~ zq(J&}67xz@i}H%Cpp5vmoc#PE22qe)a(+=N(3?e>1qG=oAk!K6;lj!JNl7`W3?guW z-2CF=N~kCiVPMLj0@4Z(9;^XnXhe)pEExpht^kEYNl|JlYE0!MCdI>K;*&r@Rgz!8 zAOq5c;s4~+%$&@;bVwATMm5xIun7zjAl)!|m<8qe`6)zs%z!}*?B*B!K9FV2@1iAId7wQs}~vYtkcLTP`G#Qid*$*8AF$w z*TiKnOe`;|yqd1n8)LfZzIcsHsPCzX5rBRwo}9KVk4LXxZ}{h0`sr@jaRRX&d zyLRSl!OYLcm5xgnOjmwieT6r>b;JG>M^_xWXgAsNz{%B|hTngDvph1R*!@w(v!b#i znx(M<#fI|F($BrOp0;!U+fu3Gl4%TAGPZkuyk=mfUu=HxTJM*zn0o0Le!CmLRC{)M zMLhS~bnfo1jKsNz@7&yz$-95i$JO!tr|%q%cr@ek+j`5=b?nXpanHA~$NSElywiPc z@xr~T^F+_LS+00I^YVh7VSch}w{JLevnn%xWnD^sq~$fQPoAF={_Rz*cy=ySHCb}I zR<@Q~a2Y62U)G+JKfLjy^kLig#iCX7XJ4z5NWT9(;nm-^~% zTGyJd?^mBZ5b@M_$|+0dnX`79&Rxi$Rh;)ST`jkKvZXNZhH!&ft4@EORJ6gOCR;(! zu1;UxfbF$UQifwVd}TJ zfA`k4#C)D3Z58ix?%b6|K~tN9KeAbl{|)eJ7T)DD!&%MZkMm{G)74?;jCAc&oo?19 z)jyhh*`|v(!8E_&+_Z#*8T%JMP_J{J)SGJdai-@ViRbf7qyL?;a!>azskLBQ$UDO* PzN&pw+#lwq$r4Ne9xKEr literal 1217 zcmeYb3HD`RVc=&FW#F&J1{eewm=iOL7^HHObK;W{^YT)Qimfsd^U^c((xH3?L6BT> zeo?AbN@7uVNl|Jlg9J#ZxCE%P*s3@uF)1D-Q=Xrn!XOEfNlVR3PAvv2kIzrchVU8q z;pQagCne>iGKeFa0x}F}3s?f|8f4=k;_)T<1q?FCnvksq%Yv!`IcbO2}`lQUF zUex(V=&C@aBLCba6Hd=Kbf-F4T{ArNG50F*4e3^4X?_-Arhi|{ z#QYY__=q(0mIeBPU;i7oeDO`3A8Rdbfb=`U-R`K(e5 zF@7GkVCzM>mC28l57#lSuiCcKEU5rK9&F(qVckyM_T|F_A(|b4HZ@F!~<#S#8y87OKQrfS(PWsud z9Wuq<+kB2kFmIjLAAR1|X4Y$qZEN=Ld2KLlRdmdC1?`-}+oHMZQlHCm+e%E+6$*5? zzVplEoZlG_^qQXv72owO+}Bjdy>PqUVFI&#hl4y)NT(q?9GarX|sW2MK7?_NJrYI%J_*`L2Fvm>lmT`^q~Tgz)b zB{|gaX|C4xL!W*Z*)Do-6x#FpQ1*@Z1y{@Ww#8QM*K>Jy{p4S(6_4k2?`NEtF8o{J zyjs!|%Qvro=ABP$P5$8fulSR{0E;66d3}C0JFayH%lqo2rte#R@R@vXto>K_J@n7J z%X)7uPK8G+S~k7jtncv8=H7pyRfYA(RCxbvk$8Xmi>8VF)0Nf}|7RU&K9GK%)&8J* z+{}|2uU2F*U3Fo1Jf~nKb4l$+=3V`Y6s|wk*Jj_F%X0BT?)pEfM{H+Bnue8sIB8PS zw(#-q-I@0zZ0}$2wY{|Qby#7|_0;tnG^+pa{4e0_zGj2ygl7urJWI7~mPBnnq^E7P tC#!Ypj&~L{LW=Pp%VeIeKD%R9!JhmMi^9I_8`lHa-&cQ>m#YX00{|&KM=$^Y