Delete src/main/java/pers/xanadu/enderdragon/listener directory
This commit is contained in:
@@ -1,149 +0,0 @@
|
||||
package pers.xanadu.enderdragon.listener;
|
||||
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.boss.BarStyle;
|
||||
import org.bukkit.boss.BossBar;
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||
import org.bukkit.event.entity.EntitySpawnEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import pers.xanadu.enderdragon.config.Config;
|
||||
import pers.xanadu.enderdragon.config.Lang;
|
||||
import pers.xanadu.enderdragon.manager.DamageManager;
|
||||
import pers.xanadu.enderdragon.manager.RewardManager;
|
||||
import pers.xanadu.enderdragon.util.MyDragon;
|
||||
import pers.xanadu.enderdragon.util.Version;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import static pers.xanadu.enderdragon.EnderDragon.*;
|
||||
import static pers.xanadu.enderdragon.manager.DragonManager.*;
|
||||
import static pers.xanadu.enderdragon.manager.GlowManager.*;
|
||||
|
||||
public class CreatureSpawnListener 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;
|
||||
EnderDragon dragon = (EnderDragon) e.getEntity();
|
||||
MyDragon myDragon = judge();
|
||||
if(myDragon == null) {
|
||||
Lang.warn("special_dragon_jude_mode setting error!");
|
||||
return;
|
||||
}
|
||||
setSpecialKey(dragon, myDragon.unique_name);
|
||||
DamageManager.data.put(dragon.getUniqueId(),new ConcurrentHashMap<>());
|
||||
int times = data.getInt("times");
|
||||
Lang.runCommands(myDragon.spawn_cmd);
|
||||
for(String str : myDragon.spawn_broadcast_msg){
|
||||
Lang.broadcastMSG(str.replaceAll("%times%",String.valueOf(times)));
|
||||
}
|
||||
dragon.setCustomName(myDragon.display_name);
|
||||
setAttribute(dragon, Attribute.GENERIC_MAX_HEALTH, myDragon.max_health);
|
||||
dragon.setHealth(myDragon.spawn_health);
|
||||
|
||||
//modifyAttribute(dragon, Attribute.GENERIC_MOVEMENT_SPEED, myDragon.move_speed_modify);//
|
||||
|
||||
modifyAttribute(dragon, Attribute.GENERIC_ARMOR, myDragon.armor_modify);
|
||||
|
||||
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);
|
||||
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));
|
||||
}
|
||||
}
|
||||
else if(Version.mcMainVersion >= 12){
|
||||
getInstance().getBossBarManager().setBossBar(dragon.getWorld(),myDragon.display_name,bossBar_color,bossBar_style);
|
||||
}
|
||||
//dragon.getMetadata();
|
||||
|
||||
}
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void OnCrystalPlaced(final PlayerInteractEvent e){
|
||||
if(!Config.resist_player_respawn) return;
|
||||
if(e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
|
||||
if(e.getMaterial() != Material.END_CRYSTAL) return;
|
||||
if(e.getClickedBlock() == null) return;
|
||||
Material blockType = e.getClickedBlock().getType();
|
||||
if(blockType != Material.OBSIDIAN && blockType != Material.BEDROCK) return;
|
||||
World world = e.getPlayer().getWorld();
|
||||
if(world.getEnvironment() != World.Environment.THE_END) return;
|
||||
Block block = e.getClickedBlock();
|
||||
int d0 = block.getX();
|
||||
int d1 = block.getY() + 1;
|
||||
int d2 = block.getZ();
|
||||
if(world.getBlockAt(d0, d1, d2).getType() != Material.AIR) return;
|
||||
Location cen = block.getLocation().clone().add(0.5,1,0.5);
|
||||
Collection<Entity> list = world.getNearbyEntities(cen,0.5,1,0.5);
|
||||
if(!list.isEmpty()) return;
|
||||
e.setCancelled(true);
|
||||
ItemStack item = e.getItem();
|
||||
int amount = item.getAmount();
|
||||
e.getItem().setAmount(amount-1);
|
||||
EnderCrystal crystal = (EnderCrystal) world.spawnEntity(cen,EntityType.ENDER_CRYSTAL);
|
||||
crystal.setShowingBottom(false);
|
||||
}
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void OnEffectCloudSpawn(final EntitySpawnEvent e){
|
||||
if(!(e.getEntity() instanceof AreaEffectCloud)) return;
|
||||
AreaEffectCloud effectCloud = (AreaEffectCloud) e.getEntity();
|
||||
if(effectCloud.getSource() == null) return;
|
||||
if(!(effectCloud.getSource() instanceof EnderDragon)) return;
|
||||
EnderDragon dragon = (EnderDragon) effectCloud.getSource();
|
||||
String unique_name = getSpecialKey(dragon);
|
||||
if(unique_name == null) return;
|
||||
MyDragon myDragon = mp.get(unique_name);
|
||||
if(myDragon == null) return;
|
||||
effectCloud.setRadius((float) myDragon.effect_cloud_original_radius);
|
||||
effectCloud.setRadiusPerTick((float) myDragon.effect_cloud_expand_speed/20f);
|
||||
effectCloud.setDuration(myDragon.effect_cloud_duration * 20);
|
||||
if(myDragon.effect_cloud_color_R != -1){
|
||||
effectCloud.setParticle(Particle.SPELL_MOB);
|
||||
effectCloud.setColor(Color.fromRGB(myDragon.effect_cloud_color_R,myDragon.effect_cloud_color_G,myDragon.effect_cloud_color_B));
|
||||
}
|
||||
effectCloud.clearCustomEffects();
|
||||
for(PotionEffect effect : myDragon.effect_cloud_potion){
|
||||
effectCloud.addCustomEffect(effect,true);
|
||||
}
|
||||
}
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void OnDragonBreathGather(final PlayerInteractEvent e){
|
||||
if(!Config.resist_dragon_breath_gather) return;
|
||||
if(e.getMaterial() != Material.GLASS_BOTTLE) return;
|
||||
if(e.getAction() != Action.RIGHT_CLICK_BLOCK && e.getAction() != Action.RIGHT_CLICK_AIR) return;
|
||||
World world = e.getPlayer().getWorld();
|
||||
if(world.getEnvironment() != World.Environment.THE_END) return;
|
||||
Player p = e.getPlayer();
|
||||
Location cen = p.getLocation().clone().add(0d,0.9d,0d);
|
||||
Collection<Entity> list = world.getNearbyEntities(cen,2.3d,2.9d,2.3d);
|
||||
for(Entity entity : list){
|
||||
if(entity instanceof AreaEffectCloud) {
|
||||
AreaEffectCloud effectCloud = (AreaEffectCloud) entity;
|
||||
if(effectCloud.getSource() instanceof EnderDragon){
|
||||
e.setCancelled(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
package pers.xanadu.enderdragon.listener;
|
||||
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
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.util.MyDragon;
|
||||
|
||||
public class DragonAttackListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void OnDragonAttack(final EntityDamageByEntityEvent e){
|
||||
Entity victim = e.getEntity();
|
||||
Entity attack = e.getDamager();
|
||||
if(!(attack instanceof EnderDragon)) return;
|
||||
EnderDragon dragon = (EnderDragon) attack;
|
||||
String unique_name = DragonManager.getSpecialKey(dragon);
|
||||
if(unique_name == null) return;
|
||||
MyDragon myDragon = DragonManager.mp.get(unique_name);
|
||||
if(myDragon == null) return;
|
||||
e.setDamage(Math.max(0.1, e.getDamage() + myDragon.attack_damage_modify));
|
||||
if(victim instanceof Player){
|
||||
Player player = (Player) victim;
|
||||
for(PotionEffect effect : myDragon.attack_potion_effect){
|
||||
player.addPotionEffect(effect);
|
||||
}
|
||||
if(!myDragon.suck_blood_enable) return;
|
||||
double suck = e.getFinalDamage() * myDragon.suck_blood_rate + myDragon.suck_blood_base_amount;
|
||||
dragon.setHealth(Math.min(dragon.getHealth()+suck,dragon.getMaxHealth()));
|
||||
}
|
||||
else{
|
||||
if(!myDragon.suck_blood_enable) return;
|
||||
if(myDragon.suck_blood_only_player) return;
|
||||
double suck = e.getFinalDamage() * myDragon.suck_blood_rate + myDragon.suck_blood_base_amount;
|
||||
dragon.setHealth(Math.min(dragon.getHealth()+suck,dragon.getMaxHealth()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
package pers.xanadu.enderdragon.listener;
|
||||
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import pers.xanadu.enderdragon.event.DragonDamageByPlayerEvent;
|
||||
|
||||
import static pers.xanadu.enderdragon.EnderDragon.pm;
|
||||
|
||||
public class DragonBaseHurtListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void BaseAttackToDragon(EntityDamageByEntityEvent e){
|
||||
if(e.isCancelled()) return;
|
||||
if(e.getDamage() <= 0.0) return;
|
||||
Entity victim = e.getEntity();
|
||||
Entity entity = e.getDamager();
|
||||
if(victim instanceof EnderDragon){
|
||||
EnderDragon dragon = (EnderDragon) victim;
|
||||
if(entity instanceof Player){
|
||||
Player player = (Player) entity;
|
||||
pm.callEvent(new DragonDamageByPlayerEvent(player,dragon,e.getCause(),e.getFinalDamage()));
|
||||
}
|
||||
else if(entity instanceof Projectile){
|
||||
Projectile projectile = (Projectile) entity;
|
||||
if(!(projectile.getShooter() instanceof Player)) return;
|
||||
Player damager = (Player) projectile.getShooter();
|
||||
pm.callEvent(new DragonDamageByPlayerEvent(damager,dragon,e.getCause(),e.getFinalDamage()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
package pers.xanadu.enderdragon.listener;
|
||||
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.entity.EnderDragon;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
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 java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class DragonDamageByPlayerListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void OnDragonDamageByPlayer(final DragonDamageByPlayerEvent e){
|
||||
Player p = e.getDamager();
|
||||
EnderDragon dragon = e.getDragon();
|
||||
double health = dragon.getHealth();
|
||||
double damage = Math.min(e.getFinalDamage(),health);
|
||||
if(damage > 0.0d){
|
||||
UUID dragon_uid = dragon.getUniqueId();
|
||||
ConcurrentHashMap<String,Double> mp = DamageManager.data.computeIfAbsent(dragon_uid, k->new ConcurrentHashMap<>());
|
||||
mp.compute(p.getName(),(k,v)->v==null?damage:v+damage);
|
||||
}
|
||||
//Bukkit.broadcastMessage(RewardManager.data.get(dragon.getUniqueId()).get(p.getUniqueId())+"");
|
||||
double max_health = dragon.getMaxHealth();
|
||||
double remain_health = Math.max(health-e.getFinalDamage(),0.0);
|
||||
String str = Lang.dragon_damage_display.replaceAll("%damage%", format(damage)).replaceAll("%remain_health%",format(remain_health)).replaceAll("%max_health%",format(max_health));
|
||||
switch (Config.damage_visible_mode.toLowerCase()){
|
||||
case "actionbar" : {
|
||||
p.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(str));
|
||||
break;
|
||||
}
|
||||
case "chatbox" : {
|
||||
Lang.sendFeedback(p,str);
|
||||
break;
|
||||
}
|
||||
case "subtitle" : {
|
||||
p.sendTitle("",str,5,40,5);
|
||||
break;
|
||||
}
|
||||
default : {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private String format(double d0){
|
||||
return String.format("%.2f",d0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,163 +0,0 @@
|
||||
package pers.xanadu.enderdragon.listener;
|
||||
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||
import net.md_5.bungee.api.chat.HoverEvent;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.EnderDragon;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import pers.xanadu.enderdragon.config.Config;
|
||||
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.util.MyDragon;
|
||||
import pers.xanadu.enderdragon.util.Pair;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
import static pers.xanadu.enderdragon.EnderDragon.*;
|
||||
|
||||
public class DragonDeathListener implements Listener {
|
||||
@EventHandler
|
||||
public void OnDragonDeath(final EntityDeathEvent e){
|
||||
if(!(e.getEntity() instanceof EnderDragon)) return;
|
||||
EnderDragon dragon = (EnderDragon) e.getEntity();
|
||||
String unique_name = DragonManager.getSpecialKey(dragon);
|
||||
if(unique_name == null) return;
|
||||
MyDragon myDragon = DragonManager.mp.get(unique_name);
|
||||
if(myDragon == null) return;
|
||||
int times = data.getInt("times");
|
||||
data.set("times",times+1);
|
||||
try{
|
||||
data.save(dataF);
|
||||
}catch (IOException ex){
|
||||
Lang.error(Lang.plugin_file_save_error.replaceAll("\\{file_name}",dataF.getName()));
|
||||
}
|
||||
e.setDroppedExp(myDragon.exp_drop);
|
||||
if(myDragon.dragon_egg_spawn_chance > ThreadLocalRandom.current().nextDouble(100)){
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Block block = e.getEntity().getWorld().getBlockAt(myDragon.dragon_egg_spawn_x, myDragon.dragon_egg_spawn_y, myDragon.dragon_egg_spawn_z);
|
||||
block.setType(Material.DRAGON_EGG);
|
||||
}
|
||||
}.runTaskLater(plugin, myDragon.dragon_egg_spawn_delay);
|
||||
}
|
||||
Player p = e.getEntity().getKiller();
|
||||
myDragon.reward_dist.handle_dist(myDragon,dragon,p);
|
||||
{
|
||||
List<String> processed = new ArrayList<>();
|
||||
if(p != null){
|
||||
for(String str : myDragon.death_broadcast_msg){
|
||||
processed.add(str.replaceAll("%times%",String.valueOf(times)).replaceAll("%player%",p.getDisplayName()));
|
||||
}
|
||||
}
|
||||
else{
|
||||
StringBuilder names = new StringBuilder();
|
||||
List<Entity> entities = dragon.getNearbyEntities(5,5,5);
|
||||
for (Entity entity : entities) {
|
||||
if (entity instanceof Player) {
|
||||
names.append(((Player) entity).getDisplayName()).append(",");
|
||||
}
|
||||
}
|
||||
String name = names.toString();
|
||||
if(name.equals("")) name = Lang.dragon_no_killer;
|
||||
if(name.endsWith(",")) name = name.substring(0,name.length()-1);
|
||||
for(String str : myDragon.death_broadcast_msg){
|
||||
processed.add(str.replaceAll("%times%",String.valueOf(times)).replaceAll("%player%", name));
|
||||
}
|
||||
}
|
||||
handleBroadcast(processed,myDragon,dragon);
|
||||
}
|
||||
DamageManager.data.remove(dragon.getUniqueId());
|
||||
Lang.runCommands(myDragon.death_cmd,p);
|
||||
if(p != null){
|
||||
for(String str : myDragon.msg_to_killer){
|
||||
Lang.sendFeedback(p,str.replaceAll("%times%",String.valueOf(times)));
|
||||
}
|
||||
}
|
||||
TimerManager.startTimer(dragon.getWorld().getName());
|
||||
}
|
||||
public static void handleBroadcast(final List<String> list,final MyDragon myDragon,final EnderDragon dragon){
|
||||
boolean find = false;
|
||||
for(String str : list){
|
||||
if(str.contains("{damage_statistics}")){
|
||||
find = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!find) Lang.broadcastMSG(list);
|
||||
else{
|
||||
final TextComponent hover = getHover(myDragon,dragon);
|
||||
for(String str : list){
|
||||
final String[] splits = str.split("\\{damage_statistics}");
|
||||
final ComponentBuilder builder = new ComponentBuilder(Lang.plugin_prefix);
|
||||
int size = splits.length;
|
||||
for(int i=0;i<size-1;i++){
|
||||
builder.append(splits[i]).append(hover);
|
||||
}
|
||||
builder.append(splits[size-1]);
|
||||
if(str.endsWith("{damage_statistics}")) builder.append(hover);
|
||||
Bukkit.getOnlinePlayers().forEach(p->p.spigot().sendMessage(builder.create()));
|
||||
}
|
||||
}
|
||||
}
|
||||
public static TextComponent getHover(final MyDragon myDragon,final EnderDragon dragon) {
|
||||
final TextComponent text = new TextComponent(Lang.dragon_damage_statistics_text);
|
||||
List<Pair<String,Double>> list = DamageManager.getDamageList(dragon.getUniqueId());
|
||||
list.sort(DamageManager::sortByDamage);
|
||||
double sum = 0d;
|
||||
for(Pair<String,Double> pair : list){
|
||||
sum += pair.second;
|
||||
}
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for(String raw : Lang.dragon_damage_statistics_hover_prefix){
|
||||
builder.append(raw
|
||||
.replaceAll("%dragon_display_name%",myDragon.display_name)
|
||||
.replaceAll("%damage_sum%",String.format("%.2f",sum))
|
||||
).append("\n");
|
||||
}
|
||||
int i = 0;
|
||||
for(Pair<String,Double> pair : list){
|
||||
String raw = Lang.dragon_damage_statistics_hover_mt;
|
||||
if(i < Config.damage_statistics_limit){
|
||||
double damage = pair.second;
|
||||
double percent = damage/sum*100;
|
||||
builder.append(raw
|
||||
.replaceAll("%rank%", String.valueOf(++i))
|
||||
.replaceAll("%player%", pair.first)
|
||||
.replaceAll("%damage%",String.format("%.2f",damage))
|
||||
.replaceAll("%percent%",String.format("%.2f%%",percent))
|
||||
).append("\n");
|
||||
}
|
||||
}
|
||||
if(list.size()-i>0){
|
||||
String raw = Lang.dragon_damage_statistics_hover_exceeds_limit;
|
||||
builder.append(raw
|
||||
.replaceAll("%exceeds_number%", String.valueOf(list.size()-i))
|
||||
).append("\n");
|
||||
}
|
||||
for(String raw : Lang.dragon_damage_statistics_hover_suffix){
|
||||
builder.append(raw
|
||||
.replaceAll("%dragon_display_name%",myDragon.display_name)
|
||||
.replaceAll("%damage_sum%",String.format("%.2f",sum))
|
||||
);
|
||||
}
|
||||
BaseComponent[] cmp = new ComponentBuilder(builder.toString()).create();
|
||||
text.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,cmp));
|
||||
return text;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,94 +0,0 @@
|
||||
package pers.xanadu.enderdragon.listener;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.EnderDragon;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDamageByBlockEvent;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
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 java.util.Collection;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import static pers.xanadu.enderdragon.EnderDragon.pm;
|
||||
import static pers.xanadu.enderdragon.manager.WorldManager.getExplosionDragon;
|
||||
|
||||
public class DragonExplosionHurtListener implements Listener {
|
||||
|
||||
private static final ConcurrentHashMap<UUID,PlayerExplodeDragonEvent> mp = new ConcurrentHashMap<>();
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void OnDragonDamageByTNT(final EntityDamageByEntityEvent e){
|
||||
if(e.isCancelled()) return;
|
||||
if(e.getDamage() <= 0.0) return;
|
||||
Entity victim = e.getEntity();
|
||||
Entity entity = e.getDamager();
|
||||
if(victim instanceof EnderDragon){
|
||||
EnderDragon dragon = (EnderDragon) victim;
|
||||
if(entity instanceof TNTPrimed){
|
||||
TNTPrimed tnt = (TNTPrimed) entity;
|
||||
if(!(tnt.getSource() instanceof Player)) return;
|
||||
Player damager = (Player) tnt.getSource();
|
||||
pers.xanadu.enderdragon.EnderDragon.pm.callEvent(new DragonDamageByPlayerEvent(damager,dragon,e.getCause(),e.getFinalDamage()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 用tnt隔着方块炸龙也能触发
|
||||
*/
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void OnDragonDamageByExplode(final EntityDamageByBlockEvent e){
|
||||
long time = pers.xanadu.enderdragon.EnderDragon.getInstance().getWorldDataManager().getGameTime(e.getEntity().getWorld());
|
||||
EntityDamageEvent.DamageCause cause = e.getCause();
|
||||
if(e.getCause() != EntityDamageEvent.DamageCause.BLOCK_EXPLOSION) return;
|
||||
Entity entity = e.getEntity();
|
||||
if(entity instanceof EnderDragon){
|
||||
//Bukkit.broadcastMessage(e.getFinalDamage()+"awa");
|
||||
EnderDragon dragon = (EnderDragon) entity;
|
||||
for(UUID uuid : mp.keySet()){
|
||||
PlayerExplodeDragonEvent ped = mp.get(uuid);
|
||||
if(ped == null) continue;
|
||||
if(ped.getTime() != time) continue;
|
||||
if(ped.getEnderDragon().getUniqueId() != dragon.getUniqueId()) continue;
|
||||
//mp.remove(uuid);
|
||||
pm.callEvent(new DragonDamageByPlayerEvent(ped.getPlayer(),dragon,cause,e.getFinalDamage()));
|
||||
//Bukkit.broadcastMessage(ped._loc.toString());
|
||||
//Bukkit.broadcastMessage("final: "+e.getFinalDamage());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void OnPlayerClickBed(final PlayerBedEnterEvent e){
|
||||
Player p = e.getPlayer();
|
||||
if(p.getWorld().getEnvironment() != World.Environment.THE_END) 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);
|
||||
for(EnderDragon dragon : entities){
|
||||
UUID uuid = p.getUniqueId();
|
||||
mp.put(uuid,new PlayerExplodeDragonEvent(time,p,dragon,bed_loc));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void clearUID(final UUID uuid){
|
||||
mp.remove(uuid);
|
||||
}
|
||||
public static void addUID(final UUID uuid,final PlayerExplodeDragonEvent ped){
|
||||
mp.put(uuid,ped);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
package pers.xanadu.enderdragon.listener;
|
||||
|
||||
import org.bukkit.entity.EnderDragon;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityRegainHealthEvent;
|
||||
import pers.xanadu.enderdragon.util.MyDragon;
|
||||
|
||||
import static pers.xanadu.enderdragon.manager.DragonManager.getSpecialKey;
|
||||
import static pers.xanadu.enderdragon.manager.DragonManager.mp;
|
||||
|
||||
public class DragonHealListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void OnDragonHeal(final EntityRegainHealthEvent e){
|
||||
if(!(e.getEntity() instanceof EnderDragon)) return;
|
||||
EnderDragon dragon = (EnderDragon) e.getEntity();
|
||||
if(!e.getRegainReason().equals(EntityRegainHealthEvent.RegainReason.ENDER_CRYSTAL)) return;
|
||||
String unique_name = getSpecialKey(dragon);
|
||||
if(unique_name == null) return;
|
||||
MyDragon myDragon = mp.get(unique_name);
|
||||
if(myDragon == null) return;
|
||||
e.setAmount(myDragon.crystal_heal_speed / 2d);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
package pers.xanadu.enderdragon.listener;
|
||||
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||
|
||||
public class EndGatewayListener implements Listener {
|
||||
// @EventHandler
|
||||
// public void OnEndGateWaySpawn(final PortalCreateEvent e){
|
||||
// Bukkit.broadcastMessage("123");
|
||||
// List<BlockState> list = e.getBlocks();
|
||||
// list.forEach(block -> Bukkit.broadcastMessage(block.toString()));
|
||||
// }
|
||||
// @EventHandler
|
||||
// public void OnEndGateWaySpawn2(final EntityCreatePortalEvent e){
|
||||
// Bukkit.broadcastMessage("12345");
|
||||
//
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -1,123 +0,0 @@
|
||||
package pers.xanadu.enderdragon.listener;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import pers.xanadu.enderdragon.config.Lang;
|
||||
import pers.xanadu.enderdragon.gui.*;
|
||||
import pers.xanadu.enderdragon.gui.holder.Menu;
|
||||
import pers.xanadu.enderdragon.gui.holder.MenuEditor;
|
||||
import pers.xanadu.enderdragon.gui.slot.PageJumpSlot;
|
||||
import pers.xanadu.enderdragon.manager.DragonManager;
|
||||
import pers.xanadu.enderdragon.manager.GuiManager;
|
||||
import pers.xanadu.enderdragon.manager.RewardManager;
|
||||
import pers.xanadu.enderdragon.util.MyDragon;
|
||||
|
||||
public class InventoryListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void OnInventoryClick(InventoryClickEvent e){
|
||||
InventoryHolder holder = e.getInventory().getHolder();
|
||||
if(!(holder instanceof GUIHolder)) return;
|
||||
GUIHolder guiHolder = (GUIHolder) holder;
|
||||
if(!(guiHolder.getGUI() instanceof GUIWrapper)) return;
|
||||
e.setCancelled(true);
|
||||
GUIWrapper guiWrapper = (GUIWrapper) guiHolder.getGUI();
|
||||
if(e.getClickedInventory() instanceof PlayerInventory){
|
||||
return;
|
||||
}
|
||||
if(e.getRawSlot() >= 54 || e.getRawSlot() < 0){ //点击箱子以外界面会返回-999
|
||||
return;
|
||||
}
|
||||
Player p = (Player) e.getWhoClicked();
|
||||
GUISlot slot = guiWrapper.getSlot(e.getRawSlot());
|
||||
GUISlotType type = slot.getType();
|
||||
if(type == GUISlotType.EMPTY || type == GUISlotType.TIP || type == GUISlotType.PAGE_TIP){
|
||||
return;
|
||||
}
|
||||
if(type == GUISlotType.PAGE_PREV){
|
||||
guiWrapper.prev();
|
||||
p.updateInventory();
|
||||
return;
|
||||
}
|
||||
if(type == GUISlotType.PAGE_NEXT){
|
||||
guiWrapper.next();
|
||||
p.updateInventory();
|
||||
return;
|
||||
}
|
||||
|
||||
if(holder instanceof Menu){
|
||||
if(e.getClick() != ClickType.LEFT && e.getClick() != ClickType.RIGHT){
|
||||
return;
|
||||
}
|
||||
if(type == GUISlotType.ITEM_SLOT){
|
||||
return;
|
||||
}
|
||||
if(type == GUISlotType.PAGE_JUMP){
|
||||
String name = ((PageJumpSlot)slot).getGuiName();
|
||||
GuiManager.openGui(p,name,false);
|
||||
return;
|
||||
}
|
||||
if(type == GUISlotType.DRAGON_SLOT){
|
||||
String unique_name = guiWrapper.getData(guiWrapper.getPage(),e.getRawSlot());
|
||||
MyDragon dragon = DragonManager.mp.get(unique_name);
|
||||
if(dragon == null){
|
||||
Lang.sendFeedback(p,Lang.gui_not_found);
|
||||
return;
|
||||
}
|
||||
GuiManager.openGui(p,dragon.drop_gui,dragon.unique_name,false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if(holder instanceof MenuEditor){
|
||||
MenuEditor menuEditor = (MenuEditor) holder;
|
||||
if(e.getClick() != ClickType.LEFT && e.getClick() != ClickType.RIGHT && e.getClick() != ClickType.SHIFT_RIGHT){
|
||||
return;
|
||||
}
|
||||
if(type == GUISlotType.ITEM_SLOT){
|
||||
if(e.getClick() != ClickType.SHIFT_RIGHT) return;
|
||||
int idx = guiWrapper.getPage()*guiWrapper.getItemSize()+guiWrapper.getItemSlotIdx(e.getRawSlot());
|
||||
//Bukkit.broadcastMessage(idx+"");
|
||||
boolean b = RewardManager.removeItem(menuEditor.getDragon_key(),idx);
|
||||
if(b) {
|
||||
p.sendMessage(Lang.command_drop_item_remove_succeed);
|
||||
guiWrapper.updateItemChanges(true);
|
||||
}
|
||||
else p.sendMessage(Lang.command_drop_item_remove_fail);
|
||||
return;
|
||||
}
|
||||
if(type == GUISlotType.PAGE_JUMP){
|
||||
String name = ((PageJumpSlot)slot).getGuiName();
|
||||
GuiManager.openGui(p,name,true);
|
||||
return;
|
||||
}
|
||||
if(type == GUISlotType.DRAGON_SLOT){
|
||||
String unique_name = guiWrapper.getData(guiWrapper.getPage(),e.getRawSlot());
|
||||
MyDragon dragon = DragonManager.mp.get(unique_name);
|
||||
if(dragon == null){
|
||||
Lang.sendFeedback(p,Lang.gui_not_found);
|
||||
return;
|
||||
}
|
||||
GuiManager.openGui(p,dragon.drop_gui,dragon.unique_name,true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void OnInventoryDrag(InventoryDragEvent e){
|
||||
InventoryHolder holder = e.getInventory().getHolder();
|
||||
if(!(holder instanceof GUIHolder)) return;
|
||||
if(holder instanceof Menu){
|
||||
GUIHolder guiHolder = (GUIHolder) holder;
|
||||
if(!(guiHolder.getGUI() instanceof GUIWrapper)) return;
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package pers.xanadu.enderdragon.listener;
|
||||
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import pers.xanadu.enderdragon.manager.GlowManager;
|
||||
|
||||
public class PlayerListener implements Listener {
|
||||
@EventHandler
|
||||
public void onPlayerJoin(final PlayerJoinEvent e){
|
||||
GlowManager.setScoreBoard(e.getPlayer());
|
||||
|
||||
}
|
||||
@EventHandler
|
||||
public void onPlayerQuit(final PlayerQuitEvent e){
|
||||
DragonExplosionHurtListener.clearUID(e.getPlayer().getUniqueId());
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
package pers.xanadu.enderdragon.listener;
|
||||
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.server.PluginDisableEvent;
|
||||
|
||||
import static pers.xanadu.enderdragon.EnderDragon.*;
|
||||
|
||||
public class PluginDisableListener implements Listener {
|
||||
@EventHandler
|
||||
public void OnPluginDisable(PluginDisableEvent e){
|
||||
if(e.getPlugin().equals(plugin)){
|
||||
disableAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
package pers.xanadu.enderdragon.listener;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.type.RespawnAnchor;
|
||||
import org.bukkit.entity.EnderDragon;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import pers.xanadu.enderdragon.event.PlayerExplodeDragonEvent;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.UUID;
|
||||
|
||||
import static pers.xanadu.enderdragon.manager.WorldManager.getExplosionDragon;
|
||||
|
||||
public class RespawnAnchorExplodeListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void OnRespawnAnchorExplode(final PlayerInteractEvent e){
|
||||
if(e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
|
||||
Block block = e.getClickedBlock();
|
||||
if(block == null || block.getType() != Material.RESPAWN_ANCHOR) return;
|
||||
RespawnAnchor anchor = (RespawnAnchor) block.getBlockData();
|
||||
Player p = e.getPlayer();
|
||||
Material offHand = p.getInventory().getItemInOffHand().getType();
|
||||
if(e.getHand()== EquipmentSlot.HAND && e.getMaterial()!=Material.GLOWSTONE && offHand==Material.GLOWSTONE) return;
|
||||
if(e.getMaterial()==Material.GLOWSTONE && anchor.getCharges()<4) return;
|
||||
if(anchor.getCharges()==0) return;
|
||||
if(pers.xanadu.enderdragon.EnderDragon.getInstance().getRespawnAnchorManager().isRespawnAnchorWorks(p.getWorld())) return;
|
||||
if(p.isSneaking() && (p.getItemInHand().getType()!=Material.AIR || offHand!=Material.AIR)) return;
|
||||
long time = pers.xanadu.enderdragon.EnderDragon.getInstance().getWorldDataManager().getGameTime(e.getPlayer().getWorld());
|
||||
Location loc = block.getLocation();
|
||||
Collection<EnderDragon> entities = getExplosionDragon(5f,loc);
|
||||
for(EnderDragon dragon : entities){
|
||||
UUID uuid = p.getUniqueId();
|
||||
DragonExplosionHurtListener.addUID(uuid,new PlayerExplodeDragonEvent(time,p,dragon,loc));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
package pers.xanadu.enderdragon.listener.mythiclib;
|
||||
|
||||
import io.lumine.mythic.lib.api.event.PlayerAttackEvent;
|
||||
import io.lumine.mythic.lib.damage.DamageMetadata;
|
||||
import org.bukkit.entity.EnderDragon;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import pers.xanadu.enderdragon.event.DragonDamageByPlayerEvent;
|
||||
|
||||
import static pers.xanadu.enderdragon.EnderDragon.pm;
|
||||
|
||||
public class PlayerAttackListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void onPlayerAttack(PlayerAttackEvent e){
|
||||
if(e.isCancelled()) return;
|
||||
if(!(e.getEntity() instanceof org.bukkit.entity.EnderDragon)) return;
|
||||
EnderDragon dragon = (EnderDragon) e.getEntity();
|
||||
DamageMetadata damage = e.getDamage();
|
||||
double final_damage = damage.getDamage();
|
||||
if(final_damage > 0.0d){
|
||||
DragonDamageByPlayerEvent event = new DragonDamageByPlayerEvent(e.getAttacker().getPlayer(),dragon, e.toBukkit().getCause(), final_damage);
|
||||
pm.callEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user