This commit is contained in:
Brianna O'Keefe 2019-02-05 23:57:38 -05:00
parent 2130776df9
commit bdda96eb8e
21 changed files with 131 additions and 134 deletions

View File

@ -1,8 +1,8 @@
package com.songoda.epicbuckets.util.gui; package com.songoda.epicbuckets.utils.gui;
import com.songoda.epicbuckets.EpicBuckets; import com.songoda.epicbuckets.EpicBuckets;
import com.songoda.epicbuckets.util.ServerVersion; import com.songoda.epicbuckets.utils.ServerVersion;
import com.songoda.epicbuckets.util.version.NMSUtil; import com.songoda.epicbuckets.utils.version.NMSUtil;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -53,7 +53,7 @@ public class AbstractAnvilGUI {
closeSound = Sound.ENTITY_PLAYER_LEVELUP; closeSound = Sound.ENTITY_PLAYER_LEVELUP;
else else
closeSound = Sound.valueOf("LEVEL_UP"); closeSound = Sound.valueOf("LEVEL_UP");
} }
if (!(event.getWhoClicked() instanceof Player) || !event.getInventory().equals(inv)) return; if (!(event.getWhoClicked() instanceof Player) || !event.getInventory().equals(inv)) return;
@ -94,7 +94,8 @@ public class AbstractAnvilGUI {
if (!inv.equals(AbstractAnvilGUI.this.inv)) return; if (!inv.equals(AbstractAnvilGUI.this.inv)) return;
inv.clear(); inv.clear();
OnClose onClose = getOnClose(); OnClose onClose = getOnClose();
if (EpicBuckets.getInstance().isServerVersionAtLeast(ServerVersion.V1_9)) player.playSound(player.getLocation(), closeSound, 1F, 1F); if (EpicBuckets.getInstance().isServerVersionAtLeast(ServerVersion.V1_9))
player.playSound(player.getLocation(), closeSound, 1F, 1F);
Bukkit.getScheduler().scheduleSyncDelayedTask(EpicBuckets.getInstance(), () -> { Bukkit.getScheduler().scheduleSyncDelayedTask(EpicBuckets.getInstance(), () -> {
if (onClose != null) onClose.OnClose(player, inv); if (onClose != null) onClose.OnClose(player, inv);
destroy(); destroy();

View File

@ -1,8 +1,8 @@
package com.songoda.epicbuckets.util.gui; package com.songoda.epicbuckets.utils.gui;
import com.songoda.arconix.api.methods.formatting.TextComponent; import com.songoda.arconix.api.methods.formatting.TextComponent;
import com.songoda.epicbuckets.EpicBuckets; import com.songoda.epicbuckets.EpicBuckets;
import com.songoda.epicbuckets.util.ServerVersion; import com.songoda.epicbuckets.utils.ServerVersion;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
@ -76,7 +76,7 @@ public abstract class AbstractGUI implements Listener {
} }
} }
} }
Map<Range, Clickable> entries = new HashMap<>(gui.clickables); Map<Range, Clickable> entries = new HashMap<>(gui.clickables);
for (Map.Entry<Range, Clickable> entry : entries.entrySet()) { for (Map.Entry<Range, Clickable> entry : entries.entrySet()) {
@ -86,7 +86,7 @@ public abstract class AbstractGUI implements Listener {
if (event.getSlot() >= range.getMin() && event.getSlot() <= range.getMax()) { if (event.getSlot() >= range.getMin() && event.getSlot() <= range.getMax()) {
entry.getValue().Clickable(player, inventory, event.getCursor(), event.getSlot(), event.getClick()); entry.getValue().Clickable(player, inventory, event.getCursor(), event.getSlot(), event.getClick());
if (EpicBuckets.getInstance().isServerVersionAtLeast(ServerVersion.V1_12)) if (EpicBuckets.getInstance().isServerVersionAtLeast(ServerVersion.V1_12))
player.playSound(player.getLocation(), entry.getKey().getOnClickSound(), 1F, 1F); player.playSound(player.getLocation(), entry.getKey().getOnClickSound(), 1F, 1F);
} }
} }
} }

View File

@ -1,4 +1,4 @@
package com.songoda.epicbuckets.util.gui; package com.songoda.epicbuckets.utils.gui;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;

View File

@ -1,4 +1,4 @@
package com.songoda.epicbuckets.util.gui; package com.songoda.epicbuckets.utils.gui;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;

