From 778ddd555fb5be96c2d7dc77d3542120e4848543 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Fri, 12 Feb 2021 09:20:32 +0100 Subject: [PATCH 1/3] Move mending code to add_experience function --- mods/HUD/mcl_experience/init.lua | 140 +++++++++++++++---------------- 1 file changed, 68 insertions(+), 72 deletions(-) diff --git a/mods/HUD/mcl_experience/init.lua b/mods/HUD/mcl_experience/init.lua index ff5647616..32c2d9424 100644 --- a/mods/HUD/mcl_experience/init.lua +++ b/mods/HUD/mcl_experience/init.lua @@ -238,6 +238,73 @@ function mcl_experience.add_experience(player, experience) local name = player:get_player_name() local temp_pool = pool[name] + local inv = player:get_inventory() + local candidates = { + {list = "main", index = player:get_wield_index()}, + {list = "armor", index = 2}, + {list = "armor", index = 3}, + {list = "armor", index = 4}, + {list = "armor", index = 5}, + } + local final_candidates = {} + for _, can in ipairs(candidates) do + local stack = inv:get_stack(can.list, can.index) + local wear = stack:get_wear() + if mcl_enchanting.has_enchantment(stack, "mending") and wear > 0 then + can.stack = stack + can.wear = wear + table.insert(final_candidates, can) + end + end + if #final_candidates > 0 then + local can = final_candidates[math.random(#final_candidates)] + local stack, list, index, wear = can.stack, can.list, can.index, can.wear + local unbreaking_level = mcl_enchanting.get_enchantment(stack, "unbreaking") + local uses + local armor_uses = minetest.get_item_group(stack:get_name(), "mcl_armor_uses") + if armor_uses > 0 then + uses = armor_uses + if unbreaking_level > 0 then + uses = uses / (0.6 + 0.4 / (unbreaking_level + 1)) + end + else + local def = stack:get_definition() + if def then + local fixed_uses = def._mcl_uses + if fixed_uses then + uses = fixed_uses + if unbreaking_level > 0 then + uses = uses * (unbreaking_level + 1) + end + end + end + if not uses then + local toolcaps = stack:get_tool_capabilities() + local groupcaps = toolcaps.groupcaps + for _, v in pairs(groupcaps) do + uses = v.uses + break + end + end + end + uses = uses or 0 + local multiplier = 2 * 65535 / uses + local repair = experience * multiplier + local new_wear = wear - repair + if new_wear < 0 then + experience = math.floor(-new_wear / multiplier + 0.5) + new_wear = 0 + else + experience = 0 + end + stack:set_wear(math.floor(new_wear)) + inv:set_stack(list, index, stack) + if can.list == "armor" then + local armor_inv = minetest.get_inventory({type = "detached", name = player:get_player_name() .. "_armor"}) + armor_inv:set_stack(list, index, stack) + end + end + local old_bar, old_xp, old_level = temp_pool.bar, temp_pool.xp, temp_pool.level temp_pool.xp = math.min(math.max(temp_pool.xp + experience, 0), max_xp) @@ -333,78 +400,7 @@ local function xp_step(self, dtime) acceleration = vector.new(goal.x-currentvel.x,goal.y-currentvel.y,goal.z-currentvel.z) self.object:add_velocity(vector.add(acceleration,player_velocity)) elseif distance < 0.8 then - local xp = self._xp - local inv = collector:get_inventory() - local candidates = { - {list = "main", index = collector:get_wield_index()}, - {list = "armor", index = 2}, - {list = "armor", index = 3}, - {list = "armor", index = 4}, - {list = "armor", index = 5}, - } - local final_candidates = {} - for _, can in ipairs(candidates) do - local stack = inv:get_stack(can.list, can.index) - local wear = stack:get_wear() - if mcl_enchanting.has_enchantment(stack, "mending") and wear > 0 then - can.stack = stack - can.wear = wear - table.insert(final_candidates, can) - end - end - if #final_candidates > 0 then - local can = final_candidates[math.random(#final_candidates)] - local stack, list, index, wear = can.stack, can.list, can.index, can.wear - local unbreaking_level = mcl_enchanting.get_enchantment(stack, "unbreaking") - local uses - local armor_uses = minetest.get_item_group(stack:get_name(), "mcl_armor_uses") - if armor_uses > 0 then - uses = armor_uses - if unbreaking_level > 0 then - uses = uses / (0.6 + 0.4 / (unbreaking_level + 1)) - end - else - local def = stack:get_definition() - if def then - local fixed_uses = def._mcl_uses - if fixed_uses then - uses = fixed_uses - if unbreaking_level > 0 then - uses = uses * (unbreaking_level + 1) - end - end - end - if not uses then - local toolcaps = stack:get_tool_capabilities() - local groupcaps = toolcaps.groupcaps - for _, v in pairs(groupcaps) do - uses = v.uses - break - end - end - end - uses = uses or 0 - local multiplier = 2 * 65535 / uses - local repair = xp * multiplier - local new_wear = wear - repair - if new_wear < 0 then - xp = math.floor(-new_wear / multiplier + 0.5) - new_wear = 0 - else - xp = 0 - end - stack:set_wear(math.floor(new_wear)) - inv:set_stack(list, index, stack) - if can.list == "armor" then - local armor_inv = minetest.get_inventory({type = "detached", name = collector:get_player_name() .. "_armor"}) - armor_inv:set_stack(list, index, stack) - end - end - if xp > 0 then - mcl_experience.add_experience(collector, xp) - else - minetest.sound_play("experience",{gain=0.1,to_player = name,pitch=math.random(75,99)/100}) - end + mcl_experience.add_experience(collector, self._xp) self.object:remove() end return From 0dd0c3623e7c4752420743b135ea1f8a71ed2aaa Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Fri, 12 Feb 2021 09:25:23 +0100 Subject: [PATCH 2/3] Proper default for 3d_player_preview in settingtypes.txt --- settingtypes.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settingtypes.txt b/settingtypes.txt index 7acccf91c..264757db8 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -95,7 +95,7 @@ fire_animation_frames (Fire Animation Frames) int 8 animated_chests (Animated chests) bool true # Whether to preview the player in inventory in 3D (requires Minetest 5.4) -3d_player_preview (3D Player preview) bool true +3d_player_preview (3D Player preview) bool false [Experimental] # Whether ice is translucent. If disabled, ice is fully opaque. From b2e2120b9ea6b7e46dda52cc5ec62804a0b9ab6c Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Fri, 12 Feb 2021 10:12:57 +0100 Subject: [PATCH 3/3] Fix shulkerbox model --- .../mcl_chests/models/mcl_chests_shulker.b3d | Bin 84495 -> 25624 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.b3d b/mods/ITEMS/mcl_chests/models/mcl_chests_shulker.b3d index 86dde145ba44c0859b4d2f75e85d4f235ef76dcc..2592f86a0c299a010b242645a50ae98584eeab64 100644 GIT binary patch delta 4551 zcmds(%WqXx6vn@n7-A$135Hk;zTb!x>br1P1$^KGYg--)%0O_4@gMN4Kfs91730XE z0VWI>Fl>S$aZrs3GZUpF5<@TyOc*ez`R%oL_ierRb}ZlI?0wcbd#}B|-&yyb`u48x ze;!!7d-vGh^~W{4)&_t5w0-{8*wFDIX>oCJ@!-_V^tyEyZr&PN)BG|&Kc}z09_M=f z_YF34WXl9s$y?H-b;Pa2Pt0wYljJ3S^Pg)xm*W1{C9Cn#^nQ+~^@-Q@N1HwyxaAEj zCzuu{!PsD8DP9ubeocV*vIJHn$ofrsVATyuh1j50NGlUa@p?kyv3}14oBY5k8?0(k zpAsi)O1xAkERZ#&M5V;bJ*I>UtqulOFtSwQJ_qPmVKrrglHm#uDPc;W#Q$@Ga)5F| z4p1!s;*>y%uVA3zfrZvLH|FQ&@BYlVmI_3Pmd9srbo&b8{oi&@Pn39tkgvqk`ozon zO9}2u8^i-7P!_0^L+L_``z2l=JTcea|KrA{Sjtt&k-A@5uI9sX-ebA)e%+3I%XU$Z zFobpUdG6_Or2Th~d`kMg*5m$a_3v80T)vKcnvQ&EVN`C8G21LX9`|o6et9YMUj2vOsOC#7EP85+u%hH6Bfe`<$@E zYXZb4YrM$|bbDa64N8Sd0#P9>j0AIumzqwE*900)$^!KxWPx~~-v*^ZTzgqm5+GjJ zhk>wICr>wBJfcJkt==Uh!5Z&=fXYBguqIF~x^lbe=3#75PDmoB(9soB zU+2Ak6`YycH@$aYu>HfC@0$B14NJOD(ugGHj31D+S<)s+59T@JM4N{ybCv@PFYyhGA&r13mw%=f-a($460Y0h}Jq}L=(NZO+&ZZLU6((97;N_sQT8NV%QpQN`W zy_4sR_e*+D(z}x0&vV98l0J|$DQP;-86T8%K+=q)LwP>K$v%?wp`^o-j^sJxPb7UT z>8PY*d49CL{p`r#@PYRJvtxr=)82gOQiELx8xa;F>_pgxuoGb|!d8TR2wM>rBkV=k zh_Dx7HNs|LA$}r!MtF|!8(}Njny+||upLnZgzX3f5cVT%M%a%)0f7PgC%+LKAecb# zfbbo`14_RInG1yd2rdwepgs8t1_(S5s30(5|HK1=69h8|UJzU$ctNm(;0D15f*S-w z2!0UEAoxMBgy1M03SJN#A(%q&gkT846M`*t>_Y3@w&B6Uo7$iMv|~9?ZUK~A0Ob}y zxdl*e0hC(+1yF7Qlv@Dh7C^ZLP;LQ~TL9%2KzU;Ulv@Dh7C^ZLP;LQ~TL9%2 zK)D4_Zg&b$ZUK~A0Ob}yxdl*e0hC(+1yF7Qlv@Dh7C^ZLP;LQ~TL9&jfpQC= z+yW@K0Lm?Zatol`0w}it%I#SD%RfghUfnowZ=&kdABn16U)(Wm$}QTITeK;+Xj5*{ zrre@Uxka0D%WcYypC!pH+LT+gDYs}-ZqcUPqD{F)n{rEkjpY_?$}QTITeK;+Xj5*{ hrre@Uxka0D%WcYypDpzNYg6skxsi*DqXX-Q{{<#u#kBwc delta 2815 zcmb_eF=$g!6n#mttyofNJG9OYkz$B#x61#eRB9`xAuWPSH=PP~5FFnh?V@~s6c-nl zb}~p@>z6>G!w-mA#3>+j2>~hHL?Y+DcmMnSN&iRaP%gZ4^Uk^F-uG|c9cNxwuZ%1& z&##QEXWS8c^k^+3DjOSHZt2!oX=CNyc14Jt-4}P<(rx*9NQhpq*Lzgi+8i4aA|upa zRtV7y0^iwtwTPH+PTJ*zLmN>D#}cA!M{qjVxG#io82^2Cf;_@M?Ce|lCgVk%OHLpH zouCOQfd#|}99t9ES|D)W2v`d7hydRR0FL`*zye|lK|lgh2_g=$09yzV7k~m;fX0h< zQwBkb!cYKRU|J9outOKNNINjlVTs;E68aUI8Hlw27PhSj9uvS8ClyeXG#rC_hzf~- z1yYYq5BqR($jlIMHA9gCV>6aNmk^%;3j($(YnxT!y&rq){mM;eAD6tpx%uo@;mwUV z>I)P3ne6lpZ+mtQN2jZedbOaAzO2#_vd-3T&RmPUJojNC@!@rj0^iwrvxxY_pY#ha z_bo(zcsT$5=Y%587ix#L!HXeYYXx);yz`UB&VeVLqd*b?CxE~tl<5Kp=*QK=V*!jC z0`+ci4uOcc*WhX@YAqSqOn?L<010LKVH%!HpaeiD3s4TJsi?`862J+@Vk9UB(kxDD z5h`b#3p4`Cwq%P~fa#%Dn0SHeF%#foQ-HD<_p*bGLx>=}EiEQMWQ8gL0@{QRwpigH zU>pRd$LifMj>tHo8sdC091Pwny7Js^;2&RoY9nIRbtdhjq8=C@NaiFm)x$xKmKUYS4*u#2fvq`Km8BL5jjq09{~Opyn>pf(u)u z9T@1aL~kMq{R+(t#99CgMZ%1*#YqJ?5*4t8u^ysAB4B}pn-=xqgDvicEgs-NUJY4f zNTM@fLBRjKyt(m)w=gkPKPXJmCe&;1bhY7C3sd#c2iIqY)#`Ka&*#qnyZLD^H#B_7 GWd8uqm!gdT