SPIGOT-1505: PlayerItemMendEvent

This commit is contained in:
Senmori 2017-11-21 10:17:31 +11:00 committed by md_5
parent 19ed80cef7
commit bdb8822625
2 changed files with 26 additions and 3 deletions

View File

@ -46,8 +46,22 @@
}
this.move(EnumMoveType.SELF, this.motX, this.motY, this.motZ);
@@ -153,7 +172,7 @@
}
@@ -148,12 +167,18 @@
if (!itemstack.isEmpty() && itemstack.h()) {
int i = Math.min(this.d(this.value), itemstack.i());
- this.value -= this.c(i);
- itemstack.setData(itemstack.i() - i);
- }
+ // CraftBukkit start
+ org.bukkit.event.player.PlayerItemMendEvent event = CraftEventFactory.callPlayerItemMendEvent(entityhuman, this, itemstack, i);
+ i = event.getRepairAmount();
+ if (!event.isCancelled()) {
+ this.value -= this.c(i);
+ itemstack.setData(itemstack.i() - i);
+ }
+ // CraftBukkit end
+ }
if (this.value > 0) {
- entityhuman.giveExp(this.value);
@ -55,7 +69,7 @@
}
this.die();
@@ -175,6 +194,24 @@
@@ -175,6 +200,24 @@
}
public static int getOrbValue(int i) {

View File

@ -36,6 +36,7 @@ import org.bukkit.entity.AreaEffectCloud;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Creeper;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.ExperienceOrb;
import org.bukkit.entity.Firework;
import org.bukkit.entity.LightningStrike;
import org.bukkit.entity.LivingEntity;
@ -647,6 +648,14 @@ public class CraftEventFactory {
return event;
}
public static PlayerItemMendEvent callPlayerItemMendEvent(EntityHuman entity, EntityExperienceOrb orb, net.minecraft.server.ItemStack nmsMendedItem, int repairAmount) {
Player player = (Player) entity.getBukkitEntity();
org.bukkit.inventory.ItemStack bukkitStack = CraftItemStack.asCraftMirror(nmsMendedItem);
PlayerItemMendEvent event = new PlayerItemMendEvent(player, bukkitStack, (ExperienceOrb) orb.getBukkitEntity(), repairAmount);
Bukkit.getPluginManager().callEvent(event);
return event;
}
public static boolean handleBlockGrowEvent(World world, int x, int y, int z, net.minecraft.server.Block type, int data) {
Block block = world.getWorld().getBlockAt(x, y, z);
CraftBlockState state = (CraftBlockState) block.getState();