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;
|
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;
|
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 {
|
public enum InteractionType {
|
||||||
ANY_CLICK,
|
ANY_CLICK,
|
|
@ -25,7 +25,7 @@ import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
|
||||||
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
|
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
|
||||||
import lol.pyr.znpcsplus.interaction.ActionRegistry;
|
import lol.pyr.znpcsplus.interaction.ActionRegistry;
|
||||||
import lol.pyr.znpcsplus.interaction.InteractionPacketListener;
|
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.metadata.*;
|
||||||
import lol.pyr.znpcsplus.npc.*;
|
import lol.pyr.znpcsplus.npc.*;
|
||||||
import lol.pyr.znpcsplus.packets.*;
|
import lol.pyr.znpcsplus.packets.*;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package lol.pyr.znpcsplus.interaction;
|
package lol.pyr.znpcsplus.interaction;
|
||||||
|
|
||||||
|
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.UUID;
|
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.event.PacketReceiveEvent;
|
||||||
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
|
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
|
||||||
import com.github.retrooper.packetevents.wrapper.play.client.WrapperPlayClientInteractEntity;
|
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.NpcEntryImpl;
|
||||||
import lol.pyr.znpcsplus.npc.NpcImpl;
|
import lol.pyr.znpcsplus.npc.NpcImpl;
|
||||||
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
||||||
import lol.pyr.znpcsplus.user.User;
|
import lol.pyr.znpcsplus.user.User;
|
||||||
import lol.pyr.znpcsplus.user.UserManager;
|
import lol.pyr.znpcsplus.user.UserManager;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class InteractionPacketListener implements PacketListener {
|
public class InteractionPacketListener implements PacketListener {
|
||||||
|
@ -32,23 +35,27 @@ public class InteractionPacketListener implements PacketListener {
|
||||||
NpcEntryImpl entry = npcRegistry.getByEntityId(packet.getEntityId());
|
NpcEntryImpl entry = npcRegistry.getByEntityId(packet.getEntityId());
|
||||||
if (entry == null || !entry.isProcessed()) return;
|
if (entry == null || !entry.isProcessed()) return;
|
||||||
NpcImpl npc = entry.getNpc();
|
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()) {
|
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;
|
if (action.getCooldown() > 0 && !user.actionCooldownCheck(action)) continue;
|
||||||
action.run(player);
|
action.run(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isAllowed(InteractionType type, WrapperPlayClientInteractEntity.InteractAction action) {
|
private InteractionType wrapClickType(WrapperPlayClientInteractEntity.InteractAction action) {
|
||||||
switch (type) {
|
switch (action) {
|
||||||
case ANY_CLICK:
|
case ATTACK:
|
||||||
return true;
|
return InteractionType.LEFT_CLICK;
|
||||||
case LEFT_CLICK:
|
case INTERACT:
|
||||||
return action == WrapperPlayClientInteractEntity.InteractAction.ATTACK;
|
case INTERACT_AT:
|
||||||
case RIGHT_CLICK:
|
return InteractionType.RIGHT_CLICK;
|
||||||
return action == WrapperPlayClientInteractEntity.InteractAction.INTERACT || action == WrapperPlayClientInteractEntity.InteractAction.INTERACT_AT;
|
|
||||||
}
|
}
|
||||||
return false;
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package lol.pyr.znpcsplus.interaction.consolecommand;
|
package lol.pyr.znpcsplus.interaction.consolecommand;
|
||||||
|
|
||||||
import lol.pyr.znpcsplus.interaction.InteractionAction;
|
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.scheduling.TaskScheduler;
|
||||||
import lol.pyr.znpcsplus.util.PapiUtil;
|
import lol.pyr.znpcsplus.util.PapiUtil;
|
||||||
import org.bukkit.Bukkit;
|
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.director.common.command.CommandExecutionException;
|
||||||
import lol.pyr.znpcsplus.interaction.InteractionActionType;
|
import lol.pyr.znpcsplus.interaction.InteractionActionType;
|
||||||
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
|
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.NpcEntryImpl;
|
||||||
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
||||||
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
|
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package lol.pyr.znpcsplus.interaction.message;
|
package lol.pyr.znpcsplus.interaction.message;
|
||||||
|
|
||||||
import lol.pyr.znpcsplus.interaction.InteractionAction;
|
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.platform.bukkit.BukkitAudiences;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.entity.Player;
|
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.director.common.command.CommandExecutionException;
|
||||||
import lol.pyr.znpcsplus.interaction.InteractionActionType;
|
import lol.pyr.znpcsplus.interaction.InteractionActionType;
|
||||||
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
|
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.NpcEntryImpl;
|
||||||
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
||||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package lol.pyr.znpcsplus.interaction.playercommand;
|
package lol.pyr.znpcsplus.interaction.playercommand;
|
||||||
|
|
||||||
import lol.pyr.znpcsplus.interaction.InteractionAction;
|
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.scheduling.TaskScheduler;
|
||||||
import lol.pyr.znpcsplus.util.PapiUtil;
|
import lol.pyr.znpcsplus.util.PapiUtil;
|
||||||
import org.bukkit.Bukkit;
|
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.director.common.command.CommandExecutionException;
|
||||||
import lol.pyr.znpcsplus.interaction.InteractionActionType;
|
import lol.pyr.znpcsplus.interaction.InteractionActionType;
|
||||||
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
|
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.NpcEntryImpl;
|
||||||
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
||||||
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
|
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package lol.pyr.znpcsplus.interaction.switchserver;
|
package lol.pyr.znpcsplus.interaction.switchserver;
|
||||||
|
|
||||||
import lol.pyr.znpcsplus.interaction.InteractionAction;
|
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 lol.pyr.znpcsplus.util.BungeeConnector;
|
||||||
import org.bukkit.entity.Player;
|
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.director.common.command.CommandExecutionException;
|
||||||
import lol.pyr.znpcsplus.interaction.InteractionActionType;
|
import lol.pyr.znpcsplus.interaction.InteractionActionType;
|
||||||
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
|
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.NpcEntryImpl;
|
||||||
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
||||||
import lol.pyr.znpcsplus.util.BungeeConnector;
|
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.adventure.parse.ParserType;
|
||||||
import lol.pyr.director.common.command.CommandExecutionException;
|
import lol.pyr.director.common.command.CommandExecutionException;
|
||||||
import lol.pyr.director.common.message.Message;
|
import lol.pyr.director.common.message.Message;
|
||||||
import lol.pyr.znpcsplus.interaction.InteractionType;
|
import lol.pyr.znpcsplus.api.interaction.InteractionType;
|
||||||
|
|
||||||
import java.util.Deque;
|
import java.util.Deque;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package lol.pyr.znpcsplus.tasks;
|
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.config.ConfigManager;
|
||||||
import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
|
import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
|
||||||
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
|
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
|
||||||
|
@ -38,9 +40,19 @@ public class NpcProcessorTask extends BukkitRunnable {
|
||||||
|
|
||||||
// visibility
|
// visibility
|
||||||
boolean inRange = distance <= distSq;
|
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 (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) {
|
if (distance < closestDist) {
|
||||||
closestDist = distance;
|
closestDist = distance;
|
||||||
closest = player;
|
closest = player;
|
||||||
|
|
Loading…
Reference in a new issue