add events to api
This commit is contained in:
parent
0b9262720a
commit
1bbee6681a
19 changed files with 157 additions and 25 deletions
|
@ -1,4 +1,20 @@
|
|||
package lol.pyr.znpcsplus.api.event;
|
||||
|
||||
public class NpcDespawnEvent {
|
||||
import lol.pyr.znpcsplus.api.event.util.CancellableNpcEvent;
|
||||
import lol.pyr.znpcsplus.api.npc.NpcEntry;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public class NpcDespawnEvent extends CancellableNpcEvent implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
public NpcDespawnEvent(Player player, NpcEntry entry) {
|
||||
super(player, entry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
package lol.pyr.znpcsplus.api.event;
|
||||
|
||||
import lol.pyr.znpcsplus.api.event.util.CancellableNpcEvent;
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.api.npc.NpcEntry;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public class NpcInteractEvent extends CancellableNpcEvent implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private final InteractionType clickType;
|
||||
|
||||
public NpcInteractEvent(Player player, NpcEntry entry, InteractionType clickType) {
|
||||
super(player, entry);
|
||||
this.clickType = clickType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public InteractionType getClickType() {
|
||||
return clickType;
|
||||
}
|
||||
}
|
|
@ -1,4 +1,20 @@
|
|||
package lol.pyr.znpcsplus.api.event;
|
||||
|
||||
public class NpcSpawnEvent {
|
||||
import lol.pyr.znpcsplus.api.event.util.CancellableNpcEvent;
|
||||
import lol.pyr.znpcsplus.api.npc.NpcEntry;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public class NpcSpawnEvent extends CancellableNpcEvent implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
public NpcSpawnEvent(Player player, NpcEntry entry) {
|
||||
super(player, entry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package lol.pyr.znpcsplus.api.event.util;
|
||||
|
||||
import lol.pyr.znpcsplus.api.npc.NpcEntry;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
|
||||
public abstract class CancellableNpcEvent extends NpcEvent implements Cancellable {
|
||||
private boolean cancelled = false;
|
||||
|
||||
public CancellableNpcEvent(Player player, NpcEntry entry) {
|
||||
super(player, entry);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package lol.pyr.znpcsplus.api.event.util;
|
||||
|
||||
import lol.pyr.znpcsplus.api.npc.Npc;
|
||||
import lol.pyr.znpcsplus.api.npc.NpcEntry;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Event;
|
||||
|
||||
public abstract class NpcEvent extends Event {
|
||||
private final NpcEntry entry;
|
||||
private final Player player;
|
||||
|
||||
public NpcEvent(Player player, NpcEntry entry) {
|
||||
super(true); // All events are async since 95% of the plugin is async
|
||||
this.entry = entry;
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public NpcEntry getEntry() {
|
||||
return entry;
|
||||
}
|
||||
|
||||
public Npc getNpc() {
|
||||
return entry.getNpc();
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package lol.pyr.znpcsplus.interaction;
|
||||
package lol.pyr.znpcsplus.api.interaction;
|
||||
|
||||
public enum InteractionType {
|
||||
ANY_CLICK,
|
|
@ -25,7 +25,7 @@ import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
|
|||
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
|
||||
import lol.pyr.znpcsplus.interaction.ActionRegistry;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionPacketListener;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.metadata.*;
|
||||
import lol.pyr.znpcsplus.npc.*;
|
||||
import lol.pyr.znpcsplus.packets.*;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package lol.pyr.znpcsplus.interaction;
|
||||
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
|
@ -4,11 +4,14 @@ import com.github.retrooper.packetevents.event.PacketListener;
|
|||
import com.github.retrooper.packetevents.event.PacketReceiveEvent;
|
||||
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
|
||||
import com.github.retrooper.packetevents.wrapper.play.client.WrapperPlayClientInteractEntity;
|
||||
import lol.pyr.znpcsplus.api.event.NpcInteractEvent;
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.npc.NpcEntryImpl;
|
||||
import lol.pyr.znpcsplus.npc.NpcImpl;
|
||||
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
||||
import lol.pyr.znpcsplus.user.User;
|
||||
import lol.pyr.znpcsplus.user.UserManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class InteractionPacketListener implements PacketListener {
|
||||
|
@ -32,23 +35,27 @@ public class InteractionPacketListener implements PacketListener {
|
|||
NpcEntryImpl entry = npcRegistry.getByEntityId(packet.getEntityId());
|
||||
if (entry == null || !entry.isProcessed()) return;
|
||||
NpcImpl npc = entry.getNpc();
|
||||
InteractionType type = wrapClickType(packet.getAction());
|
||||
|
||||
NpcInteractEvent interactEvent = new NpcInteractEvent(player, entry, type);
|
||||
Bukkit.getPluginManager().callEvent(interactEvent);
|
||||
if (interactEvent.isCancelled()) return;
|
||||
|
||||
for (InteractionAction action : npc.getActions()) {
|
||||
if (!isAllowed(action.getInteractionType(), packet.getAction())) continue;
|
||||
if (action.getInteractionType() != InteractionType.ANY_CLICK && action.getInteractionType() != type) continue;
|
||||
if (action.getCooldown() > 0 && !user.actionCooldownCheck(action)) continue;
|
||||
action.run(player);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isAllowed(InteractionType type, WrapperPlayClientInteractEntity.InteractAction action) {
|
||||
switch (type) {
|
||||
case ANY_CLICK:
|
||||
return true;
|
||||
case LEFT_CLICK:
|
||||
return action == WrapperPlayClientInteractEntity.InteractAction.ATTACK;
|
||||
case RIGHT_CLICK:
|
||||
return action == WrapperPlayClientInteractEntity.InteractAction.INTERACT || action == WrapperPlayClientInteractEntity.InteractAction.INTERACT_AT;
|
||||
private InteractionType wrapClickType(WrapperPlayClientInteractEntity.InteractAction action) {
|
||||
switch (action) {
|
||||
case ATTACK:
|
||||
return InteractionType.LEFT_CLICK;
|
||||
case INTERACT:
|
||||
case INTERACT_AT:
|
||||
return InteractionType.RIGHT_CLICK;
|
||||
}
|
||||
return false;
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package lol.pyr.znpcsplus.interaction.consolecommand;
|
||||
|
||||
import lol.pyr.znpcsplus.interaction.InteractionAction;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
|
||||
import lol.pyr.znpcsplus.util.PapiUtil;
|
||||
import org.bukkit.Bukkit;
|
||||
|
|
|
@ -4,7 +4,7 @@ import lol.pyr.director.adventure.command.CommandContext;
|
|||
import lol.pyr.director.common.command.CommandExecutionException;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionActionType;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.npc.NpcEntryImpl;
|
||||
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
||||
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package lol.pyr.znpcsplus.interaction.message;
|
||||
|
||||
import lol.pyr.znpcsplus.interaction.InteractionAction;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.entity.Player;
|
||||
|
|
|
@ -4,7 +4,7 @@ import lol.pyr.director.adventure.command.CommandContext;
|
|||
import lol.pyr.director.common.command.CommandExecutionException;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionActionType;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.npc.NpcEntryImpl;
|
||||
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package lol.pyr.znpcsplus.interaction.playercommand;
|
||||
|
||||
import lol.pyr.znpcsplus.interaction.InteractionAction;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
|
||||
import lol.pyr.znpcsplus.util.PapiUtil;
|
||||
import org.bukkit.Bukkit;
|
||||
|
|
|
@ -4,7 +4,7 @@ import lol.pyr.director.adventure.command.CommandContext;
|
|||
import lol.pyr.director.common.command.CommandExecutionException;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionActionType;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.npc.NpcEntryImpl;
|
||||
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
||||
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package lol.pyr.znpcsplus.interaction.switchserver;
|
||||
|
||||
import lol.pyr.znpcsplus.interaction.InteractionAction;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.util.BungeeConnector;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import lol.pyr.director.adventure.command.CommandContext;
|
|||
import lol.pyr.director.common.command.CommandExecutionException;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionActionType;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.npc.NpcEntryImpl;
|
||||
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
||||
import lol.pyr.znpcsplus.util.BungeeConnector;
|
||||
|
|
|
@ -4,7 +4,7 @@ import lol.pyr.director.adventure.command.CommandContext;
|
|||
import lol.pyr.director.adventure.parse.ParserType;
|
||||
import lol.pyr.director.common.command.CommandExecutionException;
|
||||
import lol.pyr.director.common.message.Message;
|
||||
import lol.pyr.znpcsplus.interaction.InteractionType;
|
||||
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||
|
||||
import java.util.Deque;
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package lol.pyr.znpcsplus.tasks;
|
||||
|
||||
import lol.pyr.znpcsplus.api.event.NpcDespawnEvent;
|
||||
import lol.pyr.znpcsplus.api.event.NpcSpawnEvent;
|
||||
import lol.pyr.znpcsplus.config.ConfigManager;
|
||||
import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
|
||||
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
|
||||
|
@ -38,9 +40,19 @@ public class NpcProcessorTask extends BukkitRunnable {
|
|||
|
||||
// visibility
|
||||
boolean inRange = distance <= distSq;
|
||||
if (!inRange && npc.isShown(player)) npc.hide(player);
|
||||
if (!inRange && npc.isShown(player)) {
|
||||
NpcDespawnEvent event = new NpcDespawnEvent(player, entry);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (!event.isCancelled()) npc.hide(player);
|
||||
}
|
||||
if (inRange) {
|
||||
if (!npc.isShown(player)) npc.show(player);
|
||||
if (!npc.isShown(player)) {
|
||||
NpcSpawnEvent event = new NpcSpawnEvent(player, entry);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) continue;
|
||||
|
||||
npc.show(player);
|
||||
}
|
||||
if (distance < closestDist) {
|
||||
closestDist = distance;
|
||||
closest = player;
|
||||
|
|
Loading…
Reference in a new issue