diff options
author | Nassim Jahnke <[email protected]> | 2024-12-03 17:58:41 +0100 |
---|---|---|
committer | Nassim Jahnke <[email protected]> | 2024-12-03 17:58:41 +0100 |
commit | c0a3d51ab35930e410fcd9752ceaff6c3f581c24 (patch) | |
tree | f53076a8b0787d2f544f73f468df94619e5eb1a5 /patches/server/0162-Ability-to-apply-mending-to-XP-API.patch | |
parent | da7138233f6392e791d790d1c3407414c855f9c2 (diff) | |
download | Paper-c0a3d51ab35930e410fcd9752ceaff6c3f581c24.tar.gz Paper-c0a3d51ab35930e410fcd9752ceaff6c3f581c24.zip |
Start update, apply API patches
Diffstat (limited to 'patches/server/0162-Ability-to-apply-mending-to-XP-API.patch')
-rw-r--r-- | patches/server/0162-Ability-to-apply-mending-to-XP-API.patch | 62 |
1 files changed, 0 insertions, 62 deletions
diff --git a/patches/server/0162-Ability-to-apply-mending-to-XP-API.patch b/patches/server/0162-Ability-to-apply-mending-to-XP-API.patch deleted file mode 100644 index 590dfbe627..0000000000 --- a/patches/server/0162-Ability-to-apply-mending-to-XP-API.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Aikar <[email protected]> -Date: Wed, 20 Dec 2017 17:36:49 -0500 -Subject: [PATCH] Ability to apply mending to XP API - -This allows plugins that give players the ability to apply the experience -points to the Item Mending formula, which will repair an item instead -of giving the player experience points. - -Both an API To standalone mend, and apply mending logic to .giveExp has been added. - -== AT == -public net.minecraft.world.entity.ExperienceOrb durabilityToXp(I)I -public net.minecraft.world.entity.ExperienceOrb xpToDurability(I)I - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 63499a4fa349b3fa61040244db8be2d5d2569b96..128fcd537783986d816dae6d1ce2afb7af07d45a 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1665,7 +1665,41 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - } - - @Override -- public void giveExp(int exp) { -+ // Paper start - ability to apply mending -+ public int applyMending(int amount) { -+ ServerPlayer handle = this.getHandle(); -+ // Logic copied from EntityExperienceOrb and remapped to unobfuscated methods/properties -+ -+ final Optional<net.minecraft.world.item.enchantment.EnchantedItemInUse> stackEntry = net.minecraft.world.item.enchantment.EnchantmentHelper -+ .getRandomItemWith(net.minecraft.world.item.enchantment.EnchantmentEffectComponents.REPAIR_WITH_XP, handle, net.minecraft.world.item.ItemStack::isDamaged); -+ final net.minecraft.world.item.ItemStack itemstack = stackEntry.map(net.minecraft.world.item.enchantment.EnchantedItemInUse::itemStack).orElse(net.minecraft.world.item.ItemStack.EMPTY); -+ if (!itemstack.isEmpty() && itemstack.getItem().components().has(net.minecraft.core.component.DataComponents.MAX_DAMAGE)) { -+ net.minecraft.world.entity.ExperienceOrb orb = net.minecraft.world.entity.EntityType.EXPERIENCE_ORB.create(handle.level(), net.minecraft.world.entity.EntitySpawnReason.COMMAND); -+ orb.value = amount; -+ orb.spawnReason = org.bukkit.entity.ExperienceOrb.SpawnReason.CUSTOM; -+ orb.setPosRaw(handle.getX(), handle.getY(), handle.getZ()); -+ -+ final int possibleDurabilityFromXp = net.minecraft.world.item.enchantment.EnchantmentHelper.modifyDurabilityToRepairFromXp( -+ handle.serverLevel(), itemstack, amount -+ ); -+ int i = Math.min(possibleDurabilityFromXp, itemstack.getDamageValue()); -+ org.bukkit.event.player.PlayerItemMendEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemMendEvent(handle, orb, itemstack, stackEntry.get().inSlot(), i); -+ i = event.getRepairAmount(); -+ orb.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN); -+ if (!event.isCancelled()) { -+ amount -= i * amount / possibleDurabilityFromXp; -+ itemstack.setDamageValue(itemstack.getDamageValue() - i); -+ } -+ } -+ return amount; -+ } -+ -+ @Override -+ public void giveExp(int exp, boolean applyMending) { -+ if (applyMending) { -+ exp = this.applyMending(exp); -+ } -+ // Paper end - ability to apply mending - this.getHandle().giveExperiencePoints(exp); - } - |