2023-06-01 01:58:25 +02:00
|
|
|
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
|
2024-04-25 00:36:49 +02:00
|
|
|
index adc3e6298a1946fdea029c82a9954fb5b6e24497..a207a31d80a302dbdfe80f8727222542d3a78da2 100644
|
2023-06-01 01:58:25 +02:00
|
|
|
--- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
|
|
|
|
+++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
|
2024-04-25 00:36:49 +02:00
|
|
|
@@ -344,7 +344,7 @@ public class ExperienceOrb extends Entity {
|
2023-06-01 01:58:25 +02:00
|
|
|
ItemStack itemstack = (ItemStack) entry.getValue();
|
2023-12-06 17:21:56 +01:00
|
|
|
int j = Math.min(this.xpToDurability(amount), itemstack.getDamageValue());
|
2023-06-01 01:58:25 +02:00
|
|
|
// CraftBukkit start
|
|
|
|
- org.bukkit.event.player.PlayerItemMendEvent event = CraftEventFactory.callPlayerItemMendEvent(player, this, itemstack, entry.getKey(), j);
|
2024-01-15 12:38:39 +01:00
|
|
|
+ org.bukkit.event.player.PlayerItemMendEvent event = CraftEventFactory.callPlayerItemMendEvent(player, this, itemstack, entry.getKey(), j, this::durabilityToXp); // Paper - Expand PlayerItemMendEvent
|
2023-06-01 01:58:25 +02:00
|
|
|
j = event.getRepairAmount();
|
|
|
|
if (event.isCancelled()) {
|
|
|
|
return amount;
|
2024-04-25 00:36:49 +02:00
|
|
|
@@ -352,8 +352,13 @@ public class ExperienceOrb extends Entity {
|
2023-06-01 01:58:25 +02:00
|
|
|
// CraftBukkit end
|
|
|
|
|
|
|
|
itemstack.setDamageValue(itemstack.getDamageValue() - j);
|
|
|
|
- int k = amount - this.durabilityToXp(j);
|
2024-01-15 12:38:39 +01:00
|
|
|
+ int k = amount - event.getDurabilityToXpOperation().applyAsInt(j); // Paper - Expand PlayerItemMendEvent
|
2023-06-01 01:58:25 +02:00
|
|
|
this.value = k; // CraftBukkit - update exp value of orb for PlayerItemMendEvent calls
|
2024-01-15 12:38:39 +01:00
|
|
|
+ // Paper start - Expand PlayerItemMendEvent
|
2023-06-01 01:58:25 +02:00
|
|
|
+ if (j == 0 && amount == k) { // if repair amount is 0 and no xp was removed, don't do recursion; treat as cancelled
|
|
|
|
+ return k;
|
|
|
|
+ }
|
2024-01-15 12:38:39 +01:00
|
|
|
+ // Paper end - Expand PlayerItemMendEvent
|
2023-06-01 01:58:25 +02:00
|
|
|
|
|
|
|
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
|
2024-04-25 23:21:18 +02:00
|
|
|
index fd41178576e8be545b8f31ed1954346eb66d4590..8cd7841b038615ab41dee342df8aa76a8c3a12a7 100644
|
2023-06-01 01:58:25 +02:00
|
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
2024-04-25 00:36:49 +02:00
|
|
|
@@ -1835,11 +1835,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
2023-06-01 01:58:25 +02:00
|
|
|
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);
|
2024-01-15 12:38:39 +01:00
|
|
|
+ org.bukkit.event.player.PlayerItemMendEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemMendEvent(handle, orb, itemstack, stackEntry.getKey(), i, orb::durabilityToXp); // Paper - Expand PlayerItemMendEvent
|
2023-06-01 01:58:25 +02:00
|
|
|
i = event.getRepairAmount();
|
Updated Upstream (Bukkit/CraftBukkit/Spigot) (#10277)
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:
9a80d38c SPIGOT-336, SPIGOT-3366, SPIGOT-5768, SPIGOT-6409, SPIGOT-6861, PR-722: Add EntityRemoveEvent
258086d9 SPIGOT-7417, PR-967: Add Sign#getTargetSide and Sign#getAllowedEditor
ffaba051 SPIGOT-7584: Add missing Tag.ITEMS_NON_FLAMMABLE_WOOD
CraftBukkit Changes:
98b6c1ac7 SPIGOT-7589 Fix NullPointerException when bans expire
a2736ddb0 SPIGOT-336, SPIGOT-3366, SPIGOT-5768, SPIGOT-6409, SPIGOT-6861, PR-1008: Add EntityRemoveEvent
5bf12cb89 SPIGOT-7565: Throw a more descriptive error message when a developer tries to spawn an entity from a CraftBukkit class
76d95fe7e SPIGOT-7417, PR-1343: Add Sign#getTargetSide and Sign#getAllowedEditor
Spigot Changes:
e9ec5485 Rebuild patches
f1b62e0c Rebuild patches
2024-02-23 14:37:33 +01:00
|
|
|
orb.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN);
|
2023-06-01 01:58:25 +02:00
|
|
|
if (!event.isCancelled()) {
|
|
|
|
- amount -= orb.durabilityToXp(i);
|
2024-01-15 12:38:39 +01:00
|
|
|
+ amount -= event.getDurabilityToXpOperation().applyAsInt(i); // Paper - Expand PlayerItemMendEvent
|
2023-06-01 01:58:25 +02:00
|
|
|
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
|
2024-04-25 00:36:49 +02:00
|
|
|
index e9a70547324dabd97dc90820515a11d2b630a704..c1b5d9713cb301dc06b74d97dca4fd5562c539e2 100644
|
2023-06-01 01:58:25 +02:00
|
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
2024-04-25 00:36:49 +02:00
|
|
|
@@ -1267,10 +1267,10 @@ public class CraftEventFactory {
|
2023-06-01 01:58:25 +02:00
|
|
|
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) {
|
2024-01-15 12:38:39 +01:00
|
|
|
+ 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 - Expand PlayerItemMendEvent
|
2023-06-01 01:58:25 +02:00
|
|
|
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);
|
2024-01-15 12:38:39 +01:00
|
|
|
+ PlayerItemMendEvent event = new PlayerItemMendEvent(player, bukkitStack, CraftEquipmentSlot.getSlot(slot), (ExperienceOrb) orb.getBukkitEntity(), repairAmount, durabilityToXpOp); // Paper - Expand PlayerItemMendEvent
|
2023-06-01 01:58:25 +02:00
|
|
|
Bukkit.getPluginManager().callEvent(event);
|
|
|
|
return event;
|
|
|
|
}
|