From a348909ba3cb8d274e313e9f6fff56d933c3dda9 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 6 Apr 2021 12:50:36 +0200 Subject: [PATCH 1/7] Enderdragon: Proper Egg and XP spawning --- mods/ENTITIES/mobs_mc/ender_dragon.lua | 16 ++++++---------- mods/ITEMS/mcl_end/end_crystal.lua | 3 +-- mods/MAPGEN/mcl_structures/init.lua | 2 +- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/ender_dragon.lua b/mods/ENTITIES/mobs_mc/ender_dragon.lua index e62b0d16b..ddaea360f 100644 --- a/mods/ENTITIES/mobs_mc/ender_dragon.lua +++ b/mods/ENTITIES/mobs_mc/ender_dragon.lua @@ -50,8 +50,8 @@ mobs:register_mob("mobs_mc:enderdragon", { arrow = "mobs_mc:dragon_fireball", shoot_interval = 0.5, shoot_offset = -1.0, - xp_min = 12000, - xp_max = 12000, + xp_min = 500, + xp_max = 500, animation = { fly_speed = 8, stand_speed = 8, stand_start = 0, stand_end = 20, @@ -59,15 +59,11 @@ mobs:register_mob("mobs_mc:enderdragon", { run_start = 0, run_end = 20, }, ignores_nametag = true, - on_die = function(self, own_pos) - if self._egg_spawn_pos then - local pos = minetest.string_to_pos(self._egg_spawn_pos) - --if minetest.get_node(pos).buildable_to then - minetest.set_node(pos, {name = mobs_mc.items.dragon_egg}) - return - --end + on_die = function(self, pos) + if not self._respawned then + mcl_experience.throw_experience(pos, 11500) -- 500 + 11500 = 12000 + minetest.set_node(self._portal_pos and minetest.string_to_pos(self._portal_pos) or vector.add(mcl_vars.mg_end_platform_pos, vector.new(-27, 2, 0)), {name = mobs_mc.items.dragon_egg}) end - minetest.add_item(own_pos, mobs_mc.items.dragon_egg) end, fire_resistant = true, }) diff --git a/mods/ITEMS/mcl_end/end_crystal.lua b/mods/ITEMS/mcl_end/end_crystal.lua index d089c3cdf..8fcf67a1d 100644 --- a/mods/ITEMS/mcl_end/end_crystal.lua +++ b/mods/ITEMS/mcl_end/end_crystal.lua @@ -58,8 +58,7 @@ local function spawn_crystal(pos) for _, crystal in pairs(crystals) do crystal_explode(crystal) end - local dragon = minetest.add_entity(vector.add(portal_center, {x = 0, y = 10, z = 0}), "mobs_mc:enderdragon") - dragon:get_luaentity()._egg_spawn_pos = minetest.pos_to_string(vector.add(portal_center, {x = 0, y = 4, z = 0})) + minetest.add_entity(vector.add(portal_center, {x = 0, y = 10, z = 0}), "mobs_mc:enderdragon"):get_luaentity()._respawned = true end minetest.register_entity("mcl_end:crystal", { diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 6a7f44dfb..4294215a9 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -313,7 +313,7 @@ mcl_structures.generate_fossil = function(pos, rotation, pr) end mcl_structures.generate_end_exit_portal = function(pos, rot) - minetest.add_entity(vector.add(pos, vector.new(3, 11, 3)), "mobs_mc:enderdragon") + minetest.add_entity(vector.add(pos, vector.new(3, 11, 3)), "mobs_mc:enderdragon"):get_luaentity()._portal_pos = minetest.pos_to_string(vector.add(pos, vector.new(3, 5, 3))) local path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_end_exit_portal.mts" return mcl_structures.place_schematic(pos, path, rot or "0", nil, true) end From 055c406d7a02b01724eb0f952e9ab4f5d0a4c6f5 Mon Sep 17 00:00:00 2001 From: Doloment Date: Tue, 6 Apr 2021 18:57:06 +0700 Subject: [PATCH 2/7] Fix chest entity textures (trapped chests were lighter) --- .../mcl_chests/textures/mcl_chests_normal.png | Bin 689 -> 672 bytes .../textures/mcl_chests_normal_double.png | Bin 1031 -> 961 bytes .../mcl_chests/textures/mcl_chests_trapped.png | Bin 1209 -> 674 bytes .../textures/mcl_chests_trapped_double.png | Bin 2011 -> 965 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_normal.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_normal.png index 5133f53ff7ea3f44e51d8c339f7efa67f967eefe..9974f60d5733ae946cab3be3f6e805b284eaa235 100644 GIT binary patch delta 642 zcmV-|0)73l1)v3xDSt5kFc}#cI1&&eBO@#yC0WyMH2)#9bMNF?oibdv9=* z9@}+c&cdI={Wv-P=Py07AD6Jq1_M5@+!kY=%St;{Ij$?9DMUK3+Ox}bHv7H@*b135}$+l?yK>7Y;8M~ zv7W$uV0^@nnqQokgW9%38R!Y7Bg?8(-a60f^=*g0^?&;At}X-Mo(mjja7O&i_UsO` zHoeF(d1*`mDr?h;K*y6g0i0H4O@kDZCk_Kkxd~o_0D`K#5lIL(Bbz2du?EIWMFXosuH7!RALa?3?xyH+VIq+?%ppuO3Xe zLi}@lvyVWD5AB!0mzVkFF?{nC9*L&~RQW`Ls#`%4>uEaw zz6XdL5H%epEiw49TrPj@0nbWD`G!@NWlgL9Q=(=JAWmE*>wt)c1o2LZ88 zl5s~6aLaFqb$@5G;f4cNFwHtn{~#b%c+eDm_9rMw9h#v2aY=x%BTgec_h;;eG@+=| zyEzX?*F2Vo&*cU8Pr9yD5@dOe*0J`d9O%Voiztkaf4f>;Rkst`RW%11Njr|tq5SrP z{kUaqC$tuAkS<8oP{*~8&Z~NLJE7HSL)kI1ip4k1i+@UGJK=W)i?UN70hAYjk}iIj zzd4xSVb^9C88$D87=XGqYimqA9x}k`(rD%<*gSn0n3$VLDH*_Dns>Zy=ur&em;ugm z;3fwE7~l&5?MrMPyP;3Od4|nPql3Uix+W<$C;}QL2R^882>2KjK*$Gmou+dWH8xLk z8)T4o4S!JkkM;lOEe0000o88{LUBO@a$EG$GdC_Ozr zPChV6Nl95oH)2aWaaKfkTS40Uv!_>Z&VK*|Q4at7!|Wg872H%1KuyPop$J0>a2MqT;@aO~UBJ>=WQ}Ab$ff0N zEPyWN=~6_<lp&)a0&vpkdk>iv`#nQ!a0WesUkuxFVW@# z^(LQ#lPs!zV4mazW|fLa*mMCtfJ*Qo>c=bdz3VC~Xn!riv=JgH^j)(b+=8K`vhp$r zDhV`+vJl(_s6^Mq*j6_Q+P1n+WivndPShi~{u#rAV|=5&6JDBY>?C6g1v)mJUq&=t})5jCj`bYG^w`+!V_PO_dJpDcQeNxBR^vc1)Kpwzzthg1Nu1x{uZy)ioM9_7ROnSuNKx3=Tvk9GFv`4X$vEC&5oC zl?NcmAj3w=1<{B_D&b@mE3ai3Rr8YZf+=T6fk$Z6e{7^<^r)!HifLO zAmAOW-oIFfGmBs+5Kug+AaJ@Sz;(hAsssqxTz`N{op4kq+;dhil5h&@C{@BO%8;IFpRf5x-$$*w~s%6v&JJ^7OI%4_*97m@k#w0>$sDQ zEq@DDhq;NHs7wrLI8Ihr2vv8Mu}_BTj3*sF5F>%H&mUwweaNxi_&#F`1>89mF(Dm( zwjk6S!!Q}~D8~-Q_ZeF(kP;H7Q71hWZt6`RSVEP+Dm&mw#uf{3FNvq2JMS=8j(Egi z4J<5Xiv?IGfpWP5h6>6iEMzeV6tcw@^f23`ckDa9jUC@{dTn@w54J+Kw#61(Y_Y}v Z#V-QG-H{0gf6V{@002ovPDHLkV1oaNq&ENn delta 1021 zcmV^AB0gjv7r-)aG~#p08KqYDnQYBeXp%PBn)}&O`kHaeJ}xk&ypme; zp*_dnN;|ca4K~?_1-9&Ox=60eWWXy3PXFT1UH%F_5r_x?4uff=KarBaTeP_9$ z;3$E;O&1*~AZztN4f_}YT;A_;0o3pUVKXmaQ)ABeA}@7&HsO9~S7}vMjJsY?WF~ zvR`z$nB<6XCtF$TCi{dyt!xN!t&IAx3U5V)VMmPYnz0SgiZR|8fpw&57E zOj}q)jAydX2)I}rH~jJj3P_YfVkrRh8olA@h-b2=<9PA*2&Y4N r3A_aU{w7`mFM;3kDR}YX#fyIcKpwkkCH7o88{LUBO@a$EG$GdC_Ozr zPChV6Nl95oH*r=(cUwt(UrdQ=PLXg@_=nP>00001bW%=J06^y0W&i*JBS}O-R7l6| zlEI4FP!xt;^Z_a@eStnf8yVFI#{)PrGLv}ycsi_7VAAYvy~#V z?kG32D-ucEm0=i@XXv^221n_!T^Hso{5jl@ljDE>(j)6}39C|P!271xWX$(iX{V~k zjshA&qsuOF zmi{caCj<=K@P8m+_0n`Twlr`g;Yt11ylo^6^~0xBJoz7-zsLJ(RJz-zlJ-oNeMLKKc|0epTCc zC|5NF4AV&xpF`#SSL4md+;%7dnpzPPXYwSR4g($^Czt}L@!edj)NoNb4{ zj5D1D%f`gtO= zHW8RS+JC6aESpKIF?oWTz&w>TkhOoTf1bPi#4wB(WfWJ7aW6WwJXrX^n*6!@QcBS& zDMA}=enj(j^4WMTrRbCtz{O@6t=b8LZ&Hd*iB9zz0}Oy7v?TYUfgB*t7o=z)3Rm&< woD>a+_6qkQMO(<5;D6wxlpgA#{>Sr~F000DMK}|sb0I`n?{9y$E000SaNLh0L01mzY z01mzZ>O!%=00007bV*G`2iyt~2@*72tl>rg000)d0vx3}B)`}_ON z$G4Ba`117T7y5`HmYffduYV(Rdor$-J-;bJ@s8W{(6RxD{r2hIZ+!p!ehWhS24s`K z*dJe?wlL25zkk+%9JlGAWjvd##49A%ry=+d`uOU_PRu8#l|8?4>THZ>j@$Imya5jn z58DlTdOge$Lo7MGBMgCg#Yarr0OEktWrM(G-EfjO08z&@fLPXOW#=(O0jG=T`~)DI zL5%T=I;H_UTiJQc6SV=aY?$8GC8S!jo=YO%$4M1Ff6Y>W9lMO(Wr;WJ$ z5&UNxke>jec0tUad;;XOvh!H}A;bpr+9ObyBZgT28RS+R^CLKA13Xbq*Xy6y2*!B> z5QUGqUTlx~7jXl)s%*HYzX1rdNkW|Y{%#}}(SRg34t)b4jXXAEwPF)_s2 z0M|0_)Ow@5tk-0YtuLks#KOxXZ7bxZ>gYXi*f$@!jEb{=C>h)R*%iV>WuV)AqW@vP+-7<)^2 zZ+~UyF@zxMxf;;Z%Fbh_HUKdS$LH7vB-7sjHg`$`$m1P6;q-|OAg`63#}IW)1Bm5` z7*Txs(w}p!>^z1THh4?}6w_aI@x*(kZU7tH*8pNXO`a*5_aqx(%+w74HtRR*GewCx z`JEfzqj<*CHlT-%_Vh7*Q+AQ-w6f>7<$wP>%tnPmyU5riW86ggsvO9eiYf=H*d$|{ z%&~cO^U5*i`_q?K*O)%<<@NQpcs2mvzC6dr)^ofsugM%6N&eXIB#ALUPP{`EQ~A8E z!1&O-Q|ld)*JO^ZPojJNI_u9EAf_q?o)!p;+m|5Ear%(1yJxCl?kg)PpL_e;rZGRKw+Lw-jr-1~Tv zb18XE=Ga`EMR>A^@9Bf|$?SPe=6@U7X0utE(zz0)b0tdWN|er(D4i=&I#;4}u0-iv ziPE_erE?`p=Sq~$l_;GnQ94(mbSkby>0F7@xe}#wMxM>8Vl(nQc6Id=*tZtL<|9;J P00000NkvXXu0mjf?&D5S diff --git a/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double.png b/mods/ITEMS/mcl_chests/textures/mcl_chests_trapped_double.png index 95f768f97c0e7f1243b73df472b10174c7e69246..88ff45825f872490246c2b5eb81f18bb907d887b 100644 GIT binary patch delta 955 zcmV;s14R7W55)(N7=Hu<0000W_+m@|001yhOjJdG000>o88{LUBO@a$EG$GdC_Ozr zPChV6Nl95oH)2aWaaKfkTSt3&X@Ae9?6i?oICkEmixEnW zr4V{tW{i|m3C5FhE+z4P$z_X!>p2~}}A;J_jdRRQteeWdvrWib&XW0X~3A@B!*YEAzdpGJh**EWxxPA_?>zvp2p0LrG=j z<#=35piY#9;4VNVIwr=px=GMB)qN_O`N?;}F2U8$7#7N)w2}L{e9Jav|g#MR?DytsMU&Uxt3vYAS&U&oa$_FiDPVy ze@dx506_*BHdHPMhb&YHC(BrQEyJjq7mpT9Ia>rJ1bPRnxb~!gxuc~}3CA`Uh;*_k zqQ0#xdRqdMW9vVx(6Q&2~#5^fo7 zE|AtwHOf(?jFb_WxeST`mJ+I%rHs_OJzUK&C_f~ee%ldV&Pd}M*z8=tjv>SP+SQUx zRnN+-U@gP+H3ADc>1`?u!+*WbJ1-2wc(bEB!?1Mw@bfooJg`Nfim8gv*VbDVpVZH= zj(avX%EW*Mqj-gdP<3Z1`)H`nc--cFF%%g4{9Z=W`wZ)i?ou{az@1YO z5z^+T3qrjS43i-bGi-l!m$LZ+2_aDuwv!X#Cf@X(#Z(EbvV9(>Y`y^Z;%FMU^EPwk zkcSM`z=C`>Ux2k^D3>c>sGw}Z0v3TlE;O5OLBC15$G+p+*zp~w+k{8>V9RAITWqn# d7F+yZ`~s_X-5jfjq&NTo002ovPDHLkV1jaqv%LTS literal 2011 zcmZuydpy(o8~?5y#2QJogC#|j>nhVG3^}Z54pOQacE)j=%eHW0l*2iSKcDye^?9D>^}If*Zs(k!N}5Ul z06?+Mr`=^SQD&H(@-ja#n2;a~-v!#a+5te-ZOAu2IoVk;!r7Yw0LsnV1`^v>wa7pP zD%RCeVN^*~QB6)gsNY%!!KjWGsUG10)M&pb5)k1RM5daONz?-;OwCO#NXf@YGS&~+ z({`RQKA-bn-qa`UP7!J%qmKKjC8eM5mjkP6>^r1-!rXk1Tx)-er}=KP7Atd!(uJau zqEF1~hB9IQ7)4rO8Z)yc7H&K#uj~_xq07tD-F3^~)+KdyuN9^`Ztbhvs`PpJ%SN|l z`212Qj=(z<_R3CN&iOeII(Trt)3PWni{gb&$emp)8V&6V@K-fyUPy}dtOgkl+9qsK zZ*vkhw(fE0o2x!{&q43O^wg!{U@#RS9g3gwS>DvmeMe(G0xidz-##M^L^S-A=WNc9 zH-F?#q$D7LT1y=c=O`=TEwtsCLDeaV?AA>};!q_4r{NI{USyd-e8SDH4j$l|0cfRH z8zXFuzDvc7HD0_>uc2PxY&oPo-}MCQt6R@JfuRq;qhZ3~T)oW_I;b`j$jb^eadXO< zLs2O`nPe8q_~2f-7tFos51e^3?(V_fG4|tzfl9*4PVi1-}0y zumVZ!ZF`zJEAh#0H1Nv&wj-mo=`&mdrPXp$G+`J+2N|YRA#qY+9Idy?0+UZ^Ae_`J z&XlV8R-@UFNcw9lLRanxfR(0;DxOJ1b68h#VeVe#wK1X2*je-f56Jd_5W$PFTuY+F zTKFjlyg1(^%8q1gDzZU^{+t=y$At`ml}PDNWOiH0a8r@3^0+}Jf@-79$nWxVO|eOH zy-Cb=@K0PL`^0^pL>%-r861t`q@{v+|HpJ!=>RzkF4}{1l$~@@j}^Q5KXRp3t6s3b zduFY6CowJ3#)3I-uInItU6@1BGpkmm>*pGFJnJcC2PwC4txM4>V)wpJCk=}Y{Jekv z5?z4M@Mx5v&*8aK1*a%*S@NIZO@9Tg;t}Rhq&SM>khf53)IZ{)ls}b7mg>%h68Ech z^N(F!P{|AltLJ-k)uf!@V=olfcsn-f@^*Em*1p!}Bd+n9zEsxs^46);$o4ASJ$}O1 z3G7$tbCs>mgZ4kVz=~|?;P}JzfRd5&my&LrQS$ix)vDn%im_OC#WybM1m+MDP@Eui zvlK(v_d*6Aq^tKH{97A;#eMRF4zzz~#{m?+buh8!+Yy+NrxOyh(uewzSwJL%sR=7b z@sYK@HS!0J=#?1_YP#uZ0Zn76wWw1_`pMN&YH|+i!@D-`|dt>sAbN`5q+N%s68Z}WnKHj($ z0^GDKF|JPT_Ge_$GdL@>{WQ#6#2i+nWF~vT_(83fHjIfEX>N9WSdhC+8vCDYheeCS zMK@8L@9VPX(9Xg;ti=KKK!{fuK<3?pw!EXMg$KWEeSi;c^0Y;17OQ5pL3QmyEP)WV z#=@z_34M*`=jWS5H+tJ5>ztf#w`1A$6xiGg7Vq|GvYggw>fKn zfHaq`dO3SNl$_l^Nr(?)FvLd8a3}7rP8;v-8k3+A-)M`=QM%fi)L-^ztI&Axu9mHF2S0&EGEwja6mKJGqLRid#;2GuEs!DKEWep*WQB%f0 zvH>56Yj#(e2D$uf{X)T`tg!uBgz#+)O;WynkEC$#Ay9<)L z^KOjzi6omRiln*Lw-3!G^W20T0ouqfle9n(qY zGb#sNc>ff&Ubz$=g*Q(zD43-GChJGcP6Xm`i8y9Yw&GcxC#!kduv^z%B1S6aN7rOq z7nkh1LqX7`3olc4w-o&GYy>VmPAuoYzX-lgt=T69k_~F^t7Lh9h`qOzYei3C=E6}&Z?{1MiL|Kgr4X^M@ z`Db!Qt^4)o-G@CJrsl7kM&`6V8qkkcp{6$OMcy^7A9}T|V;%9A{Whvyok8sy1OH~M ohmTro(S=}T Date: Tue, 6 Apr 2021 14:50:34 +0200 Subject: [PATCH 3/7] Add bossbars --- mods/CORE/mcl_util/init.lua | 2 +- mods/ENTITIES/mcl_mobs/api.lua | 16 +-- mods/ENTITIES/mobs_mc/ender_dragon.lua | 3 + mods/ENTITIES/mobs_mc/wither.lua | 3 +- mods/HUD/mcl_bossbars/init.lua | 124 ++++++++++++++++++ mods/HUD/mcl_bossbars/mod.conf | 4 + .../mcl_bossbars/textures/mcl_bossbars.png | Bin 0 -> 3689 bytes .../textures/mcl_bossbars_empty.png | Bin 0 -> 3369 bytes 8 files changed, 142 insertions(+), 10 deletions(-) create mode 100644 mods/HUD/mcl_bossbars/init.lua create mode 100644 mods/HUD/mcl_bossbars/mod.conf create mode 100644 mods/HUD/mcl_bossbars/textures/mcl_bossbars.png create mode 100644 mods/HUD/mcl_bossbars/textures/mcl_bossbars_empty.png diff --git a/mods/CORE/mcl_util/init.lua b/mods/CORE/mcl_util/init.lua index a43c3d5d0..ac913de39 100644 --- a/mods/CORE/mcl_util/init.lua +++ b/mods/CORE/mcl_util/init.lua @@ -410,7 +410,7 @@ function mcl_util.get_color(colorstr) local mc_color = mcl_colors[colorstr:upper()] if mc_color then colorstr = mc_color - elseif #colorstr ~= 7 or colorstr:sub(1, 1) ~= "#"then + elseif #colorstr ~= 7 or colorstr:sub(1, 1) ~= "#" then return end local hex = tonumber(colorstr:sub(2, 7), 16) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 6e932ed5e..e599f2127 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -3526,14 +3526,6 @@ local mob_step = function(self, dtime) -- end rotation - -- knockback timer - if self.pause_timer > 0 then - - self.pause_timer = self.pause_timer - dtime - - return - end - -- run custom function (defined in mob lua file) if self.do_custom then @@ -3543,6 +3535,14 @@ local mob_step = function(self, dtime) end end + -- knockback timer + if self.pause_timer > 0 then + + self.pause_timer = self.pause_timer - dtime + + return + end + -- attack timer self.timer = self.timer + dtime diff --git a/mods/ENTITIES/mobs_mc/ender_dragon.lua b/mods/ENTITIES/mobs_mc/ender_dragon.lua index ddaea360f..509409a2e 100644 --- a/mods/ENTITIES/mobs_mc/ender_dragon.lua +++ b/mods/ENTITIES/mobs_mc/ender_dragon.lua @@ -59,6 +59,9 @@ mobs:register_mob("mobs_mc:enderdragon", { run_start = 0, run_end = 20, }, ignores_nametag = true, + do_custom = function(self) + mcl_bossbars.update_boss(self, "Ender Dragon", "light_purple") + end, on_die = function(self, pos) if not self._respawned then mcl_experience.throw_experience(pos, 11500) -- 500 + 11500 = 12000 diff --git a/mods/ENTITIES/mobs_mc/wither.lua b/mods/ENTITIES/mobs_mc/wither.lua index caf5a248d..8e7f7eb95 100644 --- a/mods/ENTITIES/mobs_mc/wither.lua +++ b/mods/ENTITIES/mobs_mc/wither.lua @@ -73,6 +73,7 @@ mobs:register_mob("mobs_mc:wither", { self.object:set_properties({textures={self.base_texture}}) self.armor = {undead = 80, fleshy = 80} end + mcl_bossbars.update_boss(self, "Wither", "dark_purple") end, on_spawn = function(self) minetest.sound_play("mobs_mc_wither_spawn", {object=self.object, gain=1.0, max_hear_distance=64}) @@ -115,4 +116,4 @@ mobs:register_arrow("mobs_mc:wither_skull", { --Spawn egg mobs:register_egg("mobs_mc:wither", S("Wither"), "mobs_mc_spawn_icon_wither.png", 0, true) -mcl_wip.register_wip_item("mobs_mc:wither") \ No newline at end of file +mcl_wip.register_wip_item("mobs_mc:wither") diff --git a/mods/HUD/mcl_bossbars/init.lua b/mods/HUD/mcl_bossbars/init.lua new file mode 100644 index 000000000..38dbbe376 --- /dev/null +++ b/mods/HUD/mcl_bossbars/init.lua @@ -0,0 +1,124 @@ +mcl_bossbars = { + bars = {}, + huds = {}, + colors = {"light_purple", "blue", "red", "green", "yellow", "dark_purple", "white"}, +} + +function mcl_bossbars.recalculate_colors() + local sorted = {} + local colors = mcl_bossbars.colors + local color_count = #colors + local frame_count = color_count * 2 + for i, color in ipairs(colors) do + local idx = i * 2 - 1 + local image = "mcl_bossbars.png" + .. "^[transformR270" + .. "^[verticalframe:" .. frame_count .. ":" .. (idx - 1) + .. "^(mcl_bossbars_empty.png" + .. "^[lowpart:%d:mcl_bossbars.png" + .. "^[transformR270" + .. "^[verticalframe:" .. frame_count .. ":" .. idx .. ")" + local _, hex = mcl_util.get_color(color) + sorted[color] = { + image = image, + hex = hex, + } + end + mcl_bossbars.colors_sorted = sorted +end + +function mcl_bossbars.update_bar(player, text, color, percentage) + local cdef = mcl_bossbars.colors_sorted[color] + table.insert(mcl_bossbars.bars[player:get_player_name()], {color = cdef.hex, text = text, image = string.format(cdef.image, percentage)}) +end + +function mcl_bossbars.update_boss(luaentity, name, color) + local object = luaentity.object + local text = luaentity.nametag + if not text or text == "" then + text = name + end + local percentage = math.floor(luaentity.health / luaentity.hp_max * 100) + for _, obj in pairs(minetest.get_objects_inside_radius(object:get_pos(), 128)) do + if obj:is_player() then + mcl_bossbars.update_bar(obj, text, color, percentage) + end + end +end + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + mcl_bossbars.huds[name] = {} + mcl_bossbars.bars[name] = {} +end) + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + mcl_bossbars.huds[name] = nil + mcl_bossbars.bars[name] = nil +end) + +minetest.register_globalstep(function() + for _, player in pairs(minetest.get_connected_players()) do + local name = player:get_player_name() + local bars = mcl_bossbars.bars[name] + local huds = mcl_bossbars.huds[name] + local huds_new = {} + local i = 0 + + while #huds > 0 or #bars > 0 do + local bar = table.remove(bars, 1) + local hud = table.remove(huds, 1) + + if bar and not hud then + hud = { + color = bar.color, + image = bar.image, + text = bar.text, + text_id = player:hud_add({ + hud_elem_type = "text", + text = bar.text, + number = bar.color, + position = {x = 0.5, y = 0}, + alignment = {x = 0, y = 1}, + offset = {x = 0, y = i * 40}, + }), + image_id = player:hud_add({ + hud_elem_type = "image", + text = bar.image, + position = {x = 0.5, y = 0}, + alignment = {x = 0, y = 1}, + offset = {x = 0, y = i * 40 + 25}, + scale = {x = 3, y = 3}, + }), + } + elseif hud and not bar then + player:hud_remove(hud.text_id) + player:hud_remove(hud.image_id) + hud = nil + else + if bar.text ~= hud.text then + player:hud_change(hud.text_id, "text", bar.text) + hud.text = bar.text + end + + if bar.color ~= hud.color then + player:hud_change(hud.text_id, "number", bar.color) + hud.color = bar.color + end + + if bar.image ~= hud.image then + player:hud_change(hud.image_id, "text", bar.image) + hud.image = bar.image + end + end + + table.insert(huds_new, hud) + i = i + 1 + end + + mcl_bossbars.huds[name] = huds_new + end +end) + +mcl_bossbars.recalculate_colors() diff --git a/mods/HUD/mcl_bossbars/mod.conf b/mods/HUD/mcl_bossbars/mod.conf new file mode 100644 index 000000000..64cbd4c9f --- /dev/null +++ b/mods/HUD/mcl_bossbars/mod.conf @@ -0,0 +1,4 @@ +name = mcl_bossbars +author = Fleckenstein +description = Show enderdragon & wither boss bars. Also allows custom bars. +depends = mcl_util, mcl_colors diff --git a/mods/HUD/mcl_bossbars/textures/mcl_bossbars.png b/mods/HUD/mcl_bossbars/textures/mcl_bossbars.png new file mode 100644 index 0000000000000000000000000000000000000000..55bf36dc288f271d12228a67a6a39c98c6ca18e9 GIT binary patch literal 3689 zcmai1cT^L~(hnlii#!lDfPhF-E?s(&5`qv2Ni-w~NC^-rL3-~BB1NKfNB}`XuK{TR z6hx^4f{m&IN{e(sFfaGr``zpHy>q@jXLn|2W`8sDJNw7(9jLi6C);T@006*g0yc!v zC5S#7Ss3Xn+=0Cs0AN=NMp*g6>;pu+ym8K0cZ`T{kQYV-6Nq&N00Q4t=Ggm-OIO{Z zx$)P>0;2T#85kDZga$Si6TnF173A?4ae|NVnR?cMl-(2jl8?3Xrk@-t6^XBA#!K zIJST7+v$5@3yJr)+f!YKaUn9qDBljr!uBxS(g1ZtN2pqw*tDv-bzkTH-tJbI0XBZL z>~oJg4zzi=Qq8nN?Pl!t)@3>z)t0-)8rNr+E+V4)c-JqKKxN!AxHs>pekgc|bJ1ne zO|j6V@tN+O28V}sfXvAZ=$Fuzs>3bmT zo6Dj;^Zsb{?SP)3R=J*X-H!@jig1X8ZMrgsg>~W0#o?9(v1?ua;K&m!aco_)5h_yYEiAPF^mDpxxTB zz`T$zWK&#wz^XyL;*IN9MjqK*>3yy&KhkN%c*u-)CTR6nz@2l#mIRN5R#>UjI#0cN z)^}H+uNyyp)vo24d4r|2|69L)&sN;j$4K(ilHA}=4Pz;UbqIOO$zm$Ec_8KoAt_l!2RP}ZYF8wymXHa+$oRDqr--0LgaXuBSF6XShH4R}!Ca5%{0OX4Kg2anZ?;!yJ! zr3>1mJZ;GXTa6UQf?^%xjoV*2=Rhy#wg}~lV(A%=&hdnreF<@#E@k;w3&u(JsML^b zjy&%mPx+j^uuDn3mFkIt4POsoCKkrzHxkn~lFo~bDx6E`Xnt0+qz?T2*}-ah0`#gD zmf4jP_53qp%`J}%gbKWUVRJd?in!y4QUo#!6B+CBfI_sr`=YPs*@y#a7O3zHe^jY; z1#StQPb63JFP}^rTd`4Ovu+wSJar;0FlZA0&;lfatoLoKD4QL)!gP^TwWgPcoKGI- zwE&^8`88$iP3|QW_5N%O=2+0}KAThxe*&9;*CjTJ4W!%ho}O#n>m zMUY&XGf7>GZ~8vfR4SC@{T6>lcn=EUg07f*$S_J27m;;ri(n{l2~6omU(1UpS{H#z zF9ycl^LfN;%a-maYxE^-MHRxPX!{FuCblg*FI}kh3_S$aKr<1~`w5#(41&M$?*Kt) z&Z@@;hb%hh4UZnJ&-TYzbFIEpeH<8lDx~nU=#cGL%oLU z(-LRxb6V_;xNI?!zqxeu4eI6N2+db~m&gW?Ka}lxspvo4B)Fw$R^%{8jh% zA-~(vaV`}j=&BH%Imt9Sg>;Von}nsD!{dl$>-q@de|$U1f6~z^{3|arezL!u|2UTpi}ADA&E|z`1uhgH_LrsXu79USccVSe<1x!f;MH zV@-*yi!e3yl(%d-;L{8{*zpvt4rF&mF26b z^oFh3=+ddxg68@9gjelWCAi>;0J$}}rVpdsAvfQjcD2yBh|Fs4M_(yA`%paQWQf1% z*K)Bytcb7+H&~pWEboEMkx@J^9@wi1}$3`fWOR=i-B;*woFblf-6g0^?xz z8T*-XbUBx8%7w^Ha3pSJK(S7^5I{7455m}H~7sr++X1tYU1kKBR{LLtK=+C zua-vSeb_1&%+RnL4ux0eMZHSRLU>49m2rZ$;P>XhsyosObBuev-FF()@%j}5;HYF+ z+~|0K^}YNm6gRu~5yZj}@S-UUNQQWva{u;Y3PK4JDDV&8UwX#rz!&i{sK^zTxI{~d ztcz;9s_yq)SKmy{>+U{mpPLa^6O@>*unzz*gklX0pjbyo`eQjaEL9u)R8O$SPPajf zpII|r!--^mqB}wD27dxn^c7pBM&`ABCdg?#pMY@}d3LtfVZ5scg=9uv;yD1^^zniD zrt;D<_|V;fUXv*SyTSofK*Yl*2qiTJQZ}aOKC5VsHNSo}OCivnsxN%WIj8uuD6Z{xy?b6;7mXc(i};gQ|RGwM;m;HP_ZyH{h3j7VL1` zlt)w##EC&%7X_7r67DFkN@^V#B-@E+m{lpBR6hZ|#r9%7hSo*(9MlgTg|JCRRtdcS zags^DRj=Oj{Y-D;lorF0;m)*)9VD=GK=R9W;|c8}`%O`Imm4Lh3>li8v-f{Hg+I&W zy3fuudzeU(X6BeY((dMos|?H40i0Tr@naMeJmP57XS*91VBvzJ5wP34jLzcTh3=X$ z?)2Y`AJhzCM3?kY6e!k`C=+*;cd5%EEG&#bAmH(M3WdVL$}KLTBq$_hd>Nt5;bJb6 z2oa2QH7NB-V6SVq@SsF+WDKO^Y^IDda*VTPk^p##s^+L0Cd=!QArMiGP<2d>ta++g zaGj%8)IH0RD3jb82MRqM`#=mYT`>5<%;5mNg*Wtn6M(_N)YuRZ&m;t*?>4p%+JTq8pigO&~_h^GA~ad*(~W}oravG zok$xJ6_ZzcQ7Pb?m(6L0=NMJSS~PqY$8(KcnjpCDn%tkxoXM%%F>JNS7Vl}xge+Se zhW7+(o!Pan=->9%5prDP{%(_a!`fq_w(m;wweCL2y};P6>+&Z#j>Y`HVxc38pd)th fnwk(!NepGcs%U*f-ravruNYurWNuice?9u&V{+xc literal 0 HcmV?d00001 diff --git a/mods/HUD/mcl_bossbars/textures/mcl_bossbars_empty.png b/mods/HUD/mcl_bossbars/textures/mcl_bossbars_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..1e50b6afc2a8dddc0748ae7763a5975ef6956b24 GIT binary patch literal 3369 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 SEo%JRzk$BCkyed{6ZSuzSwWZp literal 0 HcmV?d00001 From 962a13847e64613e53f1a2542860d3439a9a6d4f Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 6 Apr 2021 14:57:29 +0200 Subject: [PATCH 4/7] Fix dragons summoned using commands spawning an egg on the exit portal --- mods/ENTITIES/mobs_mc/ender_dragon.lua | 4 ++-- mods/ITEMS/mcl_end/end_crystal.lua | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/ender_dragon.lua b/mods/ENTITIES/mobs_mc/ender_dragon.lua index 509409a2e..01c346579 100644 --- a/mods/ENTITIES/mobs_mc/ender_dragon.lua +++ b/mods/ENTITIES/mobs_mc/ender_dragon.lua @@ -63,9 +63,9 @@ mobs:register_mob("mobs_mc:enderdragon", { mcl_bossbars.update_boss(self, "Ender Dragon", "light_purple") end, on_die = function(self, pos) - if not self._respawned then + if self._portal_pos then mcl_experience.throw_experience(pos, 11500) -- 500 + 11500 = 12000 - minetest.set_node(self._portal_pos and minetest.string_to_pos(self._portal_pos) or vector.add(mcl_vars.mg_end_platform_pos, vector.new(-27, 2, 0)), {name = mobs_mc.items.dragon_egg}) + minetest.set_node(minetest.string_to_pos(self._portal_pos), {name = mobs_mc.items.dragon_egg}) end end, fire_resistant = true, diff --git a/mods/ITEMS/mcl_end/end_crystal.lua b/mods/ITEMS/mcl_end/end_crystal.lua index 8fcf67a1d..9e4fa13fd 100644 --- a/mods/ITEMS/mcl_end/end_crystal.lua +++ b/mods/ITEMS/mcl_end/end_crystal.lua @@ -58,7 +58,7 @@ local function spawn_crystal(pos) for _, crystal in pairs(crystals) do crystal_explode(crystal) end - minetest.add_entity(vector.add(portal_center, {x = 0, y = 10, z = 0}), "mobs_mc:enderdragon"):get_luaentity()._respawned = true + minetest.add_entity(vector.add(portal_center, {x = 0, y = 10, z = 0}), "mobs_mc:enderdragon") end minetest.register_entity("mcl_end:crystal", { From 83b9cf3ad258620ff3b89bc9c1ce01b02220b82e Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 6 Apr 2021 15:48:17 +0200 Subject: [PATCH 5/7] End exit portal openng / closing on dragon death / spawn --- mods/ENTITIES/mobs_mc/ender_dragon.lua | 8 ++++++-- mods/ITEMS/mcl_end/end_crystal.lua | 4 +++- mods/MAPGEN/mcl_mapgen_core/init.lua | 14 ++++++++++---- mods/MAPGEN/mcl_structures/init.lua | 12 ++++++++++-- .../mcl_structures_end_exit_portal.mts | Bin 222 -> 193 bytes .../mcl_structures_end_exit_portal_open.mts | Bin 0 -> 222 bytes 6 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_exit_portal_open.mts diff --git a/mods/ENTITIES/mobs_mc/ender_dragon.lua b/mods/ENTITIES/mobs_mc/ender_dragon.lua index 01c346579..50aaacd4b 100644 --- a/mods/ENTITIES/mobs_mc/ender_dragon.lua +++ b/mods/ENTITIES/mobs_mc/ender_dragon.lua @@ -64,8 +64,12 @@ mobs:register_mob("mobs_mc:enderdragon", { end, on_die = function(self, pos) if self._portal_pos then - mcl_experience.throw_experience(pos, 11500) -- 500 + 11500 = 12000 - minetest.set_node(minetest.string_to_pos(self._portal_pos), {name = mobs_mc.items.dragon_egg}) + local portal_pos = minetest.string_to_pos(self._portal_pos) + mcl_structures.call_struct(portal_pos, "end_exit_portal_open") + if self._initial then + mcl_experience.throw_experience(pos, 11500) -- 500 + 11500 = 12000 + minetest.set_node(vector.add(portal_pos, vector.new(3, 5, 3)), {name = mobs_mc.items.dragon_egg}) + end end end, fire_resistant = true, diff --git a/mods/ITEMS/mcl_end/end_crystal.lua b/mods/ITEMS/mcl_end/end_crystal.lua index 9e4fa13fd..63a37d3c6 100644 --- a/mods/ITEMS/mcl_end/end_crystal.lua +++ b/mods/ITEMS/mcl_end/end_crystal.lua @@ -58,7 +58,9 @@ local function spawn_crystal(pos) for _, crystal in pairs(crystals) do crystal_explode(crystal) end - minetest.add_entity(vector.add(portal_center, {x = 0, y = 10, z = 0}), "mobs_mc:enderdragon") + local portal_pos = vector.add(portal_center, vector.new(-3, -1, -3)) + mcl_structures.call_struct(portal_pos, "end_exit_portal") + minetest.add_entity(vector.add(portal_pos, vector.new(3, 11, 3)), "mobs_mc:enderdragon"):get_luaentity()._portal_pos = minetest.pos_to_string(portal_pos) end minetest.register_entity("mcl_end:crystal", { diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index e08b55ba3..237579dbe 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -54,8 +54,7 @@ local superflat = mg_name == "flat" and minetest.get_mapgen_setting("mcl_superfl local WITCH_HUT_HEIGHT = 3 -- Exact Y level to spawn witch huts at. This height refers to the height of the floor --- End exit portal position. This is temporary. --- TODO: Remove the exit portal generation when the ender dragon has been implemented. +-- End exit portal position local END_EXIT_PORTAL_POS = table.copy(mcl_vars.mg_end_platform_pos) END_EXIT_PORTAL_POS.x = END_EXIT_PORTAL_POS.x - 30 END_EXIT_PORTAL_POS.z = END_EXIT_PORTAL_POS.z - 3 @@ -1251,6 +1250,13 @@ local function generate_clay(minp, maxp, blockseed, voxelmanip_data, voxelmanip_ return lvm_used end +local function generate_end_exit_portal(pos) + local dragon_entity = minetest.add_entity(vector.add(pos, vector.new(3, 11, 3)), "mobs_mc:enderdragon"):get_luaentity() + dragon_entity._initial = true + dragon_entity._portal_pos = minetest.pos_to_string(pos) + mcl_structures.call_struct(pos, "end_exit_portal") +end + -- TODO: Try to use more efficient structure generating code local function generate_structures(minp, maxp, blockseed, biomemap) local chunk_has_desert_well = false @@ -1490,11 +1496,11 @@ local function generate_structures(minp, maxp, blockseed, biomemap) for y=maxp.y, minp.y, -1 do local p = {x=END_EXIT_PORTAL_POS.x, y=y, z=END_EXIT_PORTAL_POS.z} if minetest.get_node(p).name == "mcl_end:end_stone" then - mcl_structures.call_struct(p, "end_exit_portal") + generate_end_exit_portal(p) return end end - mcl_structures.call_struct(END_EXIT_PORTAL_POS, "end_exit_portal") + generate_end_exit_portal(END_EXIT_PORTAL_POS) end end diff --git a/mods/MAPGEN/mcl_structures/init.lua b/mods/MAPGEN/mcl_structures/init.lua index 4294215a9..d75854352 100644 --- a/mods/MAPGEN/mcl_structures/init.lua +++ b/mods/MAPGEN/mcl_structures/init.lua @@ -87,6 +87,8 @@ mcl_structures.call_struct = function(pos, struct_style, rotation, pr) return mcl_structures.generate_fossil(pos, rotation, pr) elseif struct_style == "end_exit_portal" then return mcl_structures.generate_end_exit_portal(pos, rotation) + elseif struct_style == "end_exit_portal_open" then + return mcl_structures.generate_end_exit_portal_open(pos, rotation) elseif struct_style == "end_portal_shrine" then return mcl_structures.generate_end_portal_shrine(pos, rotation, pr) end @@ -313,11 +315,15 @@ mcl_structures.generate_fossil = function(pos, rotation, pr) end mcl_structures.generate_end_exit_portal = function(pos, rot) - minetest.add_entity(vector.add(pos, vector.new(3, 11, 3)), "mobs_mc:enderdragon"):get_luaentity()._portal_pos = minetest.pos_to_string(vector.add(pos, vector.new(3, 5, 3))) local path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_end_exit_portal.mts" return mcl_structures.place_schematic(pos, path, rot or "0", nil, true) end +mcl_structures.generate_end_exit_portal_open = function(pos, rot) + local path = minetest.get_modpath("mcl_structures").."/schematics/mcl_structures_end_exit_portal_open.mts" + return mcl_structures.place_schematic(pos, path, rot or "0", nil, true) +end + local function shrine_placement_callback(p1, p2, size, rotation, pr) -- Find and setup spawner with silverfish local spawners = minetest.find_nodes_in_area(p1, p2, "mcl_mobspawners:spawner") @@ -535,7 +541,7 @@ end -- Debug command minetest.register_chatcommand("spawnstruct", { - params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_portal_shrine | nether_portal | dungeon", + params = "desert_temple | desert_well | igloo | witch_hut | boulder | ice_spike_small | ice_spike_large | fossil | end_exit_portal | end_exit_portal_opens | end_portal_shrine | nether_portal | dungeon", description = S("Generate a pre-defined structure near your position."), privs = {debug = true}, func = function(name, param) @@ -567,6 +573,8 @@ minetest.register_chatcommand("spawnstruct", { mcl_structures.generate_ice_spike_large(pos, rot, pr) elseif param == "end_exit_portal" then mcl_structures.generate_end_exit_portal(pos, rot, pr) + elseif param == "end_exit_portal_open" then + mcl_structures.generate_end_exit_portal_open(pos, rot, pr) elseif param == "end_portal_shrine" then mcl_structures.generate_end_portal_shrine(pos, rot, pr) elseif param == "dungeon" and mcl_dungeons and mcl_dungeons.spawn_dungeon then diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_exit_portal.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_end_exit_portal.mts index bc24f800a6de0e4265fdbe08808c9720061b8490..30d145bd7fdc822259191c918696b74769628d72 100644 GIT binary patch delta 154 zcmcb|c#u)pHze4XfrWvcft7*19t0RzCJGzWmE;#CXQUQef$8}2#GIUpIa?=n^ED`N zxH`Vx{qw7j;reJ1ys)}uDrD>;&p_i$xl%M#|4o_Hb;dWRuj`fdDjvh*7QKNMy&unx^$sU)L+^RXm2rEqVhjdOw~yd0eDy%Dic&uPyg1I8yyH zO~3W?FE<7=#tl0-et5I*%~5yCuvOaK+coXSeq%5FGkVh6GdgztnH3o08erZh5UT|M Dl|EWe literal 0 HcmV?d00001 From 1d587b88955fc1de22e78e8dc64c9d440725ed8d Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 6 Apr 2021 15:59:59 +0200 Subject: [PATCH 6/7] Fix crash in wieldview --- mods/PLAYER/wieldview/init.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mods/PLAYER/wieldview/init.lua b/mods/PLAYER/wieldview/init.lua index 48f3f99bd..6021dd369 100644 --- a/mods/PLAYER/wieldview/init.lua +++ b/mods/PLAYER/wieldview/init.lua @@ -70,6 +70,10 @@ minetest.register_on_joinplayer(function(player) local name = player:get_player_name() wieldview.wielded_item[name] = "" minetest.after(0, function(player) + -- if the player left :is_player() will return nil + if not player:is_player() then + return + end wieldview:update_wielded_item(player) local itementity = minetest.add_entity(player:get_pos(), "wieldview:wieldnode") itementity:set_attach(player, "Hand_Right", vector.new(0, 1, 0), vector.new(90, 0, 45)) From 38a12e59daebe9efc9f797db4c12e8ab2263d5b1 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 6 Apr 2021 16:02:18 +0200 Subject: [PATCH 7/7] Fix comment indentation in wieldview --- mods/PLAYER/wieldview/init.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mods/PLAYER/wieldview/init.lua b/mods/PLAYER/wieldview/init.lua index 6021dd369..7a349f2f3 100644 --- a/mods/PLAYER/wieldview/init.lua +++ b/mods/PLAYER/wieldview/init.lua @@ -115,10 +115,11 @@ minetest.register_entity("wieldview:wieldnode", { local def = minetest.registered_items[itemstring] self.object:set_properties({glow = def and def.light_source or 0}) - -- wield item as cubic + -- wield item as cubic if armor.textures[self.wielder].wielditem == "blank.png" then self.object:set_properties({textures = {itemstring}}) - else -- wield item as flat + -- wield item as flat + else self.object:set_properties({textures = {""}}) end