Add FishHookStateChangeEvent (#12165)

This commit is contained in:
Namiu/うにたろう 2025-05-16 03:17:32 +09:00 committed by GitHub
parent a25258190b
commit d683970d40
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 80 additions and 0 deletions

View File

@ -0,0 +1,52 @@
package io.papermc.paper.event.entity;
import org.bukkit.entity.FishHook;
import org.bukkit.event.HandlerList;
import org.bukkit.event.entity.EntityEvent;
import org.bukkit.event.player.PlayerFishEvent;
import org.jetbrains.annotations.ApiStatus;
import org.jspecify.annotations.NullMarked;
/**
* Called just before a {@link FishHook}'s {@link FishHook.HookState} is changed.
*
* <p>If you want to monitor a player's fishing state transition, you can use {@link PlayerFishEvent}.</p>
*/
@NullMarked
public final class FishHookStateChangeEvent extends EntityEvent {
private static final HandlerList HANDLER_LIST = new HandlerList();
private final FishHook.HookState newHookState;
@ApiStatus.Internal
public FishHookStateChangeEvent(final FishHook entity, final FishHook.HookState newHookState) {
super(entity);
this.newHookState = newHookState;
}
/**
* Get the <strong>new</strong> hook state of the {@link FishHook}.
*
* <p>Refer to {@link FishHook#getState()} to get the current hook state.</p>
*
* @return the <strong>new</strong> hook state
*/
public FishHook.HookState getNewHookState() {
return this.newHookState;
}
@Override
public FishHook getEntity() {
return (FishHook) super.getEntity();
}
@Override
public HandlerList getHandlers() {
return HANDLER_LIST;
}
public static HandlerList getHandlerList() {
return HANDLER_LIST;
}
}

View File

@ -1,6 +1,7 @@
package org.bukkit.entity; package org.bukkit.entity;
import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.EquipmentSlot;
import io.papermc.paper.event.entity.FishHookStateChangeEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -306,6 +307,7 @@ public interface FishHook extends Projectile {
/** /**
* Represents a state in which a fishing hook may be. * Represents a state in which a fishing hook may be.
* State transitions can be listened for using {@link FishHookStateChangeEvent}
*/ */
public enum HookState { public enum HookState {

View File

@ -1,5 +1,6 @@
package org.bukkit.event.player; package org.bukkit.event.player;
import io.papermc.paper.event.entity.FishHookStateChangeEvent;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.FishHook; import org.bukkit.entity.FishHook;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -12,6 +13,8 @@ import org.jetbrains.annotations.Nullable;
/** /**
* Thrown when a player is fishing * Thrown when a player is fishing
*
* <p>If you want to monitor a fishhooks state transition, you can use {@link FishHookStateChangeEvent}.</p>
*/ */
public class PlayerFishEvent extends PlayerEvent implements Cancellable { public class PlayerFishEvent extends PlayerEvent implements Cancellable {

View File

@ -42,6 +42,29 @@
return; return;
} }
} else { } else {
@@ -166,12 +_,14 @@
if (this.currentState == FishingHook.FishHookState.FLYING) {
if (this.hookedIn != null) {
this.setDeltaMovement(Vec3.ZERO);
+ new io.papermc.paper.event.entity.FishHookStateChangeEvent((org.bukkit.entity.FishHook) getBukkitEntity(), org.bukkit.entity.FishHook.HookState.HOOKED_ENTITY).callEvent(); // Paper - Add FishHookStateChangeEvent. #HOOKED_ENTITY
this.currentState = FishingHook.FishHookState.HOOKED_IN_ENTITY;
return;
}
if (flag) {
this.setDeltaMovement(this.getDeltaMovement().multiply(0.3, 0.2, 0.3));
+ new io.papermc.paper.event.entity.FishHookStateChangeEvent((org.bukkit.entity.FishHook) getBukkitEntity(), org.bukkit.entity.FishHook.HookState.BOBBING).callEvent(); // Paper - Add FishHookStateChangeEvent. #BOBBING
this.currentState = FishingHook.FishHookState.BOBBING;
return;
}
@@ -184,6 +_,7 @@
this.setPos(this.hookedIn.getX(), this.hookedIn.getY(0.8), this.hookedIn.getZ());
} else {
this.setHookedEntity(null);
+ new io.papermc.paper.event.entity.FishHookStateChangeEvent((org.bukkit.entity.FishHook) getBukkitEntity(), org.bukkit.entity.FishHook.HookState.UNHOOKED).callEvent(); // Paper - Add FishHookStateChangeEvent. #UNHOOKED
this.currentState = FishingHook.FishHookState.FLYING;
}
}
@@ -247,14 +_,14 @@ @@ -247,14 +_,14 @@
if (!player.isRemoved() && player.isAlive() && (isFishingRod || isFishingRod1) && !(this.distanceToSqr(player) > 1024.0)) { if (!player.isRemoved() && player.isAlive() && (isFishingRod || isFishingRod1) && !(this.distanceToSqr(player) > 1024.0)) {
return false; return false;