Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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;
}
}
2 changes: 2 additions & 0 deletions paper-api/src/main/java/org/bukkit/entity/FishHook.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.bukkit.entity;

import org.bukkit.inventory.EquipmentSlot;
import io.papermc.paper.event.entity.FishHookStateChangeEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -306,6 +307,7 @@ public interface FishHook extends Projectile {

/**
* Represents a state in which a fishing hook may be.
* State transitions can be listened for using {@link FishHookStateChangeEvent}
*/
public enum HookState {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.bukkit.event.player;

import io.papermc.paper.event.entity.FishHookStateChangeEvent;
import org.bukkit.entity.Entity;
import org.bukkit.entity.FishHook;
import org.bukkit.entity.Player;
Expand All @@ -12,6 +13,8 @@

/**
* 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 {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,29 @@
return;
}
} 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;
Comment thread
NamiUni marked this conversation as resolved.
}

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 @@
if (!player.isRemoved() && player.isAlive() && (isFishingRod || isFishingRod1) && !(this.distanceToSqr(player) > 1024.0)) {
return false;
Expand Down