View File

@ -1,7 +1,7 @@
package com.songoda.epicbuckets.util.gui; package com.songoda.epicbuckets.utils.gui;
import com.songoda.epicbuckets.EpicBuckets; import com.songoda.epicbuckets.EpicBuckets;
import com.songoda.epicbuckets.util.ServerVersion; import com.songoda.epicbuckets.utils.ServerVersion;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;

View File

@ -1,39 +1,37 @@
package com.songoda.epicbuckets.util.itemnbtapi; package com.songoda.epicbuckets.utils.itemnbtapi;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
public enum ClassWrapper { public enum ClassWrapper {
CRAFT_ITEMSTACK("org.bukkit.craftbukkit.", ".inventory.CraftItemStack"), CRAFT_ITEMSTACK("org.bukkit.craftbukkit.", ".inventory.CraftItemStack"),
CRAFT_ENTITY("org.bukkit.craftbukkit.", ".entity.CraftEntity"), CRAFT_ENTITY("org.bukkit.craftbukkit.", ".entity.CraftEntity"),
CRAFT_WORLD("org.bukkit.craftbukkit.", ".CraftWorld"), CRAFT_WORLD("org.bukkit.craftbukkit.", ".CraftWorld"),
NMS_NBTBASE("net.minecraft.server.", ".NBTBase"), NMS_NBTBASE("net.minecraft.server.", ".NBTBase"),
NMS_NBTTAGSTRING("net.minecraft.server.", ".NBTTagString"), NMS_NBTTAGSTRING("net.minecraft.server.", ".NBTTagString"),
NMS_ITEMSTACK("net.minecraft.server.", ".ItemStack"), NMS_ITEMSTACK("net.minecraft.server.", ".ItemStack"),
NMS_NBTTAGCOMPOUND("net.minecraft.server.", ".NBTTagCompound"), NMS_NBTTAGCOMPOUND("net.minecraft.server.", ".NBTTagCompound"),
NMS_NBTTAGLIST("net.minecraft.server.", ".NBTTagList"), NMS_NBTTAGLIST("net.minecraft.server.", ".NBTTagList"),
NMS_NBTCOMPRESSEDSTREAMTOOLS("net.minecraft.server.", ".NBTCompressedStreamTools"), NMS_NBTCOMPRESSEDSTREAMTOOLS("net.minecraft.server.", ".NBTCompressedStreamTools"),
NMS_MOJANGSONPARSER("net.minecraft.server.", ".MojangsonParser"), NMS_MOJANGSONPARSER("net.minecraft.server.", ".MojangsonParser"),
NMS_TILEENTITY("net.minecraft.server.", ".TileEntity"), NMS_TILEENTITY("net.minecraft.server.", ".TileEntity"),
NMS_BLOCKPOSITION("net.minecraft.server.", ".BlockPosition"), NMS_BLOCKPOSITION("net.minecraft.server.", ".BlockPosition"),
NMS_WORLD("net.minecraft.server.", ".WorldServer"), NMS_WORLD("net.minecraft.server.", ".WorldServer"),
NMS_ENTITY("net.minecraft.server.", ".Entity"), NMS_ENTITY("net.minecraft.server.", ".Entity"),;
;
private Class<?> clazz; private Class<?> clazz;
ClassWrapper(String pre, String suffix){ ClassWrapper(String pre, String suffix) {
try{ try {
String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3]; String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
clazz = Class.forName(pre + version + suffix); clazz = Class.forName(pre + version + suffix);
}catch(Exception ex){ } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
} }
public Class<?> getClazz(){ public Class<?> getClazz() {
return clazz; return clazz;
} }
} }

View File

