2019-03-26 03:40:37 +01:00
|
|
|
package me.ryandw11.ultrachat;
|
2020-06-25 11:47:08 +02:00
|
|
|
|
2019-07-29 01:34:38 +02:00
|
|
|
import me.ryandw11.ultrachat.api.ChatType;
|
2019-03-26 03:40:37 +01:00
|
|
|
import me.ryandw11.ultrachat.api.Lang;
|
2019-07-31 07:31:48 +02:00
|
|
|
import me.ryandw11.ultrachat.api.managers.AddonManager;
|
2020-06-25 11:47:08 +02:00
|
|
|
import me.ryandw11.ultrachat.chatcolor.ChatColorManager;
|
|
|
|
import me.ryandw11.ultrachat.chatcolor.ChatColorUtil_Latest;
|
|
|
|
import me.ryandw11.ultrachat.chatcolor.ChatColorUtil_Old;
|
|
|
|
import me.ryandw11.ultrachat.chatcolor.ChatColorUtils;
|
2020-06-26 12:20:54 +02:00
|
|
|
import me.ryandw11.ultrachat.commands.*;
|
2019-07-29 01:34:38 +02:00
|
|
|
import me.ryandw11.ultrachat.formatting.ChannelJSON;
|
|
|
|
import me.ryandw11.ultrachat.formatting.NormalJSON;
|
|
|
|
import me.ryandw11.ultrachat.formatting.RangeJSON;
|
2020-06-26 12:20:54 +02:00
|
|
|
import me.ryandw11.ultrachat.gui.ColorGUI;
|
|
|
|
import me.ryandw11.ultrachat.gui.ColorGUI_1_15_R1;
|
|
|
|
import me.ryandw11.ultrachat.gui.ColorGUI_Latest;
|
|
|
|
import me.ryandw11.ultrachat.listner.*;
|
2019-03-26 03:40:37 +01:00
|
|
|
import me.ryandw11.ultrachat.pluginhooks.AdvancedBanMute;
|
|
|
|
import me.ryandw11.ultrachat.pluginhooks.EssentialsMute;
|
|
|
|
import me.ryandw11.ultrachat.util.Metrics;
|
2019-07-28 04:38:09 +02:00
|
|
|
import me.ryandw11.ultrachat.util.papi.PAPIDisabled;
|
|
|
|
import me.ryandw11.ultrachat.util.papi.PAPIEnabled;
|
|
|
|
import me.ryandw11.ultrachat.util.papi.PlaceHolderAPIHook;
|
2019-03-26 03:40:37 +01:00
|
|
|
import net.milkbowl.vault.chat.Chat;
|
|
|
|
import net.milkbowl.vault.permission.Permission;
|
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
import org.bukkit.configuration.InvalidConfigurationException;
|
|
|
|
import org.bukkit.configuration.file.FileConfiguration;
|
|
|
|
import org.bukkit.configuration.file.YamlConfiguration;
|
|
|
|
import org.bukkit.plugin.RegisteredServiceProvider;
|
|
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
2020-06-25 11:47:08 +02:00
|
|
|
|
2020-06-26 12:20:54 +02:00
|
|
|
import java.io.File;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.InputStream;
|
|
|
|
import java.io.InputStreamReader;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Objects;
|
|
|
|
import java.util.UUID;
|
|
|
|
|
2019-03-26 03:40:37 +01:00
|
|
|
/**
|
|
|
|
* Main Class
|
2020-06-26 12:20:54 +02:00
|
|
|
* <p>Updated for 1.16.1.</p>
|
|
|
|
* <p>Note: You should access manager classes from the {@link me.ryandw11.ultrachat.api.UltraChatAPI} class.</p>
|
2019-03-26 03:40:37 +01:00
|
|
|
* @author Ryandw11
|
2020-06-26 12:20:54 +02:00
|
|
|
* @version 2.5
|
2019-03-26 03:40:37 +01:00
|
|
|
*/
|
2020-06-25 11:47:08 +02:00
|
|
|
public class UltraChat extends JavaPlugin {
|
|
|
|
|
|
|
|
public static UltraChat plugin;
|
2020-06-26 12:20:54 +02:00
|
|
|
public static YamlConfiguration LANG;
|
|
|
|
public static File LANG_FILE;
|
|
|
|
public Permission perms;
|
|
|
|
public Chat chat;
|
|
|
|
public Boolean isChatStopped = false;
|
|
|
|
public ChatType chatType;
|
|
|
|
public List<UUID> staffToggle = new ArrayList<>();
|
|
|
|
public List<UUID> spyToggle = new ArrayList<>();
|
2020-06-25 11:47:08 +02:00
|
|
|
public PlaceHolderAPIHook papi;
|
2020-06-26 12:20:54 +02:00
|
|
|
public File dataFile = new File(getDataFolder() + "/data/players.yml");
|
|
|
|
public FileConfiguration data = YamlConfiguration.loadConfiguration(dataFile);
|
|
|
|
public File channelFile;
|
2020-06-25 11:47:08 +02:00
|
|
|
public FileConfiguration channel;
|
|
|
|
public File chatColorFile = new File(getDataFolder() + "/chatcolor.yml");
|
|
|
|
public FileConfiguration chatColorFC = YamlConfiguration.loadConfiguration(chatColorFile);
|
|
|
|
public String prefix;
|
|
|
|
public ChatColorManager chatColorManager;
|
|
|
|
public AddonManager addonManager;
|
|
|
|
public ChatColorUtils chatColorUtil;
|
2020-06-26 12:20:54 +02:00
|
|
|
private ColorGUI colorGUI;
|
2020-06-25 11:47:08 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onEnable() {
|
|
|
|
|
|
|
|
plugin = this;
|
|
|
|
if (getServer().getPluginManager().getPlugin("Vault") == null && !setupChat()) {
|
|
|
|
getLogger().info(String.format("[%s] - Vault is not found!", getDescription().getName()));
|
|
|
|
getLogger().severe("§cWarning: You do not have Vault installed! This plugin is now disabled!");
|
|
|
|
Bukkit.getPluginManager().disablePlugin(this);
|
|
|
|
return;
|
|
|
|
}
|
2020-06-26 12:20:54 +02:00
|
|
|
|
2020-06-25 11:47:08 +02:00
|
|
|
if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) {
|
|
|
|
getLogger().info("Hooked into PlaceholderAPI! You can use the place holders!");
|
|
|
|
papi = new PAPIEnabled();
|
|
|
|
} else {
|
|
|
|
papi = new PAPIDisabled();
|
|
|
|
}
|
|
|
|
getLogger().info(String.format("UltraChat is enabled and running fine! V: %s", getDescription().getVersion()));
|
|
|
|
if (getServer().getPluginManager().getPlugin("AdvancedBan") != null && getConfig().getBoolean("pluginhooks.AdvancedBan")) {
|
|
|
|
getLogger().info("AdvancedBan detected! Activating hook!");
|
|
|
|
getLogger().info("Mutes will now work with the chat types.");
|
|
|
|
Bukkit.getServer().getPluginManager().registerEvents(new AdvancedBanMute(), this);
|
|
|
|
}
|
|
|
|
if (getServer().getPluginManager().getPlugin("Essentials") != null && getConfig().getBoolean("pluginhooks.Essentials")) {
|
|
|
|
getLogger().info("Essentials detected! Activating hook!");
|
|
|
|
getLogger().info("Mutes will now work with the chat types.");
|
|
|
|
Bukkit.getServer().getPluginManager().registerEvents(new EssentialsMute(), this);
|
|
|
|
}
|
|
|
|
loadFile();
|
|
|
|
loadMethod();
|
|
|
|
registerConfig();
|
|
|
|
loadChannel();
|
|
|
|
|
|
|
|
setupPermissions();
|
|
|
|
setupChat();
|
|
|
|
setupFormatting();
|
|
|
|
loadLang();
|
|
|
|
if (plugin.getConfig().getBoolean("bstats")) {
|
|
|
|
Metrics m = new Metrics(this);
|
|
|
|
}
|
|
|
|
addonManager = new AddonManager();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onDisable() {
|
2020-06-26 12:20:54 +02:00
|
|
|
getLogger().info("The plugin has been disabled correctly!");
|
2020-06-25 11:47:08 +02:00
|
|
|
saveFile();
|
|
|
|
saveChannel();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Setup the chat formatting.
|
|
|
|
*/
|
|
|
|
public void setupFormatting() {
|
|
|
|
String type = getConfig().getString("chat_format");
|
2020-06-26 12:20:54 +02:00
|
|
|
assert type != null;
|
2020-06-25 11:47:08 +02:00
|
|
|
if (type.equals("")) {
|
|
|
|
getLogger().info("UltraChat will not format the chat. To change this go into the config.");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (type.toLowerCase()) {
|
|
|
|
case "channel":
|
|
|
|
Bukkit.getServer().getPluginManager().registerEvents(new ChannelJSON(), this);
|
2020-06-26 12:20:54 +02:00
|
|
|
chatType = ChatType.CHANNEL;
|
2020-06-25 11:47:08 +02:00
|
|
|
getLogger().info("Channel chat mode enabled.");
|
|
|
|
break;
|
|
|
|
case "range":
|
|
|
|
Bukkit.getServer().getPluginManager().registerEvents(new RangeJSON(), this);
|
2020-06-26 12:20:54 +02:00
|
|
|
Objects.requireNonNull(getCommand("global")).setExecutor(new Global());
|
|
|
|
Objects.requireNonNull(getCommand("world")).setExecutor(new World());
|
2020-06-25 11:47:08 +02:00
|
|
|
getLogger().info("Range chat mode enabled. The commands /global and /world are now also active.");
|
2020-06-26 12:20:54 +02:00
|
|
|
chatType = ChatType.RANGE;
|
2020-06-25 11:47:08 +02:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
Bukkit.getServer().getPluginManager().registerEvents(new NormalJSON(), this);
|
2020-06-26 12:20:54 +02:00
|
|
|
chatType = ChatType.NORMAL;
|
2020-06-25 11:47:08 +02:00
|
|
|
getLogger().info("Normal chat mode activated!");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-06-26 12:20:54 +02:00
|
|
|
/**
|
|
|
|
* Loads all of the Events and Commands.
|
|
|
|
*/
|
|
|
|
public void loadMethod() {
|
|
|
|
Objects.requireNonNull(getCommand("chat")).setExecutor(new NewChatCommand(this));
|
|
|
|
Objects.requireNonNull(getCommand("chat")).setTabCompleter(new CommandTabCompleter());
|
|
|
|
Objects.requireNonNull(getCommand("sc")).setExecutor(new StaffChat());
|
|
|
|
Objects.requireNonNull(getCommand("sctoggle")).setExecutor(new StaffChatToggle());
|
|
|
|
Objects.requireNonNull(getCommand("spy")).setExecutor(new SpyCommand());
|
|
|
|
Objects.requireNonNull(getCommand("channel")).setExecutor(new ChannelCmd());
|
|
|
|
Bukkit.getServer().getPluginManager().registerEvents(new StopChat(), this);
|
|
|
|
Bukkit.getServer().getPluginManager().registerEvents(new NoSwear(), this);
|
|
|
|
Bukkit.getServer().getPluginManager().registerEvents(new Spy(), this);
|
|
|
|
Bukkit.getServer().getPluginManager().registerEvents(new JoinListner(), this);
|
|
|
|
loadVersions();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Loads classes based upon the server version.
|
|
|
|
*/
|
|
|
|
private void loadVersions() {
|
|
|
|
String version;
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
|
|
|
|
|
|
|
|
} catch (ArrayIndexOutOfBoundsException w0w) {
|
|
|
|
version = " ";
|
|
|
|
}
|
|
|
|
if (version.equals("v1_14_R1") || version.equals("v1_15_R1")) {
|
2020-06-27 04:54:01 +02:00
|
|
|
plugin.getLogger().info("Server version is 1.14 or 1.15, enabling comparability mode.");
|
2020-06-26 12:20:54 +02:00
|
|
|
Bukkit.getServer().getPluginManager().registerEvents(new Notify(), this);
|
|
|
|
colorGUI = new ColorGUI_1_15_R1();
|
2020-06-27 04:54:01 +02:00
|
|
|
Bukkit.getServer().getPluginManager().registerEvents(new ColorGUI_1_15_R1(), this);
|
2020-06-26 12:20:54 +02:00
|
|
|
if (!(plugin.getConfig().getBoolean("ChatColor_Command")))
|
|
|
|
Objects.requireNonNull(getCommand("color")).setExecutor(new ColorGUI_1_15_R1());
|
|
|
|
|
|
|
|
this.chatColorUtil = new ChatColorUtil_Old();
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
Bukkit.getServer().getPluginManager().registerEvents(new Notify(), this);
|
|
|
|
colorGUI = new ColorGUI_Latest();
|
|
|
|
Bukkit.getServer().getPluginManager().registerEvents(new ColorGUI_Latest(), this);
|
|
|
|
|
|
|
|
chatColorManager = new ChatColorManager(this, Objects.requireNonNull(chatColorFC.getConfigurationSection("chat_colors")));
|
|
|
|
|
|
|
|
if (!(plugin.getConfig().getBoolean("ChatColor_Command")))
|
|
|
|
Objects.requireNonNull(getCommand("color")).setExecutor(new ColorGUI_Latest());
|
|
|
|
|
|
|
|
this.chatColorUtil = new ChatColorUtil_Latest(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the ColorGUI class for the right version.
|
|
|
|
*
|
|
|
|
* @return A class that implements ColorGUI
|
|
|
|
*/
|
|
|
|
public ColorGUI getColorGUI() {
|
|
|
|
return colorGUI;
|
|
|
|
}
|
2020-06-25 11:47:08 +02:00
|
|
|
|
|
|
|
private boolean setupChat() {
|
|
|
|
RegisteredServiceProvider<Chat> rsp = getServer().getServicesManager().getRegistration(Chat.class);
|
|
|
|
chat = rsp.getProvider();
|
|
|
|
return chat != null;
|
|
|
|
}
|
2019-03-26 03:40:37 +01:00
|
|
|
|
|
|
|
private boolean setupPermissions() {
|
|
|
|
RegisteredServiceProvider<Permission> rsp = getServer().getServicesManager().getRegistration(Permission.class);
|
|
|
|
perms = rsp.getProvider();
|
|
|
|
return perms != null;
|
|
|
|
}
|
2020-06-25 11:47:08 +02:00
|
|
|
|
2019-03-26 03:40:37 +01:00
|
|
|
/**
|
|
|
|
* Save the data file.
|
|
|
|
*/
|
2020-06-25 11:47:08 +02:00
|
|
|
public void saveFile() {
|
|
|
|
try {
|
2020-06-26 12:20:54 +02:00
|
|
|
data.save(dataFile);
|
2020-06-25 11:47:08 +02:00
|
|
|
} catch (IOException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* load the data file
|
|
|
|
*/
|
|
|
|
public void loadFile() {
|
2020-06-26 12:20:54 +02:00
|
|
|
if (dataFile.exists()) {
|
2020-06-25 11:47:08 +02:00
|
|
|
try {
|
2020-06-26 12:20:54 +02:00
|
|
|
data.load(dataFile);
|
2020-06-25 11:47:08 +02:00
|
|
|
|
|
|
|
} catch (IOException | InvalidConfigurationException e) {
|
|
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
try {
|
2020-06-26 12:20:54 +02:00
|
|
|
data.save(dataFile);
|
2020-06-25 11:47:08 +02:00
|
|
|
} catch (IOException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (chatColorFile.exists()) {
|
|
|
|
try {
|
|
|
|
chatColorFC.load(chatColorFile);
|
|
|
|
|
|
|
|
} catch (IOException | InvalidConfigurationException e) {
|
|
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
saveResource("chatcolor.yml", false);
|
|
|
|
chatColorFC = YamlConfiguration.loadConfiguration(chatColorFile);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Save the channel file.
|
|
|
|
*/
|
|
|
|
public void saveChannel() {
|
|
|
|
|
|
|
|
try {
|
2020-06-26 12:20:54 +02:00
|
|
|
channel.save(channelFile);
|
2020-06-25 11:47:08 +02:00
|
|
|
} catch (IOException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Load the cannel file.
|
|
|
|
*/
|
|
|
|
public void loadChannel() {
|
2020-06-26 12:20:54 +02:00
|
|
|
channelFile = new File(getDataFolder(), "channel.yml");
|
|
|
|
if (!channelFile.exists()) {
|
|
|
|
channelFile.getParentFile().mkdirs();
|
2020-06-25 11:47:08 +02:00
|
|
|
saveResource("channel.yml", false);
|
|
|
|
}
|
|
|
|
channel = new YamlConfiguration();
|
|
|
|
try {
|
2020-06-26 12:20:54 +02:00
|
|
|
channel.load(channelFile);
|
2020-06-25 11:47:08 +02:00
|
|
|
|
|
|
|
} catch (IOException | InvalidConfigurationException e) {
|
|
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the language file.
|
|
|
|
*
|
|
|
|
* @return The language file.
|
|
|
|
*/
|
|
|
|
public File getLangFile() {
|
|
|
|
return LANG_FILE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public YamlConfiguration getLang() {
|
|
|
|
return LANG;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-06-26 12:20:54 +02:00
|
|
|
* Load the language file.
|
2020-06-25 11:47:08 +02:00
|
|
|
*/
|
|
|
|
public void loadLang() {
|
|
|
|
File lang = new File(getDataFolder(), "lang.yml");
|
|
|
|
if (!lang.exists()) {
|
|
|
|
try {
|
|
|
|
getDataFolder().mkdir();
|
|
|
|
lang.createNewFile();
|
|
|
|
InputStream defConfigStream = this.getResource("lang.yml");
|
|
|
|
if (defConfigStream != null) {
|
|
|
|
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(new InputStreamReader(defConfigStream));
|
|
|
|
|
|
|
|
defConfig.save(lang);
|
|
|
|
Lang.setFile(defConfig);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
} catch (IOException e) {
|
|
|
|
e.printStackTrace(); // So they notice
|
|
|
|
getLogger().severe("The language file could not be created. Disabling plugin.");
|
|
|
|
this.setEnabled(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
YamlConfiguration conf = YamlConfiguration.loadConfiguration(lang);
|
|
|
|
for (Lang item : Lang.values()) {
|
|
|
|
if (conf.getString(item.getPath()) == null) {
|
|
|
|
conf.set(item.getPath(), item.getDefault());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Lang.setFile(conf);
|
2020-06-26 12:20:54 +02:00
|
|
|
LANG = conf;
|
|
|
|
LANG_FILE = lang;
|
2020-06-25 11:47:08 +02:00
|
|
|
try {
|
|
|
|
conf.save(getLangFile());
|
|
|
|
} catch (IOException e) {
|
|
|
|
getLogger().warning("Failed to save lang.yml.");
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void registerConfig() {
|
|
|
|
saveDefaultConfig();
|
|
|
|
}
|
|
|
|
|
2019-03-26 03:40:37 +01:00
|
|
|
|
2020-06-26 12:20:54 +02:00
|
|
|
}
|