Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/buildtools.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,5 @@ checkVersion "1.20.6" "21"
checkVersion "1.21" "21"
checkVersion "1.21.3" "21"
checkVersion "1.21.4" "21"
checkVersion "1.21.5" "21"
checkVersion "1.21.5" "21"
checkVersion "1.21.6" "21"
2 changes: 2 additions & 0 deletions zip-api/src/main/java/net/imprex/zip/api/ZIPHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@ public interface ZIPHandler {
ZIPBackpackType getBackpackType(ItemStack item);

boolean isBackpack(ItemStack item);

ZIPUniqueId getUniqueId(ItemStack item);
}
19 changes: 19 additions & 0 deletions zip-common/src/main/java/net/imprex/zip/common/BPConstants.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package net.imprex.zip.common;

public class BPConstants {

public static final int VERSION = 2;
public static final int INVENTORY_VERSION = 2;

public static final String KEY_VERSION = "version";

public static final String KEY_ID = "id";
public static final String KEY_TYPE_RAW = "typeRaw";
public static final String KEY_INVENTORY = "inventory";

public static final String KEY_INVENTORY_VERSION = "version";
public static final String KEY_INVENTORY_DATA_VERSION = "dataVersion";
public static final String KEY_INVENTORY_ITEMS = "items";
public static final String KEY_INVENTORY_ITEMS_SIZE = "itemsSize";
public static final String KEY_INVENTORY_SLOT = "ZIPslot";
}
129 changes: 22 additions & 107 deletions zip-common/src/main/java/net/imprex/zip/common/MinecraftVersion.java
Original file line number Diff line number Diff line change
@@ -1,36 +1,36 @@
/**
* @author Imprex-Development
* @see <a href="https://github.com/Imprex-Development/orebfuscator/blob/master/orebfuscator-common/src/main/java/net/imprex/orebfuscator/util/MinecraftVersion.java">MinecraftVersion.java</a>
*/
package net.imprex.zip.common;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.bukkit.Bukkit;

