From cab1b9716c817867aea5fc2c7fd220ba5a6ee137 Mon Sep 17 00:00:00 2001 From: tterrag Date: Thu, 25 Apr 2019 19:38:03 -0400 Subject: [PATCH] Fix EnumRarity, make sure extensible enums have at least one factory candidate --- .../minecraft/net/minecraft/item/EnumRarity.java.patch | 8 +++----- .../minecraftforge/common/asm/RuntimeEnumExtender.java | 4 ++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/patches/minecraft/net/minecraft/item/EnumRarity.java.patch b/patches/minecraft/net/minecraft/item/EnumRarity.java.patch index c3f3506a1..e88f6925b 100644 --- a/patches/minecraft/net/minecraft/item/EnumRarity.java.patch +++ b/patches/minecraft/net/minecraft/item/EnumRarity.java.patch @@ -1,9 +1,7 @@ --- a/net/minecraft/item/EnumRarity.java +++ b/net/minecraft/item/EnumRarity.java -@@ -1,8 +1,9 @@ - package net.minecraft.item; +@@ -2,7 +2,7 @@ -+import net.minecraft.tileentity.BannerPattern; import net.minecraft.util.text.TextFormatting; -public enum EnumRarity { @@ -11,12 +9,12 @@ COMMON(TextFormatting.WHITE), UNCOMMON(TextFormatting.YELLOW), RARE(TextFormatting.AQUA), -@@ -13,4 +14,8 @@ +@@ -13,4 +13,8 @@ private EnumRarity(TextFormatting p_i48837_3_) { this.field_77937_e = p_i48837_3_; } + -+ public static BannerPattern create(String enumName, TextFormatting p_i48837_3_) { ++ public static EnumRarity create(String enumName, TextFormatting p_i48837_3_) { + throw new IllegalStateException("Enum not extended"); + } } diff --git a/src/fmllauncher/java/net/minecraftforge/common/asm/RuntimeEnumExtender.java b/src/fmllauncher/java/net/minecraftforge/common/asm/RuntimeEnumExtender.java index 28bf2794a..6bebe03ca 100644 --- a/src/fmllauncher/java/net/minecraftforge/common/asm/RuntimeEnumExtender.java +++ b/src/fmllauncher/java/net/minecraftforge/common/asm/RuntimeEnumExtender.java @@ -88,6 +88,10 @@ public class RuntimeEnumExtender implements ILaunchPluginService { .filter(m -> ((m.access & Opcodes.ACC_STATIC) != 0) && m.name.equals("create") && Type.getReturnType(m.desc).equals(classType)) .collect(Collectors.toList()); + if (candidates.isEmpty()) { + throw new IllegalStateException("IExtensibleEnum has no candidate factory methods: " + classType.getClassName()); + } + candidates.forEach(mtd -> { Type[] args = Type.getArgumentTypes(mtd.desc);