Refactored InventoryAccess

This commit is contained in:
NichtStudioCode 2021-08-23 16:38:57 +02:00
parent 97021078d5
commit d0bddc126b
47 changed files with 203 additions and 82 deletions

@ -45,42 +45,42 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>abstraction</artifactId>
<artifactId>IA</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>1_14_R1</artifactId>
<artifactId>IA-R1</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>1_15_R1</artifactId>
<artifactId>IA-R2</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>1_16_R1</artifactId>
<artifactId>IA-R3</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>1_16_R2</artifactId>
<artifactId>IA-R4</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>1_16_R3</artifactId>
<artifactId>IA-R5</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>1_17_R1</artifactId>
<artifactId>IA-R6</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>1_17_R2</artifactId>
<artifactId>IA-R7</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
</dependencies>

@ -10,7 +10,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>1_14_R1</artifactId>
<artifactId>IA-R1</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
@ -26,7 +26,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>abstraction</artifactId>
<artifactId>IA</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>

@ -1,8 +1,8 @@
package de.studiocode.inventoryaccess.v1_14_R1.inventory;
package de.studiocode.inventoryaccess.r1.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.util.ReflectionUtils;
import de.studiocode.inventoryaccess.v1_14_R1.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.r1.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_14_R1.*;
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_14_R1.util;
package de.studiocode.inventoryaccess.r1.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_14_R1.util;
package de.studiocode.inventoryaccess.r1.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionRegistry;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_14_R1.util;
package de.studiocode.inventoryaccess.r1.util;
import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;

@ -10,7 +10,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>1_15_R1</artifactId>
<artifactId>IA-R2</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
@ -26,7 +26,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>abstraction</artifactId>
<artifactId>IA</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>

@ -1,8 +1,8 @@
package de.studiocode.inventoryaccess.v1_15_R1.inventory;
package de.studiocode.inventoryaccess.r2.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.r2.util.InventoryUtilsImpl;
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.*;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_15_R1.util;
package de.studiocode.inventoryaccess.r2.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_15_R1.util;
package de.studiocode.inventoryaccess.r2.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionRegistry;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_15_R1.util;
package de.studiocode.inventoryaccess.r2.util;
import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;

@ -10,7 +10,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>1_16_R1</artifactId>
<artifactId>IA-R3</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
@ -26,7 +26,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>abstraction</artifactId>
<artifactId>IA</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>

@ -1,7 +1,7 @@
package de.studiocode.inventoryaccess.v1_16_R1.inventory;
package de.studiocode.inventoryaccess.r3.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.v1_16_R1.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.r3.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_16_R1.*;
import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_16_R1.util;
package de.studiocode.inventoryaccess.r3.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_16_R1.util;
package de.studiocode.inventoryaccess.r3.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionRegistry;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_16_R1.util;
package de.studiocode.inventoryaccess.r3.util;
import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;

@ -10,7 +10,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>1_16_R2</artifactId>
<artifactId>IA-R4</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
@ -26,7 +26,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>abstraction</artifactId>
<artifactId>IA</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>

@ -1,7 +1,7 @@
package de.studiocode.inventoryaccess.v1_16_R2.inventory;
package de.studiocode.inventoryaccess.r4.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.v1_16_R2.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.r4.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_16_R2.*;
import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_16_R2.util;
package de.studiocode.inventoryaccess.r4.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_16_R2.util;
package de.studiocode.inventoryaccess.r4.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionRegistry;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_16_R2.util;
package de.studiocode.inventoryaccess.r4.util;
import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;

@ -10,7 +10,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>1_16_R3</artifactId>
<artifactId>IA-R5</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
@ -26,7 +26,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>abstraction</artifactId>
<artifactId>IA</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>

@ -1,7 +1,7 @@
package de.studiocode.inventoryaccess.v1_16_R3.inventory;
package de.studiocode.inventoryaccess.r5.inventory;
import de.studiocode.inventoryaccess.abstraction.inventory.AnvilInventory;
import de.studiocode.inventoryaccess.v1_16_R3.util.InventoryUtilsImpl;
import de.studiocode.inventoryaccess.r5.util.InventoryUtilsImpl;
import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.v1_16_R3.*;
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_16_R3.util;
package de.studiocode.inventoryaccess.r5.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_16_R3.util;
package de.studiocode.inventoryaccess.r5.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionRegistry;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_16_R3.util;
package de.studiocode.inventoryaccess.r5.util;
import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;

