From d6b68d8103cdd9787d33c939100c616cdd6a4589 Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Wed, 12 Aug 2020 17:24:34 +0800 Subject: [PATCH] Offset modern material ordinal. --- .../common/mixin/bukkit/CraftLegacyMixin.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/CraftLegacyMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/CraftLegacyMixin.java index bb6711dd..5ee31443 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/CraftLegacyMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/CraftLegacyMixin.java @@ -11,6 +11,7 @@ import java.util.Arrays; public class CraftLegacyMixin { private static Material[] moddedMaterials; + private static int offset; /** * @author IzzelAliz @@ -19,8 +20,27 @@ public class CraftLegacyMixin { @Overwrite public static Material[] modern_values() { if (moddedMaterials == null) { + int origin = Material.values().length; moddedMaterials = Arrays.stream(Material.values()).filter(it -> !it.isLegacy()).toArray(Material[]::new); + offset = origin - moddedMaterials.length; + } + return Arrays.copyOf(moddedMaterials, moddedMaterials.length); + } + + /** + * @author IzzelAliz + * @reason + */ + @Overwrite + public static int modern_ordinal(Material material) { + if (moddedMaterials == null) { + modern_values(); + } + if (material.isLegacy()) { + throw new NoSuchFieldError("Legacy field ordinal: " + material); + } else { + int ordinal = material.ordinal(); + return ordinal < Material.LEGACY_AIR.ordinal() ? ordinal : ordinal - offset; } - return moddedMaterials; } }