Fix PlayerFishEvent not correctly cancelling. Fixes BUKKIT-5396

Prior to this commit cancelling the PlayerFishEvent would cause various
states of the fishing routine to be incorrectly or wrongly fired. This
incorrect behaviour was due to the miscommunication between the server and
client regarding the fishing state. When the event was cancelled, the
bobber entity was removed and caused the client to incorrectly determine
what the "next state" was to logically be.

This commit resolves the issue by ensuring the client is made aware of the
correct changes at the correct time regarding the bobber entity, therefore
keeping the logical steps of "fishing" proper and in-tact.
This commit is contained in:
myiume 2014-02-19 15:40:37 +02:00 committed by turt2live
parent b3e83b00fc
commit 4507cec090

View file

@ -370,8 +370,6 @@ public class EntityFishingHook extends Entity {
this.world.getServer().getPluginManager().callEvent(playerFishEvent); this.world.getServer().getPluginManager().callEvent(playerFishEvent);
if (playerFishEvent.isCancelled()) { if (playerFishEvent.isCancelled()) {
this.die();
this.owner.hookedFish = null;
return 0; return 0;
} }
// CraftBukkit end // CraftBukkit end
@ -394,8 +392,6 @@ public class EntityFishingHook extends Entity {
this.world.getServer().getPluginManager().callEvent(playerFishEvent); this.world.getServer().getPluginManager().callEvent(playerFishEvent);
if (playerFishEvent.isCancelled()) { if (playerFishEvent.isCancelled()) {
this.die();
this.owner.hookedFish = null;
return 0; return 0;
} }
// CraftBukkit end // CraftBukkit end
@ -421,8 +417,6 @@ public class EntityFishingHook extends Entity {
this.world.getServer().getPluginManager().callEvent(playerFishEvent); this.world.getServer().getPluginManager().callEvent(playerFishEvent);
if (playerFishEvent.isCancelled()) { if (playerFishEvent.isCancelled()) {
this.die();
this.owner.hookedFish = null;
return 0; return 0;
} }
// CraftBukkit end // CraftBukkit end
@ -434,6 +428,9 @@ public class EntityFishingHook extends Entity {
if (b0 == 0) { if (b0 == 0) {
PlayerFishEvent playerFishEvent = new PlayerFishEvent((Player) this.owner.getBukkitEntity(), null, (Fish) this.getBukkitEntity(), PlayerFishEvent.State.FAILED_ATTEMPT); PlayerFishEvent playerFishEvent = new PlayerFishEvent((Player) this.owner.getBukkitEntity(), null, (Fish) this.getBukkitEntity(), PlayerFishEvent.State.FAILED_ATTEMPT);
this.world.getServer().getPluginManager().callEvent(playerFishEvent); this.world.getServer().getPluginManager().callEvent(playerFishEvent);
if (playerFishEvent.isCancelled()) {
return 0;
}
} }
// CraftBukkit end // CraftBukkit end