@ -10,7 +10,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>1_17_R1</artifactId>
<artifactId>IA-R6</artifactId>
<properties>
<maven.compiler.source>16</maven.compiler.source>
@ -28,7 +28,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>abstraction</artifactId>
<artifactId>IA</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>

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

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_17_R1.util;
package de.studiocode.inventoryaccess.r6.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_17_R1.util;
package de.studiocode.inventoryaccess.r6.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionRegistry;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_17_R1.util;
package de.studiocode.inventoryaccess.r6.util;
import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;

@ -10,7 +10,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>1_17_R2</artifactId>
<artifactId>IA-R7</artifactId>
<properties>
<maven.compiler.source>16</maven.compiler.source>
@ -28,7 +28,7 @@
</dependency>
<dependency>
<groupId>de.studiocode.invui</groupId>
<artifactId>abstraction</artifactId>
<artifactId>IA</artifactId>
<version>${project.parent.version}</version>
</dependency>
</dependencies>

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

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_17_R2.util;
package de.studiocode.inventoryaccess.r7.util;
import de.studiocode.inventoryaccess.abstraction.util.InventoryUtils;
import net.md_5.bungee.api.chat.BaseComponent;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_17_R2.util;
package de.studiocode.inventoryaccess.r7.util;
import de.studiocode.inventoryaccess.abstraction.util.ItemUtils;
import de.studiocode.inventoryaccess.util.ReflectionRegistry;

@ -1,4 +1,4 @@
package de.studiocode.inventoryaccess.v1_17_R2.util;
package de.studiocode.inventoryaccess.r7.util;
import de.studiocode.inventoryaccess.abstraction.util.PlayerUtils;
import de.studiocode.inventoryaccess.util.ReflectionUtils;

@ -10,7 +10,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>abstraction</artifactId>
<artifactId>IA</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>

@ -8,7 +8,6 @@ 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.";

