Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 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);
}
16 changes: 16 additions & 0 deletions zip-common/src/main/java/net/imprex/zip/common/BPKey.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package net.imprex.zip.common;

public class BPKey {

public static final String VERSION = "version";

public static final String ID = "id";
public static final String TYPE_RAW = "typeRaw";
public static final String INVENTORY = "inventory";

public static final String INVENTORY_VERSION = "version";
public static final String INVENTORY_DATA_VERSION = "dataVersion";
public static final String INVENTORY_ITEMS = "items";
public static final String INVENTORY_ITEMS_SIZE = "itemsSize";
public static final String 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
@@ -1,16 +1,18 @@
package net.imprex.zip.nms.api;

import java.util.List;

import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;

import com.google.gson.JsonObject;

public interface NmsManager {

byte[] itemstackToBinary(ItemStack[] items);
JsonObject itemstackToJsonElement(ItemStack[] items);

List<ItemStack> binaryToItemStack(byte[] binary);
ItemStack[] jsonElementToItemStack(JsonObject jsonElement);

JsonObject migrateToJsonElement(byte[] binary);

void setSkullProfile(SkullMeta meta, String texture);

Expand Down
Loading