small update

This commit is contained in:
Xanadu13
2024-03-17 20:48:13 +08:00
parent ba3a2fcc53
commit 81e3e1d878
6 changed files with 61 additions and 9 deletions
@@ -6,6 +6,7 @@ import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.*;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
@@ -21,6 +22,7 @@ public class Config {
public static boolean advanced_setting_save_respawn_status;
public static boolean advanced_setting_save_bossbar;
public static boolean advanced_setting_glowing_fix;
//public static boolean advanced_setting_can_spawn_not_the_end;
public static boolean advanced_setting_backslash_split_reward;
public static String damage_visible_mode;
public static int damage_statistics_limit;
@@ -98,10 +100,7 @@ public class Config {
}
} catch (IOException ignored) {}
}
public static void copyFile(String source, String dest,boolean replace) {
if (source == null || source.equals("")) return;
source = source.replace('\\', '/');
File inFile = new File("plugins/EnderDragon", source);
public static void copyFile(File source, String dest, boolean replace) {
File outFile = new File("plugins/EnderDragon", dest);
int lastIndex = dest.lastIndexOf('/');
File outDir = new File("plugins/EnderDragon", dest.substring(0, Math.max(lastIndex, 0)));
@@ -110,8 +109,8 @@ public class Config {
}
try {
if (!outFile.exists() || replace) {
InputStream in = new FileInputStream(inFile);
OutputStream out = new FileOutputStream(outFile);
InputStream in = Files.newInputStream(source.toPath());
OutputStream out = Files.newOutputStream(outFile.toPath());
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
@@ -121,9 +120,15 @@ public class Config {
in.close();
}
} catch (IOException ignored) {
Lang.error("Failed to copy file: "+inFile.getPath()+" -> "+outFile.getPath());
Lang.error("Failed to copy file: "+source.getPath()+" -> "+outFile.getPath());
}
}
public static void copyFile(String source, String dest,boolean replace) {
if (source == null || source.equals("")) return;
source = source.replace('\\', '/');
File inFile = new File("plugins/EnderDragon", source);
copyFile(inFile, dest, replace);
}
public static void saveDirectoryResource(String srcDirectory,boolean replace) {
String destDirectory = new File(plugin.getDataFolder(),srcDirectory).getPath();
try {
@@ -27,6 +27,7 @@ import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ThreadLocalRandom;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -37,6 +38,8 @@ public class DragonManager {
static final ArrayList<MyDragon> dragons = new ArrayList<>();
static final Map<String, MyDragon> mp = new HashMap<>();
public static List<String> dragon_names = new ArrayList<>();
public static final Map<UUID,DragonInfo> existing_dragon = new ConcurrentHashMap<>();
public static final Map<String,DragonInfo> main_dragon = new ConcurrentHashMap<>();
private static int sum = 0;
private static final int[][] nxt = {{3,0},{0,3},{-3,0},{0,-3}};
private static final int[][] nxt_2 = {{2,0},{0,2},{-2,0},{0,-2}};
@@ -485,6 +488,39 @@ public class DragonManager {
return false;
}
}
/**
* Only used to initialize. DON'T use this if speed is essential.
* @param world world
* @return The dragon found in this world.
*/
public static EnderDragon getEnderDragon(final World world){
if(world.getEnvironment() != World.Environment.THE_END){
return world.getEntitiesByClass(EnderDragon.class).iterator().next();
}
if(Version.mcMainVersion >= 16){
DragonBattle battle = world.getEnderDragonBattle();
assert battle != null;
return battle.getEnderDragon();
}
try {
Object battle = getEnderDragonBattle(world);
assert battle != null;
Field k = EnderDragonBattleClass.getDeclaredField("k");
k.setAccessible(true);
Object dragonKilled = k.get(battle);
if((boolean) dragonKilled) return null;
Field m = EnderDragonBattleClass.getDeclaredField("m");
m.setAccessible(true);
Object uuid = m.get(battle);
// Field d = EnderDragonBattleClass.getDeclaredField("d");
// d.setAccessible(true);
// Object worldServer = d.get(battle);
return (EnderDragon) Bukkit.getEntity((UUID) uuid);
} catch (ReflectiveOperationException e) {
return null;
}
}
public static Location getEndPortalLocation(final World world){
if(world == null) return null;
if(world.getEnvironment() != World.Environment.THE_END) return null;
@@ -1,8 +1,15 @@
package pers.xanadu.enderdragon.metadata;
import org.bukkit.entity.EnderDragon;
public class DragonInfo {
private final EnderDragon handle;
public String unique_name;
public DragonInfo(String unique_name){
public DragonInfo(final EnderDragon dragon, String unique_name){
this.handle = dragon;
this.unique_name = unique_name;
}
public EnderDragon getHandle(){
return handle;
}
}
+2
View File
@@ -97,5 +97,7 @@ advanced_setting:
world_env_fix: false
save_respawn_status: false
save_bossbar: false
# to do: 允许在非末地环境使用/ed spawn或respawn复活末影龙
# can_spawn_not_the_end: false
backslash_split:
reward: false
+2
View File
@@ -96,5 +96,7 @@ advanced_setting:
world_env_fix: false
save_respawn_status: false
save_bossbar: false
# to-do
# can_spawn_not_the_end: false
backslash_split:
reward: false
+1 -1
View File
@@ -1,5 +1,5 @@
name: EnderDragon
version: 2.5.0-dev
version: 2.5.0
main: pers.xanadu.enderdragon.EnderDragon
author: Xanadu13
api-version: 1.13