@ -1,5 +1,6 @@
package de.studiocode.inventoryaccess.util;
import de.studiocode.inventoryaccess.version.InventoryAccessRevision;
import org.bukkit.Bukkit;
import java.lang.reflect.Constructor;
@ -7,7 +8,8 @@ import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import static de.studiocode.inventoryaccess.util.ReflectionRegistry.*;
import static de.studiocode.inventoryaccess.util.ReflectionRegistry.BUKKIT_PACKAGE_PATH;
import static de.studiocode.inventoryaccess.util.ReflectionRegistry.CRAFT_BUKKIT_PACKAGE_PATH;
@SuppressWarnings({"unchecked", "unused"})
public class ReflectionUtils {
@ -24,24 +26,14 @@ public class ReflectionUtils {
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);
if (version.equals("1.17.1")) {
return "v1_17_R2"; // TODO: find a better solution
} else {
String path = Bukkit.getServer().getClass().getPackage().getName();
return path.substring(path.lastIndexOf(".") + 1);
}
}
public static <T> Class<T> getImplClass(String path) {
try {
return (Class<T>) Class.forName("de.studiocode.inventoryaccess." + INV_ACCESS_VERSION + "." + path);
return (Class<T>) Class.forName("de.studiocode.inventoryaccess." + InventoryAccessRevision.REQUIRED_REVISION.getPackageName() + "." + path);
} catch (ClassNotFoundException e) {
throw new UnsupportedOperationException("Your version (" + INV_ACCESS_VERSION + ") is not supported by InventoryAccess");
e.printStackTrace();
}
return null;
}
public static <T> Class<T> getBukkitClass(String path) {

@ -0,0 +1,89 @@
package de.studiocode.inventoryaccess.util;
import com.google.common.base.Preconditions;
import org.bukkit.Bukkit;
public class VersionUtils {
private static final int major;
private static final int minor;
private static final int patch;
static {
String version = Bukkit.getVersion();
version = version.substring(version.indexOf(':') + 2, version.lastIndexOf(')'));
int[] parts = toMajorMinorPatch(version);
major = parts[0];
minor = parts[1];
patch = parts[2];
}
/**
* Converts a version string like "1.17.1" or "1.17" to an array of three ints.
*
* @param version The version to check against
* @return The version as an array of three ints.
* @throws NumberFormatException If an invalid version string is provided.
*/
public static int[] toMajorMinorPatch(String version) {
String[] parts = version.split("\\.");
int major = parts.length > 0 ? Integer.parseInt(parts[0]) : 0;
int minor = parts.length > 1 ? Integer.parseInt(parts[1]) : 0;
int patch = parts.length > 2 ? Integer.parseInt(parts[2]) : 0;
return new int[] {major, minor, patch};
}
/**
* Returns if the given version is higher or equal to the one currently running on the server.
*
* @param version The version to check against
* @return If the given version is running on this server or a newer one.
*/
public static boolean isHigherOrEqualThanServer(String version) {
return isHigherOrEqualThanServer(toMajorMinorPatch(version));
}
/**
* Returns if the given version is higher or equal to the one currently running on the server.
*
* @param version The version to check against
* @return If the given version is running on this server or a newer one.
* @throws IllegalArgumentException If the version array does not have a size of 3
*/
public static boolean isHigherOrEqualThanServer(int... version) {
Preconditions.checkArgument(version.length == 3);
return version[0] > major
|| (version[0] == major && version[1] > minor)
|| (version[0] == major && version[1] == minor && version[2] >= patch);
}
/**
* Returns if the server is on this or a newer version of Minecraft.
*
* @param version The version to check against
* @return If the server is running this exact or a newer version of Minecraft.
*/
public static boolean isServerHigherOrEqual(String version) {
return isServerHigherOrEqual(toMajorMinorPatch(version));
}
/**
* Returns if the server is on this or a newer version of Minecraft.
*
* @param version The version to check against
* @return If the server is running this exact or a newer version of Minecraft.
* @throws IllegalArgumentException If the version array does not have a size of 3
*/
public static boolean isServerHigherOrEqual(int... version) {
Preconditions.checkArgument(version.length == 3);
return major > version[0]
|| (major == version[0] && minor > version[1])
|| (major == version[0] && minor == version[1] && patch >= version[2]);
}
}

@ -0,0 +1,41 @@
package de.studiocode.inventoryaccess.version;
import de.studiocode.inventoryaccess.util.VersionUtils;
public enum InventoryAccessRevision {
// this order is required
R7("r7", "1.17.1"),
R6("r6", "1.17.0"),
R5("r5", "1.16.4"),
R4("r4", "1.16.2"),
R3("r3", "1.16.0"),
R2("r2", "1.15.0"),
R1("r1", "1.14.0");
public static final InventoryAccessRevision REQUIRED_REVISION = getRequiredRevision();
private final String packageName;
private final int[] since;
InventoryAccessRevision(String packageName, String since) {
this.packageName = packageName;
this.since = VersionUtils.toMajorMinorPatch(since);
}
public String getPackageName() {
return packageName;
}
public int[] getSince() {
return since;
}
private static InventoryAccessRevision getRequiredRevision() {
for (InventoryAccessRevision revision : values())
if (VersionUtils.isServerHigherOrEqual(revision.getSince())) return revision;
throw new UnsupportedOperationException("Your version of Minecraft is not supported by InventoryAccess");
}
}

16
pom.xml

@ -29,15 +29,15 @@
</repositories>
<modules>
<module>InventoryAccess/1_14_R1</module>
<module>InventoryAccess/1_15_R1</module>
<module>InventoryAccess/1_16_R1</module>
<module>InventoryAccess/1_16_R2</module>
<module>InventoryAccess/1_16_R3</module>
<module>InventoryAccess/1_17_R1</module>
<module>InventoryAccess/1_17_R2</module>
<module>InventoryAccess/IA-R1</module>
<module>InventoryAccess/IA-R2</module>
<module>InventoryAccess/IA-R3</module>
<module>InventoryAccess/IA-R4</module>
<module>InventoryAccess/IA-R5</module>
<module>InventoryAccess/IA-R6</module>
<module>InventoryAccess/IA-R7</module>
<module>InventoryAccess/IA</module>
<module>InvUI</module>
<module>InventoryAccess/abstraction</module>
</modules>
<build>