@ -1,6 +1,6 @@
package com.songoda.epicbuckets.util.itemnbtapi; package com.songoda.epicbuckets.utils.itemnbtapi;
import com.songoda.epicbuckets.util.itemnbtapi.utils.MinecraftVersion; import com.songoda.epicbuckets.utils.itemnbtapi.utils.MinecraftVersion;
import java.util.Set; import java.util.Set;
@ -31,10 +31,10 @@ public class NBTCompound {
return parent; return parent;
} }
public void mergeCompound(NBTCompound comp){ public void mergeCompound(NBTCompound comp) {
NBTReflectionUtil.addOtherNBTCompound(this, comp); NBTReflectionUtil.addOtherNBTCompound(this, comp);
} }
public void setString(String key, String value) { public void setString(String key, String value) {
NBTReflectionUtil.setData(this, ReflectionMethod.COMPOUND_SET_STRING, key, value); NBTReflectionUtil.setData(this, ReflectionMethod.COMPOUND_SET_STRING, key, value);
} }
@ -130,10 +130,10 @@ public class NBTCompound {
public <T> T getObject(String key, Class<T> type) { public <T> T getObject(String key, Class<T> type) {
return NBTReflectionUtil.getObject(this, key, type); return NBTReflectionUtil.getObject(this, key, type);
} }
public Boolean hasKey(String key) { public Boolean hasKey(String key) {
Boolean b = (Boolean) NBTReflectionUtil.getData(this, ReflectionMethod.COMPOUND_HAS_KEY, key); Boolean b = (Boolean) NBTReflectionUtil.getData(this, ReflectionMethod.COMPOUND_HAS_KEY, key);
if(b == null)return false; if (b == null) return false;
return b; return b;
} }
@ -146,7 +146,7 @@ public class NBTCompound {
} }
public NBTCompound addCompound(String name) { public NBTCompound addCompound(String name) {
if(getType(name) == NBTType.NBTTagCompound)return getCompound(name); if (getType(name) == NBTType.NBTTagCompound) return getCompound(name);
NBTReflectionUtil.addNBTTagCompound(this, name); NBTReflectionUtil.addNBTTagCompound(this, name);
return getCompound(name); return getCompound(name);
} }
@ -164,7 +164,7 @@ public class NBTCompound {
public NBTType getType(String name) { public NBTType getType(String name) {
if (MinecraftVersion.getVersion() == MinecraftVersion.MC1_7_R4) return null; if (MinecraftVersion.getVersion() == MinecraftVersion.MC1_7_R4) return null;
Object o = NBTReflectionUtil.getData(this, ReflectionMethod.COMPOUND_GET_TYPE, name); Object o = NBTReflectionUtil.getData(this, ReflectionMethod.COMPOUND_GET_TYPE, name);
if(o == null)return null; if (o == null) return null;
return NBTType.valueOf((byte) o); return NBTType.valueOf((byte) o);
} }
@ -190,10 +190,10 @@ public class NBTCompound {
return result + "-" + key + ": " + getContent(key) + System.lineSeparator(); return result + "-" + key + ": " + getContent(key) + System.lineSeparator();
} }
} }
public String asNBTString(){ public String asNBTString() {
Object comp = NBTReflectionUtil.gettoCompount(getCompound(), this); Object comp = NBTReflectionUtil.gettoCompount(getCompound(), this);
if(comp == null)return "{}"; if (comp == null) return "{}";
return comp.toString(); return comp.toString();
} }

View File

