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 ff5647616d..32c2d94248 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 7acccf91c6..264757db81 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&yKh`Y6o;=Jp$K7Fk%FQaC*bgg0NKPm0*?1Aj(LQKF}Cx71YD3%g7^ox=MO*x z>jI*pL`fPKDN?Q!ghXKwk~<{8RU{M{r9etS5zaSfW@mS`yQU>S>E}DM=X&PMIp5Bn z|MHG+ejM69Gc!56<7~0AU50=Dpjy2-IeK=qC~lcfEG#XKj9k8Pb97tz)7o0I`0Vp3 zp4WffDNCpKH+U9>){A0Z+TxPp=bAg4g}spCH~zlHdm*lWUX>iLh5wK7us-p;eytp^ zfm#wF0f`BQg-OsiXtd%f0Y1+O5bsE!D?!#T!wXw(kSfFmxk5#E0?m|wpOCn(-#5WB zzOcmxTefIGi9>5rygR`%l_-_Cv&WQhqu$0q=wYq^@s0|H3gmdMKw3Xlkf$+JrVXTb ziC7>ckmCJH+)O9r09}x^L)gVY3FRC0FE-bjYj=JqJW~a{hn?}2O{Y9V$hW}%|Cb|+ zjTFxi64$Uk@w9#`!Rhcd^A|`UEs!_RPys$q@m#`c?z>%OYN=P0j^zE)aycKC(|Yga z=m`J6(TbCA+Rp1ywBqqRceQn-`m0YqX}^B!@%dKu?^(ZCKGu)%vMnF3F%lkBUk+Rp z{SzRb3)cGpIli(vvL>lw=bF{%h3*ECPf@fb+&AAr2PO~Vtdod$006cquK!@y`bS?) z*)ta;zc4Snu>Q}r@XYx_01MPw@zwQwo=AYEI2)vRi)dSbYda;dx?cJM`31EK6Fw(Fo@|`sbj0H+fm8uckobJ~zYs6u0y%;F!d4rk3Z(?Rf<;FHoHQkn<2iwH z&c)|t;;s=ZmnGc$4=E*o`{H*yI z^V8<%;+*jd=I70a%~NsCnD6_v`H0z09p;Q@%rBZ7=A*WM_<+gF=9kQ~=2zmJ@oVN| z=2y+H$2sFU^PA>3%x}dx;|25E=6UmCoHIUQK5kwzpN#V*PWG<(9rG#k={RTnzWF`# z8S`?SpQ#RB93LJ#Ud>&c94@w1drw|1cUuh6Mnnq{?L@Q<(N08b5p6{i;jg!qAuUC; z7tuyUdl9WhwAoaK-ZG-kh@K<*jc6;feh1NeMB5QXK(rl!0HXbfHY3`PKmmaP`-k2$ zgaZT<2p$l9NAQ4P1BpKZ3k=}`!3a9)kAMV2@Iat~z=Zt+8;s!u!3=^I1Q!Ti5bPkh zLGXd#2Eh=59|SW9eh@4nI0}b?7X(KLrVu3(2TH|(QgNVE94HkBN=xB_updlupi~?v z6$eVifl_gxR2(Q32TJ930ZPSzQgNVE94HkBO2vUvaiCNjC=~}v#eq_Bpi~?v6$eVi zfl_gxR3cC+4wQ-mrQ$%TI8Z7Ml!^nT;y|e^SD*eqe&vr{Lw5(N&i@vun*QXrxu#V7 zno{v=O2w}!6~Crb{F+knYf2?vQ!0le)_zT?_%)^C*OZE1Q!3#bZTQ#Y`+iNSG~(Q^ sDHXq_RQ#G!;n#|x z9>j4JY&@UAT09u>Yg;=$Rv`jUh??)i zl{MK4V-`Rc*b;OI*dgGlCCYMGqBc&zX@#~2$f0hF+n&<{2?1S1WJm-o z5CT|Wq%H2kA%Jmfu}Z*6(C_ZCBGs4!C_~#M=<>F=QeRkZitx?QtMGeaEdQVy{wYl5 zKZ$Vi@@{K-xHz64yBe-eOk(TT{BEmR(pw+rX$w&&i`T|4Ig{78SIQi`<2^NaYcFT8 zK8!}9(z8tuD-Ry_zx+P(8K2(X@hx7aec;=NG3^6C{)WNDU=l8gfCE5a18Q^u1f0eL zb&1B)34oW0m~q@|1?aBWK9s603;_bH00h+Nf?jwwLF@yELo7f$B(y-OtYM2;fDN!2 zW?9VVaV}XRILCO}{SpD03NtUD8d3>apcSAk#y&g90wF{Q;BD!#LaeM%2f(5>;prA@ z90ZJmz}8sL4dX1ZyGhmH^>W~x2CwtvJz0O;^T})ch@<_Bk9@57Jw2{ZRIuvFYkLk( zKNbd$^kixL^R4BIiX;5p*Ildz4{%;aCV&V`fFYm&7LXtaR16XLMj%~m1yET*;5z~$ zD*!m|S5KZ3;M)KYkbs^9jzf`kNOS}`3915ds8`1B@$ziq23a=-`P20!cMWuOS2w!5K9?g`b(g z*$xz`#%vK~==6Yk@`U)G$y4uJI6XYt+A59GOK6@w^%927(r9b&?v?R={q!~NOclES N-F&}M=<7dcvVYH)qKyCm