@@ -21,11 +21,12 @@ import pers.xanadu.enderdragon.listener.*;
|
|||||||
import pers.xanadu.enderdragon.listener.mythiclib.PlayerAttackListener;
|
import pers.xanadu.enderdragon.listener.mythiclib.PlayerAttackListener;
|
||||||
import pers.xanadu.enderdragon.manager.*;
|
import pers.xanadu.enderdragon.manager.*;
|
||||||
import pers.xanadu.enderdragon.maven.DependencyManager;
|
import pers.xanadu.enderdragon.maven.DependencyManager;
|
||||||
|
import pers.xanadu.enderdragon.metadata.DragonInfo;
|
||||||
import pers.xanadu.enderdragon.metrics.Metrics;
|
import pers.xanadu.enderdragon.metrics.Metrics;
|
||||||
import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager;
|
import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager;
|
||||||
import pers.xanadu.enderdragon.nms.NMSItem.I_NMSItemManager;
|
import pers.xanadu.enderdragon.nms.NMSItem.INMSItemManager;
|
||||||
import pers.xanadu.enderdragon.nms.RespawnAnchor.I_RespawnAnchorManager;
|
import pers.xanadu.enderdragon.nms.RespawnAnchor.IRespawnAnchorManager;
|
||||||
import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager;
|
import pers.xanadu.enderdragon.nms.WorldData.IWorldDataManager;
|
||||||
import pers.xanadu.enderdragon.util.NMSUtil;
|
import pers.xanadu.enderdragon.util.NMSUtil;
|
||||||
import pers.xanadu.enderdragon.util.Version;
|
import pers.xanadu.enderdragon.util.Version;
|
||||||
|
|
||||||
@@ -46,10 +47,10 @@ public final class EnderDragon extends JavaPlugin {
|
|||||||
public static FileConfiguration lang;
|
public static FileConfiguration lang;
|
||||||
private WorldManager worldManager;
|
private WorldManager worldManager;
|
||||||
private NMSUtil nmsManager;
|
private NMSUtil nmsManager;
|
||||||
private I_BossBarManager i_bossBarManager;
|
private IBossBarManager iBossBarManager;
|
||||||
private I_NMSItemManager i_nmsItemManager;
|
private INMSItemManager iNmsItemManager;
|
||||||
private I_WorldDataManager i_worldDataManager;
|
private IWorldDataManager iWorldDataManager;
|
||||||
private I_RespawnAnchorManager i_respawnAnchorManager;
|
private IRespawnAnchorManager iRespawnAnchorManager;
|
||||||
private static boolean finish = false;
|
private static boolean finish = false;
|
||||||
@Override
|
@Override
|
||||||
public void onLoad(){
|
public void onLoad(){
|
||||||
@@ -67,23 +68,24 @@ public final class EnderDragon extends JavaPlugin {
|
|||||||
worldManager = new WorldManager();
|
worldManager = new WorldManager();
|
||||||
nmsManager = new NMSUtil();
|
nmsManager = new NMSUtil();
|
||||||
nmsManager.init();
|
nmsManager.init();
|
||||||
i_bossBarManager = Version.getBossBarManager();
|
iBossBarManager = Version.getBossBarManager();
|
||||||
i_nmsItemManager = Version.getNMSItemManager();
|
iNmsItemManager = Version.getNMSItemManager();
|
||||||
i_worldDataManager = Version.getWorldDataManager();
|
iWorldDataManager = Version.getWorldDataManager();
|
||||||
i_respawnAnchorManager = Version.getRespawnAnchorManager();
|
iRespawnAnchorManager = Version.getRespawnAnchorManager();
|
||||||
if(Config.advanced_setting_world_env_fix) {
|
if(Config.advanced_setting_world_env_fix) {
|
||||||
getInstance().getWorldManager().fixWorldEnvironment();
|
getInstance().getWorldManager().fixWorldEnvironment();
|
||||||
Lang.info(Lang.world_env_fix_enable);
|
Lang.info(Lang.world_env_fix_enable);
|
||||||
}
|
}
|
||||||
if(Config.advanced_setting_save_bossbar){
|
|
||||||
fixWorldBossBar();
|
|
||||||
}
|
|
||||||
TimerManager.enable();
|
TimerManager.enable();
|
||||||
registerEvents();
|
registerEvents();
|
||||||
registerCommands();
|
registerCommands();
|
||||||
HookManager.init();
|
HookManager.init();
|
||||||
reloadAll();
|
reloadAll();
|
||||||
|
if(Config.advanced_setting_save_bossbar){
|
||||||
|
fixWorldBossBar();
|
||||||
|
}
|
||||||
if(Config.advanced_setting_save_respawn_status) setRespawnStatus();
|
if(Config.advanced_setting_save_respawn_status) setRespawnStatus();
|
||||||
|
scanExistingDragons();
|
||||||
// if(Config.advanced_setting_glowing_fix) fixGlowing();
|
// if(Config.advanced_setting_glowing_fix) fixGlowing();
|
||||||
checkUpdate();
|
checkUpdate();
|
||||||
new Metrics(this,14850);
|
new Metrics(this,14850);
|
||||||
@@ -135,7 +137,7 @@ public final class EnderDragon extends JavaPlugin {
|
|||||||
TimerManager.save();
|
TimerManager.save();
|
||||||
if(Config.advanced_setting_save_respawn_status){
|
if(Config.advanced_setting_save_respawn_status){
|
||||||
Bukkit.getWorlds().forEach(world -> {
|
Bukkit.getWorlds().forEach(world -> {
|
||||||
if(!Config.blacklist_worlds.contains(world.getName())){
|
if(WorldManager.enable_worlds.contains(world.getName())){
|
||||||
char split = data.options().pathSeparator();
|
char split = data.options().pathSeparator();
|
||||||
if(DragonManager.isRespawnRunning(world)){
|
if(DragonManager.isRespawnRunning(world)){
|
||||||
data.set("respawn_fix"+split+world.getName(),true);
|
data.set("respawn_fix"+split+world.getName(),true);
|
||||||
@@ -154,7 +156,7 @@ public final class EnderDragon extends JavaPlugin {
|
|||||||
if(Config.advanced_setting_save_bossbar){
|
if(Config.advanced_setting_save_bossbar){
|
||||||
List<World> worlds = new ArrayList<>();
|
List<World> worlds = new ArrayList<>();
|
||||||
Bukkit.getWorlds().forEach(world -> {
|
Bukkit.getWorlds().forEach(world -> {
|
||||||
if(world.getEnvironment()==World.Environment.THE_END&&!Config.blacklist_worlds.contains(world.getName())){
|
if(world.getEnvironment()==World.Environment.THE_END&&WorldManager.enable_worlds.contains(world.getName())){
|
||||||
worlds.add(world);
|
worlds.add(world);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -253,7 +255,7 @@ public final class EnderDragon extends JavaPlugin {
|
|||||||
public void run(){
|
public void run(){
|
||||||
List<World> worlds = new ArrayList<>();
|
List<World> worlds = new ArrayList<>();
|
||||||
Bukkit.getWorlds().forEach(world -> {
|
Bukkit.getWorlds().forEach(world -> {
|
||||||
if(world.getEnvironment()==World.Environment.THE_END&&!Config.blacklist_worlds.contains(world.getName())){
|
if(world.getEnvironment()==World.Environment.THE_END&&WorldManager.enable_worlds.contains(world.getName())){
|
||||||
worlds.add(world);
|
worlds.add(world);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -297,6 +299,23 @@ public final class EnderDragon extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
}.runTaskLater(plugin,100L);
|
}.runTaskLater(plugin,100L);
|
||||||
}
|
}
|
||||||
|
private void scanExistingDragons(){
|
||||||
|
new BukkitRunnable(){
|
||||||
|
@Override
|
||||||
|
public void run(){
|
||||||
|
Bukkit.getWorlds().forEach(world -> {
|
||||||
|
if(WorldManager.enable_worlds.contains(world.getName())){
|
||||||
|
org.bukkit.entity.EnderDragon dragon = DragonManager.getEnderDragon(world);
|
||||||
|
if(dragon != null){
|
||||||
|
String unique_name = DragonManager.getSpecialKey(dragon);
|
||||||
|
DragonManager.existing_dragon.put(dragon.getUniqueId(),new DragonInfo(dragon,unique_name));
|
||||||
|
DragonManager.main_dragon.put(world.getName(),new DragonInfo(dragon,unique_name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}.runTaskLater(plugin,80L);
|
||||||
|
}
|
||||||
|
|
||||||
public WorldManager getWorldManager(){
|
public WorldManager getWorldManager(){
|
||||||
return worldManager;
|
return worldManager;
|
||||||
@@ -304,17 +323,17 @@ public final class EnderDragon extends JavaPlugin {
|
|||||||
public NMSUtil getNMSManager(){
|
public NMSUtil getNMSManager(){
|
||||||
return nmsManager;
|
return nmsManager;
|
||||||
}
|
}
|
||||||
public I_BossBarManager getBossBarManager(){
|
public IBossBarManager getBossBarManager(){
|
||||||
return i_bossBarManager;
|
return iBossBarManager;
|
||||||
}
|
}
|
||||||
public I_NMSItemManager getNMSItemManager(){
|
public INMSItemManager getNMSItemManager(){
|
||||||
return i_nmsItemManager;
|
return iNmsItemManager;
|
||||||
}
|
}
|
||||||
public I_WorldDataManager getWorldDataManager(){
|
public IWorldDataManager getWorldDataManager(){
|
||||||
return i_worldDataManager;
|
return iWorldDataManager;
|
||||||
}
|
}
|
||||||
public I_RespawnAnchorManager getRespawnAnchorManager(){
|
public IRespawnAnchorManager getRespawnAnchorManager(){
|
||||||
return i_respawnAnchorManager;
|
return iRespawnAnchorManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,32 +30,29 @@ public class MainCommand implements CommandExecutor {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
switch(args[0].toLowerCase()){
|
switch(args[0].toLowerCase()){
|
||||||
// case "parse" : {
|
case "parse" : {
|
||||||
// if(!sender.isOp()) return false;
|
if(!sender.isOp()) return false;
|
||||||
// if(args.length == 2) GroovyManager.invoke("test.groovy", args[1]);
|
if(args.length == 2) GroovyManager.invoke("test.groovy", args[1]);
|
||||||
// else if(args.length == 3) GroovyManager.invoke("test.groovy",args[1],Bukkit.getPlayer(args[2]));
|
else if(args.length == 3) GroovyManager.invoke("test.groovy",args[1],args[2]);
|
||||||
//// List<Entity> entities = p.getNearbyEntities(50,50,50);
|
return true;
|
||||||
//// entities.forEach(entity -> {
|
}
|
||||||
//// if(entity instanceof org.bukkit.entity.EnderDragon){
|
case "migrate" : {
|
||||||
//// org.bukkit.entity.EnderDragon dragon = (org.bukkit.entity.EnderDragon) entity;
|
if (!sender.isOp()) return false;
|
||||||
//// //dragon.setPhase(CHARGE_PLAYER);
|
FileUpdater.migrate();
|
||||||
//// //SkillManager.launchDragonFireball(dragon,p.getLocation());
|
return true;
|
||||||
//// SkillManager.callEnderManReinforce(p,3);
|
}
|
||||||
//// }
|
// case "worlds" : {
|
||||||
////
|
// if(!sender.isOp()){
|
||||||
////
|
// Lang.sendFeedback(sender,Lang.command_no_permission);
|
||||||
//// if(entity instanceof org.bukkit.entity.EnderDragon){
|
// return false;
|
||||||
//// Bukkit.broadcastMessage(entity.getName());//1 Special Ender Dragon
|
// }
|
||||||
//// }
|
// if(args.length < 2) break;
|
||||||
//// if(entity instanceof ComplexEntityPart){
|
// switch (args[1].toLowerCase()){
|
||||||
//// Bukkit.broadcastMessage(entity.getName());//1 Special Ender Dragon
|
// case "list" : {
|
||||||
//// }
|
|
||||||
//// if(entity instanceof ComplexLivingEntity){
|
|
||||||
//// Bukkit.broadcastMessage(entity.getName());//8 EnderDragon
|
|
||||||
//// }
|
|
||||||
//// });
|
|
||||||
//
|
//
|
||||||
// return true;
|
// }
|
||||||
|
// }
|
||||||
|
// break;
|
||||||
// }
|
// }
|
||||||
case "action" : {
|
case "action" : {
|
||||||
if(!sender.isOp()){
|
if(!sender.isOp()){
|
||||||
@@ -133,6 +130,8 @@ public class MainCommand implements CommandExecutor {
|
|||||||
DragonManager.initiateRespawn(sender,builder.toString(),args[1]);
|
DragonManager.initiateRespawn(sender,builder.toString(),args[1]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
//unreachable
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
case "respawn" : {//ed respawn (world_name)
|
case "respawn" : {//ed respawn (world_name)
|
||||||
if(!sender.hasPermission("ed.respawn")){
|
if(!sender.hasPermission("ed.respawn")){
|
||||||
@@ -160,6 +159,7 @@ public class MainCommand implements CommandExecutor {
|
|||||||
DragonManager.initiateRespawn(sender,builder.toString());
|
DragonManager.initiateRespawn(sender,builder.toString());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
//unreachable
|
||||||
}
|
}
|
||||||
case "respawn_cd" : {
|
case "respawn_cd" : {
|
||||||
if(!sender.hasPermission("ed.respawn")){
|
if(!sender.hasPermission("ed.respawn")){
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import java.util.stream.Stream;
|
|||||||
|
|
||||||
public class TabCompleter implements org.bukkit.command.TabCompleter {
|
public class TabCompleter implements org.bukkit.command.TabCompleter {
|
||||||
|
|
||||||
private static final List<String> arguments_ed = Arrays.asList("action", "drop", "reload", "respawn", "respawn_cd", "spawn", "update");
|
private static final List<String> arguments_ed = Arrays.asList("action", "drop", "migrate", "reload", "respawn", "respawn_cd", "spawn", "update");
|
||||||
private static final List<String> arguments_drop = Arrays.asList("add", "clear", "edit", "remove", "gui");
|
private static final List<String> arguments_drop = Arrays.asList("add", "clear", "edit", "remove", "gui");
|
||||||
private static final List<String> arguments_action = Arrays.asList("tell:","tell-colorless:","tell-raw:","groovy:");
|
private static final List<String> arguments_action = Arrays.asList("tell:","tell-colorless:","tell-raw:","groovy:");
|
||||||
private static final List<String> arguments_respawn_cd = Arrays.asList("get","remove","removeAll","set","start");
|
private static final List<String> arguments_respawn_cd = Arrays.asList("get","remove","removeAll","set","start");
|
||||||
@@ -34,7 +34,7 @@ public class TabCompleter implements org.bukkit.command.TabCompleter {
|
|||||||
result.addAll(arguments_drop);
|
result.addAll(arguments_drop);
|
||||||
}
|
}
|
||||||
else if(args[0].equalsIgnoreCase("respawn")){
|
else if(args[0].equalsIgnoreCase("respawn")){
|
||||||
result.addAll(WorldManager.worlds);
|
result.addAll(WorldManager.all_worlds);
|
||||||
}
|
}
|
||||||
else if(args[0].equalsIgnoreCase("respawn_cd")){
|
else if(args[0].equalsIgnoreCase("respawn_cd")){
|
||||||
result.addAll(arguments_respawn_cd);
|
result.addAll(arguments_respawn_cd);
|
||||||
@@ -60,11 +60,11 @@ public class TabCompleter implements org.bukkit.command.TabCompleter {
|
|||||||
else if("respawn_cd".equals(args[0])){
|
else if("respawn_cd".equals(args[0])){
|
||||||
String str = args[1].toLowerCase();
|
String str = args[1].toLowerCase();
|
||||||
if("get".equals(str) || "remove".equals(str) || "removeAll".equals(str) || "set".equals(str) || "start".equals(str)){
|
if("get".equals(str) || "remove".equals(str) || "removeAll".equals(str) || "set".equals(str) || "start".equals(str)){
|
||||||
result.addAll(WorldManager.worlds);
|
result.addAll(WorldManager.all_worlds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if("spawn".equals(args[0])){
|
else if("spawn".equals(args[0])){
|
||||||
result.addAll(WorldManager.worlds);
|
result.addAll(WorldManager.all_worlds);
|
||||||
}
|
}
|
||||||
else if("action".equals(args[0])){
|
else if("action".equals(args[0])){
|
||||||
result.addAll(arguments_action);
|
result.addAll(arguments_action);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import java.io.*;
|
|||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.nio.file.Files;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.jar.JarEntry;
|
import java.util.jar.JarEntry;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
@@ -21,6 +22,7 @@ public class Config {
|
|||||||
public static boolean advanced_setting_save_respawn_status;
|
public static boolean advanced_setting_save_respawn_status;
|
||||||
public static boolean advanced_setting_save_bossbar;
|
public static boolean advanced_setting_save_bossbar;
|
||||||
public static boolean advanced_setting_glowing_fix;
|
public static boolean advanced_setting_glowing_fix;
|
||||||
|
//public static boolean advanced_setting_can_spawn_not_the_end;
|
||||||
public static boolean advanced_setting_backslash_split_reward;
|
public static boolean advanced_setting_backslash_split_reward;
|
||||||
public static String damage_visible_mode;
|
public static String damage_visible_mode;
|
||||||
public static int damage_statistics_limit;
|
public static int damage_statistics_limit;
|
||||||
@@ -98,10 +100,7 @@ public class Config {
|
|||||||
}
|
}
|
||||||
} catch (IOException ignored) {}
|
} catch (IOException ignored) {}
|
||||||
}
|
}
|
||||||
public static void copyFile(String source, String dest,boolean replace) {
|
public static void copyFile(File source, String dest, boolean replace) {
|
||||||
if (source == null || source.equals("")) return;
|
|
||||||
source = source.replace('\\', '/');
|
|
||||||
File inFile = new File("plugins/EnderDragon", source);
|
|
||||||
File outFile = new File("plugins/EnderDragon", dest);
|
File outFile = new File("plugins/EnderDragon", dest);
|
||||||
int lastIndex = dest.lastIndexOf('/');
|
int lastIndex = dest.lastIndexOf('/');
|
||||||
File outDir = new File("plugins/EnderDragon", dest.substring(0, Math.max(lastIndex, 0)));
|
File outDir = new File("plugins/EnderDragon", dest.substring(0, Math.max(lastIndex, 0)));
|
||||||
@@ -110,8 +109,8 @@ public class Config {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
if (!outFile.exists() || replace) {
|
if (!outFile.exists() || replace) {
|
||||||
InputStream in = new FileInputStream(inFile);
|
InputStream in = Files.newInputStream(source.toPath());
|
||||||
OutputStream out = new FileOutputStream(outFile);
|
OutputStream out = Files.newOutputStream(outFile.toPath());
|
||||||
byte[] buf = new byte[1024];
|
byte[] buf = new byte[1024];
|
||||||
int len;
|
int len;
|
||||||
while ((len = in.read(buf)) > 0) {
|
while ((len = in.read(buf)) > 0) {
|
||||||
@@ -121,9 +120,15 @@ public class Config {
|
|||||||
in.close();
|
in.close();
|
||||||
}
|
}
|
||||||
} catch (IOException ignored) {
|
} catch (IOException ignored) {
|
||||||
Lang.error("Failed to copy file: "+inFile.getPath()+" -> "+outFile.getPath());
|
Lang.error("Failed to copy file: "+source.getPath()+" -> "+outFile.getPath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public static void copyFile(String source, String dest,boolean replace) {
|
||||||
|
if (source == null || source.equals("")) return;
|
||||||
|
source = source.replace('\\', '/');
|
||||||
|
File inFile = new File("plugins/EnderDragon", source);
|
||||||
|
copyFile(inFile, dest, replace);
|
||||||
|
}
|
||||||
public static void saveDirectoryResource(String srcDirectory,boolean replace) {
|
public static void saveDirectoryResource(String srcDirectory,boolean replace) {
|
||||||
String destDirectory = new File(plugin.getDataFolder(),srcDirectory).getPath();
|
String destDirectory = new File(plugin.getDataFolder(),srcDirectory).getPath();
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,113 +1,198 @@
|
|||||||
package pers.xanadu.enderdragon.config;
|
package pers.xanadu.enderdragon.config;
|
||||||
|
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.bukkit.configuration.InvalidConfigurationException;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
import org.bukkit.enchantments.Enchantment;
|
||||||
|
import org.bukkit.inventory.ItemFlag;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.bukkit.inventory.meta.Repairable;
|
||||||
|
import org.bukkit.persistence.PersistentDataContainer;
|
||||||
|
import pers.xanadu.enderdragon.EnderDragon;
|
||||||
|
import pers.xanadu.enderdragon.manager.ItemManager;
|
||||||
|
import pers.xanadu.enderdragon.manager.TaskManager;
|
||||||
|
import pers.xanadu.enderdragon.reward.Chance;
|
||||||
|
import pers.xanadu.enderdragon.reward.Reward;
|
||||||
|
import pers.xanadu.enderdragon.util.Version;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import static pers.xanadu.enderdragon.EnderDragon.*;
|
import static pers.xanadu.enderdragon.EnderDragon.*;
|
||||||
|
|
||||||
public class FileUpdater {
|
public class FileUpdater {
|
||||||
public static void update() throws IOException {
|
public static void update() throws IOException {
|
||||||
FileConfiguration config_old = plugin.getConfig();
|
Lang.warn("Nothing to update. Maybe you need '/ed migrate'?");
|
||||||
boolean chinese = "Chinese".equals(config_old.getString("lang"));
|
// FileConfiguration config_old = plugin.getConfig();
|
||||||
File folder = new File(plugin.getDataFolder(),"setting");
|
// boolean chinese = "Chinese".equals(config_old.getString("lang"));
|
||||||
if(folder.exists()){
|
// File folder = new File(plugin.getDataFolder(),"setting");
|
||||||
File[] files = folder.listFiles();
|
// if(folder.exists()){
|
||||||
if(files != null){
|
// File[] files = folder.listFiles();
|
||||||
for(File file : files){
|
// if(files != null){
|
||||||
|
// for(File file : files){
|
||||||
|
// FileConfiguration config = YamlConfiguration.loadConfiguration(file);
|
||||||
|
// String ver = config.getString("version");
|
||||||
|
// if(!"2.2.0".equals(ver)) {
|
||||||
|
// Lang.error("The version of setting/"+file.getName()+" is not supported!");
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
// String name = file.getName();
|
||||||
|
// Config.copyFile("setting/"+name,"new/setting/"+name,true);
|
||||||
|
// }
|
||||||
|
// File new_folder = new File(plugin.getDataFolder(),"new/setting/");
|
||||||
|
// files = new_folder.listFiles();
|
||||||
|
// if(files != null){
|
||||||
|
// for(File file : files){
|
||||||
|
// FileOutputStream out = new FileOutputStream(file,true);
|
||||||
|
// if (chinese){
|
||||||
|
// out.write(("\n\n" +
|
||||||
|
// "# 一些特殊的战利品\n" +
|
||||||
|
// "special_loot:\n" +
|
||||||
|
// " # 你可以按格式添加更多条目,但是名称不能重复\n" +
|
||||||
|
// " # 如果找不到执行目标(target),所在战利品条目会被忽略\n" +
|
||||||
|
// " # 目前支持的type: exp(经验), command(执行指令,可解析伤害排名)\n" +
|
||||||
|
// " loot1:\n" +
|
||||||
|
// " # [true/false]\n" +
|
||||||
|
// " enable: false\n" +
|
||||||
|
// " type: command\n" +
|
||||||
|
// " # %attacker% -> 所有参与屠龙的玩家\n" +
|
||||||
|
// " target: \"%attacker%\"\n" +
|
||||||
|
// " # %player% -> 目标, %damage% -> 该玩家造成的总伤害\n" +
|
||||||
|
// " data:\n" +
|
||||||
|
// " - 'give %player% stone 1'\n" +
|
||||||
|
// " - 'ed action %player% tell: 你获得了保底奖励.'\n" +
|
||||||
|
// " loot2:\n" +
|
||||||
|
// " enable: false\n" +
|
||||||
|
// " type: command\n" +
|
||||||
|
// " # %attacker_top_<rank>% -> 在屠龙中取得此排名的玩家\n" +
|
||||||
|
// " target: \"%attacker_top_1%\"\n" +
|
||||||
|
// " data:\n" +
|
||||||
|
// " - 'ed action %player% tell: 你的伤害占比是最高的!'\n" +
|
||||||
|
// " - 'ed action %player% tell: 你造成的伤害: %damage%'\n" +
|
||||||
|
// " loot_exp1:\n" +
|
||||||
|
// " enable: false\n" +
|
||||||
|
// " type: exp\n" +
|
||||||
|
// " target: \"%attacker_top_2%\"\n" +
|
||||||
|
// " data:\n" +
|
||||||
|
// " # 给予排名第二的玩家20点经验\n" +
|
||||||
|
// " amount: 20\n" +
|
||||||
|
// "\n\n"
|
||||||
|
// ).getBytes());
|
||||||
|
// }
|
||||||
|
// else{
|
||||||
|
// out.write(("\n\n" +
|
||||||
|
// "special_loot:\n" +
|
||||||
|
// " # You can add more entries with DIFFERENT name according to the format.\n" +
|
||||||
|
// " # If such target not exists, this option will be ignored.\n" +
|
||||||
|
// " # type: exp, command\n" +
|
||||||
|
// " loot1:\n" +
|
||||||
|
// " # [true/false]\n" +
|
||||||
|
// " enable: false\n" +
|
||||||
|
// " type: command\n" +
|
||||||
|
// " # %attacker% -> all participants in dragon slaying\n" +
|
||||||
|
// " target: \"%attacker%\"\n" +
|
||||||
|
// " # %player% -> target, %damage% -> this player's damage to EnderDragon\n" +
|
||||||
|
// " data:\n" +
|
||||||
|
// " - 'give %player% stone 1'\n" +
|
||||||
|
// " - 'ed action %player% tell: This is a guaranteed reward.'\n" +
|
||||||
|
// " loot2:\n" +
|
||||||
|
// " enable: false\n" +
|
||||||
|
// " type: command\n" +
|
||||||
|
// " # %attacker_top_<rank>% -> the player with exactly this rank\n" +
|
||||||
|
// " target: \"%attacker_top_1%\"\n" +
|
||||||
|
// " data:\n" +
|
||||||
|
// " - 'ed action %player% tell: You are the one who causes the highest damage!'\n" +
|
||||||
|
// " - 'ed action %player% tell: Your damage: %damage%'\n" +
|
||||||
|
// " loot_exp1:\n" +
|
||||||
|
// " enable: false\n" +
|
||||||
|
// " type: exp\n" +
|
||||||
|
// " target: \"%attacker_top_2%\"\n" +
|
||||||
|
// " data:\n" +
|
||||||
|
// " # add 20 exp for the rank_2 player\n" +
|
||||||
|
// " amount: 20\n" +
|
||||||
|
// "\n\n"
|
||||||
|
// ).getBytes());
|
||||||
|
// }
|
||||||
|
// out.close();
|
||||||
|
// FileConfiguration fc = YamlConfiguration.loadConfiguration(file);
|
||||||
|
// fc.set("version","2.4.0");
|
||||||
|
// fc.save(file);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// Lang.info("New config files are generated in plugins/EnderDragon/new.");
|
||||||
|
// Lang.warn("Attention: Please confirm the accuracy before using new config!");
|
||||||
|
}
|
||||||
|
public static void migrate(){
|
||||||
|
File folder = new File(plugin.getDataFolder(),"reward");
|
||||||
|
if (folder.exists()){
|
||||||
|
File[] files = folder.listFiles(f -> f.getName().endsWith(".yml"));
|
||||||
|
if (files == null || files.length == 0) {
|
||||||
|
Lang.warn("No files need to be migrated!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (File file : files){
|
||||||
FileConfiguration config = YamlConfiguration.loadConfiguration(file);
|
FileConfiguration config = YamlConfiguration.loadConfiguration(file);
|
||||||
String ver = config.getString("version");
|
Config.copyFile(file,"new/reward/"+file.getName(),true);
|
||||||
if(!"2.2.0".equals(ver)) {
|
File gen_file = new File(plugin.getDataFolder(),"new/reward/"+file.getName());
|
||||||
Lang.error("The version of setting/"+file.getName()+" is not supported!");
|
YamlConfiguration new_cfg = YamlConfiguration.loadConfiguration(gen_file);
|
||||||
continue;
|
if(Config.advanced_setting_backslash_split_reward) new_cfg.options().pathSeparator('\\');
|
||||||
}
|
List<String> gen = new ArrayList<>();
|
||||||
String name = file.getName();
|
List<String> list = config.getStringList("list");
|
||||||
Config.copyFile("setting/"+name,"new/setting/"+name,true);
|
for(String str : list){
|
||||||
}
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
File new_folder = new File(plugin.getDataFolder(),"new/setting/");
|
if(Config.advanced_setting_backslash_split_reward) yml.options().pathSeparator('\\');
|
||||||
files = new_folder.listFiles();
|
try{
|
||||||
if(files != null){
|
yml.loadFromString(str);
|
||||||
for(File file : files){
|
Reward reward = ItemManager.readAsReward(yml);
|
||||||
FileOutputStream out = new FileOutputStream(file,true);
|
if (reward == null) continue;
|
||||||
if (chinese){
|
gen.add(saveReward(reward));
|
||||||
out.write(("\n\n" +
|
}catch (InvalidConfigurationException e){
|
||||||
"# 一些特殊的战利品\n" +
|
Lang.error(Lang.plugin_item_read_error + str);
|
||||||
"special_loot:\n" +
|
|
||||||
" # 你可以按格式添加更多条目,但是名称不能重复\n" +
|
|
||||||
" # 如果找不到执行目标(target),所在战利品条目会被忽略\n" +
|
|
||||||
" # 目前支持的type: exp(经验), command(执行指令,可解析伤害排名)\n" +
|
|
||||||
" loot1:\n" +
|
|
||||||
" # [true/false]\n" +
|
|
||||||
" enable: false\n" +
|
|
||||||
" type: command\n" +
|
|
||||||
" # %attacker% -> 所有参与屠龙的玩家\n" +
|
|
||||||
" target: \"%attacker%\"\n" +
|
|
||||||
" # %player% -> 目标, %damage% -> 该玩家造成的总伤害\n" +
|
|
||||||
" data:\n" +
|
|
||||||
" - 'give %player% stone 1'\n" +
|
|
||||||
" - 'ed action %player% tell: 你获得了保底奖励.'\n" +
|
|
||||||
" loot2:\n" +
|
|
||||||
" enable: false\n" +
|
|
||||||
" type: command\n" +
|
|
||||||
" # %attacker_top_<rank>% -> 在屠龙中取得此排名的玩家\n" +
|
|
||||||
" target: \"%attacker_top_1%\"\n" +
|
|
||||||
" data:\n" +
|
|
||||||
" - 'ed action %player% tell: 你的伤害占比是最高的!'\n" +
|
|
||||||
" - 'ed action %player% tell: 你造成的伤害: %damage%'\n" +
|
|
||||||
" loot_exp1:\n" +
|
|
||||||
" enable: false\n" +
|
|
||||||
" type: exp\n" +
|
|
||||||
" target: \"%attacker_top_2%\"\n" +
|
|
||||||
" data:\n" +
|
|
||||||
" # 给予排名第二的玩家20点经验\n" +
|
|
||||||
" amount: 20\n" +
|
|
||||||
"\n\n"
|
|
||||||
).getBytes());
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
out.write(("\n\n" +
|
|
||||||
"special_loot:\n" +
|
|
||||||
" # You can add more entries with DIFFERENT name according to the format.\n" +
|
|
||||||
" # If such target not exists, this option will be ignored.\n" +
|
|
||||||
" # type: exp, command\n" +
|
|
||||||
" loot1:\n" +
|
|
||||||
" # [true/false]\n" +
|
|
||||||
" enable: false\n" +
|
|
||||||
" type: command\n" +
|
|
||||||
" # %attacker% -> all participants in dragon slaying\n" +
|
|
||||||
" target: \"%attacker%\"\n" +
|
|
||||||
" # %player% -> target, %damage% -> this player's damage to EnderDragon\n" +
|
|
||||||
" data:\n" +
|
|
||||||
" - 'give %player% stone 1'\n" +
|
|
||||||
" - 'ed action %player% tell: This is a guaranteed reward.'\n" +
|
|
||||||
" loot2:\n" +
|
|
||||||
" enable: false\n" +
|
|
||||||
" type: command\n" +
|
|
||||||
" # %attacker_top_<rank>% -> the player with exactly this rank\n" +
|
|
||||||
" target: \"%attacker_top_1%\"\n" +
|
|
||||||
" data:\n" +
|
|
||||||
" - 'ed action %player% tell: You are the one who causes the highest damage!'\n" +
|
|
||||||
" - 'ed action %player% tell: Your damage: %damage%'\n" +
|
|
||||||
" loot_exp1:\n" +
|
|
||||||
" enable: false\n" +
|
|
||||||
" type: exp\n" +
|
|
||||||
" target: \"%attacker_top_2%\"\n" +
|
|
||||||
" data:\n" +
|
|
||||||
" # add 20 exp for the rank_2 player\n" +
|
|
||||||
" amount: 20\n" +
|
|
||||||
"\n\n"
|
|
||||||
).getBytes());
|
|
||||||
}
|
|
||||||
out.close();
|
|
||||||
FileConfiguration fc = YamlConfiguration.loadConfiguration(file);
|
|
||||||
fc.set("version","2.4.0");
|
|
||||||
fc.save(file);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
new_cfg.set("list",gen);
|
||||||
|
try{
|
||||||
|
new_cfg.save(gen_file);
|
||||||
|
}catch (IOException e){
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Lang.info("New config files are generated in plugins/EnderDragon/new.");
|
Lang.info("New reward config files are generated in plugins/EnderDragon/migrate.");
|
||||||
Lang.warn("Attention: Please confirm the accuracy before using new config!");
|
}
|
||||||
|
else Lang.warn("No files need to be migrated!");
|
||||||
|
}
|
||||||
|
public static String saveReward(Reward reward){
|
||||||
|
Chance chance = reward.getChance();
|
||||||
|
ItemStack item = reward.getItem();
|
||||||
|
double value = chance.getValue();
|
||||||
|
String str = chance.getStr();
|
||||||
|
String name = reward.getName();
|
||||||
|
YamlConfiguration yaml = new YamlConfiguration();
|
||||||
|
if(Config.advanced_setting_backslash_split_reward) yaml.options().pathSeparator('\\');
|
||||||
|
if(name == null){
|
||||||
|
ItemMeta meta = item.getItemMeta();
|
||||||
|
if(meta != null) {
|
||||||
|
String displayName = meta.getDisplayName();
|
||||||
|
if("".equals(displayName) || displayName == null){
|
||||||
|
name = item.getType().name().toLowerCase() + "(" + TaskManager.getCurrentTimeWithSpecialFormat() + ")";
|
||||||
|
}
|
||||||
|
else name = meta.getDisplayName();
|
||||||
|
}
|
||||||
|
else name = item.getType().name().toLowerCase() + "(" + TaskManager.getCurrentTimeWithSpecialFormat() + ")";
|
||||||
|
}
|
||||||
|
ConfigurationSection section = yaml.createSection(name);
|
||||||
|
section.set("data_type", "default");
|
||||||
|
section.set("data", item);
|
||||||
|
ConfigurationSection drop_section = section.createSection("drop_chance");
|
||||||
|
drop_section.set("value",value);
|
||||||
|
drop_section.set("format",str);
|
||||||
|
return yaml.saveToString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package pers.xanadu.enderdragon.hook;
|
package pers.xanadu.enderdragon.hook;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
import me.clip.placeholderapi.PlaceholderAPI;
|
import me.clip.placeholderapi.PlaceholderAPI;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import pers.xanadu.enderdragon.config.Lang;
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
@@ -9,12 +10,18 @@ import static pers.xanadu.enderdragon.EnderDragon.*;
|
|||||||
|
|
||||||
public class HookManager {
|
public class HookManager {
|
||||||
private static boolean papi = false;
|
private static boolean papi = false;
|
||||||
|
@Getter
|
||||||
|
private static boolean petDragonInstalled = false;
|
||||||
public static void init(){
|
public static void init(){
|
||||||
if(pm.getPlugin("PlaceholderAPI") != null){
|
if(pm.getPlugin("PlaceholderAPI") != null){
|
||||||
Lang.info("Hooking to PlaceholderAPI...");
|
Lang.info("Hooking to PlaceholderAPI...");
|
||||||
new Papi(getInstance());
|
new Papi(getInstance());
|
||||||
papi = true;
|
papi = true;
|
||||||
}
|
}
|
||||||
|
if (pm.getPlugin("PetDragon") != null){
|
||||||
|
Lang.info("Hooking to PetDragon...");
|
||||||
|
petDragonInstalled = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public static boolean isPlaceholderAPILoaded(){
|
public static boolean isPlaceholderAPILoaded(){
|
||||||
return papi;
|
return papi;
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import pers.xanadu.enderdragon.manager.DragonManager;
|
import pers.xanadu.enderdragon.manager.DragonManager;
|
||||||
|
import pers.xanadu.enderdragon.manager.WorldManager;
|
||||||
import pers.xanadu.enderdragon.util.ExtraPotionEffect;
|
import pers.xanadu.enderdragon.util.ExtraPotionEffect;
|
||||||
import pers.xanadu.enderdragon.metadata.MyDragon;
|
import pers.xanadu.enderdragon.metadata.MyDragon;
|
||||||
|
|
||||||
@@ -17,6 +18,7 @@ public class DragonAttackListener implements Listener {
|
|||||||
Entity attack = e.getDamager();
|
Entity attack = e.getDamager();
|
||||||
if(!(attack instanceof EnderDragon)) return;
|
if(!(attack instanceof EnderDragon)) return;
|
||||||
EnderDragon dragon = (EnderDragon) attack;
|
EnderDragon dragon = (EnderDragon) attack;
|
||||||
|
if(!WorldManager.enable_worlds.contains(dragon.getWorld().getName())) return;
|
||||||
String unique_name = DragonManager.getSpecialKey(dragon);
|
String unique_name = DragonManager.getSpecialKey(dragon);
|
||||||
if(unique_name == null) return;
|
if(unique_name == null) return;
|
||||||
MyDragon myDragon = DragonManager.get_dragon_config(unique_name);
|
MyDragon myDragon = DragonManager.get_dragon_config(unique_name);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import org.bukkit.event.EventPriority;
|
|||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import pers.xanadu.enderdragon.event.DragonDamageByPlayerEvent;
|
import pers.xanadu.enderdragon.event.DragonDamageByPlayerEvent;
|
||||||
|
import pers.xanadu.enderdragon.manager.WorldManager;
|
||||||
|
|
||||||
import static pers.xanadu.enderdragon.EnderDragon.pm;
|
import static pers.xanadu.enderdragon.EnderDragon.pm;
|
||||||
|
|
||||||
@@ -17,6 +18,7 @@ public class DragonBaseHurtListener implements Listener {
|
|||||||
Entity victim = e.getEntity();
|
Entity victim = e.getEntity();
|
||||||
Entity entity = e.getDamager();
|
Entity entity = e.getDamager();
|
||||||
if(victim instanceof EnderDragon){
|
if(victim instanceof EnderDragon){
|
||||||
|
if(!WorldManager.enable_worlds.contains(victim.getWorld().getName())) return;
|
||||||
EnderDragon dragon = (EnderDragon) victim;
|
EnderDragon dragon = (EnderDragon) victim;
|
||||||
if(entity instanceof Player){
|
if(entity instanceof Player){
|
||||||
Player player = (Player) entity;
|
Player player = (Player) entity;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import pers.xanadu.enderdragon.config.Config;
|
|||||||
import pers.xanadu.enderdragon.config.Lang;
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
import pers.xanadu.enderdragon.event.DragonDamageByPlayerEvent;
|
import pers.xanadu.enderdragon.event.DragonDamageByPlayerEvent;
|
||||||
import pers.xanadu.enderdragon.manager.DamageManager;
|
import pers.xanadu.enderdragon.manager.DamageManager;
|
||||||
|
import pers.xanadu.enderdragon.manager.WorldManager;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
@@ -22,6 +23,7 @@ public class DragonDamageByPlayerListener implements Listener {
|
|||||||
if(e.isCancelled()) return;
|
if(e.isCancelled()) return;
|
||||||
Player p = e.getDamager();
|
Player p = e.getDamager();
|
||||||
EnderDragon dragon = e.getDragon();
|
EnderDragon dragon = e.getDragon();
|
||||||
|
if(!WorldManager.enable_worlds.contains(dragon.getWorld().getName())) return;
|
||||||
double health = dragon.getHealth();
|
double health = dragon.getHealth();
|
||||||
double damage = Math.min(e.getFinalDamage(),health);
|
double damage = Math.min(e.getFinalDamage(),health);
|
||||||
if(damage > 0.0d){
|
if(damage > 0.0d){
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import pers.xanadu.enderdragon.config.Lang;
|
|||||||
import pers.xanadu.enderdragon.manager.DamageManager;
|
import pers.xanadu.enderdragon.manager.DamageManager;
|
||||||
import pers.xanadu.enderdragon.manager.DragonManager;
|
import pers.xanadu.enderdragon.manager.DragonManager;
|
||||||
import pers.xanadu.enderdragon.manager.TimerManager;
|
import pers.xanadu.enderdragon.manager.TimerManager;
|
||||||
|
import pers.xanadu.enderdragon.manager.WorldManager;
|
||||||
import pers.xanadu.enderdragon.metadata.MyDragon;
|
import pers.xanadu.enderdragon.metadata.MyDragon;
|
||||||
import pers.xanadu.enderdragon.reward.SpecialLoot;
|
import pers.xanadu.enderdragon.reward.SpecialLoot;
|
||||||
import pers.xanadu.enderdragon.util.Pair;
|
import pers.xanadu.enderdragon.util.Pair;
|
||||||
@@ -37,6 +38,7 @@ public class DragonDeathListener implements Listener {
|
|||||||
public void OnDragonDeath(final EntityDeathEvent e){
|
public void OnDragonDeath(final EntityDeathEvent e){
|
||||||
if(!(e.getEntity() instanceof EnderDragon)) return;
|
if(!(e.getEntity() instanceof EnderDragon)) return;
|
||||||
EnderDragon dragon = (EnderDragon) e.getEntity();
|
EnderDragon dragon = (EnderDragon) e.getEntity();
|
||||||
|
if(!WorldManager.enable_worlds.contains(dragon.getWorld().getName())) return;
|
||||||
String unique_name = DragonManager.getSpecialKey(dragon);
|
String unique_name = DragonManager.getSpecialKey(dragon);
|
||||||
if(unique_name == null) return;
|
if(unique_name == null) return;
|
||||||
MyDragon myDragon = DragonManager.get_dragon_config(unique_name);
|
MyDragon myDragon = DragonManager.get_dragon_config(unique_name);
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import org.bukkit.event.entity.EntityDamageEvent;
|
|||||||
import org.bukkit.event.player.PlayerBedEnterEvent;
|
import org.bukkit.event.player.PlayerBedEnterEvent;
|
||||||
import pers.xanadu.enderdragon.event.DragonDamageByPlayerEvent;
|
import pers.xanadu.enderdragon.event.DragonDamageByPlayerEvent;
|
||||||
import pers.xanadu.enderdragon.event.PlayerExplodeDragonEvent;
|
import pers.xanadu.enderdragon.event.PlayerExplodeDragonEvent;
|
||||||
|
import pers.xanadu.enderdragon.manager.WorldManager;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@@ -34,6 +35,7 @@ public class DragonExplosionHurtListener implements Listener {
|
|||||||
Entity victim = e.getEntity();
|
Entity victim = e.getEntity();
|
||||||
Entity entity = e.getDamager();
|
Entity entity = e.getDamager();
|
||||||
if(victim instanceof EnderDragon){
|
if(victim instanceof EnderDragon){
|
||||||
|
if(!WorldManager.enable_worlds.contains(victim.getWorld().getName())) return;
|
||||||
EnderDragon dragon = (EnderDragon) victim;
|
EnderDragon dragon = (EnderDragon) victim;
|
||||||
if(entity instanceof TNTPrimed){
|
if(entity instanceof TNTPrimed){
|
||||||
TNTPrimed tnt = (TNTPrimed) entity;
|
TNTPrimed tnt = (TNTPrimed) entity;
|
||||||
@@ -56,6 +58,7 @@ public class DragonExplosionHurtListener implements Listener {
|
|||||||
if(e.getCause() != EntityDamageEvent.DamageCause.BLOCK_EXPLOSION) return;
|
if(e.getCause() != EntityDamageEvent.DamageCause.BLOCK_EXPLOSION) return;
|
||||||
Entity entity = e.getEntity();
|
Entity entity = e.getEntity();
|
||||||
if(entity instanceof EnderDragon){
|
if(entity instanceof EnderDragon){
|
||||||
|
if(!WorldManager.enable_worlds.contains(entity.getWorld().getName())) return;
|
||||||
EnderDragon dragon = (EnderDragon) entity;
|
EnderDragon dragon = (EnderDragon) entity;
|
||||||
for(UUID uuid : mp.keySet()){
|
for(UUID uuid : mp.keySet()){
|
||||||
PlayerExplodeDragonEvent ped = mp.get(uuid);
|
PlayerExplodeDragonEvent ped = mp.get(uuid);
|
||||||
@@ -72,7 +75,10 @@ public class DragonExplosionHurtListener implements Listener {
|
|||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void OnPlayerClickBed(final PlayerBedEnterEvent e){
|
public void OnPlayerClickBed(final PlayerBedEnterEvent e){
|
||||||
Player p = e.getPlayer();
|
Player p = e.getPlayer();
|
||||||
|
// more precise judgement is needed.
|
||||||
|
// try World::isBedWorks()
|
||||||
if(p.getWorld().getEnvironment() != World.Environment.THE_END) return;
|
if(p.getWorld().getEnvironment() != World.Environment.THE_END) return;
|
||||||
|
if(!WorldManager.enable_worlds.contains(p.getWorld().getName())) return;
|
||||||
long time = pers.xanadu.enderdragon.EnderDragon.getInstance().getWorldDataManager().getGameTime(e.getPlayer().getWorld());
|
long time = pers.xanadu.enderdragon.EnderDragon.getInstance().getWorldDataManager().getGameTime(e.getPlayer().getWorld());
|
||||||
Location bed_loc = e.getBed().getLocation();
|
Location bed_loc = e.getBed().getLocation();
|
||||||
Collection<EnderDragon> entities = getExplosionDragon(5f,bed_loc);
|
Collection<EnderDragon> entities = getExplosionDragon(5f,bed_loc);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.event.entity.EntitySpawnEvent;
|
import org.bukkit.event.entity.EntitySpawnEvent;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import pers.xanadu.enderdragon.manager.DragonManager;
|
import pers.xanadu.enderdragon.manager.DragonManager;
|
||||||
|
import pers.xanadu.enderdragon.manager.WorldManager;
|
||||||
import pers.xanadu.enderdragon.metadata.MyDragon;
|
import pers.xanadu.enderdragon.metadata.MyDragon;
|
||||||
|
|
||||||
import static pers.xanadu.enderdragon.manager.DragonManager.getSpecialKey;
|
import static pers.xanadu.enderdragon.manager.DragonManager.getSpecialKey;
|
||||||
@@ -41,6 +42,7 @@ public class DragonFireballListener implements Listener {
|
|||||||
if(effectCloud.getSource() == null) return;
|
if(effectCloud.getSource() == null) return;
|
||||||
if(!(effectCloud.getSource() instanceof EnderDragon)) return;
|
if(!(effectCloud.getSource() instanceof EnderDragon)) return;
|
||||||
EnderDragon dragon = (EnderDragon) effectCloud.getSource();
|
EnderDragon dragon = (EnderDragon) effectCloud.getSource();
|
||||||
|
if(!WorldManager.enable_worlds.contains(dragon.getWorld().getName())) return;
|
||||||
String unique_name = getSpecialKey(dragon);
|
String unique_name = getSpecialKey(dragon);
|
||||||
if(unique_name == null) return;
|
if(unique_name == null) return;
|
||||||
MyDragon myDragon = DragonManager.get_dragon_config(unique_name);
|
MyDragon myDragon = DragonManager.get_dragon_config(unique_name);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import org.bukkit.event.EventPriority;
|
|||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.EntityRegainHealthEvent;
|
import org.bukkit.event.entity.EntityRegainHealthEvent;
|
||||||
import pers.xanadu.enderdragon.manager.DragonManager;
|
import pers.xanadu.enderdragon.manager.DragonManager;
|
||||||
|
import pers.xanadu.enderdragon.manager.WorldManager;
|
||||||
import pers.xanadu.enderdragon.metadata.MyDragon;
|
import pers.xanadu.enderdragon.metadata.MyDragon;
|
||||||
|
|
||||||
import static pers.xanadu.enderdragon.manager.DragonManager.getSpecialKey;
|
import static pers.xanadu.enderdragon.manager.DragonManager.getSpecialKey;
|
||||||
@@ -15,6 +16,7 @@ public class DragonHealListener implements Listener {
|
|||||||
public void OnDragonHeal(final EntityRegainHealthEvent e){
|
public void OnDragonHeal(final EntityRegainHealthEvent e){
|
||||||
if(!(e.getEntity() instanceof EnderDragon)) return;
|
if(!(e.getEntity() instanceof EnderDragon)) return;
|
||||||
EnderDragon dragon = (EnderDragon) e.getEntity();
|
EnderDragon dragon = (EnderDragon) e.getEntity();
|
||||||
|
if(!WorldManager.enable_worlds.contains(dragon.getWorld().getName())) return;
|
||||||
if(!e.getRegainReason().equals(EntityRegainHealthEvent.RegainReason.ENDER_CRYSTAL)) return;
|
if(!e.getRegainReason().equals(EntityRegainHealthEvent.RegainReason.ENDER_CRYSTAL)) return;
|
||||||
String unique_name = getSpecialKey(dragon);
|
String unique_name = getSpecialKey(dragon);
|
||||||
if(unique_name == null) return;
|
if(unique_name == null) return;
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
package pers.xanadu.enderdragon.listener;
|
package pers.xanadu.enderdragon.listener;
|
||||||
|
|
||||||
|
import com.ericdebouwer.petdragon.api.PetDragonAPI;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.attribute.Attribute;
|
||||||
import org.bukkit.boss.BarColor;
|
import org.bukkit.boss.BarColor;
|
||||||
|
import org.bukkit.boss.BarFlag;
|
||||||
import org.bukkit.boss.BarStyle;
|
import org.bukkit.boss.BarStyle;
|
||||||
import org.bukkit.boss.BossBar;
|
import org.bukkit.boss.BossBar;
|
||||||
import org.bukkit.entity.*;
|
import org.bukkit.entity.*;
|
||||||
@@ -13,7 +16,9 @@ import org.bukkit.event.entity.CreatureSpawnEvent;
|
|||||||
import pers.xanadu.enderdragon.config.Config;
|
import pers.xanadu.enderdragon.config.Config;
|
||||||
import pers.xanadu.enderdragon.config.Lang;
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
import pers.xanadu.enderdragon.event.DragonRespawnPostEvent;
|
import pers.xanadu.enderdragon.event.DragonRespawnPostEvent;
|
||||||
|
import pers.xanadu.enderdragon.hook.HookManager;
|
||||||
import pers.xanadu.enderdragon.manager.DamageManager;
|
import pers.xanadu.enderdragon.manager.DamageManager;
|
||||||
|
import pers.xanadu.enderdragon.manager.WorldManager;
|
||||||
import pers.xanadu.enderdragon.metadata.DragonInfo;
|
import pers.xanadu.enderdragon.metadata.DragonInfo;
|
||||||
import pers.xanadu.enderdragon.metadata.MyDragon;
|
import pers.xanadu.enderdragon.metadata.MyDragon;
|
||||||
import pers.xanadu.enderdragon.util.Version;
|
import pers.xanadu.enderdragon.util.Version;
|
||||||
@@ -29,19 +34,24 @@ public class DragonSpawnListener implements Listener {
|
|||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void OnDragonSpawn(final CreatureSpawnEvent e){
|
public void OnDragonSpawn(final CreatureSpawnEvent e){
|
||||||
if(!(e.getEntity() instanceof EnderDragon)) return;
|
if(!(e.getEntity() instanceof EnderDragon)) return;
|
||||||
if(Config.blacklist_worlds.contains(e.getEntity().getWorld().getName())) return;
|
//compatibility with plugin PetDragon
|
||||||
|
if (HookManager.isPetDragonInstalled()){
|
||||||
|
if (PetDragonAPI.getInstance().isPetDragon(e.getEntity())) return;
|
||||||
|
}
|
||||||
|
if(!WorldManager.enable_worlds.contains(e.getEntity().getWorld().getName())) return;
|
||||||
if(Config.blacklist_spawn_reason.contains(e.getSpawnReason().name())) return;
|
if(Config.blacklist_spawn_reason.contains(e.getSpawnReason().name())) return;
|
||||||
EnderDragon dragon = (EnderDragon) e.getEntity();
|
EnderDragon dragon = (EnderDragon) e.getEntity();
|
||||||
|
World world = dragon.getWorld();
|
||||||
MyDragon myDragon = null;
|
MyDragon myDragon = null;
|
||||||
if(e.getSpawnReason() == CreatureSpawnEvent.SpawnReason.DEFAULT){
|
if(e.getSpawnReason() == CreatureSpawnEvent.SpawnReason.DEFAULT){
|
||||||
myDragon = getDesignatedDragon(dragon.getWorld());
|
myDragon = getDesignatedDragon(world);
|
||||||
}
|
}
|
||||||
if(myDragon == null) myDragon = judge();
|
if(myDragon == null) myDragon = judge();
|
||||||
if(myDragon == null) {
|
if(myDragon == null) {
|
||||||
Lang.warn("special_dragon_jude_mode setting error!");
|
Lang.warn("special_dragon_jude_mode setting error!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DragonInfo info = new DragonInfo(myDragon.unique_name);
|
DragonInfo info = new DragonInfo(dragon,myDragon.unique_name);
|
||||||
Bukkit.getPluginManager().callEvent(new DragonRespawnPostEvent(dragon,e.getSpawnReason(),info));
|
Bukkit.getPluginManager().callEvent(new DragonRespawnPostEvent(dragon,e.getSpawnReason(),info));
|
||||||
MyDragon update = getFromInfo(info);
|
MyDragon update = getFromInfo(info);
|
||||||
if(update == null) {
|
if(update == null) {
|
||||||
@@ -50,6 +60,11 @@ public class DragonSpawnListener implements Listener {
|
|||||||
else{
|
else{
|
||||||
myDragon = update;
|
myDragon = update;
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
existing_dragon.put(dragon.getUniqueId(),new DragonInfo(dragon,myDragon.unique_name));
|
||||||
|
DragonInfo old = main_dragon.get(world.getName());
|
||||||
|
if(old == null || !old.getHandle().isValid()) main_dragon.put(world.getName(),new DragonInfo(dragon,myDragon.unique_name));
|
||||||
|
}
|
||||||
setSpecialKey(dragon, myDragon.unique_name);
|
setSpecialKey(dragon, myDragon.unique_name);
|
||||||
DamageManager.data.put(dragon.getUniqueId(),new ConcurrentHashMap<>());
|
DamageManager.data.put(dragon.getUniqueId(),new ConcurrentHashMap<>());
|
||||||
int times = data.getInt("times");
|
int times = data.getInt("times");
|
||||||
@@ -70,21 +85,25 @@ public class DragonSpawnListener implements Listener {
|
|||||||
String color = myDragon.glow_color.toUpperCase();
|
String color = myDragon.glow_color.toUpperCase();
|
||||||
if(color.equals("NONE")) dragon.setGlowing(false);
|
if(color.equals("NONE")) dragon.setGlowing(false);
|
||||||
else setGlowingColor(dragon,getGlowColor(color));
|
else setGlowingColor(dragon,getGlowColor(color));
|
||||||
String bossBar_color = myDragon.bossbar_color.toUpperCase();
|
|
||||||
String bossBar_style = myDragon.bossbar_style.toUpperCase();
|
|
||||||
|
|
||||||
if(Version.mcMainVersion >= 14){
|
if(Version.mcMainVersion >= 14){
|
||||||
BossBar bossBar = dragon.getBossBar();
|
BossBar bossBar = dragon.getBossBar();
|
||||||
if(bossBar != null){
|
if(bossBar != null){
|
||||||
bossBar.setColor(BarColor.valueOf(bossBar_color));
|
bossBar.setColor(BarColor.valueOf(myDragon.bossbar_color));
|
||||||
bossBar.setStyle(BarStyle.valueOf(bossBar_style));
|
bossBar.setStyle(BarStyle.valueOf(myDragon.bossbar_style));
|
||||||
|
if(myDragon.bossbar_create_frog) bossBar.addFlag(BarFlag.CREATE_FOG);
|
||||||
|
else bossBar.removeFlag(BarFlag.CREATE_FOG);
|
||||||
|
if(myDragon.bossbar_darken_sky) bossBar.addFlag(BarFlag.DARKEN_SKY);
|
||||||
|
else bossBar.removeFlag(BarFlag.DARKEN_SKY);
|
||||||
|
if(myDragon.bossbar_play_boss_music) bossBar.addFlag(BarFlag.PLAY_BOSS_MUSIC);
|
||||||
|
else bossBar.removeFlag(BarFlag.PLAY_BOSS_MUSIC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(Version.mcMainVersion >= 12){
|
else if(Version.mcMainVersion >= 12){
|
||||||
getInstance().getBossBarManager().setBossBar(dragon.getWorld(),myDragon.display_name,bossBar_color,bossBar_style);
|
getInstance().getBossBarManager().setBossBar(world,myDragon);
|
||||||
}
|
}
|
||||||
if(Config.advanced_setting_save_bossbar){
|
if(Config.advanced_setting_save_bossbar){
|
||||||
getInstance().getBossBarManager().saveBossBarData(Collections.singletonList(dragon.getWorld()));
|
getInstance().getBossBarManager().saveBossBarData(Collections.singletonList(world));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import org.bukkit.event.EventHandler;
|
|||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import pers.xanadu.enderdragon.event.DragonDamageByPlayerEvent;
|
import pers.xanadu.enderdragon.event.DragonDamageByPlayerEvent;
|
||||||
|
import pers.xanadu.enderdragon.manager.WorldManager;
|
||||||
|
|
||||||
import static pers.xanadu.enderdragon.EnderDragon.pm;
|
import static pers.xanadu.enderdragon.EnderDragon.pm;
|
||||||
|
|
||||||
@@ -16,6 +17,7 @@ public class PlayerAttackListener implements Listener {
|
|||||||
if(e.isCancelled()) return;
|
if(e.isCancelled()) return;
|
||||||
if(!(e.getEntity() instanceof org.bukkit.entity.EnderDragon)) return;
|
if(!(e.getEntity() instanceof org.bukkit.entity.EnderDragon)) return;
|
||||||
EnderDragon dragon = (EnderDragon) e.getEntity();
|
EnderDragon dragon = (EnderDragon) e.getEntity();
|
||||||
|
if(!WorldManager.enable_worlds.contains(dragon.getWorld().getName())) return;
|
||||||
DamageMetadata damage = e.getDamage();
|
DamageMetadata damage = e.getDamage();
|
||||||
double final_damage = damage.getDamage();
|
double final_damage = damage.getDamage();
|
||||||
if(final_damage > 0.0d){
|
if(final_damage > 0.0d){
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import java.io.File;
|
|||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
@@ -37,6 +38,8 @@ public class DragonManager {
|
|||||||
static final ArrayList<MyDragon> dragons = new ArrayList<>();
|
static final ArrayList<MyDragon> dragons = new ArrayList<>();
|
||||||
static final Map<String, MyDragon> mp = new HashMap<>();
|
static final Map<String, MyDragon> mp = new HashMap<>();
|
||||||
public static List<String> dragon_names = new ArrayList<>();
|
public static List<String> dragon_names = new ArrayList<>();
|
||||||
|
public static final Map<UUID,DragonInfo> existing_dragon = new ConcurrentHashMap<>();
|
||||||
|
public static final Map<String,DragonInfo> main_dragon = new ConcurrentHashMap<>();
|
||||||
private static int sum = 0;
|
private static int sum = 0;
|
||||||
private static final int[][] nxt = {{3,0},{0,3},{-3,0},{0,-3}};
|
private static final int[][] nxt = {{3,0},{0,3},{-3,0},{0,-3}};
|
||||||
private static final int[][] nxt_2 = {{2,0},{0,2},{-2,0},{0,-2}};
|
private static final int[][] nxt_2 = {{2,0},{0,2},{-2,0},{0,-2}};
|
||||||
@@ -220,8 +223,11 @@ public class DragonManager {
|
|||||||
myDragon.death_broadcast_msg = f.getStringList("death_broadcast_msg");
|
myDragon.death_broadcast_msg = f.getStringList("death_broadcast_msg");
|
||||||
myDragon.msg_to_killer = f.getStringList("msg_to_killer");
|
myDragon.msg_to_killer = f.getStringList("msg_to_killer");
|
||||||
myDragon.glow_color = f.getString("glow_color","random");
|
myDragon.glow_color = f.getString("glow_color","random");
|
||||||
myDragon.bossbar_color = f.getString("bossbar.color","WHITE");
|
myDragon.bossbar_color = f.getString("bossbar.color","WHITE").toUpperCase();
|
||||||
myDragon.bossbar_style = f.getString("bossbar.style","SOLID");
|
myDragon.bossbar_style = f.getString("bossbar.style","SOLID").toUpperCase();
|
||||||
|
myDragon.bossbar_create_frog = f.getBoolean("bossbar.create_frog",true);
|
||||||
|
myDragon.bossbar_darken_sky = f.getBoolean("bossbar.darken_sky",true);
|
||||||
|
myDragon.bossbar_play_boss_music = f.getBoolean("bossbar.play_boss_music",true);
|
||||||
myDragon.effect_cloud_original_radius = f.getDouble("effect_cloud.original_radius",3);
|
myDragon.effect_cloud_original_radius = f.getDouble("effect_cloud.original_radius",3);
|
||||||
myDragon.effect_cloud_expand_speed = f.getDouble("effect_cloud.expand_speed",0.1333333);
|
myDragon.effect_cloud_expand_speed = f.getDouble("effect_cloud.expand_speed",0.1333333);
|
||||||
myDragon.effect_cloud_duration = f.getInt("effect_cloud.duration",60);
|
myDragon.effect_cloud_duration = f.getInt("effect_cloud.duration",60);
|
||||||
@@ -482,6 +488,39 @@ public class DragonManager {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Only used to initialize. DON'T use this if speed is essential.
|
||||||
|
* @param world world
|
||||||
|
* @return The dragon found in this world.
|
||||||
|
*/
|
||||||
|
public static EnderDragon getEnderDragon(final World world){
|
||||||
|
if(world.getEnvironment() != World.Environment.THE_END){
|
||||||
|
return world.getEntitiesByClass(EnderDragon.class).iterator().next();
|
||||||
|
}
|
||||||
|
if(Version.mcMainVersion >= 16){
|
||||||
|
DragonBattle battle = world.getEnderDragonBattle();
|
||||||
|
assert battle != null;
|
||||||
|
return battle.getEnderDragon();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Object battle = getEnderDragonBattle(world);
|
||||||
|
assert battle != null;
|
||||||
|
Field k = EnderDragonBattleClass.getDeclaredField("k");
|
||||||
|
k.setAccessible(true);
|
||||||
|
Object dragonKilled = k.get(battle);
|
||||||
|
if((boolean) dragonKilled) return null;
|
||||||
|
Field m = EnderDragonBattleClass.getDeclaredField("m");
|
||||||
|
m.setAccessible(true);
|
||||||
|
Object uuid = m.get(battle);
|
||||||
|
// Field d = EnderDragonBattleClass.getDeclaredField("d");
|
||||||
|
// d.setAccessible(true);
|
||||||
|
// Object worldServer = d.get(battle);
|
||||||
|
return (EnderDragon) Bukkit.getEntity((UUID) uuid);
|
||||||
|
} catch (ReflectiveOperationException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
public static Location getEndPortalLocation(final World world){
|
public static Location getEndPortalLocation(final World world){
|
||||||
if(world == null) return null;
|
if(world == null) return null;
|
||||||
if(world.getEnvironment() != World.Environment.THE_END) return null;
|
if(world.getEnvironment() != World.Environment.THE_END) return null;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package pers.xanadu.enderdragon.manager;
|
package pers.xanadu.enderdragon.manager;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.attribute.Attribute;
|
||||||
import org.bukkit.attribute.AttributeModifier;
|
import org.bukkit.attribute.AttributeModifier;
|
||||||
@@ -13,6 +14,7 @@ import org.bukkit.inventory.meta.Repairable;
|
|||||||
import org.bukkit.persistence.PersistentDataContainer;
|
import org.bukkit.persistence.PersistentDataContainer;
|
||||||
import pers.xanadu.enderdragon.EnderDragon;
|
import pers.xanadu.enderdragon.EnderDragon;
|
||||||
import pers.xanadu.enderdragon.config.Config;
|
import pers.xanadu.enderdragon.config.Config;
|
||||||
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
import pers.xanadu.enderdragon.reward.Reward;
|
import pers.xanadu.enderdragon.reward.Reward;
|
||||||
import pers.xanadu.enderdragon.reward.Chance;
|
import pers.xanadu.enderdragon.reward.Chance;
|
||||||
import pers.xanadu.enderdragon.util.Version;
|
import pers.xanadu.enderdragon.util.Version;
|
||||||
@@ -20,6 +22,8 @@ import pers.xanadu.enderdragon.util.Version;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class ItemManager {
|
public class ItemManager {
|
||||||
|
@Getter
|
||||||
|
private static boolean legacy = false;
|
||||||
public static String write(Reward reward){
|
public static String write(Reward reward){
|
||||||
Chance chance = reward.getChance();
|
Chance chance = reward.getChance();
|
||||||
return write(reward.getItem(),chance.getValue(),chance.getStr(),reward.getName());
|
return write(reward.getItem(),chance.getValue(),chance.getStr(),reward.getName());
|
||||||
@@ -40,12 +44,12 @@ public class ItemManager {
|
|||||||
}
|
}
|
||||||
ConfigurationSection section = yaml.createSection(name);
|
ConfigurationSection section = yaml.createSection(name);
|
||||||
switch(Config.item_format_reward){
|
switch(Config.item_format_reward){
|
||||||
case "nbt" : {
|
case "_nbt" : {
|
||||||
section.set("data_type","nbt");
|
section.set("data_type","nbt");
|
||||||
section.set("data",EnderDragon.getInstance().getNMSManager().getNBT(item));
|
section.set("data",EnderDragon.getInstance().getNMSManager().getNBT(item));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "advanced" : {
|
case "_advanced" : {
|
||||||
section.set("data_type","advanced");
|
section.set("data_type","advanced");
|
||||||
ConfigurationSection section_data = section.createSection("data");
|
ConfigurationSection section_data = section.createSection("data");
|
||||||
//type
|
//type
|
||||||
@@ -145,14 +149,13 @@ public class ItemManager {
|
|||||||
internal.set("data_type","nbt");
|
internal.set("data_type","nbt");
|
||||||
internal.set("data",new_cpd.toString());
|
internal.set("data",new_cpd.toString());
|
||||||
}
|
}
|
||||||
// Map<String,Object> mp = EnderDragon.getInstance().getNMSManager().getUnhandledTags(meta);
|
|
||||||
// if(mp != null){
|
|
||||||
// ConfigurationSection internal = section_data.createSection("internal");
|
|
||||||
// saveUnhandledTags(internal,mp);
|
|
||||||
// }
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case "nbt":
|
||||||
|
case "advanced": {
|
||||||
|
Lang.warn("Data_type 'nbt' and 'advanced' has been disabled temporarily for compatibility with 1.20.5+");
|
||||||
|
//no break, go ahead to default block.
|
||||||
|
}
|
||||||
default : {
|
default : {
|
||||||
section.set("data_type","default");
|
section.set("data_type","default");
|
||||||
section.set("data", item);
|
section.set("data", item);
|
||||||
@@ -171,9 +174,17 @@ public class ItemManager {
|
|||||||
String data_type = section0.getString("data_type");
|
String data_type = section0.getString("data_type");
|
||||||
//data_type may be null
|
//data_type may be null
|
||||||
ItemStack item;
|
ItemStack item;
|
||||||
if("nbt".equals(data_type)) item = readFromNBT(section0,"data");
|
if("nbt".equals(data_type)) {
|
||||||
else if("advanced".equals(data_type)) item = readFromAdvData(section0, "data");
|
legacy = true;
|
||||||
else item = readFromBukkit(section0,"data");
|
item = readFromNBT(section0,"data");
|
||||||
|
}
|
||||||
|
else if("advanced".equals(data_type)) {
|
||||||
|
legacy = true;
|
||||||
|
item = readFromAdvData(section0, "data");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
item = readFromBukkit(section0,"data");
|
||||||
|
}
|
||||||
ConfigurationSection chance_section = section0.getConfigurationSection("drop_chance");
|
ConfigurationSection chance_section = section0.getConfigurationSection("drop_chance");
|
||||||
if(chance_section == null) return null;
|
if(chance_section == null) return null;
|
||||||
double d0 = chance_section.getDouble("value");
|
double d0 = chance_section.getDouble("value");
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import pers.xanadu.enderdragon.config.Lang;
|
|||||||
import pers.xanadu.enderdragon.reward.Reward;
|
import pers.xanadu.enderdragon.reward.Reward;
|
||||||
import pers.xanadu.enderdragon.reward.Chance;
|
import pers.xanadu.enderdragon.reward.Chance;
|
||||||
import pers.xanadu.enderdragon.metadata.MyDragon;
|
import pers.xanadu.enderdragon.metadata.MyDragon;
|
||||||
|
import pers.xanadu.enderdragon.util.Version;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
@@ -30,7 +31,6 @@ public class RewardManager {
|
|||||||
FileConfiguration data = loadConfiguration(file);
|
FileConfiguration data = loadConfiguration(file);
|
||||||
String path = "list";
|
String path = "list";
|
||||||
List<String> list = data.getStringList(path);
|
List<String> list = data.getStringList(path);
|
||||||
// if list == null ?
|
|
||||||
for(String str : list){
|
for(String str : list){
|
||||||
YamlConfiguration yml = new YamlConfiguration();
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
if(Config.advanced_setting_backslash_split_reward) yml.options().pathSeparator('\\');
|
if(Config.advanced_setting_backslash_split_reward) yml.options().pathSeparator('\\');
|
||||||
@@ -43,6 +43,11 @@ public class RewardManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ItemManager.isLegacy()){
|
||||||
|
Lang.error("I'm sorry that data_type 'nbt' and 'advanced' probably will be disabled in 1.20.5+");
|
||||||
|
Lang.error("It is recommended to migrate item configuration to bukkit format for compatibility.");
|
||||||
|
Lang.error("You can use /ed migrate to generate new config.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public static void addItem(String key,Reward reward){
|
public static void addItem(String key,Reward reward){
|
||||||
addItem(key,reward.getItem(),reward.getChance());
|
addItem(key,reward.getItem(),reward.getChance());
|
||||||
@@ -118,7 +123,7 @@ public class RewardManager {
|
|||||||
try{
|
try{
|
||||||
YamlConfiguration yml = new YamlConfiguration();
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
if(Config.advanced_setting_backslash_split_reward) yml.options().pathSeparator('\\');
|
if(Config.advanced_setting_backslash_split_reward) yml.options().pathSeparator('\\');
|
||||||
yml.set("version","2.1.0");
|
yml.set("version", Version.reward);
|
||||||
yml.set("list","");
|
yml.set("list","");
|
||||||
yml.save(file);
|
yml.save(file);
|
||||||
}catch (IOException e){
|
}catch (IOException e){
|
||||||
|
|||||||
@@ -5,29 +5,32 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.EnderDragon;
|
import org.bukkit.entity.EnderDragon;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
|
import pers.xanadu.enderdragon.config.Config;
|
||||||
import pers.xanadu.enderdragon.config.Lang;
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
|
import pers.xanadu.enderdragon.util.ConcurrentSet;
|
||||||
import pers.xanadu.enderdragon.util.Version;
|
import pers.xanadu.enderdragon.util.Version;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static java.lang.Math.sqrt;
|
import static java.lang.Math.sqrt;
|
||||||
import static pers.xanadu.enderdragon.EnderDragon.getInstance;
|
import static pers.xanadu.enderdragon.EnderDragon.getInstance;
|
||||||
import static pers.xanadu.enderdragon.util.MathUtil.*;
|
import static pers.xanadu.enderdragon.util.MathUtil.*;
|
||||||
|
|
||||||
public class WorldManager {
|
public class WorldManager {
|
||||||
public static final List<String> worlds = new ArrayList<>();
|
public static final List<String> all_worlds = new ArrayList<>();
|
||||||
|
public static final Set<String> enable_worlds = new ConcurrentSet<>();
|
||||||
private Field dimension;
|
private Field dimension;
|
||||||
private Field world_provider;
|
private Field world_provider;
|
||||||
private Method getDimensionID;
|
private Method getDimensionID;
|
||||||
|
|
||||||
public static void reload(){
|
public static void reload(){
|
||||||
worlds.clear();
|
all_worlds.clear();
|
||||||
Bukkit.getWorlds().forEach(world -> worlds.add(world.getName()));
|
Bukkit.getWorlds().forEach(world -> all_worlds.add(world.getName()));
|
||||||
|
enable_worlds.clear();
|
||||||
|
enable_worlds.addAll(all_worlds);
|
||||||
|
Config.blacklist_worlds.forEach(enable_worlds::remove);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Collection<EnderDragon> getExplosionDragon(float power, Location loc){
|
public static Collection<EnderDragon> getExplosionDragon(float power, Location loc){
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class DependencyManager {
|
|||||||
// "groovy","xanadu.groovy",
|
// "groovy","xanadu.groovy",
|
||||||
// "org.apache.groovy","xanadu.org.apache.groovy"
|
// "org.apache.groovy","xanadu.org.apache.groovy"
|
||||||
// );
|
// );
|
||||||
Dependency groovy = new Dependency("org.apache.groovy","groovy","4.0.10","https://repo1.maven.org/maven2/", Dependency.AlgorithmType.SHA_256,rules);
|
Dependency groovy = new Dependency("org.apache.groovy","groovy","4.0.18","https://repo1.maven.org/maven2/", Dependency.AlgorithmType.SHA_256,rules);
|
||||||
boolean f = groovy.load();
|
boolean f = groovy.load();
|
||||||
if(f) dep_groovy = true;
|
if(f) dep_groovy = true;
|
||||||
else err("Failed to load library: "+groovy.getName());
|
else err("Failed to load library: "+groovy.getName());
|
||||||
|
|||||||
@@ -1,8 +1,15 @@
|
|||||||
package pers.xanadu.enderdragon.metadata;
|
package pers.xanadu.enderdragon.metadata;
|
||||||
|
|
||||||
|
import org.bukkit.entity.EnderDragon;
|
||||||
|
|
||||||
public class DragonInfo {
|
public class DragonInfo {
|
||||||
|
private final EnderDragon handle;
|
||||||
public String unique_name;
|
public String unique_name;
|
||||||
public DragonInfo(String unique_name){
|
public DragonInfo(final EnderDragon dragon, String unique_name){
|
||||||
|
this.handle = dragon;
|
||||||
this.unique_name = unique_name;
|
this.unique_name = unique_name;
|
||||||
}
|
}
|
||||||
|
public EnderDragon getHandle(){
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,9 @@ public class MyDragon implements Comparable<MyDragon>{
|
|||||||
public String glow_color;
|
public String glow_color;
|
||||||
public String bossbar_color;
|
public String bossbar_color;
|
||||||
public String bossbar_style;
|
public String bossbar_style;
|
||||||
|
public boolean bossbar_create_frog;
|
||||||
|
public boolean bossbar_darken_sky;
|
||||||
|
public boolean bossbar_play_boss_music;
|
||||||
public double effect_cloud_original_radius;
|
public double effect_cloud_original_radius;
|
||||||
public double effect_cloud_expand_speed;
|
public double effect_cloud_expand_speed;
|
||||||
public int effect_cloud_duration;
|
public int effect_cloud_duration;
|
||||||
|
|||||||
+3
-2
@@ -1,11 +1,12 @@
|
|||||||
package pers.xanadu.enderdragon.nms.BossBar;
|
package pers.xanadu.enderdragon.nms.BossBar;
|
||||||
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import pers.xanadu.enderdragon.metadata.MyDragon;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface I_BossBarManager {
|
public interface IBossBarManager {
|
||||||
void saveBossBarData(List<World> worlds);
|
void saveBossBarData(List<World> worlds);
|
||||||
void loadBossBarData(List<World> worlds);
|
void loadBossBarData(List<World> worlds);
|
||||||
void setBossBar(World world,String title,String color,String style);
|
void setBossBar(World world, final MyDragon myDragon);
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,8 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
|||||||
import org.bukkit.craftbukkit.v1_12_R1.util.CraftChatMessage;
|
import org.bukkit.craftbukkit.v1_12_R1.util.CraftChatMessage;
|
||||||
import pers.xanadu.enderdragon.config.Lang;
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
import pers.xanadu.enderdragon.manager.DragonManager;
|
import pers.xanadu.enderdragon.manager.DragonManager;
|
||||||
import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager;
|
import pers.xanadu.enderdragon.metadata.MyDragon;
|
||||||
|
import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -17,11 +18,12 @@ import java.util.List;
|
|||||||
|
|
||||||
import static pers.xanadu.enderdragon.EnderDragon.plugin;
|
import static pers.xanadu.enderdragon.EnderDragon.plugin;
|
||||||
|
|
||||||
public class BossBarManager implements I_BossBarManager {
|
public class BossBarManager implements IBossBarManager {
|
||||||
private Field BossBattleServer = null;
|
private Field BossBattleServer = null;
|
||||||
public void saveBossBarData(List<World> worlds){
|
public void saveBossBarData(List<World> worlds){
|
||||||
File file = new File(plugin.getDataFolder(),"world_data.yml");
|
File file = new File(plugin.getDataFolder(),"world_data.yml");
|
||||||
YamlConfiguration yml = new YamlConfiguration();
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
|
char split = yml.options().pathSeparator();
|
||||||
worlds.forEach(world -> {
|
worlds.forEach(world -> {
|
||||||
try{
|
try{
|
||||||
Object edb = DragonManager.getEnderDragonBattle(world);
|
Object edb = DragonManager.getEnderDragonBattle(world);
|
||||||
@@ -29,10 +31,13 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("c");
|
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("c");
|
||||||
BossBattleServer.setAccessible(true);
|
BossBattleServer.setAccessible(true);
|
||||||
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
||||||
String path = world.getName()+yml.options().pathSeparator();
|
String path = world.getName()+split;
|
||||||
yml.set(path+"title",bbs.title.getText());
|
yml.set(path+"title",bbs.title.getText());
|
||||||
yml.set(path+"color",bbs.color.name());
|
yml.set(path+"color",bbs.color.name());
|
||||||
yml.set(path+"style",bbs.style.name());
|
yml.set(path+"style",bbs.style.name());
|
||||||
|
yml.set(path+"create_frog",bbs.k());
|
||||||
|
yml.set(path+"darken_sky",bbs.i());
|
||||||
|
yml.set(path+"play_boss_music",bbs.j());
|
||||||
}catch (ReflectiveOperationException e){
|
}catch (ReflectiveOperationException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -49,6 +54,7 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(!file.exists()) return;
|
if(!file.exists()) return;
|
||||||
Lang.info("Enabling BossBar fix...");
|
Lang.info("Enabling BossBar fix...");
|
||||||
YamlConfiguration yml = new YamlConfiguration();
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
|
char split = yml.options().pathSeparator();
|
||||||
try{
|
try{
|
||||||
yml.load(file);
|
yml.load(file);
|
||||||
}catch (InvalidConfigurationException | IOException e) {
|
}catch (InvalidConfigurationException | IOException e) {
|
||||||
@@ -62,24 +68,27 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("c");
|
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("c");
|
||||||
BossBattleServer.setAccessible(true);
|
BossBattleServer.setAccessible(true);
|
||||||
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
||||||
String path = world.getName()+".";
|
String path = world.getName()+split;
|
||||||
bbs.title = CraftChatMessage.fromString(yml.getString(path+"title"), true)[0];
|
bbs.title = CraftChatMessage.fromString(yml.getString(path+"title"), true)[0];
|
||||||
bbs.color = BossBattle.BarColor.valueOf(yml.getString(path+"color"));
|
bbs.color = BossBattle.BarColor.valueOf(yml.getString(path+"color"));
|
||||||
bbs.style = BossBattle.BarStyle.valueOf(yml.getString(path+"style"));
|
bbs.style = BossBattle.BarStyle.valueOf(yml.getString(path+"style"));
|
||||||
|
bbs.setCreateFog(yml.getBoolean(path+"create_frog",true));
|
||||||
|
bbs.setDarkenSky(yml.getBoolean(path+"darken_sky",true));
|
||||||
|
bbs.setPlayMusic(yml.getBoolean(path+"play_boss_music",true));
|
||||||
}catch (ReflectiveOperationException e){
|
}catch (ReflectiveOperationException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public void setBossBar(World world,String title,String color,String style){
|
public void setBossBar(World world, final MyDragon myDragon){
|
||||||
BossBattleServer bbs = new BossBattleServer(
|
BossBattleServer bbs = new BossBattleServer(
|
||||||
CraftChatMessage.fromString(title, true)[0],
|
CraftChatMessage.fromString(myDragon.display_name, true)[0],
|
||||||
convertColor(color),
|
convertColor(myDragon.bossbar_color),
|
||||||
convertStyle(style)
|
convertStyle(myDragon.bossbar_style)
|
||||||
);
|
);
|
||||||
bbs.setCreateFog(true);
|
bbs.setCreateFog(myDragon.bossbar_create_frog);
|
||||||
bbs.setDarkenSky(true);
|
bbs.setDarkenSky(myDragon.bossbar_darken_sky);
|
||||||
bbs.setPlayMusic(true);
|
bbs.setPlayMusic(myDragon.bossbar_play_boss_music);
|
||||||
try{
|
try{
|
||||||
Object edb = DragonManager.getEnderDragonBattle(world);
|
Object edb = DragonManager.getEnderDragonBattle(world);
|
||||||
assert edb != null;
|
assert edb != null;
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
|||||||
import org.bukkit.craftbukkit.v1_13_R1.util.CraftChatMessage;
|
import org.bukkit.craftbukkit.v1_13_R1.util.CraftChatMessage;
|
||||||
import pers.xanadu.enderdragon.config.Lang;
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
import pers.xanadu.enderdragon.manager.DragonManager;
|
import pers.xanadu.enderdragon.manager.DragonManager;
|
||||||
import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager;
|
import pers.xanadu.enderdragon.metadata.MyDragon;
|
||||||
|
import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -17,11 +18,12 @@ import java.util.List;
|
|||||||
|
|
||||||
import static pers.xanadu.enderdragon.EnderDragon.plugin;
|
import static pers.xanadu.enderdragon.EnderDragon.plugin;
|
||||||
|
|
||||||
public class BossBarManager implements I_BossBarManager {
|
public class BossBarManager implements IBossBarManager {
|
||||||
private Field BossBattleServer = null;
|
private Field BossBattleServer = null;
|
||||||
public void saveBossBarData(List<World> worlds){
|
public void saveBossBarData(List<World> worlds){
|
||||||
File file = new File(plugin.getDataFolder(),"world_data.yml");
|
File file = new File(plugin.getDataFolder(),"world_data.yml");
|
||||||
YamlConfiguration yml = new YamlConfiguration();
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
|
char split = yml.options().pathSeparator();
|
||||||
worlds.forEach(world -> {
|
worlds.forEach(world -> {
|
||||||
try{
|
try{
|
||||||
Object edb = DragonManager.getEnderDragonBattle(world);
|
Object edb = DragonManager.getEnderDragonBattle(world);
|
||||||
@@ -29,10 +31,13 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("c");
|
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("c");
|
||||||
BossBattleServer.setAccessible(true);
|
BossBattleServer.setAccessible(true);
|
||||||
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
||||||
String path = world.getName() + yml.options().pathSeparator();
|
String path = world.getName() + split;
|
||||||
yml.set(path+"title",bbs.title.getText());
|
yml.set(path+"title",bbs.title.getText());
|
||||||
yml.set(path+"color",bbs.color.name());
|
yml.set(path+"color",bbs.color.name());
|
||||||
yml.set(path+"style",bbs.style.name());
|
yml.set(path+"style",bbs.style.name());
|
||||||
|
yml.set(path+"create_frog",bbs.p());
|
||||||
|
yml.set(path+"darken_sky",bbs.n());
|
||||||
|
yml.set(path+"play_boss_music",bbs.o());
|
||||||
}catch (ReflectiveOperationException e){
|
}catch (ReflectiveOperationException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -49,6 +54,7 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(!file.exists()) return;
|
if(!file.exists()) return;
|
||||||
Lang.info("Enabling BossBar fix...");
|
Lang.info("Enabling BossBar fix...");
|
||||||
YamlConfiguration yml = new YamlConfiguration();
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
|
char split = yml.options().pathSeparator();
|
||||||
try{
|
try{
|
||||||
yml.load(file);
|
yml.load(file);
|
||||||
}catch (InvalidConfigurationException | IOException e) {
|
}catch (InvalidConfigurationException | IOException e) {
|
||||||
@@ -62,24 +68,27 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("c");
|
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("c");
|
||||||
BossBattleServer.setAccessible(true);
|
BossBattleServer.setAccessible(true);
|
||||||
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
||||||
String path = world.getName()+".";
|
String path = world.getName()+split;
|
||||||
bbs.title = CraftChatMessage.fromString(yml.getString(path+"title"), true)[0];
|
bbs.title = CraftChatMessage.fromString(yml.getString(path+"title"), true)[0];
|
||||||
bbs.color = BossBattle.BarColor.valueOf(yml.getString(path+"color"));
|
bbs.color = BossBattle.BarColor.valueOf(yml.getString(path+"color"));
|
||||||
bbs.style = BossBattle.BarStyle.valueOf(yml.getString(path+"style"));
|
bbs.style = BossBattle.BarStyle.valueOf(yml.getString(path+"style"));
|
||||||
|
bbs.setCreateFog(yml.getBoolean(path+"create_frog",true));
|
||||||
|
bbs.setDarkenSky(yml.getBoolean(path+"darken_sky",true));
|
||||||
|
bbs.setPlayMusic(yml.getBoolean(path+"play_boss_music",true));
|
||||||
}catch (ReflectiveOperationException e){
|
}catch (ReflectiveOperationException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public void setBossBar(World world,String title,String color,String style){
|
public void setBossBar(World world, final MyDragon myDragon){
|
||||||
BossBattleServer bbs = new BossBattleServer(
|
BossBattleServer bbs = new BossBattleServer(
|
||||||
CraftChatMessage.fromString(title, true)[0],
|
CraftChatMessage.fromString(myDragon.display_name, true)[0],
|
||||||
convertColor(color),
|
convertColor(myDragon.bossbar_color),
|
||||||
convertStyle(style)
|
convertStyle(myDragon.bossbar_style)
|
||||||
);
|
);
|
||||||
bbs.setCreateFog(true);
|
bbs.setCreateFog(myDragon.bossbar_create_frog);
|
||||||
bbs.setDarkenSky(true);
|
bbs.setDarkenSky(myDragon.bossbar_darken_sky);
|
||||||
bbs.setPlayMusic(true);
|
bbs.setPlayMusic(myDragon.bossbar_play_boss_music);
|
||||||
try{
|
try{
|
||||||
Object edb = DragonManager.getEnderDragonBattle(world);
|
Object edb = DragonManager.getEnderDragonBattle(world);
|
||||||
assert edb != null;
|
assert edb != null;
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
|||||||
import org.bukkit.craftbukkit.v1_13_R2.util.CraftChatMessage;
|
import org.bukkit.craftbukkit.v1_13_R2.util.CraftChatMessage;
|
||||||
import pers.xanadu.enderdragon.config.Lang;
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
import pers.xanadu.enderdragon.manager.DragonManager;
|
import pers.xanadu.enderdragon.manager.DragonManager;
|
||||||
import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager;
|
import pers.xanadu.enderdragon.metadata.MyDragon;
|
||||||
|
import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -17,11 +18,12 @@ import java.util.List;
|
|||||||
|
|
||||||
import static pers.xanadu.enderdragon.EnderDragon.plugin;
|
import static pers.xanadu.enderdragon.EnderDragon.plugin;
|
||||||
|
|
||||||
public class BossBarManager implements I_BossBarManager {
|
public class BossBarManager implements IBossBarManager {
|
||||||
private Field BossBattleServer = null;
|
private Field BossBattleServer = null;
|
||||||
public void saveBossBarData(List<World> worlds){
|
public void saveBossBarData(List<World> worlds){
|
||||||
File file = new File(plugin.getDataFolder(),"world_data.yml");
|
File file = new File(plugin.getDataFolder(),"world_data.yml");
|
||||||
YamlConfiguration yml = new YamlConfiguration();
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
|
char split = yml.options().pathSeparator();
|
||||||
worlds.forEach(world -> {
|
worlds.forEach(world -> {
|
||||||
try{
|
try{
|
||||||
Object edb = DragonManager.getEnderDragonBattle(world);
|
Object edb = DragonManager.getEnderDragonBattle(world);
|
||||||
@@ -29,10 +31,13 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle");
|
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle");
|
||||||
BossBattleServer.setAccessible(true);
|
BossBattleServer.setAccessible(true);
|
||||||
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
||||||
String path = world.getName() + yml.options().pathSeparator();
|
String path = world.getName() + split;
|
||||||
yml.set(path+"title",bbs.title.getText());
|
yml.set(path+"title",bbs.title.getText());
|
||||||
yml.set(path+"color",bbs.color.name());
|
yml.set(path+"color",bbs.color.name());
|
||||||
yml.set(path+"style",bbs.style.name());
|
yml.set(path+"style",bbs.style.name());
|
||||||
|
yml.set(path+"create_frog",bbs.isCreateFog());
|
||||||
|
yml.set(path+"darken_sky",bbs.isDarkenSky());
|
||||||
|
yml.set(path+"play_boss_music",bbs.isPlayMusic());
|
||||||
}catch (ReflectiveOperationException e){
|
}catch (ReflectiveOperationException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -49,6 +54,7 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(!file.exists()) return;
|
if(!file.exists()) return;
|
||||||
Lang.info("Enabling BossBar fix...");
|
Lang.info("Enabling BossBar fix...");
|
||||||
YamlConfiguration yml = new YamlConfiguration();
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
|
char split = yml.options().pathSeparator();
|
||||||
try{
|
try{
|
||||||
yml.load(file);
|
yml.load(file);
|
||||||
}catch (InvalidConfigurationException | IOException e) {
|
}catch (InvalidConfigurationException | IOException e) {
|
||||||
@@ -62,24 +68,27 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle");
|
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle");
|
||||||
BossBattleServer.setAccessible(true);
|
BossBattleServer.setAccessible(true);
|
||||||
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
||||||
String path = world.getName() + yml.options().pathSeparator();
|
String path = world.getName() + split;
|
||||||
bbs.title = CraftChatMessage.fromString(yml.getString(path+"title"), true)[0];
|
bbs.title = CraftChatMessage.fromString(yml.getString(path+"title"), true)[0];
|
||||||
bbs.color = BossBattle.BarColor.valueOf(yml.getString(path+"color"));
|
bbs.color = BossBattle.BarColor.valueOf(yml.getString(path+"color"));
|
||||||
bbs.style = BossBattle.BarStyle.valueOf(yml.getString(path+"style"));
|
bbs.style = BossBattle.BarStyle.valueOf(yml.getString(path+"style"));
|
||||||
|
bbs.setCreateFog(yml.getBoolean(path+"create_frog",true));
|
||||||
|
bbs.setDarkenSky(yml.getBoolean(path+"darken_sky",true));
|
||||||
|
bbs.setPlayMusic(yml.getBoolean(path+"play_boss_music",true));
|
||||||
}catch (ReflectiveOperationException e){
|
}catch (ReflectiveOperationException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public void setBossBar(World world,String title,String color,String style){
|
public void setBossBar(World world, final MyDragon myDragon){
|
||||||
BossBattleServer bbs = new BossBattleServer(
|
BossBattleServer bbs = new BossBattleServer(
|
||||||
CraftChatMessage.fromString(title, true)[0],
|
CraftChatMessage.fromString(myDragon.display_name, true)[0],
|
||||||
convertColor(color),
|
convertColor(myDragon.bossbar_color),
|
||||||
convertStyle(style)
|
convertStyle(myDragon.bossbar_style)
|
||||||
);
|
);
|
||||||
bbs.setCreateFog(true);
|
bbs.setCreateFog(myDragon.bossbar_create_frog);
|
||||||
bbs.setDarkenSky(true);
|
bbs.setDarkenSky(myDragon.bossbar_darken_sky);
|
||||||
bbs.setPlayMusic(true);
|
bbs.setPlayMusic(myDragon.bossbar_play_boss_music);
|
||||||
try{
|
try{
|
||||||
Object edb = DragonManager.getEnderDragonBattle(world);
|
Object edb = DragonManager.getEnderDragonBattle(world);
|
||||||
assert edb != null;
|
assert edb != null;
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
|||||||
import org.bukkit.craftbukkit.v1_14_R1.util.CraftChatMessage;
|
import org.bukkit.craftbukkit.v1_14_R1.util.CraftChatMessage;
|
||||||
import pers.xanadu.enderdragon.config.Lang;
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
import pers.xanadu.enderdragon.manager.DragonManager;
|
import pers.xanadu.enderdragon.manager.DragonManager;
|
||||||
import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager;
|
import pers.xanadu.enderdragon.metadata.MyDragon;
|
||||||
|
import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -17,11 +18,12 @@ import java.util.List;
|
|||||||
|
|
||||||
import static pers.xanadu.enderdragon.EnderDragon.plugin;
|
import static pers.xanadu.enderdragon.EnderDragon.plugin;
|
||||||
|
|
||||||
public class BossBarManager implements I_BossBarManager {
|
public class BossBarManager implements IBossBarManager {
|
||||||
private Field BossBattleServer = null;
|
private Field BossBattleServer = null;
|
||||||
public void saveBossBarData(List<World> worlds){
|
public void saveBossBarData(List<World> worlds){
|
||||||
File file = new File(plugin.getDataFolder(),"world_data.yml");
|
File file = new File(plugin.getDataFolder(),"world_data.yml");
|
||||||
YamlConfiguration yml = new YamlConfiguration();
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
|
char split = yml.options().pathSeparator();
|
||||||
worlds.forEach(world -> {
|
worlds.forEach(world -> {
|
||||||
try{
|
try{
|
||||||
Object edb = DragonManager.getEnderDragonBattle(world);
|
Object edb = DragonManager.getEnderDragonBattle(world);
|
||||||
@@ -29,10 +31,13 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle");
|
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle");
|
||||||
BossBattleServer.setAccessible(true);
|
BossBattleServer.setAccessible(true);
|
||||||
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
||||||
String path = world.getName() + yml.options().pathSeparator();
|
String path = world.getName() + split;
|
||||||
yml.set(path+"title",bbs.title.getText());
|
yml.set(path+"title",bbs.title.getText());
|
||||||
yml.set(path+"color",bbs.color.name());
|
yml.set(path+"color",bbs.color.name());
|
||||||
yml.set(path+"style",bbs.style.name());
|
yml.set(path+"style",bbs.style.name());
|
||||||
|
yml.set(path+"create_frog",bbs.isCreateFog());
|
||||||
|
yml.set(path+"darken_sky",bbs.isDarkenSky());
|
||||||
|
yml.set(path+"play_boss_music",bbs.isPlayMusic());
|
||||||
}catch (ReflectiveOperationException e){
|
}catch (ReflectiveOperationException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -49,6 +54,7 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(!file.exists()) return;
|
if(!file.exists()) return;
|
||||||
Lang.info("Enabling BossBar fix...");
|
Lang.info("Enabling BossBar fix...");
|
||||||
YamlConfiguration yml = new YamlConfiguration();
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
|
char split = yml.options().pathSeparator();
|
||||||
try{
|
try{
|
||||||
yml.load(file);
|
yml.load(file);
|
||||||
}catch (InvalidConfigurationException | IOException e) {
|
}catch (InvalidConfigurationException | IOException e) {
|
||||||
@@ -62,15 +68,18 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle");
|
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle");
|
||||||
BossBattleServer.setAccessible(true);
|
BossBattleServer.setAccessible(true);
|
||||||
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
||||||
String path = world.getName() + yml.options().pathSeparator();
|
String path = world.getName() + split;
|
||||||
bbs.title = CraftChatMessage.fromString(yml.getString(path+"title"), true)[0];
|
bbs.title = CraftChatMessage.fromString(yml.getString(path+"title"), true)[0];
|
||||||
bbs.color = BossBattle.BarColor.valueOf(yml.getString(path+"color"));
|
bbs.color = BossBattle.BarColor.valueOf(yml.getString(path+"color"));
|
||||||
bbs.style = BossBattle.BarStyle.valueOf(yml.getString(path+"style"));
|
bbs.style = BossBattle.BarStyle.valueOf(yml.getString(path+"style"));
|
||||||
|
bbs.setCreateFog(yml.getBoolean(path+"create_frog",true));
|
||||||
|
bbs.setDarkenSky(yml.getBoolean(path+"darken_sky",true));
|
||||||
|
bbs.setPlayMusic(yml.getBoolean(path+"play_boss_music",true));
|
||||||
}catch (ReflectiveOperationException e){
|
}catch (ReflectiveOperationException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public void setBossBar(World world,String title,String color,String style){
|
public void setBossBar(World world, final MyDragon myDragon){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,8 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
|||||||
import org.bukkit.craftbukkit.v1_15_R1.util.CraftChatMessage;
|
import org.bukkit.craftbukkit.v1_15_R1.util.CraftChatMessage;
|
||||||
import pers.xanadu.enderdragon.config.Lang;
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
import pers.xanadu.enderdragon.manager.DragonManager;
|
import pers.xanadu.enderdragon.manager.DragonManager;
|
||||||
import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager;
|
import pers.xanadu.enderdragon.metadata.MyDragon;
|
||||||
|
import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -17,11 +18,12 @@ import java.util.List;
|
|||||||
|
|
||||||
import static pers.xanadu.enderdragon.EnderDragon.plugin;
|
import static pers.xanadu.enderdragon.EnderDragon.plugin;
|
||||||
|
|
||||||
public class BossBarManager implements I_BossBarManager {
|
public class BossBarManager implements IBossBarManager {
|
||||||
private Field BossBattleServer = null;
|
private Field BossBattleServer = null;
|
||||||
public void saveBossBarData(List<World> worlds){
|
public void saveBossBarData(List<World> worlds){
|
||||||
File file = new File(plugin.getDataFolder(),"world_data.yml");
|
File file = new File(plugin.getDataFolder(),"world_data.yml");
|
||||||
YamlConfiguration yml = new YamlConfiguration();
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
|
char split = yml.options().pathSeparator();
|
||||||
worlds.forEach(world -> {
|
worlds.forEach(world -> {
|
||||||
try{
|
try{
|
||||||
Object edb = DragonManager.getEnderDragonBattle(world);
|
Object edb = DragonManager.getEnderDragonBattle(world);
|
||||||
@@ -29,10 +31,13 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle");
|
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle");
|
||||||
BossBattleServer.setAccessible(true);
|
BossBattleServer.setAccessible(true);
|
||||||
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
||||||
String path = world.getName() + yml.options().pathSeparator();
|
String path = world.getName() + split;
|
||||||
yml.set(path+"title",bbs.title.getText());
|
yml.set(path+"title",bbs.title.getText());
|
||||||
yml.set(path+"color",bbs.color.name());
|
yml.set(path+"color",bbs.color.name());
|
||||||
yml.set(path+"style",bbs.style.name());
|
yml.set(path+"style",bbs.style.name());
|
||||||
|
yml.set(path+"create_frog",bbs.isCreateFog());
|
||||||
|
yml.set(path+"darken_sky",bbs.isDarkenSky());
|
||||||
|
yml.set(path+"play_boss_music",bbs.isPlayMusic());
|
||||||
}catch (ReflectiveOperationException e){
|
}catch (ReflectiveOperationException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -49,6 +54,7 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(!file.exists()) return;
|
if(!file.exists()) return;
|
||||||
Lang.info("Enabling BossBar fix...");
|
Lang.info("Enabling BossBar fix...");
|
||||||
YamlConfiguration yml = new YamlConfiguration();
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
|
char split = yml.options().pathSeparator();
|
||||||
try{
|
try{
|
||||||
yml.load(file);
|
yml.load(file);
|
||||||
}catch (InvalidConfigurationException | IOException e) {
|
}catch (InvalidConfigurationException | IOException e) {
|
||||||
@@ -62,16 +68,19 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle");
|
if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle");
|
||||||
BossBattleServer.setAccessible(true);
|
BossBattleServer.setAccessible(true);
|
||||||
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
BossBattleServer bbs = (BossBattleServer) BossBattleServer.get(edb);
|
||||||
String path = world.getName() + yml.options().pathSeparator();
|
String path = world.getName() + split;
|
||||||
bbs.title = CraftChatMessage.fromString(yml.getString(path+"title"), true)[0];
|
bbs.title = CraftChatMessage.fromString(yml.getString(path+"title"), true)[0];
|
||||||
bbs.color = BossBattle.BarColor.valueOf(yml.getString(path+"color"));
|
bbs.color = BossBattle.BarColor.valueOf(yml.getString(path+"color"));
|
||||||
bbs.style = BossBattle.BarStyle.valueOf(yml.getString(path+"style"));
|
bbs.style = BossBattle.BarStyle.valueOf(yml.getString(path+"style"));
|
||||||
|
bbs.setCreateFog(yml.getBoolean(path+"create_frog",true));
|
||||||
|
bbs.setDarkenSky(yml.getBoolean(path+"darken_sky",true));
|
||||||
|
bbs.setPlayMusic(yml.getBoolean(path+"play_boss_music",true));
|
||||||
}catch (ReflectiveOperationException e){
|
}catch (ReflectiveOperationException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public void setBossBar(World world,String title,String color,String style){
|
public void setBossBar(World world, final MyDragon myDragon){
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+18
-9
@@ -1,14 +1,12 @@
|
|||||||
package pers.xanadu.enderdragon.nms.BossBar.v1_16_R1_above;
|
package pers.xanadu.enderdragon.nms.BossBar.v1_16_R1_above;
|
||||||
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.boss.BarColor;
|
import org.bukkit.boss.*;
|
||||||
import org.bukkit.boss.BarStyle;
|
|
||||||
import org.bukkit.boss.BossBar;
|
|
||||||
import org.bukkit.boss.DragonBattle;
|
|
||||||
import org.bukkit.configuration.InvalidConfigurationException;
|
import org.bukkit.configuration.InvalidConfigurationException;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import pers.xanadu.enderdragon.config.Lang;
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager;
|
import pers.xanadu.enderdragon.metadata.MyDragon;
|
||||||
|
import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -16,18 +14,22 @@ import java.util.List;
|
|||||||
|
|
||||||
import static pers.xanadu.enderdragon.EnderDragon.plugin;
|
import static pers.xanadu.enderdragon.EnderDragon.plugin;
|
||||||
|
|
||||||
public class BossBarManager implements I_BossBarManager {
|
public class BossBarManager implements IBossBarManager {
|
||||||
public void saveBossBarData(List<World> worlds){
|
public void saveBossBarData(List<World> worlds){
|
||||||
File file = new File(plugin.getDataFolder(),"world_data.yml");
|
File file = new File(plugin.getDataFolder(),"world_data.yml");
|
||||||
YamlConfiguration yml = new YamlConfiguration();
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
|
char split = yml.options().pathSeparator();
|
||||||
worlds.forEach(world -> {
|
worlds.forEach(world -> {
|
||||||
DragonBattle battle = world.getEnderDragonBattle();
|
DragonBattle battle = world.getEnderDragonBattle();
|
||||||
if(battle == null) return;
|
if(battle == null) return;
|
||||||
BossBar bossBar = battle.getBossBar();
|
BossBar bossBar = battle.getBossBar();
|
||||||
String path = world.getName() + yml.options().pathSeparator();
|
String path = world.getName() + split;
|
||||||
yml.set(path+"title",bossBar.getTitle());
|
yml.set(path+"title",bossBar.getTitle());
|
||||||
yml.set(path+"color",bossBar.getColor().name());
|
yml.set(path+"color",bossBar.getColor().name());
|
||||||
yml.set(path+"style",bossBar.getStyle().name());
|
yml.set(path+"style",bossBar.getStyle().name());
|
||||||
|
yml.set(path+"create_frog",bossBar.hasFlag(BarFlag.CREATE_FOG));
|
||||||
|
yml.set(path+"darken_sky",bossBar.hasFlag(BarFlag.DARKEN_SKY));
|
||||||
|
yml.set(path+"play_boss_music",bossBar.hasFlag(BarFlag.PLAY_BOSS_MUSIC));
|
||||||
});
|
});
|
||||||
try{
|
try{
|
||||||
yml.save(file);
|
yml.save(file);
|
||||||
@@ -41,6 +43,7 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
if(!file.exists()) return;
|
if(!file.exists()) return;
|
||||||
Lang.info("Enabling BossBar fix...");
|
Lang.info("Enabling BossBar fix...");
|
||||||
YamlConfiguration yml = new YamlConfiguration();
|
YamlConfiguration yml = new YamlConfiguration();
|
||||||
|
char split = yml.options().pathSeparator();
|
||||||
try{
|
try{
|
||||||
yml.load(file);
|
yml.load(file);
|
||||||
}catch (InvalidConfigurationException | IOException e) {
|
}catch (InvalidConfigurationException | IOException e) {
|
||||||
@@ -51,12 +54,18 @@ public class BossBarManager implements I_BossBarManager {
|
|||||||
DragonBattle battle = world.getEnderDragonBattle();
|
DragonBattle battle = world.getEnderDragonBattle();
|
||||||
if(battle == null) return;
|
if(battle == null) return;
|
||||||
BossBar bossBar = battle.getBossBar();
|
BossBar bossBar = battle.getBossBar();
|
||||||
String path = world.getName() + yml.options().pathSeparator();
|
String path = world.getName() + split;
|
||||||
bossBar.setTitle(yml.getString(path+"title"));
|
bossBar.setTitle(yml.getString(path+"title"));
|
||||||
bossBar.setColor(BarColor.valueOf(yml.getString(path+"color")));
|
bossBar.setColor(BarColor.valueOf(yml.getString(path+"color")));
|
||||||
bossBar.setStyle(BarStyle.valueOf(yml.getString(path+"style")));
|
bossBar.setStyle(BarStyle.valueOf(yml.getString(path+"style")));
|
||||||
|
if(yml.getBoolean(path+"create_frog",true)) bossBar.addFlag(BarFlag.CREATE_FOG);
|
||||||
|
else bossBar.removeFlag(BarFlag.CREATE_FOG);
|
||||||
|
if(yml.getBoolean(path+"darken_sky",true)) bossBar.addFlag(BarFlag.DARKEN_SKY);
|
||||||
|
else bossBar.removeFlag(BarFlag.DARKEN_SKY);
|
||||||
|
if(yml.getBoolean(path+"play_boss_music",true)) bossBar.addFlag(BarFlag.PLAY_BOSS_MUSIC);
|
||||||
|
else bossBar.removeFlag(BarFlag.PLAY_BOSS_MUSIC);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public void setBossBar(World world,String title,String color,String style){
|
public void setBossBar(World world, final MyDragon myDragon){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-7
@@ -3,13 +3,7 @@ package pers.xanadu.enderdragon.nms.NMSItem;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.jetbrains.annotations.TestOnly;
|
import org.jetbrains.annotations.TestOnly;
|
||||||
|
|
||||||
public interface I_NMSItemManager {
|
public interface INMSItemManager {
|
||||||
ItemStack readAsItem(String nbt);
|
ItemStack readAsItem(String nbt);
|
||||||
ItemStack cpdToItem(Object cpd);
|
ItemStack cpdToItem(Object cpd);
|
||||||
@TestOnly
|
|
||||||
Object parseNBT(Object nbt_base);
|
|
||||||
@TestOnly
|
|
||||||
Object readAsNBTBase(String raw);
|
|
||||||
@TestOnly
|
|
||||||
Object getNBTBase(Object obj);
|
|
||||||
}
|
}
|
||||||
-146
@@ -1,146 +0,0 @@
|
|||||||
package pers.xanadu.enderdragon.nms.NMSItem.v1_12_R1;
|
|
||||||
|
|
||||||
import net.minecraft.server.v1_12_R1.*;
|
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
public class CraftNBTTagConfigSerializer {
|
|
||||||
private static final Pattern ARRAY = Pattern.compile("^\\[.*]");
|
|
||||||
private static final Pattern INTEGER = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)?i", 2);
|
|
||||||
private static final Pattern DOUBLE = Pattern.compile("[-+]?(?:[0-9]+[.]?|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?d", 2);
|
|
||||||
private static final Pattern byte_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)b", 2);
|
|
||||||
private static final Pattern short_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)s", 2);
|
|
||||||
private static final Pattern integer_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)");
|
|
||||||
private static final Pattern long_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)l", 2);
|
|
||||||
private static final Pattern float_format = Pattern.compile("[-+]?(?:[0-9]+[.]?|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?f", 2);
|
|
||||||
private static final Pattern double_format = Pattern.compile("[-+]?(?:[0-9]+[.]?|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?d", 2);
|
|
||||||
private static final Pattern double_format2 = Pattern.compile("[-+]?(?:[0-9]+[.]|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?", 2);
|
|
||||||
|
|
||||||
|
|
||||||
public CraftNBTTagConfigSerializer() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Object serialize(NBTBase base) {
|
|
||||||
if (base instanceof NBTTagCompound) {
|
|
||||||
Map<String, Object> innerMap = new HashMap();
|
|
||||||
|
|
||||||
for (String key : ((NBTTagCompound) base).c()) {
|
|
||||||
innerMap.put(key, serialize(((NBTTagCompound) base).get(key)));
|
|
||||||
}
|
|
||||||
|
|
||||||
return innerMap;
|
|
||||||
}
|
|
||||||
if (base instanceof NBTTagString) {
|
|
||||||
return ((NBTTagString) base).c_();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return base instanceof NBTTagInt ? base + "i" : base.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static NBTBase deserialize(Object object) {
|
|
||||||
if (object instanceof Map) {
|
|
||||||
NBTTagCompound compound = new NBTTagCompound();
|
|
||||||
for (Object obj : ((Map) object).entrySet()) {
|
|
||||||
Map.Entry<String, Object> entry = (Map.Entry) obj;
|
|
||||||
compound.set(entry.getKey(), deserialize(entry.getValue()));
|
|
||||||
}
|
|
||||||
return compound;
|
|
||||||
} else if (!(object instanceof List)) {
|
|
||||||
if (object instanceof String) {
|
|
||||||
String string = (String)object;
|
|
||||||
if (ARRAY.matcher(string).matches()) {
|
|
||||||
try {
|
|
||||||
Constructor<MojangsonParser> constructor = MojangsonParser.class.getDeclaredConstructor(String.class);
|
|
||||||
MojangsonParser parser = constructor.newInstance(string);
|
|
||||||
Method parseArray = MojangsonParser.class.getDeclaredMethod("k");
|
|
||||||
parseArray.setAccessible(true);
|
|
||||||
return (NBTBase) parseArray.invoke(parser);
|
|
||||||
} catch (Throwable e) {
|
|
||||||
throw new RuntimeException("Could not deserialize found list ", e);
|
|
||||||
}
|
|
||||||
} else if (INTEGER.matcher(string).matches()) {
|
|
||||||
return new NBTTagInt(Integer.parseInt(string.substring(0, string.length() - 1)));
|
|
||||||
} else if (DOUBLE.matcher(string).matches()) {
|
|
||||||
return new NBTTagDouble(Double.parseDouble(string.substring(0, string.length() - 1)));
|
|
||||||
} else {
|
|
||||||
try{
|
|
||||||
Constructor<MojangsonParser> constructor = MojangsonParser.class.getDeclaredConstructor(String.class);
|
|
||||||
MojangsonParser parser = constructor.newInstance("");
|
|
||||||
Method parseLiteral = MojangsonParser.class.getDeclaredMethod("c", String.class);
|
|
||||||
parseLiteral.setAccessible(true);
|
|
||||||
NBTBase nbtBase = (NBTBase) parseLiteral.invoke(parser,string);
|
|
||||||
if (nbtBase instanceof NBTTagInt) {
|
|
||||||
return new NBTTagString(nbtBase.toString());
|
|
||||||
} else {
|
|
||||||
return (nbtBase instanceof NBTTagDouble ? new NBTTagString(String.valueOf(((NBTTagDouble)nbtBase).asDouble())) : nbtBase);
|
|
||||||
}
|
|
||||||
}catch (ReflectiveOperationException e){
|
|
||||||
throw new RuntimeException("Could not deserialize NBTBase");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new RuntimeException("Could not deserialize NBTBase");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
List<Object> list = (List)object;
|
|
||||||
if (list.isEmpty()) {
|
|
||||||
return new NBTTagList();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
NBTTagList tagList = new NBTTagList();
|
|
||||||
for (Object tag : list) {
|
|
||||||
tagList.add(deserialize(tag));
|
|
||||||
}
|
|
||||||
return tagList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public static NBTBase v1_12_R1_c(String raw) {
|
|
||||||
try {
|
|
||||||
if (float_format.matcher(raw).matches()) {
|
|
||||||
return new NBTTagFloat(Float.parseFloat(raw.substring(0, raw.length() - 1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (byte_format.matcher(raw).matches()) {
|
|
||||||
return new NBTTagByte(Byte.parseByte(raw.substring(0, raw.length() - 1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (long_format.matcher(raw).matches()) {
|
|
||||||
return new NBTTagLong(Long.parseLong(raw.substring(0, raw.length() - 1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (short_format.matcher(raw).matches()) {
|
|
||||||
return new NBTTagShort(Short.parseShort(raw.substring(0, raw.length() - 1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (integer_format.matcher(raw).matches()) {
|
|
||||||
return new NBTTagInt(Integer.parseInt(raw));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (double_format.matcher(raw).matches()) {
|
|
||||||
return new NBTTagDouble(Double.parseDouble(raw.substring(0, raw.length() - 1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (double_format2.matcher(raw).matches()) {
|
|
||||||
return new NBTTagDouble(Double.parseDouble(raw));
|
|
||||||
}
|
|
||||||
|
|
||||||
if ("true".equalsIgnoreCase(raw)) {
|
|
||||||
return new NBTTagByte((byte)1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ("false".equalsIgnoreCase(raw)) {
|
|
||||||
return new NBTTagByte((byte)0);
|
|
||||||
}
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return new NBTTagString(raw);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,9 +4,9 @@ import net.minecraft.server.v1_12_R1.*;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack;
|
import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack;
|
||||||
import pers.xanadu.enderdragon.config.Lang;
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
import pers.xanadu.enderdragon.nms.NMSItem.I_NMSItemManager;
|
import pers.xanadu.enderdragon.nms.NMSItem.INMSItemManager;
|
||||||
|
|
||||||
public class NMSItemManager implements I_NMSItemManager {
|
public class NMSItemManager implements INMSItemManager {
|
||||||
|
|
||||||
public org.bukkit.inventory.ItemStack readAsItem(String nbt){
|
public org.bukkit.inventory.ItemStack readAsItem(String nbt){
|
||||||
try {
|
try {
|
||||||
@@ -22,14 +22,5 @@ public class NMSItemManager implements I_NMSItemManager {
|
|||||||
ItemStack ei = new ItemStack((NBTTagCompound) cpd);
|
ItemStack ei = new ItemStack((NBTTagCompound) cpd);
|
||||||
return CraftItemStack.asBukkitCopy(ei);
|
return CraftItemStack.asBukkitCopy(ei);
|
||||||
}
|
}
|
||||||
public Object parseNBT(Object nbt_base){
|
|
||||||
return CraftNBTTagConfigSerializer.serialize((NBTBase) nbt_base);
|
|
||||||
}
|
|
||||||
public Object readAsNBTBase(String raw){
|
|
||||||
return CraftNBTTagConfigSerializer.v1_12_R1_c(raw);
|
|
||||||
}
|
|
||||||
public Object getNBTBase(Object obj){
|
|
||||||
return CraftNBTTagConfigSerializer.deserialize(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
-151
@@ -1,151 +0,0 @@
|
|||||||
package pers.xanadu.enderdragon.nms.NMSItem.v1_13_R1;
|
|
||||||
|
|
||||||
import com.mojang.brigadier.StringReader;
|
|
||||||
import net.minecraft.server.v1_13_R1.*;
|
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
public class CraftNBTTagConfigSerializer {
|
|
||||||
private static final Pattern ARRAY = Pattern.compile("^\\[.*]");
|
|
||||||
private static final Pattern INTEGER = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)?i", 2);
|
|
||||||
private static final Pattern DOUBLE = Pattern.compile("[-+]?(?:[0-9]+[.]?|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?d", 2);
|
|
||||||
public static final MojangsonParser MOJANGSON_PARSER = new MojangsonParser(new StringReader(""));
|
|
||||||
private static final Pattern byte_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)b", 2);
|
|
||||||
private static final Pattern short_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)s", 2);
|
|
||||||
private static final Pattern integer_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)");
|
|
||||||
private static final Pattern long_format = Pattern.compile("[-+]?(?:0|[1-9][0-9]*)l", 2);
|
|
||||||
private static final Pattern float_format = Pattern.compile("[-+]?(?:[0-9]+[.]?|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?f", 2);
|
|
||||||
private static final Pattern double_format = Pattern.compile("[-+]?(?:[0-9]+[.]?|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?d", 2);
|
|
||||||
private static final Pattern double_format_2 = Pattern.compile("[-+]?(?:[0-9]+[.]|[0-9]*[.][0-9]+)(?:e[-+]?[0-9]+)?", 2);
|
|
||||||
|
|
||||||
public CraftNBTTagConfigSerializer() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Object serialize(NBTBase base) {
|
|
||||||
if (base instanceof NBTTagCompound) {
|
|
||||||
Map<String, Object> innerMap = new HashMap();
|
|
||||||
Iterator var3 = ((NBTTagCompound)base).getKeys().iterator();
|
|
||||||
|
|
||||||
while(var3.hasNext()) {
|
|
||||||
String key = (String)var3.next();
|
|
||||||
innerMap.put(key, serialize(((NBTTagCompound)base).get(key)));
|
|
||||||
}
|
|
||||||
|
|
||||||
return innerMap;
|
|
||||||
} else if (!(base instanceof NBTTagList)) {
|
|
||||||
if (base instanceof NBTTagString) {
|
|
||||||
return base.b_();
|
|
||||||
} else {
|
|
||||||
return base instanceof NBTTagInt ? base + "i" : base.toString();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
List<Object> baseList = new ArrayList();
|
|
||||||
|
|
||||||
for(int i = 0; i < ((NBTList)base).size(); ++i) {
|
|
||||||
baseList.add(serialize(((NBTList)base).get(i)));
|
|
||||||
}
|
|
||||||
|
|
||||||
return baseList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static NBTBase v1_13_R1_b(String str) {
|
|
||||||
try {
|
|
||||||
if (float_format.matcher(str).matches()) {
|
|
||||||
return new NBTTagFloat(Float.parseFloat(str.substring(0, str.length() - 1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (byte_format.matcher(str).matches()) {
|
|
||||||
return new NBTTagByte(Byte.parseByte(str.substring(0, str.length() - 1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (long_format.matcher(str).matches()) {
|
|
||||||
return new NBTTagLong(Long.parseLong(str.substring(0, str.length() - 1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (short_format.matcher(str).matches()) {
|
|
||||||
return new NBTTagShort(Short.parseShort(str.substring(0, str.length() - 1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (integer_format.matcher(str).matches()) {
|
|
||||||
return new NBTTagInt(Integer.parseInt(str));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (double_format.matcher(str).matches()) {
|
|
||||||
return new NBTTagDouble(Double.parseDouble(str.substring(0, str.length() - 1)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (double_format_2.matcher(str).matches()) {
|
|
||||||
return new NBTTagDouble(Double.parseDouble(str));
|
|
||||||
}
|
|
||||||
|
|
||||||
if ("true".equalsIgnoreCase(str)) {
|
|
||||||
return new NBTTagByte((byte)1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ("false".equalsIgnoreCase(str)) {
|
|
||||||
return new NBTTagByte((byte)0);
|
|
||||||
}
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return new NBTTagString(str);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static NBTBase deserialize(Object object) {
|
|
||||||
if (object instanceof Map) {
|
|
||||||
NBTTagCompound compound = new NBTTagCompound();
|
|
||||||
for (Object obj : ((Map) object).entrySet()) {
|
|
||||||
Map.Entry<String, Object> entry = (Map.Entry) obj;
|
|
||||||
compound.set(entry.getKey(), deserialize(entry.getValue()));
|
|
||||||
}
|
|
||||||
return compound;
|
|
||||||
} else if (!(object instanceof List)) {
|
|
||||||
if (object instanceof String) {
|
|
||||||
String string = (String)object;
|
|
||||||
if (ARRAY.matcher(string).matches()) {
|
|
||||||
try {
|
|
||||||
Method parseArray = MojangsonParser.class.getDeclaredMethod("h");
|
|
||||||
parseArray.setAccessible(true);
|
|
||||||
MojangsonParser parser = new MojangsonParser(new StringReader(string));
|
|
||||||
return (NBTBase) parseArray.invoke(parser);
|
|
||||||
} catch (Throwable e) {
|
|
||||||
throw new RuntimeException("Could not deserialize found list ", e);
|
|
||||||
}
|
|
||||||
} else if (INTEGER.matcher(string).matches()) {
|
|
||||||
return new NBTTagInt(Integer.parseInt(string.substring(0, string.length() - 1)));
|
|
||||||
} else if (DOUBLE.matcher(string).matches()) {
|
|
||||||
return new NBTTagDouble(Double.parseDouble(string.substring(0, string.length() - 1)));
|
|
||||||
} else {
|
|
||||||
try{
|
|
||||||
Method parseLiteral = MojangsonParser.class.getDeclaredMethod("b", String.class);
|
|
||||||
parseLiteral.setAccessible(true);
|
|
||||||
NBTBase nbtBase = (NBTBase) parseLiteral.invoke(MOJANGSON_PARSER,string);
|
|
||||||
if (nbtBase instanceof NBTTagInt) {
|
|
||||||
return new NBTTagString(nbtBase.b_());
|
|
||||||
} else {
|
|
||||||
return (nbtBase instanceof NBTTagDouble ? new NBTTagString(String.valueOf(((NBTTagDouble)nbtBase).asDouble())) : nbtBase);
|
|
||||||
}
|
|
||||||
}catch (ReflectiveOperationException e){
|
|
||||||
throw new RuntimeException("Could not deserialize NBTBase");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
throw new RuntimeException("Could not deserialize NBTBase");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
List<Object> list = (List)object;
|
|
||||||
if (list.isEmpty()) {
|
|
||||||
return new NBTTagList();
|
|
||||||
} else {
|
|
||||||
NBTTagList tagList = new NBTTagList();
|
|
||||||
for (Object tag : list) {
|
|
||||||
tagList.add(deserialize(tag));
|
|
||||||
}
|
|
||||||
return tagList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -3,14 +3,13 @@ package pers.xanadu.enderdragon.nms.NMSItem.v1_13_R1;
|
|||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
import net.minecraft.server.v1_13_R1.ItemStack;
|
import net.minecraft.server.v1_13_R1.ItemStack;
|
||||||
import net.minecraft.server.v1_13_R1.MojangsonParser;
|
import net.minecraft.server.v1_13_R1.MojangsonParser;
|
||||||
import net.minecraft.server.v1_13_R1.NBTBase;
|
|
||||||
import net.minecraft.server.v1_13_R1.NBTTagCompound;
|
import net.minecraft.server.v1_13_R1.NBTTagCompound;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftItemStack;
|
import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftItemStack;
|
||||||
import pers.xanadu.enderdragon.config.Lang;
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
import pers.xanadu.enderdragon.nms.NMSItem.I_NMSItemManager;
|
import pers.xanadu.enderdragon.nms.NMSItem.INMSItemManager;
|
||||||
|
|
||||||
public class NMSItemManager implements I_NMSItemManager {
|
public class NMSItemManager implements INMSItemManager {
|
||||||
public org.bukkit.inventory.ItemStack readAsItem(String nbt){
|
public org.bukkit.inventory.ItemStack readAsItem(String nbt){
|
||||||
try {
|
try {
|
||||||
NBTTagCompound cpd = MojangsonParser.parse(nbt);
|
NBTTagCompound cpd = MojangsonParser.parse(nbt);
|
||||||
@@ -25,13 +24,4 @@ public class NMSItemManager implements I_NMSItemManager {
|
|||||||
ItemStack ei = ItemStack.a((NBTTagCompound) cpd);
|
ItemStack ei = ItemStack.a((NBTTagCompound) cpd);
|
||||||
return CraftItemStack.asBukkitCopy(ei);
|
return CraftItemStack.asBukkitCopy(ei);
|
||||||
}
|
}
|
||||||
public Object parseNBT(Object nbt_base){
|
|
||||||
return CraftNBTTagConfigSerializer.serialize((NBTBase) nbt_base);
|
|
||||||
}
|
|
||||||
public Object readAsNBTBase(String raw){
|
|
||||||
return CraftNBTTagConfigSerializer.v1_13_R1_b(raw);
|
|
||||||
}
|
|
||||||
public Object getNBTBase(Object obj){
|
|
||||||
return CraftNBTTagConfigSerializer.deserialize(obj);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-11
@@ -4,9 +4,9 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import pers.xanadu.enderdragon.EnderDragon;
|
import pers.xanadu.enderdragon.EnderDragon;
|
||||||
import pers.xanadu.enderdragon.config.Lang;
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
import pers.xanadu.enderdragon.nms.NMSItem.I_NMSItemManager;
|
import pers.xanadu.enderdragon.nms.NMSItem.INMSItemManager;
|
||||||
|
|
||||||
public class NMSItemManager implements I_NMSItemManager {
|
public class NMSItemManager implements INMSItemManager {
|
||||||
public ItemStack readAsItem(String nbt){
|
public ItemStack readAsItem(String nbt){
|
||||||
try {
|
try {
|
||||||
return EnderDragon.getInstance().getNMSManager().getItemStack(nbt);
|
return EnderDragon.getInstance().getNMSManager().getItemStack(nbt);
|
||||||
@@ -18,13 +18,4 @@ public class NMSItemManager implements I_NMSItemManager {
|
|||||||
public ItemStack cpdToItem(Object cpd){
|
public ItemStack cpdToItem(Object cpd){
|
||||||
return EnderDragon.getInstance().getNMSManager().getItemStack(cpd);
|
return EnderDragon.getInstance().getNMSManager().getItemStack(cpd);
|
||||||
}
|
}
|
||||||
public Object parseNBT(Object nbt_base){
|
|
||||||
return EnderDragon.getInstance().getNMSManager().serializeNBTBase(nbt_base);
|
|
||||||
}
|
|
||||||
public Object readAsNBTBase(String raw){
|
|
||||||
return EnderDragon.getInstance().getNMSManager().StringParseLiteral(raw);
|
|
||||||
}
|
|
||||||
public Object getNBTBase(Object obj){
|
|
||||||
return EnderDragon.getInstance().getNMSManager().deserializeObject(obj);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -2,6 +2,6 @@ package pers.xanadu.enderdragon.nms.RespawnAnchor;
|
|||||||
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
|
||||||
public interface I_RespawnAnchorManager {
|
public interface IRespawnAnchorManager {
|
||||||
boolean isRespawnAnchorWorks(World world);
|
boolean isRespawnAnchorWorks(World world);
|
||||||
}
|
}
|
||||||
+2
-2
@@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.RespawnAnchor.v1_16_R1;
|
|||||||
import net.minecraft.server.v1_16_R1.DimensionManager;
|
import net.minecraft.server.v1_16_R1.DimensionManager;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_16_R1.CraftWorld;
|
import org.bukkit.craftbukkit.v1_16_R1.CraftWorld;
|
||||||
import pers.xanadu.enderdragon.nms.RespawnAnchor.I_RespawnAnchorManager;
|
import pers.xanadu.enderdragon.nms.RespawnAnchor.IRespawnAnchorManager;
|
||||||
|
|
||||||
public class RespawnAnchorManager implements I_RespawnAnchorManager {
|
public class RespawnAnchorManager implements IRespawnAnchorManager {
|
||||||
public boolean isRespawnAnchorWorks(World world){
|
public boolean isRespawnAnchorWorks(World world){
|
||||||
CraftWorld cw = (CraftWorld) world;
|
CraftWorld cw = (CraftWorld) world;
|
||||||
net.minecraft.server.v1_16_R1.World ew = cw.getHandle();
|
net.minecraft.server.v1_16_R1.World ew = cw.getHandle();
|
||||||
|
|||||||
+2
-2
@@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.RespawnAnchor.v1_16_R2;
|
|||||||
import net.minecraft.server.v1_16_R2.DimensionManager;
|
import net.minecraft.server.v1_16_R2.DimensionManager;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_16_R2.CraftWorld;
|
import org.bukkit.craftbukkit.v1_16_R2.CraftWorld;
|
||||||
import pers.xanadu.enderdragon.nms.RespawnAnchor.I_RespawnAnchorManager;
|
import pers.xanadu.enderdragon.nms.RespawnAnchor.IRespawnAnchorManager;
|
||||||
|
|
||||||
public class RespawnAnchorManager implements I_RespawnAnchorManager {
|
public class RespawnAnchorManager implements IRespawnAnchorManager {
|
||||||
public boolean isRespawnAnchorWorks(World world){
|
public boolean isRespawnAnchorWorks(World world){
|
||||||
CraftWorld cw = (CraftWorld) world;
|
CraftWorld cw = (CraftWorld) world;
|
||||||
net.minecraft.server.v1_16_R2.World ew = cw.getHandle();
|
net.minecraft.server.v1_16_R2.World ew = cw.getHandle();
|
||||||
|
|||||||
+2
-2
@@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.RespawnAnchor.v1_16_R3;
|
|||||||
import net.minecraft.server.v1_16_R3.DimensionManager;
|
import net.minecraft.server.v1_16_R3.DimensionManager;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_16_R3.CraftWorld;
|
import org.bukkit.craftbukkit.v1_16_R3.CraftWorld;
|
||||||
import pers.xanadu.enderdragon.nms.RespawnAnchor.I_RespawnAnchorManager;
|
import pers.xanadu.enderdragon.nms.RespawnAnchor.IRespawnAnchorManager;
|
||||||
|
|
||||||
public class RespawnAnchorManager implements I_RespawnAnchorManager {
|
public class RespawnAnchorManager implements IRespawnAnchorManager {
|
||||||
public boolean isRespawnAnchorWorks(World world){
|
public boolean isRespawnAnchorWorks(World world){
|
||||||
CraftWorld cw = (CraftWorld) world;
|
CraftWorld cw = (CraftWorld) world;
|
||||||
net.minecraft.server.v1_16_R3.World ew = cw.getHandle();
|
net.minecraft.server.v1_16_R3.World ew = cw.getHandle();
|
||||||
|
|||||||
+2
-2
@@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.RespawnAnchor.v1_17_R1;
|
|||||||
import net.minecraft.world.level.dimension.DimensionManager;
|
import net.minecraft.world.level.dimension.DimensionManager;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_17_R1.CraftWorld;
|
import org.bukkit.craftbukkit.v1_17_R1.CraftWorld;
|
||||||
import pers.xanadu.enderdragon.nms.RespawnAnchor.I_RespawnAnchorManager;
|
import pers.xanadu.enderdragon.nms.RespawnAnchor.IRespawnAnchorManager;
|
||||||
|
|
||||||
public class RespawnAnchorManager implements I_RespawnAnchorManager {
|
public class RespawnAnchorManager implements IRespawnAnchorManager {
|
||||||
public boolean isRespawnAnchorWorks(World world){
|
public boolean isRespawnAnchorWorks(World world){
|
||||||
CraftWorld cw = (CraftWorld) world;
|
CraftWorld cw = (CraftWorld) world;
|
||||||
net.minecraft.world.level.World ew = cw.getHandle();
|
net.minecraft.world.level.World ew = cw.getHandle();
|
||||||
|
|||||||
+2
-2
@@ -1,9 +1,9 @@
|
|||||||
package pers.xanadu.enderdragon.nms.RespawnAnchor.v1_18_above;
|
package pers.xanadu.enderdragon.nms.RespawnAnchor.v1_18_above;
|
||||||
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import pers.xanadu.enderdragon.nms.RespawnAnchor.I_RespawnAnchorManager;
|
import pers.xanadu.enderdragon.nms.RespawnAnchor.IRespawnAnchorManager;
|
||||||
|
|
||||||
public class RespawnAnchorManager implements I_RespawnAnchorManager {
|
public class RespawnAnchorManager implements IRespawnAnchorManager {
|
||||||
public boolean isRespawnAnchorWorks(World world){
|
public boolean isRespawnAnchorWorks(World world){
|
||||||
return world.isRespawnAnchorWorks();
|
return world.isRespawnAnchorWorks();
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -2,6 +2,6 @@ package pers.xanadu.enderdragon.nms.WorldData;
|
|||||||
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
|
||||||
public interface I_WorldDataManager {
|
public interface IWorldDataManager {
|
||||||
long getGameTime(World world);
|
long getGameTime(World world);
|
||||||
}
|
}
|
||||||
@@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_12_R1;
|
|||||||
import net.minecraft.server.v1_12_R1.WorldServer;
|
import net.minecraft.server.v1_12_R1.WorldServer;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_12_R1.CraftWorld;
|
import org.bukkit.craftbukkit.v1_12_R1.CraftWorld;
|
||||||
import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager;
|
import pers.xanadu.enderdragon.nms.WorldData.IWorldDataManager;
|
||||||
|
|
||||||
public class WorldDataManager implements I_WorldDataManager {
|
public class WorldDataManager implements IWorldDataManager {
|
||||||
public long getGameTime(World world){
|
public long getGameTime(World world){
|
||||||
CraftWorld cw = (CraftWorld) world;
|
CraftWorld cw = (CraftWorld) world;
|
||||||
WorldServer ws = cw.getHandle();
|
WorldServer ws = cw.getHandle();
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_13_R1;
|
|||||||
import net.minecraft.server.v1_13_R1.WorldServer;
|
import net.minecraft.server.v1_13_R1.WorldServer;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_13_R1.CraftWorld;
|
import org.bukkit.craftbukkit.v1_13_R1.CraftWorld;
|
||||||
import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager;
|
import pers.xanadu.enderdragon.nms.WorldData.IWorldDataManager;
|
||||||
|
|
||||||
public class WorldDataManager implements I_WorldDataManager {
|
public class WorldDataManager implements IWorldDataManager {
|
||||||
public long getGameTime(World world){
|
public long getGameTime(World world){
|
||||||
CraftWorld cw = (CraftWorld) world;
|
CraftWorld cw = (CraftWorld) world;
|
||||||
WorldServer ws = cw.getHandle();
|
WorldServer ws = cw.getHandle();
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_13_R2;
|
|||||||
import net.minecraft.server.v1_13_R2.WorldServer;
|
import net.minecraft.server.v1_13_R2.WorldServer;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_13_R2.CraftWorld;
|
import org.bukkit.craftbukkit.v1_13_R2.CraftWorld;
|
||||||
import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager;
|
import pers.xanadu.enderdragon.nms.WorldData.IWorldDataManager;
|
||||||
|
|
||||||
public class WorldDataManager implements I_WorldDataManager {
|
public class WorldDataManager implements IWorldDataManager {
|
||||||
public long getGameTime(World world){
|
public long getGameTime(World world){
|
||||||
CraftWorld cw = (CraftWorld) world;
|
CraftWorld cw = (CraftWorld) world;
|
||||||
WorldServer ws = cw.getHandle();
|
WorldServer ws = cw.getHandle();
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_14_R1;
|
|||||||
import net.minecraft.server.v1_14_R1.WorldServer;
|
import net.minecraft.server.v1_14_R1.WorldServer;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_14_R1.CraftWorld;
|
import org.bukkit.craftbukkit.v1_14_R1.CraftWorld;
|
||||||
import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager;
|
import pers.xanadu.enderdragon.nms.WorldData.IWorldDataManager;
|
||||||
|
|
||||||
public class WorldDataManager implements I_WorldDataManager {
|
public class WorldDataManager implements IWorldDataManager {
|
||||||
public long getGameTime(World world){
|
public long getGameTime(World world){
|
||||||
CraftWorld cw = (CraftWorld) world;
|
CraftWorld cw = (CraftWorld) world;
|
||||||
WorldServer ws = cw.getHandle();
|
WorldServer ws = cw.getHandle();
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_15_R1;
|
|||||||
import net.minecraft.server.v1_15_R1.WorldServer;
|
import net.minecraft.server.v1_15_R1.WorldServer;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_15_R1.CraftWorld;
|
import org.bukkit.craftbukkit.v1_15_R1.CraftWorld;
|
||||||
import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager;
|
import pers.xanadu.enderdragon.nms.WorldData.IWorldDataManager;
|
||||||
|
|
||||||
public class WorldDataManager implements I_WorldDataManager {
|
public class WorldDataManager implements IWorldDataManager {
|
||||||
public long getGameTime(World world){
|
public long getGameTime(World world){
|
||||||
CraftWorld cw = (CraftWorld) world;
|
CraftWorld cw = (CraftWorld) world;
|
||||||
WorldServer ws = cw.getHandle();
|
WorldServer ws = cw.getHandle();
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_16_R1;
|
|||||||
import net.minecraft.server.v1_16_R1.WorldServer;
|
import net.minecraft.server.v1_16_R1.WorldServer;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_16_R1.CraftWorld;
|
import org.bukkit.craftbukkit.v1_16_R1.CraftWorld;
|
||||||
import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager;
|
import pers.xanadu.enderdragon.nms.WorldData.IWorldDataManager;
|
||||||
|
|
||||||
public class WorldDataManager implements I_WorldDataManager {
|
public class WorldDataManager implements IWorldDataManager {
|
||||||
public long getGameTime(World world){
|
public long getGameTime(World world){
|
||||||
CraftWorld cw = (CraftWorld) world;
|
CraftWorld cw = (CraftWorld) world;
|
||||||
WorldServer ws = cw.getHandle();
|
WorldServer ws = cw.getHandle();
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_16_R2;
|
|||||||
import net.minecraft.server.v1_16_R2.WorldServer;
|
import net.minecraft.server.v1_16_R2.WorldServer;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_16_R2.CraftWorld;
|
import org.bukkit.craftbukkit.v1_16_R2.CraftWorld;
|
||||||
import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager;
|
import pers.xanadu.enderdragon.nms.WorldData.IWorldDataManager;
|
||||||
|
|
||||||
public class WorldDataManager implements I_WorldDataManager {
|
public class WorldDataManager implements IWorldDataManager {
|
||||||
public long getGameTime(World world){
|
public long getGameTime(World world){
|
||||||
CraftWorld cw = (CraftWorld) world;
|
CraftWorld cw = (CraftWorld) world;
|
||||||
WorldServer ws = cw.getHandle();
|
WorldServer ws = cw.getHandle();
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_16_R3;
|
|||||||
import net.minecraft.server.v1_16_R3.WorldServer;
|
import net.minecraft.server.v1_16_R3.WorldServer;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_16_R3.CraftWorld;
|
import org.bukkit.craftbukkit.v1_16_R3.CraftWorld;
|
||||||
import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager;
|
import pers.xanadu.enderdragon.nms.WorldData.IWorldDataManager;
|
||||||
|
|
||||||
public class WorldDataManager implements I_WorldDataManager {
|
public class WorldDataManager implements IWorldDataManager {
|
||||||
public long getGameTime(World world){
|
public long getGameTime(World world){
|
||||||
CraftWorld cw = (CraftWorld) world;
|
CraftWorld cw = (CraftWorld) world;
|
||||||
WorldServer ws = cw.getHandle();
|
WorldServer ws = cw.getHandle();
|
||||||
|
|||||||
+2
-2
@@ -1,9 +1,9 @@
|
|||||||
package pers.xanadu.enderdragon.nms.WorldData.v1_17_above;
|
package pers.xanadu.enderdragon.nms.WorldData.v1_17_above;
|
||||||
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager;
|
import pers.xanadu.enderdragon.nms.WorldData.IWorldDataManager;
|
||||||
|
|
||||||
public class WorldDataManager implements I_WorldDataManager {
|
public class WorldDataManager implements IWorldDataManager {
|
||||||
public long getGameTime(World world){
|
public long getGameTime(World world){
|
||||||
return world.getGameTime();
|
return world.getGameTime();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package pers.xanadu.enderdragon.util;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.AbstractSet;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
public class ConcurrentSet<T> extends AbstractSet<T> implements Serializable {
|
||||||
|
private static final long serialVersionUID = 1072237514L;
|
||||||
|
private final ConcurrentHashMap<T, Boolean> map = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
public ConcurrentSet() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public int size() {
|
||||||
|
return this.map.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean contains(Object o) {
|
||||||
|
return this.map.containsKey(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean add(T o) {
|
||||||
|
return this.map.putIfAbsent(o, Boolean.TRUE) == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean remove(Object o) {
|
||||||
|
return this.map.remove(o) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clear() {
|
||||||
|
this.map.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Iterator<T> iterator() {
|
||||||
|
return this.map.keySet().iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,18 +1,14 @@
|
|||||||
package pers.xanadu.enderdragon.util;
|
package pers.xanadu.enderdragon.util;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
import org.bukkit.persistence.PersistentDataContainer;
|
import org.bukkit.persistence.PersistentDataContainer;
|
||||||
import org.jetbrains.annotations.TestOnly;
|
|
||||||
import pers.xanadu.enderdragon.EnderDragon;
|
import pers.xanadu.enderdragon.EnderDragon;
|
||||||
import pers.xanadu.enderdragon.config.Config;
|
import pers.xanadu.enderdragon.config.Config;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class NMSUtil {
|
public class NMSUtil {
|
||||||
@@ -26,18 +22,13 @@ public class NMSUtil {
|
|||||||
*/
|
*/
|
||||||
private Method asCraftCopy;
|
private Method asCraftCopy;
|
||||||
private Method NMSItemStack_save;
|
private Method NMSItemStack_save;
|
||||||
private Method NMSItemStack_setTag;
|
|
||||||
private Method cpdToEi;
|
private Method cpdToEi;
|
||||||
private Method stringToCPD;
|
private Method stringToCPD;
|
||||||
private Method stringToNBTBase;
|
private Method stringToNBTBase;
|
||||||
private Method serializeNBTBase;
|
|
||||||
private Method deserializeObject;
|
|
||||||
private Method PDCtoCPD;
|
private Method PDCtoCPD;
|
||||||
private Method PersistentDataContainer_putAll;
|
private Method PersistentDataContainer_putAll;
|
||||||
private Method NBTTagCompound_set;
|
private Method NBTTagCompound_set;
|
||||||
private Field unhandledTags;
|
private Field unhandledTags;
|
||||||
private Field internalTag;
|
|
||||||
private Field MOJANGSON_PARSER;
|
|
||||||
private Field world_c_environment;
|
private Field world_c_environment;
|
||||||
private Field NBTTagCompound_map;
|
private Field NBTTagCompound_map;
|
||||||
private Class<?> WorldClass;
|
private Class<?> WorldClass;
|
||||||
@@ -51,7 +42,6 @@ public class NMSUtil {
|
|||||||
private Class<?> NBTTagCompoundClass;
|
private Class<?> NBTTagCompoundClass;
|
||||||
private Class<?> NBTBaseClass;
|
private Class<?> NBTBaseClass;
|
||||||
private Class<?> MojangsonParserClass;
|
private Class<?> MojangsonParserClass;
|
||||||
private Class<?> CraftNBTTagConfigSerializerClass;
|
|
||||||
private Class<?> CraftPersistentDataContainerClass;
|
private Class<?> CraftPersistentDataContainerClass;
|
||||||
|
|
||||||
public void init(){
|
public void init(){
|
||||||
@@ -70,8 +60,6 @@ public class NMSUtil {
|
|||||||
this.CraftMetaItemClass = Class.forName("org.bukkit.craftbukkit." + version + ".inventory.CraftMetaItem");
|
this.CraftMetaItemClass = Class.forName("org.bukkit.craftbukkit." + version + ".inventory.CraftMetaItem");
|
||||||
this.unhandledTags = CraftMetaItemClass.getDeclaredField("unhandledTags");
|
this.unhandledTags = CraftMetaItemClass.getDeclaredField("unhandledTags");
|
||||||
unhandledTags.setAccessible(true);
|
unhandledTags.setAccessible(true);
|
||||||
this.internalTag = CraftMetaItemClass.getDeclaredField("internalTag");
|
|
||||||
internalTag.setAccessible(true);
|
|
||||||
this.NMSItemStackClass = CraftItemStackClass.getDeclaredField("handle").getType();
|
this.NMSItemStackClass = CraftItemStackClass.getDeclaredField("handle").getType();
|
||||||
this.CraftEntityClass = Class.forName("org.bukkit.craftbukkit."+version+".entity.CraftEntity");
|
this.CraftEntityClass = Class.forName("org.bukkit.craftbukkit."+version+".entity.CraftEntity");
|
||||||
init_NBTTagCompoundClass();
|
init_NBTTagCompoundClass();
|
||||||
@@ -84,7 +72,6 @@ public class NMSUtil {
|
|||||||
this.asCraftMirror = CraftItemStackClass.getMethod("asCraftMirror",NMSItemStackClass);
|
this.asCraftMirror = CraftItemStackClass.getMethod("asCraftMirror",NMSItemStackClass);
|
||||||
this.asCraftCopy = CraftItemStackClass.getMethod("asCraftCopy",ItemStack.class);
|
this.asCraftCopy = CraftItemStackClass.getMethod("asCraftCopy",ItemStack.class);
|
||||||
this.NMSItemStack_save = NMSItemStackClass.getMethod(getMethodName(ReflectiveMethod.NMSItemStack_save),NBTTagCompoundClass);
|
this.NMSItemStack_save = NMSItemStackClass.getMethod(getMethodName(ReflectiveMethod.NMSItemStack_save),NBTTagCompoundClass);
|
||||||
this.NMSItemStack_setTag = NMSItemStackClass.getMethod(getMethodName(ReflectiveMethod.NMSItemStack_setTag),NBTTagCompoundClass);
|
|
||||||
if(Version.mcMainVersion>=13) this.cpdToEi = NMSItemStackClass.getMethod("a",NBTTagCompoundClass);
|
if(Version.mcMainVersion>=13) this.cpdToEi = NMSItemStackClass.getMethod("a",NBTTagCompoundClass);
|
||||||
|
|
||||||
if(Version.mcMainVersion<=16) this.MojangsonParserClass = Class.forName("net.minecraft.server."+version+".MojangsonParser");
|
if(Version.mcMainVersion<=16) this.MojangsonParserClass = Class.forName("net.minecraft.server."+version+".MojangsonParser");
|
||||||
@@ -93,13 +80,6 @@ public class NMSUtil {
|
|||||||
this.stringToNBTBase = MojangsonParserClass.getDeclaredMethod(getMethodName(ReflectiveMethod.MojangsonParser_parseLiteral),String.class);
|
this.stringToNBTBase = MojangsonParserClass.getDeclaredMethod(getMethodName(ReflectiveMethod.MojangsonParser_parseLiteral),String.class);
|
||||||
stringToNBTBase.setAccessible(true);
|
stringToNBTBase.setAccessible(true);
|
||||||
|
|
||||||
if(Version.mcMainVersion>13 || "v1_13_R2".equals(Version.getVersion())){
|
|
||||||
this.CraftNBTTagConfigSerializerClass = Class.forName("org.bukkit.craftbukkit." + version + ".util.CraftNBTTagConfigSerializer");
|
|
||||||
this.serializeNBTBase = CraftNBTTagConfigSerializerClass.getMethods()[0];
|
|
||||||
this.deserializeObject = CraftNBTTagConfigSerializerClass.getMethod("deserialize",Object.class);
|
|
||||||
this.MOJANGSON_PARSER = CraftNBTTagConfigSerializerClass.getDeclaredField("MOJANGSON_PARSER");
|
|
||||||
MOJANGSON_PARSER.setAccessible(true);
|
|
||||||
}
|
|
||||||
if(Version.mcMainVersion>=14){
|
if(Version.mcMainVersion>=14){
|
||||||
this.CraftPersistentDataContainerClass = Class.forName("org.bukkit.craftbukkit." + version + ".persistence.CraftPersistentDataContainer");
|
this.CraftPersistentDataContainerClass = Class.forName("org.bukkit.craftbukkit." + version + ".persistence.CraftPersistentDataContainer");
|
||||||
this.PDCtoCPD = CraftPersistentDataContainerClass.getDeclaredMethod("toTagCompound");
|
this.PDCtoCPD = CraftPersistentDataContainerClass.getDeclaredMethod("toTagCompound");
|
||||||
@@ -123,16 +103,6 @@ public class NMSUtil {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// public Object getMetaCPD(ItemMeta meta){
|
|
||||||
// try{
|
|
||||||
// Object craft_meta = CraftMetaItemClass.cast(meta);
|
|
||||||
// Object internalTag = this.internalTag.get(craft_meta);
|
|
||||||
// return internalTag;
|
|
||||||
// }catch (ReflectiveOperationException e){
|
|
||||||
// e.printStackTrace();
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 只保留物品type和amount
|
* 只保留物品type和amount
|
||||||
@@ -175,14 +145,6 @@ public class NMSUtil {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public Object StringParseLiteral(final String str){
|
|
||||||
try{
|
|
||||||
return stringToNBTBase.invoke(MOJANGSON_PARSER.get(null),str);
|
|
||||||
}catch (ReflectiveOperationException e){
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public void setPersistentDataContainer(final PersistentDataContainer dataContainer,final Object cpd){
|
public void setPersistentDataContainer(final PersistentDataContainer dataContainer,final Object cpd){
|
||||||
try{
|
try{
|
||||||
Object PDC = CraftPersistentDataContainerClass.cast(dataContainer);
|
Object PDC = CraftPersistentDataContainerClass.cast(dataContainer);
|
||||||
@@ -201,55 +163,6 @@ public class NMSUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object deserializeObject(final Object object){
|
|
||||||
try{
|
|
||||||
return deserializeObject.invoke(null,object);
|
|
||||||
}catch (ReflectiveOperationException e){
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public Object serializeNBTBase(final Object nbt_base){
|
|
||||||
try{
|
|
||||||
return serializeNBTBase.invoke(null, nbt_base);
|
|
||||||
}catch (ReflectiveOperationException e){
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@TestOnly
|
|
||||||
public void setUnhandledTags(final ItemMeta meta, Map<String,?> unhandledTags){
|
|
||||||
try{
|
|
||||||
Object craft_meta = CraftMetaItemClass.cast(meta);
|
|
||||||
this.unhandledTags.set(craft_meta, unhandledTags);
|
|
||||||
}catch (ReflectiveOperationException e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* @return meta中unhandledTags的引用
|
|
||||||
*/
|
|
||||||
@TestOnly
|
|
||||||
public Map<String,Object> getUnhandledTags(final ItemMeta meta){
|
|
||||||
try{
|
|
||||||
Object craft_meta = CraftMetaItemClass.cast(meta);
|
|
||||||
Object unhandledTags = this.unhandledTags.get(craft_meta);
|
|
||||||
return (Map<String, Object>) unhandledTags;
|
|
||||||
}catch (ReflectiveOperationException e){
|
|
||||||
e.printStackTrace();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public ItemStack applyItemTag(final ItemStack item,final Object cpd){
|
|
||||||
try{
|
|
||||||
Object ei = asNMSCopy.invoke(null,item);
|
|
||||||
NMSItemStack_setTag.invoke(ei,cpd);
|
|
||||||
return (ItemStack) asBukkitCopy.invoke(null,ei);
|
|
||||||
}catch (ReflectiveOperationException e){
|
|
||||||
e.printStackTrace();
|
|
||||||
return new ItemStack(Material.AIR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public String getNBT(final ItemStack item){
|
public String getNBT(final ItemStack item){
|
||||||
try{
|
try{
|
||||||
Object ci = CraftItemStackClass.isInstance(item)?CraftItemStackClass.cast(item):asCraftCopy.invoke(null,item);//浅拷贝unhandledTags
|
Object ci = CraftItemStackClass.isInstance(item)?CraftItemStackClass.cast(item):asCraftCopy.invoke(null,item);//浅拷贝unhandledTags
|
||||||
|
|||||||
@@ -1,18 +1,19 @@
|
|||||||
package pers.xanadu.enderdragon.util;
|
package pers.xanadu.enderdragon.util;
|
||||||
|
|
||||||
import pers.xanadu.enderdragon.config.Lang;
|
import pers.xanadu.enderdragon.config.Lang;
|
||||||
import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager;
|
import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager;
|
||||||
import pers.xanadu.enderdragon.nms.NMSItem.I_NMSItemManager;
|
import pers.xanadu.enderdragon.nms.NMSItem.INMSItemManager;
|
||||||
import pers.xanadu.enderdragon.nms.RespawnAnchor.I_RespawnAnchorManager;
|
import pers.xanadu.enderdragon.nms.RespawnAnchor.IRespawnAnchorManager;
|
||||||
import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager;
|
import pers.xanadu.enderdragon.nms.WorldData.IWorldDataManager;
|
||||||
|
|
||||||
import static org.bukkit.Bukkit.getServer;
|
import static org.bukkit.Bukkit.getServer;
|
||||||
|
|
||||||
public class Version {
|
public class Version {
|
||||||
public static final String setting_dragon = "2.4.0";
|
public static final String setting_dragon = "2.5.0";
|
||||||
public static final String lang = "2.2.0";
|
public static final String lang = "2.2.0";
|
||||||
public static final String config = "2.3.0";
|
public static final String config = "2.3.0";
|
||||||
public static final String data = "2.2.0";
|
public static final String data = "2.2.0";
|
||||||
|
public static final String reward = "2.5.0";
|
||||||
public static int mcMainVersion;
|
public static int mcMainVersion;
|
||||||
public static int mcPatchVersion;
|
public static int mcPatchVersion;
|
||||||
private static String version = "no version found";
|
private static String version = "no version found";
|
||||||
@@ -35,14 +36,14 @@ public class Version {
|
|||||||
}catch(ReflectiveOperationException ignored){}
|
}catch(ReflectiveOperationException ignored){}
|
||||||
|
|
||||||
}
|
}
|
||||||
public static I_NMSItemManager getNMSItemManager(){
|
public static INMSItemManager getNMSItemManager(){
|
||||||
switch (version){
|
switch (version){
|
||||||
case "v1_12_R1" : return new pers.xanadu.enderdragon.nms.NMSItem.v1_12_R1.NMSItemManager();
|
case "v1_12_R1" : return new pers.xanadu.enderdragon.nms.NMSItem.v1_12_R1.NMSItemManager();
|
||||||
case "v1_13_R1" : return new pers.xanadu.enderdragon.nms.NMSItem.v1_13_R1.NMSItemManager();
|
case "v1_13_R1" : return new pers.xanadu.enderdragon.nms.NMSItem.v1_13_R1.NMSItemManager();
|
||||||
default: return new pers.xanadu.enderdragon.nms.NMSItem.v1_13_R2_above.NMSItemManager();
|
default: return new pers.xanadu.enderdragon.nms.NMSItem.v1_13_R2_above.NMSItemManager();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static I_BossBarManager getBossBarManager(){
|
public static IBossBarManager getBossBarManager(){
|
||||||
switch(version){
|
switch(version){
|
||||||
case "v1_12_R1" : return new pers.xanadu.enderdragon.nms.BossBar.v1_12_R1.BossBarManager();
|
case "v1_12_R1" : return new pers.xanadu.enderdragon.nms.BossBar.v1_12_R1.BossBarManager();
|
||||||
case "v1_13_R1" : return new pers.xanadu.enderdragon.nms.BossBar.v1_13_R1.BossBarManager();
|
case "v1_13_R1" : return new pers.xanadu.enderdragon.nms.BossBar.v1_13_R1.BossBarManager();
|
||||||
@@ -52,7 +53,7 @@ public class Version {
|
|||||||
default: return new pers.xanadu.enderdragon.nms.BossBar.v1_16_R1_above.BossBarManager();
|
default: return new pers.xanadu.enderdragon.nms.BossBar.v1_16_R1_above.BossBarManager();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static I_WorldDataManager getWorldDataManager(){
|
public static IWorldDataManager getWorldDataManager(){
|
||||||
switch (version){
|
switch (version){
|
||||||
case "v1_12_R1" : return new pers.xanadu.enderdragon.nms.WorldData.v1_12_R1.WorldDataManager();
|
case "v1_12_R1" : return new pers.xanadu.enderdragon.nms.WorldData.v1_12_R1.WorldDataManager();
|
||||||
case "v1_13_R1" : return new pers.xanadu.enderdragon.nms.WorldData.v1_13_R1.WorldDataManager();
|
case "v1_13_R1" : return new pers.xanadu.enderdragon.nms.WorldData.v1_13_R1.WorldDataManager();
|
||||||
@@ -65,7 +66,7 @@ public class Version {
|
|||||||
default : return new pers.xanadu.enderdragon.nms.WorldData.v1_17_above.WorldDataManager();
|
default : return new pers.xanadu.enderdragon.nms.WorldData.v1_17_above.WorldDataManager();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public static I_RespawnAnchorManager getRespawnAnchorManager(){
|
public static IRespawnAnchorManager getRespawnAnchorManager(){
|
||||||
switch (version){
|
switch (version){
|
||||||
case "v1_12_R1" :
|
case "v1_12_R1" :
|
||||||
case "v1_13_R1" :
|
case "v1_13_R1" :
|
||||||
|
|||||||
@@ -97,5 +97,7 @@ advanced_setting:
|
|||||||
world_env_fix: false
|
world_env_fix: false
|
||||||
save_respawn_status: false
|
save_respawn_status: false
|
||||||
save_bossbar: false
|
save_bossbar: false
|
||||||
|
# to do: 允许在非末地环境使用/ed spawn或respawn复活末影龙
|
||||||
|
# can_spawn_not_the_end: false
|
||||||
backslash_split:
|
backslash_split:
|
||||||
reward: false
|
reward: false
|
||||||
@@ -96,5 +96,7 @@ advanced_setting:
|
|||||||
world_env_fix: false
|
world_env_fix: false
|
||||||
save_respawn_status: false
|
save_respawn_status: false
|
||||||
save_bossbar: false
|
save_bossbar: false
|
||||||
|
# to-do
|
||||||
|
# can_spawn_not_the_end: false
|
||||||
backslash_split:
|
backslash_split:
|
||||||
reward: false
|
reward: false
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
name: EnderDragon
|
name: EnderDragon
|
||||||
version: 2.4.0
|
version: 2.5.0
|
||||||
main: pers.xanadu.enderdragon.EnderDragon
|
main: pers.xanadu.enderdragon.EnderDragon
|
||||||
author: Xanadu13
|
author: Xanadu13
|
||||||
api-version: 1.13
|
api-version: 1.13
|
||||||
@@ -7,6 +7,7 @@ softdepend:
|
|||||||
- MMOItems
|
- MMOItems
|
||||||
- MythicLib
|
- MythicLib
|
||||||
- PlaceholderAPI
|
- PlaceholderAPI
|
||||||
|
- PetDragon
|
||||||
commands:
|
commands:
|
||||||
enderdragon:
|
enderdragon:
|
||||||
description: "EnderDragon Command"
|
description: "EnderDragon Command"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#文件版本,请勿修改
|
#文件版本,请勿修改
|
||||||
version: 2.4.0
|
version: 2.5.0
|
||||||
|
|
||||||
#用于插件内部识别,每一种末影龙的unique_name都需要设为不同值!
|
#用于插件内部识别,每一种末影龙的unique_name都需要设为不同值!
|
||||||
unique_name: 'default'
|
unique_name: 'default'
|
||||||
@@ -118,6 +118,14 @@ bossbar:
|
|||||||
#SOLID:整条,SEGMENTED_6:将血条分为6个部分,SEGMENTED_10:将血条分为10个部分,SEGMENTED_12:将血条分为12个部分,SEGMENTED_20:将血条分为20个部分
|
#SOLID:整条,SEGMENTED_6:将血条分为6个部分,SEGMENTED_10:将血条分为10个部分,SEGMENTED_12:将血条分为12个部分,SEGMENTED_20:将血条分为20个部分
|
||||||
style: 'SOLID'
|
style: 'SOLID'
|
||||||
|
|
||||||
|
# [true/false]
|
||||||
|
# 生成迷雾
|
||||||
|
create_frog: true
|
||||||
|
# 使天空阴暗
|
||||||
|
darken_sky: true
|
||||||
|
# 播放打末影龙时候的BGM
|
||||||
|
play_boss_music: true
|
||||||
|
|
||||||
#末影龙火球命中后产生的效果云
|
#末影龙火球命中后产生的效果云
|
||||||
effect_cloud:
|
effect_cloud:
|
||||||
#初始半径,允许小数
|
#初始半径,允许小数
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
version: 2.4.0
|
version: 2.5.0
|
||||||
|
|
||||||
#This is used for plugin internal identification.
|
#This is used for plugin internal identification.
|
||||||
#Please make sure the value is unique among all the types of dragons
|
#Please make sure the value is unique among all the types of dragons
|
||||||
@@ -125,6 +125,11 @@ bossbar:
|
|||||||
#enable:SOLID,SEGMENTED_6,SEGMENTED_10,SEGMENTED_12,SEGMENTED_20
|
#enable:SOLID,SEGMENTED_6,SEGMENTED_10,SEGMENTED_12,SEGMENTED_20
|
||||||
style: 'SOLID'
|
style: 'SOLID'
|
||||||
|
|
||||||
|
# [true/false]
|
||||||
|
create_frog: true
|
||||||
|
darken_sky: true
|
||||||
|
play_boss_music: true
|
||||||
|
|
||||||
effect_cloud:
|
effect_cloud:
|
||||||
#enter a double that above 0
|
#enter a double that above 0
|
||||||
original_radius: 5
|
original_radius: 5
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#文件版本,请勿修改
|
#文件版本,请勿修改
|
||||||
version: 2.4.0
|
version: 2.5.0
|
||||||
|
|
||||||
#用于插件内部识别,每一种末影龙的unique_name都需要设为不同值!
|
#用于插件内部识别,每一种末影龙的unique_name都需要设为不同值!
|
||||||
unique_name: 'special001'
|
unique_name: 'special001'
|
||||||
@@ -117,6 +117,14 @@ bossbar:
|
|||||||
#SOLID:整条,SEGMENTED_6:将血条分为6个部分,SEGMENTED_10:将血条分为10个部分,SEGMENTED_12:将血条分为12个部分,SEGMENTED_20:将血条分为20个部分
|
#SOLID:整条,SEGMENTED_6:将血条分为6个部分,SEGMENTED_10:将血条分为10个部分,SEGMENTED_12:将血条分为12个部分,SEGMENTED_20:将血条分为20个部分
|
||||||
style: 'SEGMENTED_12'
|
style: 'SEGMENTED_12'
|
||||||
|
|
||||||
|
# [true/false]
|
||||||
|
# 生成迷雾
|
||||||
|
create_frog: true
|
||||||
|
# 使天空阴暗
|
||||||
|
darken_sky: true
|
||||||
|
# 播放打末影龙时候的BGM
|
||||||
|
play_boss_music: true
|
||||||
|
|
||||||
#末影龙火球命中后产生的效果云
|
#末影龙火球命中后产生的效果云
|
||||||
effect_cloud:
|
effect_cloud:
|
||||||
#初始半径,允许小数
|
#初始半径,允许小数
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
## Special thanks to Phaxius for the translation
|
## Special thanks to Phaxius for the translation
|
||||||
|
|
||||||
# File version, do not edit
|
# File version, do not edit
|
||||||
version: 2.4.0
|
version: 2.5.0
|
||||||
|
|
||||||
# Unique ID used by plugin to identify each type of dragon
|
# Unique ID used by plugin to identify each type of dragon
|
||||||
# unique_name needs to be different in each dragon settings file
|
# unique_name needs to be different in each dragon settings file
|
||||||
@@ -140,6 +140,11 @@ bossbar:
|
|||||||
# SEGMENTED_12 (12 Segments), SEGMENTED_20 (20 Segments)
|
# SEGMENTED_12 (12 Segments), SEGMENTED_20 (20 Segments)
|
||||||
style: 'SEGMENTED_12'
|
style: 'SEGMENTED_12'
|
||||||
|
|
||||||
|
# [true/false]
|
||||||
|
create_frog: true
|
||||||
|
darken_sky: true
|
||||||
|
play_boss_music: true
|
||||||
|
|
||||||
#The effect cloud produced after the ender dragon fireball hits
|
#The effect cloud produced after the ender dragon fireball hits
|
||||||
effect_cloud:
|
effect_cloud:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user