Refactoring

This commit is contained in:
NichtStudioCode 2021-07-17 14:15:18 +02:00
parent 3c41fb721d
commit 8c185e53f1
46 changed files with 157 additions and 234 deletions

@ -45,7 +45,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>api</artifactId>
<artifactId>abstraction</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>

@ -1,6 +1,6 @@
package de.studiocode.invui;
import de.studiocode.invui.util.reflection.ReflectionUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@ -10,7 +10,7 @@ import org.bukkit.plugin.Plugin;
import java.util.ArrayList;
import java.util.List;
import static de.studiocode.invui.util.reflection.ReflectionRegistry.PLUGIN_CLASS_LOADER_PLUGIN_FIELD;
import static de.studiocode.inventoryaccess.util.ReflectionRegistry.PLUGIN_CLASS_LOADER_PLUGIN_FIELD;
public class InvUI implements Listener {

@ -5,10 +5,10 @@ import com.google.common.cache.CacheBuilder;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import com.mojang.authlib.properties.PropertyMap;
import de.studiocode.inventoryaccess.util.ReflectionRegistry;
import de.studiocode.inventoryaccess.util.ReflectionUtils;
import de.studiocode.invui.util.MojangApiUtils;
import de.studiocode.invui.util.Pair;
import de.studiocode.invui.util.reflection.ReflectionRegistry;
import de.studiocode.invui.util.reflection.ReflectionUtils;
import de.studiocode.invui.window.impl.BaseWindow;
import org.bukkit.Bukkit;
import org.bukkit.Material;

@ -1,7 +1,7 @@
package de.studiocode.invui.resourcepack;
import de.studiocode.inventoryaccess.util.ReflectionRegistry;
import de.studiocode.invui.InvUI;
import de.studiocode.invui.util.reflection.ReflectionRegistry;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;

@ -1,23 +0,0 @@
package de.studiocode.invui.util.reflection;
import java.lang.reflect.Field;
import static de.studiocode.invui.util.reflection.ReflectionUtils.*;
public class ReflectionRegistry {
public static final int VERSION = getVersion();
public static final String NET_MINECRAFT_SERVER_PACKAGE_PATH = getNMS();
public static final String CRAFT_BUKKIT_PACKAGE_PATH = getCB();
public static final String BUKKIT_PACKAGE_PATH = "org.bukkit.";
// Classes
public static final Class<?> CB_CRAFT_META_SKULL_CLASS = getCBClass("inventory.CraftMetaSkull");
public static final Class<?> PLUGIN_CLASS_LOADER_CLASS = getBukkitClass("plugin.java.PluginClassLoader");
// Fields
public static final Field CB_CRAFT_META_SKULL_PROFILE_FIELD = getField(CB_CRAFT_META_SKULL_CLASS, true, "profile");
public static final Field PLUGIN_CLASS_LOADER_PLUGIN_FIELD = getField(PLUGIN_CLASS_LOADER_CLASS, true, "plugin");
}

@ -1,112 +0,0 @@
package de.studiocode.invui.util.reflection;
import org.bukkit.Bukkit;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import static de.studiocode.invui.util.reflection.ReflectionRegistry.*;
public class ReflectionUtils {
protected static String getCB() {
String path = Bukkit.getServer().getClass().getPackage().getName();
String version = path.substring(path.lastIndexOf(".") + 1);
return "org.bukkit.craftbukkit." + version + ".";
}
protected static String getNMS() {
String path = Bukkit.getServer().getClass().getPackage().getName();
String version = path.substring(path.lastIndexOf(".") + 1);
return "net.minecraft.server." + version + ".";
}
protected static int getVersion() {
String version = Bukkit.getVersion();
version = version.substring(version.indexOf("MC: "), version.length() - 1).substring(4);
return Integer.parseInt(version.split("\\.")[1]);
}
public static Class<?> getBukkitClass(String path) {
try {
return Class.forName(BUKKIT_PACKAGE_PATH + path);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
public static Class<?> getNMSClass(String path) {
try {
return Class.forName(NET_MINECRAFT_SERVER_PACKAGE_PATH + path);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
public static Class<?> getCBClass(String path) {
try {
return Class.forName(CRAFT_BUKKIT_PACKAGE_PATH + path);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
public static Field getField(Class<?> clazz, boolean declared, String name) {
try {
Field field = declared ? clazz.getDeclaredField(name) : clazz.getField(name);
if (declared) field.setAccessible(true);
return field;
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
return null;
}
public static Constructor<?> getConstructor(Class<?> clazz, boolean declared, Class<?> parameterTypes) {
try {
return declared ? clazz.getDeclaredConstructor(parameterTypes) : clazz.getConstructor(parameterTypes);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
return null;
}
public static Method getMethod(Class<?> clazz, boolean declared, String name, Class<?>... parameterTypes) {
try {
return declared ? clazz.getDeclaredMethod(name, parameterTypes) : clazz.getMethod(name, parameterTypes);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
return null;
}
public static void setFieldValue(Field field, Object obj, Object value) {
try {
field.set(obj, value);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public static <T> T getFieldValue(Field field, Object obj) {
try {
return (T) field.get(obj);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}

@ -1,6 +1,6 @@
package de.studiocode.invui.virtualinventory;
import de.studiocode.inventoryaccess.api.version.InventoryAccess;
import de.studiocode.inventoryaccess.version.InventoryAccess;
import de.studiocode.invui.InvUI;
import de.studiocode.invui.util.DataUtils;
import org.bukkit.configuration.file.YamlConfiguration;

@ -1,6 +1,6 @@
package de.studiocode.invui.window.impl;
import de.studiocode.inventoryaccess.api.version.InventoryAccess;
import de.studiocode.inventoryaccess.version.InventoryAccess;
import de.studiocode.invui.InvUI;
import de.studiocode.invui.gui.GUI;
import de.studiocode.invui.gui.SlotElement;

@ -1,7 +1,7 @@
package de.studiocode.invui.window.impl.merged.split;
import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.api.version.InventoryAccess;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.version.InventoryAccess;
import de.studiocode.invui.gui.GUI;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent;

@ -1,7 +1,7 @@
package de.studiocode.invui.window.impl.single;
import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.api.version.InventoryAccess;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.version.InventoryAccess;
import de.studiocode.invui.gui.GUI;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent;

@ -26,7 +26,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>api</artifactId>
<artifactId>abstraction</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>

@ -1,7 +1,7 @@
package de.studiocode.inventoryaccess.v1_14_R1.inventory;
import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.api.version.ReflectionUtils;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.util.ReflectionUtils;
import de.studiocode.inventoryaccess.v1_14_R1.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_14_R1.*;
@ -46,9 +46,9 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory
this.renameHandler = renameHandler;
this.player = player;
repairInventory = ReflectionUtils.getValueOfField(REPAIR_INVENTORY_FIELD, this);
resultInventory = ReflectionUtils.getValueOfField(RESULT_INVENTORY_FIELD, this);
ContainerAccess containerAccess = ReflectionUtils.getValueOfField(CONTAINER_ACCESS_FIELD, this);
repairInventory = ReflectionUtils.getFieldValue(REPAIR_INVENTORY_FIELD, this);
resultInventory = ReflectionUtils.getFieldValue(RESULT_INVENTORY_FIELD, this);
ContainerAccess containerAccess = ReflectionUtils.getFieldValue(CONTAINER_ACCESS_FIELD, this);
CraftInventoryAnvil inventory = new CraftInventoryAnvil(containerAccess.getLocation(),
repairInventory, resultInventory, this);

@ -1,6 +1,6 @@
package de.studiocode.inventoryaccess.v1_14_R1.util;
import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.server.v1_14_R1.*;

@ -1,7 +1,7 @@
package de.studiocode.inventoryaccess.v1_14_R1.util;
import de.studiocode.inventoryaccess.api.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.api.version.ReflectionUtils;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.minecraft.server.v1_14_R1.ItemStack;
import net.minecraft.server.v1_14_R1.NBTCompressedStreamTools;
import net.minecraft.server.v1_14_R1.NBTTagCompound;

@ -26,7 +26,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>api</artifactId>
<artifactId>abstraction</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>

@ -1,7 +1,7 @@
package de.studiocode.inventoryaccess.v1_15_R1.inventory;
import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.api.version.ReflectionUtils;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.util.ReflectionUtils;
import de.studiocode.inventoryaccess.v1_15_R1.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_15_R1.*;
@ -46,9 +46,9 @@ public class AnvilInventoryImpl extends ContainerAnvil implements AnvilInventory
this.renameHandler = renameHandler;
this.player = player;
repairInventory = ReflectionUtils.getValueOfField(REPAIR_INVENTORY_FIELD, this);
resultInventory = ReflectionUtils.getValueOfField(RESULT_INVENTORY_FIELD, this);
ContainerAccess containerAccess = ReflectionUtils.getValueOfField(CONTAINER_ACCESS_FIELD, this);
repairInventory = ReflectionUtils.getFieldValue(REPAIR_INVENTORY_FIELD, this);
resultInventory = ReflectionUtils.getFieldValue(RESULT_INVENTORY_FIELD, this);
ContainerAccess containerAccess = ReflectionUtils.getFieldValue(CONTAINER_ACCESS_FIELD, this);
CraftInventoryAnvil inventory = new CraftInventoryAnvil(containerAccess.getLocation(),
repairInventory, resultInventory, this);

@ -1,6 +1,6 @@
package de.studiocode.inventoryaccess.v1_15_R1.util;
import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.server.v1_15_R1.*;

@ -1,7 +1,7 @@
package de.studiocode.inventoryaccess.v1_15_R1.util;
import de.studiocode.inventoryaccess.api.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.api.version.ReflectionUtils;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.minecraft.server.v1_15_R1.ItemStack;
import net.minecraft.server.v1_15_R1.NBTCompressedStreamTools;
import net.minecraft.server.v1_15_R1.NBTTagCompound;

@ -26,7 +26,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>api</artifactId>
<artifactId>abstraction</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>

@ -1,6 +1,6 @@
package de.studiocode.inventoryaccess.v1_16_R1.inventory;
import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.v1_16_R1.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_16_R1.*;

@ -1,6 +1,6 @@
package de.studiocode.inventoryaccess.v1_16_R1.util;
import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.server.v1_16_R1.*;

@ -1,7 +1,7 @@
package de.studiocode.inventoryaccess.v1_16_R1.util;
import de.studiocode.inventoryaccess.api.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.api.version.ReflectionUtils;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.minecraft.server.v1_16_R1.ItemStack;
import net.minecraft.server.v1_16_R1.NBTCompressedStreamTools;
import net.minecraft.server.v1_16_R1.NBTTagCompound;

@ -26,7 +26,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>api</artifactId>
<artifactId>abstraction</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>

@ -1,6 +1,6 @@
package de.studiocode.inventoryaccess.v1_16_R2.inventory;
import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.v1_16_R2.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_16_R2.*;

@ -1,6 +1,6 @@
package de.studiocode.inventoryaccess.v1_16_R2.util;
import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.server.v1_16_R2.*;

@ -1,7 +1,7 @@
package de.studiocode.inventoryaccess.v1_16_R2.util;
import de.studiocode.inventoryaccess.api.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.api.version.ReflectionUtils;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.minecraft.server.v1_16_R2.ItemStack;
import net.minecraft.server.v1_16_R2.NBTCompressedStreamTools;
import net.minecraft.server.v1_16_R2.NBTTagCompound;

@ -26,7 +26,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>api</artifactId>
<artifactId>abstraction</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>

@ -1,6 +1,6 @@
package de.studiocode.inventoryaccess.v1_16_R3.inventory;
import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.v1_16_R3.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_16_R3.*;

@ -1,6 +1,6 @@
package de.studiocode.inventoryaccess.v1_16_R3.util;
import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.server.v1_16_R3.*;

@ -1,7 +1,7 @@
package de.studiocode.inventoryaccess.v1_16_R3.util;
import de.studiocode.inventoryaccess.api.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.api.version.ReflectionUtils;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.minecraft.server.v1_16_R3.ItemStack;
import net.minecraft.server.v1_16_R3.NBTCompressedStreamTools;
import net.minecraft.server.v1_16_R3.NBTTagCompound;

@ -28,7 +28,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>api</artifactId>
<artifactId>abstraction</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>

@ -1,6 +1,6 @@
package de.studiocode.inventoryaccess.v1_17_R1.inventory;
import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.v1_17_R1.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.core.BlockPos;

@ -1,6 +1,6 @@
package de.studiocode.inventoryaccess.v1_17_R1.util;
import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.network.chat.Component;

@ -1,7 +1,7 @@
package de.studiocode.inventoryaccess.v1_17_R1.util;
import de.studiocode.inventoryaccess.api.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.api.version.ReflectionUtils;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtIo;
import net.minecraft.world.item.ItemStack;

@ -28,7 +28,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>api</artifactId>
<artifactId>abstraction</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>

@ -1,6 +1,6 @@
package de.studiocode.inventoryaccess.v1_17_R2.inventory;
import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.v1_17_R2.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.core.BlockPos;

@ -1,6 +1,6 @@
package de.studiocode.inventoryaccess.v1_17_R2.util;
import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.network.chat.Component;

@ -1,7 +1,7 @@
package de.studiocode.inventoryaccess.v1_17_R2.util;
import de.studiocode.inventoryaccess.api.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.api.version.ReflectionUtils;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtIo;
import net.minecraft.world.item.ItemStack;

@ -10,13 +10,13 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>api</artifactId>
<artifactId>abstraction</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.api.abstraction.inventory;
package de.studiocode.inventoryaccess.abstraction.inventory;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.api.abstraction.util;
package de.studiocode.inventoryaccess.abstraction.util;
import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.entity.Player;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.api.abstraction.util;
package de.studiocode.inventoryaccess.abstraction.util;
import org.bukkit.inventory.ItemStack;

@ -0,0 +1,30 @@
package de.studiocode.inventoryaccess.util;
import java.lang.reflect.Field;
import static de.studiocode.inventoryaccess.util.ReflectionUtils.*;
public class ReflectionRegistry {
public static final int VERSION = getVersionNumber();
public static final String INV_ACCESS_VERSION = getInventoryAccessVersion();
public static final String CRAFT_BUKKIT_PACKAGE_PATH = getCB();
public static final String BUKKIT_PACKAGE_PATH = "org.bukkit.";
// Classes
public static final Class<?> CB_CRAFT_META_SKULL_CLASS = getCBClass("inventory.CraftMetaSkull");
public static final Class<?> PLUGIN_CLASS_LOADER_CLASS = getBukkitClass("plugin.java.PluginClassLoader");
public static final Class<?> CB_CRAFT_META_ITEM_CLASS = getCBClass("inventory.CraftMetaItem");
public static final Class<?> CB_CRAFT_ITEM_STACK_CLASS = getCBClass("inventory.CraftItemStack");
// Fields
public static final Field CB_CRAFT_META_SKULL_PROFILE_FIELD = getField(CB_CRAFT_META_SKULL_CLASS, true, "profile");
public static final Field PLUGIN_CLASS_LOADER_PLUGIN_FIELD = getField(PLUGIN_CLASS_LOADER_CLASS, true, "plugin");
public static final Field CB_CRAFT_META_ITEM_INTERNAL_TAG_FIELD = getField(CB_CRAFT_META_ITEM_CLASS, true, "internalTag");
public static final Field CB_CRAFT_META_ITEM_DISPLAY_NAME_FIELD = getField(CB_CRAFT_META_ITEM_CLASS, true, "displayName");
public static final Field CB_CRAFT_META_ITEM_LORE_FIELD = getField(CB_CRAFT_META_ITEM_CLASS, true, "lore");
public static final Field CB_CRAFT_ITEM_STACK_HANDLE_FIELD = ReflectionUtils.getField(CB_CRAFT_ITEM_STACK_CLASS, true, "handle");
}

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.api.version;
package de.studiocode.inventoryaccess.util;
import org.bukkit.Bukkit;
@ -7,12 +7,24 @@ import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@SuppressWarnings({"unchecked", "UnusedReturnValue"})
import static de.studiocode.inventoryaccess.util.ReflectionRegistry.*;
@SuppressWarnings({"unchecked", "unused"})
public class ReflectionUtils {
private static final String VERSION = getVersion();
protected static String getCB() {
String path = Bukkit.getServer().getClass().getPackage().getName();
String version = path.substring(path.lastIndexOf(".") + 1);
return "org.bukkit.craftbukkit." + version + ".";
}
private static String getVersion() {
protected static int getVersionNumber() {
String version = Bukkit.getVersion();
version = version.substring(version.indexOf("MC: "), version.length() - 1).substring(4);
return Integer.parseInt(version.split("\\.")[1]);
}
protected static String getInventoryAccessVersion() {
String version = Bukkit.getVersion();
version = version.substring(version.indexOf("MC: "), version.length() - 1).substring(4);
@ -26,12 +38,20 @@ public class ReflectionUtils {
public static <T> Class<T> getImplClass(String path) {
try {
return (Class<T>) Class.forName("de.studiocode.inventoryaccess." + VERSION + "." + path);
return (Class<T>) Class.forName("de.studiocode.inventoryaccess." + INV_ACCESS_VERSION + "." + path);
} catch (ClassNotFoundException e) {
throw new UnsupportedOperationException("Your version (" + VERSION + ") is not supported by InventoryAccess");
throw new UnsupportedOperationException("Your version (" + INV_ACCESS_VERSION + ") is not supported by InventoryAccess");
}
}
public static <T> Class<T> getBukkitClass(String path) {
return getClass(BUKKIT_PACKAGE_PATH + path);
}
public static <T> Class<T> getCBClass(String path) {
return getClass(CRAFT_BUKKIT_PACKAGE_PATH + path);
}
public static <T> Class<T> getClass(String path) {
try {
return (Class<T>) Class.forName(path);
@ -42,9 +62,21 @@ public class ReflectionUtils {
return null;
}
public static <T> Constructor<T> getConstructor(Class<T> clazz, Class<?>... parameterTypes) {
public static Field getField(Class<?> clazz, boolean declared, String name) {
try {
return clazz.getConstructor(parameterTypes);
Field field = declared ? clazz.getDeclaredField(name) : clazz.getField(name);
if (declared) field.setAccessible(true);
return field;
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
return null;
}
public static <T> Constructor<T> getConstructor(Class<T> clazz, boolean declared, Class<?>... parameterTypes) {
try {
return declared ? clazz.getDeclaredConstructor(parameterTypes) : clazz.getConstructor(parameterTypes);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
@ -72,33 +104,9 @@ public class ReflectionUtils {
return null;
}
public static Field getField(Class<?> clazz, boolean declared, String name) {
try {
Field field = declared ? clazz.getDeclaredField(name) : clazz.getField(name);
if (declared) field.setAccessible(true);
return field;
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
return null;
}
public static <T> T getValueOfField(Field field, Object obj) {
try {
return (T) field.get(obj);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
public static Method getMethod(Class<?> clazz, boolean declared, String name, Class<?>... parameterTypes) {
try {
Method method = declared ? clazz.getDeclaredMethod(name, parameterTypes) : clazz.getMethod(name, parameterTypes);
if (declared) method.setAccessible(true);
return method;
return declared ? clazz.getDeclaredMethod(name, parameterTypes) : clazz.getMethod(name, parameterTypes);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
@ -116,4 +124,23 @@ public class ReflectionUtils {
return null;
}
public static void setFieldValue(Field field, Object obj, Object value) {
try {
field.set(obj, value);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public static <T> T getFieldValue(Field field, Object obj) {
try {
return (T) field.get(obj);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}

@ -1,8 +1,9 @@
package de.studiocode.inventoryaccess.api.version;
package de.studiocode.inventoryaccess.version;
import de.studiocode.inventoryaccess.api.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.api.abstraction.util.InventoryUtils;
import de.studiocode.inventoryaccess.api.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;
import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.entity.Player;
@ -16,7 +17,7 @@ public class InventoryAccess {
private static final Class<AnvilInventory> ANVIL_INVENTORY_CLASS = ReflectionUtils.getImplClass("inventory.AnvilInventoryImpl");
private static final Constructor<AnvilInventory> ANVIL_INVENTORY_CONSTRUCTOR
= ReflectionUtils.getConstructor(ANVIL_INVENTORY_CLASS, Player.class, BaseComponent[].class, Consumer.class);
= ReflectionUtils.getConstructor(ANVIL_INVENTORY_CLASS, false, Player.class, BaseComponent[].class, Consumer.class);
private static final InventoryUtils INVENTORY_UTILS = ReflectionUtils.constructEmpty(INVENTORY_UTILS_CLASS);
private static final ItemUtils ITEM_UTILS = ReflectionUtils.constructEmpty(ITEM_UTILS_CLASS);

@ -36,8 +36,8 @@
<module>InventoryAccess/1_16_R3</module>
<module>InventoryAccess/1_17_R1</module>
<module>InventoryAccess/1_17_R2</module>
<module>InventoryAccess/api</module>
<module>InvUI</module>
<module>InventoryAccess/abstraction</module>
</modules>
<build>