From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Samsuik <40902469+Samsuik@users.noreply.github.com> Date: Tue, 21 Nov 2023 14:53:27 +0000 Subject: [PATCH] Add physics version API diff --git a/src/main/java/me/samsuik/sakura/local/LocalValueKey.java b/src/main/java/me/samsuik/sakura/local/LocalValueKey.java index adb2048a02e71433618b26a14f4c71f0e26fe943..f80f7f299c2208c5160bcf763f686f7bd6375eec 100644 --- a/src/main/java/me/samsuik/sakura/local/LocalValueKey.java +++ b/src/main/java/me/samsuik/sakura/local/LocalValueKey.java @@ -1,5 +1,6 @@ package me.samsuik.sakura.local; +import me.samsuik.sakura.physics.PhysicsVersion; import org.bukkit.NamespacedKey; import org.jspecify.annotations.NullMarked; @@ -9,6 +10,9 @@ import java.util.function.Supplier; @NullMarked public record LocalValueKey(NamespacedKey key, Supplier defaultSupplier) { // ... + public static final LocalValueKey PHYSICS_VERSION = new LocalValueKey<>( + new NamespacedKey("sakura", "physics-version"), () -> PhysicsVersion.LATEST + ); @Override public boolean equals(Object o) { diff --git a/src/main/java/me/samsuik/sakura/physics/PhysicsVersion.java b/src/main/java/me/samsuik/sakura/physics/PhysicsVersion.java new file mode 100644 index 0000000000000000000000000000000000000000..685fefb4ac36153f038b28452e3b29ded52cff07 --- /dev/null +++ b/src/main/java/me/samsuik/sakura/physics/PhysicsVersion.java @@ -0,0 +1,74 @@ +package me.samsuik.sakura.physics; + +import org.jspecify.annotations.NullMarked; + +@NullMarked +public enum PhysicsVersion { + LEGACY("legacy", 1_0_0), // replicates patched 1.8.8 paper mechanics + v1_8_2("1.8.2", 1_8_2), // vanilla mechanics + v1_9("1.9", 1_9_0), + v1_10("1.10", 1_10_0), + v1_11("1.11", 1_11_0), + v1_12("1.12", 1_12_0), + v1_13("1.13", 1_13_0), + v1_14("1.14", 1_14_0), + v1_16("1.16", 1_16_0), + v1_17("1.17", 1_17_0), + v1_18_2("1.18.2", 1_18_2), + v1_19_3("1.19.3", 1_19_3), + v1_20("1.20", 1_20_0), + v1_21_2("1.21.2", 1_21_2), + LATEST("latest", 9_99_9); // latest version + + private final String friendlyName; + private final int version; + + PhysicsVersion(String friendlyName, int version) { + this.friendlyName = friendlyName; + this.version = version; + } + + public boolean isLegacy() { + return this == LEGACY; + } + + public boolean afterOrEqual(int version) { + return this.version >= version; + } + + public boolean before(int version) { + return this.version < version; + } + + public boolean is(int version) { + return this.version == version; + } + + public boolean isWithin(int min, int max) { + return this.version >= min && this.version <= max; + } + + public int getVersion() { + return this.version; + } + + public String getFriendlyName() { + return this.friendlyName; + } + + public static PhysicsVersion from(String string) { + int parsedVersion = Integer.MIN_VALUE; + try { + String versionString = string.replace(".", ""); + parsedVersion = Integer.parseInt(versionString); + } catch (NumberFormatException nfe) { + // ignored + } + for (PhysicsVersion ver : values()) { + if (ver.name().equalsIgnoreCase(string) || ver.getFriendlyName().equalsIgnoreCase(string) || ver.is(parsedVersion)) { + return ver; + } + } + return LATEST; + } +}