From 6565b8dcdf62b5c54df619bff4b548d1761117f0 Mon Sep 17 00:00:00 2001 From: Xanadu13 <104714710+iXanadu13@users.noreply.github.com> Date: Fri, 25 Aug 2023 21:49:41 +0800 Subject: [PATCH] Delete src/main/java/pers/xanadu/enderdragon/util directory --- .../pers/xanadu/enderdragon/util/AExpJ.java | 63 --- .../xanadu/enderdragon/util/AliasSample.java | 42 -- .../xanadu/enderdragon/util/ColorUtil.java | 63 --- .../xanadu/enderdragon/util/MathUtil.java | 101 ---- .../xanadu/enderdragon/util/MyDragon.java | 60 --- .../xanadu/enderdragon/util/MyUpdater.java | 40 -- .../pers/xanadu/enderdragon/util/NMSUtil.java | 444 ------------------ .../pers/xanadu/enderdragon/util/Pair.java | 11 - .../pers/xanadu/enderdragon/util/Version.java | 83 ---- 9 files changed, 907 deletions(-) delete mode 100644 src/main/java/pers/xanadu/enderdragon/util/AExpJ.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/util/AliasSample.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/util/ColorUtil.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/util/MathUtil.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/util/MyDragon.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/util/MyUpdater.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/util/Pair.java delete mode 100644 src/main/java/pers/xanadu/enderdragon/util/Version.java diff --git a/src/main/java/pers/xanadu/enderdragon/util/AExpJ.java b/src/main/java/pers/xanadu/enderdragon/util/AExpJ.java deleted file mode 100644 index b84b3f4..0000000 --- a/src/main/java/pers/xanadu/enderdragon/util/AExpJ.java +++ /dev/null @@ -1,63 +0,0 @@ -package pers.xanadu.enderdragon.util; - -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ThreadLocalRandom; - -public final class AExpJ { - public static List sample(ConcurrentHashMap mp,int m){ - List> list = new ArrayList<>(); - mp.forEach((k,v)->list.add(new Pair<>(k,v))); - return sample(list,m); - } - public static List sample(List> samples, int m) { - PriorityQueue> heap = new PriorityQueue<>(Comparator.comparingDouble(p -> p.second)); - double Xw = 0.0; - double Tw = 0.0; - double w_acc = 0.0; - for (Pair sample : samples) { - if (heap.size() < m) { - double wi = sample.second; - double ui = ThreadLocalRandom.current().nextDouble(); - double ki = Math.pow(ui, 1 / wi); - heap.offer(new Pair<>(sample.first, ki)); - continue; - } - if (w_acc == 0) { - if (heap.isEmpty()) break; - Tw = heap.peek().second; - double r = ThreadLocalRandom.current().nextDouble(); - Xw = Math.log(r) / Math.log(Tw); - } - double wi = sample.second; - if (w_acc + wi < Xw) { - w_acc += wi; - continue; - } - else w_acc = 0; - double tw = Math.pow(Tw, wi); - double r2 = ThreadLocalRandom.current().nextDouble() * (1 - tw) + tw; - double ki = Math.pow(r2, 1 / wi); - heap.poll(); - heap.offer(new Pair<>(sample.first, ki)); - } - List res = new ArrayList<>(); - for (Pair pair : heap) { - res.add(pair.first); - } - return res; - } - -// public static void main(String[] args) { -// List> samples = new ArrayList<>(); -// samples.add(new Pair<>("item1", 0.8)); -// samples.add(new Pair<>("item2", 0.4)); -// samples.add(new Pair<>("item3", 0.2)); -// Map mp = new HashMap<>(); -// for(int i=0;i<1e5;i++){ -// List result = sample(samples, 1); -// mp.compute(result.get(0), (k, v)->v==null?1:v+1); -// } -// System.out.println(mp); -// } -} diff --git a/src/main/java/pers/xanadu/enderdragon/util/AliasSample.java b/src/main/java/pers/xanadu/enderdragon/util/AliasSample.java deleted file mode 100644 index 6a8a4f4..0000000 --- a/src/main/java/pers/xanadu/enderdragon/util/AliasSample.java +++ /dev/null @@ -1,42 +0,0 @@ -package pers.xanadu.enderdragon.util; - -import java.util.*; -import java.util.concurrent.ThreadLocalRandom; - -public final class AliasSample { - private final int[] alias; - private final double[] probability; - public AliasSample(List probabilities) { - if (probabilities == null) throw new NullPointerException(); - if (probabilities.size() == 0) - throw new IllegalArgumentException("Probability vector can't be empty."); - this.probability = new double[probabilities.size()]; - this.alias = new int[probabilities.size()]; - final double average = 1.0 / probabilities.size(); - probabilities = new ArrayList<>(probabilities);//make a copy of list, avoid modifying the param - Deque small = new ArrayDeque<>(); - Deque large = new ArrayDeque<>(); - for (int i = 0; i < probabilities.size(); ++i) { - if (probabilities.get(i) >= average) large.add(i); - else small.add(i); - } - while (!small.isEmpty() && !large.isEmpty()) { - int less = small.removeLast(); - int more = large.removeLast(); - probability[less] = probabilities.get(less) * probabilities.size(); - alias[less] = more; - probabilities.set(more, (probabilities.get(more) + probabilities.get(less)) - average); - if (probabilities.get(more) >= 1.0 / probabilities.size()) large.add(more); - else small.add(more); - } - while (!small.isEmpty()) probability[small.removeLast()] = 1.0; - while (!large.isEmpty()) probability[large.removeLast()] = 1.0; - } - - public int next() { - int column = ThreadLocalRandom.current().nextInt(probability.length); - boolean coinToss = ThreadLocalRandom.current().nextDouble() < probability[column]; - return coinToss ? column : alias[column]; - } - -} diff --git a/src/main/java/pers/xanadu/enderdragon/util/ColorUtil.java b/src/main/java/pers/xanadu/enderdragon/util/ColorUtil.java deleted file mode 100644 index b26b3f2..0000000 --- a/src/main/java/pers/xanadu/enderdragon/util/ColorUtil.java +++ /dev/null @@ -1,63 +0,0 @@ -package pers.xanadu.enderdragon.util; - -import net.md_5.bungee.api.ChatColor; - -import java.awt.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import static pers.xanadu.enderdragon.util.Version.mcMainVersion; - -public class ColorUtil { - - public static Pattern hex_code = Pattern.compile("&#([0-9A-Fa-f]{6})"); - public static Pattern gradient = Pattern.compile("&\\[#([0-9a-fA-F]{6})-#([0-9a-fA-F]{6})(.+)]"); - public static String translateHexCodes (String str) { - if(mcMainVersion < 16) return str; - Matcher matcher = hex_code.matcher(str); - StringBuffer buffer = new StringBuffer(); - while(matcher.find()) { - matcher.appendReplacement(buffer, ChatColor.of("#" + matcher.group(1)).toString()); - } - return ChatColor.translateAlternateColorCodes('&', matcher.appendTail(buffer).toString()); - } - public static String transGradient(String str) { - if(mcMainVersion < 16) return str; - if (str.contains("&[#")&&str.contains("]")) { - Matcher matcher = gradient.matcher(str); - StringBuffer buffer = new StringBuffer(); - while (matcher.find()) { - String text = matcher.group(3); - int[] colors = gradient(matcher.group(1),matcher.group(2),text.length()); - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < text.length(); i++) { - Color c = new Color(colors[i]); - builder.append(ChatColor.of(c)).append(text.charAt(i)); - } - matcher.appendReplacement(buffer, builder.toString()); - } - matcher.appendTail(buffer); - return buffer.toString(); - } - return translateHexCodes(str); - } - private static int[] gradient(String start,String end,int length){ - int[] color = new int[length]; - int[] rgb1 = MathUtil.hexToInt(start); - int[] rgb2 = MathUtil.hexToInt(end); - if(length==0){return color;} - if(length==1){ - for(int j=0;j<3;j++){ - color[0] = color[0]*256+rgb1[j]; - } - return color; - } - for(int i=0;i0){ - duration.append(days).append("d"); - f = true; - } - if(f||hours>0){ - duration.append(hours).append("h"); - f = true; - } - if(f||minutes>0){ - duration.append(minutes).append("m"); - } - duration.append(remainingSeconds).append("s"); - return duration.toString(); - } - public static int[] getDate(int seconds){ - if (seconds < 0) throw new IllegalArgumentException("Duration must be a positive number."); - int days = seconds / (24 * 3600); - int hours = (seconds % (24 * 3600)) / 3600; - int minutes = ((seconds % (24 * 3600)) % 3600) / 60; - int remainingSeconds = ((seconds % (24 * 3600)) % 3600) % 60; - return new int[]{days,hours,minutes,remainingSeconds}; - } - @Deprecated - public static K getByWeight(ConcurrentHashMap mp){ - double sum = mp.values().stream().mapToDouble(Double::doubleValue).sum(); - double rand = ThreadLocalRandom.current().nextDouble(sum); - final AtomicReference cur = new AtomicReference<>(0d); - final AtomicReference res = new AtomicReference<>(); - mp.forEach((k,v)->{ - Double value = cur.get(); - if(value<=rand && value+v>rand) { - res.set(k); - return; - } - cur.updateAndGet(v1 -> v1 + v); - }); - return res.get(); - } -} diff --git a/src/main/java/pers/xanadu/enderdragon/util/MyDragon.java b/src/main/java/pers/xanadu/enderdragon/util/MyDragon.java deleted file mode 100644 index d17cd2e..0000000 --- a/src/main/java/pers/xanadu/enderdragon/util/MyDragon.java +++ /dev/null @@ -1,60 +0,0 @@ -package pers.xanadu.enderdragon.util; - -import org.bukkit.inventory.ItemStack; -import org.bukkit.potion.PotionEffect; -import pers.xanadu.enderdragon.reward.Reward; -import pers.xanadu.enderdragon.reward.RewardDist; - -import java.util.ArrayList; -import java.util.List; - -public class MyDragon implements Comparable{ - public ItemStack icon; - public String unique_name; - public String display_name; - public String drop_gui; - public int edge; - public int priority; - public double spawn_chance; - public int max_health; - public int spawn_health; - public int exp_drop; - public int dragon_egg_spawn_delay; - public int dragon_egg_spawn_x; - public int dragon_egg_spawn_y; - public int dragon_egg_spawn_z; - public double dragon_egg_spawn_chance; - public double attack_damage_modify; - //public double move_speed_modify; - public double armor_modify; - public double armor_toughness_modify; - public double crystal_heal_speed; - public boolean suck_blood_enable; - public double suck_blood_rate; - public double suck_blood_base_amount; - public boolean suck_blood_only_player; - public List attack_potion_effect; - public List spawn_cmd; - public List death_cmd; - public List spawn_broadcast_msg; - public List death_broadcast_msg; - public List msg_to_killer; - public String glow_color; - public String bossbar_color; - public String bossbar_style; - public double effect_cloud_original_radius; - public double effect_cloud_expand_speed; - public int effect_cloud_duration; - public int effect_cloud_color_R; - public int effect_cloud_color_G; - public int effect_cloud_color_B; - public List effect_cloud_potion; - public List datum = new ArrayList<>(); - public RewardDist reward_dist; - - @Override - public int compareTo(MyDragon o) { - return o.priority - this.priority;//降序 - } - -} diff --git a/src/main/java/pers/xanadu/enderdragon/util/MyUpdater.java b/src/main/java/pers/xanadu/enderdragon/util/MyUpdater.java deleted file mode 100644 index addd1e0..0000000 --- a/src/main/java/pers/xanadu/enderdragon/util/MyUpdater.java +++ /dev/null @@ -1,40 +0,0 @@ -package pers.xanadu.enderdragon.util; - -import org.bukkit.scheduler.BukkitRunnable; -import pers.xanadu.enderdragon.EnderDragon; -import pers.xanadu.enderdragon.config.Lang; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URL; -import java.net.URLConnection; - -public class MyUpdater { - public static void checkUpdate(){ - Lang.info(Lang.plugin_checking_update); - new BukkitRunnable(){ - @Override - public void run(){ - try { - URLConnection conn = new URL("https://api.github.com/repos/iXanadu13/EnderDragon/releases/latest").openConnection(); - conn.setConnectTimeout(20000); - conn.setReadTimeout(60000); - InputStream is = conn.getInputStream(); - String line = new BufferedReader(new InputStreamReader(is)).readLine(); - is.close(); - String newVer = line.substring(line.indexOf("\"tag_name\"") + 13, line.indexOf("\"target_commitish\"") - 2); - String localVer = EnderDragon.plugin.getDescription().getVersion(); - if (!localVer.equals(newVer)) { - Lang.warn(Lang.plugin_out_of_date.replace("{0}",localVer).replace("{1}",newVer)); - } - else{ - Lang.info(Lang.plugin_up_to_date.replace("{1}",newVer)); - } - } catch (Exception e) { - Lang.warn(Lang.plugin_check_update_fail); - } - } - }.runTaskAsynchronously(EnderDragon.plugin); - } -} diff --git a/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java b/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java deleted file mode 100644 index f83fe5b..0000000 --- a/src/main/java/pers/xanadu/enderdragon/util/NMSUtil.java +++ /dev/null @@ -1,444 +0,0 @@ -package pers.xanadu.enderdragon.util; - -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.World; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.persistence.PersistentDataContainer; -import pers.xanadu.enderdragon.EnderDragon; -import pers.xanadu.enderdragon.config.Lang; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.Map; - -import static pers.xanadu.enderdragon.EnderDragon.getInstance; - -public class NMSUtil { - private String getEDB_base; - private Method getNMSWord; - private Method asNMSCopy; - private Method copyNMSStack; - private Method asBukkitCopy; - private Method asCraftMirror; - private Method asCraftCopy; - private Method NMSItemStack_save; - private Method NMSItemStack_setTag; - private Method cpdToEi; - private Method stringToCPD; - private Method stringToNBTBase; - private Method serializeNBTBase; - private Method deserializeObject; - private Method PDCtoCPD; - private Method PersistentDataContainer_putAll; - private Method NBTTagCompound_set; - - private Field unhandledTags; - private Field internalTag; - private Field MOJANGSON_PARSER; - private Field world_c_environment; - private Field NBTTagCompound_map; - private Class WorldClass; - private Class CraftWorldClass; - private Class WorldProviderClass; - private Class WorldProviderTheEndClass; - private Class CraftItemStackClass; - private Class CraftMetaItemClass; - private Class NMSItemStackClass; - private Class CraftEntityClass; - private Class NBTTagCompoundClass; - private Class NBTBaseClass; - private Class MojangsonParserClass; - private Class CraftNBTTagConfigSerializerClass; - private Class CraftPersistentDataContainerClass; - - public void init(){ - String version = Version.getVersion(); - try{ - this.CraftWorldClass = Class.forName("org.bukkit.craftbukkit." + version + ".CraftWorld"); - this.WorldClass = CraftWorldClass.getDeclaredMethod("getHandle").getReturnType().getSuperclass(); - this.world_c_environment = CraftWorldClass.getDeclaredField("environment"); - this.world_c_environment.setAccessible(true); - if(Version.mcMainVersion>=12 && Version.mcMainVersion<16){ - this.WorldProviderClass = Class.forName("net.minecraft.server."+version+".WorldProvider"); - this.WorldProviderTheEndClass = Class.forName("net.minecraft.server."+version+".WorldProviderTheEnd"); - } - this.CraftItemStackClass = Class.forName("org.bukkit.craftbukkit." + version + ".inventory.CraftItemStack"); - this.CraftMetaItemClass = Class.forName("org.bukkit.craftbukkit." + version + ".inventory.CraftMetaItem"); - this.unhandledTags = CraftMetaItemClass.getDeclaredField("unhandledTags"); - unhandledTags.setAccessible(true); - this.internalTag = CraftMetaItemClass.getDeclaredField("internalTag"); - internalTag.setAccessible(true); - this.NMSItemStackClass = CraftItemStackClass.getDeclaredField("handle").getType(); - this.CraftEntityClass = Class.forName("org.bukkit.craftbukkit."+version+".entity.CraftEntity"); - init_NBTTagCompoundClass(); - init_NBTBaseClass(); - init_NBTTagCompound_map(); - this.NBTTagCompound_set = NBTTagCompoundClass.getMethod(getMethodName(ReflectiveMethod.NBTTagCompound_set),String.class,NBTBaseClass); - this.asNMSCopy = CraftItemStackClass.getMethod("asNMSCopy",ItemStack.class); - this.copyNMSStack = CraftItemStackClass.getMethod("copyNMSStack",NMSItemStackClass,int.class); - this.asBukkitCopy = CraftItemStackClass.getMethod("asBukkitCopy",NMSItemStackClass); - this.asCraftMirror = CraftItemStackClass.getMethod("asCraftMirror",NMSItemStackClass); - this.asCraftCopy = CraftItemStackClass.getMethod("asCraftCopy",ItemStack.class); - this.NMSItemStack_save = NMSItemStackClass.getMethod(getMethodName(ReflectiveMethod.NMSItemStack_save),NBTTagCompoundClass); - this.NMSItemStack_setTag = NMSItemStackClass.getMethod(getMethodName(ReflectiveMethod.NMSItemStack_setTag),NBTTagCompoundClass); - if(Version.mcMainVersion>=13) this.cpdToEi = NMSItemStackClass.getMethod("a",NBTTagCompoundClass); - - if(Version.mcMainVersion<=16) this.MojangsonParserClass = Class.forName("net.minecraft.server."+version+".MojangsonParser"); - else this.MojangsonParserClass = Class.forName("net.minecraft.nbt.MojangsonParser"); - this.stringToCPD = MojangsonParserClass.getMethod(getMethodName(ReflectiveMethod.MojangsonParser_parse),String.class); - this.stringToNBTBase = MojangsonParserClass.getDeclaredMethod(getMethodName(ReflectiveMethod.MojangsonParser_parseLiteral),String.class); - stringToNBTBase.setAccessible(true); - - if(Version.mcMainVersion>13 || "v1_13_R2".equals(Version.getVersion())){ - this.CraftNBTTagConfigSerializerClass = Class.forName("org.bukkit.craftbukkit." + version + ".util.CraftNBTTagConfigSerializer"); - this.serializeNBTBase = CraftNBTTagConfigSerializerClass.getMethods()[0]; - this.deserializeObject = CraftNBTTagConfigSerializerClass.getMethod("deserialize",Object.class); - this.MOJANGSON_PARSER = CraftNBTTagConfigSerializerClass.getDeclaredField("MOJANGSON_PARSER"); - MOJANGSON_PARSER.setAccessible(true); - } - if(Version.mcMainVersion>=14){ - this.CraftPersistentDataContainerClass = Class.forName("org.bukkit.craftbukkit." + version + ".persistence.CraftPersistentDataContainer"); - this.PDCtoCPD = CraftPersistentDataContainerClass.getDeclaredMethod("toTagCompound"); - this.PersistentDataContainer_putAll = CraftPersistentDataContainerClass.getDeclaredMethod("putAll",NBTTagCompoundClass); - } - - - - }catch(ReflectiveOperationException e){ - e.printStackTrace(); - } - switch (version) { - case "v1_12_R1" : { - getEDB_base = "t"; - break; - } - case "v1_13_R1" : - case "v1_13_R2" : { - getEDB_base = "r"; - break; - } - case "v1_14_R1" : { - getEDB_base = "q"; - break; - } - case "v1_15_R1" : { - getEDB_base = "o"; - break; - } - default : getEDB_base = null; - } - } -// public Object getMetaCPD(ItemMeta meta){ -// try{ -// Object craft_meta = CraftMetaItemClass.cast(meta); -// Object internalTag = this.internalTag.get(craft_meta); -// return internalTag; -// }catch (ReflectiveOperationException e){ -// e.printStackTrace(); -// return null; -// } -// } - - /** - * 只保留物品type和amount - * nbt深合并需要遍历每一层 - */ - @Deprecated - public ItemStack mergeItemCPD(ItemStack item,Object cpd){ - Map self = cpdToMap(getCPD(item)); - Map rhs = cpdToMap(cpd); - self.putAll(rhs); - Object new_cpd = getNBTTagCompound(self); - return EnderDragon.getInstance().getNMSItemManager().cpdToItem(new_cpd); - } - public Map cpdToMap(Object cpd){ - try{ - return (Map) NBTTagCompound_map.get(cpd); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } - public Object getNBTTagCompound(Map mp){ - try{ - Object cpd = NBTTagCompoundClass.newInstance(); - mp.forEach((key,value)->{ - Object res; - if(value instanceof Map){ - res = getNBTTagCompound((Map) value); - } - else res = value; - try{ - NBTTagCompound_set.invoke(cpd,key,res); - }catch (ReflectiveOperationException e){ - throw new RuntimeException("Reflective error!"); - } - }); - return cpd; - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } - public Object StringParseLiteral(String str){ - try{ - return stringToNBTBase.invoke(MOJANGSON_PARSER.get(null),str); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } - public void setPersistentDataContainer(PersistentDataContainer dataContainer,Object cpd){ - try{ - Object PDC = CraftPersistentDataContainerClass.cast(dataContainer); - PersistentDataContainer_putAll.invoke(PDC,cpd); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - } - } - public String PDCtoString(PersistentDataContainer dataContainer){ - try{ - Object PDC = CraftPersistentDataContainerClass.cast(dataContainer); - return PDCtoCPD.invoke(PDC).toString(); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } - - public Object deserializeObject(Object object){ - try{ - return deserializeObject.invoke(null,object); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } - public Object serializeNBTBase(Object nbt_base){ - try{ - return serializeNBTBase.invoke(null, nbt_base); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } - public void setUnhandledTags(ItemMeta meta, Map unhandledTags){ - try{ - Object craft_meta = CraftMetaItemClass.cast(meta); - this.unhandledTags.set(craft_meta, unhandledTags); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - } - } - public Map getUnhandledTags(ItemMeta meta){ - try{ - Object craft_meta = CraftMetaItemClass.cast(meta); - Object unhandledTags = this.unhandledTags.get(craft_meta); - return (Map) unhandledTags; - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } - public ItemStack applyItemTag(ItemStack item,Object cpd){ - try{ - Object ei = asNMSCopy.invoke(null,item); - NMSItemStack_setTag.invoke(ei,cpd); - return (ItemStack) asBukkitCopy.invoke(null,ei); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return new ItemStack(Material.AIR); - } - } - public String getNBT(ItemStack item){ - try{ - Object ci = CraftItemStackClass.isInstance(item)?CraftItemStackClass.cast(item):asCraftCopy.invoke(null,item); - Object ei = asNMSCopy.invoke(null, ci); - Object cpd = NMSItemStack_save.invoke(ei, NBTTagCompoundClass.newInstance()); - return cpd.toString(); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return "{id:\"minecraft:air\"}"; - } - } - public Object getCPD(ItemStack item){ - try{ - Object ci = CraftItemStackClass.isInstance(item)?CraftItemStackClass.cast(item):asCraftCopy.invoke(null,item); - Object ei = asNMSCopy.invoke(null, ci); - return NMSItemStack_save.invoke(ei, NBTTagCompoundClass.newInstance()); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } - public Object getCPD(String nbt){ - try{ - return stringToCPD.invoke(null,nbt); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } - /** - * 仅1.13+可用 - */ - public ItemStack getItemStack(Object cpd){ - try{ - Object ei = cpdToEi.invoke(null,cpd); - Object ci = asBukkitCopy.invoke(null,ei); - return (ItemStack) ci; - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } - /** - * 仅1.13+可用 - */ - public ItemStack getItemStack(String nbt){ - try{ - Object cpd = stringToCPD.invoke(null,nbt); - Object ei = cpdToEi.invoke(null,cpd); - Object ci = asBukkitCopy.invoke(null,ei); - return (ItemStack) ci; - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - return null; - } - } - public void setEnvironment(World world,World.Environment env){ - Object world_c = getCraftWorld(world); - try{ - //Object old_env = world_c_environment.get(world_c); - world_c_environment.set(world_c,env); - }catch (ReflectiveOperationException e){ - e.printStackTrace(); - } - } - public Object getEnderDragonBattle(World world){ - String version = Version.getVersion(); - if (Version.mcMainVersion>=12 && Version.mcMainVersion<16) { - try { - Object worldServer = getInstance().getNMSManager().getWorldServer(world); - assert worldServer != null; - Field field = worldServer.getClass().getField("worldProvider"); - Object worldProvider = field.get(worldServer); - Object WorldProviderTheEnd = WorldProviderTheEndClass.cast(worldProvider); - String method_name = getInstance().getNMSManager().getEDB_base; - if(method_name == null) return null; - Method method = WorldProviderTheEnd.getClass().getDeclaredMethod(method_name); - return method.invoke(WorldProviderTheEnd); - } catch (ReflectiveOperationException e) { - Lang.warn("Your server version (" + version + ") is not supported!"); - e.printStackTrace(); - } - } - Lang.warn("Your server version (" + version + ") is not supported!"); - return null; - } - public Object getWorldServer(World ThisWorld) { - try { - Object castClass = getCraftWorld(ThisWorld); - return this.CraftWorldClass.getDeclaredMethod("getHandle").invoke(castClass); - } catch (ReflectiveOperationException e) { - e.printStackTrace(); - } - return null; - } - public Object getCraftWorld(World ThisWorld) { - if (this.CraftWorldClass.isInstance(ThisWorld)) return this.CraftWorldClass.cast(ThisWorld); - return null; - } - public Object getWorld_e(World world){ - try { - Object world_c = getCraftWorld(world); - if(this.getNMSWord == null){ - this.getNMSWord = this.CraftWorldClass.getDeclaredMethod("getHandle"); - } - return this.getNMSWord.invoke(world_c); - } catch (ReflectiveOperationException e) { - e.printStackTrace(); - } - return null; - } - public Class getNBTBaseClass(){ - return this.NBTBaseClass; - } - public Class getNBTTagCompoundClass(){ - return this.NBTTagCompoundClass; - } - public Class getWorldClass(){ - return this.WorldClass; - } - public Class getWorldProviderClass(){ - return this.WorldProviderClass; - } - private String getMethodName(ReflectiveMethod method){ - switch (method){ - case NMSItemStack_save: { - if(Version.mcMainVersion<=17) return "save"; - return "b"; - } - case NMSItemStack_setTag: { - if(Version.mcMainVersion<=17) return "setTag"; - return "c"; - } - case MojangsonParser_parse: { - if(Version.mcMainVersion<=17) return "parse"; - return "a"; - } - case MojangsonParser_parseLiteral: { - if(Version.mcMainVersion==12) return "c"; - else if("v1_13_R1".equals(Version.getVersion())) return "b"; - else if(Version.mcMainVersion<=17) return "parseLiteral"; - else return "b"; - } - case NBTTagCompound_set: { - if(Version.mcMainVersion<=17) return "set"; - return "a"; - } - default: return "unreachable"; - } - } - private void init_NBTTagCompoundClass(){ - try{ - Class CraftMetaBlockStateClass = Class.forName("org.bukkit.craftbukkit."+Version.getVersion()+".inventory.CraftMetaBlockState"); - Field field = CraftMetaBlockStateClass.getDeclaredField("blockEntityTag"); - this.NBTTagCompoundClass = field.getType(); - return; - }catch (ReflectiveOperationException ignored){} - - Method[] methods = CraftEntityClass.getDeclaredMethods(); - for (Method method : methods) { - if ("save".equals(method.getName())) this.NBTTagCompoundClass = method.getReturnType(); - } - } - private void init_NBTTagCompound_map(){ - Field[] fields = NBTTagCompoundClass.getDeclaredFields(); - for(Field field : fields){ - if(field.getType() == this.unhandledTags.getType()){ - this.NBTTagCompound_map = field; - break; - } - } - this.NBTTagCompound_map.setAccessible(true); - } - private void init_NBTBaseClass(){ - try{ - //在mohist端使用getPackage()喜提null - this.NBTBaseClass = Class.forName(this.NBTTagCompoundClass.getName().replace(".NBTTagCompound",".NBTBase")); - }catch (ClassNotFoundException e){ - e.printStackTrace(); - } - } - private static enum ReflectiveMethod { - NMSItemStack_save, - NMSItemStack_setTag, - MojangsonParser_parse, - MojangsonParser_parseLiteral, - NBTTagCompound_set - } - -} diff --git a/src/main/java/pers/xanadu/enderdragon/util/Pair.java b/src/main/java/pers/xanadu/enderdragon/util/Pair.java deleted file mode 100644 index e3fea87..0000000 --- a/src/main/java/pers/xanadu/enderdragon/util/Pair.java +++ /dev/null @@ -1,11 +0,0 @@ -package pers.xanadu.enderdragon.util; - -public class Pair { - public P1 first; - public P2 second; - public Pair(P1 first, P2 second) { - this.first = first; - this.second = second; - } - -} diff --git a/src/main/java/pers/xanadu/enderdragon/util/Version.java b/src/main/java/pers/xanadu/enderdragon/util/Version.java deleted file mode 100644 index b01ee1d..0000000 --- a/src/main/java/pers/xanadu/enderdragon/util/Version.java +++ /dev/null @@ -1,83 +0,0 @@ -package pers.xanadu.enderdragon.util; - -import pers.xanadu.enderdragon.config.Lang; -import pers.xanadu.enderdragon.nms.BossBar.I_BossBarManager; -import pers.xanadu.enderdragon.nms.NMSItem.I_NMSItemManager; -import pers.xanadu.enderdragon.nms.RespawnAnchor.I_RespawnAnchorManager; -import pers.xanadu.enderdragon.nms.WorldData.I_WorldDataManager; - -import static org.bukkit.Bukkit.getServer; - -public class Version { - public static int mcMainVersion; - public static int mcPatchVersion; - private static String version = "no version found"; - private static boolean isMohist = false; - public static void init(){ - try { - version = getServer().getClass().getPackage().getName().split("\\.")[3]; - String[] mc_version = getServer().getBukkitVersion().split("-")[0].split("\\."); - mcMainVersion = Integer.parseInt(mc_version[1]); - if(mc_version.length<=2) mcPatchVersion = 0; - else mcPatchVersion = Integer.parseInt(mc_version[2]); - } catch (Throwable throwable) { - throwable.printStackTrace(); - Lang.warn("Failed to get nms-version!"); - } - Lang.info("Found version: " + version); - try{ - Class.forName("net.minecraftforge.server.ServerMain"); - isMohist = true; - }catch(ReflectiveOperationException ignored){} - - } - public static I_NMSItemManager getNMSItemManager(){ - switch (version){ - case "v1_12_R1" : return new pers.xanadu.enderdragon.nms.NMSItem.v1_12_R1.NMSItemManager(); - case "v1_13_R1" : return new pers.xanadu.enderdragon.nms.NMSItem.v1_13_R1.NMSItemManager(); - default: return new pers.xanadu.enderdragon.nms.NMSItem.v1_13_R2_above.NMSItemManager(); - } - } - public static I_BossBarManager getBossBarManager(){ - switch(version){ - case "v1_12_R1" : return new pers.xanadu.enderdragon.nms.BossBar.v1_12_R1.BossBarManager(); - case "v1_13_R1" : return new pers.xanadu.enderdragon.nms.BossBar.v1_13_R1.BossBarManager(); - case "v1_13_R2" : return new pers.xanadu.enderdragon.nms.BossBar.v1_13_R2.BossBarManager(); - default: return null; - } - } - public static I_WorldDataManager getWorldDataManager(){ - switch (version){ - case "v1_12_R1" : return new pers.xanadu.enderdragon.nms.WorldData.v1_12_R1.WorldDataManager(); - case "v1_13_R1" : return new pers.xanadu.enderdragon.nms.WorldData.v1_13_R1.WorldDataManager(); - case "v1_13_R2" : return new pers.xanadu.enderdragon.nms.WorldData.v1_13_R2.WorldDataManager(); - case "v1_14_R1" : return new pers.xanadu.enderdragon.nms.WorldData.v1_14_R1.WorldDataManager(); - case "v1_15_R1" : return new pers.xanadu.enderdragon.nms.WorldData.v1_15_R1.WorldDataManager(); - case "v1_16_R1" : return new pers.xanadu.enderdragon.nms.WorldData.v1_16_R1.WorldDataManager(); - case "v1_16_R2" : return new pers.xanadu.enderdragon.nms.WorldData.v1_16_R2.WorldDataManager(); - case "v1_16_R3" : return new pers.xanadu.enderdragon.nms.WorldData.v1_16_R3.WorldDataManager(); - default : return new pers.xanadu.enderdragon.nms.WorldData.v1_17_above.WorldDataManager(); - } - } - public static I_RespawnAnchorManager getRespawnAnchorManager(){ - switch (version){ - case "v1_12_R1" : - case "v1_13_R1" : - case "v1_14_R1" : - case "v1_13_R2" : - case "v1_15_R1" : return null; - case "v1_16_R1" : return new pers.xanadu.enderdragon.nms.RespawnAnchor.v1_16_R1.RespawnAnchorManager(); - case "v1_16_R2" : return new pers.xanadu.enderdragon.nms.RespawnAnchor.v1_16_R2.RespawnAnchorManager(); - case "v1_16_R3" : return new pers.xanadu.enderdragon.nms.RespawnAnchor.v1_16_R3.RespawnAnchorManager(); - case "v1_17_R1" : return new pers.xanadu.enderdragon.nms.RespawnAnchor.v1_17_R1.RespawnAnchorManager(); - default: return new pers.xanadu.enderdragon.nms.RespawnAnchor.v1_18_above.RespawnAnchorManager(); - } - } - public static String getVersion() { - return version; - } - public static boolean isMohist(){ - return isMohist; - } - -}