/**
* @author Imprex-Development
* @see https://github.com/Imprex-Development/orebfuscator/blob/master/orebfuscator-common/src/main/java/net/imprex/orebfuscator/util/MinecraftVersion.java
*/
public final class MinecraftVersion implements Comparable<MinecraftVersion> {
public final class MinecraftVersion {

private static final class NmsMapping {

private static final List<NmsMapping> MAPPINGS = new ArrayList<>();

static {
MAPPINGS.add(new NmsMapping("1.21.6", "v1_21_R5"));
MAPPINGS.add(new NmsMapping("1.21.5", "v1_21_R4"));
MAPPINGS.add(new NmsMapping("1.21.4", "v1_21_R3"));
MAPPINGS.add(new NmsMapping("1.21.3", "v1_21_R2"));
MAPPINGS.add(new NmsMapping("1.21", "v1_21_R1"));
MAPPINGS.add(new NmsMapping("1.20.5", "v1_20_R4"));
}

public static String get(MinecraftVersion version) {
public static String get(Version version) {
for (NmsMapping mapping : MAPPINGS) {
if (version.isAtOrAbove(mapping.version)) {
if (mapping.version.minor() != version.minor()) {
System.out.println(String.format("Using nms mapping with mismatched minor versions: %s - %s",
ZIPLogger.warn(String.format("Using nms mapping with mismatched minor versions: %s - %s",
mapping.version, version));
}

Expand All @@ -41,19 +41,17 @@ public static String get(MinecraftVersion version) {
throw new RuntimeException("Can't get nms package version for minecraft version: " + version);
}

private final MinecraftVersion version;
private final Version version;
private final String nmsVersion;

public NmsMapping(String version, String nmsVersion) {
this.version = new MinecraftVersion(version);
this.version = Version.parse(version);
this.nmsVersion = nmsVersion;
}
}

private static final Pattern VERSION_PATTERN = Pattern.compile("(?<major>\\d+)(?:\\.(?<minor>\\d+))(?:\\.(?<patch>\\d+))?");
private static final Pattern PACKAGE_PATTERN = Pattern.compile("org\\.bukkit\\.craftbukkit\\.(v\\d+_\\d+_R\\d+)");

private static final MinecraftVersion CURRENT_VERSION = new MinecraftVersion(Bukkit.getBukkitVersion());
private static final Version CURRENT_VERSION = Version.parse(Bukkit.getBukkitVersion());

private static String NMS_VERSION;

Expand All @@ -72,118 +70,35 @@ public static String nmsVersion() {
return NMS_VERSION;
}

public static Version current() {
return CURRENT_VERSION;
}

public static int majorVersion() {
return CURRENT_VERSION.major;
return CURRENT_VERSION.major();
}

public static int minorVersion() {
return CURRENT_VERSION.minor;
return CURRENT_VERSION.minor();
}

public static int patchVersion() {
return CURRENT_VERSION.patch;
return CURRENT_VERSION.patch();
}

public static boolean isAbove(String version) {
return CURRENT_VERSION.isAbove(new MinecraftVersion(version));
return CURRENT_VERSION.isAbove(Version.parse(version));
}

public static boolean isAtOrAbove(String version) {
return CURRENT_VERSION.isAtOrAbove(new MinecraftVersion(version));
return CURRENT_VERSION.isAtOrAbove(Version.parse(version));
}

public static boolean isAtOrBelow(String version) {
return CURRENT_VERSION.isAtOrBelow(new MinecraftVersion(version));
return CURRENT_VERSION.isAtOrBelow(Version.parse(version));
}

public static boolean isBelow(String version) {
return CURRENT_VERSION.isBelow(new MinecraftVersion(version));
}

private final int major;
private final int minor;
private final int patch;

public MinecraftVersion(String version) {
Matcher matcher = VERSION_PATTERN.matcher(version);

if (!matcher.find()) {
throw new IllegalArgumentException("can't parse minecraft version: " + version);
}

this.major = Integer.parseInt(matcher.group("major"));
this.minor = Integer.parseInt(matcher.group("minor"));

String patch = matcher.group("patch");
if (patch != null) {
this.patch = Integer.parseInt(patch);
} else {
this.patch = 0;
}
}

public int major() {
return this.major;
}

public int minor() {
return this.minor;
}

public int patch() {
return this.patch;
}

public boolean isAbove(MinecraftVersion version) {
return this.compareTo(version) > 0;
}

public boolean isAtOrAbove(MinecraftVersion version) {
return this.compareTo(version) >= 0;
}

public boolean isAtOrBelow(MinecraftVersion version) {
return this.compareTo(version) <= 0;
}

public boolean isBelow(MinecraftVersion version) {
return this.compareTo(version) < 0;
}

@Override
public int compareTo(MinecraftVersion other) {
int major = Integer.compare(this.major, other.major);
if (major != 0) {
return major;
}

int minor = Integer.compare(this.minor, other.minor);
if (minor != 0) {
return minor;
}

return Integer.compare(this.patch, other.patch);
}

@Override
public int hashCode() {
return Objects.hash(major, minor, patch);
}

@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof MinecraftVersion)) {
return false;
}
MinecraftVersion other = (MinecraftVersion) obj;
return major == other.major && minor == other.minor && patch == other.patch;
}

@Override
public String toString() {
return String.format("%s.%s.%s", this.major, this.minor, this.patch);
return CURRENT_VERSION.isBelow(Version.parse(version));
}
}
107 changes: 107 additions & 0 deletions zip-common/src/main/java/net/imprex/zip/common/Version.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
/**
* @author Imprex-Development
* @see <a href="https://github.com/Imprex-Development/orebfuscator/blob/master/orebfuscator-common/src/main/java/net/imprex/orebfuscator/util/Version.java">Version.java</a>
*/
package net.imprex.zip.common;

import java.io.IOException;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;

public record Version(int major, int minor, int patch) implements Comparable<Version> {

private static final Pattern VERSION_PATTERN = Pattern.compile("(?<major>\\d+)(?:\\.(?<minor>\\d+))?(?:\\.(?<patch>\\d+))?");

public static Version parse(String version) {
Matcher matcher = VERSION_PATTERN.matcher(version);

if (!matcher.find()) {
throw new IllegalArgumentException("can't parse version: " + version);
}

int major = Integer.parseInt(matcher.group("major"));

String minorGroup = matcher.group("minor");
int minor = minorGroup != null
? Integer.parseInt(minorGroup)
: 0;

String patchGroup = matcher.group("patch");
int patch = patchGroup != null
? Integer.parseInt(patchGroup)
: 0;

return new Version(major, minor, patch);
}

public boolean isAbove(Version version) {
return this.compareTo(version) > 0;
}

public boolean isAtOrAbove(Version version) {
return this.compareTo(version) >= 0;
}

public boolean isAtOrBelow(Version version) {
return this.compareTo(version) <= 0;
}

public boolean isBelow(Version version) {
return this.compareTo(version) < 0;
}

@Override
public int compareTo(Version other) {
int major = Integer.compare(this.major, other.major);
if (major != 0) {
return major;
}

int minor = Integer.compare(this.minor, other.minor);
if (minor != 0) {
return minor;
}

return Integer.compare(this.patch, other.patch);
}

@Override
public int hashCode() {
return Objects.hash(major, minor, patch);
}

@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof Version)) {
return false;
}
Version other = (Version) obj;
return major == other.major && minor == other.minor && patch == other.patch;
}

@Override
public String toString() {
return String.format("%s.%s.%s", this.major, this.minor, this.patch);
}

public static final class Json extends TypeAdapter<Version> {

@Override
public void write(JsonWriter out, Version value) throws IOException {
out.value(value.toString());
}

@Override
public Version read(JsonReader in) throws IOException {
return Version.parse(in.nextString());
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package net.imprex.zip.util;
package net.imprex.zip.common;

import java.util.logging.Level;
import java.util.logging.Logger;
Expand All @@ -16,6 +16,10 @@ public static void setVerbose(boolean verbose) {
ZIPLogger.verbose = verbose;
}

public static void log(Level level, String message) {
ZIPLogger.logger.log(level, LOG_PREFIX + message);
}

public static void debug(String message) {
if (ZIPLogger.verbose) {
ZIPLogger.logger.log(Level.FINE, LOG_DEBUG_PREFIX + message);
Expand All @@ -30,6 +34,10 @@ public static void warn(String message) {
ZIPLogger.logger.log(Level.WARNING, LOG_PREFIX + message);
}

public static void warn(String message, Throwable throwable) {
ZIPLogger.logger.log(Level.WARNING, LOG_PREFIX + message, throwable);
}

public static void error(String message, Throwable throwable) {
ZIPLogger.logger.log(Level.SEVERE, LOG_PREFIX + message, throwable);
}
Expand Down
1 change: 1 addition & 0 deletions zip-nms/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,6 @@
<module>zip-nms-v1_21_R2</module>
<module>zip-nms-v1_21_R3</module>
<module>zip-nms-v1_21_R4</module>
<module>zip-nms-v1_21_R5</module>
</modules>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package net.imprex.zip.nms.api;

import java.util.List;

public record ItemStackContainerResult(int containerSize, List<ItemStackWithSlot> items) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package net.imprex.zip.nms.api;

import org.bukkit.inventory.ItemStack;

public record ItemStackWithSlot(int slot, ItemStack item) {
}
Loading