2023-04-17 16:15:50 +00:00
|
|
|
package lol.pyr.znpcsplus;
|
|
|
|
|
2023-04-22 18:08:10 +00:00
|
|
|
import com.github.retrooper.packetevents.PacketEvents;
|
|
|
|
import com.github.retrooper.packetevents.event.PacketListenerPriority;
|
|
|
|
import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder;
|
2023-05-03 05:15:56 +00:00
|
|
|
import lol.pyr.director.adventure.command.CommandManager;
|
2023-05-04 04:07:07 +00:00
|
|
|
import lol.pyr.director.adventure.command.MultiCommand;
|
2023-05-11 04:41:15 +00:00
|
|
|
import lol.pyr.director.adventure.parse.primitive.BooleanParser;
|
2023-05-10 15:01:14 +00:00
|
|
|
import lol.pyr.director.adventure.parse.primitive.IntegerParser;
|
2023-04-26 23:58:09 +00:00
|
|
|
import lol.pyr.znpcsplus.api.ZApiProvider;
|
2023-05-09 10:47:43 +00:00
|
|
|
import lol.pyr.znpcsplus.commands.*;
|
2023-05-10 13:43:05 +00:00
|
|
|
import lol.pyr.znpcsplus.commands.hologram.*;
|
2023-05-11 04:41:15 +00:00
|
|
|
import lol.pyr.znpcsplus.commands.parsers.EntityPropertyParser;
|
2023-05-11 09:54:11 +00:00
|
|
|
import lol.pyr.znpcsplus.commands.parsers.NamedTextColorParser;
|
2023-05-10 15:01:14 +00:00
|
|
|
import lol.pyr.znpcsplus.commands.parsers.NpcEntryParser;
|
|
|
|
import lol.pyr.znpcsplus.commands.parsers.NpcTypeParser;
|
2023-05-12 07:28:10 +00:00
|
|
|
import lol.pyr.znpcsplus.commands.storage.LoadAllCommand;
|
|
|
|
import lol.pyr.znpcsplus.commands.storage.SaveAllCommand;
|
2023-04-26 16:08:14 +00:00
|
|
|
import lol.pyr.znpcsplus.config.Configs;
|
2023-05-10 13:43:05 +00:00
|
|
|
import lol.pyr.znpcsplus.entity.EntityPropertyImpl;
|
2023-04-25 16:57:18 +00:00
|
|
|
import lol.pyr.znpcsplus.interaction.InteractionPacketListener;
|
2023-05-04 07:25:05 +00:00
|
|
|
import lol.pyr.znpcsplus.npc.NpcEntryImpl;
|
|
|
|
import lol.pyr.znpcsplus.npc.NpcImpl;
|
|
|
|
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
2023-05-10 13:43:05 +00:00
|
|
|
import lol.pyr.znpcsplus.npc.NpcTypeImpl;
|
2023-04-29 18:42:04 +00:00
|
|
|
import lol.pyr.znpcsplus.scheduling.FoliaScheduler;
|
|
|
|
import lol.pyr.znpcsplus.scheduling.SpigotScheduler;
|
|
|
|
import lol.pyr.znpcsplus.scheduling.TaskScheduler;
|
2023-04-25 15:52:23 +00:00
|
|
|
import lol.pyr.znpcsplus.skin.cache.SkinCacheCleanTask;
|
2023-05-04 07:25:05 +00:00
|
|
|
import lol.pyr.znpcsplus.tasks.NpcVisibilityTask;
|
2023-04-21 16:34:18 +00:00
|
|
|
import lol.pyr.znpcsplus.updater.UpdateChecker;
|
|
|
|
import lol.pyr.znpcsplus.updater.UpdateNotificationListener;
|
2023-04-25 16:57:18 +00:00
|
|
|
import lol.pyr.znpcsplus.user.User;
|
|
|
|
import lol.pyr.znpcsplus.user.UserListener;
|
2023-05-04 04:07:07 +00:00
|
|
|
import lol.pyr.znpcsplus.util.BungeeUtil;
|
2023-04-29 18:42:04 +00:00
|
|
|
import lol.pyr.znpcsplus.util.FoliaUtil;
|
2023-04-26 23:58:09 +00:00
|
|
|
import lol.pyr.znpcsplus.util.ZLocation;
|
2023-04-21 17:15:28 +00:00
|
|
|
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
2023-04-26 17:50:40 +00:00
|
|
|
import net.kyori.adventure.text.Component;
|
2023-04-24 22:09:54 +00:00
|
|
|
import net.kyori.adventure.text.format.NamedTextColor;
|
2023-05-11 06:27:28 +00:00
|
|
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
2023-04-19 21:43:52 +00:00
|
|
|
import org.apache.commons.io.FileUtils;
|
2023-04-17 17:36:19 +00:00
|
|
|
import org.bstats.bukkit.Metrics;
|
2023-04-17 16:15:50 +00:00
|
|
|
import org.bukkit.Bukkit;
|
2023-04-20 22:41:58 +00:00
|
|
|
import org.bukkit.ChatColor;
|
2023-04-24 16:12:50 +00:00
|
|
|
import org.bukkit.World;
|
2023-04-17 16:15:50 +00:00
|
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
|
|
|
|
|
|
|
import java.io.File;
|
2023-04-19 21:43:52 +00:00
|
|
|
import java.io.IOException;
|
2023-04-19 18:44:55 +00:00
|
|
|
import java.util.logging.Logger;
|
2023-04-17 16:15:50 +00:00
|
|
|
|
2023-05-04 07:49:56 +00:00
|
|
|
public class ZNpcsPlus extends JavaPlugin {
|
2023-05-11 05:46:56 +00:00
|
|
|
private static final int PLUGIN_ID = 18244;
|
|
|
|
public static boolean PLACEHOLDERS_SUPPORTED;
|
|
|
|
|
2023-04-19 18:44:55 +00:00
|
|
|
public static Logger LOGGER;
|
|
|
|
public static File PLUGIN_FOLDER;
|
|
|
|
public static File PATH_FOLDER;
|
2023-05-11 05:46:56 +00:00
|
|
|
|
2023-04-29 18:42:04 +00:00
|
|
|
public static TaskScheduler SCHEDULER;
|
2023-05-11 05:46:56 +00:00
|
|
|
public static BungeeUtil BUNGEE_UTIL;
|
2023-04-21 17:15:28 +00:00
|
|
|
public static BukkitAudiences ADVENTURE;
|
2023-05-11 06:27:28 +00:00
|
|
|
public static LegacyComponentSerializer LEGACY_AMPERSAND_SERIALIZER = LegacyComponentSerializer.builder()
|
|
|
|
.character('&')
|
|
|
|
.hexCharacter('#')
|
|
|
|
.hexColors().build();
|
2023-04-17 16:15:50 +00:00
|
|
|
|
2023-04-19 21:43:52 +00:00
|
|
|
private boolean enabled = false;
|
2023-05-09 10:47:43 +00:00
|
|
|
public static final String DEBUG_NPC_PREFIX = "debug_npc";
|
2023-04-19 21:43:52 +00:00
|
|
|
|
2023-04-26 17:50:40 +00:00
|
|
|
public static void debug(String str) {
|
|
|
|
if (!Configs.config().debugEnabled()) return;
|
|
|
|
LOGGER.info("[DEBUG] " + str);
|
|
|
|
}
|
|
|
|
|
2023-04-19 18:44:55 +00:00
|
|
|
@Override
|
|
|
|
public void onLoad() {
|
2023-04-22 18:08:10 +00:00
|
|
|
PacketEvents.setAPI(SpigotPacketEventsBuilder.build(this));
|
|
|
|
PacketEvents.getAPI().getSettings().checkForUpdates(false);
|
2023-04-22 19:15:00 +00:00
|
|
|
PacketEvents.getAPI().load();
|
2023-04-19 18:44:55 +00:00
|
|
|
LOGGER = getLogger();
|
|
|
|
PLUGIN_FOLDER = getDataFolder();
|
|
|
|
PATH_FOLDER = new File(PLUGIN_FOLDER, "paths");
|
|
|
|
}
|
|
|
|
|
2023-04-22 15:45:31 +00:00
|
|
|
private void log(String str) {
|
|
|
|
Bukkit.getConsoleSender().sendMessage(str);
|
2023-04-21 17:15:28 +00:00
|
|
|
}
|
|
|
|
|
2023-04-19 18:44:55 +00:00
|
|
|
@Override
|
2023-04-17 16:15:50 +00:00
|
|
|
public void onEnable() {
|
2023-04-22 15:45:31 +00:00
|
|
|
log(ChatColor.YELLOW + " ___ __ __ __");
|
|
|
|
log(ChatColor.YELLOW + " _/ |\\ | |__) | (__` " + ChatColor.GOLD + "__|__ " + ChatColor.YELLOW + getDescription().getName() + " " + ChatColor.GOLD + "v" + getDescription().getVersion());
|
|
|
|
log(ChatColor.YELLOW + " /__ | \\| | |__ .__) " + ChatColor.GOLD + " | " + ChatColor.GRAY + "Maintained with " + ChatColor.RED + "\u2764 " + ChatColor.GRAY + " by Pyr#6969");
|
|
|
|
log("");
|
2023-04-20 22:41:58 +00:00
|
|
|
|
2023-04-19 21:43:52 +00:00
|
|
|
if (Bukkit.getPluginManager().isPluginEnabled("ServersNPC")) {
|
2023-04-22 15:45:31 +00:00
|
|
|
log(ChatColor.DARK_RED + " * Detected old version of ZNPCs! Disabling the plugin.");
|
|
|
|
log("");
|
2023-04-19 21:43:52 +00:00
|
|
|
Bukkit.getPluginManager().disablePlugin(this);
|
|
|
|
return;
|
|
|
|
}
|
2023-04-20 22:41:58 +00:00
|
|
|
long before = System.currentTimeMillis();
|
|
|
|
|
|
|
|
File oldFolder = new File(PLUGIN_FOLDER.getParent(), "ServersNPC");
|
|
|
|
if (!PLUGIN_FOLDER.exists() && oldFolder.exists()) {
|
2023-04-22 15:45:31 +00:00
|
|
|
log(ChatColor.WHITE + " * Converting old ZNPCs files...");
|
2023-04-20 22:41:58 +00:00
|
|
|
try {
|
|
|
|
FileUtils.moveDirectory(oldFolder, PLUGIN_FOLDER);
|
|
|
|
} catch (IOException e) {
|
2023-04-22 15:45:31 +00:00
|
|
|
log(ChatColor.RED + " * Failed to convert old ZNPCs files" + (e.getMessage() == null ? "" : " due to " + e.getMessage()));
|
2023-04-20 22:41:58 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-04-22 18:08:10 +00:00
|
|
|
log(ChatColor.WHITE + " * Initializing Adventure...");
|
2023-04-21 17:15:28 +00:00
|
|
|
ADVENTURE = BukkitAudiences.create(this);
|
|
|
|
|
2023-04-22 18:08:10 +00:00
|
|
|
log(ChatColor.WHITE + " * Initializing PacketEvents...");
|
|
|
|
PacketEvents.getAPI().getEventManager().registerListener(new InteractionPacketListener(), PacketListenerPriority.MONITOR);
|
|
|
|
PacketEvents.getAPI().init();
|
|
|
|
|
2023-04-25 15:52:23 +00:00
|
|
|
PLACEHOLDERS_SUPPORTED = Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI");
|
2023-05-11 09:54:11 +00:00
|
|
|
if (PLACEHOLDERS_SUPPORTED) log(ChatColor.WHITE + " * Enabling PlaceholderAPI support...");
|
2023-04-25 15:52:23 +00:00
|
|
|
|
2023-04-19 18:44:55 +00:00
|
|
|
PLUGIN_FOLDER.mkdirs();
|
|
|
|
PATH_FOLDER.mkdirs();
|
2023-04-17 16:15:50 +00:00
|
|
|
|
2023-04-26 16:08:14 +00:00
|
|
|
log(ChatColor.WHITE + " * Loading configurations...");
|
|
|
|
Configs.init(PLUGIN_FOLDER);
|
|
|
|
|
2023-05-11 09:54:11 +00:00
|
|
|
log(ChatColor.WHITE + " * Defining NPC types...");
|
|
|
|
NpcTypeImpl.defineTypes();
|
|
|
|
|
2023-04-22 15:45:31 +00:00
|
|
|
log(ChatColor.WHITE + " * Registering components...");
|
2023-04-17 16:15:50 +00:00
|
|
|
getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
|
2023-04-17 17:36:19 +00:00
|
|
|
new Metrics(this, PLUGIN_ID);
|
2023-04-29 18:42:04 +00:00
|
|
|
SCHEDULER = FoliaUtil.isFolia() ? new FoliaScheduler(this) : new SpigotScheduler(this);
|
2023-05-11 05:46:56 +00:00
|
|
|
BUNGEE_UTIL = new BungeeUtil(this);
|
2023-04-25 16:57:18 +00:00
|
|
|
Bukkit.getOnlinePlayers().forEach(User::get);
|
2023-05-04 04:07:07 +00:00
|
|
|
registerCommands();
|
2023-04-20 22:41:58 +00:00
|
|
|
|
2023-04-22 15:45:31 +00:00
|
|
|
log(ChatColor.WHITE + " * Starting tasks...");
|
2023-05-04 07:25:05 +00:00
|
|
|
new NpcVisibilityTask();
|
2023-04-30 13:22:48 +00:00
|
|
|
new SkinCacheCleanTask();
|
2023-04-25 16:57:18 +00:00
|
|
|
new UserListener(this);
|
2023-04-26 16:08:14 +00:00
|
|
|
if (Configs.config().checkForUpdates()) new UpdateNotificationListener(this, new UpdateChecker(this));
|
2023-04-20 22:41:58 +00:00
|
|
|
|
2023-05-11 05:46:56 +00:00
|
|
|
log(ChatColor.WHITE+ " * Loading NPCs...");
|
|
|
|
NpcRegistryImpl.get().reload();
|
|
|
|
|
2023-05-04 07:25:05 +00:00
|
|
|
ZApiProvider.register(new ZNpcsApi());
|
2023-04-19 21:43:52 +00:00
|
|
|
enabled = true;
|
2023-04-22 15:45:31 +00:00
|
|
|
log(ChatColor.WHITE + " * Loading complete! (" + (System.currentTimeMillis() - before) + "ms)");
|
|
|
|
log("");
|
2023-04-24 16:12:50 +00:00
|
|
|
|
2023-04-26 16:08:14 +00:00
|
|
|
if (Configs.config().debugEnabled()) {
|
2023-04-24 16:12:50 +00:00
|
|
|
World world = Bukkit.getWorld("world");
|
|
|
|
if (world == null) world = Bukkit.getWorlds().get(0);
|
2023-05-11 09:54:11 +00:00
|
|
|
int i = 0;
|
2023-05-08 11:17:25 +00:00
|
|
|
for (NpcTypeImpl type : NpcTypeImpl.values()) {
|
2023-05-11 09:54:11 +00:00
|
|
|
NpcEntryImpl entry = NpcRegistryImpl.get().create(ZNpcsPlus.DEBUG_NPC_PREFIX + i, world, type, new ZLocation(i * 3, 200, 0, 0, 0));
|
2023-05-04 04:07:07 +00:00
|
|
|
entry.setProcessed(true);
|
2023-05-04 07:25:05 +00:00
|
|
|
NpcImpl npc = entry.getNpc();
|
2023-04-26 17:50:40 +00:00
|
|
|
npc.getHologram().addLine(Component.text("Hello, World!"));
|
2023-05-11 09:54:11 +00:00
|
|
|
i++;
|
2023-04-24 16:12:50 +00:00
|
|
|
}
|
|
|
|
}
|
2023-04-17 16:15:50 +00:00
|
|
|
}
|
|
|
|
|
2023-04-19 18:44:55 +00:00
|
|
|
@Override
|
2023-04-17 16:15:50 +00:00
|
|
|
public void onDisable() {
|
2023-04-19 21:43:52 +00:00
|
|
|
if (!enabled) return;
|
2023-05-11 05:46:56 +00:00
|
|
|
NpcRegistryImpl.get().save();
|
2023-04-26 23:58:09 +00:00
|
|
|
ZApiProvider.unregister();
|
2023-04-25 16:57:18 +00:00
|
|
|
Bukkit.getOnlinePlayers().forEach(User::remove);
|
2023-04-21 17:15:28 +00:00
|
|
|
ADVENTURE.close();
|
|
|
|
ADVENTURE = null;
|
2023-04-17 16:15:50 +00:00
|
|
|
}
|
2023-05-03 05:15:56 +00:00
|
|
|
|
|
|
|
private void registerCommands() {
|
2023-05-10 15:01:14 +00:00
|
|
|
// TODO: Messages in here
|
2023-05-03 05:15:56 +00:00
|
|
|
CommandManager manager = new CommandManager(this, ADVENTURE, context -> {});
|
2023-05-11 09:54:11 +00:00
|
|
|
|
2023-05-10 15:01:14 +00:00
|
|
|
manager.registerParser(NpcTypeImpl.class, new NpcTypeParser(context -> {}));
|
|
|
|
manager.registerParser(NpcEntryImpl.class, new NpcEntryParser(context -> {}));
|
2023-05-11 04:41:15 +00:00
|
|
|
manager.registerParser(EntityPropertyImpl.class, new EntityPropertyParser(context -> {}));
|
2023-05-10 15:01:14 +00:00
|
|
|
manager.registerParser(Integer.class, new IntegerParser(context -> {}));
|
2023-05-11 04:41:15 +00:00
|
|
|
manager.registerParser(Boolean.class, new BooleanParser(context -> {}));
|
2023-05-11 09:54:11 +00:00
|
|
|
manager.registerParser(NamedTextColor.class, new NamedTextColorParser(context -> {}));
|
2023-05-10 15:01:14 +00:00
|
|
|
|
2023-05-09 10:47:43 +00:00
|
|
|
manager.registerCommand("npc", new MultiCommand()
|
|
|
|
.addSubcommand("action", new ActionCommand())
|
|
|
|
.addSubcommand("create", new CreateCommand())
|
2023-05-11 13:25:26 +00:00
|
|
|
.addSubcommand("skin", new SkinCommand())
|
2023-05-09 10:47:43 +00:00
|
|
|
.addSubcommand("delete", new DeleteCommand())
|
2023-05-10 15:44:12 +00:00
|
|
|
.addSubcommand("move", new MoveCommand())
|
|
|
|
.addSubcommand("properties", new PropertiesCommand())
|
|
|
|
.addSubcommand("teleport", new TeleportCommand())
|
|
|
|
.addSubcommand("list", new ListCommand())
|
2023-05-10 15:55:37 +00:00
|
|
|
.addSubcommand("near", new NearCommand())
|
2023-05-12 07:28:10 +00:00
|
|
|
.addSubcommand("storage", new MultiCommand()
|
|
|
|
.addSubcommand("save", new SaveAllCommand())
|
|
|
|
.addSubcommand("load", new LoadAllCommand()))
|
2023-05-09 10:47:43 +00:00
|
|
|
.addSubcommand("holo", new MultiCommand()
|
|
|
|
.addSubcommand("add", new HoloAddCommand())
|
|
|
|
.addSubcommand("delete", new HoloDeleteCommand())
|
|
|
|
.addSubcommand("info", new HoloInfoCommand())
|
|
|
|
.addSubcommand("insert", new HoloInsertCommand())
|
2023-05-10 15:55:37 +00:00
|
|
|
.addSubcommand("set", new HoloSetCommand())
|
|
|
|
)
|
2023-05-09 10:47:43 +00:00
|
|
|
);
|
2023-05-03 05:15:56 +00:00
|
|
|
}
|
2023-04-17 16:15:50 +00:00
|
|
|
}
|