update to v2.0.2

This commit is contained in:
Xanadu13
2023-02-10 19:58:06 +08:00
committed by GitHub
parent 1246cb5f91
commit e884a64eea
15 changed files with 133 additions and 67 deletions
@@ -31,7 +31,7 @@ public class MainCommand implements CommandExecutor {
}
if (args.length == 1) {
switch (args[0].toLowerCase()){
case "reload" -> {
case "reload" : {
if(!sender.hasPermission("ed.reload")){
sendFeedback(sender,Lang.command_no_permission);
return false;
@@ -41,19 +41,20 @@ public class MainCommand implements CommandExecutor {
sendFeedback(sender,Lang.command_reload_config);
return true;
}
case "respawn" -> {
case "respawn" : {
if(!sender.hasPermission("ed.respawn")){
sendFeedback(sender,Lang.command_no_permission);
return false;
}
if(!(sender instanceof Player player)){
if(!(sender instanceof Player)){
sendFeedback(sender,Lang.command_only_player);
return false;
}
Player player = (Player) sender;
EnderDragon.getInstance().getDragonManager().initiateRespawn(player);
return true;
}
case "update" -> {
case "update" : {
if(!sender.hasPermission("ed.update")){
sendFeedback(sender,Lang.command_no_permission);
return false;
@@ -65,19 +66,20 @@ public class MainCommand implements CommandExecutor {
}
return true;
}
default -> {
default : {
sendCommandTips(sender);
return false;
}
}
}
if (args[0].equalsIgnoreCase("drop")) {
if(!(sender instanceof Player p)) {
if(!(sender instanceof Player)) {
sendFeedback(sender,Lang.command_only_player);
return false;
}
Player p = (Player) sender;
switch (args[1].toLowerCase()){
case "gui" -> {
case "gui" : {
if(!sender.hasPermission("ed.drop.gui")){
sendFeedback(sender,Lang.command_no_permission);
return false;
@@ -96,8 +98,9 @@ public class MainCommand implements CommandExecutor {
openGui(p,dragon.drop_gui,key);
return true;
}
break;
}
case "clear" -> {
case "clear" : {
if(!sender.hasPermission("ed.drop.edit")){
sendFeedback(sender,Lang.command_no_permission);
return false;
@@ -108,8 +111,9 @@ public class MainCommand implements CommandExecutor {
sendFeedback(sender,Lang.command_drop_item_clear);
return true;
}
break;
}
case "add" -> {
case "add" : {
if(!sender.hasPermission("ed.drop.edit")){
sendFeedback(sender,Lang.command_no_permission);
return false;
@@ -138,8 +142,9 @@ public class MainCommand implements CommandExecutor {
sendFeedback(p,Lang.command_drop_item_add_succeed.replaceAll("\\{chance}",ChanceStr));
return true;
}
break;
}
default -> {
default : {
sendCommandTips(sender);
return false;
}
@@ -1,18 +1,18 @@
package xanadu.enderdragon.commands;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static xanadu.enderdragon.manager.DragonManager.dragon_names;
public class TabCompleter implements org.bukkit.command.TabCompleter {
private static final List<String> arguments_1 = List.of(new String[]{"drop", "reload", "respawn", "update"});
private static final List<String> arguments_2 = List.of(new String[]{"add", "clear", "gui"});
private static final List<String> arguments_1 = Arrays.asList("drop", "reload", "respawn", "update");
private static final List<String> arguments_2 = Arrays.asList("add", "clear", "gui");
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
@@ -18,16 +18,19 @@ public abstract class GUISlot {
if(section == null) return new EmptySlot();
GUISlotType guiSlotType = GUISlotType.getByName(section.getString("type"));
switch (guiSlotType) {
case ITEM_SLOT -> {
case ITEM_SLOT : {
return new ItemSlot(section);
}
case DRAGON_SLOT -> {
case DRAGON_SLOT : {
return new DragonSlot(section);
}
case PAGE_PREV, PAGE_NEXT, PAGE_TIP, TIP -> {
case PAGE_PREV :
case PAGE_NEXT :
case PAGE_TIP :
case TIP : {
return new TipSlot(guiSlotType, section);
}
case PAGE_JUMP -> {
case PAGE_JUMP : {
return new PageJumpSlot(section);
}
}
@@ -27,7 +27,8 @@ import static xanadu.enderdragon.manager.DragonManager.*;
public class CreatureSpawnListener implements Listener {
@EventHandler(priority = EventPriority.LOW)
public void OnDragonSpawn(CreatureSpawnEvent e){
if(!(e.getEntity() instanceof EnderDragon dragon)) return;
if(!(e.getEntity() instanceof EnderDragon)) return;
EnderDragon dragon = (EnderDragon) e.getEntity();
MyDragon myDragon = judge();
if(myDragon == null) {
Lang.warn("special_dragon_jude_mode setting error!");
@@ -86,9 +87,11 @@ public class CreatureSpawnListener implements Listener {
}
@EventHandler(priority = EventPriority.HIGH)
public void OnEffectCloudSpawn(final EntitySpawnEvent e){
if(!(e.getEntity() instanceof AreaEffectCloud effectCloud)) return;
if(!(e.getEntity() instanceof AreaEffectCloud)) return;
AreaEffectCloud effectCloud = (AreaEffectCloud) e.getEntity();
if(effectCloud.getSource() == null) return;
if(!(effectCloud.getSource() instanceof EnderDragon dragon)) 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);
@@ -116,7 +119,8 @@ public class CreatureSpawnListener implements Listener {
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 effectCloud) {
if(entity instanceof AreaEffectCloud) {
AreaEffectCloud effectCloud = (AreaEffectCloud) entity;
if(effectCloud.getSource() instanceof EnderDragon){
e.setCancelled(true);
break;
@@ -16,12 +16,16 @@ public class DragonBaseHurtListener implements Listener {
if(e.getDamage() <= 0.0) return;
Entity victim = e.getEntity();
Entity entity = e.getDamager();
if(victim instanceof EnderDragon dragon){
if(entity instanceof Player player){
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){
if(!(projectile.getShooter() instanceof Player damager)) return;
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()));
}
}
@@ -22,10 +22,19 @@ public class DragonDamageByPlayerListener implements Listener {
double remain_health = Math.max(dragon.getHealth()-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));
case "chatbox" -> Lang.sendFeedback(p,str);
case "subtitle" -> p.sendTitle("",str,5,40,5);
default -> {
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 : {
}
@@ -28,7 +28,8 @@ import static xanadu.enderdragon.manager.DragonManager.mp;
public class DragonDeathListener implements Listener {
@EventHandler
public void OnDragonDeath(EntityDeathEvent e){
if(!(e.getEntity() instanceof EnderDragon dragon)) return;
if(!(e.getEntity() instanceof EnderDragon)) return;
EnderDragon dragon = (EnderDragon) e.getEntity();
String unique_name = getSpecialKey(dragon);
if(unique_name == null) return;
MyDragon myDragon = mp.get(unique_name);
@@ -13,7 +13,8 @@ import static xanadu.enderdragon.manager.DragonManager.mp;
public class DragonHealListener implements Listener {
@EventHandler(priority = EventPriority.HIGH)
public void OnDragonHeal(EntityRegainHealthEvent e){
if(!(e.getEntity() instanceof EnderDragon dragon)) return;
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;
@@ -18,13 +18,15 @@ public class EntityDamageByEntityListener implements Listener {
public void OnDragonAttack(EntityDamageByEntityEvent e){
Entity victim = e.getEntity();
Entity attack = e.getDamager();
if(!(attack instanceof EnderDragon dragon)) return;
if(!(attack instanceof EnderDragon)) return;
EnderDragon dragon = (EnderDragon) attack;
String unique_name = getSpecialKey(dragon);
if(unique_name == null) return;
MyDragon myDragon = 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){
if(victim instanceof Player){
Player player = (Player) victim;
for(PotionEffect effect : myDragon.attack_potion_effect){
player.addPotionEffect(effect);
}
@@ -45,9 +47,12 @@ public class EntityDamageByEntityListener implements Listener {
if(e.getDamage() <= 0.0) return;
Entity victim = e.getEntity();
Entity entity = e.getDamager();
if(victim instanceof EnderDragon dragon){
if(entity instanceof TNTPrimed tnt){
if(!(tnt.getSource() instanceof Player damager)) return;
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();
pm.callEvent(new DragonDamageByPlayerEvent(damager,dragon,e.getCause(),e.getFinalDamage()));
}
}
@@ -24,47 +24,42 @@ public class InventoryListener implements Listener {
@EventHandler(priority = EventPriority.LOWEST)
public void OnInventoryClick(InventoryClickEvent e){
InventoryHolder holder = e.getInventory().getHolder();
if(!(holder instanceof GUIHolder guiHolder)) return;
if(!(guiHolder.getGUI() instanceof GUIWrapper guiWrapper)) return;
if(!(holder instanceof GUIHolder)) return;
e.setCancelled(true);
GUIHolder guiHolder = (GUIHolder) holder;
if(!(guiHolder.getGUI() instanceof GUIWrapper)) return;
GUIWrapper guiWrapper = (GUIWrapper) guiHolder.getGUI();
if(e.getClickedInventory() instanceof PlayerInventory){
e.setCancelled(true);
return;
}
if(e.getClick() != ClickType.LEFT && e.getClick() != ClickType.RIGHT){
e.setCancelled(true);
return;
}
if(e.getRawSlot() >= 54 || e.getRawSlot() < 0){ //点击箱子以外界面会返回-999
e.setCancelled(true);
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 || type == GUISlotType.ITEM_SLOT){
e.setCancelled(true);
return;
}
if(type == GUISlotType.PAGE_PREV){
e.setCancelled(true);
guiWrapper.prev();
p.updateInventory();
return;
}
if(type == GUISlotType.PAGE_NEXT){
e.setCancelled(true);
guiWrapper.next();
p.updateInventory();
return;
}
if(type == GUISlotType.PAGE_JUMP){
e.setCancelled(true);
String name = ((PageJumpSlot)slot).getGuiName();
GuiManager.openGui(p,name);
return;
}
if(type == GUISlotType.DRAGON_SLOT){
e.setCancelled(true);
String unique_name = guiWrapper.getData(guiWrapper.getPage(),e.getRawSlot());
MyDragon dragon = mp.get(unique_name);
if(dragon == null){
@@ -79,8 +74,9 @@ public class InventoryListener implements Listener {
@EventHandler(priority = EventPriority.LOWEST)
public void OnInventoryDrag(InventoryDragEvent e){
InventoryHolder holder = e.getInventory().getHolder();
if(!(holder instanceof GUIHolder guiHolder)) return;
if(!(guiHolder.getGUI() instanceof GUIWrapper guiWrapper)) return;
if(!(holder instanceof GUIHolder)) return;
GUIHolder guiHolder = (GUIHolder) holder;
if(!(guiHolder.getGUI() instanceof GUIWrapper)) return;
e.setCancelled(true);
}
}
@@ -17,9 +17,10 @@ public class MMOPlayerAttackListener implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void meleeAttacks(PlayerAttackEvent e) {
if (!(e.getAttack() instanceof MeleeAttackMetadata attackMetadata)) {
if (!(e.getAttack() instanceof MeleeAttackMetadata)) {
return;
}
MeleeAttackMetadata attackMetadata = (MeleeAttackMetadata) e.getAttack();
Player player = e.getPlayer();
PlayerData playerData = PlayerData.get(player);
NBTItem nBTItem = MythicLib.plugin.getVersion().getWrapper().getNBTItem(player.getInventory().getItem(attackMetadata.getHand().toBukkit()));
@@ -3,6 +3,7 @@ package xanadu.enderdragon.listeners.mythiclib;
import io.lumine.mythic.lib.api.event.PlayerAttackEvent;
import io.lumine.mythic.lib.damage.DamageMetadata;
import io.lumine.mythic.lib.damage.DamageType;
import org.bukkit.entity.EnderDragon;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
@@ -14,7 +15,8 @@ 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 dragon)) return;
if(!(e.getEntity() instanceof org.bukkit.entity.EnderDragon)) return;
EnderDragon dragon = (EnderDragon) e.getEntity();
DamageMetadata damage = e.getDamage();
double weapon = damage.getDamage(DamageType.WEAPON) + damage.getDamage(DamageType.UNARMED);
if(weapon > 0.0d) {
@@ -349,11 +349,24 @@ public class DragonManager {
Object WorldProviderTheEnd = WorldProviderTheEndClass.cast(worldProvider);
String method_name;
switch (version) {
case "v1_12_R1" -> method_name = "t";
case "v1_13_R1", "v1_13_R2" -> method_name = "r";
case "v1_14_R1" -> method_name = "q";
case "v1_15_R1" -> method_name = "o";
default -> method_name = null;
case "v1_12_R1" : {
method_name = "t";
break;
}
case "v1_13_R1" :
case "v1_13_R2" : {
method_name = "r";
break;
}
case "v1_14_R1" : {
method_name = "q";
break;
}
case "v1_15_R1" : {
method_name = "o";
break;
}
default : method_name = null;
}
if(method_name == null) return null;
Method method = WorldProviderTheEnd.getClass().getDeclaredMethod(method_name);
@@ -26,25 +26,25 @@ public class TaskManager {
String[] str = string.split(":",2);
TaskType taskType = TaskType.getByName(str[0]);
switch (taskType){
case minute -> {
case minute : {
return new Minute(TaskType.minute,str[1]);
}
case hour -> {
case hour : {
return new Hour(TaskType.hour,str[1]);
}
case day -> {
case day : {
return new Day(TaskType.day,str[1]);
}
case week -> {
case week : {
return new Week(TaskType.week,str[1]);
}
case month -> {
case month : {
return new Month(TaskType.month,str[1]);
}
case year -> {
case year : {
return new Year(TaskType.year,str[1]);
}
default -> {
default : {
return null;
}
}
@@ -18,14 +18,36 @@ public abstract class Task {
protected Task(TaskType type,String str){
this.type = type;
switch (type){
case minute, hour -> this.period = Integer.parseInt(str);
case day -> this.period = Integer.parseInt(str.split(",")[0]);
case week, month, year -> this.day = Integer.parseInt(str.split(",")[0]);
case minute :
case hour : {
this.period = Integer.parseInt(str);
break;
}
case day : {
this.period = Integer.parseInt(str.split(",")[0]);
break;
}
case week :
case month :
case year : {
this.day = Integer.parseInt(str.split(",")[0]);
break;
}
}
if(data.getString(path) == null){
switch (type){
case minute, hour -> this.nextTime = this.getNextTime(LocalDateTime.now());
case day, week, month, year -> calcNextTime(str);
case minute :
case hour : {
this.nextTime = this.getNextTime(LocalDateTime.now());
break;
}
case day :
case week :
case month :
case year : {
calcNextTime(str);
break;
}
}
saveFile(nextTime);
}