add enable_worlds
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<EnderDragon> entities = getExplosionDragon(5f,bed_loc);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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<String> worlds = new ArrayList<>();
|
||||
public static final List<String> all_worlds = new ArrayList<>();
|
||||
public static final Set<String> enable_worlds = new ConcurrentSet<>();
|
||||
private Field dimension;
|
||||
private Field 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<EnderDragon> getExplosionDragon(float power, Location loc){
|
||||
|
||||
@@ -82,4 +82,4 @@ public class BossBarManager implements I_BossBarManager {
|
||||
}
|
||||
public void setBossBar(World world, final MyDragon myDragon){
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -83,4 +83,4 @@ public class BossBarManager implements I_BossBarManager {
|
||||
public void setBossBar(World world, final MyDragon myDragon){
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -68,4 +68,4 @@ public class BossBarManager implements I_BossBarManager {
|
||||
}
|
||||
public void setBossBar(World world, final MyDragon myDragon){
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package pers.xanadu.enderdragon.util;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.AbstractSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class ConcurrentSet<T> extends AbstractSet<T> implements Serializable {
|
||||
private static final long serialVersionUID = 1072237514L;
|
||||
private final ConcurrentHashMap<T, Boolean> map = new ConcurrentHashMap<>();
|
||||
|
||||
public ConcurrentSet() {
|
||||
}
|
||||
|
||||
public int size() {
|
||||
return this.map.size();
|
||||
}
|
||||
|
||||
public boolean contains(Object o) {
|
||||
return this.map.containsKey(o);
|
||||
}
|
||||
|
||||
public boolean add(T o) {
|
||||
return this.map.putIfAbsent(o, Boolean.TRUE) == null;
|
||||
}
|
||||
|
||||
public boolean remove(Object o) {
|
||||
return this.map.remove(o) != null;
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
this.map.clear();
|
||||
}
|
||||
|
||||
public Iterator<T> iterator() {
|
||||
return this.map.keySet().iterator();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user