Skip to content

Commit

Permalink
Merge pull request #11 from iXanadu13/v2.4.0
Browse files Browse the repository at this point in the history
V2.4.0
  • Loading branch information
iXanadu13 authored Dec 30, 2023
2 parents 74f61b6 + 35ec0e6 commit 392e189
Show file tree
Hide file tree
Showing 31 changed files with 494 additions and 225 deletions.
1 change: 1 addition & 0 deletions src/main/java/pers/xanadu/enderdragon/EnderDragon.java
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@ public static void closeAllInventory() {
catch (Exception ignored) {}
}
}

private void fixWorldBossBar(){
new BukkitRunnable(){
@Override
Expand Down
75 changes: 2 additions & 73 deletions src/main/java/pers/xanadu/enderdragon/command/MainCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import pers.xanadu.enderdragon.reward.Chance;
import pers.xanadu.enderdragon.config.FileUpdater;
import pers.xanadu.enderdragon.task.DragonRespawnTimer;
import pers.xanadu.enderdragon.util.MyDragon;
import pers.xanadu.enderdragon.metadata.MyDragon;
import org.jetbrains.annotations.NotNull;

import java.io.IOException;
Expand Down Expand Up @@ -248,7 +248,7 @@ else if(args.length == 3 && args[1].equalsIgnoreCase("start")){
}
if(args.length == 3){
String key = args[2];
MyDragon dragon = DragonManager.mp.get(key);
MyDragon dragon = DragonManager.get_dragon_config(key);
if(dragon == null){
Lang.sendFeedback(sender, Lang.dragon_not_found);
return false;
Expand Down Expand Up @@ -349,74 +349,3 @@ private static void sendCommandTips(CommandSender sender){
}


// long st=System.currentTimeMillis(),ed;
// for(int i=0;i<1;i++) {
// try {
// ItemStack item = p.getItemInHand();
// Class<?> CraftItemStackClass = Class.forName("org.bukkit.craftbukkit.v1_13_R1.inventory.CraftItemStack");
// Object ci = CraftItemStackClass.cast(item);
// Method asNMSCopy = CraftItemStackClass.getDeclaredMethod("asNMSCopy", ItemStack.class);
// Object ei = asNMSCopy.invoke(ci, item);
// Class<?> NBTTagCompoundClass = Class.forName("net.minecraft.server.v1_13_R1.NBTTagCompound");
// Method save = ei.getClass().getDeclaredMethod("save", NBTTagCompoundClass);
// Object cpd = save.invoke(ei, NBTTagCompoundClass.newInstance());
// String str = cpd.toString();
// p.sendMessage(cpd.toString());
// } catch (ReflectiveOperationException e) {
// e.printStackTrace();
// }
// }
// ed=System.currentTimeMillis();
// Bukkit.broadcastMessage("test #1: "+(ed-st)+"ms");
// st=System.currentTimeMillis();
// for(int i=0;i<1e5;i++) {
// ItemStack item = p.getItemInHand();
// net.minecraft.server.v1_13_R1.ItemStack ni = CraftItemStack.asNMSCopy(item);
// NBTTagCompound cpd = ni.save(new NBTTagCompound());
// String str = cpd.toString();
// }
// ed=System.currentTimeMillis();
// Bukkit.broadcastMessage("test #2: "+(ed-st)+"ms");
//
// try {
// CraftItemStackClass=Class.forName("org.bukkit.craftbukkit.v1_13_R1.inventory.CraftItemStack");
// asNMSCopy = CraftItemStackClass.getDeclaredMethod("asNMSCopy", ItemStack.class);
// NBTTagCompoundClass = Class.forName("net.minecraft.server.v1_13_R1.NBTTagCompound");
// ItemStackClass_e = Class.forName("net.minecraft.server.v1_13_R1.ItemStack");
// save = ItemStackClass_e.getDeclaredMethod("save", NBTTagCompoundClass);
// } catch (ReflectiveOperationException e) {
// e.printStackTrace();
// }
// for(int i=0;i<1e5;i++) {
// try {
// ItemStack item = p.getItemInHand();
// Object ci = CraftItemStackClass.cast(item);
// Object ei = asNMSCopy.invoke(ci, item);
// Object cpd = save.invoke(ei, NBTTagCompoundClass.newInstance());
// String str = cpd.toString();
// //p.sendMessage(cpd.toString());
// } catch (ReflectiveOperationException e) {
// e.printStackTrace();
// }
// }
// ed=System.currentTimeMillis();
// Bukkit.broadcastMessage("test #3: "+(ed-st)+"ms");


// st=System.currentTimeMillis();
//
// for(int i=0;i<1;i++) {
// ItemStack item = p.getItemInHand();
// String str = new NbtItemStack(item).getOrCreateTag().toString();
// //Bukkit.broadcastMessage(str);
// p.sendMessage(str);
// }
// ed=System.currentTimeMillis();
// Bukkit.broadcastMessage("test #3: "+(ed-st)+"ms");

// net.minecraft.server.v1_16_R3.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
// NBTTagCompound cpd = nmsItem.save(new NBTTagCompound());

// net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
// NBTTagCompound cpd = nmsItem.b(new NBTTagCompound());
// p.sendMessage(cpd.toString());
128 changes: 96 additions & 32 deletions src/main/java/pers/xanadu/enderdragon/config/FileUpdater.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,40 +9,104 @@

public class FileUpdater {
public static void update() throws IOException {

FileConfiguration config_old = plugin.getConfig();
if("2.2.0".equals(config_old.getString("version"))){
Config.saveResource("config.yml","new/config.yml",true);
File config_new_F = new File(plugin.getDataFolder(),"new/config.yml");
FileConfiguration config_new = YamlConfiguration.loadConfiguration(config_new_F);
config_new.set("lang",config_old.getString("lang"));
config_new.set("damage_visible_mode",config_old.getString("damage_visible_mode"));
config_new.set("damage_statistics.limit",config_old.getInt("damage_statistics.limit"));
String judge_mode = config_old.getString("special_dragon_jude_mode");
if("edge".equals(judge_mode)) judge_mode = "weight";//"edge" is deprecated
config_new.set("special_dragon_jude_mode",judge_mode);
config_new.set("dragon_setting_file",config_old.getStringList("dragon_setting_file"));
// auto_respawn
config_new.set("auto_respawn",config_old.getConfigurationSection("auto_respawn"));

config_new.set("respawn_cd.enable",config_old.getBoolean("respawn_cd.enable"));
config_new.set("crystal_invulnerable",config_old.getBoolean("crystal_invulnerable"));
config_new.set("resist_player_respawn",config_old.getBoolean("resist_player_respawn"));
config_new.set("resist_dragon_breath_gather",config_old.getBoolean("resist_dragon_breath_gather"));
config_new.set("main_gui",config_old.getString("main_gui"));
config_new.set("blacklist_worlds",config_old.getStringList("blacklist_worlds"));
config_new.set("item_format.reward",config_old.getString("item_format.reward"));
config_new.set("hook_plugins.MythicLib",config_old.getBoolean("hook_plugins.MythicLib"));
config_new.set("expansion.groovy",config_old.getBoolean("expansion.groovy"));
config_new.set("debug",config_old.getBoolean("debug"));
config_new.set("advanced_setting.world_env_fix",config_old.getBoolean("advanced_setting.world_env_fix"));
config_new.set("advanced_setting.save_respawn_status",config_old.getBoolean("advanced_setting.save_respawn_status"));
config_new.set("save_bossbar",config_old.getBoolean("save_bossbar"));
config_new.set("backslash_split.reward",config_old.getBoolean("backslash_split.reward"));
config_new.save(config_new_F);
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_<rank>% -> 在屠龙中取得此排名的玩家\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_<rank>% -> 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);
}
}
}
}
else Lang.error("The version of config.yml is not supported!");

Lang.info("New config files are generated in plugins/EnderDragon/new.");
Lang.warn("Attention: Please confirm the accuracy before using new config!");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
import org.bukkit.event.HandlerList;
import org.bukkit.event.entity.CreatureSpawnEvent;
import pers.xanadu.enderdragon.manager.DragonManager;
import pers.xanadu.enderdragon.util.MyDragon;
import pers.xanadu.enderdragon.metadata.DragonInfo;

/**
* Called when a dragon is spawned, filtered through blacklist.
* <p>
Expand All @@ -16,11 +17,11 @@ public final class DragonRespawnPostEvent extends CreatureSpawnEvent {
private static final HandlerList handlers = new HandlerList();
private boolean cancel = false;
private final World world;
private final MyDragon myDragon;
public DragonRespawnPostEvent(final EnderDragon dragon, final SpawnReason reason, final MyDragon myDragon) {
private final DragonInfo info;
public DragonRespawnPostEvent(final EnderDragon dragon, final SpawnReason reason, final DragonInfo dragonInfo) {
super(dragon,reason);
world = dragon.getWorld();
this.myDragon = myDragon;
this.info = dragonInfo;
}

public EnderDragon getEnderDragon(){
Expand All @@ -30,11 +31,8 @@ public EnderDragon getEnderDragon(){
public Location getEndPortalLocation(){
return DragonManager.getEndPortalLocation(world);
}
public MyDragon getDragonConfiguration(){
return myDragon;
}
public String getDragonUniqueId(){
return myDragon.unique_name;
public DragonInfo getDragonInformation(){
return info;
}
public static HandlerList getHandlerList() {
return handlers;
Expand Down
11 changes: 6 additions & 5 deletions src/main/java/pers/xanadu/enderdragon/gui/GUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@
import pers.xanadu.enderdragon.manager.ItemManager;
import pers.xanadu.enderdragon.gui.slot.EmptySlot;
import pers.xanadu.enderdragon.gui.slot.ItemSlot;
import pers.xanadu.enderdragon.manager.RewardManager;
import pers.xanadu.enderdragon.reward.Reward;
import pers.xanadu.enderdragon.util.MyDragon;
import pers.xanadu.enderdragon.metadata.MyDragon;

import java.util.ArrayList;
import java.util.HashSet;
Expand Down Expand Up @@ -117,17 +118,17 @@ public void resetPagedItem(int type, String key,boolean cmd){
resetPagedItem(key,cmd);
}
else if(type == 2){
for(MyDragon myDragon : DragonManager.dragons){
for(MyDragon myDragon : DragonManager.get_dragons()){
this.addDragon(myDragon.icon.clone(),myDragon.unique_name);
}
}

}
public void resetPagedItem(String key,boolean cmd){
this.pagedItems.clear();
MyDragon dragon = DragonManager.mp.get(key);
if(dragon == null) return;
for(Reward reward : dragon.datum){
List<Reward> rewards = RewardManager.getRewards(key);
if(rewards == null) return;
for(Reward reward : rewards){
if(Config.debug) Bukkit.getLogger().info(reward.toString());
//if(ItemManager.isEmpty(reward.getItem())) continue;
ItemStack item = reward.getItem().clone();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import org.bukkit.potion.PotionEffect;
import pers.xanadu.enderdragon.manager.DragonManager;
import pers.xanadu.enderdragon.util.ExtraPotionEffect;
import pers.xanadu.enderdragon.util.MyDragon;
import pers.xanadu.enderdragon.metadata.MyDragon;

public class DragonAttackListener implements Listener {
@EventHandler(priority = EventPriority.LOW)
Expand All @@ -19,7 +19,7 @@ public void OnDragonAttack(final EntityDamageByEntityEvent e){
EnderDragon dragon = (EnderDragon) attack;
String unique_name = DragonManager.getSpecialKey(dragon);
if(unique_name == null) return;
MyDragon myDragon = DragonManager.mp.get(unique_name);
MyDragon myDragon = DragonManager.get_dragon_config(unique_name);
if(myDragon == null) return;
e.setDamage(Math.max(0.1, e.getDamage() + myDragon.attack_damage_modify));
if(victim instanceof Player){
Expand Down
Loading

0 comments on commit 392e189

Please sign in to comment.