From 4d29813394618e8fe8a3977df264ac12eaceb7b3 Mon Sep 17 00:00:00 2001 From: Xanadu13 Date: Fri, 5 Jan 2024 09:05:24 +0800 Subject: [PATCH 01/16] add bossbar flag options --- .../enderdragon/listener/DragonSpawnListener.java | 15 ++++++++++----- .../xanadu/enderdragon/manager/DragonManager.java | 7 +++++-- .../xanadu/enderdragon/metadata/MyDragon.java | 3 +++ .../enderdragon/nms/BossBar/I_BossBarManager.java | 3 ++- .../nms/BossBar/v1_12_R1/BossBarManager.java | 15 ++++++++------- .../nms/BossBar/v1_13_R1/BossBarManager.java | 15 ++++++++------- .../nms/BossBar/v1_13_R2/BossBarManager.java | 15 ++++++++------- .../nms/BossBar/v1_14_R1/BossBarManager.java | 3 ++- .../nms/BossBar/v1_15_R1/BossBarManager.java | 3 ++- .../BossBar/v1_16_R1_above/BossBarManager.java | 3 ++- .../pers/xanadu/enderdragon/util/Version.java | 2 +- src/main/resources/plugin.yml | 2 +- src/main/resources/setting/default-zhcn.yml | 10 +++++++++- src/main/resources/setting/default.yml | 7 ++++++- src/main/resources/setting/special-zhcn.yml | 10 +++++++++- src/main/resources/setting/special.yml | 7 ++++++- 16 files changed, 82 insertions(+), 38 deletions(-) diff --git a/src/main/java/pers/xanadu/enderdragon/listener/DragonSpawnListener.java b/src/main/java/pers/xanadu/enderdragon/listener/DragonSpawnListener.java index 52d1a50..657ed6e 100644 --- a/src/main/java/pers/xanadu/enderdragon/listener/DragonSpawnListener.java +++ b/src/main/java/pers/xanadu/enderdragon/listener/DragonSpawnListener.java @@ -3,6 +3,7 @@ package pers.xanadu.enderdragon.listener; import org.bukkit.Bukkit; import org.bukkit.attribute.Attribute; import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarFlag; import org.bukkit.boss.BarStyle; import org.bukkit.boss.BossBar; import org.bukkit.entity.*; @@ -70,18 +71,22 @@ public class DragonSpawnListener implements Listener { String color = myDragon.glow_color.toUpperCase(); if(color.equals("NONE")) dragon.setGlowing(false); else setGlowingColor(dragon,getGlowColor(color)); - String bossBar_color = myDragon.bossbar_color.toUpperCase(); - String bossBar_style = myDragon.bossbar_style.toUpperCase(); if(Version.mcMainVersion >= 14){ BossBar bossBar = dragon.getBossBar(); if(bossBar != null){ - bossBar.setColor(BarColor.valueOf(bossBar_color)); - bossBar.setStyle(BarStyle.valueOf(bossBar_style)); + bossBar.setColor(BarColor.valueOf(myDragon.bossbar_color)); + 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){ - getInstance().getBossBarManager().setBossBar(dragon.getWorld(),myDragon.display_name,bossBar_color,bossBar_style); + getInstance().getBossBarManager().setBossBar(dragon.getWorld(),myDragon); } if(Config.advanced_setting_save_bossbar){ getInstance().getBossBarManager().saveBossBarData(Collections.singletonList(dragon.getWorld())); diff --git a/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java b/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java index eb32b0c..1fb38e5 100644 --- a/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java +++ b/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java @@ -220,8 +220,11 @@ public class DragonManager { myDragon.death_broadcast_msg = f.getStringList("death_broadcast_msg"); myDragon.msg_to_killer = f.getStringList("msg_to_killer"); myDragon.glow_color = f.getString("glow_color","random"); - myDragon.bossbar_color = f.getString("bossbar.color","WHITE"); - myDragon.bossbar_style = f.getString("bossbar.style","SOLID"); + myDragon.bossbar_color = f.getString("bossbar.color","WHITE").toUpperCase(); + 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_expand_speed = f.getDouble("effect_cloud.expand_speed",0.1333333); myDragon.effect_cloud_duration = f.getInt("effect_cloud.duration",60); diff --git a/src/main/java/pers/xanadu/enderdragon/metadata/MyDragon.java b/src/main/java/pers/xanadu/enderdragon/metadata/MyDragon.java index 036a6d6..31e6413 100644 --- a/src/main/java/pers/xanadu/enderdragon/metadata/MyDragon.java +++ b/src/main/java/pers/xanadu/enderdragon/metadata/MyDragon.java @@ -47,6 +47,9 @@ public class MyDragon implements Comparable{ public String glow_color; public String bossbar_color; 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_expand_speed; public int effect_cloud_duration; diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/I_BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/I_BossBarManager.java index 7968aee..db08627 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/I_BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/I_BossBarManager.java @@ -1,11 +1,12 @@ package pers.xanadu.enderdragon.nms.BossBar; import org.bukkit.World; +import pers.xanadu.enderdragon.metadata.MyDragon; import java.util.List; public interface I_BossBarManager { void saveBossBarData(List worlds); void loadBossBarData(List worlds); - void setBossBar(World world,String title,String color,String style); + void setBossBar(World world, final MyDragon myDragon); } diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_12_R1/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_12_R1/BossBarManager.java index fc22c5d..5c4efbe 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_12_R1/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_12_R1/BossBarManager.java @@ -8,6 +8,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.craftbukkit.v1_12_R1.util.CraftChatMessage; import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.manager.DragonManager; +import pers.xanadu.enderdragon.metadata.MyDragon; import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; import java.io.File; @@ -71,15 +72,15 @@ public class BossBarManager implements I_BossBarManager { } }); } - public void setBossBar(World world,String title,String color,String style){ + public void setBossBar(World world, final MyDragon myDragon){ BossBattleServer bbs = new BossBattleServer( - CraftChatMessage.fromString(title, true)[0], - convertColor(color), - convertStyle(style) + CraftChatMessage.fromString(myDragon.display_name, true)[0], + convertColor(myDragon.bossbar_color), + convertStyle(myDragon.bossbar_style) ); - bbs.setCreateFog(true); - bbs.setDarkenSky(true); - bbs.setPlayMusic(true); + bbs.setCreateFog(myDragon.bossbar_create_frog); + bbs.setDarkenSky(myDragon.bossbar_darken_sky); + bbs.setPlayMusic(myDragon.bossbar_play_boss_music); try{ Object edb = DragonManager.getEnderDragonBattle(world); assert edb != null; diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R1/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R1/BossBarManager.java index 4cbe015..c1393fb 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R1/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R1/BossBarManager.java @@ -8,6 +8,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.craftbukkit.v1_13_R1.util.CraftChatMessage; import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.manager.DragonManager; +import pers.xanadu.enderdragon.metadata.MyDragon; import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; import java.io.File; @@ -71,15 +72,15 @@ public class BossBarManager implements I_BossBarManager { } }); } - public void setBossBar(World world,String title,String color,String style){ + public void setBossBar(World world, final MyDragon myDragon){ BossBattleServer bbs = new BossBattleServer( - CraftChatMessage.fromString(title, true)[0], - convertColor(color), - convertStyle(style) + CraftChatMessage.fromString(myDragon.display_name, true)[0], + convertColor(myDragon.bossbar_color), + convertStyle(myDragon.bossbar_style) ); - bbs.setCreateFog(true); - bbs.setDarkenSky(true); - bbs.setPlayMusic(true); + bbs.setCreateFog(myDragon.bossbar_create_frog); + bbs.setDarkenSky(myDragon.bossbar_darken_sky); + bbs.setPlayMusic(myDragon.bossbar_play_boss_music); try{ Object edb = DragonManager.getEnderDragonBattle(world); assert edb != null; diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R2/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R2/BossBarManager.java index adc5b3a..a58c7a6 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R2/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R2/BossBarManager.java @@ -8,6 +8,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.craftbukkit.v1_13_R2.util.CraftChatMessage; import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.manager.DragonManager; +import pers.xanadu.enderdragon.metadata.MyDragon; import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; import java.io.File; @@ -71,15 +72,15 @@ public class BossBarManager implements I_BossBarManager { } }); } - public void setBossBar(World world,String title,String color,String style){ + public void setBossBar(World world, final MyDragon myDragon){ BossBattleServer bbs = new BossBattleServer( - CraftChatMessage.fromString(title, true)[0], - convertColor(color), - convertStyle(style) + CraftChatMessage.fromString(myDragon.display_name, true)[0], + convertColor(myDragon.bossbar_color), + convertStyle(myDragon.bossbar_style) ); - bbs.setCreateFog(true); - bbs.setDarkenSky(true); - bbs.setPlayMusic(true); + bbs.setCreateFog(myDragon.bossbar_create_frog); + bbs.setDarkenSky(myDragon.bossbar_darken_sky); + bbs.setPlayMusic(myDragon.bossbar_play_boss_music); try{ Object edb = DragonManager.getEnderDragonBattle(world); assert edb != null; diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java index 695494d..d58ce05 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java @@ -8,6 +8,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.craftbukkit.v1_14_R1.util.CraftChatMessage; import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.manager.DragonManager; +import pers.xanadu.enderdragon.metadata.MyDragon; import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; import java.io.File; @@ -71,6 +72,6 @@ public class BossBarManager implements I_BossBarManager { } }); } - public void setBossBar(World world,String title,String color,String style){ + public void setBossBar(World world, final MyDragon myDragon){ } } \ No newline at end of file diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java index 4931766..9b9f328 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java @@ -8,6 +8,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.craftbukkit.v1_15_R1.util.CraftChatMessage; import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.manager.DragonManager; +import pers.xanadu.enderdragon.metadata.MyDragon; import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; import java.io.File; @@ -71,7 +72,7 @@ public class BossBarManager implements I_BossBarManager { } }); } - public void setBossBar(World world,String title,String color,String style){ + public void setBossBar(World world, final MyDragon myDragon){ } } \ No newline at end of file diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java index 2517ddf..352fd4c 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java @@ -8,6 +8,7 @@ import org.bukkit.boss.DragonBattle; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; import pers.xanadu.enderdragon.config.Lang; +import pers.xanadu.enderdragon.metadata.MyDragon; import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; import java.io.File; @@ -57,6 +58,6 @@ public class BossBarManager implements I_BossBarManager { bossBar.setStyle(BarStyle.valueOf(yml.getString(path+"style"))); }); } - public void setBossBar(World world,String title,String color,String style){ + public void setBossBar(World world, final MyDragon myDragon){ } } \ No newline at end of file diff --git a/src/main/java/pers/xanadu/enderdragon/util/Version.java b/src/main/java/pers/xanadu/enderdragon/util/Version.java index c48f29f..01917dc 100644 --- a/src/main/java/pers/xanadu/enderdragon/util/Version.java +++ b/src/main/java/pers/xanadu/enderdragon/util/Version.java @@ -9,7 +9,7 @@ import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager; import static org.bukkit.Bukkit.getServer; 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 config = "2.3.0"; public static final String data = "2.2.0"; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 4c7d5c5..526d305 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: EnderDragon -version: 2.4.0 +version: 2.5.0-dev main: pers.xanadu.enderdragon.EnderDragon author: Xanadu13 api-version: 1.13 diff --git a/src/main/resources/setting/default-zhcn.yml b/src/main/resources/setting/default-zhcn.yml index 8ad3818..1f7c9c6 100644 --- a/src/main/resources/setting/default-zhcn.yml +++ b/src/main/resources/setting/default-zhcn.yml @@ -1,5 +1,5 @@ #文件版本,请勿修改 -version: 2.4.0 +version: 2.5.0 #用于插件内部识别,每一种末影龙的unique_name都需要设为不同值! unique_name: 'default' @@ -118,6 +118,14 @@ bossbar: #SOLID:整条,SEGMENTED_6:将血条分为6个部分,SEGMENTED_10:将血条分为10个部分,SEGMENTED_12:将血条分为12个部分,SEGMENTED_20:将血条分为20个部分 style: 'SOLID' + # [true/false] + # 生成迷雾 + create_frog: true + # 使天空阴暗 + darken_sky: true + # 播放打末影龙时候的BGM + play_boss_music: true + #末影龙火球命中后产生的效果云 effect_cloud: #初始半径,允许小数 diff --git a/src/main/resources/setting/default.yml b/src/main/resources/setting/default.yml index 08c3505..462c0f5 100644 --- a/src/main/resources/setting/default.yml +++ b/src/main/resources/setting/default.yml @@ -1,4 +1,4 @@ -version: 2.4.0 +version: 2.5.0 #This is used for plugin internal identification. #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 style: 'SOLID' + # [true/false] + create_frog: true + darken_sky: true + play_boss_music: true + effect_cloud: #enter a double that above 0 original_radius: 5 diff --git a/src/main/resources/setting/special-zhcn.yml b/src/main/resources/setting/special-zhcn.yml index 993daae..d6a74d9 100644 --- a/src/main/resources/setting/special-zhcn.yml +++ b/src/main/resources/setting/special-zhcn.yml @@ -1,5 +1,5 @@ #文件版本,请勿修改 -version: 2.4.0 +version: 2.5.0 #用于插件内部识别,每一种末影龙的unique_name都需要设为不同值! unique_name: 'special001' @@ -117,6 +117,14 @@ bossbar: #SOLID:整条,SEGMENTED_6:将血条分为6个部分,SEGMENTED_10:将血条分为10个部分,SEGMENTED_12:将血条分为12个部分,SEGMENTED_20:将血条分为20个部分 style: 'SEGMENTED_12' + # [true/false] + # 生成迷雾 + create_frog: true + # 使天空阴暗 + darken_sky: true + # 播放打末影龙时候的BGM + play_boss_music: true + #末影龙火球命中后产生的效果云 effect_cloud: #初始半径,允许小数 diff --git a/src/main/resources/setting/special.yml b/src/main/resources/setting/special.yml index 496b3ed..fdf4017 100644 --- a/src/main/resources/setting/special.yml +++ b/src/main/resources/setting/special.yml @@ -1,7 +1,7 @@ ## Special thanks to Phaxius for the translation # 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_name needs to be different in each dragon settings file @@ -140,6 +140,11 @@ bossbar: # SEGMENTED_12 (12 Segments), SEGMENTED_20 (20 Segments) 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 effect_cloud: From a3fc59e7837169f6d030b1c2e98dd0f8de8bbb04 Mon Sep 17 00:00:00 2001 From: Xanadu13 <104714710+iXanadu13@users.noreply.github.com> Date: Fri, 5 Jan 2024 10:02:08 +0800 Subject: [PATCH 02/16] adapt bossbar save --- .../nms/BossBar/v1_12_R1/BossBarManager.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_12_R1/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_12_R1/BossBarManager.java index 5c4efbe..4b57a05 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_12_R1/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_12_R1/BossBarManager.java @@ -23,6 +23,7 @@ public class BossBarManager implements I_BossBarManager { public void saveBossBarData(List worlds){ File file = new File(plugin.getDataFolder(),"world_data.yml"); YamlConfiguration yml = new YamlConfiguration(); + char split = yml.options().pathSeparator(); worlds.forEach(world -> { try{ Object edb = DragonManager.getEnderDragonBattle(world); @@ -30,10 +31,13 @@ public class BossBarManager implements I_BossBarManager { if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("c"); BossBattleServer.setAccessible(true); 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+"color",bbs.color.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){ e.printStackTrace(); } @@ -50,6 +54,7 @@ public class BossBarManager implements I_BossBarManager { if(!file.exists()) return; Lang.info("Enabling BossBar fix..."); YamlConfiguration yml = new YamlConfiguration(); + char split = yml.options().pathSeparator(); try{ yml.load(file); }catch (InvalidConfigurationException | IOException e) { @@ -63,10 +68,13 @@ public class BossBarManager implements I_BossBarManager { if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("c"); BossBattleServer.setAccessible(true); 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.color = BossBattle.BarColor.valueOf(yml.getString(path+"color")); 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){ e.printStackTrace(); } From b8c4e6c8421a73241bdd9ba93b7141bd1ecee496 Mon Sep 17 00:00:00 2001 From: Xanadu13 <104714710+iXanadu13@users.noreply.github.com> Date: Fri, 5 Jan 2024 10:03:20 +0800 Subject: [PATCH 03/16] adapt bossbar save --- .../nms/BossBar/v1_13_R1/BossBarManager.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R1/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R1/BossBarManager.java index c1393fb..4353f4a 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R1/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R1/BossBarManager.java @@ -23,6 +23,7 @@ public class BossBarManager implements I_BossBarManager { public void saveBossBarData(List worlds){ File file = new File(plugin.getDataFolder(),"world_data.yml"); YamlConfiguration yml = new YamlConfiguration(); + char split = yml.options().pathSeparator(); worlds.forEach(world -> { try{ Object edb = DragonManager.getEnderDragonBattle(world); @@ -30,10 +31,13 @@ public class BossBarManager implements I_BossBarManager { if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("c"); BossBattleServer.setAccessible(true); 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+"color",bbs.color.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){ e.printStackTrace(); } @@ -50,6 +54,7 @@ public class BossBarManager implements I_BossBarManager { if(!file.exists()) return; Lang.info("Enabling BossBar fix..."); YamlConfiguration yml = new YamlConfiguration(); + char split = yml.options().pathSeparator(); try{ yml.load(file); }catch (InvalidConfigurationException | IOException e) { @@ -63,10 +68,13 @@ public class BossBarManager implements I_BossBarManager { if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("c"); BossBattleServer.setAccessible(true); 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.color = BossBattle.BarColor.valueOf(yml.getString(path+"color")); 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){ e.printStackTrace(); } From 7c5be09920966df0c044eb7d5cd3c60c94e60ad9 Mon Sep 17 00:00:00 2001 From: Xanadu13 <104714710+iXanadu13@users.noreply.github.com> Date: Fri, 5 Jan 2024 10:03:45 +0800 Subject: [PATCH 04/16] adapt bossbar save --- .../nms/BossBar/v1_13_R2/BossBarManager.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R2/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R2/BossBarManager.java index a58c7a6..dd969c4 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R2/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R2/BossBarManager.java @@ -23,6 +23,7 @@ public class BossBarManager implements I_BossBarManager { public void saveBossBarData(List worlds){ File file = new File(plugin.getDataFolder(),"world_data.yml"); YamlConfiguration yml = new YamlConfiguration(); + char split = yml.options().pathSeparator(); worlds.forEach(world -> { try{ Object edb = DragonManager.getEnderDragonBattle(world); @@ -30,10 +31,13 @@ public class BossBarManager implements I_BossBarManager { if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle"); BossBattleServer.setAccessible(true); 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+"color",bbs.color.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){ e.printStackTrace(); } @@ -50,6 +54,7 @@ public class BossBarManager implements I_BossBarManager { if(!file.exists()) return; Lang.info("Enabling BossBar fix..."); YamlConfiguration yml = new YamlConfiguration(); + char split = yml.options().pathSeparator(); try{ yml.load(file); }catch (InvalidConfigurationException | IOException e) { @@ -63,10 +68,13 @@ public class BossBarManager implements I_BossBarManager { if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle"); BossBattleServer.setAccessible(true); 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.color = BossBattle.BarColor.valueOf(yml.getString(path+"color")); 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){ e.printStackTrace(); } From f46638c2d4e737a1870432ba0381eaa8b5e3c7d9 Mon Sep 17 00:00:00 2001 From: Xanadu13 <104714710+iXanadu13@users.noreply.github.com> Date: Fri, 5 Jan 2024 10:04:39 +0800 Subject: [PATCH 05/16] adapt bossbar save --- .../nms/BossBar/v1_14_R1/BossBarManager.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java index d58ce05..130b358 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java @@ -23,6 +23,7 @@ public class BossBarManager implements I_BossBarManager { public void saveBossBarData(List worlds){ File file = new File(plugin.getDataFolder(),"world_data.yml"); YamlConfiguration yml = new YamlConfiguration(); + char split = yml.options().pathSeparator(); worlds.forEach(world -> { try{ Object edb = DragonManager.getEnderDragonBattle(world); @@ -30,10 +31,13 @@ public class BossBarManager implements I_BossBarManager { if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle"); BossBattleServer.setAccessible(true); 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+"color",bbs.color.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){ e.printStackTrace(); } @@ -50,6 +54,7 @@ public class BossBarManager implements I_BossBarManager { if(!file.exists()) return; Lang.info("Enabling BossBar fix..."); YamlConfiguration yml = new YamlConfiguration(); + char split = yml.options().pathSeparator(); try{ yml.load(file); }catch (InvalidConfigurationException | IOException e) { @@ -63,10 +68,13 @@ public class BossBarManager implements I_BossBarManager { if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle"); BossBattleServer.setAccessible(true); 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.color = BossBattle.BarColor.valueOf(yml.getString(path+"color")); 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){ e.printStackTrace(); } @@ -74,4 +82,4 @@ public class BossBarManager implements I_BossBarManager { } public void setBossBar(World world, final MyDragon myDragon){ } -} \ No newline at end of file +} From 769fa301b67ca8c58517183eac48e74955e91efe Mon Sep 17 00:00:00 2001 From: Xanadu13 <104714710+iXanadu13@users.noreply.github.com> Date: Fri, 5 Jan 2024 10:05:02 +0800 Subject: [PATCH 06/16] adapt bossbar save --- .../nms/BossBar/v1_15_R1/BossBarManager.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java index 9b9f328..f6e779d 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java @@ -23,6 +23,7 @@ public class BossBarManager implements I_BossBarManager { public void saveBossBarData(List worlds){ File file = new File(plugin.getDataFolder(),"world_data.yml"); YamlConfiguration yml = new YamlConfiguration(); + char split = yml.options().pathSeparator(); worlds.forEach(world -> { try{ Object edb = DragonManager.getEnderDragonBattle(world); @@ -30,10 +31,13 @@ public class BossBarManager implements I_BossBarManager { if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle"); BossBattleServer.setAccessible(true); 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+"color",bbs.color.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){ e.printStackTrace(); } @@ -50,6 +54,7 @@ public class BossBarManager implements I_BossBarManager { if(!file.exists()) return; Lang.info("Enabling BossBar fix..."); YamlConfiguration yml = new YamlConfiguration(); + char split = yml.options().pathSeparator(); try{ yml.load(file); }catch (InvalidConfigurationException | IOException e) { @@ -63,10 +68,13 @@ public class BossBarManager implements I_BossBarManager { if(BossBattleServer == null) BossBattleServer = edb.getClass().getDeclaredField("bossBattle"); BossBattleServer.setAccessible(true); 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.color = BossBattle.BarColor.valueOf(yml.getString(path+"color")); 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){ e.printStackTrace(); } @@ -75,4 +83,4 @@ public class BossBarManager implements I_BossBarManager { public void setBossBar(World world, final MyDragon myDragon){ } -} \ No newline at end of file +} From 282dcba1f491704cac98d7b200009b295b405eac Mon Sep 17 00:00:00 2001 From: Xanadu13 <104714710+iXanadu13@users.noreply.github.com> Date: Fri, 5 Jan 2024 10:05:26 +0800 Subject: [PATCH 07/16] adapt bossbar save --- .../v1_16_R1_above/BossBarManager.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java index 352fd4c..dfa714b 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java @@ -1,10 +1,7 @@ package pers.xanadu.enderdragon.nms.BossBar.v1_16_R1_above; import org.bukkit.World; -import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarStyle; -import org.bukkit.boss.BossBar; -import org.bukkit.boss.DragonBattle; +import org.bukkit.boss.*; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; import pers.xanadu.enderdragon.config.Lang; @@ -21,14 +18,18 @@ public class BossBarManager implements I_BossBarManager { public void saveBossBarData(List worlds){ File file = new File(plugin.getDataFolder(),"world_data.yml"); YamlConfiguration yml = new YamlConfiguration(); + char split = yml.options().pathSeparator(); worlds.forEach(world -> { DragonBattle battle = world.getEnderDragonBattle(); if(battle == null) return; 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+"color",bossBar.getColor().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{ yml.save(file); @@ -42,6 +43,7 @@ public class BossBarManager implements I_BossBarManager { if(!file.exists()) return; Lang.info("Enabling BossBar fix..."); YamlConfiguration yml = new YamlConfiguration(); + char split = yml.options().pathSeparator(); try{ yml.load(file); }catch (InvalidConfigurationException | IOException e) { @@ -52,12 +54,18 @@ public class BossBarManager implements I_BossBarManager { DragonBattle battle = world.getEnderDragonBattle(); if(battle == null) return; BossBar bossBar = battle.getBossBar(); - String path = world.getName() + yml.options().pathSeparator(); + String path = world.getName() + split; bossBar.setTitle(yml.getString(path+"title")); bossBar.setColor(BarColor.valueOf(yml.getString(path+"color"))); 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, final MyDragon myDragon){ } -} \ No newline at end of file +} From 3d617506d367d948fff35856a0181a433bf4c361 Mon Sep 17 00:00:00 2001 From: Xanadu13 Date: Thu, 29 Feb 2024 20:38:27 +0800 Subject: [PATCH 08/16] add enable_worlds --- .../enderdragon/command/TabCompleter.java | 6 +-- .../listener/DragonAttackListener.java | 2 + .../listener/DragonBaseHurtListener.java | 2 + .../DragonDamageByPlayerListener.java | 2 + .../listener/DragonDeathListener.java | 2 + .../listener/DragonExplosionHurtListener.java | 6 +++ .../listener/DragonFireballListener.java | 2 + .../listener/DragonHealListener.java | 2 + .../listener/DragonSpawnListener.java | 19 ++++++--- .../mythiclib/PlayerAttackListener.java | 2 + .../enderdragon/manager/WorldManager.java | 17 ++++---- .../nms/BossBar/v1_14_R1/BossBarManager.java | 2 +- .../nms/BossBar/v1_15_R1/BossBarManager.java | 2 +- .../v1_16_R1_above/BossBarManager.java | 2 +- .../enderdragon/util/ConcurrentSet.java | 39 +++++++++++++++++++ 15 files changed, 89 insertions(+), 18 deletions(-) create mode 100644 src/main/java/pers/xanadu/enderdragon/util/ConcurrentSet.java diff --git a/src/main/java/pers/xanadu/enderdragon/command/TabCompleter.java b/src/main/java/pers/xanadu/enderdragon/command/TabCompleter.java index 7923336..4ffab20 100644 --- a/src/main/java/pers/xanadu/enderdragon/command/TabCompleter.java +++ b/src/main/java/pers/xanadu/enderdragon/command/TabCompleter.java @@ -34,7 +34,7 @@ public class TabCompleter implements org.bukkit.command.TabCompleter { result.addAll(arguments_drop); } else if(args[0].equalsIgnoreCase("respawn")){ - result.addAll(WorldManager.worlds); + result.addAll(WorldManager.all_worlds); } else if(args[0].equalsIgnoreCase("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])){ String str = args[1].toLowerCase(); 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])){ - result.addAll(WorldManager.worlds); + result.addAll(WorldManager.all_worlds); } else if("action".equals(args[0])){ result.addAll(arguments_action); diff --git a/src/main/java/pers/xanadu/enderdragon/listener/DragonAttackListener.java b/src/main/java/pers/xanadu/enderdragon/listener/DragonAttackListener.java index b94897a..0ad070d 100644 --- a/src/main/java/pers/xanadu/enderdragon/listener/DragonAttackListener.java +++ b/src/main/java/pers/xanadu/enderdragon/listener/DragonAttackListener.java @@ -7,6 +7,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.potion.PotionEffect; import pers.xanadu.enderdragon.manager.DragonManager; +import pers.xanadu.enderdragon.manager.WorldManager; import pers.xanadu.enderdragon.util.ExtraPotionEffect; import pers.xanadu.enderdragon.metadata.MyDragon; @@ -17,6 +18,7 @@ public class DragonAttackListener implements Listener { Entity attack = e.getDamager(); if(!(attack instanceof EnderDragon)) return; EnderDragon dragon = (EnderDragon) attack; + if(!WorldManager.enable_worlds.contains(dragon.getWorld().getName())) return; String unique_name = DragonManager.getSpecialKey(dragon); if(unique_name == null) return; MyDragon myDragon = DragonManager.get_dragon_config(unique_name); diff --git a/src/main/java/pers/xanadu/enderdragon/listener/DragonBaseHurtListener.java b/src/main/java/pers/xanadu/enderdragon/listener/DragonBaseHurtListener.java index 3fbd345..3141557 100644 --- a/src/main/java/pers/xanadu/enderdragon/listener/DragonBaseHurtListener.java +++ b/src/main/java/pers/xanadu/enderdragon/listener/DragonBaseHurtListener.java @@ -6,6 +6,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import pers.xanadu.enderdragon.event.DragonDamageByPlayerEvent; +import pers.xanadu.enderdragon.manager.WorldManager; import static pers.xanadu.enderdragon.EnderDragon.pm; @@ -17,6 +18,7 @@ public class DragonBaseHurtListener implements Listener { Entity victim = e.getEntity(); Entity entity = e.getDamager(); if(victim instanceof EnderDragon){ + if(!WorldManager.enable_worlds.contains(victim.getWorld().getName())) return; EnderDragon dragon = (EnderDragon) victim; if(entity instanceof Player){ Player player = (Player) entity; diff --git a/src/main/java/pers/xanadu/enderdragon/listener/DragonDamageByPlayerListener.java b/src/main/java/pers/xanadu/enderdragon/listener/DragonDamageByPlayerListener.java index e293383..e1027eb 100644 --- a/src/main/java/pers/xanadu/enderdragon/listener/DragonDamageByPlayerListener.java +++ b/src/main/java/pers/xanadu/enderdragon/listener/DragonDamageByPlayerListener.java @@ -11,6 +11,7 @@ import pers.xanadu.enderdragon.config.Config; import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.event.DragonDamageByPlayerEvent; import pers.xanadu.enderdragon.manager.DamageManager; +import pers.xanadu.enderdragon.manager.WorldManager; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @@ -22,6 +23,7 @@ public class DragonDamageByPlayerListener implements Listener { if(e.isCancelled()) return; Player p = e.getDamager(); EnderDragon dragon = e.getDragon(); + if(!WorldManager.enable_worlds.contains(dragon.getWorld().getName())) return; double health = dragon.getHealth(); double damage = Math.min(e.getFinalDamage(),health); if(damage > 0.0d){ diff --git a/src/main/java/pers/xanadu/enderdragon/listener/DragonDeathListener.java b/src/main/java/pers/xanadu/enderdragon/listener/DragonDeathListener.java index 4bc73a7..f94b7db 100644 --- a/src/main/java/pers/xanadu/enderdragon/listener/DragonDeathListener.java +++ b/src/main/java/pers/xanadu/enderdragon/listener/DragonDeathListener.java @@ -19,6 +19,7 @@ import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.manager.DamageManager; import pers.xanadu.enderdragon.manager.DragonManager; import pers.xanadu.enderdragon.manager.TimerManager; +import pers.xanadu.enderdragon.manager.WorldManager; import pers.xanadu.enderdragon.metadata.MyDragon; import pers.xanadu.enderdragon.reward.SpecialLoot; import pers.xanadu.enderdragon.util.Pair; @@ -37,6 +38,7 @@ public class DragonDeathListener implements Listener { public void OnDragonDeath(final EntityDeathEvent e){ if(!(e.getEntity() instanceof EnderDragon)) return; EnderDragon dragon = (EnderDragon) e.getEntity(); + if(!WorldManager.enable_worlds.contains(dragon.getWorld().getName())) return; String unique_name = DragonManager.getSpecialKey(dragon); if(unique_name == null) return; MyDragon myDragon = DragonManager.get_dragon_config(unique_name); diff --git a/src/main/java/pers/xanadu/enderdragon/listener/DragonExplosionHurtListener.java b/src/main/java/pers/xanadu/enderdragon/listener/DragonExplosionHurtListener.java index ef74694..2c5765b 100644 --- a/src/main/java/pers/xanadu/enderdragon/listener/DragonExplosionHurtListener.java +++ b/src/main/java/pers/xanadu/enderdragon/listener/DragonExplosionHurtListener.java @@ -15,6 +15,7 @@ import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerBedEnterEvent; import pers.xanadu.enderdragon.event.DragonDamageByPlayerEvent; import pers.xanadu.enderdragon.event.PlayerExplodeDragonEvent; +import pers.xanadu.enderdragon.manager.WorldManager; import java.util.Collection; import java.util.UUID; @@ -34,6 +35,7 @@ public class DragonExplosionHurtListener implements Listener { Entity victim = e.getEntity(); Entity entity = e.getDamager(); if(victim instanceof EnderDragon){ + if(!WorldManager.enable_worlds.contains(victim.getWorld().getName())) return; EnderDragon dragon = (EnderDragon) victim; if(entity instanceof TNTPrimed){ TNTPrimed tnt = (TNTPrimed) entity; @@ -56,6 +58,7 @@ public class DragonExplosionHurtListener implements Listener { if(e.getCause() != EntityDamageEvent.DamageCause.BLOCK_EXPLOSION) return; Entity entity = e.getEntity(); if(entity instanceof EnderDragon){ + if(!WorldManager.enable_worlds.contains(entity.getWorld().getName())) return; EnderDragon dragon = (EnderDragon) entity; for(UUID uuid : mp.keySet()){ PlayerExplodeDragonEvent ped = mp.get(uuid); @@ -72,7 +75,10 @@ public class DragonExplosionHurtListener implements Listener { @EventHandler(priority = EventPriority.HIGH) public void OnPlayerClickBed(final PlayerBedEnterEvent e){ Player p = e.getPlayer(); + // more precise judgement is needed. + // try World::isBedWorks() 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()); Location bed_loc = e.getBed().getLocation(); Collection entities = getExplosionDragon(5f,bed_loc); diff --git a/src/main/java/pers/xanadu/enderdragon/listener/DragonFireballListener.java b/src/main/java/pers/xanadu/enderdragon/listener/DragonFireballListener.java index 3f8c4f3..589ceda 100644 --- a/src/main/java/pers/xanadu/enderdragon/listener/DragonFireballListener.java +++ b/src/main/java/pers/xanadu/enderdragon/listener/DragonFireballListener.java @@ -10,6 +10,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.potion.PotionEffect; import pers.xanadu.enderdragon.manager.DragonManager; +import pers.xanadu.enderdragon.manager.WorldManager; import pers.xanadu.enderdragon.metadata.MyDragon; 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() instanceof EnderDragon)) return; EnderDragon dragon = (EnderDragon) effectCloud.getSource(); + if(!WorldManager.enable_worlds.contains(dragon.getWorld().getName())) return; String unique_name = getSpecialKey(dragon); if(unique_name == null) return; MyDragon myDragon = DragonManager.get_dragon_config(unique_name); diff --git a/src/main/java/pers/xanadu/enderdragon/listener/DragonHealListener.java b/src/main/java/pers/xanadu/enderdragon/listener/DragonHealListener.java index 25bf4d4..b26329a 100644 --- a/src/main/java/pers/xanadu/enderdragon/listener/DragonHealListener.java +++ b/src/main/java/pers/xanadu/enderdragon/listener/DragonHealListener.java @@ -6,6 +6,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityRegainHealthEvent; import pers.xanadu.enderdragon.manager.DragonManager; +import pers.xanadu.enderdragon.manager.WorldManager; import pers.xanadu.enderdragon.metadata.MyDragon; import static pers.xanadu.enderdragon.manager.DragonManager.getSpecialKey; @@ -15,6 +16,7 @@ public class DragonHealListener implements Listener { public void OnDragonHeal(final EntityRegainHealthEvent e){ if(!(e.getEntity() instanceof EnderDragon)) return; EnderDragon dragon = (EnderDragon) e.getEntity(); + if(!WorldManager.enable_worlds.contains(dragon.getWorld().getName())) return; if(!e.getRegainReason().equals(EntityRegainHealthEvent.RegainReason.ENDER_CRYSTAL)) return; String unique_name = getSpecialKey(dragon); if(unique_name == null) return; diff --git a/src/main/java/pers/xanadu/enderdragon/listener/DragonSpawnListener.java b/src/main/java/pers/xanadu/enderdragon/listener/DragonSpawnListener.java index 657ed6e..e16e7ae 100644 --- a/src/main/java/pers/xanadu/enderdragon/listener/DragonSpawnListener.java +++ b/src/main/java/pers/xanadu/enderdragon/listener/DragonSpawnListener.java @@ -1,6 +1,7 @@ package pers.xanadu.enderdragon.listener; import org.bukkit.Bukkit; +import org.bukkit.World; import org.bukkit.attribute.Attribute; import org.bukkit.boss.BarColor; import org.bukkit.boss.BarFlag; @@ -15,6 +16,8 @@ import pers.xanadu.enderdragon.config.Config; import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.event.DragonRespawnPostEvent; import pers.xanadu.enderdragon.manager.DamageManager; +import pers.xanadu.enderdragon.manager.DragonManager; +import pers.xanadu.enderdragon.manager.WorldManager; import pers.xanadu.enderdragon.metadata.DragonInfo; import pers.xanadu.enderdragon.metadata.MyDragon; import pers.xanadu.enderdragon.util.Version; @@ -30,19 +33,20 @@ public class DragonSpawnListener implements Listener { @EventHandler(priority = EventPriority.LOW) public void OnDragonSpawn(final CreatureSpawnEvent e){ if(!(e.getEntity() instanceof EnderDragon)) return; - if(Config.blacklist_worlds.contains(e.getEntity().getWorld().getName())) return; + if(!WorldManager.enable_worlds.contains(e.getEntity().getWorld().getName())) return; if(Config.blacklist_spawn_reason.contains(e.getSpawnReason().name())) return; EnderDragon dragon = (EnderDragon) e.getEntity(); + World world = dragon.getWorld(); MyDragon myDragon = null; if(e.getSpawnReason() == CreatureSpawnEvent.SpawnReason.DEFAULT){ - myDragon = getDesignatedDragon(dragon.getWorld()); + myDragon = getDesignatedDragon(world); } if(myDragon == null) myDragon = judge(); if(myDragon == null) { Lang.warn("special_dragon_jude_mode setting error!"); 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)); MyDragon update = getFromInfo(info); if(update == null) { @@ -51,6 +55,11 @@ public class DragonSpawnListener implements Listener { else{ 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); DamageManager.data.put(dragon.getUniqueId(),new ConcurrentHashMap<>()); int times = data.getInt("times"); @@ -86,10 +95,10 @@ public class DragonSpawnListener implements Listener { } } else if(Version.mcMainVersion >= 12){ - getInstance().getBossBarManager().setBossBar(dragon.getWorld(),myDragon); + getInstance().getBossBarManager().setBossBar(world,myDragon); } if(Config.advanced_setting_save_bossbar){ - getInstance().getBossBarManager().saveBossBarData(Collections.singletonList(dragon.getWorld())); + getInstance().getBossBarManager().saveBossBarData(Collections.singletonList(world)); } } diff --git a/src/main/java/pers/xanadu/enderdragon/listener/mythiclib/PlayerAttackListener.java b/src/main/java/pers/xanadu/enderdragon/listener/mythiclib/PlayerAttackListener.java index efc2175..208ddf6 100644 --- a/src/main/java/pers/xanadu/enderdragon/listener/mythiclib/PlayerAttackListener.java +++ b/src/main/java/pers/xanadu/enderdragon/listener/mythiclib/PlayerAttackListener.java @@ -7,6 +7,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import pers.xanadu.enderdragon.event.DragonDamageByPlayerEvent; +import pers.xanadu.enderdragon.manager.WorldManager; import static pers.xanadu.enderdragon.EnderDragon.pm; @@ -16,6 +17,7 @@ public class PlayerAttackListener implements Listener { if(e.isCancelled()) return; if(!(e.getEntity() instanceof org.bukkit.entity.EnderDragon)) return; EnderDragon dragon = (EnderDragon) e.getEntity(); + if(!WorldManager.enable_worlds.contains(dragon.getWorld().getName())) return; DamageMetadata damage = e.getDamage(); double final_damage = damage.getDamage(); if(final_damage > 0.0d){ diff --git a/src/main/java/pers/xanadu/enderdragon/manager/WorldManager.java b/src/main/java/pers/xanadu/enderdragon/manager/WorldManager.java index d8fde3f..ecb5373 100644 --- a/src/main/java/pers/xanadu/enderdragon/manager/WorldManager.java +++ b/src/main/java/pers/xanadu/enderdragon/manager/WorldManager.java @@ -5,29 +5,32 @@ import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.EnderDragon; import org.bukkit.entity.Entity; +import pers.xanadu.enderdragon.config.Config; import pers.xanadu.enderdragon.config.Lang; +import pers.xanadu.enderdragon.util.ConcurrentSet; import pers.xanadu.enderdragon.util.Version; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; +import java.util.*; import static java.lang.Math.sqrt; import static pers.xanadu.enderdragon.EnderDragon.getInstance; import static pers.xanadu.enderdragon.util.MathUtil.*; public class WorldManager { - public static final List worlds = new ArrayList<>(); + public static final List all_worlds = new ArrayList<>(); + public static final Set enable_worlds = new ConcurrentSet<>(); private Field dimension; private Field world_provider; private Method getDimensionID; public static void reload(){ - worlds.clear(); - Bukkit.getWorlds().forEach(world -> worlds.add(world.getName())); + all_worlds.clear(); + 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 getExplosionDragon(float power, Location loc){ diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java index 130b358..fa61932 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java @@ -82,4 +82,4 @@ public class BossBarManager implements I_BossBarManager { } public void setBossBar(World world, final MyDragon myDragon){ } -} +} \ No newline at end of file diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java index f6e779d..6f36013 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java @@ -83,4 +83,4 @@ public class BossBarManager implements I_BossBarManager { public void setBossBar(World world, final MyDragon myDragon){ } -} +} \ No newline at end of file diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java index dfa714b..da2dace 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java @@ -68,4 +68,4 @@ public class BossBarManager implements I_BossBarManager { } public void setBossBar(World world, final MyDragon myDragon){ } -} +} \ No newline at end of file diff --git a/src/main/java/pers/xanadu/enderdragon/util/ConcurrentSet.java b/src/main/java/pers/xanadu/enderdragon/util/ConcurrentSet.java new file mode 100644 index 0000000..e730449 --- /dev/null +++ b/src/main/java/pers/xanadu/enderdragon/util/ConcurrentSet.java @@ -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 extends AbstractSet implements Serializable { + private static final long serialVersionUID = 1072237514L; + private final ConcurrentHashMap 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 iterator() { + return this.map.keySet().iterator(); + } + +} From f4a1bc13da765c28738ee8a00b49cb43aec2acb7 Mon Sep 17 00:00:00 2001 From: Xanadu13 Date: Sun, 17 Mar 2024 20:40:08 +0800 Subject: [PATCH 09/16] rename --- ...ssBarManager.java => IBossBarManager.java} | 24 +++++++++---------- .../nms/BossBar/v1_12_R1/BossBarManager.java | 4 ++-- .../nms/BossBar/v1_13_R1/BossBarManager.java | 4 ++-- .../nms/BossBar/v1_13_R2/BossBarManager.java | 4 ++-- .../nms/BossBar/v1_14_R1/BossBarManager.java | 4 ++-- .../nms/BossBar/v1_15_R1/BossBarManager.java | 4 ++-- .../v1_16_R1_above/BossBarManager.java | 4 ++-- ...SItemManager.java => INMSItemManager.java} | 24 +++++++------------ .../nms/NMSItem/v1_12_R1/NMSItemManager.java | 13 ++-------- .../nms/NMSItem/v1_13_R1/NMSItemManager.java | 14 ++--------- .../v1_13_R2_above/NMSItemManager.java | 13 ++-------- ...anager.java => IRespawnAnchorManager.java} | 14 +++++------ .../v1_16_R1/RespawnAnchorManager.java | 4 ++-- .../v1_16_R2/RespawnAnchorManager.java | 4 ++-- .../v1_16_R3/RespawnAnchorManager.java | 4 ++-- .../v1_17_R1/RespawnAnchorManager.java | 4 ++-- .../v1_18_above/RespawnAnchorManager.java | 4 ++-- ...ataManager.java => IWorldDataManager.java} | 14 +++++------ .../WorldData/v1_12_R1/WorldDataManager.java | 4 ++-- .../WorldData/v1_13_R1/WorldDataManager.java | 4 ++-- .../WorldData/v1_13_R2/WorldDataManager.java | 4 ++-- .../WorldData/v1_14_R1/WorldDataManager.java | 4 ++-- .../WorldData/v1_15_R1/WorldDataManager.java | 4 ++-- .../WorldData/v1_16_R1/WorldDataManager.java | 4 ++-- .../WorldData/v1_16_R2/WorldDataManager.java | 4 ++-- .../WorldData/v1_16_R3/WorldDataManager.java | 4 ++-- .../v1_17_above/WorldDataManager.java | 4 ++-- 27 files changed, 81 insertions(+), 115 deletions(-) rename src/main/java/pers/xanadu/enderdragon/nms/BossBar/{I_BossBarManager.java => IBossBarManager.java} (86%) rename src/main/java/pers/xanadu/enderdragon/nms/NMSItem/{I_NMSItemManager.java => INMSItemManager.java} (50%) rename src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/{I_RespawnAnchorManager.java => IRespawnAnchorManager.java} (72%) rename src/main/java/pers/xanadu/enderdragon/nms/WorldData/{I_WorldDataManager.java => IWorldDataManager.java} (71%) diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/I_BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/IBossBarManager.java similarity index 86% rename from src/main/java/pers/xanadu/enderdragon/nms/BossBar/I_BossBarManager.java rename to src/main/java/pers/xanadu/enderdragon/nms/BossBar/IBossBarManager.java index db08627..1a3d068 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/I_BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/IBossBarManager.java @@ -1,12 +1,12 @@ -package pers.xanadu.enderdragon.nms.BossBar; - -import org.bukkit.World; -import pers.xanadu.enderdragon.metadata.MyDragon; - -import java.util.List; - -public interface I_BossBarManager { - void saveBossBarData(List worlds); - void loadBossBarData(List worlds); - void setBossBar(World world, final MyDragon myDragon); -} +package pers.xanadu.enderdragon.nms.BossBar; + +import org.bukkit.World; +import pers.xanadu.enderdragon.metadata.MyDragon; + +import java.util.List; + +public interface IBossBarManager { + void saveBossBarData(List worlds); + void loadBossBarData(List worlds); + void setBossBar(World world, final MyDragon myDragon); +} diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_12_R1/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_12_R1/BossBarManager.java index 4b57a05..60b95c1 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_12_R1/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_12_R1/BossBarManager.java @@ -9,7 +9,7 @@ import org.bukkit.craftbukkit.v1_12_R1.util.CraftChatMessage; import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.manager.DragonManager; import pers.xanadu.enderdragon.metadata.MyDragon; -import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; +import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager; import java.io.File; import java.io.IOException; @@ -18,7 +18,7 @@ import java.util.List; import static pers.xanadu.enderdragon.EnderDragon.plugin; -public class BossBarManager implements I_BossBarManager { +public class BossBarManager implements IBossBarManager { private Field BossBattleServer = null; public void saveBossBarData(List worlds){ File file = new File(plugin.getDataFolder(),"world_data.yml"); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R1/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R1/BossBarManager.java index 4353f4a..c626560 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R1/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R1/BossBarManager.java @@ -9,7 +9,7 @@ import org.bukkit.craftbukkit.v1_13_R1.util.CraftChatMessage; import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.manager.DragonManager; import pers.xanadu.enderdragon.metadata.MyDragon; -import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; +import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager; import java.io.File; import java.io.IOException; @@ -18,7 +18,7 @@ import java.util.List; import static pers.xanadu.enderdragon.EnderDragon.plugin; -public class BossBarManager implements I_BossBarManager { +public class BossBarManager implements IBossBarManager { private Field BossBattleServer = null; public void saveBossBarData(List worlds){ File file = new File(plugin.getDataFolder(),"world_data.yml"); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R2/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R2/BossBarManager.java index dd969c4..9372d52 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R2/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_13_R2/BossBarManager.java @@ -9,7 +9,7 @@ import org.bukkit.craftbukkit.v1_13_R2.util.CraftChatMessage; import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.manager.DragonManager; import pers.xanadu.enderdragon.metadata.MyDragon; -import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; +import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager; import java.io.File; import java.io.IOException; @@ -18,7 +18,7 @@ import java.util.List; import static pers.xanadu.enderdragon.EnderDragon.plugin; -public class BossBarManager implements I_BossBarManager { +public class BossBarManager implements IBossBarManager { private Field BossBattleServer = null; public void saveBossBarData(List worlds){ File file = new File(plugin.getDataFolder(),"world_data.yml"); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java index fa61932..76c92e8 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_14_R1/BossBarManager.java @@ -9,7 +9,7 @@ import org.bukkit.craftbukkit.v1_14_R1.util.CraftChatMessage; import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.manager.DragonManager; import pers.xanadu.enderdragon.metadata.MyDragon; -import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; +import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager; import java.io.File; import java.io.IOException; @@ -18,7 +18,7 @@ import java.util.List; import static pers.xanadu.enderdragon.EnderDragon.plugin; -public class BossBarManager implements I_BossBarManager { +public class BossBarManager implements IBossBarManager { private Field BossBattleServer = null; public void saveBossBarData(List worlds){ File file = new File(plugin.getDataFolder(),"world_data.yml"); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java index 6f36013..fe8e738 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_15_R1/BossBarManager.java @@ -9,7 +9,7 @@ import org.bukkit.craftbukkit.v1_15_R1.util.CraftChatMessage; import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.manager.DragonManager; import pers.xanadu.enderdragon.metadata.MyDragon; -import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; +import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager; import java.io.File; import java.io.IOException; @@ -18,7 +18,7 @@ import java.util.List; import static pers.xanadu.enderdragon.EnderDragon.plugin; -public class BossBarManager implements I_BossBarManager { +public class BossBarManager implements IBossBarManager { private Field BossBattleServer = null; public void saveBossBarData(List worlds){ File file = new File(plugin.getDataFolder(),"world_data.yml"); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java index da2dace..1ce96f5 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/BossBar/v1_16_R1_above/BossBarManager.java @@ -6,7 +6,7 @@ import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.metadata.MyDragon; -import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; +import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager; import java.io.File; import java.io.IOException; @@ -14,7 +14,7 @@ import java.util.List; import static pers.xanadu.enderdragon.EnderDragon.plugin; -public class BossBarManager implements I_BossBarManager { +public class BossBarManager implements IBossBarManager { public void saveBossBarData(List worlds){ File file = new File(plugin.getDataFolder(),"world_data.yml"); YamlConfiguration yml = new YamlConfiguration(); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/I_NMSItemManager.java b/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/INMSItemManager.java similarity index 50% rename from src/main/java/pers/xanadu/enderdragon/nms/NMSItem/I_NMSItemManager.java rename to src/main/java/pers/xanadu/enderdragon/nms/NMSItem/INMSItemManager.java index d24c3c2..ebcbe08 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/I_NMSItemManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/INMSItemManager.java @@ -1,15 +1,9 @@ -package pers.xanadu.enderdragon.nms.NMSItem; - -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.TestOnly; - -public interface I_NMSItemManager { - ItemStack readAsItem(String nbt); - ItemStack cpdToItem(Object cpd); - @TestOnly - Object parseNBT(Object nbt_base); - @TestOnly - Object readAsNBTBase(String raw); - @TestOnly - Object getNBTBase(Object obj); -} +package pers.xanadu.enderdragon.nms.NMSItem; + +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.TestOnly; + +public interface INMSItemManager { + ItemStack readAsItem(String nbt); + ItemStack cpdToItem(Object cpd); +} diff --git a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_12_R1/NMSItemManager.java b/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_12_R1/NMSItemManager.java index 7eaffea..321509d 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_12_R1/NMSItemManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_12_R1/NMSItemManager.java @@ -4,9 +4,9 @@ import net.minecraft.server.v1_12_R1.*; import org.bukkit.Material; import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; 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){ try { @@ -22,14 +22,5 @@ public class NMSItemManager implements I_NMSItemManager { ItemStack ei = new ItemStack((NBTTagCompound) cpd); 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); - } } diff --git a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R1/NMSItemManager.java b/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R1/NMSItemManager.java index 1642a4e..4e46735 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R1/NMSItemManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R1/NMSItemManager.java @@ -3,14 +3,13 @@ package pers.xanadu.enderdragon.nms.NMSItem.v1_13_R1; import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.minecraft.server.v1_13_R1.ItemStack; 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 org.bukkit.Material; import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftItemStack; 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){ try { NBTTagCompound cpd = MojangsonParser.parse(nbt); @@ -25,13 +24,4 @@ public class NMSItemManager implements I_NMSItemManager { ItemStack ei = ItemStack.a((NBTTagCompound) cpd); 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); - } } diff --git a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R2_above/NMSItemManager.java b/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R2_above/NMSItemManager.java index 90e1b63..3305b17 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R2_above/NMSItemManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R2_above/NMSItemManager.java @@ -4,9 +4,9 @@ import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import pers.xanadu.enderdragon.EnderDragon; 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){ try { return EnderDragon.getInstance().getNMSManager().getItemStack(nbt); @@ -18,13 +18,4 @@ public class NMSItemManager implements I_NMSItemManager { public ItemStack cpdToItem(Object 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); - } } diff --git a/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/I_RespawnAnchorManager.java b/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/IRespawnAnchorManager.java similarity index 72% rename from src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/I_RespawnAnchorManager.java rename to src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/IRespawnAnchorManager.java index 98ec9f9..026bd36 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/I_RespawnAnchorManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/IRespawnAnchorManager.java @@ -1,7 +1,7 @@ -package pers.xanadu.enderdragon.nms.RespawnAnchor; - -import org.bukkit.World; - -public interface I_RespawnAnchorManager { - boolean isRespawnAnchorWorks(World world); -} +package pers.xanadu.enderdragon.nms.RespawnAnchor; + +import org.bukkit.World; + +public interface IRespawnAnchorManager { + boolean isRespawnAnchorWorks(World world); +} diff --git a/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_16_R1/RespawnAnchorManager.java b/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_16_R1/RespawnAnchorManager.java index 214724f..f29179f 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_16_R1/RespawnAnchorManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_16_R1/RespawnAnchorManager.java @@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.RespawnAnchor.v1_16_R1; import net.minecraft.server.v1_16_R1.DimensionManager; import org.bukkit.World; 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){ CraftWorld cw = (CraftWorld) world; net.minecraft.server.v1_16_R1.World ew = cw.getHandle(); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_16_R2/RespawnAnchorManager.java b/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_16_R2/RespawnAnchorManager.java index 3493704..069cf8e 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_16_R2/RespawnAnchorManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_16_R2/RespawnAnchorManager.java @@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.RespawnAnchor.v1_16_R2; import net.minecraft.server.v1_16_R2.DimensionManager; import org.bukkit.World; 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){ CraftWorld cw = (CraftWorld) world; net.minecraft.server.v1_16_R2.World ew = cw.getHandle(); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_16_R3/RespawnAnchorManager.java b/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_16_R3/RespawnAnchorManager.java index 8956c12..1c4b2de 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_16_R3/RespawnAnchorManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_16_R3/RespawnAnchorManager.java @@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.RespawnAnchor.v1_16_R3; import net.minecraft.server.v1_16_R3.DimensionManager; import org.bukkit.World; 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){ CraftWorld cw = (CraftWorld) world; net.minecraft.server.v1_16_R3.World ew = cw.getHandle(); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_17_R1/RespawnAnchorManager.java b/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_17_R1/RespawnAnchorManager.java index 04f8c40..de00a5c 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_17_R1/RespawnAnchorManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_17_R1/RespawnAnchorManager.java @@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.RespawnAnchor.v1_17_R1; import net.minecraft.world.level.dimension.DimensionManager; import org.bukkit.World; 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){ CraftWorld cw = (CraftWorld) world; net.minecraft.world.level.World ew = cw.getHandle(); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_18_above/RespawnAnchorManager.java b/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_18_above/RespawnAnchorManager.java index 3ef57e2..976801a 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_18_above/RespawnAnchorManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/RespawnAnchor/v1_18_above/RespawnAnchorManager.java @@ -1,9 +1,9 @@ package pers.xanadu.enderdragon.nms.RespawnAnchor.v1_18_above; 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){ return world.isRespawnAnchorWorks(); } diff --git a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/I_WorldDataManager.java b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/IWorldDataManager.java similarity index 71% rename from src/main/java/pers/xanadu/enderdragon/nms/WorldData/I_WorldDataManager.java rename to src/main/java/pers/xanadu/enderdragon/nms/WorldData/IWorldDataManager.java index 187b97a..3a97eb3 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/I_WorldDataManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/IWorldDataManager.java @@ -1,7 +1,7 @@ -package pers.xanadu.enderdragon.nms.WorldData; - -import org.bukkit.World; - -public interface I_WorldDataManager { - long getGameTime(World world); -} +package pers.xanadu.enderdragon.nms.WorldData; + +import org.bukkit.World; + +public interface IWorldDataManager { + long getGameTime(World world); +} diff --git a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_12_R1/WorldDataManager.java b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_12_R1/WorldDataManager.java index 67f1795..96e7e23 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_12_R1/WorldDataManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_12_R1/WorldDataManager.java @@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_12_R1; import net.minecraft.server.v1_12_R1.WorldServer; import org.bukkit.World; 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){ CraftWorld cw = (CraftWorld) world; WorldServer ws = cw.getHandle(); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_13_R1/WorldDataManager.java b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_13_R1/WorldDataManager.java index 8b41385..61de8ee 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_13_R1/WorldDataManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_13_R1/WorldDataManager.java @@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_13_R1; import net.minecraft.server.v1_13_R1.WorldServer; import org.bukkit.World; 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){ CraftWorld cw = (CraftWorld) world; WorldServer ws = cw.getHandle(); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_13_R2/WorldDataManager.java b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_13_R2/WorldDataManager.java index e76ef5c..adcface 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_13_R2/WorldDataManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_13_R2/WorldDataManager.java @@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_13_R2; import net.minecraft.server.v1_13_R2.WorldServer; import org.bukkit.World; 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){ CraftWorld cw = (CraftWorld) world; WorldServer ws = cw.getHandle(); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_14_R1/WorldDataManager.java b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_14_R1/WorldDataManager.java index b0fd469..a855945 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_14_R1/WorldDataManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_14_R1/WorldDataManager.java @@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_14_R1; import net.minecraft.server.v1_14_R1.WorldServer; import org.bukkit.World; 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){ CraftWorld cw = (CraftWorld) world; WorldServer ws = cw.getHandle(); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_15_R1/WorldDataManager.java b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_15_R1/WorldDataManager.java index f2e35f9..0ad1c10 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_15_R1/WorldDataManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_15_R1/WorldDataManager.java @@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_15_R1; import net.minecraft.server.v1_15_R1.WorldServer; import org.bukkit.World; 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){ CraftWorld cw = (CraftWorld) world; WorldServer ws = cw.getHandle(); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_16_R1/WorldDataManager.java b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_16_R1/WorldDataManager.java index 235f80a..eeff0af 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_16_R1/WorldDataManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_16_R1/WorldDataManager.java @@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_16_R1; import net.minecraft.server.v1_16_R1.WorldServer; import org.bukkit.World; 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){ CraftWorld cw = (CraftWorld) world; WorldServer ws = cw.getHandle(); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_16_R2/WorldDataManager.java b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_16_R2/WorldDataManager.java index 1fc537c..2eb0949 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_16_R2/WorldDataManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_16_R2/WorldDataManager.java @@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_16_R2; import net.minecraft.server.v1_16_R2.WorldServer; import org.bukkit.World; 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){ CraftWorld cw = (CraftWorld) world; WorldServer ws = cw.getHandle(); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_16_R3/WorldDataManager.java b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_16_R3/WorldDataManager.java index 0a4b223..d528715 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_16_R3/WorldDataManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_16_R3/WorldDataManager.java @@ -3,9 +3,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_16_R3; import net.minecraft.server.v1_16_R3.WorldServer; import org.bukkit.World; 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){ CraftWorld cw = (CraftWorld) world; WorldServer ws = cw.getHandle(); diff --git a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_17_above/WorldDataManager.java b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_17_above/WorldDataManager.java index fcd0f86..2d57f01 100644 --- a/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_17_above/WorldDataManager.java +++ b/src/main/java/pers/xanadu/enderdragon/nms/WorldData/v1_17_above/WorldDataManager.java @@ -1,9 +1,9 @@ package pers.xanadu.enderdragon.nms.WorldData.v1_17_above; 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){ return world.getGameTime(); } From 98cc6ff1117952ed4295d439a86ef0d6e9c3e291 Mon Sep 17 00:00:00 2001 From: Xanadu13 Date: Sun, 17 Mar 2024 20:40:35 +0800 Subject: [PATCH 10/16] remove unused code --- .../v1_12_R1/CraftNBTTagConfigSerializer.java | 146 ----------------- .../v1_13_R1/CraftNBTTagConfigSerializer.java | 151 ------------------ .../pers/xanadu/enderdragon/util/NMSUtil.java | 87 ---------- 3 files changed, 384 deletions(-) delete mode 100644 src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_12_R1/CraftNBTTagConfigSerializer.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R1/CraftNBTTagConfigSerializer.java diff --git a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_12_R1/CraftNBTTagConfigSerializer.java b/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_12_R1/CraftNBTTagConfigSerializer.java deleted file mode 100644 index ce86e30..0000000 --- a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_12_R1/CraftNBTTagConfigSerializer.java +++ /dev/null @@ -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 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 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 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 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 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); - } -} diff --git a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R1/CraftNBTTagConfigSerializer.java b/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R1/CraftNBTTagConfigSerializer.java deleted file mode 100644 index d0b6947..0000000 --- a/src/main/java/pers/xanadu/enderdragon/nms/NMSItem/v1_13_R1/CraftNBTTagConfigSerializer.java +++ /dev/null @@ -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 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 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 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 list = (List)object; - if (list.isEmpty()) { - return new NBTTagList(); - } else { - NBTTagList tagList = new NBTTagList(); - for (Object tag : list) { - tagList.add(deserialize(tag)); - } - return tagList; - } - } - } -} diff --git a/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java b/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java index 25f8c33..5bc3abe 100644 --- a/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java +++ b/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java @@ -1,18 +1,14 @@ package pers.xanadu.enderdragon.util; import org.bukkit.Bukkit; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; -import org.jetbrains.annotations.TestOnly; import pers.xanadu.enderdragon.EnderDragon; import pers.xanadu.enderdragon.config.Config; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.HashMap; import java.util.Map; public class NMSUtil { @@ -26,18 +22,13 @@ public class NMSUtil { */ private Method asCraftCopy; private Method NMSItemStack_save; - private Method NMSItemStack_setTag; private Method cpdToEi; private Method stringToCPD; private Method stringToNBTBase; - private Method serializeNBTBase; - private Method deserializeObject; private Method PDCtoCPD; private Method PersistentDataContainer_putAll; private Method NBTTagCompound_set; private Field unhandledTags; - private Field internalTag; - private Field MOJANGSON_PARSER; private Field world_c_environment; private Field NBTTagCompound_map; private Class WorldClass; @@ -51,7 +42,6 @@ public class NMSUtil { private Class NBTTagCompoundClass; private Class NBTBaseClass; private Class MojangsonParserClass; - private Class CraftNBTTagConfigSerializerClass; private Class CraftPersistentDataContainerClass; public void init(){ @@ -70,8 +60,6 @@ public class NMSUtil { this.CraftMetaItemClass = Class.forName("org.bukkit.craftbukkit." + version + ".inventory.CraftMetaItem"); this.unhandledTags = CraftMetaItemClass.getDeclaredField("unhandledTags"); unhandledTags.setAccessible(true); - this.internalTag = CraftMetaItemClass.getDeclaredField("internalTag"); - internalTag.setAccessible(true); this.NMSItemStackClass = CraftItemStackClass.getDeclaredField("handle").getType(); this.CraftEntityClass = Class.forName("org.bukkit.craftbukkit."+version+".entity.CraftEntity"); init_NBTTagCompoundClass(); @@ -84,7 +72,6 @@ public class NMSUtil { this.asCraftMirror = CraftItemStackClass.getMethod("asCraftMirror",NMSItemStackClass); this.asCraftCopy = CraftItemStackClass.getMethod("asCraftCopy",ItemStack.class); 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<=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); 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){ this.CraftPersistentDataContainerClass = Class.forName("org.bukkit.craftbukkit." + version + ".persistence.CraftPersistentDataContainer"); this.PDCtoCPD = CraftPersistentDataContainerClass.getDeclaredMethod("toTagCompound"); @@ -123,16 +103,6 @@ public class NMSUtil { 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 @@ -175,14 +145,6 @@ public class NMSUtil { 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){ try{ 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 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 getUnhandledTags(final ItemMeta meta){ - try{ - Object craft_meta = CraftMetaItemClass.cast(meta); - Object unhandledTags = this.unhandledTags.get(craft_meta); - return (Map) 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){ try{ Object ci = CraftItemStackClass.isInstance(item)?CraftItemStackClass.cast(item):asCraftCopy.invoke(null,item);//浅拷贝unhandledTags From 55df7c9c2b2cd154287f19cea8f5a6d54088a0ad Mon Sep 17 00:00:00 2001 From: Xanadu13 Date: Sun, 17 Mar 2024 20:43:18 +0800 Subject: [PATCH 11/16] preparation for compatibility with version 1.20.5 --- .../pers/xanadu/enderdragon/EnderDragon.java | 71 +++-- .../enderdragon/command/TabCompleter.java | 2 +- .../enderdragon/config/FileUpdater.java | 275 ++++++++++++------ .../enderdragon/manager/ItemManager.java | 33 ++- .../enderdragon/manager/RewardManager.java | 9 +- 5 files changed, 255 insertions(+), 135 deletions(-) diff --git a/src/main/java/pers/xanadu/enderdragon/EnderDragon.java b/src/main/java/pers/xanadu/enderdragon/EnderDragon.java index 7fad18b..000f988 100644 --- a/src/main/java/pers/xanadu/enderdragon/EnderDragon.java +++ b/src/main/java/pers/xanadu/enderdragon/EnderDragon.java @@ -21,11 +21,12 @@ import pers.xanadu.enderdragon.listener.*; import pers.xanadu.enderdragon.listener.mythiclib.PlayerAttackListener; import pers.xanadu.enderdragon.manager.*; import pers.xanadu.enderdragon.maven.DependencyManager; +import pers.xanadu.enderdragon.metadata.DragonInfo; import pers.xanadu.enderdragon.metrics.Metrics; -import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; -import pers.xanadu.enderdragon.nms.NMSItem.I_NMSItemManager; -import pers.xanadu.enderdragon.nms.RespawnAnchor.I_RespawnAnchorManager; -import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager; +import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager; +import pers.xanadu.enderdragon.nms.NMSItem.INMSItemManager; +import pers.xanadu.enderdragon.nms.RespawnAnchor.IRespawnAnchorManager; +import pers.xanadu.enderdragon.nms.WorldData.IWorldDataManager; import pers.xanadu.enderdragon.util.NMSUtil; import pers.xanadu.enderdragon.util.Version; @@ -46,10 +47,10 @@ public final class EnderDragon extends JavaPlugin { public static FileConfiguration lang; private WorldManager worldManager; private NMSUtil nmsManager; - private I_BossBarManager i_bossBarManager; - private I_NMSItemManager i_nmsItemManager; - private I_WorldDataManager i_worldDataManager; - private I_RespawnAnchorManager i_respawnAnchorManager; + private IBossBarManager iBossBarManager; + private INMSItemManager iNmsItemManager; + private IWorldDataManager iWorldDataManager; + private IRespawnAnchorManager iRespawnAnchorManager; private static boolean finish = false; @Override public void onLoad(){ @@ -67,23 +68,24 @@ public final class EnderDragon extends JavaPlugin { worldManager = new WorldManager(); nmsManager = new NMSUtil(); nmsManager.init(); - i_bossBarManager = Version.getBossBarManager(); - i_nmsItemManager = Version.getNMSItemManager(); - i_worldDataManager = Version.getWorldDataManager(); - i_respawnAnchorManager = Version.getRespawnAnchorManager(); + iBossBarManager = Version.getBossBarManager(); + iNmsItemManager = Version.getNMSItemManager(); + iWorldDataManager = Version.getWorldDataManager(); + iRespawnAnchorManager = Version.getRespawnAnchorManager(); if(Config.advanced_setting_world_env_fix) { getInstance().getWorldManager().fixWorldEnvironment(); Lang.info(Lang.world_env_fix_enable); } - if(Config.advanced_setting_save_bossbar){ - fixWorldBossBar(); - } TimerManager.enable(); registerEvents(); registerCommands(); HookManager.init(); reloadAll(); + if(Config.advanced_setting_save_bossbar){ + fixWorldBossBar(); + } if(Config.advanced_setting_save_respawn_status) setRespawnStatus(); + scanExistingDragons(); // if(Config.advanced_setting_glowing_fix) fixGlowing(); checkUpdate(); new Metrics(this,14850); @@ -135,7 +137,7 @@ public final class EnderDragon extends JavaPlugin { TimerManager.save(); if(Config.advanced_setting_save_respawn_status){ Bukkit.getWorlds().forEach(world -> { - if(!Config.blacklist_worlds.contains(world.getName())){ + if(WorldManager.enable_worlds.contains(world.getName())){ char split = data.options().pathSeparator(); if(DragonManager.isRespawnRunning(world)){ data.set("respawn_fix"+split+world.getName(),true); @@ -154,7 +156,7 @@ public final class EnderDragon extends JavaPlugin { if(Config.advanced_setting_save_bossbar){ List worlds = new ArrayList<>(); 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); } }); @@ -253,7 +255,7 @@ public final class EnderDragon extends JavaPlugin { public void run(){ List worlds = new ArrayList<>(); 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); } }); @@ -297,6 +299,23 @@ public final class EnderDragon extends JavaPlugin { } }.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(){ return worldManager; @@ -304,17 +323,17 @@ public final class EnderDragon extends JavaPlugin { public NMSUtil getNMSManager(){ return nmsManager; } - public I_BossBarManager getBossBarManager(){ - return i_bossBarManager; + public IBossBarManager getBossBarManager(){ + return iBossBarManager; } - public I_NMSItemManager getNMSItemManager(){ - return i_nmsItemManager; + public INMSItemManager getNMSItemManager(){ + return iNmsItemManager; } - public I_WorldDataManager getWorldDataManager(){ - return i_worldDataManager; + public IWorldDataManager getWorldDataManager(){ + return iWorldDataManager; } - public I_RespawnAnchorManager getRespawnAnchorManager(){ - return i_respawnAnchorManager; + public IRespawnAnchorManager getRespawnAnchorManager(){ + return iRespawnAnchorManager; } } diff --git a/src/main/java/pers/xanadu/enderdragon/command/TabCompleter.java b/src/main/java/pers/xanadu/enderdragon/command/TabCompleter.java index 4ffab20..4f8c658 100644 --- a/src/main/java/pers/xanadu/enderdragon/command/TabCompleter.java +++ b/src/main/java/pers/xanadu/enderdragon/command/TabCompleter.java @@ -17,7 +17,7 @@ import java.util.stream.Stream; public class TabCompleter implements org.bukkit.command.TabCompleter { - private static final List arguments_ed = Arrays.asList("action", "drop", "reload", "respawn", "respawn_cd", "spawn", "update"); + private static final List arguments_ed = Arrays.asList("action", "drop", "migrate", "reload", "respawn", "respawn_cd", "spawn", "update"); private static final List arguments_drop = Arrays.asList("add", "clear", "edit", "remove", "gui"); private static final List arguments_action = Arrays.asList("tell:","tell-colorless:","tell-raw:","groovy:"); private static final List arguments_respawn_cd = Arrays.asList("get","remove","removeAll","set","start"); diff --git a/src/main/java/pers/xanadu/enderdragon/config/FileUpdater.java b/src/main/java/pers/xanadu/enderdragon/config/FileUpdater.java index e23084f..55007bc 100644 --- a/src/main/java/pers/xanadu/enderdragon/config/FileUpdater.java +++ b/src/main/java/pers/xanadu/enderdragon/config/FileUpdater.java @@ -1,113 +1,198 @@ 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.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.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; import static pers.xanadu.enderdragon.EnderDragon.*; public class FileUpdater { public static void update() throws IOException { - FileConfiguration config_old = plugin.getConfig(); - boolean chinese = "Chinese".equals(config_old.getString("lang")); - File folder = new File(plugin.getDataFolder(),"setting"); - if(folder.exists()){ - File[] files = folder.listFiles(); - 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; + Lang.warn("Nothing to update. Maybe you need '/ed migrate'?"); +// FileConfiguration config_old = plugin.getConfig(); +// boolean chinese = "Chinese".equals(config_old.getString("lang")); +// File folder = new File(plugin.getDataFolder(),"setting"); +// if(folder.exists()){ +// File[] files = folder.listFiles(); +// 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_% -> 在屠龙中取得此排名的玩家\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_% -> 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); + Config.copyFile(file,"new/reward/"+file.getName(),true); + File gen_file = new File(plugin.getDataFolder(),"new/reward/"+file.getName()); + YamlConfiguration new_cfg = YamlConfiguration.loadConfiguration(gen_file); + if(Config.advanced_setting_backslash_split_reward) new_cfg.options().pathSeparator('\\'); + List gen = new ArrayList<>(); + List list = config.getStringList("list"); + for(String str : list){ + YamlConfiguration yml = new YamlConfiguration(); + if(Config.advanced_setting_backslash_split_reward) yml.options().pathSeparator('\\'); + try{ + yml.loadFromString(str); + Reward reward = ItemManager.readAsReward(yml); + if (reward == null) continue; + gen.add(saveReward(reward)); + }catch (InvalidConfigurationException e){ + Lang.error(Lang.plugin_item_read_error + str); } - 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_% -> 在屠龙中取得此排名的玩家\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_% -> 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 reward config files are generated in plugins/EnderDragon/migrate."); } - Lang.info("New config files are generated in plugins/EnderDragon/new."); - 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(); } } diff --git a/src/main/java/pers/xanadu/enderdragon/manager/ItemManager.java b/src/main/java/pers/xanadu/enderdragon/manager/ItemManager.java index 1415029..02f1f1c 100644 --- a/src/main/java/pers/xanadu/enderdragon/manager/ItemManager.java +++ b/src/main/java/pers/xanadu/enderdragon/manager/ItemManager.java @@ -1,5 +1,6 @@ package pers.xanadu.enderdragon.manager; +import lombok.Getter; import org.bukkit.Material; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; @@ -13,6 +14,7 @@ import org.bukkit.inventory.meta.Repairable; import org.bukkit.persistence.PersistentDataContainer; import pers.xanadu.enderdragon.EnderDragon; import pers.xanadu.enderdragon.config.Config; +import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.reward.Reward; import pers.xanadu.enderdragon.reward.Chance; import pers.xanadu.enderdragon.util.Version; @@ -20,6 +22,8 @@ import pers.xanadu.enderdragon.util.Version; import java.util.*; public class ItemManager { + @Getter + private static boolean legacy = false; public static String write(Reward reward){ Chance chance = reward.getChance(); return write(reward.getItem(),chance.getValue(),chance.getStr(),reward.getName()); @@ -40,12 +44,12 @@ public class ItemManager { } ConfigurationSection section = yaml.createSection(name); switch(Config.item_format_reward){ - case "nbt" : { + case "_nbt" : { section.set("data_type","nbt"); section.set("data",EnderDragon.getInstance().getNMSManager().getNBT(item)); break; } - case "advanced" : { + case "_advanced" : { section.set("data_type","advanced"); ConfigurationSection section_data = section.createSection("data"); //type @@ -145,14 +149,13 @@ public class ItemManager { internal.set("data_type","nbt"); internal.set("data",new_cpd.toString()); } -// Map mp = EnderDragon.getInstance().getNMSManager().getUnhandledTags(meta); -// if(mp != null){ -// ConfigurationSection internal = section_data.createSection("internal"); -// saveUnhandledTags(internal,mp); -// } - 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 : { section.set("data_type","default"); section.set("data", item); @@ -171,9 +174,17 @@ public class ItemManager { String data_type = section0.getString("data_type"); //data_type may be null ItemStack item; - if("nbt".equals(data_type)) item = readFromNBT(section0,"data"); - else if("advanced".equals(data_type)) item = readFromAdvData(section0, "data"); - else item = readFromBukkit(section0,"data"); + if("nbt".equals(data_type)) { + legacy = true; + 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"); if(chance_section == null) return null; double d0 = chance_section.getDouble("value"); diff --git a/src/main/java/pers/xanadu/enderdragon/manager/RewardManager.java b/src/main/java/pers/xanadu/enderdragon/manager/RewardManager.java index 008d4e3..8e961c0 100644 --- a/src/main/java/pers/xanadu/enderdragon/manager/RewardManager.java +++ b/src/main/java/pers/xanadu/enderdragon/manager/RewardManager.java @@ -11,6 +11,7 @@ import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.reward.Reward; import pers.xanadu.enderdragon.reward.Chance; import pers.xanadu.enderdragon.metadata.MyDragon; +import pers.xanadu.enderdragon.util.Version; import java.io.File; import java.io.FileNotFoundException; @@ -30,7 +31,6 @@ public class RewardManager { FileConfiguration data = loadConfiguration(file); String path = "list"; List list = data.getStringList(path); - // if list == null ? for(String str : list){ YamlConfiguration yml = new YamlConfiguration(); 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){ addItem(key,reward.getItem(),reward.getChance()); @@ -118,7 +123,7 @@ public class RewardManager { try{ YamlConfiguration yml = new YamlConfiguration(); 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.save(file); }catch (IOException e){ From 95f7c87f49043e2cbb70ba5d73be4fa9624a2018 Mon Sep 17 00:00:00 2001 From: Xanadu13 Date: Sun, 17 Mar 2024 20:43:58 +0800 Subject: [PATCH 12/16] add /ed parse and /ed migrate --- .../enderdragon/command/MainCommand.java | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/main/java/pers/xanadu/enderdragon/command/MainCommand.java b/src/main/java/pers/xanadu/enderdragon/command/MainCommand.java index d294fae..3476d6b 100644 --- a/src/main/java/pers/xanadu/enderdragon/command/MainCommand.java +++ b/src/main/java/pers/xanadu/enderdragon/command/MainCommand.java @@ -30,32 +30,29 @@ public class MainCommand implements CommandExecutor { return false; } switch(args[0].toLowerCase()){ -// case "parse" : { -// if(!sender.isOp()) return false; -// 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])); -//// List entities = p.getNearbyEntities(50,50,50); -//// entities.forEach(entity -> { -//// if(entity instanceof org.bukkit.entity.EnderDragon){ -//// org.bukkit.entity.EnderDragon dragon = (org.bukkit.entity.EnderDragon) entity; -//// //dragon.setPhase(CHARGE_PLAYER); -//// //SkillManager.launchDragonFireball(dragon,p.getLocation()); -//// SkillManager.callEnderManReinforce(p,3); -//// } -//// -//// -//// if(entity instanceof org.bukkit.entity.EnderDragon){ -//// Bukkit.broadcastMessage(entity.getName());//1 Special Ender Dragon -//// } -//// if(entity instanceof ComplexEntityPart){ -//// Bukkit.broadcastMessage(entity.getName());//1 Special Ender Dragon -//// } -//// if(entity instanceof ComplexLivingEntity){ -//// Bukkit.broadcastMessage(entity.getName());//8 EnderDragon -//// } -//// }); + case "parse" : { + if(!sender.isOp()) return false; + if(args.length == 2) GroovyManager.invoke("test.groovy", args[1]); + else if(args.length == 3) GroovyManager.invoke("test.groovy",args[1],args[2]); + return true; + } + case "migrate" : { + if (!sender.isOp()) return false; + FileUpdater.migrate(); + return true; + } +// case "worlds" : { +// if(!sender.isOp()){ +// Lang.sendFeedback(sender,Lang.command_no_permission); +// return false; +// } +// if(args.length < 2) break; +// switch (args[1].toLowerCase()){ +// case "list" : { // -// return true; +// } +// } +// break; // } case "action" : { if(!sender.isOp()){ @@ -133,6 +130,8 @@ public class MainCommand implements CommandExecutor { DragonManager.initiateRespawn(sender,builder.toString(),args[1]); return true; } + //unreachable + break; } case "respawn" : {//ed respawn (world_name) if(!sender.hasPermission("ed.respawn")){ @@ -160,6 +159,7 @@ public class MainCommand implements CommandExecutor { DragonManager.initiateRespawn(sender,builder.toString()); return true; } + //unreachable } case "respawn_cd" : { if(!sender.hasPermission("ed.respawn")){ From ba3a2fcc5384c5e7cd853148363754a326de420f Mon Sep 17 00:00:00 2001 From: Xanadu13 Date: Sun, 17 Mar 2024 20:47:32 +0800 Subject: [PATCH 13/16] Update Version.java --- .../pers/xanadu/enderdragon/util/Version.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/pers/xanadu/enderdragon/util/Version.java b/src/main/java/pers/xanadu/enderdragon/util/Version.java index 01917dc..2254b05 100644 --- a/src/main/java/pers/xanadu/enderdragon/util/Version.java +++ b/src/main/java/pers/xanadu/enderdragon/util/Version.java @@ -1,10 +1,10 @@ package pers.xanadu.enderdragon.util; import pers.xanadu.enderdragon.config.Lang; -import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; -import pers.xanadu.enderdragon.nms.NMSItem.I_NMSItemManager; -import pers.xanadu.enderdragon.nms.RespawnAnchor.I_RespawnAnchorManager; -import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager; +import pers.xanadu.enderdragon.nms.BossBar.IBossBarManager; +import pers.xanadu.enderdragon.nms.NMSItem.INMSItemManager; +import pers.xanadu.enderdragon.nms.RespawnAnchor.IRespawnAnchorManager; +import pers.xanadu.enderdragon.nms.WorldData.IWorldDataManager; import static org.bukkit.Bukkit.getServer; @@ -13,6 +13,7 @@ public class Version { public static final String lang = "2.2.0"; public static final String config = "2.3.0"; public static final String data = "2.2.0"; + public static final String reward = "2.5.0"; public static int mcMainVersion; public static int mcPatchVersion; private static String version = "no version found"; @@ -35,14 +36,14 @@ public class Version { }catch(ReflectiveOperationException ignored){} } - public static I_NMSItemManager getNMSItemManager(){ + public static INMSItemManager getNMSItemManager(){ switch (version){ 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(); default: return new pers.xanadu.enderdragon.nms.NMSItem.v1_13_R2_above.NMSItemManager(); } } - public static I_BossBarManager getBossBarManager(){ + public static IBossBarManager getBossBarManager(){ switch(version){ 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(); @@ -52,7 +53,7 @@ public class Version { default: return new pers.xanadu.enderdragon.nms.BossBar.v1_16_R1_above.BossBarManager(); } } - public static I_WorldDataManager getWorldDataManager(){ + public static IWorldDataManager getWorldDataManager(){ switch (version){ 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(); @@ -65,7 +66,7 @@ public class Version { default : return new pers.xanadu.enderdragon.nms.WorldData.v1_17_above.WorldDataManager(); } } - public static I_RespawnAnchorManager getRespawnAnchorManager(){ + public static IRespawnAnchorManager getRespawnAnchorManager(){ switch (version){ case "v1_12_R1" : case "v1_13_R1" : From 81e3e1d878e09a27be1f1c3a9ec0f4f0e0cefbb8 Mon Sep 17 00:00:00 2001 From: Xanadu13 Date: Sun, 17 Mar 2024 20:48:13 +0800 Subject: [PATCH 14/16] small update --- .../xanadu/enderdragon/config/Config.java | 19 ++++++---- .../enderdragon/manager/DragonManager.java | 36 +++++++++++++++++++ .../enderdragon/metadata/DragonInfo.java | 9 ++++- src/main/resources/config-zhcn.yml | 2 ++ src/main/resources/config.yml | 2 ++ src/main/resources/plugin.yml | 2 +- 6 files changed, 61 insertions(+), 9 deletions(-) diff --git a/src/main/java/pers/xanadu/enderdragon/config/Config.java b/src/main/java/pers/xanadu/enderdragon/config/Config.java index ff844fe..4be0f70 100644 --- a/src/main/java/pers/xanadu/enderdragon/config/Config.java +++ b/src/main/java/pers/xanadu/enderdragon/config/Config.java @@ -6,6 +6,7 @@ import java.io.*; import java.lang.reflect.Field; import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.util.*; import java.util.jar.JarEntry; 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_bossbar; 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 String damage_visible_mode; public static int damage_statistics_limit; @@ -98,10 +100,7 @@ public class Config { } } catch (IOException ignored) {} } - 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); + public static void copyFile(File source, String dest, boolean replace) { File outFile = new File("plugins/EnderDragon", dest); int lastIndex = dest.lastIndexOf('/'); File outDir = new File("plugins/EnderDragon", dest.substring(0, Math.max(lastIndex, 0))); @@ -110,8 +109,8 @@ public class Config { } try { if (!outFile.exists() || replace) { - InputStream in = new FileInputStream(inFile); - OutputStream out = new FileOutputStream(outFile); + InputStream in = Files.newInputStream(source.toPath()); + OutputStream out = Files.newOutputStream(outFile.toPath()); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { @@ -121,9 +120,15 @@ public class Config { in.close(); } } 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) { String destDirectory = new File(plugin.getDataFolder(),srcDirectory).getPath(); try { diff --git a/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java b/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java index 1fb38e5..3ea3922 100644 --- a/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java +++ b/src/main/java/pers/xanadu/enderdragon/manager/DragonManager.java @@ -27,6 +27,7 @@ import java.io.File; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ThreadLocalRandom; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -37,6 +38,8 @@ public class DragonManager { static final ArrayList dragons = new ArrayList<>(); static final Map mp = new HashMap<>(); public static List dragon_names = new ArrayList<>(); + public static final Map existing_dragon = new ConcurrentHashMap<>(); + public static final Map main_dragon = new ConcurrentHashMap<>(); private static int sum = 0; 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}}; @@ -485,6 +488,39 @@ public class DragonManager { 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){ if(world == null) return null; if(world.getEnvironment() != World.Environment.THE_END) return null; diff --git a/src/main/java/pers/xanadu/enderdragon/metadata/DragonInfo.java b/src/main/java/pers/xanadu/enderdragon/metadata/DragonInfo.java index cfda84c..8b725c6 100644 --- a/src/main/java/pers/xanadu/enderdragon/metadata/DragonInfo.java +++ b/src/main/java/pers/xanadu/enderdragon/metadata/DragonInfo.java @@ -1,8 +1,15 @@ package pers.xanadu.enderdragon.metadata; +import org.bukkit.entity.EnderDragon; + public class DragonInfo { + private final EnderDragon handle; 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; } + public EnderDragon getHandle(){ + return handle; + } } diff --git a/src/main/resources/config-zhcn.yml b/src/main/resources/config-zhcn.yml index 8f741ff..e57f4b9 100644 --- a/src/main/resources/config-zhcn.yml +++ b/src/main/resources/config-zhcn.yml @@ -97,5 +97,7 @@ advanced_setting: world_env_fix: false save_respawn_status: false save_bossbar: false + # to do: 允许在非末地环境使用/ed spawn或respawn复活末影龙 + # can_spawn_not_the_end: false backslash_split: reward: false \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 0ad3a95..502a245 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -96,5 +96,7 @@ advanced_setting: world_env_fix: false save_respawn_status: false save_bossbar: false + # to-do + # can_spawn_not_the_end: false backslash_split: reward: false \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 526d305..7e3f92b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: EnderDragon -version: 2.5.0-dev +version: 2.5.0 main: pers.xanadu.enderdragon.EnderDragon author: Xanadu13 api-version: 1.13 From ca8290c853b9e4ed9c04d7e484927babea35ea8e Mon Sep 17 00:00:00 2001 From: Xanadu13 Date: Sun, 17 Mar 2024 21:08:17 +0800 Subject: [PATCH 15/16] compatibility with PetDragon --- .../java/pers/xanadu/enderdragon/hook/HookManager.java | 7 +++++++ .../xanadu/enderdragon/listener/DragonSpawnListener.java | 7 ++++++- src/main/resources/plugin.yml | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/pers/xanadu/enderdragon/hook/HookManager.java b/src/main/java/pers/xanadu/enderdragon/hook/HookManager.java index b13474f..7f78e62 100644 --- a/src/main/java/pers/xanadu/enderdragon/hook/HookManager.java +++ b/src/main/java/pers/xanadu/enderdragon/hook/HookManager.java @@ -1,5 +1,6 @@ package pers.xanadu.enderdragon.hook; +import lombok.Getter; import me.clip.placeholderapi.PlaceholderAPI; import org.bukkit.OfflinePlayer; import pers.xanadu.enderdragon.config.Lang; @@ -9,12 +10,18 @@ import static pers.xanadu.enderdragon.EnderDragon.*; public class HookManager { private static boolean papi = false; + @Getter + private static boolean petDragonInstalled = false; public static void init(){ if(pm.getPlugin("PlaceholderAPI") != null){ Lang.info("Hooking to PlaceholderAPI..."); new Papi(getInstance()); papi = true; } + if (pm.getPlugin("PetDragon") != null){ + Lang.info("Hooking to PetDragon..."); + petDragonInstalled = true; + } } public static boolean isPlaceholderAPILoaded(){ return papi; diff --git a/src/main/java/pers/xanadu/enderdragon/listener/DragonSpawnListener.java b/src/main/java/pers/xanadu/enderdragon/listener/DragonSpawnListener.java index e16e7ae..2a4c8f0 100644 --- a/src/main/java/pers/xanadu/enderdragon/listener/DragonSpawnListener.java +++ b/src/main/java/pers/xanadu/enderdragon/listener/DragonSpawnListener.java @@ -1,5 +1,6 @@ package pers.xanadu.enderdragon.listener; +import com.ericdebouwer.petdragon.api.PetDragonAPI; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.attribute.Attribute; @@ -15,8 +16,8 @@ import org.bukkit.event.entity.CreatureSpawnEvent; import pers.xanadu.enderdragon.config.Config; import pers.xanadu.enderdragon.config.Lang; import pers.xanadu.enderdragon.event.DragonRespawnPostEvent; +import pers.xanadu.enderdragon.hook.HookManager; import pers.xanadu.enderdragon.manager.DamageManager; -import pers.xanadu.enderdragon.manager.DragonManager; import pers.xanadu.enderdragon.manager.WorldManager; import pers.xanadu.enderdragon.metadata.DragonInfo; import pers.xanadu.enderdragon.metadata.MyDragon; @@ -33,6 +34,10 @@ public class DragonSpawnListener implements Listener { @EventHandler(priority = EventPriority.LOW) public void OnDragonSpawn(final CreatureSpawnEvent e){ if(!(e.getEntity() instanceof EnderDragon)) 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; EnderDragon dragon = (EnderDragon) e.getEntity(); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 7e3f92b..7d6d557 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -7,6 +7,7 @@ softdepend: - MMOItems - MythicLib - PlaceholderAPI + - PetDragon commands: enderdragon: description: "EnderDragon Command" From c0725bcbe3489478f732cb14f18fb4b422a3970b Mon Sep 17 00:00:00 2001 From: Xanadu13 Date: Sun, 17 Mar 2024 21:08:33 +0800 Subject: [PATCH 16/16] upgrade groovy version to 4.0.18 --- .../java/pers/xanadu/enderdragon/maven/DependencyManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/pers/xanadu/enderdragon/maven/DependencyManager.java b/src/main/java/pers/xanadu/enderdragon/maven/DependencyManager.java index 9a3f0d6..9535539 100644 --- a/src/main/java/pers/xanadu/enderdragon/maven/DependencyManager.java +++ b/src/main/java/pers/xanadu/enderdragon/maven/DependencyManager.java @@ -34,7 +34,7 @@ public class DependencyManager { // "groovy","xanadu.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(); if(f) dep_groovy = true; else err("Failed to load library: "+groovy.getName());