@ -1,6 +1,6 @@
package com.songoda.epicbuckets.util.itemnbtapi; package com.songoda.epicbuckets.utils.itemnbtapi;
public class NBTContainer extends NBTCompound{ public class NBTContainer extends NBTCompound {
private Object nbt; private Object nbt;
@ -8,17 +8,17 @@ public class NBTContainer extends NBTCompound{
super(null, null); super(null, null);
nbt = ObjectCreator.NMS_NBTTAGCOMPOUND.getInstance(); nbt = ObjectCreator.NMS_NBTTAGCOMPOUND.getInstance();
} }
protected NBTContainer(Object nbt){ protected NBTContainer(Object nbt) {
super(null, null); super(null, null);
this.nbt = nbt; this.nbt = nbt;
} }
public NBTContainer(String nbtString) throws IllegalArgumentException { public NBTContainer(String nbtString) throws IllegalArgumentException {
super(null, null); super(null, null);
try{ try {
nbt = ReflectionMethod.PARSE_NBT.run(null, nbtString); nbt = ReflectionMethod.PARSE_NBT.run(null, nbtString);
}catch(Exception ex){ } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
throw new IllegalArgumentException("Malformed Json: " + ex.getMessage()); throw new IllegalArgumentException("Malformed Json: " + ex.getMessage());
} }

View File

@ -1,4 +1,4 @@
package com.songoda.epicbuckets.util.itemnbtapi; package com.songoda.epicbuckets.utils.itemnbtapi;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;

View File

@ -1,4 +1,4 @@
package com.songoda.epicbuckets.util.itemnbtapi; package com.songoda.epicbuckets.utils.itemnbtapi;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;

View File

@ -1,4 +1,4 @@
package com.songoda.epicbuckets.util.itemnbtapi; package com.songoda.epicbuckets.utils.itemnbtapi;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -8,12 +8,20 @@ public class NBTItem extends NBTCompound {
public NBTItem(ItemStack item) { public NBTItem(ItemStack item) {
super(null, null); super(null, null);
if(item == null){ if (item == null) {
throw new NullPointerException("ItemStack can't be null!"); throw new NullPointerException("ItemStack can't be null!");
} }
bukkitItem = item.clone(); bukkitItem = item.clone();
} }
public static NBTContainer convertItemtoNBT(ItemStack item) {
return NBTReflectionUtil.convertNMSItemtoNBTCompound(ReflectionMethod.ITEMSTACK_NMSCOPY.run(null, item));
}
public static ItemStack convertNBTtoItem(NBTCompound comp) {
return (ItemStack) ReflectionMethod.ITEMSTACK_BUKKITMIRROR.run(null, NBTReflectionUtil.convertNBTCompoundtoNMSItem(comp));
}
protected Object getCompound() { protected Object getCompound() {
return NBTReflectionUtil.getItemRootNBTTagCompound(ReflectionMethod.ITEMSTACK_NMSCOPY.run(null, bukkitItem)); return NBTReflectionUtil.getItemRootNBTTagCompound(ReflectionMethod.ITEMSTACK_NMSCOPY.run(null, bukkitItem));
} }
@ -31,23 +39,14 @@ public class NBTItem extends NBTCompound {
protected void setItem(ItemStack item) { protected void setItem(ItemStack item) {
bukkitItem = item; bukkitItem = item;
} }
/** /**
* This may return true even when the NBT is empty. * This may return true even when the NBT is empty.
* *
* @return Does the ItemStack have a NBTCompound. * @return Does the ItemStack have a NBTCompound.
*/ */
public boolean hasNBTData(){ public boolean hasNBTData() {
return getCompound() != null; return getCompound() != null;
} }
public static NBTContainer convertItemtoNBT(ItemStack item){
return NBTReflectionUtil.convertNMSItemtoNBTCompound(ReflectionMethod.ITEMSTACK_NMSCOPY.run(null, item));
}
public static ItemStack convertNBTtoItem(NBTCompound comp){
return (ItemStack) ReflectionMethod.ITEMSTACK_BUKKITMIRROR.run(null, NBTReflectionUtil.convertNBTCompoundtoNMSItem(comp));
}
} }

View File

@ -1,4 +1,4 @@
package com.songoda.epicbuckets.util.itemnbtapi; package com.songoda.epicbuckets.utils.itemnbtapi;
public class NBTList { public class NBTList {

View File

@ -1,4 +1,4 @@
package com.songoda.epicbuckets.util.itemnbtapi; package com.songoda.epicbuckets.utils.itemnbtapi;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;

View File

@ -1,4 +1,9 @@
package com.songoda.epicbuckets.util.itemnbtapi; package com.songoda.epicbuckets.utils.itemnbtapi;
import com.songoda.epicbuckets.utils.itemnbtapi.utils.GsonWrapper;
import com.songoda.epicbuckets.utils.itemnbtapi.utils.MinecraftVersion;
import org.bukkit.block.BlockState;
import org.bukkit.entity.Entity;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
@ -7,12 +12,7 @@ import java.lang.reflect.Method;
import java.util.Set; import java.util.Set;
import java.util.Stack; import java.util.Stack;
import com.songoda.epicbuckets.util.itemnbtapi.utils.GsonWrapper; public class NBTReflectionUtil {
import com.songoda.epicbuckets.util.itemnbtapi.utils.MinecraftVersion;
import org.bukkit.block.BlockState;
import org.bukkit.entity.Entity;
public class NBTReflectionUtil {
public static Object getNMSEntity(Entity entity) { public static Object getNMSEntity(Entity entity) {
try { try {
@ -61,11 +61,11 @@ public class NBTReflectionUtil {
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
Class clazz = ClassWrapper.NMS_ITEMSTACK.getClazz(); Class clazz = ClassWrapper.NMS_ITEMSTACK.getClazz();
try { try {
if(MinecraftVersion.getVersion().getVersionId() >= MinecraftVersion.MC1_12_R1.getVersionId()){ if (MinecraftVersion.getVersion().getVersionId() >= MinecraftVersion.MC1_12_R1.getVersionId()) {
Constructor<?> constructor = clazz.getConstructor(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz()); Constructor<?> constructor = clazz.getConstructor(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz());
constructor.setAccessible(true); constructor.setAccessible(true);
return constructor.newInstance(nbtcompound.getCompound()); return constructor.newInstance(nbtcompound.getCompound());
}else{ } else {
Method method = clazz.getMethod("createStack", ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz()); Method method = clazz.getMethod("createStack", ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz());
method.setAccessible(true); method.setAccessible(true);
return method.invoke(null, nbtcompound.getCompound()); return method.invoke(null, nbtcompound.getCompound());

View File

@ -1,4 +1,4 @@
package com.songoda.epicbuckets.util.itemnbtapi; package com.songoda.epicbuckets.utils.itemnbtapi;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;

View File

@ -1,4 +1,4 @@
package com.songoda.epicbuckets.util.itemnbtapi; package com.songoda.epicbuckets.utils.itemnbtapi;
public enum NBTType { public enum NBTType {
NBTTagEnd(0), NBTTagEnd(0),
@ -14,14 +14,10 @@ public enum NBTType {
NBTTagList(9), NBTTagList(9),
NBTTagCompound(10); NBTTagCompound(10);
NBTType(int i) {
id = i;
}
private final int id; private final int id;
public int getId() { NBTType(int i) {
return id; id = i;
} }
public static NBTType valueOf(int id) { public static NBTType valueOf(int id) {
@ -31,4 +27,8 @@ public enum NBTType {
return NBTType.NBTTagEnd; return NBTType.NBTTagEnd;
} }
public int getId() {
return id;
}
} }

View File

@ -1,4 +1,4 @@
package com.songoda.epicbuckets.util.itemnbtapi; package com.songoda.epicbuckets.utils.itemnbtapi;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
@ -8,21 +8,21 @@ public enum ObjectCreator {
private Constructor<?> construct; private Constructor<?> construct;
ObjectCreator(Class<?> clazz, Class<?>... args){ ObjectCreator(Class<?> clazz, Class<?>... args) {
try{ try {
construct = clazz.getConstructor(args); construct = clazz.getConstructor(args);
}catch(Exception ex){ } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
} }
public Object getInstance(Object... args){ public Object getInstance(Object... args) {
try{ try {
return construct.newInstance(args); return construct.newInstance(args);
}catch(Exception ex){ } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
return null; return null;
} }
} }

View File

@ -1,12 +1,12 @@
package com.songoda.epicbuckets.util.itemnbtapi; package com.songoda.epicbuckets.utils.itemnbtapi;
import com.songoda.epicbuckets.utils.itemnbtapi.utils.MinecraftVersion;
import org.bukkit.inventory.ItemStack;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import com.songoda.epicbuckets.util.itemnbtapi.utils.MinecraftVersion;
import org.bukkit.inventory.ItemStack;
public enum ReflectionMethod { public enum ReflectionMethod {
COMPOUND_SET_FLOAT(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), new Class[]{String.class, float.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "setFloat")), COMPOUND_SET_FLOAT(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), new Class[]{String.class, float.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "setFloat")),
@ -20,7 +20,7 @@ public enum ReflectionMethod {
COMPOUND_SET_DOUBLE(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), new Class[]{String.class, double.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "setDouble")), COMPOUND_SET_DOUBLE(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), new Class[]{String.class, double.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "setDouble")),
COMPOUND_SET_BOOLEAN(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), new Class[]{String.class, boolean.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "setBoolean")), COMPOUND_SET_BOOLEAN(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), new Class[]{String.class, boolean.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "setBoolean")),
COMPOUND_ADD(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), new Class[]{ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz()}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "a")), //FIXME: No Spigot mapping! COMPOUND_ADD(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), new Class[]{ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz()}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "a")), //FIXME: No Spigot mapping!
COMPOUND_GET_FLOAT(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), new Class[]{String.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "getFloat")), COMPOUND_GET_FLOAT(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), new Class[]{String.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "getFloat")),
COMPOUND_GET_STRING(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), new Class[]{String.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "getString")), COMPOUND_GET_STRING(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), new Class[]{String.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "getString")),
COMPOUND_GET_INT(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), new Class[]{String.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "getInt")), COMPOUND_GET_INT(ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), new Class[]{String.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "getInt")),
@ -44,14 +44,14 @@ public enum ReflectionMethod {
LIST_ADD(ClassWrapper.NMS_NBTTAGLIST.getClazz(), new Class[]{ClassWrapper.NMS_NBTBASE.getClazz()}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "add")), LIST_ADD(ClassWrapper.NMS_NBTTAGLIST.getClazz(), new Class[]{ClassWrapper.NMS_NBTBASE.getClazz()}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "add")),
LIST_GET_STRING(ClassWrapper.NMS_NBTTAGLIST.getClazz(), new Class[]{int.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "getString")), LIST_GET_STRING(ClassWrapper.NMS_NBTTAGLIST.getClazz(), new Class[]{int.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "getString")),
LIST_GET(ClassWrapper.NMS_NBTTAGLIST.getClazz(), new Class[]{int.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "get")), LIST_GET(ClassWrapper.NMS_NBTTAGLIST.getClazz(), new Class[]{int.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "get")),
ITEMSTACK_SET_TAG(ClassWrapper.NMS_ITEMSTACK.getClazz(), new Class[]{ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz()}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "setTag")), ITEMSTACK_SET_TAG(ClassWrapper.NMS_ITEMSTACK.getClazz(), new Class[]{ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz()}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "setTag")),
ITEMSTACK_NMSCOPY(ClassWrapper.CRAFT_ITEMSTACK.getClazz(), new Class[]{ItemStack.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "asNMSCopy")), ITEMSTACK_NMSCOPY(ClassWrapper.CRAFT_ITEMSTACK.getClazz(), new Class[]{ItemStack.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "asNMSCopy")),
ITEMSTACK_BUKKITMIRROR(ClassWrapper.CRAFT_ITEMSTACK.getClazz(), new Class[]{ClassWrapper.NMS_ITEMSTACK.getClazz()}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "asCraftMirror")), ITEMSTACK_BUKKITMIRROR(ClassWrapper.CRAFT_ITEMSTACK.getClazz(), new Class[]{ClassWrapper.NMS_ITEMSTACK.getClazz()}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "asCraftMirror")),
CRAFT_WORLD_GET_HANDLE(ClassWrapper.CRAFT_WORLD.getClazz(), new Class[]{}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "getHandle")), CRAFT_WORLD_GET_HANDLE(ClassWrapper.CRAFT_WORLD.getClazz(), new Class[]{}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "getHandle")),
NMS_WORLD_GET_TILEENTITY(ClassWrapper.NMS_WORLD.getClazz(), new Class[]{ClassWrapper.NMS_BLOCKPOSITION.getClazz()}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "getTileEntity")), NMS_WORLD_GET_TILEENTITY(ClassWrapper.NMS_WORLD.getClazz(), new Class[]{ClassWrapper.NMS_BLOCKPOSITION.getClazz()}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "getTileEntity")),
TILEENTITY_GET_NBT(ClassWrapper.NMS_TILEENTITY.getClazz(), new Class[]{ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz()}, MinecraftVersion.MC1_8_R3, new Since(MinecraftVersion.MC1_8_R3, "b"), new Since(MinecraftVersion.MC1_9_R1, "save")), TILEENTITY_GET_NBT(ClassWrapper.NMS_TILEENTITY.getClazz(), new Class[]{ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz()}, MinecraftVersion.MC1_8_R3, new Since(MinecraftVersion.MC1_8_R3, "b"), new Since(MinecraftVersion.MC1_9_R1, "save")),
TILEENTITY_SET_NBT(ClassWrapper.NMS_TILEENTITY.getClazz(), new Class[]{ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz()}, MinecraftVersion.MC1_8_R3, new Since(MinecraftVersion.MC1_8_R3, "a"), new Since(MinecraftVersion.MC1_12_R1, "load")), TILEENTITY_SET_NBT(ClassWrapper.NMS_TILEENTITY.getClazz(), new Class[]{ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz()}, MinecraftVersion.MC1_8_R3, new Since(MinecraftVersion.MC1_8_R3, "a"), new Since(MinecraftVersion.MC1_12_R1, "load")),
@ -61,45 +61,43 @@ public enum ReflectionMethod {
NBTFILE_READ(ClassWrapper.NMS_NBTCOMPRESSEDSTREAMTOOLS.getClazz(), new Class[]{InputStream.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "a")), //FIXME: No Spigot mapping! NBTFILE_READ(ClassWrapper.NMS_NBTCOMPRESSEDSTREAMTOOLS.getClazz(), new Class[]{InputStream.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "a")), //FIXME: No Spigot mapping!
NBTFILE_WRITE(ClassWrapper.NMS_NBTCOMPRESSEDSTREAMTOOLS.getClazz(), new Class[]{ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), OutputStream.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "a")), //FIXME: No Spigot mapping! NBTFILE_WRITE(ClassWrapper.NMS_NBTCOMPRESSEDSTREAMTOOLS.getClazz(), new Class[]{ClassWrapper.NMS_NBTTAGCOMPOUND.getClazz(), OutputStream.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "a")), //FIXME: No Spigot mapping!
PARSE_NBT(ClassWrapper.NMS_MOJANGSONPARSER.getClazz(), new Class[]{String.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "parse")),
;
PARSE_NBT(ClassWrapper.NMS_MOJANGSONPARSER.getClazz(), new Class[]{String.class}, MinecraftVersion.MC1_7_R4, new Since(MinecraftVersion.MC1_7_R4, "parse")),;
private Since targetVersion; private Since targetVersion;
private Method method; private Method method;
private boolean loaded = false; private boolean loaded = false;
private boolean compatible = false; private boolean compatible = false;
ReflectionMethod(Class<?> targetClass, Class<?>[] args, MinecraftVersion addedSince, Since... methodnames){ ReflectionMethod(Class<?> targetClass, Class<?>[] args, MinecraftVersion addedSince, Since... methodnames) {
MinecraftVersion server = MinecraftVersion.getVersion(); MinecraftVersion server = MinecraftVersion.getVersion();
if(server.compareTo(addedSince) < 0)return; if (server.compareTo(addedSince) < 0) return;
compatible = true; compatible = true;
Since target = methodnames[0]; Since target = methodnames[0];
for(Since s : methodnames){ for (Since s : methodnames) {
if(s.version.getVersionId() <= server.getVersionId() && target.version.getVersionId() < s.version.getVersionId()) if (s.version.getVersionId() <= server.getVersionId() && target.version.getVersionId() < s.version.getVersionId())
target = s; target = s;
} }
targetVersion = target; targetVersion = target;
try{ try {
method = targetClass.getMethod(targetVersion.name, args); method = targetClass.getMethod(targetVersion.name, args);
method.setAccessible(true); method.setAccessible(true);
loaded = true; loaded = true;
}catch(NullPointerException | NoSuchMethodException | SecurityException ex){ } catch (NullPointerException | NoSuchMethodException | SecurityException ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
} }
public Object run(Object target, Object... args){ public Object run(Object target, Object... args) {
try{ try {
return method.invoke(target, args); return method.invoke(target, args);
}catch(Exception ex){ } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
return null; return null;
} }
public boolean isLoaded() { public boolean isLoaded() {
return loaded; return loaded;
} }
@ -108,13 +106,14 @@ public enum ReflectionMethod {
return compatible; return compatible;
} }
public static class Since{ public static class Since {
public final MinecraftVersion version; public final MinecraftVersion version;
public final String name; public final String name;
public Since(MinecraftVersion version, String name) { public Since(MinecraftVersion version, String name) {
this.version = version; this.version = version;
this.name = name; this.name = name;
} }
} }
} }

View File

@ -1,4 +1,4 @@
package com.songoda.epicbuckets.util.itemnbtapi.utils; package com.songoda.epicbuckets.utils.itemnbtapi.utils;
import com.google.gson.Gson; import com.google.gson.Gson;

View File

@ -1,4 +1,4 @@
package com.songoda.epicbuckets.util.itemnbtapi.utils; package com.songoda.epicbuckets.utils.itemnbtapi.utils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -23,10 +23,6 @@ public enum MinecraftVersion {
this.versionId = versionId; this.versionId = versionId;
} }
public int getVersionId() {
return versionId;
}
public static MinecraftVersion getVersion() { public static MinecraftVersion getVersion() {
if (version != null) { if (version != null) {
return version; return version;
@ -59,4 +55,8 @@ public enum MinecraftVersion {
return hasGsonSupport; return hasGsonSupport;
} }
public int getVersionId() {
return versionId;
}
} }

View File

@ -1,4 +1,4 @@
package com.songoda.epicbuckets.util.version; package com.songoda.epicbuckets.utils.version;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;