geforkt von Mirrors/Paper
459987d69f
improved the water code so that immunity wont trigger if the entity has the water pathfinder system active, so this improves support for all entities that know how to behave in water. Merged 2 EAR patches together, and removed an MCUtil method that doesnt have a purpose anymore
80 Zeilen
3.6 KiB
Diff
80 Zeilen
3.6 KiB
Diff
From c49c00d50f048309923a635b82d67ab84c7a4723 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Mon, 18 Jun 2018 01:12:53 -0400
|
|
Subject: [PATCH] PlayerReadyArrowEvent
|
|
|
|
Called when a player is firing a bow and the server is choosing an arrow to use.
|
|
Plugins can skip selection of certain arrows and control which is used.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ItemBow.java b/src/main/java/net/minecraft/server/ItemBow.java
|
|
index 152b179ce1..797e9ecf11 100644
|
|
--- a/src/main/java/net/minecraft/server/ItemBow.java
|
|
+++ b/src/main/java/net/minecraft/server/ItemBow.java
|
|
@@ -1,5 +1,6 @@
|
|
package net.minecraft.server;
|
|
|
|
+import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
|
import org.bukkit.event.entity.EntityCombustEvent; // CraftBukkit
|
|
|
|
public class ItemBow extends Item {
|
|
@@ -18,16 +19,16 @@ public class ItemBow extends Item {
|
|
// CraftBukkit end
|
|
}
|
|
|
|
- private ItemStack a(EntityHuman entityhuman) {
|
|
- if (this.e_(entityhuman.b(EnumHand.OFF_HAND))) {
|
|
+ private ItemStack a(EntityHuman entityhuman, ItemStack bow) { // Paper
|
|
+ if (this.e_(entityhuman, bow, entityhuman.b(EnumHand.OFF_HAND))) { // Paper
|
|
return entityhuman.b(EnumHand.OFF_HAND);
|
|
- } else if (this.e_(entityhuman.b(EnumHand.MAIN_HAND))) {
|
|
+ } else if (this.e_(entityhuman, bow, entityhuman.b(EnumHand.MAIN_HAND))) {
|
|
return entityhuman.b(EnumHand.MAIN_HAND);
|
|
} else {
|
|
for (int i = 0; i < entityhuman.inventory.getSize(); ++i) {
|
|
ItemStack itemstack = entityhuman.inventory.getItem(i);
|
|
|
|
- if (this.e_(itemstack)) {
|
|
+ if (this.e_(entityhuman, bow, itemstack)) {
|
|
return itemstack;
|
|
}
|
|
}
|
|
@@ -36,15 +37,23 @@ public class ItemBow extends Item {
|
|
}
|
|
}
|
|
|
|
- protected boolean e_(ItemStack itemstack) {
|
|
- return itemstack.getItem() instanceof ItemArrow;
|
|
+ // Paper start
|
|
+ protected boolean e_(EntityHuman player, ItemStack bow, ItemStack itemstack) {
|
|
+ return itemstack.getItem() instanceof ItemArrow && (
|
|
+ !(player instanceof EntityPlayer) ||
|
|
+ new com.destroystokyo.paper.event.player.PlayerReadyArrowEvent(
|
|
+ ((EntityPlayer) player).getBukkitEntity(),
|
|
+ CraftItemStack.asCraftMirror(bow),
|
|
+ CraftItemStack.asCraftMirror(itemstack)
|
|
+ ).callEvent());
|
|
+ // Paper end
|
|
}
|
|
|
|
public void a(ItemStack itemstack, World world, EntityLiving entityliving, int i) {
|
|
if (entityliving instanceof EntityHuman) {
|
|
EntityHuman entityhuman = (EntityHuman) entityliving;
|
|
boolean flag = entityhuman.abilities.canInstantlyBuild || EnchantmentManager.getEnchantmentLevel(Enchantments.ARROW_INFINITE, itemstack) > 0;
|
|
- ItemStack itemstack1 = this.a(entityhuman);
|
|
+ ItemStack itemstack1 = this.a(entityhuman, itemstack); // Paper
|
|
|
|
if (!itemstack1.isEmpty() || flag) {
|
|
if (itemstack1.isEmpty()) {
|
|
@@ -148,7 +157,7 @@ public class ItemBow extends Item {
|
|
|
|
public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) {
|
|
ItemStack itemstack = entityhuman.b(enumhand);
|
|
- boolean flag = !this.a(entityhuman).isEmpty();
|
|
+ boolean flag = !this.a(entityhuman, itemstack).isEmpty(); // Paper
|
|
|
|
if (!entityhuman.abilities.canInstantlyBuild && !flag) {
|
|
return flag ? new InteractionResultWrapper(EnumInteractionResult.PASS, itemstack) : new InteractionResultWrapper(EnumInteractionResult.FAIL, itemstack);
|
|
--
|
|
2.19.0
|
|
|