mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-01 05:47:45 +01:00
Expand PlayerItemMendEvent
This commit is contained in:
parent
605fb41674
commit
79ffc3e056
@ -215,12 +215,15 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -266,12 +359,20 @@
|
@@ -266,12 +359,23 @@
|
||||||
ItemStack itemstack = ((EnchantedItemInUse) optional.get()).itemStack();
|
ItemStack itemstack = ((EnchantedItemInUse) optional.get()).itemStack();
|
||||||
int j = EnchantmentHelper.modifyDurabilityToRepairFromXp(player.serverLevel(), itemstack, amount);
|
int j = EnchantmentHelper.modifyDurabilityToRepairFromXp(player.serverLevel(), itemstack, amount);
|
||||||
int k = Math.min(j, itemstack.getDamageValue());
|
int k = Math.min(j, itemstack.getDamageValue());
|
||||||
+ // CraftBukkit start
|
+ // CraftBukkit start
|
||||||
+ org.bukkit.event.player.PlayerItemMendEvent event = CraftEventFactory.callPlayerItemMendEvent(player, this, itemstack, optional.get().inSlot(), k);
|
+ // Paper start - mending event
|
||||||
|
+ final int consumedExperience = k > 0 ? k * amount / j : 0;
|
||||||
|
+ org.bukkit.event.player.PlayerItemMendEvent event = CraftEventFactory.callPlayerItemMendEvent(player, this, itemstack, optional.get().inSlot(), k, consumedExperience);
|
||||||
|
+ // Paper end - mending event
|
||||||
+ k = event.getRepairAmount();
|
+ k = event.getRepairAmount();
|
||||||
+ if (event.isCancelled()) {
|
+ if (event.isCancelled()) {
|
||||||
+ return amount;
|
+ return amount;
|
||||||
@ -229,14 +232,15 @@
|
|||||||
|
|
||||||
itemstack.setDamageValue(itemstack.getDamageValue() - k);
|
itemstack.setDamageValue(itemstack.getDamageValue() - k);
|
||||||
if (k > 0) {
|
if (k > 0) {
|
||||||
int l = amount - k * amount / j;
|
- int l = amount - k * amount / j;
|
||||||
|
+ int l = amount - k * amount / j; // Paper - diff on change - expand PlayerMendEvents
|
||||||
|
|
||||||
if (l > 0) {
|
if (l > 0) {
|
||||||
+ // this.value = l; // CraftBukkit - update exp value of orb for PlayerItemMendEvent calls // Paper - the value field should not be mutated here because it doesn't take "count" into account
|
+ // this.value = l; // CraftBukkit - update exp value of orb for PlayerItemMendEvent calls // Paper - the value field should not be mutated here because it doesn't take "count" into account
|
||||||
return this.repairPlayerItems(player, l);
|
return this.repairPlayerItems(player, l);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -291,6 +392,24 @@
|
@@ -291,6 +395,24 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getExperienceValue(int value) {
|
public static int getExperienceValue(int value) {
|
||||||
|
@ -1865,11 +1865,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|||||||
handle.serverLevel(), itemstack, amount
|
handle.serverLevel(), itemstack, amount
|
||||||
);
|
);
|
||||||
int i = Math.min(possibleDurabilityFromXp, itemstack.getDamageValue());
|
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);
|
final int consumedExperience = i * amount / possibleDurabilityFromXp; // Paper - taken from ExperienceOrb#repairPlayerItems
|
||||||
|
org.bukkit.event.player.PlayerItemMendEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemMendEvent(handle, orb, itemstack, stackEntry.get().inSlot(), i, consumedExperience);
|
||||||
i = event.getRepairAmount();
|
i = event.getRepairAmount();
|
||||||
orb.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN);
|
orb.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN);
|
||||||
if (!event.isCancelled()) {
|
if (!event.isCancelled()) {
|
||||||
amount -= i * amount / possibleDurabilityFromXp;
|
amount -= consumedExperience; // Use previously computed variable to reduce diff on change.
|
||||||
itemstack.setDamageValue(itemstack.getDamageValue() - i);
|
itemstack.setDamageValue(itemstack.getDamageValue() - i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1284,10 +1284,10 @@ public class CraftEventFactory {
|
|||||||
return event;
|
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, int consumedExperience) { // Paper - Expand PlayerItemMendEvent
|
||||||
Player player = (Player) entity.getBukkitEntity();
|
Player player = (Player) entity.getBukkitEntity();
|
||||||
org.bukkit.inventory.ItemStack bukkitStack = CraftItemStack.asCraftMirror(nmsMendedItem);
|
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, consumedExperience); // Paper - Expand PlayerItemMendEvent
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
Bukkit.getPluginManager().callEvent(event);
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user