mirror of
https://github.com/HibiscusMC/HMCCosmetics.git
synced 2025-12-19 15:09:19 +00:00
232 lines
10 KiB
Java
232 lines
10 KiB
Java
package com.hibiscusmc.hmccosmetics;
|
|
|
|
import com.hibiscusmc.hmccosmetics.api.events.HMCCosmeticSetupEvent;
|
|
import com.hibiscusmc.hmccosmetics.command.CosmeticCommand;
|
|
import com.hibiscusmc.hmccosmetics.command.CosmeticCommandTabComplete;
|
|
import com.hibiscusmc.hmccosmetics.config.DatabaseSettings;
|
|
import com.hibiscusmc.hmccosmetics.config.Settings;
|
|
import com.hibiscusmc.hmccosmetics.config.WardrobeSettings;
|
|
import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic;
|
|
import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetics;
|
|
import com.hibiscusmc.hmccosmetics.database.Database;
|
|
import com.hibiscusmc.hmccosmetics.gui.Menu;
|
|
import com.hibiscusmc.hmccosmetics.gui.Menus;
|
|
import com.hibiscusmc.hmccosmetics.hooks.items.HookHMCCosmetics;
|
|
import com.hibiscusmc.hmccosmetics.hooks.misc.HookBetterHud;
|
|
import com.hibiscusmc.hmccosmetics.hooks.placeholders.HMCPlaceholderExpansion;
|
|
import com.hibiscusmc.hmccosmetics.hooks.worldguard.WGHook;
|
|
import com.hibiscusmc.hmccosmetics.hooks.worldguard.WGListener;
|
|
import com.hibiscusmc.hmccosmetics.listener.PaperPlayerGameListener;
|
|
import com.hibiscusmc.hmccosmetics.listener.PlayerConnectionListener;
|
|
import com.hibiscusmc.hmccosmetics.listener.PlayerGameListener;
|
|
import com.hibiscusmc.hmccosmetics.listener.ServerListener;
|
|
import com.hibiscusmc.hmccosmetics.user.CosmeticUser;
|
|
import com.hibiscusmc.hmccosmetics.user.CosmeticUsers;
|
|
import com.hibiscusmc.hmccosmetics.util.MessagesUtil;
|
|
import com.hibiscusmc.hmccosmetics.util.TranslationUtil;
|
|
import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin;
|
|
import me.lojosho.hibiscuscommons.HibiscusPlugin;
|
|
import me.lojosho.hibiscuscommons.config.serializer.ItemSerializer;
|
|
import me.lojosho.hibiscuscommons.config.serializer.LocationSerializer;
|
|
import me.lojosho.shaded.configupdater.common.config.CommentedConfiguration;
|
|
import me.lojosho.shaded.configurate.ConfigurateException;
|
|
import me.lojosho.shaded.configurate.ConfigurationOptions;
|
|
import me.lojosho.shaded.configurate.yaml.NodeStyle;
|
|
import me.lojosho.shaded.configurate.yaml.YamlConfigurationLoader;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.permissions.Permission;
|
|
|
|
import java.io.File;
|
|
import java.nio.file.Path;
|
|
|
|
public final class HMCCosmeticsPlugin extends HibiscusPlugin {
|
|
|
|
private static HMCCosmeticsPlugin instance;
|
|
private static YamlConfigurationLoader configLoader;
|
|
|
|
public HMCCosmeticsPlugin() {
|
|
super(13873, 1879);
|
|
new HookHMCCosmetics();
|
|
new HookBetterHud();
|
|
}
|
|
|
|
@Override
|
|
public void onStart() {
|
|
// Plugin startup logic
|
|
instance = this;
|
|
|
|
// File setup
|
|
saveDefaultConfig();
|
|
if (!Path.of(getDataFolder().getPath(), "messages.yml").toFile().exists()) saveResource("messages.yml", false);
|
|
if (!Path.of(getDataFolder().getPath(), "translations.yml").toFile().exists()) saveResource("translations.yml", false);
|
|
if (!Path.of(getDataFolder().getPath() + "/cosmetics/").toFile().exists()) saveResource("cosmetics/defaultcosmetics.yml", false);
|
|
if (!Path.of(getDataFolder().getPath() + "/menus/").toFile().exists()) saveResource("menus/defaultmenu.yml", false);
|
|
|
|
// Configuration Sync
|
|
final File configFile = Path.of(getInstance().getDataFolder().getPath(), "config.yml").toFile();
|
|
final File messageFile = Path.of(getInstance().getDataFolder().getPath(), "messages.yml").toFile();
|
|
final File translationFile = Path.of(getInstance().getDataFolder().getPath(), "translations.yml").toFile();
|
|
try {
|
|
CommentedConfiguration.loadConfiguration(configFile).syncWithConfig(configFile, getInstance().getResource("config.yml"),
|
|
"database-settings", "wardrobe.wardrobes", "debug-mode", "wardrobe.viewer-location", "wardrobe.npc-location", "wardrobe.wardrobe-location", "wardrobe.leave-location");
|
|
CommentedConfiguration.loadConfiguration(messageFile).syncWithConfig(messageFile, getInstance().getResource("messages.yml"));
|
|
CommentedConfiguration.loadConfiguration(translationFile).syncWithConfig(translationFile, getInstance().getResource("translations.yml"));
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
// Move this over to Hibiscus Commons later
|
|
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) new HMCPlaceholderExpansion().register();
|
|
|
|
// Setup
|
|
setup();
|
|
|
|
// Commands
|
|
getServer().getPluginCommand("cosmetic").setExecutor(new CosmeticCommand());
|
|
getServer().getPluginCommand("cosmetic").setTabCompleter(new CosmeticCommandTabComplete());
|
|
|
|
// Listener
|
|
getServer().getPluginManager().registerEvents(new PlayerConnectionListener(), this);
|
|
getServer().getPluginManager().registerEvents(new PlayerGameListener(), this);
|
|
getServer().getPluginManager().registerEvents(new ServerListener(), this);
|
|
|
|
if (HibiscusCommonsPlugin.isOnPaper()) {
|
|
getServer().getPluginManager().registerEvents(new PaperPlayerGameListener(), this);
|
|
}
|
|
// Database
|
|
new Database();
|
|
|
|
// WorldGuard
|
|
if (Bukkit.getPluginManager().getPlugin("WorldGuard") != null && Settings.isWorldGuardMoveCheck()) {
|
|
getServer().getPluginManager().registerEvents(new WGListener(), this);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onLoad() {
|
|
// WorldGuard
|
|
if (Bukkit.getPluginManager().getPlugin("WorldGuard") != null) {
|
|
new WGHook();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onEnd() {
|
|
// Plugin shutdown logic
|
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
|
CosmeticUser user = CosmeticUsers.getUser(player);
|
|
if (user == null) continue;
|
|
if (user.isInWardrobe()) {
|
|
user.leaveWardrobe(true);
|
|
}
|
|
Database.save(user);
|
|
}
|
|
}
|
|
|
|
public static HMCCosmeticsPlugin getInstance() {
|
|
return instance;
|
|
}
|
|
|
|
public static void setup() {
|
|
getInstance().reloadConfig();
|
|
|
|
// Configuration setup
|
|
final File file = Path.of(getInstance().getDataFolder().getPath(), "config.yml").toFile();
|
|
final YamlConfigurationLoader loader = YamlConfigurationLoader.
|
|
builder().
|
|
path(file.toPath()).
|
|
defaultOptions(opts ->
|
|
opts.serializers(build -> {
|
|
build.register(Location.class, LocationSerializer.INSTANCE);
|
|
build.register(ItemStack.class, ItemSerializer.INSTANCE);
|
|
}))
|
|
.nodeStyle(NodeStyle.BLOCK)
|
|
.build();
|
|
try {
|
|
Settings.load(loader.load(ConfigurationOptions.defaults()));
|
|
WardrobeSettings.load(loader.load().node("wardrobe"));
|
|
DatabaseSettings.load(loader.load().node("database-settings"));
|
|
configLoader = loader;
|
|
} catch (Exception e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
|
|
// Messages setup
|
|
final File messagesFile = Path.of(getInstance().getDataFolder().getPath(), "messages.yml").toFile();
|
|
final YamlConfigurationLoader messagesLoader = YamlConfigurationLoader.
|
|
builder().
|
|
path(messagesFile.toPath()).
|
|
defaultOptions(opts ->
|
|
opts.serializers(build -> {
|
|
build.register(Location.class, LocationSerializer.INSTANCE);
|
|
build.register(ItemStack.class, ItemSerializer.INSTANCE);
|
|
}))
|
|
.nodeStyle(NodeStyle.BLOCK)
|
|
.build();
|
|
try {
|
|
MessagesUtil.setup(messagesLoader.load());
|
|
} catch (ConfigurateException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
|
|
// Translation setup
|
|
final File translationFile = Path.of(getInstance().getDataFolder().getPath(), "translations.yml").toFile();
|
|
final YamlConfigurationLoader translationLoader = YamlConfigurationLoader.
|
|
builder().
|
|
path(translationFile.toPath())
|
|
.nodeStyle(NodeStyle.BLOCK)
|
|
.build();
|
|
try {
|
|
TranslationUtil.setup(translationLoader.load());
|
|
} catch (ConfigurateException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
|
|
// Cosmetics setup
|
|
Cosmetics.setup();
|
|
|
|
// Menus setup
|
|
Menus.setup();
|
|
|
|
// For reloads
|
|
/*
|
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
|
CosmeticUser user = CosmeticUsers.getUser(player.getUniqueId());
|
|
if (user == null) continue;
|
|
for (Cosmetic cosmetic : user.getCosmetic()) {
|
|
Color color = user.getCosmeticColor(cosmetic.getSlot());
|
|
Cosmetic newCosmetic = Cosmetics.getCosmetic(cosmetic.getId());
|
|
user.removeCosmeticSlot(cosmetic);
|
|
|
|
if (newCosmetic == null) continue;
|
|
user.addPlayerCosmetic(newCosmetic, color);
|
|
}
|
|
user.updateCosmetic();
|
|
}
|
|
*/
|
|
for (Cosmetic cosmetic : Cosmetics.values()) {
|
|
if (cosmetic.getPermission() != null) {
|
|
if (getInstance().getServer().getPluginManager().getPermission(cosmetic.getPermission()) != null) continue;
|
|
getInstance().getServer().getPluginManager().addPermission(new Permission(cosmetic.getPermission()));
|
|
}
|
|
}
|
|
for (Menu menu : Menus.values()) {
|
|
if (menu.getPermissionNode() != null) {
|
|
if (getInstance().getServer().getPluginManager().getPermission(menu.getPermissionNode()) != null) continue;
|
|
getInstance().getServer().getPluginManager().addPermission(new Permission(menu.getPermissionNode()));
|
|
}
|
|
}
|
|
|
|
getInstance().getLogger().info("Successfully Enabled HMCCosmetics");
|
|
getInstance().getLogger().info(Cosmetics.values().size() + " Cosmetics Successfully Setup");
|
|
getInstance().getLogger().info(Menus.getMenuNames().size() + " Menus Successfully Setup");
|
|
getInstance().getLogger().info(WardrobeSettings.getWardrobes().size() + " Wardrobes Successfully Setup");
|
|
getInstance().getLogger().info("Data storage is set to " + DatabaseSettings.getDatabaseType());
|
|
|
|
Bukkit.getPluginManager().callEvent(new HMCCosmeticSetupEvent());
|
|
}
|
|
}
|