Offset modern material ordinal.

This commit is contained in:
IzzelAliz 2020-08-12 17:24:34 +08:00
parent cf404d6d85
commit d6b68d8103

View File

@ -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;
}
}