expose action registry to api and added action factory

This commit is contained in:
D3v1s0m 2024-06-11 21:29:38 +05:30
parent 384cc719e9
commit 26442f2e3e
No known key found for this signature in database
GPG Key ID: FA1F770C7B1D40C1
30 changed files with 203 additions and 71 deletions

@ -1,6 +1,8 @@
package lol.pyr.znpcsplus.api; package lol.pyr.znpcsplus.api;
import lol.pyr.znpcsplus.api.entity.EntityPropertyRegistry; import lol.pyr.znpcsplus.api.entity.EntityPropertyRegistry;
import lol.pyr.znpcsplus.api.interaction.ActionFactory;
import lol.pyr.znpcsplus.api.interaction.ActionRegistry;
import lol.pyr.znpcsplus.api.npc.NpcRegistry; import lol.pyr.znpcsplus.api.npc.NpcRegistry;
import lol.pyr.znpcsplus.api.npc.NpcTypeRegistry; import lol.pyr.znpcsplus.api.npc.NpcTypeRegistry;
import lol.pyr.znpcsplus.api.skin.SkinDescriptorFactory; import lol.pyr.znpcsplus.api.skin.SkinDescriptorFactory;
@ -27,6 +29,18 @@ public interface NpcApi {
*/ */
EntityPropertyRegistry getPropertyRegistry(); EntityPropertyRegistry getPropertyRegistry();
/**
* Gets the action registry.
* @return the action registry
*/
ActionRegistry getActionRegistry();
/**
* Gets the action factory.
* @return the action factory
*/
ActionFactory getActionFactory();
/** /**
* Gets the skin descriptor factory. * Gets the skin descriptor factory.
* @return the skin descriptor factory * @return the skin descriptor factory

@ -48,6 +48,7 @@ public interface PropertyHolder {
* when using item properties, read https://github.com/Pyrbu/ZNPCsPlus/pull/129#issuecomment-1948777764 * when using item properties, read https://github.com/Pyrbu/ZNPCsPlus/pull/129#issuecomment-1948777764
* *
* @param key Unique key representing a property * @param key Unique key representing a property
* @return the {@link ItemStack} associated with the provided property key and this holder
*/ */
ItemStack getItemProperty(EntityProperty<?> key); ItemStack getItemProperty(EntityProperty<?> key);

@ -0,0 +1,10 @@
package lol.pyr.znpcsplus.api.interaction;
@SuppressWarnings("unused")
public interface ActionFactory {
InteractionAction createConsoleCommandAction(String command, InteractionType interactionType, long cooldown, long delay);
InteractionAction createMessageAction(String message, InteractionType interactionType, long cooldown, long delay);
InteractionAction createPlayerChatAction(String message, InteractionType interactionType, long cooldown, long delay);
InteractionAction createPlayerCommandAction(String command, InteractionType interactionType, long cooldown, long delay);
InteractionAction createSwitchServerAction(String server, InteractionType interactionType, long cooldown, long delay);
}

@ -0,0 +1,7 @@
package lol.pyr.znpcsplus.api.interaction;
public interface ActionRegistry {
void register(InteractionActionType<?> type);
void unregister(Class<? extends InteractionAction> clazz);
}

@ -1,4 +1,4 @@
package lol.pyr.znpcsplus.interaction; package lol.pyr.znpcsplus.api.interaction;
public interface InteractionActionType<T> { public interface InteractionActionType<T> {
String serialize(T obj); String serialize(T obj);

@ -75,6 +75,31 @@ public interface Npc extends PropertyHolder {
*/ */
List<? extends InteractionAction> getActions(); List<? extends InteractionAction> getActions();
/**
* Removes an action from this NPC
* @param index The index of the action to remove
*/
void removeAction(int index);
/**
* Adds an action to this NPC
* @param action The {@link InteractionAction} to add
*/
void addAction(InteractionAction action);
/**
* Edits an action for this NPC
* @param index The index of the action to edit
* @param action The {@link InteractionAction} to set
*/
void editAction(int index, InteractionAction action);
/**
* Clears all actions from this NPC
*/
void clearActions();
/** /**
* Gets if this NPC is visible to a player * Gets if this NPC is visible to a player
* @param player The {@link Player} to check * @param player The {@link Player} to check

@ -27,7 +27,8 @@ import lol.pyr.znpcsplus.config.ConfigManager;
import lol.pyr.znpcsplus.conversion.DataImporterRegistry; import lol.pyr.znpcsplus.conversion.DataImporterRegistry;
import lol.pyr.znpcsplus.entity.EntityPropertyImpl; 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.ActionFactoryImpl;
import lol.pyr.znpcsplus.interaction.ActionRegistryImpl;
import lol.pyr.znpcsplus.interaction.InteractionPacketListener; import lol.pyr.znpcsplus.interaction.InteractionPacketListener;
import lol.pyr.znpcsplus.npc.*; import lol.pyr.znpcsplus.npc.*;
import lol.pyr.znpcsplus.packets.*; import lol.pyr.znpcsplus.packets.*;
@ -117,7 +118,9 @@ public class ZNpcsPlus {
PacketFactory packetFactory = setupPacketFactory(scheduler, propertyRegistry, configManager); PacketFactory packetFactory = setupPacketFactory(scheduler, propertyRegistry, configManager);
propertyRegistry.registerTypes(bootstrap, packetFactory, textSerializer); propertyRegistry.registerTypes(bootstrap, packetFactory, textSerializer);
ActionRegistry actionRegistry = new ActionRegistry(); BungeeConnector bungeeConnector = new BungeeConnector(bootstrap);
ActionRegistryImpl actionRegistry = new ActionRegistryImpl();
ActionFactoryImpl actionFactory = new ActionFactoryImpl(scheduler, adventure, textSerializer, bungeeConnector);
NpcTypeRegistryImpl typeRegistry = new NpcTypeRegistryImpl(); NpcTypeRegistryImpl typeRegistry = new NpcTypeRegistryImpl();
NpcRegistryImpl npcRegistry = new NpcRegistryImpl(configManager, this, packetFactory, actionRegistry, NpcRegistryImpl npcRegistry = new NpcRegistryImpl(configManager, this, packetFactory, actionRegistry,
scheduler, typeRegistry, propertyRegistry, textSerializer); scheduler, typeRegistry, propertyRegistry, textSerializer);
@ -125,8 +128,7 @@ public class ZNpcsPlus {
UserManager userManager = new UserManager(); UserManager userManager = new UserManager();
shutdownTasks.add(userManager::shutdown); shutdownTasks.add(userManager::shutdown);
BungeeConnector bungeeConnector = new BungeeConnector(bootstrap);
DataImporterRegistry importerRegistry = new DataImporterRegistry(configManager, adventure, DataImporterRegistry importerRegistry = new DataImporterRegistry(configManager, adventure,
scheduler, packetFactory, textSerializer, typeRegistry, getDataFolder().getParentFile(), scheduler, packetFactory, textSerializer, typeRegistry, getDataFolder().getParentFile(),
propertyRegistry, skinCache, npcRegistry, bungeeConnector); propertyRegistry, skinCache, npcRegistry, bungeeConnector);
@ -177,7 +179,7 @@ public class ZNpcsPlus {
} }
} }
NpcApiProvider.register(bootstrap, new ZNpcsPlusApi(npcRegistry, typeRegistry, propertyRegistry, skinCache)); NpcApiProvider.register(bootstrap, new ZNpcsPlusApi(npcRegistry, typeRegistry, propertyRegistry, actionRegistry, actionFactory, skinCache));
log(ChatColor.WHITE + " * Loading complete! (" + (System.currentTimeMillis() - before) + "ms)"); log(ChatColor.WHITE + " * Loading complete! (" + (System.currentTimeMillis() - before) + "ms)");
log(""); log("");
@ -227,7 +229,7 @@ public class ZNpcsPlus {
} }
private void registerCommands(NpcRegistryImpl npcRegistry, MojangSkinCache skinCache, BukkitAudiences adventure, private void registerCommands(NpcRegistryImpl npcRegistry, MojangSkinCache skinCache, BukkitAudiences adventure,
ActionRegistry actionRegistry, NpcTypeRegistryImpl typeRegistry, ActionRegistryImpl actionRegistry, NpcTypeRegistryImpl typeRegistry,
EntityPropertyRegistryImpl propertyRegistry, DataImporterRegistry importerRegistry, EntityPropertyRegistryImpl propertyRegistry, DataImporterRegistry importerRegistry,
ConfigManager configManager) { ConfigManager configManager) {

@ -2,10 +2,14 @@ package lol.pyr.znpcsplus;
import lol.pyr.znpcsplus.api.NpcApi; import lol.pyr.znpcsplus.api.NpcApi;
import lol.pyr.znpcsplus.api.entity.EntityPropertyRegistry; import lol.pyr.znpcsplus.api.entity.EntityPropertyRegistry;
import lol.pyr.znpcsplus.api.interaction.ActionFactory;
import lol.pyr.znpcsplus.api.interaction.ActionRegistry;
import lol.pyr.znpcsplus.api.npc.NpcRegistry; import lol.pyr.znpcsplus.api.npc.NpcRegistry;
import lol.pyr.znpcsplus.api.npc.NpcTypeRegistry; import lol.pyr.znpcsplus.api.npc.NpcTypeRegistry;
import lol.pyr.znpcsplus.api.skin.SkinDescriptorFactory; import lol.pyr.znpcsplus.api.skin.SkinDescriptorFactory;
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl; import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
import lol.pyr.znpcsplus.interaction.ActionFactoryImpl;
import lol.pyr.znpcsplus.interaction.ActionRegistryImpl;
import lol.pyr.znpcsplus.npc.NpcRegistryImpl; import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl; import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl;
import lol.pyr.znpcsplus.skin.SkinDescriptorFactoryImpl; import lol.pyr.znpcsplus.skin.SkinDescriptorFactoryImpl;
@ -15,12 +19,16 @@ public class ZNpcsPlusApi implements NpcApi {
private final NpcRegistryImpl npcRegistry; private final NpcRegistryImpl npcRegistry;
private final NpcTypeRegistryImpl typeRegistry; private final NpcTypeRegistryImpl typeRegistry;
private final EntityPropertyRegistryImpl propertyRegistry; private final EntityPropertyRegistryImpl propertyRegistry;
private final ActionRegistryImpl actionRegistry;
private final ActionFactoryImpl actionFactory;
private final SkinDescriptorFactoryImpl skinDescriptorFactory; private final SkinDescriptorFactoryImpl skinDescriptorFactory;
public ZNpcsPlusApi(NpcRegistryImpl npcRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, MojangSkinCache skinCache) { public ZNpcsPlusApi(NpcRegistryImpl npcRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, ActionRegistryImpl actionRegistry, ActionFactoryImpl actionFactory, MojangSkinCache skinCache) {
this.npcRegistry = npcRegistry; this.npcRegistry = npcRegistry;
this.typeRegistry = typeRegistry; this.typeRegistry = typeRegistry;
this.propertyRegistry = propertyRegistry; this.propertyRegistry = propertyRegistry;
this.actionRegistry = actionRegistry;
this.actionFactory = actionFactory;
this.skinDescriptorFactory = new SkinDescriptorFactoryImpl(skinCache); this.skinDescriptorFactory = new SkinDescriptorFactoryImpl(skinCache);
} }
@ -39,6 +47,17 @@ public class ZNpcsPlusApi implements NpcApi {
return propertyRegistry; return propertyRegistry;
} }
@Override
public ActionRegistry getActionRegistry() {
return actionRegistry;
}
@Override
public ActionFactory getActionFactory() {
return actionFactory;
}
@Override @Override
public SkinDescriptorFactory getSkinDescriptorFactory() { public SkinDescriptorFactory getSkinDescriptorFactory() {
return skinDescriptorFactory; return skinDescriptorFactory;

@ -3,7 +3,7 @@ package lol.pyr.znpcsplus.commands.action;
import lol.pyr.director.adventure.command.CommandContext; import lol.pyr.director.adventure.command.CommandContext;
import lol.pyr.director.adventure.command.CommandHandler; import lol.pyr.director.adventure.command.CommandHandler;
import lol.pyr.director.common.command.CommandExecutionException; import lol.pyr.director.common.command.CommandExecutionException;
import lol.pyr.znpcsplus.interaction.ActionRegistry; import lol.pyr.znpcsplus.interaction.ActionRegistryImpl;
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler; import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
import lol.pyr.znpcsplus.npc.NpcRegistryImpl; import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
@ -15,9 +15,9 @@ import java.util.stream.Collectors;
public class ActionAddCommand implements CommandHandler { public class ActionAddCommand implements CommandHandler {
private final NpcRegistryImpl npcRegistry; private final NpcRegistryImpl npcRegistry;
private final ActionRegistry actionRegistry; private final ActionRegistryImpl actionRegistry;
public ActionAddCommand(NpcRegistryImpl npcRegistry, ActionRegistry actionRegistry) { public ActionAddCommand(NpcRegistryImpl npcRegistry, ActionRegistryImpl actionRegistry) {
this.npcRegistry = npcRegistry; this.npcRegistry = npcRegistry;
this.actionRegistry = actionRegistry; this.actionRegistry = actionRegistry;
} }

@ -3,8 +3,8 @@ package lol.pyr.znpcsplus.commands.action;
import lol.pyr.director.adventure.command.CommandContext; import lol.pyr.director.adventure.command.CommandContext;
import lol.pyr.director.adventure.command.CommandHandler; import lol.pyr.director.adventure.command.CommandHandler;
import lol.pyr.director.common.command.CommandExecutionException; import lol.pyr.director.common.command.CommandExecutionException;
import lol.pyr.znpcsplus.interaction.ActionRegistry; import lol.pyr.znpcsplus.api.interaction.InteractionAction;
import lol.pyr.znpcsplus.interaction.InteractionActionImpl; import lol.pyr.znpcsplus.interaction.ActionRegistryImpl;
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler; import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
import lol.pyr.znpcsplus.npc.NpcEntryImpl; import lol.pyr.znpcsplus.npc.NpcEntryImpl;
import lol.pyr.znpcsplus.npc.NpcRegistryImpl; import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
@ -18,11 +18,11 @@ import java.util.stream.Stream;
public class ActionEditCommand implements CommandHandler { public class ActionEditCommand implements CommandHandler {
private final NpcRegistryImpl npcRegistry; private final NpcRegistryImpl npcRegistry;
private final ActionRegistry actionRegistry; private final ActionRegistryImpl actionRegistry;
private InteractionCommandHandler commandHandler = null; private InteractionCommandHandler commandHandler = null;
public ActionEditCommand(NpcRegistryImpl npcRegistry, ActionRegistry actionRegistry) { public ActionEditCommand(NpcRegistryImpl npcRegistry, ActionRegistryImpl actionRegistry) {
this.npcRegistry = npcRegistry; this.npcRegistry = npcRegistry;
this.actionRegistry = actionRegistry; this.actionRegistry = actionRegistry;
} }
@ -42,7 +42,7 @@ public class ActionEditCommand implements CommandHandler {
context.send(Component.text("Invalid action type, available action types:\n" + context.send(Component.text("Invalid action type, available action types:\n" +
commands.stream().map(InteractionCommandHandler::getSubcommandName).collect(Collectors.joining(", ")), NamedTextColor.RED)); commands.stream().map(InteractionCommandHandler::getSubcommandName).collect(Collectors.joining(", ")), NamedTextColor.RED));
} }
InteractionActionImpl newAction = this.commandHandler.parse(context); InteractionAction newAction = this.commandHandler.parse(context);
entry.getNpc().editAction(index, newAction); entry.getNpc().editAction(index, newAction);
context.send(Component.text("Edited action with index " + index + " of Npc " + entry.getId(), NamedTextColor.GREEN)); context.send(Component.text("Edited action with index " + index + " of Npc " + entry.getId(), NamedTextColor.GREEN));
} }

@ -3,6 +3,7 @@ package lol.pyr.znpcsplus.commands.action;
import lol.pyr.director.adventure.command.CommandContext; import lol.pyr.director.adventure.command.CommandContext;
import lol.pyr.director.adventure.command.CommandHandler; import lol.pyr.director.adventure.command.CommandHandler;
import lol.pyr.director.common.command.CommandExecutionException; import lol.pyr.director.common.command.CommandExecutionException;
import lol.pyr.znpcsplus.api.interaction.InteractionAction;
import lol.pyr.znpcsplus.interaction.InteractionActionImpl; import lol.pyr.znpcsplus.interaction.InteractionActionImpl;
import lol.pyr.znpcsplus.npc.NpcEntryImpl; import lol.pyr.znpcsplus.npc.NpcEntryImpl;
import lol.pyr.znpcsplus.npc.NpcRegistryImpl; import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
@ -21,10 +22,12 @@ public class ActionListCommand implements CommandHandler {
public void run(CommandContext context) throws CommandExecutionException { public void run(CommandContext context) throws CommandExecutionException {
context.setUsage(context.getLabel() + " action list <id>"); context.setUsage(context.getLabel() + " action list <id>");
NpcEntryImpl entry = context.parse(NpcEntryImpl.class); NpcEntryImpl entry = context.parse(NpcEntryImpl.class);
List<InteractionActionImpl> actions = entry.getNpc().getActions(); List<InteractionAction> actions = entry.getNpc().getActions();
context.send("Actions of Npc " + entry.getId() + ":"); context.send("Actions of Npc " + entry.getId() + ":");
for (int i = 0; i < actions.size(); i++) { for (int i = 0; i < actions.size(); i++) {
context.send(actions.get(i).getInfo(entry.getId(), i, context)); if (actions.get(i) instanceof InteractionActionImpl) {
context.send(((InteractionActionImpl) actions.get(i)).getInfo(entry.getId(), i, context));
}
} }
} }

@ -1,8 +1,8 @@
package lol.pyr.znpcsplus.conversion.citizens.model.traits; package lol.pyr.znpcsplus.conversion.citizens.model.traits;
import lol.pyr.znpcsplus.api.interaction.InteractionAction;
import lol.pyr.znpcsplus.api.interaction.InteractionType; import lol.pyr.znpcsplus.api.interaction.InteractionType;
import lol.pyr.znpcsplus.conversion.citizens.model.SectionCitizensTrait; import lol.pyr.znpcsplus.conversion.citizens.model.SectionCitizensTrait;
import lol.pyr.znpcsplus.interaction.InteractionActionImpl;
import lol.pyr.znpcsplus.interaction.consolecommand.ConsoleCommandAction; import lol.pyr.znpcsplus.interaction.consolecommand.ConsoleCommandAction;
import lol.pyr.znpcsplus.interaction.playercommand.PlayerCommandAction; import lol.pyr.znpcsplus.interaction.playercommand.PlayerCommandAction;
import lol.pyr.znpcsplus.npc.NpcImpl; import lol.pyr.znpcsplus.npc.NpcImpl;
@ -35,7 +35,7 @@ public class CommandTrait extends SectionCitizensTrait {
int cooldown = commandSection.getInt("cooldown", 0); int cooldown = commandSection.getInt("cooldown", 0);
int delay = commandSection.getInt("delay", 0); int delay = commandSection.getInt("delay", 0);
if (command != null) { if (command != null) {
InteractionActionImpl action; InteractionAction action;
if (isPlayerCommand) { if (isPlayerCommand) {
action = new PlayerCommandAction(scheduler, command, clickType, cooldown, delay); action = new PlayerCommandAction(scheduler, command, clickType, cooldown, delay);
} else { } else {

@ -143,7 +143,7 @@ public class FancyNpcsImporter implements DataImporter {
if (!messages.isEmpty()) { if (!messages.isEmpty()) {
long cooldown = npcSection.getLong("interactionCooldown", 0); long cooldown = npcSection.getLong("interactionCooldown", 0);
for (String message : messages) { for (String message : messages) {
npc.addAction(new MessageAction(adventure, message, InteractionType.ANY_CLICK, textSerializer, cooldown, 0)); npc.addAction(new MessageAction(adventure, textSerializer, message, InteractionType.ANY_CLICK, cooldown, 0));
} }
} }
String id = npcSection.getString("name"); String id = npcSection.getString("name");

@ -4,6 +4,7 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonParser; import com.google.gson.JsonParser;
import lol.pyr.znpcsplus.api.interaction.InteractionAction;
import lol.pyr.znpcsplus.api.interaction.InteractionType; import lol.pyr.znpcsplus.api.interaction.InteractionType;
import lol.pyr.znpcsplus.api.skin.SkinDescriptor; import lol.pyr.znpcsplus.api.skin.SkinDescriptor;
import lol.pyr.znpcsplus.config.ConfigManager; import lol.pyr.znpcsplus.config.ConfigManager;
@ -12,7 +13,6 @@ import lol.pyr.znpcsplus.conversion.znpcs.model.*;
import lol.pyr.znpcsplus.entity.EntityPropertyImpl; import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl; import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
import lol.pyr.znpcsplus.hologram.HologramImpl; import lol.pyr.znpcsplus.hologram.HologramImpl;
import lol.pyr.znpcsplus.interaction.InteractionActionImpl;
import lol.pyr.znpcsplus.interaction.consolecommand.ConsoleCommandAction; import lol.pyr.znpcsplus.interaction.consolecommand.ConsoleCommandAction;
import lol.pyr.znpcsplus.interaction.message.MessageAction; import lol.pyr.znpcsplus.interaction.message.MessageAction;
import lol.pyr.znpcsplus.interaction.playerchat.PlayerChatAction; import lol.pyr.znpcsplus.interaction.playerchat.PlayerChatAction;
@ -146,7 +146,7 @@ public class ZNpcImporter implements DataImporter {
for (String line : lines) { for (String line : lines) {
// Create a new message action for each line of text // Create a new message action for each line of text
InteractionActionImpl action = new MessageAction(adventure, line, InteractionType.ANY_CLICK, textSerializer, 0, totalDelay); InteractionAction action = new MessageAction(adventure, textSerializer, line, InteractionType.ANY_CLICK, 0, totalDelay);
npc.addAction(action); npc.addAction(action);
} }
} }
@ -222,7 +222,7 @@ public class ZNpcImporter implements DataImporter {
throw new IllegalArgumentException("Couldn't adapt znpcs click type: " + clickType); throw new IllegalArgumentException("Couldn't adapt znpcs click type: " + clickType);
} }
private InteractionActionImpl adaptAction(String type, InteractionType clickType, String parameter, int cooldown) { private InteractionAction adaptAction(String type, InteractionType clickType, String parameter, int cooldown) {
switch (type.toLowerCase()) { switch (type.toLowerCase()) {
case "cmd": case "cmd":
return new PlayerCommandAction(taskScheduler, parameter, clickType, cooldown * 1000L, 0); return new PlayerCommandAction(taskScheduler, parameter, clickType, cooldown * 1000L, 0);
@ -231,9 +231,9 @@ public class ZNpcImporter implements DataImporter {
case "chat": case "chat":
return new PlayerChatAction(taskScheduler, parameter, clickType, cooldown * 1000L, 0); return new PlayerChatAction(taskScheduler, parameter, clickType, cooldown * 1000L, 0);
case "message": case "message":
return new MessageAction(adventure, parameter, clickType, textSerializer, cooldown * 1000L, 0); return new MessageAction(adventure, textSerializer, parameter, clickType, cooldown * 1000L, 0);
case "server": case "server":
return new SwitchServerAction(parameter, clickType, cooldown * 1000L, 0, bungeeConnector); return new SwitchServerAction(bungeeConnector, parameter, clickType, cooldown * 1000L, 0);
} }
throw new IllegalArgumentException("Couldn't adapt znpcs click action: " + type); throw new IllegalArgumentException("Couldn't adapt znpcs click action: " + type);
} }

@ -0,0 +1,48 @@
package lol.pyr.znpcsplus.interaction;
import lol.pyr.znpcsplus.api.interaction.ActionFactory;
import lol.pyr.znpcsplus.api.interaction.InteractionAction;
import lol.pyr.znpcsplus.api.interaction.InteractionType;
import lol.pyr.znpcsplus.interaction.consolecommand.ConsoleCommandAction;
import lol.pyr.znpcsplus.interaction.message.MessageAction;
import lol.pyr.znpcsplus.interaction.playerchat.PlayerChatAction;
import lol.pyr.znpcsplus.interaction.playercommand.PlayerCommandAction;
import lol.pyr.znpcsplus.interaction.switchserver.SwitchServerAction;
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
import lol.pyr.znpcsplus.util.BungeeConnector;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
public class ActionFactoryImpl implements ActionFactory {
private final TaskScheduler scheduler;
private final BukkitAudiences adventure;
private final LegacyComponentSerializer textSerializer;
private final BungeeConnector bungeeConnector;
public ActionFactoryImpl(TaskScheduler scheduler, BukkitAudiences adventure, LegacyComponentSerializer textSerializer, BungeeConnector bungeeConnector) {
this.scheduler = scheduler;
this.adventure = adventure;
this.textSerializer = textSerializer;
this.bungeeConnector = bungeeConnector;
}
public InteractionAction createConsoleCommandAction(String command, InteractionType interactionType, long cooldown, long delay) {
return new ConsoleCommandAction(this.scheduler, command, interactionType, cooldown, delay);
}
public InteractionAction createMessageAction(String message, InteractionType interactionType, long cooldown, long delay) {
return new MessageAction(this.adventure, textSerializer, message, interactionType, cooldown, delay);
}
public InteractionAction createPlayerChatAction(String message, InteractionType interactionType, long cooldown, long delay) {
return new PlayerChatAction(this.scheduler, message, interactionType, cooldown, delay);
}
public InteractionAction createPlayerCommandAction(String command, InteractionType interactionType, long cooldown, long delay) {
return new PlayerCommandAction(this.scheduler, command, interactionType, cooldown, delay);
}
public InteractionAction createSwitchServerAction(String server, InteractionType interactionType, long cooldown, long delay) {
return new SwitchServerAction(bungeeConnector, server, interactionType, cooldown, delay);
}
}

@ -1,6 +1,6 @@
package lol.pyr.znpcsplus.interaction; package lol.pyr.znpcsplus.interaction;
import lol.pyr.znpcsplus.api.interaction.InteractionAction; import lol.pyr.znpcsplus.api.interaction.*;
import lol.pyr.znpcsplus.interaction.consolecommand.ConsoleCommandActionType; import lol.pyr.znpcsplus.interaction.consolecommand.ConsoleCommandActionType;
import lol.pyr.znpcsplus.interaction.message.MessageActionType; import lol.pyr.znpcsplus.interaction.message.MessageActionType;
import lol.pyr.znpcsplus.interaction.playerchat.PlayerChatActionType; import lol.pyr.znpcsplus.interaction.playerchat.PlayerChatActionType;
@ -17,12 +17,9 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class ActionRegistry { public class ActionRegistryImpl implements ActionRegistry {
private final Map<Class<?>, InteractionActionType<?>> serializerMap = new HashMap<>(); private final Map<Class<?>, InteractionActionType<?>> serializerMap = new HashMap<>();
public ActionRegistry() {
}
public void registerTypes(TaskScheduler taskScheduler, BukkitAudiences adventure, LegacyComponentSerializer textSerializer, BungeeConnector bungeeConnector) { public void registerTypes(TaskScheduler taskScheduler, BukkitAudiences adventure, LegacyComponentSerializer textSerializer, BungeeConnector bungeeConnector) {
register(new ConsoleCommandActionType(taskScheduler)); register(new ConsoleCommandActionType(taskScheduler));
register(new PlayerCommandActionType(taskScheduler)); register(new PlayerCommandActionType(taskScheduler));

@ -3,6 +3,7 @@ package lol.pyr.znpcsplus.interaction;
import lol.pyr.director.adventure.command.CommandContext; import lol.pyr.director.adventure.command.CommandContext;
import lol.pyr.director.adventure.command.CommandHandler; import lol.pyr.director.adventure.command.CommandHandler;
import lol.pyr.director.common.command.CommandExecutionException; import lol.pyr.director.common.command.CommandExecutionException;
import lol.pyr.znpcsplus.api.interaction.InteractionAction;
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 net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
@ -11,7 +12,7 @@ import net.kyori.adventure.text.format.NamedTextColor;
public interface InteractionCommandHandler extends CommandHandler { public interface InteractionCommandHandler extends CommandHandler {
String getSubcommandName(); String getSubcommandName();
InteractionActionImpl parse(CommandContext context) throws CommandExecutionException; InteractionAction parse(CommandContext context) throws CommandExecutionException;
void appendUsage(CommandContext context); void appendUsage(CommandContext context);
@Override @Override

@ -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.api.interaction.InteractionType; import lol.pyr.znpcsplus.api.interaction.InteractionType;
import lol.pyr.znpcsplus.interaction.InteractionActionImpl; import lol.pyr.znpcsplus.interaction.InteractionActionImpl;
import lol.pyr.znpcsplus.interaction.InteractionActionType; import lol.pyr.znpcsplus.api.interaction.InteractionActionType;
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler; import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
import lol.pyr.znpcsplus.scheduling.TaskScheduler; import lol.pyr.znpcsplus.scheduling.TaskScheduler;

@ -17,7 +17,7 @@ public class MessageAction extends InteractionActionImpl {
private final String message; private final String message;
private final LegacyComponentSerializer textSerializer; private final LegacyComponentSerializer textSerializer;
public MessageAction(BukkitAudiences adventure, String message, InteractionType interactionType, LegacyComponentSerializer textSerializer, long cooldown, long delay) { public MessageAction(BukkitAudiences adventure, LegacyComponentSerializer textSerializer, String message, InteractionType interactionType, long cooldown, long delay) {
super(cooldown, delay, interactionType); super(cooldown, delay, interactionType);
this.adventure = adventure; this.adventure = adventure;
this.message = message; this.message = message;

@ -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.api.interaction.InteractionType; import lol.pyr.znpcsplus.api.interaction.InteractionType;
import lol.pyr.znpcsplus.interaction.InteractionActionImpl; import lol.pyr.znpcsplus.interaction.InteractionActionImpl;
import lol.pyr.znpcsplus.interaction.InteractionActionType; import lol.pyr.znpcsplus.api.interaction.InteractionActionType;
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler; import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
@ -32,7 +32,7 @@ public class MessageActionType implements InteractionActionType<MessageAction>,
public MessageAction deserialize(String str) { public MessageAction deserialize(String str) {
String[] split = str.split(";"); String[] split = str.split(";");
InteractionType type = split.length > 2 ? InteractionType.valueOf(split[2]) : InteractionType.ANY_CLICK; InteractionType type = split.length > 2 ? InteractionType.valueOf(split[2]) : InteractionType.ANY_CLICK;
return new MessageAction(adventure, new String(Base64.getDecoder().decode(split[0]), StandardCharsets.UTF_8), type, textSerializer, Long.parseLong(split[1]), Long.parseLong(split.length > 3 ? split[3] : "0")); return new MessageAction(adventure, textSerializer, new String(Base64.getDecoder().decode(split[0]), StandardCharsets.UTF_8), type, Long.parseLong(split[1]), Long.parseLong(split.length > 3 ? split[3] : "0"));
} }
@Override @Override
@ -56,7 +56,7 @@ public class MessageActionType implements InteractionActionType<MessageAction>,
long cooldown = (long) (context.parse(Double.class) * 1000D); long cooldown = (long) (context.parse(Double.class) * 1000D);
long delay = (long) (context.parse(Integer.class) * 1D); long delay = (long) (context.parse(Integer.class) * 1D);
String message = context.dumpAllArgs(); String message = context.dumpAllArgs();
return new MessageAction(adventure, message, type, textSerializer, cooldown, delay); return new MessageAction(adventure, textSerializer, message, type, cooldown, delay);
} }
@Override @Override

@ -2,9 +2,9 @@ package lol.pyr.znpcsplus.interaction.playerchat;
import lol.pyr.director.adventure.command.CommandContext; 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.api.interaction.InteractionAction;
import lol.pyr.znpcsplus.api.interaction.InteractionActionType;
import lol.pyr.znpcsplus.api.interaction.InteractionType; import lol.pyr.znpcsplus.api.interaction.InteractionType;
import lol.pyr.znpcsplus.interaction.InteractionActionImpl;
import lol.pyr.znpcsplus.interaction.InteractionActionType;
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler; import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
import lol.pyr.znpcsplus.scheduling.TaskScheduler; import lol.pyr.znpcsplus.scheduling.TaskScheduler;
@ -47,7 +47,7 @@ public class PlayerChatActionType implements InteractionActionType<PlayerChatAct
} }
@Override @Override
public InteractionActionImpl parse(CommandContext context) throws CommandExecutionException { public InteractionAction parse(CommandContext context) throws CommandExecutionException {
InteractionType type = context.parse(InteractionType.class); InteractionType type = context.parse(InteractionType.class);
long cooldown = (long) (context.parse(Double.class) * 1000D); long cooldown = (long) (context.parse(Double.class) * 1000D);
long delay = (long) (context.parse(Integer.class) * 1D); long delay = (long) (context.parse(Integer.class) * 1D);

@ -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.api.interaction.InteractionType; import lol.pyr.znpcsplus.api.interaction.InteractionType;
import lol.pyr.znpcsplus.interaction.InteractionActionImpl; import lol.pyr.znpcsplus.interaction.InteractionActionImpl;
import lol.pyr.znpcsplus.interaction.InteractionActionType; import lol.pyr.znpcsplus.api.interaction.InteractionActionType;
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler; import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
import lol.pyr.znpcsplus.scheduling.TaskScheduler; import lol.pyr.znpcsplus.scheduling.TaskScheduler;

@ -14,7 +14,7 @@ public class SwitchServerAction extends InteractionActionImpl {
private final String server; private final String server;
private final BungeeConnector bungeeConnector; private final BungeeConnector bungeeConnector;
public SwitchServerAction(String server, InteractionType interactionType, long cooldown, long delay, BungeeConnector bungeeConnector) { public SwitchServerAction(BungeeConnector bungeeConnector, String server, InteractionType interactionType, long cooldown, long delay) {
super(cooldown, delay, interactionType); super(cooldown, delay, interactionType);
this.server = server; this.server = server;
this.bungeeConnector = bungeeConnector; this.bungeeConnector = bungeeConnector;

@ -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.api.interaction.InteractionType; import lol.pyr.znpcsplus.api.interaction.InteractionType;
import lol.pyr.znpcsplus.interaction.InteractionActionImpl; import lol.pyr.znpcsplus.interaction.InteractionActionImpl;
import lol.pyr.znpcsplus.interaction.InteractionActionType; import lol.pyr.znpcsplus.api.interaction.InteractionActionType;
import lol.pyr.znpcsplus.interaction.InteractionCommandHandler; import lol.pyr.znpcsplus.interaction.InteractionCommandHandler;
import lol.pyr.znpcsplus.util.BungeeConnector; import lol.pyr.znpcsplus.util.BungeeConnector;
@ -29,7 +29,7 @@ public class SwitchServerActionType implements InteractionActionType<SwitchServe
public SwitchServerAction deserialize(String str) { public SwitchServerAction deserialize(String str) {
String[] split = str.split(";"); String[] split = str.split(";");
InteractionType type = split.length > 2 ? InteractionType.valueOf(split[2]) : InteractionType.ANY_CLICK; InteractionType type = split.length > 2 ? InteractionType.valueOf(split[2]) : InteractionType.ANY_CLICK;
return new SwitchServerAction(new String(Base64.getDecoder().decode(split[0]), StandardCharsets.UTF_8), type, Long.parseLong(split[1]), Long.parseLong(split.length > 3 ? split[3] : "0"), bungeeConnector); return new SwitchServerAction(bungeeConnector, new String(Base64.getDecoder().decode(split[0]), StandardCharsets.UTF_8), type, Long.parseLong(split[1]), Long.parseLong(split.length > 3 ? split[3] : "0"));
} }
@Override @Override
@ -53,7 +53,7 @@ public class SwitchServerActionType implements InteractionActionType<SwitchServe
long cooldown = (long) (context.parse(Double.class) * 1000D); long cooldown = (long) (context.parse(Double.class) * 1000D);
long delay = (long) (context.parse(Integer.class) * 1D); long delay = (long) (context.parse(Integer.class) * 1D);
String server = context.dumpAllArgs(); String server = context.dumpAllArgs();
return new SwitchServerAction(server, type, cooldown, delay, bungeeConnector); return new SwitchServerAction(bungeeConnector, server, type, cooldown, delay);
} }
@Override @Override

@ -3,6 +3,7 @@ package lol.pyr.znpcsplus.npc;
import com.github.retrooper.packetevents.protocol.entity.data.EntityData; import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
import io.github.retrooper.packetevents.util.SpigotConversionUtil; import io.github.retrooper.packetevents.util.SpigotConversionUtil;
import lol.pyr.znpcsplus.api.entity.EntityProperty; import lol.pyr.znpcsplus.api.entity.EntityProperty;
import lol.pyr.znpcsplus.api.interaction.InteractionAction;
import lol.pyr.znpcsplus.api.npc.Npc; import lol.pyr.znpcsplus.api.npc.Npc;
import lol.pyr.znpcsplus.api.npc.NpcType; import lol.pyr.znpcsplus.api.npc.NpcType;
import lol.pyr.znpcsplus.config.ConfigManager; import lol.pyr.znpcsplus.config.ConfigManager;
@ -10,7 +11,6 @@ import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl; import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
import lol.pyr.znpcsplus.entity.PacketEntity; import lol.pyr.znpcsplus.entity.PacketEntity;
import lol.pyr.znpcsplus.hologram.HologramImpl; import lol.pyr.znpcsplus.hologram.HologramImpl;
import lol.pyr.znpcsplus.interaction.InteractionActionImpl;
import lol.pyr.znpcsplus.packets.PacketFactory; import lol.pyr.znpcsplus.packets.PacketFactory;
import lol.pyr.znpcsplus.util.NpcLocation; import lol.pyr.znpcsplus.util.NpcLocation;
import lol.pyr.znpcsplus.util.Viewable; import lol.pyr.znpcsplus.util.Viewable;
@ -36,7 +36,7 @@ public class NpcImpl extends Viewable implements Npc {
private final UUID uuid; private final UUID uuid;
private final Map<EntityPropertyImpl<?>, Object> propertyMap = new HashMap<>(); private final Map<EntityPropertyImpl<?>, Object> propertyMap = new HashMap<>();
private final List<InteractionActionImpl> actions = new ArrayList<>(); private final List<InteractionAction> actions = new ArrayList<>();
protected NpcImpl(UUID uuid, EntityPropertyRegistryImpl propertyRegistry, ConfigManager configManager, LegacyComponentSerializer textSerializer, World world, NpcTypeImpl type, NpcLocation location, PacketFactory packetFactory) { protected NpcImpl(UUID uuid, EntityPropertyRegistryImpl propertyRegistry, ConfigManager configManager, LegacyComponentSerializer textSerializer, World world, NpcTypeImpl type, NpcLocation location, PacketFactory packetFactory) {
this(uuid, propertyRegistry, configManager, packetFactory, textSerializer, world.getName(), type, location); this(uuid, propertyRegistry, configManager, packetFactory, textSerializer, world.getName(), type, location);
@ -200,23 +200,28 @@ public class NpcImpl extends Viewable implements Npc {
return Collections.unmodifiableSet(propertyMap.keySet()).stream().filter(type::isAllowedProperty).collect(Collectors.toSet()); return Collections.unmodifiableSet(propertyMap.keySet()).stream().filter(type::isAllowedProperty).collect(Collectors.toSet());
} }
public List<InteractionActionImpl> getActions() { @Override
public List<InteractionAction> getActions() {
return Collections.unmodifiableList(actions); return Collections.unmodifiableList(actions);
} }
@Override
public void removeAction(int index) { public void removeAction(int index) {
actions.remove(index); actions.remove(index);
} }
@Override
public void addAction(InteractionAction action) {
actions.add(action);
}
@Override
public void clearActions() { public void clearActions() {
actions.clear(); actions.clear();
} }
public void addAction(InteractionActionImpl action) { @Override
actions.add(action); public void editAction(int index, InteractionAction action) {
}
public void editAction(int index, InteractionActionImpl action) {
actions.set(index, action); actions.set(index, action);
} }

@ -2,6 +2,7 @@ package lol.pyr.znpcsplus.npc;
import lol.pyr.znpcsplus.ZNpcsPlus; import lol.pyr.znpcsplus.ZNpcsPlus;
import lol.pyr.znpcsplus.api.entity.EntityProperty; import lol.pyr.znpcsplus.api.entity.EntityProperty;
import lol.pyr.znpcsplus.api.interaction.InteractionAction;
import lol.pyr.znpcsplus.api.npc.NpcEntry; import lol.pyr.znpcsplus.api.npc.NpcEntry;
import lol.pyr.znpcsplus.api.npc.NpcRegistry; import lol.pyr.znpcsplus.api.npc.NpcRegistry;
import lol.pyr.znpcsplus.api.npc.NpcType; import lol.pyr.znpcsplus.api.npc.NpcType;
@ -10,8 +11,7 @@ import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
import lol.pyr.znpcsplus.hologram.HologramItem; import lol.pyr.znpcsplus.hologram.HologramItem;
import lol.pyr.znpcsplus.hologram.HologramLine; import lol.pyr.znpcsplus.hologram.HologramLine;
import lol.pyr.znpcsplus.hologram.HologramText; import lol.pyr.znpcsplus.hologram.HologramText;
import lol.pyr.znpcsplus.interaction.ActionRegistry; import lol.pyr.znpcsplus.interaction.ActionRegistryImpl;
import lol.pyr.znpcsplus.interaction.InteractionActionImpl;
import lol.pyr.znpcsplus.packets.PacketFactory; import lol.pyr.znpcsplus.packets.PacketFactory;
import lol.pyr.znpcsplus.scheduling.TaskScheduler; import lol.pyr.znpcsplus.scheduling.TaskScheduler;
import lol.pyr.znpcsplus.storage.NpcStorage; import lol.pyr.znpcsplus.storage.NpcStorage;
@ -35,7 +35,7 @@ public class NpcRegistryImpl implements NpcRegistry {
private final Map<String, NpcEntryImpl> npcIdLookupMap = new HashMap<>(); private final Map<String, NpcEntryImpl> npcIdLookupMap = new HashMap<>();
private final Map<UUID, NpcEntryImpl> npcUuidLookupMap = new HashMap<>(); private final Map<UUID, NpcEntryImpl> npcUuidLookupMap = new HashMap<>();
public NpcRegistryImpl(ConfigManager configManager, ZNpcsPlus plugin, PacketFactory packetFactory, ActionRegistry actionRegistry, TaskScheduler scheduler, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer) { public NpcRegistryImpl(ConfigManager configManager, ZNpcsPlus plugin, PacketFactory packetFactory, ActionRegistryImpl actionRegistry, TaskScheduler scheduler, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer) {
this.textSerializer = textSerializer; this.textSerializer = textSerializer;
this.propertyRegistry = propertyRegistry; this.propertyRegistry = propertyRegistry;
storage = configManager.getConfig().storageType().create(configManager, plugin, packetFactory, actionRegistry, typeRegistry, propertyRegistry, textSerializer); storage = configManager.getConfig().storageType().create(configManager, plugin, packetFactory, actionRegistry, typeRegistry, propertyRegistry, textSerializer);
@ -168,7 +168,7 @@ public class NpcRegistryImpl implements NpcRegistry {
newNpc.getNpc().UNSAFE_setProperty(property, oldNpc.getNpc().getProperty(property)); newNpc.getNpc().UNSAFE_setProperty(property, oldNpc.getNpc().getProperty(property));
} }
for (InteractionActionImpl action : oldNpc.getNpc().getActions()) { for (InteractionAction action : oldNpc.getNpc().getActions()) {
newNpc.getNpc().addAction(action); newNpc.getNpc().addAction(action);
} }

@ -3,7 +3,7 @@ package lol.pyr.znpcsplus.storage;
import lol.pyr.znpcsplus.ZNpcsPlus; import lol.pyr.znpcsplus.ZNpcsPlus;
import lol.pyr.znpcsplus.config.ConfigManager; import lol.pyr.znpcsplus.config.ConfigManager;
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl; import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
import lol.pyr.znpcsplus.interaction.ActionRegistry; import lol.pyr.znpcsplus.interaction.ActionRegistryImpl;
import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl; import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl;
import lol.pyr.znpcsplus.packets.PacketFactory; import lol.pyr.znpcsplus.packets.PacketFactory;
import lol.pyr.znpcsplus.storage.mysql.MySQLStorage; import lol.pyr.znpcsplus.storage.mysql.MySQLStorage;
@ -16,13 +16,13 @@ import java.io.File;
public enum NpcStorageType { public enum NpcStorageType {
YAML { YAML {
@Override @Override
public NpcStorage create(ConfigManager configManager, ZNpcsPlus plugin, PacketFactory packetFactory, ActionRegistry actionRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer) { public NpcStorage create(ConfigManager configManager, ZNpcsPlus plugin, PacketFactory packetFactory, ActionRegistryImpl actionRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer) {
return new YamlStorage(packetFactory, configManager, actionRegistry, typeRegistry, propertyRegistry, textSerializer, new File(plugin.getDataFolder(), "data")); return new YamlStorage(packetFactory, configManager, actionRegistry, typeRegistry, propertyRegistry, textSerializer, new File(plugin.getDataFolder(), "data"));
} }
}, },
SQLITE { SQLITE {
@Override @Override
public NpcStorage create(ConfigManager configManager, ZNpcsPlus plugin, PacketFactory packetFactory, ActionRegistry actionRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer) { public NpcStorage create(ConfigManager configManager, ZNpcsPlus plugin, PacketFactory packetFactory, ActionRegistryImpl actionRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer) {
try { try {
return new SQLiteStorage(packetFactory, configManager, actionRegistry, typeRegistry, propertyRegistry, textSerializer, new File(plugin.getDataFolder(), "znpcsplus.sqlite")); return new SQLiteStorage(packetFactory, configManager, actionRegistry, typeRegistry, propertyRegistry, textSerializer, new File(plugin.getDataFolder(), "znpcsplus.sqlite"));
} catch (Exception e) { } catch (Exception e) {
@ -33,7 +33,7 @@ public enum NpcStorageType {
}, },
MYSQL { MYSQL {
@Override @Override
public NpcStorage create(ConfigManager configManager, ZNpcsPlus plugin, PacketFactory packetFactory, ActionRegistry actionRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer) { public NpcStorage create(ConfigManager configManager, ZNpcsPlus plugin, PacketFactory packetFactory, ActionRegistryImpl actionRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer) {
try { try {
return new MySQLStorage(packetFactory, configManager, actionRegistry, typeRegistry, propertyRegistry, textSerializer); return new MySQLStorage(packetFactory, configManager, actionRegistry, typeRegistry, propertyRegistry, textSerializer);
} catch (Exception e) { } catch (Exception e) {
@ -43,5 +43,5 @@ public enum NpcStorageType {
} }
}; };
public abstract NpcStorage create(ConfigManager configManager, ZNpcsPlus plugin, PacketFactory packetFactory, ActionRegistry actionRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer); public abstract NpcStorage create(ConfigManager configManager, ZNpcsPlus plugin, PacketFactory packetFactory, ActionRegistryImpl actionRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer);
} }

@ -6,7 +6,7 @@ import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl; import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
import lol.pyr.znpcsplus.entity.PropertySerializer; import lol.pyr.znpcsplus.entity.PropertySerializer;
import lol.pyr.znpcsplus.hologram.HologramImpl; import lol.pyr.znpcsplus.hologram.HologramImpl;
import lol.pyr.znpcsplus.interaction.ActionRegistry; import lol.pyr.znpcsplus.interaction.ActionRegistryImpl;
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.NpcTypeRegistryImpl; import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl;
@ -28,7 +28,7 @@ public class MySQLStorage implements NpcStorage {
private final PacketFactory packetFactory; private final PacketFactory packetFactory;
private final ConfigManager configManager; private final ConfigManager configManager;
private final ActionRegistry actionRegistry; private final ActionRegistryImpl actionRegistry;
private final NpcTypeRegistryImpl typeRegistry; private final NpcTypeRegistryImpl typeRegistry;
private final EntityPropertyRegistryImpl propertyRegistry; private final EntityPropertyRegistryImpl propertyRegistry;
private final LegacyComponentSerializer textSerializer; private final LegacyComponentSerializer textSerializer;
@ -39,7 +39,7 @@ public class MySQLStorage implements NpcStorage {
private final String TABLE_NPCS_HOLOGRAMS; private final String TABLE_NPCS_HOLOGRAMS;
private final String TABLE_NPCS_ACTIONS; private final String TABLE_NPCS_ACTIONS;
public MySQLStorage(PacketFactory packetFactory, ConfigManager configManager, ActionRegistry actionRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer) { public MySQLStorage(PacketFactory packetFactory, ConfigManager configManager, ActionRegistryImpl actionRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer) {
this.packetFactory = packetFactory; this.packetFactory = packetFactory;
this.configManager = configManager; this.configManager = configManager;
this.actionRegistry = actionRegistry; this.actionRegistry = actionRegistry;

@ -6,7 +6,7 @@ import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl; import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
import lol.pyr.znpcsplus.entity.PropertySerializer; import lol.pyr.znpcsplus.entity.PropertySerializer;
import lol.pyr.znpcsplus.hologram.HologramImpl; import lol.pyr.znpcsplus.hologram.HologramImpl;
import lol.pyr.znpcsplus.interaction.ActionRegistry; import lol.pyr.znpcsplus.interaction.ActionRegistryImpl;
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.NpcTypeRegistryImpl; import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl;
@ -29,7 +29,7 @@ public class SQLiteStorage implements NpcStorage {
private final PacketFactory packetFactory; private final PacketFactory packetFactory;
private final ConfigManager configManager; private final ConfigManager configManager;
private final ActionRegistry actionRegistry; private final ActionRegistryImpl actionRegistry;
private final NpcTypeRegistryImpl typeRegistry; private final NpcTypeRegistryImpl typeRegistry;
private final EntityPropertyRegistryImpl propertyRegistry; private final EntityPropertyRegistryImpl propertyRegistry;
private final LegacyComponentSerializer textSerializer; private final LegacyComponentSerializer textSerializer;
@ -40,7 +40,7 @@ public class SQLiteStorage implements NpcStorage {
private final String TABLE_NPCS_HOLOGRAMS; private final String TABLE_NPCS_HOLOGRAMS;
private final String TABLE_NPCS_ACTIONS; private final String TABLE_NPCS_ACTIONS;
public SQLiteStorage(PacketFactory packetFactory, ConfigManager configManager, ActionRegistry actionRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer, File file) { public SQLiteStorage(PacketFactory packetFactory, ConfigManager configManager, ActionRegistryImpl actionRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer, File file) {
this.packetFactory = packetFactory; this.packetFactory = packetFactory;
this.configManager = configManager; this.configManager = configManager;
this.actionRegistry = actionRegistry; this.actionRegistry = actionRegistry;

@ -6,7 +6,7 @@ import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl; import lol.pyr.znpcsplus.entity.EntityPropertyRegistryImpl;
import lol.pyr.znpcsplus.entity.PropertySerializer; import lol.pyr.znpcsplus.entity.PropertySerializer;
import lol.pyr.znpcsplus.hologram.HologramImpl; import lol.pyr.znpcsplus.hologram.HologramImpl;
import lol.pyr.znpcsplus.interaction.ActionRegistry; import lol.pyr.znpcsplus.interaction.ActionRegistryImpl;
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.NpcTypeRegistryImpl; import lol.pyr.znpcsplus.npc.NpcTypeRegistryImpl;
@ -29,13 +29,13 @@ public class YamlStorage implements NpcStorage {
private final PacketFactory packetFactory; private final PacketFactory packetFactory;
private final ConfigManager configManager; private final ConfigManager configManager;
private final ActionRegistry actionRegistry; private final ActionRegistryImpl actionRegistry;
private final NpcTypeRegistryImpl typeRegistry; private final NpcTypeRegistryImpl typeRegistry;
private final EntityPropertyRegistryImpl propertyRegistry; private final EntityPropertyRegistryImpl propertyRegistry;
private final LegacyComponentSerializer textSerializer; private final LegacyComponentSerializer textSerializer;
private final File folder; private final File folder;
public YamlStorage(PacketFactory packetFactory, ConfigManager configManager, ActionRegistry actionRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer, File folder) { public YamlStorage(PacketFactory packetFactory, ConfigManager configManager, ActionRegistryImpl actionRegistry, NpcTypeRegistryImpl typeRegistry, EntityPropertyRegistryImpl propertyRegistry, LegacyComponentSerializer textSerializer, File folder) {
this.packetFactory = packetFactory; this.packetFactory = packetFactory;
this.configManager = configManager; this.configManager = configManager;
this.actionRegistry = actionRegistry; this.actionRegistry = actionRegistry;