From 3caa4200e090fab62ea9f0d31be72c6f9aa7f170 Mon Sep 17 00:00:00 2001 From: Xanadu13 Date: Tue, 3 Oct 2023 09:21:31 +0800 Subject: [PATCH] add SpawnReason blacklist --- .../enderdragon/event/DragonRespawnEvent.java | 51 +++++++++++++++++++ .../listener/DragonSpawnListener.java | 9 ++-- src/main/resources/config-zhcn.yml | 4 ++ src/main/resources/config.yml | 4 ++ src/main/resources/plugin.yml | 2 +- 5 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 src/main/java/pers/xanadu/enderdragon/event/DragonRespawnEvent.java diff --git a/src/main/java/pers/xanadu/enderdragon/event/DragonRespawnEvent.java b/src/main/java/pers/xanadu/enderdragon/event/DragonRespawnEvent.java new file mode 100644 index 0000000..022bd63 --- /dev/null +++ b/src/main/java/pers/xanadu/enderdragon/event/DragonRespawnEvent.java @@ -0,0 +1,51 @@ +package pers.xanadu.enderdragon.event; + +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.entity.EnderDragon; +import org.bukkit.event.HandlerList; +import org.bukkit.event.entity.CreatureSpawnEvent; +import pers.xanadu.enderdragon.manager.DragonManager; +import pers.xanadu.enderdragon.util.MyDragon; + +public final class DragonRespawnEvent extends CreatureSpawnEvent { + private static final HandlerList handlers = new HandlerList(); + private boolean cancel = false; + private final World world; + private final MyDragon myDragon; + public DragonRespawnEvent(final EnderDragon dragon,final SpawnReason reason,final MyDragon myDragon) { + super(dragon,reason); + world = dragon.getWorld(); + this.myDragon = myDragon; + } + + public EnderDragon getEnderDragon(){ + return (EnderDragon) getEntity(); + } + + public Location getEndPortalLocation(){ + return DragonManager.getEndPortalLocation(world); + } + public MyDragon getDragonConfiguration(){ + return myDragon; + } + public String getDragonUniqueId(){ + return myDragon.unique_name; + } + public static HandlerList getHandlerList() { + return handlers; + } + @Override + public HandlerList getHandlers() { + return handlers; + } + @Override + public void setCancelled(final boolean cancel) { + this.cancel = cancel; + } + @Override + public boolean isCancelled() { + return cancel; + } + +} diff --git a/src/main/java/pers/xanadu/enderdragon/listener/DragonSpawnListener.java b/src/main/java/pers/xanadu/enderdragon/listener/DragonSpawnListener.java index 2e9c518..ca7630e 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 org.bukkit.Bukkit; import org.bukkit.attribute.Attribute; import org.bukkit.boss.BarColor; import org.bukkit.boss.BarStyle; @@ -11,6 +12,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.CreatureSpawnEvent; import pers.xanadu.enderdragon.config.Config; import pers.xanadu.enderdragon.config.Lang; +import pers.xanadu.enderdragon.event.DragonRespawnEvent; import pers.xanadu.enderdragon.manager.DamageManager; import pers.xanadu.enderdragon.util.MyDragon; import pers.xanadu.enderdragon.util.Version; @@ -26,6 +28,7 @@ public class DragonSpawnListener implements Listener { public void OnDragonSpawn(final CreatureSpawnEvent e){ if(!(e.getEntity() instanceof EnderDragon)) return; if(Config.blacklist_worlds.contains(e.getEntity().getWorld().getName())) return; + if(Config.blacklist_spawn_reason.contains(e.getSpawnReason().name())) return; EnderDragon dragon = (EnderDragon) e.getEntity(); MyDragon myDragon = null; if(e.getSpawnReason() == CreatureSpawnEvent.SpawnReason.DEFAULT){ @@ -54,8 +57,8 @@ public class DragonSpawnListener implements Listener { modifyAttribute(dragon, Attribute.GENERIC_ARMOR_TOUGHNESS, myDragon.armor_toughness_modify); String color = myDragon.glow_color.toUpperCase(); - if(!color.equals("NONE")) setGlowingColor(dragon,getGlowColor(color)); - else dragon.setGlowing(false); + 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(); @@ -69,7 +72,7 @@ public class DragonSpawnListener implements Listener { else if(Version.mcMainVersion >= 12){ getInstance().getBossBarManager().setBossBar(dragon.getWorld(),myDragon.display_name,bossBar_color,bossBar_style); } - //dragon.getMetadata(); + Bukkit.getPluginManager().callEvent(new DragonRespawnEvent(dragon,e.getSpawnReason(),myDragon)); } } diff --git a/src/main/resources/config-zhcn.yml b/src/main/resources/config-zhcn.yml index 55ad6b4..84bb378 100644 --- a/src/main/resources/config-zhcn.yml +++ b/src/main/resources/config-zhcn.yml @@ -67,6 +67,10 @@ blacklist_worlds: - 'world' - 'world_nether' +#生成原因包含在这里的末影龙不被插件监听 +#举例: COMMAND,CUSTOM,DEFAULT +blacklist_spawn_reason: [] + #可选: [default/nbt/advanced] item_format: reward: default diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 89e4158..5fb56b3 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -66,6 +66,10 @@ blacklist_worlds: - 'world' - 'world_nether' +#ender_dragon with these spawn reason will be ignored by this plugin. +#example: COMMAND,CUSTOM,DEFAULT +blacklist_spawn_reason: [] + #optional: [default/nbt/advanced] item_format: reward: default diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 5cbe06a..10a3d4e 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: EnderDragon -version: 2.2.0 +version: 2.3.0 main: pers.xanadu.enderdragon.EnderDragon author: Xanadu13 api-version: 1.13