mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-29 19:52:55 +01:00
90fe0d58a5
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 897a0a23 SPIGOT-5753: Back PotionType by a minecraft registry 255b2aa1 SPIGOT-7080: Add World#locateNearestBiome ff984826 Remove javadoc.io doc links CraftBukkit Changes: 71b0135cc SPIGOT-5753: Back PotionType by a minecraft registry a6bcb8489 SPIGOT-7080: Add World#locateNearestBiome ad0e57434 SPIGOT-7502: CraftMetaItem - cannot deserialize BlockStateTag b3efca57a SPIGOT-6400: Use Mockito instead of InvocationHandler 38c599f9d PR-1272: Only allow one entity in CraftItem instead of two f065271ac SPIGOT-7498: ChunkSnapshot.getBlockEmittedLight() gets 64 blocks upper in Overworld Spigot Changes: e0e223fe Remove javadoc.io doc links
69 lines
4.9 KiB
Diff
69 lines
4.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Thu, 20 Jan 2022 18:11:20 -0800
|
|
Subject: [PATCH] Expand PlayerItemMendEvent
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
|
|
index 8d8fe55a05eea237a8af99ed15ab16d6167daa77..eca634792d2a7cc649675e3394e84dbaf1453905 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
|
|
@@ -337,7 +337,7 @@ public class ExperienceOrb extends Entity {
|
|
ItemStack itemstack = (ItemStack) entry.getValue();
|
|
int j = Math.min(this.xpToDurability(this.value), itemstack.getDamageValue());
|
|
// CraftBukkit start
|
|
- org.bukkit.event.player.PlayerItemMendEvent event = CraftEventFactory.callPlayerItemMendEvent(player, this, itemstack, entry.getKey(), j);
|
|
+ org.bukkit.event.player.PlayerItemMendEvent event = CraftEventFactory.callPlayerItemMendEvent(player, this, itemstack, entry.getKey(), j, this::durabilityToXp); // Paper
|
|
j = event.getRepairAmount();
|
|
if (event.isCancelled()) {
|
|
return amount;
|
|
@@ -345,8 +345,13 @@ public class ExperienceOrb extends Entity {
|
|
// CraftBukkit end
|
|
|
|
itemstack.setDamageValue(itemstack.getDamageValue() - j);
|
|
- int k = amount - this.durabilityToXp(j);
|
|
+ int k = amount - event.getDurabilityToXpOperation().applyAsInt(j); // Paper
|
|
this.value = k; // CraftBukkit - update exp value of orb for PlayerItemMendEvent calls
|
|
+ // Paper start
|
|
+ if (j == 0 && amount == k) { // if repair amount is 0 and no xp was removed, don't do recursion; treat as cancelled
|
|
+ return k;
|
|
+ }
|
|
+ // Paper end
|
|
|
|
return k > 0 ? this.repairPlayerItems(player, k) : 0;
|
|
} else {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index f7be775567a9aba1933bc3cf5d4e887ab589d778..77ea396950ed23ab5bf953b451b12d5b1eb4c5ec 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -1737,11 +1737,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
orb.setPosRaw(handle.getX(), handle.getY(), handle.getZ());
|
|
|
|
int i = Math.min(orb.xpToDurability(amount), itemstack.getDamageValue());
|
|
- org.bukkit.event.player.PlayerItemMendEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemMendEvent(handle, orb, itemstack, stackEntry.getKey(), i);
|
|
+ org.bukkit.event.player.PlayerItemMendEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemMendEvent(handle, orb, itemstack, stackEntry.getKey(), i, orb::durabilityToXp); // Paper
|
|
i = event.getRepairAmount();
|
|
orb.discard();
|
|
if (!event.isCancelled()) {
|
|
- amount -= orb.durabilityToXp(i);
|
|
+ amount -= event.getDurabilityToXpOperation().applyAsInt(i); // Paper
|
|
itemstack.setDamageValue(itemstack.getDamageValue() - i);
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
index 82a474a09905e9858e0a7b4b00839f5ad5e9adbb..e4ee6425e6f6c8546e3af8889a67f08d61b1dc94 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
@@ -1296,10 +1296,10 @@ public class CraftEventFactory {
|
|
return event;
|
|
}
|
|
|
|
- public static PlayerItemMendEvent callPlayerItemMendEvent(net.minecraft.world.entity.player.Player entity, net.minecraft.world.entity.ExperienceOrb orb, net.minecraft.world.item.ItemStack nmsMendedItem, net.minecraft.world.entity.EquipmentSlot slot, int repairAmount) {
|
|
+ public static PlayerItemMendEvent callPlayerItemMendEvent(net.minecraft.world.entity.player.Player entity, net.minecraft.world.entity.ExperienceOrb orb, net.minecraft.world.item.ItemStack nmsMendedItem, net.minecraft.world.entity.EquipmentSlot slot, int repairAmount, java.util.function.IntUnaryOperator durabilityToXpOp) { // Paper
|
|
Player player = (Player) entity.getBukkitEntity();
|
|
org.bukkit.inventory.ItemStack bukkitStack = CraftItemStack.asCraftMirror(nmsMendedItem);
|
|
- PlayerItemMendEvent event = new PlayerItemMendEvent(player, bukkitStack, CraftEquipmentSlot.getSlot(slot), (ExperienceOrb) orb.getBukkitEntity(), repairAmount);
|
|
+ PlayerItemMendEvent event = new PlayerItemMendEvent(player, bukkitStack, CraftEquipmentSlot.getSlot(slot), (ExperienceOrb) orb.getBukkitEntity(), repairAmount, durabilityToXpOp); // Paper
|
|
Bukkit.getPluginManager().callEvent(event);
|
|
return event;
|
|
}
|