update to 2.0.0

This commit is contained in:
Xanadu13
2023-02-09 23:56:17 +08:00
committed by GitHub
parent 3c0541f2e1
commit 25234f0b15
50 changed files with 3262 additions and 234 deletions
+138 -108
View File
@@ -1,32 +1,40 @@
package xanadu.enderdragon;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.*;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Entity;
import org.bukkit.inventory.ItemStack;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.inventory.Inventory;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import xanadu.enderdragon.commands.MainCommand;
import xanadu.enderdragon.commands.TabCompleter;
import xanadu.enderdragon.events.*;
import xanadu.enderdragon.lang.Message;
import xanadu.enderdragon.listeners.InventoryClick;
import xanadu.enderdragon.config.Config;
import xanadu.enderdragon.gui.GUIHolder;
import xanadu.enderdragon.config.Lang;
import xanadu.enderdragon.listeners.*;
import xanadu.enderdragon.listeners.mmoitems.MMOPlayerAttackListener;
import xanadu.enderdragon.listeners.mythiclib.PlayerAttackListener;
import xanadu.enderdragon.manager.DragonManager;
import xanadu.enderdragon.manager.GuiManager;
import xanadu.enderdragon.manager.TaskManager;
import xanadu.enderdragon.metrics.Metrics;
import xanadu.enderdragon.task.RespawnDragonRunnable;
import xanadu.enderdragon.utils.Version;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.Objects;
import static xanadu.enderdragon.config.Lang.*;
import static xanadu.enderdragon.manager.GuiManager.loadGui;
import static xanadu.enderdragon.utils.Updater.checkUpdate;
public final class EnderDragon extends JavaPlugin {
public static String prefix = "";
public static String language = "";
public static String langPath = "";
private static EnderDragon instance;
public static Plugin plugin;
public static Server server;
public static PluginManager pm;
@@ -36,127 +44,149 @@ public final class EnderDragon extends JavaPlugin {
public static FileConfiguration lang;
public static int mcMainVersion;
public static int mcPatchVersion;
private DragonManager dragonManager;
private static boolean finish;
@Override
public void onEnable() {
finish = false;
info("Enabling plugin...");
info("Author: Xanadu13");
plugin = this;
instance = this;
dragonManager = new DragonManager();
server = plugin.getServer();
pm = Bukkit.getPluginManager();
mcMainVersion = getMinecraftVersion();
boolean configNotFound = false;
boolean dataNotFound = false;
if (!new File(getDataFolder(), "config.yml").exists()) {
saveDefaultConfig();
configNotFound = true;
registerEvents();
registerCommands();
Metrics metrics = new Metrics(this,14850);
reloadAll();
Version.init();
checkUpdate();
if(!Lang.version.equals("2.0.0")){
warn(Lang.plugin_wrong_file_version.replace("{file_name}",Config.lang + ".yml"));
}
if(!Config.version.equals("2.0.0")){
warn(Lang.plugin_wrong_file_version.replace("{file_name}","config.yml"));
}
if(!"2.0.0".equals(data.getString("version"))){
warn(Lang.plugin_wrong_file_version.replace("{file_name}","data.yml"));
}
finish = true;
}
public static void reloadAll(){
EnderDragon.getInstance().loadFiles();
BukkitRunnable runnable = new BukkitRunnable() {
@Override
public void run() {
if(!TaskManager.getCurrentTimeWithSpecialFormat().endsWith("0")) return;
this.cancel();
RespawnDragonRunnable.reload();
}
};
new BukkitRunnable() {
@Override
public void run() {
if (!finish) return;
this.cancel();
DragonManager.reload();
loadGui();
if(Config.auto_respawn_enable){
TaskManager.reload();
runnable.runTaskTimer(plugin,0,1);
}
}
}.runTaskTimer(plugin, 1, 5);
}
public static void disableAll(){
closeAllInventory();
Bukkit.getScheduler().cancelTasks(plugin);
DragonManager.disable();
GuiManager.disable();
instance.unregisterCommands();
HandlerList.unregisterAll(plugin);
server.getScheduler().cancelTasks(plugin);
server.getServicesManager().unregisterAll(plugin);
warn(Lang.plugin_disable);
System.gc();
}
private void registerEvents(){
pm.registerEvents(new CreatureSpawnListener(),this);
pm.registerEvents(new DragonDamageByPlayerListener(),this);
pm.registerEvents(new DragonDeathListener(),this);
pm.registerEvents(new DragonHealListener(),this);
pm.registerEvents(new EntityDamageByEntityListener(),this);
pm.registerEvents(new InventoryListener(),this);
pm.registerEvents(new PluginDisableListener(),this);
if(pm.getPlugin("MythicLib") != null){
info("Hooking to MythicLib...");
pm.registerEvents(new PlayerAttackListener(),this);
}
else{
pm.registerEvents(new DragonBaseHurtListener(),this);
}
if(pm.getPlugin("MMOItems") != null){
info("Hooking to MMOItems...");
pm.registerEvents(new MMOPlayerAttackListener(),this);
}
}
private void registerCommands(){
Objects.requireNonNull(getCommand("enderdragon")).setExecutor(new MainCommand());
Objects.requireNonNull(getCommand("enderdragon")).setTabCompleter(new TabCompleter());
}
private void unregisterCommands(){
Objects.requireNonNull(getCommand("enderdragon")).setExecutor(null);
Objects.requireNonNull(getCommand("enderdragon")).setTabCompleter(null);
}
private void loadFiles(){
saveDefaultConfig();
reloadConfig();
Config.reload(getConfig());
if (!new File(getDataFolder(), "data.yml").exists()) {
this.saveResource("data.yml",false);
dataNotFound = true;
}
language = plugin.getConfig().getString("lang","English");
langPath = "lang/" + language + ".yml";
dataF = new File(getDataFolder(),"data.yml");
data = YamlConfiguration.loadConfiguration(dataF);
if(Config.lang.equals("")) {
error("Key \"lang\" in config is missing, please check your config.yml.");
Config.lang = "English";
}
String langPath = "lang/" + Config.lang + ".yml";
if (!new File(getDataFolder(), langPath).exists()) {
this.saveResource(langPath, false);
}
sendMessage("§a[EnderDragon] Language: §6" + language);
dataF = new File(plugin.getDataFolder(),"data.yml");
langF = new File(getDataFolder(), langPath);
lang = YamlConfiguration.loadConfiguration(langF);
data = YamlConfiguration.loadConfiguration(dataF);
Message.loadLanguage();
prefix = lang.getString("prefix","§7[§eEnderDragon§7]§r ");
if(configNotFound){sendMessage(Message.configNotFound);}
if(dataNotFound){sendMessage(Message.dataNotFound);}
if(!getConfig().getString("version").equals("1.8.3") ){
sendMessage(Message.configWrongVersion);
}
if(!data.getString("version").equals("1.8.4") ){
sendMessage(Message.dataWrongVersion);
}
if(!lang.getString("version").equals("1.8.3") ){
sendMessage(Message.langWrongVersion);
}
sendMessage(Message.loaded);
sendMessage("§a[EnderDragon] Author: Xanadu13");
pm.registerEvents(new CreatureHurt(),this);
pm.registerEvents(new DragonAttack(),this);
pm.registerEvents(new DragonDeath(),this);
pm.registerEvents(new DragonHeal(),this);
pm.registerEvents(new DragonSpawn(),this);
pm.registerEvents(new InventoryClick(),this);
getCommand("enderdragon").setExecutor(new MainCommand());
getCommand("enderdragon").setTabCompleter(new TabCompleter());
Metrics metrics = new Metrics(this,14850);
sendMessage(Message.checkingUpdate);
try {
URLConnection conn = new URL("https://api.github.com/repos/iXanadu13/EnderDragon/releases/latest").openConnection();
conn.setConnectTimeout(20000);
conn.setReadTimeout(60000);
InputStream is = conn.getInputStream();
String line = new BufferedReader(new InputStreamReader(is)).readLine();
is.close();
String newVer = line.substring(line.indexOf("\"tag_name\"") + 13, line.indexOf("\"target_commitish\"") - 2);
String localVer = plugin.getDescription().getVersion();
if (!localVer.equals(newVer)) {
sendMessage(Message.OutOfDate1.replace("{0}",localVer));
sendMessage(Message.OutOfDate2.replace("{1}",newVer));
sendMessage(Message.OutOfDate3);
}
else{
sendMessage(Message.UpToDate.replace("{1}",newVer));
}
} catch (Exception e) {
e.printStackTrace();
info("Language: §6" + Config.lang);
Lang.reload(lang);
if (!new File(plugin.getDataFolder(), "gui/view.yml").exists()) {
plugin.saveResource("gui/view.yml",false);
}
}
@Override
public void onDisable()
{
sendMessage(Message.onDisable);
}
public void sendMessage(String msg) {
Bukkit.getConsoleSender().sendMessage(msg);
}
public static String itemStackToString(ItemStack itemStack) {
YamlConfiguration yml = new YamlConfiguration();
yml.set("item", itemStack);
return yml.saveToString();
}
public static ItemStack StringToItemStack(String str) {
YamlConfiguration yml = new YamlConfiguration();
ItemStack item;
try {
yml.loadFromString(str);
item = yml.getItemStack("item");
} catch (InvalidConfigurationException ex) {
item = new ItemStack(Material.AIR, 1);
}
return item;
}
public static EnderDragon getInstance() {return instance;}
private int getMinecraftVersion() {
String[] version = getServer().getBukkitVersion().replace('-', '.').split("\\.");
try {
mcPatchVersion = Integer.parseInt(version[2]);
} catch (NumberFormatException ignored) {
}
} catch (NumberFormatException ignored) {}
return Integer.parseInt(version[1]);
}
public static boolean isSpecial(Entity e){
if(mcMainVersion >= 11){
return e.getScoreboardTags().contains("special");
}
else{
String uuid = e.getUniqueId().toString();
return data.getStringList("special").contains(uuid);
public static void closeAllInventory() {
for (Player player : Bukkit.getOnlinePlayers()) {
try {
Inventory inventory = player.getOpenInventory().getTopInventory();
if (!(inventory.getHolder() instanceof GUIHolder)) continue;
player.closeInventory();
}
catch (Exception ignored) {}
}
}
public DragonManager getDragonManager(){
return dragonManager;
}
}