diff --git a/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/CapabilityTokenSubclass.java b/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/CapabilityTokenSubclass.java index 01b43a3807..e48903bd12 100644 --- a/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/CapabilityTokenSubclass.java +++ b/fmlloader/src/main/java/net/minecraftforge/fml/common/asm/CapabilityTokenSubclass.java @@ -34,11 +34,10 @@ import cpw.mods.modlauncher.serviceapi.ILaunchPluginService; * } * */ -public class CapabilityTokenSubclass implements ILaunchPluginService { - +public final class CapabilityTokenSubclass implements ILaunchPluginService { private static final String FUNC_NAME = "getType"; private static final String FUNC_DESC = "()Ljava/lang/String;"; - private static final String CAP_INJECT = "net/minecraftforge/common/capabilities/CapabilityToken"; //Don't directly reference this to prevent class loading. + private static final String CAP_INJECT = "net/minecraftforge/common/capabilities/CapabilityToken"; // Don't directly reference this to prevent class loading. @Override public String name() { @@ -56,8 +55,11 @@ public class CapabilityTokenSubclass implements ILaunchPluginService { String internalName = classType.getInternalName(); if (internalName.startsWith("net/minecraft/") || internalName.startsWith("com/mojang/")) return NAY; + + if (internalName.startsWith("net/minecraftforge/common/capabilities/")) + return YAY; - return YAY; + return internalName.contains("$") ? YAY : NAY; // Anonymous subclasses only } @Override @@ -70,7 +72,7 @@ public class CapabilityTokenSubclass implements ILaunchPluginService { } return ComputeFlags.SIMPLE_REWRITE; } else if (CAP_INJECT.equals(classNode.superName)) { - Holder cls = new Holder(); + var cls = new Object() { String value = null; }; SignatureReader reader = new SignatureReader(classNode.signature); // Having a node version of this would probably be useful. reader.accept(new SignatureVisitor(Opcodes.ASM9) { @@ -106,8 +108,4 @@ public class CapabilityTokenSubclass implements ILaunchPluginService { return ComputeFlags.NO_REWRITE; } } - - private static final class Holder { - String value; - } } diff --git a/src/main/java/net/minecraftforge/common/capabilities/CapabilityToken.java b/src/main/java/net/minecraftforge/common/capabilities/CapabilityToken.java index 01faf39986..e53981ed94 100644 --- a/src/main/java/net/minecraftforge/common/capabilities/CapabilityToken.java +++ b/src/main/java/net/minecraftforge/common/capabilities/CapabilityToken.java @@ -10,18 +10,20 @@ import net.minecraftforge.fml.common.asm.CapabilityTokenSubclass; /** * Inspired by {@link com.google.common.reflect.TypeToken TypeToken}, use a subclass to capture * generic types. Then uses {@link CapabilityTokenSubclass a transformer} - * to convert that generic into a string returned by {@link #getType} + * to convert that generic into a string returned by {@link #getType}. * This allows us to know the generic type, without having a hard reference to the * class. * - * Example usage: + *
Example usage:
*{@code
- * public static Capability DATA_HOLDER_CAPABILITY
+ * public static final Capability DATA_HOLDER_CAPABILITY
* = CapabilityManager.get(new CapabilityToken<>(){});
* }
*
*/
public abstract class CapabilityToken