From df1f294776bd7e8851d3e5eb3742db0f9353edbf Mon Sep 17 00:00:00 2001 From: FalsePattern Date: Mon, 26 May 2025 09:42:01 +0200 Subject: [PATCH] Deprecate the StableAPI annotations, switch to JB annotations --- README.MD | 4 - .../falsepattern/lib/DeprecationDetails.java | 22 +++- .../java/com/falsepattern/lib/StableAPI.java | 21 +++- .../com/falsepattern/lib/asm/ASMUtil.java | 13 --- .../lib/asm/IClassNodeTransformer.java | 10 +- .../lib/asm/SmartTransformer.java | 8 +- .../exceptions/AsmClassNotFoundException.java | 5 +- .../exceptions/AsmFieldNotFoundException.java | 5 +- .../AsmMethodNotFoundException.java | 4 +- .../asm/exceptions/AsmTransformException.java | 6 - .../lib/asm/exceptions/package-info.java | 26 +++++ .../falsepattern/lib/asm/package-info.java | 26 +++++ .../com/falsepattern/lib/compat/BlockPos.java | 66 ++--------- .../com/falsepattern/lib/compat/ChunkPos.java | 12 -- .../com/falsepattern/lib/compat/GuiLabel.java | 14 +-- .../com/falsepattern/lib/compat/Rotation.java | 13 +-- .../com/falsepattern/lib/compat/Vec3i.java | 12 -- .../falsepattern/lib/compat/package-info.java | 26 +++++ .../com/falsepattern/lib/config/Config.java | 103 +++++++++--------- .../lib/config/ConfigException.java | 9 +- .../lib/config/ConfigurationManager.java | 38 ++++--- .../lib/config/SimpleGuiConfig.java | 16 ++- .../lib/config/SimpleGuiFactory.java | 6 +- .../lib/config/event/AllConfigSyncEvent.java | 15 +-- .../lib/config/event/ConfigSyncEvent.java | 21 ++-- .../config/event/ConfigSyncRequestEvent.java | 14 +-- .../event/ConfigValidationFailureEvent.java | 52 +++------ .../lib/config/event/package-info.java | 26 +++++ .../falsepattern/lib/config/package-info.java | 26 +++++ .../lib/dependencies/ComplexVersion.java | 3 - .../lib/dependencies/DependencyLoader.java | 11 +- .../lib/dependencies/Library.java | 35 ++---- .../lib/dependencies/SemanticVersion.java | 38 +++---- .../lib/dependencies/Version.java | 4 - .../lib/dependencies/package-info.java | 26 +++++ .../lib/internal/asm/FPTransformer.java | 2 - .../lib/internal/asm/package-info.java | 26 +++++ .../asm/transformers/package-info.java | 26 +++++ .../internal/config/ConfigEngineConfig.java | 7 +- .../lib/internal/config/EarlyConfig.java | 3 - .../lib/internal/config/ToastConfig.java | 5 +- .../lib/internal/config/package-info.java | 26 +++++ .../lib/internal/core/package-info.java | 26 +++++ .../impl/config/event/package-info.java | 26 +++++ .../impl/config/fields/package-info.java | 26 +++++ .../impl/config/net/package-info.java | 26 +++++ .../internal/impl/config/package-info.java | 26 +++++ .../internal/impl/dependencies/DepRoot.java | 9 -- .../impl/dependencies/package-info.java | 26 +++++ .../lib/internal/impl/mixin/package-info.java | 26 +++++ .../internal/impl/optifine/package-info.java | 26 +++++ .../lib/internal/impl/package-info.java | 26 +++++ .../lib/internal/impl/toast/package-info.java | 26 +++++ .../lib/internal/logging/package-info.java | 26 +++++ .../lib/internal/package-info.java | 26 +++++ .../lib/internal/proxy/package-info.java | 26 +++++ .../lib/internal/render/package-info.java | 26 +++++ .../lib/mapping/MappingManager.java | 6 - .../lib/mapping/package-info.java | 26 +++++ .../lib/mapping/storage/Lookup.java | 9 +- .../lib/mapping/storage/MappedString.java | 10 -- .../lib/mapping/types/MappingType.java | 9 +- .../lib/mapping/types/NameType.java | 7 +- .../lib/mapping/types/UniversalClass.java | 12 +- .../lib/mapping/types/UniversalField.java | 11 +- .../lib/mapping/types/UniversalMethod.java | 17 +-- .../lib/mapping/types/package-info.java | 26 +++++ .../com/falsepattern/lib/mixin/IMixin.java | 27 ++--- .../falsepattern/lib/mixin/IMixinPlugin.java | 37 +++---- .../falsepattern/lib/mixin/ITargetedMod.java | 11 -- .../lib/mixin/MinecraftURLClassPath.java | 5 +- .../com/falsepattern/lib/mixin/MixinInfo.java | 43 ++++---- .../lib/mixin/MixinInfoCompatCompanion.java | 7 +- .../falsepattern/lib/mixin/package-info.java | 26 +++++ .../optifine/OptiFineTransformerHooks.java | 5 +- .../falsepattern/lib/text/FormattedText.java | 16 +-- .../com/falsepattern/lib/toasts/GuiToast.java | 5 - .../com/falsepattern/lib/toasts/IToast.java | 9 -- .../falsepattern/lib/toasts/SimpleToast.java | 5 - .../falsepattern/lib/toasts/icon/ToastBG.java | 11 -- .../lib/toasts/icon/ToastIcon.java | 4 - .../lib/toasts/icon/ToastTexture.java | 9 +- .../lib/toasts/icon/package-info.java | 26 +++++ .../falsepattern/lib/toasts/package-info.java | 26 +++++ .../lib/turboasm/ClassHeaderMetadata.java | 52 --------- .../lib/turboasm/ClassNodeHandle.java | 18 --- .../lib/turboasm/FastClassAccessor.java | 16 --- .../turboasm/MergeableTurboTransformer.java | 2 - .../lib/turboasm/TransformerUtil.java | 2 + .../lib/turboasm/TurboClassTransformer.java | 7 -- .../lib/turboasm/package-info.java | 25 +++++ .../com/falsepattern/lib/util/FileUtil.java | 10 +- .../com/falsepattern/lib/util/LangUtil.java | 8 +- .../com/falsepattern/lib/util/MathUtil.java | 61 +---------- .../com/falsepattern/lib/util/RenderUtil.java | 19 ++-- .../falsepattern/lib/util/ResourceUtil.java | 12 +- 96 files changed, 1079 insertions(+), 762 deletions(-) create mode 100644 src/main/java/com/falsepattern/lib/asm/exceptions/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/asm/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/compat/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/config/event/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/config/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/dependencies/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/asm/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/asm/transformers/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/config/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/core/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/impl/config/event/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/impl/config/fields/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/impl/config/net/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/impl/config/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/impl/dependencies/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/impl/mixin/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/impl/optifine/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/impl/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/impl/toast/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/logging/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/proxy/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/internal/render/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/mapping/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/mapping/types/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/mixin/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/toasts/icon/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/toasts/package-info.java create mode 100644 src/main/java/com/falsepattern/lib/turboasm/package-info.java diff --git a/README.MD b/README.MD index be66d35..bdcc7ed 100644 --- a/README.MD +++ b/README.MD @@ -2,7 +2,6 @@ A library for 1.7.10 with lots of useful stuff, licensed under the LGPLv3 licens | Package | Contents / Purpose | |-----------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------| -| [.](src/main/java/com/falsepattern/lib) | StableAPI and DeprecationDetails annotations | | [asm](src/main/java/com/falsepattern/lib/asm) | ASM helper code | | [compat](src/main/java/com/falsepattern/lib/compat) | Code backported from vanilla 1.12.2 | | [config](src/main/java/com/falsepattern/lib/config) | 1.12.2-style annotation-based config library | @@ -26,8 +25,5 @@ The contents of the [util](src/main/java/com/falsepattern/lib/util) package so f | [RenderUtil](src/main/java/com/falsepattern/lib/util/RenderUtil.java) | Rendering tools. Currently, the only thing implemented is a way to grab the current partial tick time from the minecraft instance | | [ResourceUtil](src/main/java/com/falsepattern/lib/util/ResourceUtil.java) | Methods for efficiently retrieving resources from SPECIFIC jar files instead of the entire classpath | -See the [@StableAPI](src/main/java/com/falsepattern/lib/StableAPI.java) annotation's javadoc for more information about -API stability. - The update checker module and the library downloader module can be toggled with the `ENABLE_UPDATE_CHECKER` and `ENABLE_LIBRARY_DOWNLOADS` booleans in the `falsepatternlib.cfg` config file respectively. diff --git a/src/main/java/com/falsepattern/lib/DeprecationDetails.java b/src/main/java/com/falsepattern/lib/DeprecationDetails.java index 6c7e90e..dc9eb4a 100644 --- a/src/main/java/com/falsepattern/lib/DeprecationDetails.java +++ b/src/main/java/com/falsepattern/lib/DeprecationDetails.java @@ -27,23 +27,33 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** + * DEPRECATED: Use the jetbrains annotations/jspecify instead! + *

* Used together with {@link Deprecated} to specify when an API was marked stable, and when it was marked for deprecation. * Deprecated classes MAY be removed after a full deprecation cycle as described inside the {@link StableAPI} javadoc. + * @since 0.10.0 */ +@Deprecated(since = "1.7.0") @Documented @Retention(RetentionPolicy.RUNTIME) -@StableAPI(since = "0.10.0") public @interface DeprecationDetails { - @StableAPI.Expose String deprecatedSince(); - - @StableAPI.Expose(since = "0.11.0") String replacement() default ""; + String deprecatedSince(); /** - * This marks an API for removal in a future version. + * @since 0.11.0 */ + String replacement() default ""; + + /** + * DEPRECATED: Use the jetbrains annotations/jspecify instead! + *

+ * This marks an API for removal in a future version. + * + * @since 0.12.0 + */ + @Deprecated(since = "1.7.0") @Documented @Retention(RetentionPolicy.RUNTIME) - @StableAPI(since = "0.12.0") @interface RemovedInVersion { String value(); } diff --git a/src/main/java/com/falsepattern/lib/StableAPI.java b/src/main/java/com/falsepattern/lib/StableAPI.java index 30c171a..c70d592 100644 --- a/src/main/java/com/falsepattern/lib/StableAPI.java +++ b/src/main/java/com/falsepattern/lib/StableAPI.java @@ -28,6 +28,8 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** + * DEPRECATED: Use the jetbrains annotations/jspecify instead! + *

* Anything annotated with this annotation will be considered stable, and the class/method/field will not get breaking * changes without a full deprecation cycle. *

@@ -52,18 +54,21 @@ import java.lang.annotation.Target; * is highly experimental and may be removed or change at any time, however, using it in third party projects is not an * error, unlike __INTERNAL__, but if any issues arise from the usage of the API or the API changing, the API developer * shall not be blamed for it. + * @since 0.6.0 */ +@Deprecated(since = "1.7.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) -@StableAPI(since = "0.6.0") public @interface StableAPI { /** * The version this API was introduced/stabilized in. Used for library version tracking. */ - @StableAPI.Expose String since(); + String since(); /** + * DEPRECATED: Use the jetbrains annotations/jspecify instead! + *

* You may use this annotation if you want a member to have an equal effective {@link #since()} value as its owner * class. *

@@ -72,24 +77,30 @@ public @interface StableAPI { *

* Also note that this only works for class members (methods and fields), * inner classes still need to use {@link StableAPI}. + * + * @since 0.10.0 */ + @Deprecated(since = "1.7.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR}) - @StableAPI(since = "0.10.0") @interface Expose { - @StableAPI.Expose String since() default "__PARENT__"; + String since() default "__PARENT__"; } /** + * DEPRECATED: Use the jetbrains annotations/jspecify instead! + *

* Use this if you want to explicitly mark specific members of a {@link StableAPI} class as internal-use only. *

* Library consumers should never use class members marked with this annotation, as said members can be freely * changed or removed in any version in the library without prior notice. + * + * @since 0.10.0 */ + @Deprecated(since = "1.7.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR}) - @StableAPI(since = "0.10.0") @interface Internal {} } diff --git a/src/main/java/com/falsepattern/lib/asm/ASMUtil.java b/src/main/java/com/falsepattern/lib/asm/ASMUtil.java index cb78b1b..305b38b 100644 --- a/src/main/java/com/falsepattern/lib/asm/ASMUtil.java +++ b/src/main/java/com/falsepattern/lib/asm/ASMUtil.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.asm; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.asm.exceptions.AsmClassNotFoundException; import com.falsepattern.lib.asm.exceptions.AsmFieldNotFoundException; import com.falsepattern.lib.asm.exceptions.AsmMethodNotFoundException; @@ -44,9 +43,7 @@ import org.objectweb.asm.tree.MethodNode; import java.util.Arrays; import java.util.Objects; -@StableAPI(since = "0.10.0") public class ASMUtil { - @StableAPI.Expose public static FieldNode findFieldStandard(ClassNode cn, String name, boolean optional) { for (final FieldNode ret : cn.fields) { if (name.equals(ret.name)) { @@ -60,7 +57,6 @@ public class ASMUtil { } @SneakyThrows - @StableAPI.Expose public static FieldNode findFieldFromMCP(ClassNode cn, String fieldName, boolean optional) { val classMapping = discoverClassMappingType(cn); if (classMapping == null) { @@ -76,7 +72,6 @@ public class ASMUtil { optional); } - @StableAPI.Expose public static FieldNode findFieldFromUniversal(ClassNode cn, UniversalField field, boolean optional) { String[] possibilities = CoreLoadingPlugin.isObfuscated() ? new String[]{field.getName(MappingType.SRG), field.getName(MappingType.Notch)} @@ -93,7 +88,6 @@ public class ASMUtil { possibilities.length == 1 ? possibilities[0] : Arrays.toString(possibilities)); } - @StableAPI.Expose public static MethodNode findMethodStandard(ClassNode cn, String name, String descriptor, boolean optional) { for (final MethodNode ret : cn.methods) { if (name.equals(ret.name) && descriptor.equals(ret.desc)) { @@ -107,7 +101,6 @@ public class ASMUtil { } @SneakyThrows - @StableAPI.Expose public static MethodNode findMethodFromMCP(ClassNode cn, String mcpName, String mcpDescriptor, boolean optional) { val classMapping = discoverClassMappingType(cn); if (classMapping == null) { @@ -121,7 +114,6 @@ public class ASMUtil { return findMethodStandard(cn, method.getName(classMapping), method.getDescriptor(classMapping), optional); } - @StableAPI.Expose public static MethodNode findMethodFromUniversal(ClassNode cn, UniversalMethod method, boolean optional) { String[] possibleNames = CoreLoadingPlugin.isObfuscated() ? new String[]{method.getName(MappingType.SRG), method.getName(MappingType.Notch)} @@ -142,7 +134,6 @@ public class ASMUtil { possibleDescriptors.length == 1 ? possibleDescriptors[0] : Arrays.toString(possibleDescriptors)); } - @StableAPI.Expose public static MappingType discoverClassMappingType(ClassNode cn) { if (!CoreLoadingPlugin.isObfuscated()) { if (MappingManager.containsClass(NameType.Internal, MappingType.MCP, cn.name)) { @@ -156,7 +147,6 @@ public class ASMUtil { return null; } - @StableAPI.Expose public static UniversalClass toUniversalClass(ClassNode cn) { if (!CoreLoadingPlugin.isObfuscated()) { try { @@ -177,7 +167,6 @@ public class ASMUtil { } } - @StableAPI.Expose public static ClassNode parseClass(byte[] bytes, int readerFlags) { val cn = new ClassNode(Opcodes.ASM5); val reader = new ClassReader(bytes); @@ -185,14 +174,12 @@ public class ASMUtil { return cn; } - @StableAPI.Expose public static byte[] serializeClass(ClassNode cn, int writerFlags) { val writer = new ClassWriter(writerFlags); cn.accept(writer); return writer.toByteArray(); } - @StableAPI.Expose public static boolean anyEquals(String str, String... options) { for (val option : options) { if (Objects.equals(str, option)) { diff --git a/src/main/java/com/falsepattern/lib/asm/IClassNodeTransformer.java b/src/main/java/com/falsepattern/lib/asm/IClassNodeTransformer.java index de9579d..6d88365 100644 --- a/src/main/java/com/falsepattern/lib/asm/IClassNodeTransformer.java +++ b/src/main/java/com/falsepattern/lib/asm/IClassNodeTransformer.java @@ -21,29 +21,21 @@ */ package com.falsepattern.lib.asm; -import com.falsepattern.lib.DeprecationDetails; -import com.falsepattern.lib.StableAPI; import org.objectweb.asm.tree.ClassNode; /** * See: {@link com.falsepattern.lib.turboasm.TurboClassTransformer}. * This class will not be removed, for backwards compatibility reasons. */ -@StableAPI(since = "0.10.0") -@Deprecated -@DeprecationDetails(deprecatedSince = "1.2.0") +@Deprecated(since = "1.2.0") public interface IClassNodeTransformer { - @StableAPI.Expose String getName(); - @StableAPI.Expose boolean shouldTransform(ClassNode cn, String transformedName, boolean obfuscated); - @StableAPI.Expose default int internalSortingOrder() { return 0; } - @StableAPI.Expose void transform(ClassNode cn, String transformedName, boolean obfuscated); } diff --git a/src/main/java/com/falsepattern/lib/asm/SmartTransformer.java b/src/main/java/com/falsepattern/lib/asm/SmartTransformer.java index 4c1b636..5373813 100644 --- a/src/main/java/com/falsepattern/lib/asm/SmartTransformer.java +++ b/src/main/java/com/falsepattern/lib/asm/SmartTransformer.java @@ -21,8 +21,6 @@ */ package com.falsepattern.lib.asm; -import com.falsepattern.lib.DeprecationDetails; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.asm.CoreLoadingPlugin; import lombok.val; import org.apache.logging.log4j.Logger; @@ -39,14 +37,10 @@ import java.util.List; * See: {@link com.falsepattern.lib.turboasm.MergeableTurboTransformer}. * This class will not be removed, for backwards compatibility reasons. */ -@StableAPI(since = "0.10.0") -@Deprecated -@DeprecationDetails(deprecatedSince = "1.2.0") +@Deprecated(since = "1.2.0") public interface SmartTransformer extends IClassTransformer { - @StableAPI.Expose Logger logger(); - @StableAPI.Expose List transformers(); @Override diff --git a/src/main/java/com/falsepattern/lib/asm/exceptions/AsmClassNotFoundException.java b/src/main/java/com/falsepattern/lib/asm/exceptions/AsmClassNotFoundException.java index d92e75e..3d94566 100644 --- a/src/main/java/com/falsepattern/lib/asm/exceptions/AsmClassNotFoundException.java +++ b/src/main/java/com/falsepattern/lib/asm/exceptions/AsmClassNotFoundException.java @@ -21,11 +21,10 @@ */ package com.falsepattern.lib.asm.exceptions; -import com.falsepattern.lib.StableAPI; +import org.jetbrains.annotations.ApiStatus; -@StableAPI(since = "0.10.0") public class AsmClassNotFoundException extends AsmTransformException { - @StableAPI.Internal + @ApiStatus.Internal public AsmClassNotFoundException(final String clazz) { super("can't find class " + clazz); } diff --git a/src/main/java/com/falsepattern/lib/asm/exceptions/AsmFieldNotFoundException.java b/src/main/java/com/falsepattern/lib/asm/exceptions/AsmFieldNotFoundException.java index d9f40a0..40676f8 100644 --- a/src/main/java/com/falsepattern/lib/asm/exceptions/AsmFieldNotFoundException.java +++ b/src/main/java/com/falsepattern/lib/asm/exceptions/AsmFieldNotFoundException.java @@ -21,11 +21,10 @@ */ package com.falsepattern.lib.asm.exceptions; -import com.falsepattern.lib.StableAPI; +import org.jetbrains.annotations.ApiStatus; -@StableAPI(since = "0.10.0") public class AsmFieldNotFoundException extends AsmTransformException { - @StableAPI.Internal + @ApiStatus.Internal public AsmFieldNotFoundException(final String field) { super("can't find field " + field); } diff --git a/src/main/java/com/falsepattern/lib/asm/exceptions/AsmMethodNotFoundException.java b/src/main/java/com/falsepattern/lib/asm/exceptions/AsmMethodNotFoundException.java index 5cbc078..5bebf81 100644 --- a/src/main/java/com/falsepattern/lib/asm/exceptions/AsmMethodNotFoundException.java +++ b/src/main/java/com/falsepattern/lib/asm/exceptions/AsmMethodNotFoundException.java @@ -21,10 +21,10 @@ */ package com.falsepattern.lib.asm.exceptions; -import com.falsepattern.lib.StableAPI; +import org.jetbrains.annotations.ApiStatus; -@StableAPI(since = "0.10.0") public class AsmMethodNotFoundException extends AsmTransformException { + @ApiStatus.Internal public AsmMethodNotFoundException(final String method) { super("can't find method " + method); } diff --git a/src/main/java/com/falsepattern/lib/asm/exceptions/AsmTransformException.java b/src/main/java/com/falsepattern/lib/asm/exceptions/AsmTransformException.java index 2f74b59..99422bd 100644 --- a/src/main/java/com/falsepattern/lib/asm/exceptions/AsmTransformException.java +++ b/src/main/java/com/falsepattern/lib/asm/exceptions/AsmTransformException.java @@ -21,21 +21,15 @@ */ package com.falsepattern.lib.asm.exceptions; -import com.falsepattern.lib.StableAPI; - -@StableAPI(since = "0.10.0") public class AsmTransformException extends RuntimeException { - @StableAPI.Expose public AsmTransformException(final String message) { super(message); } - @StableAPI.Expose public AsmTransformException(final Throwable cause) { super(cause); } - @StableAPI.Expose public AsmTransformException(final String message, final Throwable cause) { super(message, cause); } diff --git a/src/main/java/com/falsepattern/lib/asm/exceptions/package-info.java b/src/main/java/com/falsepattern/lib/asm/exceptions/package-info.java new file mode 100644 index 0000000..70d41fb --- /dev/null +++ b/src/main/java/com/falsepattern/lib/asm/exceptions/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +/** + * @since 0.10.0 + */ +package com.falsepattern.lib.asm.exceptions; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/asm/package-info.java b/src/main/java/com/falsepattern/lib/asm/package-info.java new file mode 100644 index 0000000..c6c9e02 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/asm/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +/** + * @since 0.10.0 + */ +package com.falsepattern.lib.asm; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/compat/BlockPos.java b/src/main/java/com/falsepattern/lib/compat/BlockPos.java index 114efd1..ae241d6 100644 --- a/src/main/java/com/falsepattern/lib/compat/BlockPos.java +++ b/src/main/java/com/falsepattern/lib/compat/BlockPos.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.compat; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.util.MathUtil; import com.google.common.collect.AbstractIterator; import lombok.Getter; @@ -47,12 +46,10 @@ import static net.minecraft.util.EnumFacing.UP; import static net.minecraft.util.EnumFacing.WEST; @Immutable -@StableAPI(since = "0.6.0") public class BlockPos extends Vec3i { /** * An immutable block pos with zero as all coordinates. */ - @StableAPI.Expose public static final BlockPos ORIGIN = new BlockPos(0, 0, 0); private static final Logger LOGGER = LogManager.getLogger(); private static final int NUM_X_BITS = 1 + MathUtil.log2(MathUtil.smallestEncompassingPowerOfTwo(30000000)); @@ -64,27 +61,22 @@ public class BlockPos extends Vec3i { private static final long Z_MASK = (1L << NUM_Z_BITS) - 1L; private static final long X_MASK = (1L << NUM_X_BITS) - 1L; - @StableAPI.Expose public BlockPos(@NonNull Entity source) { this(source.posX, source.posY, source.posZ); } - @StableAPI.Expose public BlockPos(double x, double y, double z) { super(x, y, z); } - @StableAPI.Expose public BlockPos(@NonNull Vec3 vec) { this(vec.xCoord, vec.yCoord, vec.zCoord); } - @StableAPI.Expose public BlockPos(@NonNull Vec3i source) { this(source.getX(), source.getY(), source.getZ()); } - @StableAPI.Expose public BlockPos(int x, int y, int z) { super(x, y, z); } @@ -92,7 +84,6 @@ public class BlockPos extends Vec3i { /** * Create a BlockPos from a serialized long value (created by toLong) */ - @StableAPI.Expose public static BlockPos fromLong(long serialized) { return new BlockPos((int) (serialized << 64 - X_SHIFT - NUM_X_BITS >> 64 - NUM_X_BITS), (int) (serialized << 64 - Y_SHIFT - NUM_Y_BITS >> 64 - NUM_Y_BITS), @@ -114,7 +105,6 @@ public class BlockPos extends Vec3i { * @see #getAllInBox(int, int, int, int, int, int) * @see #getAllInBoxMutable(BlockPos, BlockPos) */ - @StableAPI.Expose public static Iterable getAllInBox(@NonNull BlockPos from, @NonNull BlockPos to) { return getAllInBox(Math.min(from.getX(), to.getX()), Math.min(from.getY(), to.getY()), @@ -143,7 +133,6 @@ public class BlockPos extends Vec3i { * @see #getAllInBox(BlockPos, BlockPos) * @see #getAllInBoxMutable(BlockPos, BlockPos) */ - @StableAPI.Expose public static Iterable getAllInBox(final int x0, final int y0, final int z0, final int x1, final int y1, final int z1) { return () -> new AbstractIterator() { private boolean first = true; @@ -194,7 +183,6 @@ public class BlockPos extends Vec3i { * @see #getAllInBox(int, int, int, int, int, int) * @see #getAllInBoxMutable(BlockPos, BlockPos) */ - @StableAPI.Expose public static Iterable getAllInBoxMutable(@NonNull BlockPos from, @NonNull BlockPos to) { return getAllInBoxMutable(Math.min(from.getX(), to.getX()), Math.min(from.getY(), to.getY()), @@ -224,7 +212,6 @@ public class BlockPos extends Vec3i { * @see #getAllInBox(int, int, int, int, int, int) * @see #getAllInBoxMutable(BlockPos, BlockPos) */ - @StableAPI.Expose public static Iterable getAllInBoxMutable(final int x0, final int y0, final int z0, final int x1, final int y1, final int z1) { return () -> new AbstractIterator() { private MutableBlockPos pos; @@ -253,7 +240,6 @@ public class BlockPos extends Vec3i { }; } - @StableAPI.Expose public long toLong() { return ((long) x & X_MASK) << X_SHIFT | ((long) y & Y_MASK) << Y_SHIFT | ((long) z & Z_MASK); } @@ -261,7 +247,6 @@ public class BlockPos extends Vec3i { /** * Add the given coordinates to the coordinates of this BlockPos */ - @StableAPI.Expose public BlockPos add(double x, double y, double z) { if (x == 0.0D && y == 0.0D && z == 0.0D) { return this; @@ -272,7 +257,6 @@ public class BlockPos extends Vec3i { /** * Add the given Vector to this BlockPos */ - @StableAPI.Expose public BlockPos add(@NonNull Vec3i vec) { return add(vec.getX(), vec.getY(), vec.getZ()); } @@ -280,7 +264,6 @@ public class BlockPos extends Vec3i { /** * Add the given coordinates to the coordinates of this BlockPos */ - @StableAPI.Expose public BlockPos add(int x, int y, int z) { if (x == 0 && y == 0 && z == 0) { return this; @@ -291,22 +274,18 @@ public class BlockPos extends Vec3i { /** * Subtract the given Vector from this BlockPos */ - @StableAPI.Expose public BlockPos subtract(@NonNull Vec3i vec) { return add(-vec.getX(), -vec.getY(), -vec.getZ()); } - @StableAPI.Expose public BlockPos up() { return up(1); } - @StableAPI.Expose public BlockPos up(int blocks) { return offset(UP, blocks); } - @StableAPI.Expose public BlockPos offset(@NonNull EnumFacing facing, int blocks) { if (blocks == 0) { return this; @@ -316,73 +295,61 @@ public class BlockPos extends Vec3i { z + facing.getFrontOffsetZ() * blocks); } - @StableAPI.Expose public BlockPos down() { return down(1); } - @StableAPI.Expose public BlockPos down(int blocks) { return offset(DOWN, blocks); } - @StableAPI.Expose public BlockPos north() { return north(1); } - @StableAPI.Expose public BlockPos north(int blocks) { return offset(NORTH, blocks); } - @StableAPI.Expose public BlockPos south() { return south(1); } - @StableAPI.Expose public BlockPos south(int blocks) { return offset(SOUTH, blocks); } - @StableAPI.Expose public BlockPos west() { return west(1); } - @StableAPI.Expose public BlockPos west(int blocks) { return offset(WEST, blocks); } - @StableAPI.Expose public BlockPos east() { return east(1); } - @StableAPI.Expose public BlockPos east(int blocks) { return offset(EAST, blocks); } - @StableAPI.Expose public BlockPos offset(@NonNull EnumFacing facing) { return offset(facing, 1); } - @StableAPI.Expose public BlockPos rotate(@NonNull Rotation rotation) { switch (rotation) { - case NONE: - default: - return this; case CLOCKWISE_90: return new BlockPos(-this.getZ(), this.getY(), this.getX()); case CLOCKWISE_180: return new BlockPos(-this.getX(), this.getY(), -this.getZ()); case COUNTERCLOCKWISE_90: return new BlockPos(this.getZ(), this.getY(), -this.getX()); + case NONE: + default: + return this; } } @@ -393,14 +360,15 @@ public class BlockPos extends Vec3i { x * vec.getY() - y * vec.getX()); } - @StableAPI.Expose public BlockPos toImmutable() { return this; } - @Setter(onMethod_ = @StableAPI.Expose) - @Getter(onMethod_ = @StableAPI.Expose) - @StableAPI(since = "0.10.0") + /** + * @since 0.10.0 + */ + @Setter + @Getter public static class MutableBlockPos extends BlockPos { /** * Mutable X Coordinate @@ -415,17 +383,14 @@ public class BlockPos extends Vec3i { */ protected int z; - @StableAPI.Expose public MutableBlockPos() { this(ORIGIN); } - @StableAPI.Expose public MutableBlockPos(@NonNull BlockPos blockPos) { this(blockPos.getX(), blockPos.getY(), blockPos.getZ()); } - @StableAPI.Expose public MutableBlockPos(int x, int y, int z) { super(ORIGIN); this.x = x; @@ -454,7 +419,6 @@ public class BlockPos extends Vec3i { } @Override - @StableAPI.Expose public BlockPos toImmutable() { return new BlockPos(this); } @@ -463,12 +427,10 @@ public class BlockPos extends Vec3i { return this.setPos(entity.posX, entity.posY, entity.posZ); } - @StableAPI.Expose public BlockPos.MutableBlockPos setPos(double x, double y, double z) { return setPos(MathUtil.floor(x), MathUtil.floor(y), MathUtil.floor(z)); } - @StableAPI.Expose public BlockPos.MutableBlockPos setPos(int x, int y, int z) { this.x = x; this.y = y; @@ -476,17 +438,14 @@ public class BlockPos extends Vec3i { return this; } - @StableAPI.Expose public BlockPos.MutableBlockPos setPos(@NonNull Vec3i vec) { return this.setPos(vec.getX(), vec.getY(), vec.getZ()); } - @StableAPI.Expose public BlockPos.MutableBlockPos move(@NonNull EnumFacing facing) { return this.move(facing, 1); } - @StableAPI.Expose public BlockPos.MutableBlockPos move(@NonNull EnumFacing facing, int blocks) { return this.setPos(x + facing.getFrontOffsetX() * blocks, y + facing.getFrontOffsetY() * blocks, @@ -494,7 +453,9 @@ public class BlockPos extends Vec3i { } } - @StableAPI(since = "0.10.0") + /** + * @since 0.10.0 + */ public static final class PooledMutableBlockPos extends BlockPos.MutableBlockPos { private static final List POOL = new ArrayList<>(); private boolean released; @@ -503,12 +464,10 @@ public class BlockPos extends Vec3i { super(x, y, z); } - @StableAPI.Expose public static BlockPos.PooledMutableBlockPos retain() { return retain(0, 0, 0); } - @StableAPI.Expose public static BlockPos.PooledMutableBlockPos retain(int x, int y, int z) { synchronized (POOL) { if (!POOL.isEmpty()) { @@ -523,17 +482,14 @@ public class BlockPos extends Vec3i { return new BlockPos.PooledMutableBlockPos(x, y, z); } - @StableAPI.Expose public static BlockPos.PooledMutableBlockPos retain(double x, double y, double z) { return retain(MathUtil.floor(x), MathUtil.floor(y), MathUtil.floor(z)); } - @StableAPI.Expose public static BlockPos.PooledMutableBlockPos retain(@NonNull Vec3i vec) { return retain(vec.getX(), vec.getY(), vec.getZ()); } - @StableAPI.Expose public void release() { synchronized (POOL) { if (POOL.size() < 100) { diff --git a/src/main/java/com/falsepattern/lib/compat/ChunkPos.java b/src/main/java/com/falsepattern/lib/compat/ChunkPos.java index 6df0e0d..831d50a 100644 --- a/src/main/java/com/falsepattern/lib/compat/ChunkPos.java +++ b/src/main/java/com/falsepattern/lib/compat/ChunkPos.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.compat; -import com.falsepattern.lib.StableAPI; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.NonNull; @@ -37,17 +36,14 @@ import javax.annotation.concurrent.Immutable; @Immutable @EqualsAndHashCode @AllArgsConstructor -@StableAPI(since = "0.6.0") public class ChunkPos { /** * The x position of the chunk. */ - @StableAPI.Expose public final int x; /** * The z position of the chunk. */ - @StableAPI.Expose public final int z; /** @@ -55,7 +51,6 @@ public class ChunkPos { * * @param blockPos the block pos */ - @StableAPI.Expose public ChunkPos(@NonNull BlockPos blockPos) { x = blockPos.getX() >> 4; z = blockPos.getZ() >> 4; @@ -69,7 +64,6 @@ public class ChunkPos { * * @return the unique chunk long */ - @StableAPI.Expose public static long asLong(int x, int z) { return (long) x & 0xFFFFFFFFL | ((long) z & 0xFFFFFFFFL) << 32; } @@ -81,7 +75,6 @@ public class ChunkPos { * * @return the distance sq */ - @StableAPI.Expose public double getDistanceSq(@NonNull Entity entity) { val dX = ((x << 4) + 8) - entity.posX; val dY = ((z << 4) + 8) - entity.posZ; @@ -93,7 +86,6 @@ public class ChunkPos { * * @return the x start */ - @StableAPI.Expose public int getXStart() { return x << 4; } @@ -103,7 +95,6 @@ public class ChunkPos { * * @return the z start */ - @StableAPI.Expose public int getZStart() { return z << 4; } @@ -113,7 +104,6 @@ public class ChunkPos { * * @return the x end */ - @StableAPI.Expose public int getXEnd() { return (x << 4) + 15; } @@ -123,7 +113,6 @@ public class ChunkPos { * * @return the z end */ - @StableAPI.Expose public int getZEnd() { return (z << 4) + 15; } @@ -137,7 +126,6 @@ public class ChunkPos { * * @return the relative block position */ - @StableAPI.Expose public BlockPos getBlock(int x, int y, int z) { return new BlockPos((this.x << 4) + x, y, (this.z << 4) + z); } diff --git a/src/main/java/com/falsepattern/lib/compat/GuiLabel.java b/src/main/java/com/falsepattern/lib/compat/GuiLabel.java index e8b7e1e..a248c86 100644 --- a/src/main/java/com/falsepattern/lib/compat/GuiLabel.java +++ b/src/main/java/com/falsepattern/lib/compat/GuiLabel.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.compat; -import com.falsepattern.lib.StableAPI; import lombok.NonNull; import lombok.val; import org.lwjgl.opengl.GL11; @@ -39,9 +38,10 @@ import java.util.List; /** * A functional equivalent to GuiLabel present in Minecraft 1.12. + * + * @since 0.8.0 */ @SideOnly(Side.CLIENT) -@StableAPI(since = "0.8.0") public class GuiLabel extends Gui { private final List lines = new ArrayList<>(); private final FontRenderer fontRenderer; @@ -49,32 +49,26 @@ public class GuiLabel extends Gui { /** * The id of the label. */ - @StableAPI.Expose public int id; /** * The x position of the label. */ - @StableAPI.Expose public int x; /** * The y position of the label. */ - @StableAPI.Expose public int y; /** * The visibility of the label. */ - @StableAPI.Expose public boolean visible = true; /** * The label width. */ - @StableAPI.Expose protected int width; /** * The label height. */ - @StableAPI.Expose protected int height; private boolean centered = false; @@ -89,7 +83,6 @@ public class GuiLabel extends Gui { * @param height the height * @param textColour the text colour */ - @StableAPI.Expose public GuiLabel(@NonNull FontRenderer fontRenderer, int id, int x, int y, int width, int height, int textColour) { this.fontRenderer = fontRenderer; this.id = id; @@ -105,7 +98,6 @@ public class GuiLabel extends Gui { * * @param text string to add */ - @StableAPI.Expose public void addLine(@NonNull String text) { lines.add(I18n.format(text)); } @@ -115,7 +107,6 @@ public class GuiLabel extends Gui { * * @return the GuiLabel itself */ - @StableAPI.Expose public GuiLabel setCentered() { centered = true; return this; @@ -129,7 +120,6 @@ public class GuiLabel extends Gui { * @param mouseX the mouse x * @param mouseY the mouse y */ - @StableAPI.Expose public void drawLabel(@NonNull Minecraft minecraft, int mouseX, int mouseY) { if (!visible) { return; diff --git a/src/main/java/com/falsepattern/lib/compat/Rotation.java b/src/main/java/com/falsepattern/lib/compat/Rotation.java index 3c59897..e734009 100644 --- a/src/main/java/com/falsepattern/lib/compat/Rotation.java +++ b/src/main/java/com/falsepattern/lib/compat/Rotation.java @@ -21,26 +21,22 @@ */ package com.falsepattern.lib.compat; -import com.falsepattern.lib.StableAPI; import lombok.NonNull; import lombok.val; import net.minecraft.util.EnumFacing; -@StableAPI(since = "0.6.0") public enum Rotation { - @StableAPI.Expose NONE, - @StableAPI.Expose CLOCKWISE_90, - @StableAPI.Expose CLOCKWISE_180, - @StableAPI.Expose COUNTERCLOCKWISE_90; + NONE, + CLOCKWISE_90, + CLOCKWISE_180, + COUNTERCLOCKWISE_90; - @StableAPI.Expose public Rotation add(@NonNull Rotation rotation) { val values = Rotation.values(); return values[(ordinal() + rotation.ordinal()) % values.length]; } - @StableAPI.Expose public EnumFacing rotate(@NonNull EnumFacing facing) { if (facing == EnumFacing.UP || facing == EnumFacing.DOWN) { return facing; @@ -90,7 +86,6 @@ public enum Rotation { } } - @StableAPI.Expose public int rotate(int x, int z) { switch (this) { case CLOCKWISE_90: diff --git a/src/main/java/com/falsepattern/lib/compat/Vec3i.java b/src/main/java/com/falsepattern/lib/compat/Vec3i.java index efdbc90..2387a2a 100644 --- a/src/main/java/com/falsepattern/lib/compat/Vec3i.java +++ b/src/main/java/com/falsepattern/lib/compat/Vec3i.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.compat; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.util.MathUtil; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; @@ -38,19 +37,14 @@ import javax.annotation.concurrent.Immutable; @Immutable @EqualsAndHashCode @AllArgsConstructor -@StableAPI(since = "0.6.0") public class Vec3i implements Comparable { /** * A static zero vector */ - @StableAPI.Expose public static final Vec3i NULL_VECTOR = new Vec3i(0, 0, 0); - @StableAPI.Expose protected final int x; - @StableAPI.Expose protected final int y; - @StableAPI.Expose protected final int z; /** @@ -60,7 +54,6 @@ public class Vec3i implements Comparable { * @param y the y * @param z the z */ - @StableAPI.Expose public Vec3i(double x, double y, double z) { this(MathUtil.floor(x), MathUtil.floor(y), MathUtil.floor(z)); } @@ -77,7 +70,6 @@ public class Vec3i implements Comparable { * * @return the new resulting vector */ - @StableAPI.Expose public Vec3i crossProduct(@NonNull Vec3i vec) { return new Vec3i(y * vec.getZ() - z * vec.getY(), z * vec.getX() - x * vec.getZ(), @@ -93,7 +85,6 @@ public class Vec3i implements Comparable { * * @return the distance */ - @StableAPI.Expose public double getDistance(int x, int y, int z) { return Math.sqrt(distanceSq(x, y, z)); } @@ -107,7 +98,6 @@ public class Vec3i implements Comparable { * * @return the square distance */ - @StableAPI.Expose public double distanceSq(int x, int y, int z) { val dX = this.x - x; val dY = this.y - y; @@ -122,7 +112,6 @@ public class Vec3i implements Comparable { * * @return the square distance */ - @StableAPI.Expose public double distanceSq(@NonNull Vec3i vec) { return distanceSq(vec.getX(), vec.getY(), vec.getZ()); } @@ -136,7 +125,6 @@ public class Vec3i implements Comparable { * * @return the square distance to center */ - @StableAPI.Expose public double distanceSqToCenter(double x, double y, double z) { val dX = this.x + 0.5D - x; val dY = this.y + 0.5D - y; diff --git a/src/main/java/com/falsepattern/lib/compat/package-info.java b/src/main/java/com/falsepattern/lib/compat/package-info.java new file mode 100644 index 0000000..2d4bdb9 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/compat/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +/** + * @since 0.6.0 + */ +package com.falsepattern.lib.compat; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/config/Config.java b/src/main/java/com/falsepattern/lib/config/Config.java index 42c2e65..f51f7ed 100644 --- a/src/main/java/com/falsepattern/lib/config/Config.java +++ b/src/main/java/com/falsepattern/lib/config/Config.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.config; -import com.falsepattern.lib.StableAPI; import org.intellij.lang.annotations.Language; import java.lang.annotation.Documented; @@ -75,7 +74,6 @@ import java.util.function.BiConsumer; *
* {@link NoSync} - You MUST add this to fields that you don't want to be synchronized by {@link Synchronize}. */ -@StableAPI(since = "0.6.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @@ -85,19 +83,21 @@ public @interface Config { * If {@link #customPath()} is not set, this is used for the config file name (.minecraft/config/modid.cfg) * @see #customPath() */ - @StableAPI.Expose String modid(); + String modid(); /** * Root element category, defaults to "general". MUST NOT be an empty string. */ - @StableAPI.Expose String category() default "general"; + String category() default "general"; /** * Define category migrations here. * Used to rename config categories without losing data. * @see #pathMigrations() + * + * @since 1.5.0 */ - @StableAPI.Expose(since = "1.5.0") String[] categoryMigrations() default {}; + String[] categoryMigrations() default {}; /** * A custom configuration file path. Relative to the .minecraft/config folder. @@ -110,8 +110,10 @@ public @interface Config { * customPath = "mymod.config" -> .minecraft/config/mymod.config *
* @see #modid() + * + * @since 1.5.0 */ - @StableAPI.Expose(since = "1.5.0") String customPath() default ""; + String customPath() default ""; /** * Define file migration paths here. @@ -124,8 +126,10 @@ public @interface Config { * the category of this config. * @see #customPath() * @see #categoryMigrations() + * + * @since 1.5.0 */ - @StableAPI.Expose(since = "1.5.0") String[] pathMigrations() default {}; + String[] pathMigrations() default {}; // region Common @@ -133,12 +137,11 @@ public @interface Config { * The description of the configuration or the category. Should be in the primary language of the mod. * @see LangKey */ - @StableAPI(since = "0.6.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.TYPE}) @interface Comment { - @StableAPI.Expose String[] value(); + String[] value(); } /** @@ -152,19 +155,17 @@ public @interface Config { * Also applies to categories, where it gets autogenerated from the modid and category (config.MODID.CATEGORY) * @see Comment */ - @StableAPI(since = "0.6.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.TYPE}) @interface LangKey { - @StableAPI.Expose String value() default ""; + String value() default ""; } /** * If you have extra fields in the config class used for anything else other than configuring, you must annotate * the using this so that the config engine doesn't pick them up. */ - @StableAPI(since = "0.6.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @@ -173,23 +174,23 @@ public @interface Config { /** * The name of this config property in the config file. If not specified, the field's name will be used instead. */ - @StableAPI(since = "0.6.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface Name { - @StableAPI.Expose String value(); + String value(); /** * Use this to migrate from old config names. "" is resolved to the name of the field + * + * @since 1.5.0 */ - @StableAPI.Expose(since = "1.5.0") String[] migrations() default {}; + String[] migrations() default {}; } /** * Whether the specific configuration needs a minecraft restart to be applied. */ - @StableAPI(since = "0.6.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.TYPE}) @@ -198,7 +199,6 @@ public @interface Config { /** * Whether the specific configuration needs a world/server rejoin to be applied. */ - @StableAPI(since = "0.6.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.TYPE}) @@ -214,8 +214,9 @@ public @interface Config { *

* Note that synchronization ALWAYS happens FROM the server TO the client. The server should NEVER attempt to get * configuration values from a client. This is to avoid malicious clients manipulating the server configs. + * + * @since 0.10.0 */ - @StableAPI(since = "0.10.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @@ -223,8 +224,9 @@ public @interface Config { /** * Use this to mark config fields you don't want to synchronize in a class marked with {@link Synchronize}. + * + * @since 0.10.0 */ - @StableAPI(since = "0.10.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @@ -238,12 +240,11 @@ public @interface Config { * The default value for a boolean field. Not having a default is deprecated since 0.10, and will be strongly * enforced in 0.11+! */ - @StableAPI(since = "0.6.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface DefaultBoolean { - @StableAPI.Expose boolean value(); + boolean value(); } // endregion @@ -254,25 +255,23 @@ public @interface Config { * The default value for an int field. * @see RangeInt */ - @StableAPI(since = "0.6.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface DefaultInt { - @StableAPI.Expose int value(); + int value(); } /** * The range of possible values an int config can have. */ - @StableAPI(since = "0.6.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface RangeInt { - @StableAPI.Expose int min() default Integer.MIN_VALUE; + int min() default Integer.MIN_VALUE; - @StableAPI.Expose int max() default Integer.MAX_VALUE; + int max() default Integer.MAX_VALUE; } // endregion @@ -282,26 +281,28 @@ public @interface Config { /** * The default value for a double field. * @see RangeDouble + * + * @since 0.10.0 */ - @StableAPI(since = "0.10.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface DefaultDouble { - @StableAPI.Expose double value(); + double value(); } /** * The range of possible values a double config can have. + * + * @since 0.10.0 */ - @StableAPI(since = "0.10.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface RangeDouble { - @StableAPI.Expose double min() default -Double.MAX_VALUE; + double min() default -Double.MAX_VALUE; - @StableAPI.Expose double max() default Double.MAX_VALUE; + double max() default Double.MAX_VALUE; } // endregion @@ -313,37 +314,36 @@ public @interface Config { * @see StringMaxLength * @see Pattern */ - @StableAPI(since = "0.6.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface DefaultString { - @StableAPI.Expose String value(); + String value(); } /** * This annotation limits the maximum number of characters present in a string configuration. *

* When used with a string list, this limit will apply to each element individually, not to the size of the list as a whole. + * + * @since 0.10.0 */ - @StableAPI(since = "0.10.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface StringMaxLength { - @StableAPI.Expose int value(); + int value(); } /** * A regex pattern for restricting the allowed strings. */ - @StableAPI(since = "0.6.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface Pattern { @Language("RegExp") - @StableAPI.Expose String value(); + String value(); } // endregion @@ -353,12 +353,11 @@ public @interface Config { /** * The default value for an Enum field. */ - @StableAPI(since = "0.6.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface DefaultEnum { - @StableAPI.Expose String value(); + String value(); } // endregion @@ -369,13 +368,14 @@ public @interface Config { * The default value for a boolean array field. * @see ListFixedLength * @see ListMaxLength + * + * @since 0.10.0 */ - @StableAPI(since = "0.10.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface DefaultBooleanList { - @StableAPI.Expose boolean[] value(); + boolean[] value(); } /** @@ -383,13 +383,14 @@ public @interface Config { * @see ListFixedLength * @see ListMaxLength * @see RangeInt + * + * @since 0.10.0 */ - @StableAPI(since = "0.10.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface DefaultIntList { - @StableAPI.Expose int[] value(); + int[] value(); } /** @@ -397,13 +398,14 @@ public @interface Config { * @see ListFixedLength * @see ListMaxLength * @see RangeDouble + * + * @since 0.10.0 */ - @StableAPI(since = "0.10.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface DefaultDoubleList { - @StableAPI.Expose double[] value(); + double[] value(); } /** @@ -413,20 +415,20 @@ public @interface Config { * @see StringMaxLength * @see Pattern */ - @StableAPI(since = "0.6.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface DefaultStringList { - @StableAPI.Expose String[] value(); + String[] value(); } /** * If this annotation is present, the list in the config will be forced to have exactly the amount of elements as * the default value. * @see ListMaxLength + * + * @since 0.10.0 */ - @StableAPI(since = "0.10.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @@ -435,13 +437,14 @@ public @interface Config { /** * This annotation limits the maximum number of elements present in an array configuration. Only effective if * {@link ListFixedLength} is NOT present. + * + * @since 0.10.0 */ - @StableAPI(since = "0.10.0") @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface ListMaxLength { - @StableAPI.Expose int value(); + int value(); } // endregion diff --git a/src/main/java/com/falsepattern/lib/config/ConfigException.java b/src/main/java/com/falsepattern/lib/config/ConfigException.java index 0d26fa4..29c2c35 100644 --- a/src/main/java/com/falsepattern/lib/config/ConfigException.java +++ b/src/main/java/com/falsepattern/lib/config/ConfigException.java @@ -21,25 +21,24 @@ */ package com.falsepattern.lib.config; -import com.falsepattern.lib.StableAPI; +import org.jetbrains.annotations.ApiStatus; /** * A really basic wrapper for config to simplify handling them in external code. */ -@StableAPI(since = "0.6.0") public class ConfigException extends Exception { - @StableAPI.Internal + @ApiStatus.Internal public ConfigException(String message) { super(message); } - @StableAPI.Internal + @ApiStatus.Internal public ConfigException(String message, Throwable cause) { super(message, cause); } - @StableAPI.Internal + @ApiStatus.Internal public ConfigException(Throwable cause) { super(cause); } diff --git a/src/main/java/com/falsepattern/lib/config/ConfigurationManager.java b/src/main/java/com/falsepattern/lib/config/ConfigurationManager.java index c43eabe..9213e50 100644 --- a/src/main/java/com/falsepattern/lib/config/ConfigurationManager.java +++ b/src/main/java/com/falsepattern/lib/config/ConfigurationManager.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.config; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.ReflectionUtil; import com.falsepattern.lib.internal.impl.config.ConfigurationManagerImpl; import lombok.AccessLevel; @@ -41,24 +40,28 @@ import java.util.function.BiConsumer; * Class for controlling the loading of configuration files. */ @NoArgsConstructor(access = AccessLevel.PRIVATE) -@StableAPI(since = "0.6.0") public class ConfigurationManager { - @StableAPI.Expose(since = "0.10.0") + /** + * @since 0.10.0 + */ public static void initialize(Class... configClasses) throws ConfigException { initialize((a, b) -> {}, configClasses); } /** * You can use this method in the static initializer of a config class to self-load it without extra effort. + * + * @since 0.10.3 */ - @StableAPI.Expose(since = "0.10.3") @SneakyThrows public static void selfInit() { initialize(ReflectionUtil.getCallerClass()); } - @StableAPI.Expose(since = "0.10.0") + /** + * @since 0.10.0 + */ public static void initialize(BiConsumer, Field> validatorErrorCallback, Class... configClasses) throws ConfigException { for (val clazz : configClasses) { @@ -69,12 +72,16 @@ public class ConfigurationManager { } } - @StableAPI.Expose(since = "0.10.0") + /** + * @since 0.10.0 + */ public static boolean validate(boolean resetInvalid, Class... configClasses) throws ConfigException { return validate((x, y) -> {}, resetInvalid, configClasses); } - @StableAPI.Expose(since = "0.10.0") + /** + * @since 0.10.0 + */ public static boolean validate(BiConsumer, Field> validatorErrorCallback, boolean resetInvalid, Class... configClasses) throws ConfigException { boolean valid = true; @@ -84,14 +91,18 @@ public class ConfigurationManager { return valid; } - @StableAPI.Expose(since = "0.10.0") + /** + * @since 0.10.0 + */ public static void loadFromFile(Class... configClasses) throws ConfigException { for (val clazz : configClasses) { ConfigurationManagerImpl.load(clazz); } } - @StableAPI.Expose(since = "0.10.0") + /** + * @since 0.10.0 + */ public static void saveToFile(boolean validateAndResetInvalid, Class... configClasses) throws ConfigException { for (val clazz : configClasses) { if (validateAndResetInvalid) { @@ -109,7 +120,6 @@ public class ConfigurationManager { * @return The configuration elements. */ @SuppressWarnings("rawtypes") - @StableAPI.Expose public static List getConfigElements(Class configClass) throws ConfigException { return ConfigurationManagerImpl.getConfigElements(configClass); } @@ -120,9 +130,10 @@ public class ConfigurationManager { * @param configClasses The classes to process. * * @return The configuration elements. + * + * @since 0.10.0 */ @SuppressWarnings("rawtypes") - @StableAPI.Expose(since = "0.10.0") public static List getConfigElementsMulti(Class... configClasses) throws ConfigException { switch (configClasses.length) { case 0: @@ -139,10 +150,11 @@ public class ConfigurationManager { } /** * @return The configuration elements, structured with DummyCategoryElement groups per config class - * @see #getConfigElementsMulti(Class[]) + * @see #getConfigElementsMulti(Class[]) + * + * @since 1.5.0 */ @SuppressWarnings("rawtypes") - @StableAPI.Expose(since = "1.5.0") public static List getConfigElementsMultiStructured(Class... configClasses) throws ConfigException { if (configClasses.length == 0) { return Collections.emptyList(); diff --git a/src/main/java/com/falsepattern/lib/config/SimpleGuiConfig.java b/src/main/java/com/falsepattern/lib/config/SimpleGuiConfig.java index 7199463..fcb3a2a 100644 --- a/src/main/java/com/falsepattern/lib/config/SimpleGuiConfig.java +++ b/src/main/java/com/falsepattern/lib/config/SimpleGuiConfig.java @@ -21,29 +21,33 @@ */ package com.falsepattern.lib.config; -import com.falsepattern.lib.StableAPI; - import net.minecraft.client.gui.GuiScreen; import cpw.mods.fml.client.config.GuiConfig; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +/** + * @since 0.9.0 + */ @SideOnly(Side.CLIENT) -@StableAPI(since = "0.9.0") public class SimpleGuiConfig extends GuiConfig { - @StableAPI.Expose public SimpleGuiConfig(GuiScreen parent, Class configClass, String modID, String modName) throws ConfigException { this(parent, modID, modName, configClass); } - @StableAPI.Expose(since = "0.10.0") + /** + * @since 0.10.0 + */ public SimpleGuiConfig(GuiScreen parent, String modID, String title, Class... configClasses) throws ConfigException { this(parent, modID, title, null, configClasses); } - @StableAPI.Expose(since = "1.5.0") + + /** + * @since 1.5.0 + */ public SimpleGuiConfig(GuiScreen parent, String modID, String title, String titleLine2, Class... configClasses) throws ConfigException { super(parent, diff --git a/src/main/java/com/falsepattern/lib/config/SimpleGuiFactory.java b/src/main/java/com/falsepattern/lib/config/SimpleGuiFactory.java index 3e8c5de..6afd83d 100644 --- a/src/main/java/com/falsepattern/lib/config/SimpleGuiFactory.java +++ b/src/main/java/com/falsepattern/lib/config/SimpleGuiFactory.java @@ -21,8 +21,6 @@ */ package com.falsepattern.lib.config; -import com.falsepattern.lib.StableAPI; - import net.minecraft.client.Minecraft; import cpw.mods.fml.client.IModGuiFactory; import cpw.mods.fml.relauncher.Side; @@ -30,8 +28,10 @@ import cpw.mods.fml.relauncher.SideOnly; import java.util.Set; +/** + * @since 0.9.0 + */ @SideOnly(Side.CLIENT) -@StableAPI(since = "0.9.0") public interface SimpleGuiFactory extends IModGuiFactory { @Override default void initialize(Minecraft minecraftInstance) { diff --git a/src/main/java/com/falsepattern/lib/config/event/AllConfigSyncEvent.java b/src/main/java/com/falsepattern/lib/config/event/AllConfigSyncEvent.java index e974a2b..65542c5 100644 --- a/src/main/java/com/falsepattern/lib/config/event/AllConfigSyncEvent.java +++ b/src/main/java/com/falsepattern/lib/config/event/AllConfigSyncEvent.java @@ -21,9 +21,9 @@ */ package com.falsepattern.lib.config.event; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.EventUtil; import lombok.val; +import org.jetbrains.annotations.ApiStatus; import cpw.mods.fml.common.eventhandler.Event; import cpw.mods.fml.relauncher.Side; @@ -35,28 +35,26 @@ import cpw.mods.fml.relauncher.SideOnly; * This is a client-only event, and is never triggered serverside! */ @SideOnly(Side.CLIENT) -@StableAPI(since = "0.10.0") public class AllConfigSyncEvent extends Event { - @StableAPI.Internal + @ApiStatus.Internal public AllConfigSyncEvent() { } - @StableAPI.Internal + @ApiStatus.Internal public static boolean postStart() { val event = new Start(); return EventUtil.postOnCommonBus(event); } - @StableAPI.Internal + @ApiStatus.Internal public static void postEnd() { EventUtil.postOnCommonBus(new End()); } @SideOnly(Side.CLIENT) - @StableAPI(since = "0.10.0") public static final class Start extends AllConfigSyncEvent { - @StableAPI.Internal + @ApiStatus.Internal public Start() { } @@ -67,9 +65,8 @@ public class AllConfigSyncEvent extends Event { } @SideOnly(Side.CLIENT) - @StableAPI(since = "0.10.0") public static final class End extends AllConfigSyncEvent { - @StableAPI.Internal + @ApiStatus.Internal public End() { } } diff --git a/src/main/java/com/falsepattern/lib/config/event/ConfigSyncEvent.java b/src/main/java/com/falsepattern/lib/config/event/ConfigSyncEvent.java index bfedf17..fd3f7c3 100644 --- a/src/main/java/com/falsepattern/lib/config/event/ConfigSyncEvent.java +++ b/src/main/java/com/falsepattern/lib/config/event/ConfigSyncEvent.java @@ -21,9 +21,9 @@ */ package com.falsepattern.lib.config.event; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.EventUtil; import lombok.val; +import org.jetbrains.annotations.ApiStatus; import cpw.mods.fml.common.eventhandler.Event; import cpw.mods.fml.relauncher.Side; @@ -35,37 +35,34 @@ import cpw.mods.fml.relauncher.SideOnly; * This is a client-only event, and is never triggered serverside! */ @SideOnly(Side.CLIENT) -@StableAPI(since = "0.10.0") public class ConfigSyncEvent extends Event { - @StableAPI.Expose public final Class configClass; - @StableAPI.Internal + @ApiStatus.Internal public ConfigSyncEvent(Class configClass) { this.configClass = configClass; } - @StableAPI.Internal + @ApiStatus.Internal public static boolean postStart(Class configClass) { val event = new Start(configClass); return EventUtil.postOnCommonBus(event); } - @StableAPI.Internal + @ApiStatus.Internal public static void postEndSuccess(Class configClass) { EventUtil.postOnCommonBus(new End(configClass, true, null)); } - @StableAPI.Internal + @ApiStatus.Internal public static void postEndFailure(Class configClass, Throwable error) { EventUtil.postOnCommonBus(new End(configClass, false, error)); } @SideOnly(Side.CLIENT) - @StableAPI(since = "0.10.0") public static final class Start extends ConfigSyncEvent { - @StableAPI.Internal + @ApiStatus.Internal public Start(Class configClass) { super(configClass); } @@ -77,15 +74,11 @@ public class ConfigSyncEvent extends Event { } @SideOnly(Side.CLIENT) - @StableAPI(since = "0.10.0") public static final class End extends ConfigSyncEvent { - @StableAPI.Expose public final boolean successful; - - @StableAPI.Expose public final Throwable error; - @StableAPI.Internal + @ApiStatus.Internal public End(Class configClass, boolean successful, Throwable error) { super(configClass); this.successful = successful; diff --git a/src/main/java/com/falsepattern/lib/config/event/ConfigSyncRequestEvent.java b/src/main/java/com/falsepattern/lib/config/event/ConfigSyncRequestEvent.java index 2b42312..767c401 100644 --- a/src/main/java/com/falsepattern/lib/config/event/ConfigSyncRequestEvent.java +++ b/src/main/java/com/falsepattern/lib/config/event/ConfigSyncRequestEvent.java @@ -21,8 +21,8 @@ */ package com.falsepattern.lib.config.event; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.EventUtil; +import org.jetbrains.annotations.ApiStatus; import net.minecraft.entity.player.EntityPlayerMP; import cpw.mods.fml.common.eventhandler.Event; @@ -36,39 +36,33 @@ import java.util.List; * different game sides. If you want to trigger this on the server, use {@link #postServer}, and if on the client, use * {@link #postClient} */ -@StableAPI(since = "0.10.0") public class ConfigSyncRequestEvent extends Event { - @StableAPI.Internal + @ApiStatus.Internal public ConfigSyncRequestEvent() { } - @StableAPI.Expose public static void postClient() { EventUtil.postOnCommonBus(new Client()); } - @StableAPI.Expose public static void postServer(List players) { EventUtil.postOnCommonBus(new Server(new ArrayList<>(players))); } - @StableAPI(since = "0.10.0") public static final class Client extends ConfigSyncRequestEvent { - @StableAPI.Internal + @ApiStatus.Internal public Client() { } } - @StableAPI(since = "0.10.0") public static final class Server extends ConfigSyncRequestEvent { private final List players; - @StableAPI.Internal + @ApiStatus.Internal public Server(List players) { this.players = players; } - @StableAPI.Expose public List getPlayers() { return Collections.unmodifiableList(players); } diff --git a/src/main/java/com/falsepattern/lib/config/event/ConfigValidationFailureEvent.java b/src/main/java/com/falsepattern/lib/config/event/ConfigValidationFailureEvent.java index b8ad199..77e4ef2 100644 --- a/src/main/java/com/falsepattern/lib/config/event/ConfigValidationFailureEvent.java +++ b/src/main/java/com/falsepattern/lib/config/event/ConfigValidationFailureEvent.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.config.event; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.config.Config; import com.falsepattern.lib.internal.EventUtil; import com.falsepattern.lib.internal.FPLog; @@ -30,6 +29,7 @@ import com.falsepattern.lib.toasts.GuiToast; import com.falsepattern.lib.toasts.SimpleToast; import com.falsepattern.lib.toasts.icon.ToastBG; import lombok.val; +import org.jetbrains.annotations.ApiStatus; import net.minecraft.util.EnumChatFormatting; import cpw.mods.fml.common.eventhandler.Event; @@ -38,20 +38,14 @@ import cpw.mods.fml.relauncher.SideOnly; import java.lang.reflect.Field; -@StableAPI(since = "0.10.0") public class ConfigValidationFailureEvent extends Event { - @StableAPI.Expose public final String reason; - @StableAPI.Expose public final Class configClass; - @StableAPI.Expose public final String fieldName; - @StableAPI.Expose public final boolean listElement; - @StableAPI.Expose public final int listIndex; - @StableAPI.Internal + @ApiStatus.Internal protected ConfigValidationFailureEvent(String reason, Class configClass, String fieldName, boolean listElement, int listIndex) { this.reason = reason; this.configClass = configClass; @@ -60,7 +54,7 @@ public class ConfigValidationFailureEvent extends Event { this.listIndex = listIndex; } - @StableAPI.Internal + @ApiStatus.Internal public static void postNumericRangeOutOfBounds(Field field, int listIndex, String value, String min, String max) { EventUtil.postOnCommonBus(new NumericRangeOutOfBounds(field.getDeclaringClass(), field.getName(), @@ -70,7 +64,7 @@ public class ConfigValidationFailureEvent extends Event { max)); } - @StableAPI.Internal + @ApiStatus.Internal public static void postSize(Field field, int requestedSize, boolean fixedSize, int maxSize, int defaultSize) { EventUtil.postOnCommonBus(new ListSizeOutOfBounds(field.getDeclaringClass(), field.getName(), @@ -80,7 +74,7 @@ public class ConfigValidationFailureEvent extends Event { defaultSize)); } - @StableAPI.Internal + @ApiStatus.Internal public static void postStringSizeOutOfBounds(Field field, int listIndex, String text, int maxSize) { EventUtil.postOnCommonBus(new StringSizeOutOfBounds(field.getDeclaringClass(), field.getName(), @@ -89,12 +83,12 @@ public class ConfigValidationFailureEvent extends Event { maxSize)); } - @StableAPI.Internal + @ApiStatus.Internal public static void fieldIsNull(Field field, int listIndex) { EventUtil.postOnCommonBus(new FieldIsNull(field.getDeclaringClass(), field.getName(), listIndex)); } - @StableAPI.Internal + @ApiStatus.Internal public static void postStringPatternMismatch(Field field, int listIndex, String text, String pattern) { EventUtil.postOnCommonBus(new StringPatternMismatch(field.getDeclaringClass(), field.getName(), @@ -103,8 +97,8 @@ public class ConfigValidationFailureEvent extends Event { pattern)); } + @ApiStatus.Internal @SideOnly(Side.CLIENT) - @StableAPI.Internal public void toast() { val ann = configClass.getAnnotation(Config.class); val toast = new SimpleToast(ToastBG.TOAST_DARK, @@ -118,11 +112,11 @@ public class ConfigValidationFailureEvent extends Event { GuiToast.add(toast); } - @StableAPI.Internal + @ApiStatus.Internal protected void customText(StringBuilder b) { } - @StableAPI.Internal + @ApiStatus.Internal public void logWarn() { val errorString = new StringBuilder("Error validating configuration field!"); errorString.append("\nReason: ").append(reason); @@ -136,16 +130,12 @@ public class ConfigValidationFailureEvent extends Event { } } - @StableAPI(since = "0.10.0") public static final class NumericRangeOutOfBounds extends ConfigValidationFailureEvent { - @StableAPI.Expose public final String value; - @StableAPI.Expose public final String min; - @StableAPI.Expose public final String max; - @StableAPI.Internal + @ApiStatus.Internal public NumericRangeOutOfBounds(Class configClass, String fieldName, int listIndex, String value, String min, String max) { super("Number range out of bounds", configClass, fieldName, listIndex >= 0, listIndex); this.value = value; @@ -159,18 +149,13 @@ public class ConfigValidationFailureEvent extends Event { } } - @StableAPI(since = "0.10.0") public static final class ListSizeOutOfBounds extends ConfigValidationFailureEvent { - @StableAPI.Expose public final int size; - @StableAPI.Expose public final boolean fixedSize; - @StableAPI.Expose public final int maxSize; - @StableAPI.Expose public final int defaultSize; - @StableAPI.Internal + @ApiStatus.Internal public ListSizeOutOfBounds(Class configClass, String fieldName, int size, boolean fixedSize, int maxSize, int defaultSize) { super("Array size out of bounds", configClass, fieldName, false, -1); this.size = size; @@ -189,14 +174,11 @@ public class ConfigValidationFailureEvent extends Event { } } - @StableAPI(since = "0.10.0") public static final class StringSizeOutOfBounds extends ConfigValidationFailureEvent { - @StableAPI.Expose public final String text; - @StableAPI.Expose public final int maxSize; - @StableAPI.Internal + @ApiStatus.Internal public StringSizeOutOfBounds(Class configClass, String fieldName, int listIndex, String text, int maxSize) { super("String size out of bounds", configClass, fieldName, listIndex >= 0, listIndex); this.text = text; @@ -214,9 +196,8 @@ public class ConfigValidationFailureEvent extends Event { } } - @StableAPI(since = "0.10.0") public static final class FieldIsNull extends ConfigValidationFailureEvent { - @StableAPI.Internal + @ApiStatus.Internal public FieldIsNull(Class configClass, String fieldName, int listIndex) { super("Unexpected null", configClass, fieldName, listIndex >= 0, listIndex); } @@ -227,14 +208,11 @@ public class ConfigValidationFailureEvent extends Event { } } - @StableAPI(since = "0.10.0") public static final class StringPatternMismatch extends ConfigValidationFailureEvent { - @StableAPI.Expose public final String text; - @StableAPI.Expose public final String pattern; - @StableAPI.Internal + @ApiStatus.Internal public StringPatternMismatch(Class configClass, String fieldName, int listIndex, String text, String pattern) { super("String pattern mismatch", configClass, fieldName, listIndex >= 0, listIndex); this.text = text; diff --git a/src/main/java/com/falsepattern/lib/config/event/package-info.java b/src/main/java/com/falsepattern/lib/config/event/package-info.java new file mode 100644 index 0000000..51abaa7 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/config/event/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +/** + * @since 0.10.0 + */ +package com.falsepattern.lib.config.event; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/config/package-info.java b/src/main/java/com/falsepattern/lib/config/package-info.java new file mode 100644 index 0000000..3021b2d --- /dev/null +++ b/src/main/java/com/falsepattern/lib/config/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +/** + * @since 0.6.0 + */ +package com.falsepattern.lib.config; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/dependencies/ComplexVersion.java b/src/main/java/com/falsepattern/lib/dependencies/ComplexVersion.java index c031fde..9def8ee 100644 --- a/src/main/java/com/falsepattern/lib/dependencies/ComplexVersion.java +++ b/src/main/java/com/falsepattern/lib/dependencies/ComplexVersion.java @@ -21,18 +21,15 @@ */ package com.falsepattern.lib.dependencies; -import com.falsepattern.lib.StableAPI; import lombok.NonNull; import lombok.val; import java.util.Arrays; import java.util.stream.Collectors; -@StableAPI(since = "0.6.0") public class ComplexVersion extends Version { final Version[] versions; - @StableAPI.Expose public ComplexVersion(@NonNull Version mainVersion, Version... subVersions) { this.versions = new Version[subVersions.length + 1]; this.versions[0] = mainVersion; diff --git a/src/main/java/com/falsepattern/lib/dependencies/DependencyLoader.java b/src/main/java/com/falsepattern/lib/dependencies/DependencyLoader.java index e35abbc..de5481b 100644 --- a/src/main/java/com/falsepattern/lib/dependencies/DependencyLoader.java +++ b/src/main/java/com/falsepattern/lib/dependencies/DependencyLoader.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.dependencies; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.impl.dependencies.DependencyLoaderImpl; import java.util.concurrent.CompletableFuture; @@ -31,19 +30,21 @@ import java.util.concurrent.CompletableFuture; * For regular external dependencies, see the DEPENDENCIES.MD files in the root of the resources for more information. * If you need more power than the one provided by the json format, you may use this class for granular loading instead. */ -@StableAPI(since = "0.6.0") public class DependencyLoader { - @StableAPI.Expose public static void addMavenRepo(String url) { DependencyLoaderImpl.addMavenRepo(url); } - @StableAPI.Expose(since = "0.10.0") + /** + * @since 0.10.0 + */ public static CompletableFuture loadLibrariesAsync(Library... libraries) { return DependencyLoaderImpl.loadLibrariesAsync(libraries); } - @StableAPI.Expose(since = "0.10.0") + /** + * @since 0.10.0 + */ public static void loadLibraries(Library... libraries) { DependencyLoaderImpl.loadLibraries(libraries); } diff --git a/src/main/java/com/falsepattern/lib/dependencies/Library.java b/src/main/java/com/falsepattern/lib/dependencies/Library.java index 51f040c..11d590c 100644 --- a/src/main/java/com/falsepattern/lib/dependencies/Library.java +++ b/src/main/java/com/falsepattern/lib/dependencies/Library.java @@ -22,34 +22,31 @@ package com.falsepattern.lib.dependencies; -import com.falsepattern.lib.StableAPI; import lombok.NonNull; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; -@StableAPI(since = "0.10.0") +/** + * @since 0.10.0 + */ public class Library { - @StableAPI.Expose @NonNull public final String loadingModId; - @StableAPI.Expose @NonNull public final String groupId; - @StableAPI.Expose @NonNull public final String artifactId; - @StableAPI.Expose @NonNull public final Version minVersion; - @StableAPI.Expose + @Nullable public final Version maxVersion; - @StableAPI.Expose @NonNull public final Version preferredVersion; - @StableAPI.Expose + @Nullable public final String regularSuffix; - @StableAPI.Expose + @Nullable public final String devSuffix; - @StableAPI.Expose public Library(@NonNull String loadingModId, @NonNull String groupId, @NonNull String artifactId, @NonNull Version minVersion, Version maxVersion, @NonNull Version preferredVersion, String regularSuffix, String devSuffix) { this.loadingModId = loadingModId; this.groupId = groupId; @@ -61,12 +58,13 @@ public class Library { this.devSuffix = devSuffix; } - @StableAPI.Expose public static LibraryBuilder builder() { return new LibraryBuilder(); } - @StableAPI(since = "0.10.0") + /** + * @since 0.10.0 + */ public static class LibraryBuilder { private String loadingModId; private String groupId; @@ -77,59 +75,50 @@ public class Library { private String regularSuffix; private String devSuffix; - @StableAPI.Internal + @ApiStatus.Internal LibraryBuilder() { } - @StableAPI.Expose public LibraryBuilder loadingModId(@NonNull String loadingModId) { this.loadingModId = loadingModId; return this; } - @StableAPI.Expose public LibraryBuilder groupId(@NonNull String groupId) { this.groupId = groupId; return this; } - @StableAPI.Expose public LibraryBuilder artifactId(@NonNull String artifactId) { this.artifactId = artifactId; return this; } - @StableAPI.Expose public LibraryBuilder minVersion(@NonNull Version minVersion) { this.minVersion = minVersion; return this; } - @StableAPI.Expose public LibraryBuilder maxVersion(Version maxVersion) { this.maxVersion = maxVersion; return this; } - @StableAPI.Expose public LibraryBuilder preferredVersion(@NonNull Version preferredVersion) { this.preferredVersion = preferredVersion; return this; } - @StableAPI.Expose public LibraryBuilder regularSuffix(String regularSuffix) { this.regularSuffix = regularSuffix; return this; } - @StableAPI.Expose public LibraryBuilder devSuffix(String devSuffix) { this.devSuffix = devSuffix; return this; } - @StableAPI.Expose public Library build() { return new Library(loadingModId, groupId, diff --git a/src/main/java/com/falsepattern/lib/dependencies/SemanticVersion.java b/src/main/java/com/falsepattern/lib/dependencies/SemanticVersion.java index f663e4c..5459903 100644 --- a/src/main/java/com/falsepattern/lib/dependencies/SemanticVersion.java +++ b/src/main/java/com/falsepattern/lib/dependencies/SemanticVersion.java @@ -21,27 +21,25 @@ */ package com.falsepattern.lib.dependencies; -import com.falsepattern.lib.StableAPI; import lombok.Getter; import lombok.NonNull; import lombok.val; +import org.jetbrains.annotations.ApiStatus; import java.util.Objects; -@StableAPI(since = "0.6.0") public class SemanticVersion extends Version { - @Getter(onMethod_ = @StableAPI.Expose) + @Getter private final int majorVersion; - @Getter(onMethod_ = @StableAPI.Expose) + @Getter private final int minorVersion; - @Getter(onMethod_ = @StableAPI.Expose) + @Getter private final int patchVersion; - @Getter(onMethod_ = @StableAPI.Expose) + @Getter private final String preRelease; - @Getter(onMethod_ = @StableAPI.Expose) + @Getter private final String build; - @StableAPI.Expose public SemanticVersion(int majorVersion, int minorVersion, int patchVersion, String preRelease, String build) { this.majorVersion = majorVersion; this.minorVersion = minorVersion; @@ -52,27 +50,29 @@ public class SemanticVersion extends Version { this.build = "".equals(build) ? null : build; } - @StableAPI.Expose public SemanticVersion(int majorVersion, int minorVersion, int patchVersion, String preRelease) { this(majorVersion, minorVersion, patchVersion, preRelease, null); } - @StableAPI.Expose public SemanticVersion(int majorVersion, int minorVersion, int patchVersion) { this(majorVersion, minorVersion, patchVersion, null, null); } - @StableAPI.Expose(since = "0.10.0") + /** + * @since 0.10.0 + */ public SemanticVersion(int majorVersion, int minorVersion) { this(majorVersion, minorVersion, -1, null, null); } - @StableAPI.Expose(since = "0.10.0") + + /** + * @since 0.10.0 + */ public SemanticVersion(int majorVersion) { this(majorVersion, -1, -1, null, null); } - @StableAPI.Expose public static SemanticVersionBuilder builder() { return new SemanticVersionBuilder(); } @@ -119,7 +119,9 @@ public class SemanticVersion extends Version { // @formatter:on } - @StableAPI(since = "0.10.0") + /** + * @since 0.10.0 + */ public static class SemanticVersionBuilder { private int majorVersion; private int minorVersion = -1; @@ -127,41 +129,35 @@ public class SemanticVersion extends Version { private String preRelease; private String build; - @StableAPI.Internal + @ApiStatus.Internal SemanticVersionBuilder() { } - @StableAPI.Expose public SemanticVersionBuilder majorVersion(int majorVersion) { this.majorVersion = majorVersion; return this; } - @StableAPI.Expose public SemanticVersionBuilder minorVersion(int minorVersion) { this.minorVersion = minorVersion; return this; } - @StableAPI.Expose public SemanticVersionBuilder patchVersion(int patchVersion) { this.patchVersion = patchVersion; return this; } - @StableAPI.Expose public SemanticVersionBuilder preRelease(String preRelease) { this.preRelease = preRelease; return this; } - @StableAPI.Expose public SemanticVersionBuilder build(String build) { this.build = build; return this; } - @StableAPI.Expose public SemanticVersion build() { return new SemanticVersion(majorVersion, minorVersion, patchVersion, preRelease, build); } diff --git a/src/main/java/com/falsepattern/lib/dependencies/Version.java b/src/main/java/com/falsepattern/lib/dependencies/Version.java index 77d4ffc..aac9c92 100644 --- a/src/main/java/com/falsepattern/lib/dependencies/Version.java +++ b/src/main/java/com/falsepattern/lib/dependencies/Version.java @@ -21,9 +21,6 @@ */ package com.falsepattern.lib.dependencies; -import com.falsepattern.lib.StableAPI; - -@StableAPI(since = "0.6.0") public abstract class Version implements Comparable { protected Version() { } @@ -36,7 +33,6 @@ public abstract class Version implements Comparable { return equals((Version) obj); } - @StableAPI.Expose public boolean equals(Version other) { return compareTo(other) == 0; } diff --git a/src/main/java/com/falsepattern/lib/dependencies/package-info.java b/src/main/java/com/falsepattern/lib/dependencies/package-info.java new file mode 100644 index 0000000..113354f --- /dev/null +++ b/src/main/java/com/falsepattern/lib/dependencies/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +/** + * @since 0.6.0 + */ +package com.falsepattern.lib.dependencies; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/asm/FPTransformer.java b/src/main/java/com/falsepattern/lib/internal/asm/FPTransformer.java index b7685fb..1577377 100644 --- a/src/main/java/com/falsepattern/lib/internal/asm/FPTransformer.java +++ b/src/main/java/com/falsepattern/lib/internal/asm/FPTransformer.java @@ -22,7 +22,6 @@ package com.falsepattern.lib.internal.asm; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.asm.transformers.ConfigOrderTransformer; import com.falsepattern.lib.internal.asm.transformers.CrashReportImprover; import com.falsepattern.lib.internal.asm.transformers.MixinPluginTransformer; @@ -34,7 +33,6 @@ import lombok.experimental.Accessors; import java.util.Arrays; @Accessors(fluent = true) -@StableAPI(since = "__INTERNAL__") public class FPTransformer extends MergeableTurboTransformer { static { OptiFineTransformerHooksImpl.init(); diff --git a/src/main/java/com/falsepattern/lib/internal/asm/package-info.java b/src/main/java/com/falsepattern/lib/internal/asm/package-info.java new file mode 100644 index 0000000..3318851 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/asm/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.asm; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/asm/transformers/package-info.java b/src/main/java/com/falsepattern/lib/internal/asm/transformers/package-info.java new file mode 100644 index 0000000..1d3352f --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/asm/transformers/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.asm.transformers; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/config/ConfigEngineConfig.java b/src/main/java/com/falsepattern/lib/internal/config/ConfigEngineConfig.java index 7c59004..7ce0c7b 100644 --- a/src/main/java/com/falsepattern/lib/internal/config/ConfigEngineConfig.java +++ b/src/main/java/com/falsepattern/lib/internal/config/ConfigEngineConfig.java @@ -22,7 +22,6 @@ package com.falsepattern.lib.internal.config; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.config.Config; import com.falsepattern.lib.config.ConfigurationManager; import com.falsepattern.lib.internal.Tags; @@ -60,8 +59,8 @@ public class ConfigEngineConfig { } public enum LoggingLevel { - @StableAPI.Expose(since = "__INTERNAL__") None, - @StableAPI.Expose(since = "__INTERNAL__") Log, - @StableAPI.Expose(since = "__INTERNAL__") LogAndToast + None, + Log, + LogAndToast } } diff --git a/src/main/java/com/falsepattern/lib/internal/config/EarlyConfig.java b/src/main/java/com/falsepattern/lib/internal/config/EarlyConfig.java index d9dd7aa..18726da 100644 --- a/src/main/java/com/falsepattern/lib/internal/config/EarlyConfig.java +++ b/src/main/java/com/falsepattern/lib/internal/config/EarlyConfig.java @@ -22,7 +22,6 @@ package com.falsepattern.lib.internal.config; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.Tags; import com.falsepattern.lib.internal.core.LowLevelCallMultiplexer; import com.google.gson.GsonBuilder; @@ -43,11 +42,9 @@ import java.nio.file.Files; @Accessors(fluent = true) public class EarlyConfig { @Expose - @StableAPI.Expose(since = "__INTERNAL__") private boolean enableLibraryDownloads; @Expose - @StableAPI.Expose(since = "__INTERNAL__") private boolean enableLetsEncryptRoot; private static volatile EarlyConfig instance = null; diff --git a/src/main/java/com/falsepattern/lib/internal/config/ToastConfig.java b/src/main/java/com/falsepattern/lib/internal/config/ToastConfig.java index 0fae73e..8200ecf 100644 --- a/src/main/java/com/falsepattern/lib/internal/config/ToastConfig.java +++ b/src/main/java/com/falsepattern/lib/internal/config/ToastConfig.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.internal.config; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.config.Config; import com.falsepattern.lib.config.ConfigurationManager; import com.falsepattern.lib.internal.Tags; @@ -65,7 +64,7 @@ public class ToastConfig { } public enum Side { - @StableAPI.Expose(since = "__INTERNAL__") Left, - @StableAPI.Expose(since = "__INTERNAL__") Right + Left, + Right } } diff --git a/src/main/java/com/falsepattern/lib/internal/config/package-info.java b/src/main/java/com/falsepattern/lib/internal/config/package-info.java new file mode 100644 index 0000000..7e90159 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/config/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.config; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/core/package-info.java b/src/main/java/com/falsepattern/lib/internal/core/package-info.java new file mode 100644 index 0000000..53eb945 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/core/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.core; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/impl/config/event/package-info.java b/src/main/java/com/falsepattern/lib/internal/impl/config/event/package-info.java new file mode 100644 index 0000000..c22dd0a --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/impl/config/event/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.impl.config.event; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/package-info.java b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/package-info.java new file mode 100644 index 0000000..4a98601 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.impl.config.fields; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/impl/config/net/package-info.java b/src/main/java/com/falsepattern/lib/internal/impl/config/net/package-info.java new file mode 100644 index 0000000..500575e --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/impl/config/net/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.impl.config.net; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/impl/config/package-info.java b/src/main/java/com/falsepattern/lib/internal/impl/config/package-info.java new file mode 100644 index 0000000..3309fb3 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/impl/config/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.impl.config; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/impl/dependencies/DepRoot.java b/src/main/java/com/falsepattern/lib/internal/impl/dependencies/DepRoot.java index 18aad12..a6a2237 100644 --- a/src/main/java/com/falsepattern/lib/internal/impl/dependencies/DepRoot.java +++ b/src/main/java/com/falsepattern/lib/internal/impl/dependencies/DepRoot.java @@ -22,7 +22,6 @@ package com.falsepattern.lib.internal.impl.dependencies; -import com.falsepattern.lib.StableAPI; import com.google.gson.annotations.Expose; import lombok.Data; import lombok.experimental.Accessors; @@ -34,23 +33,18 @@ import java.util.List; public class DepRoot { private String source; @Expose - @StableAPI.Expose(since = "__INTERNAL__") private List repositories; @Expose - @StableAPI.Expose(since = "__INTERNAL__") private Dependencies dependencies; @Data @Accessors(fluent = true) public static class Dependencies { @Expose - @StableAPI.Expose(since = "__INTERNAL__") private SidedDependencies always; @Expose - @StableAPI.Expose(since = "__INTERNAL__") private SidedDependencies obf; @Expose - @StableAPI.Expose(since = "__INTERNAL__") private SidedDependencies dev; } @@ -58,13 +52,10 @@ public class DepRoot { @Accessors(fluent = true) public static class SidedDependencies { @Expose - @StableAPI.Expose(since = "__INTERNAL__") private List common; @Expose - @StableAPI.Expose(since = "__INTERNAL__") private List client; @Expose - @StableAPI.Expose(since = "__INTERNAL__") private List server; } } diff --git a/src/main/java/com/falsepattern/lib/internal/impl/dependencies/package-info.java b/src/main/java/com/falsepattern/lib/internal/impl/dependencies/package-info.java new file mode 100644 index 0000000..cb06484 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/impl/dependencies/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.impl.dependencies; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/impl/mixin/package-info.java b/src/main/java/com/falsepattern/lib/internal/impl/mixin/package-info.java new file mode 100644 index 0000000..7a44c3c --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/impl/mixin/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.impl.mixin; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/impl/optifine/package-info.java b/src/main/java/com/falsepattern/lib/internal/impl/optifine/package-info.java new file mode 100644 index 0000000..a156a37 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/impl/optifine/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.impl.optifine; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/impl/package-info.java b/src/main/java/com/falsepattern/lib/internal/impl/package-info.java new file mode 100644 index 0000000..5d37bad --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/impl/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.impl; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/impl/toast/package-info.java b/src/main/java/com/falsepattern/lib/internal/impl/toast/package-info.java new file mode 100644 index 0000000..8e7cc23 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/impl/toast/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.impl.toast; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/logging/package-info.java b/src/main/java/com/falsepattern/lib/internal/logging/package-info.java new file mode 100644 index 0000000..55ccc06 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/logging/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.logging; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/package-info.java b/src/main/java/com/falsepattern/lib/internal/package-info.java new file mode 100644 index 0000000..9fedf36 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/proxy/package-info.java b/src/main/java/com/falsepattern/lib/internal/proxy/package-info.java new file mode 100644 index 0000000..ec530a5 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/proxy/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.proxy; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/render/package-info.java b/src/main/java/com/falsepattern/lib/internal/render/package-info.java new file mode 100644 index 0000000..a699bc1 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/render/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +@ApiStatus.Internal +package com.falsepattern.lib.internal.render; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/mapping/MappingManager.java b/src/main/java/com/falsepattern/lib/mapping/MappingManager.java index 8de6683..d8530cf 100644 --- a/src/main/java/com/falsepattern/lib/mapping/MappingManager.java +++ b/src/main/java/com/falsepattern/lib/mapping/MappingManager.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.mapping; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.FPLog; import com.falsepattern.lib.internal.asm.CoreLoadingPlugin; import com.falsepattern.lib.mapping.storage.Lookup; @@ -39,7 +38,6 @@ import org.objectweb.asm.tree.MethodInsnNode; import java.util.HashMap; import java.util.concurrent.atomic.AtomicLong; -@StableAPI(since = "0.10.0") public class MappingManager { private static Lookup internalLookup; private static Lookup regularLookup; @@ -117,7 +115,6 @@ public class MappingManager { } } - @StableAPI.Expose public static UniversalClass classForName(NameType nameType, MappingType mappingType, String className) throws ClassNotFoundException { initialize(); @@ -142,7 +139,6 @@ public class MappingManager { } } - @StableAPI.Expose public static boolean containsClass(NameType nameType, MappingType mappingType, String className) { initialize(); switch (nameType) { @@ -155,7 +151,6 @@ public class MappingManager { } } - @StableAPI.Expose public static UniversalField getField(FieldInsnNode instruction) throws ClassNotFoundException, NoSuchFieldException { initialize(); @@ -186,7 +181,6 @@ public class MappingManager { } } - @StableAPI.Expose public static UniversalMethod getMethod(MethodInsnNode instruction) throws ClassNotFoundException, NoSuchMethodException { initialize(); diff --git a/src/main/java/com/falsepattern/lib/mapping/package-info.java b/src/main/java/com/falsepattern/lib/mapping/package-info.java new file mode 100644 index 0000000..b64d655 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/mapping/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +/** + * @since 0.10.0 + */ +package com.falsepattern.lib.mapping; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/mapping/storage/Lookup.java b/src/main/java/com/falsepattern/lib/mapping/storage/Lookup.java index 2bd9167..c036b1a 100644 --- a/src/main/java/com/falsepattern/lib/mapping/storage/Lookup.java +++ b/src/main/java/com/falsepattern/lib/mapping/storage/Lookup.java @@ -21,12 +21,12 @@ */ package com.falsepattern.lib.mapping.storage; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.mapping.types.MappingType; import lombok.EqualsAndHashCode; import lombok.NonNull; import lombok.experimental.Accessors; import lombok.val; +import org.jetbrains.annotations.ApiStatus; import java.util.HashMap; import java.util.HashSet; @@ -36,7 +36,6 @@ import java.util.Set; @Accessors(fluent = true) @EqualsAndHashCode -@StableAPI(since = "0.10.0") public class Lookup { private final Set values = new HashSet<>(); private final Map notch = new HashMap<>(); @@ -53,12 +52,10 @@ public class Lookup { } } - @StableAPI.Expose public boolean contains(T value) { return values.contains(value); } - @StableAPI.Expose public boolean containsKey(MappingType mappingType, String key) { switch (mappingType) { case Notch: @@ -72,7 +69,6 @@ public class Lookup { } } - @StableAPI.Expose public void unwrap(@NonNull MappedString mappedString, @NonNull T value) { if (contains(value)) { //Collision avoidance. @@ -87,7 +83,6 @@ public class Lookup { mcp.put(mappedString.mcp, value); } - @StableAPI.Expose public T get(MappingType mappingType, String key) throws LookupException { T result; switch (mappingType) { @@ -109,8 +104,8 @@ public class Lookup { return result; } - @StableAPI(since = "0.10.0") public static class LookupException extends Exception { + @ApiStatus.Internal public LookupException(String message) { super(message); } diff --git a/src/main/java/com/falsepattern/lib/mapping/storage/MappedString.java b/src/main/java/com/falsepattern/lib/mapping/storage/MappedString.java index c593ba5..2c27657 100644 --- a/src/main/java/com/falsepattern/lib/mapping/storage/MappedString.java +++ b/src/main/java/com/falsepattern/lib/mapping/storage/MappedString.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.mapping.storage; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.mapping.types.MappingType; import lombok.AccessLevel; import lombok.EqualsAndHashCode; @@ -38,32 +37,23 @@ import java.util.function.Function; @EqualsAndHashCode @Getter @RequiredArgsConstructor(access = AccessLevel.PRIVATE) -@StableAPI(since = "0.10.0") public class MappedString { - @StableAPI.Expose public final String notch; - - @StableAPI.Expose public final String srg; - - @StableAPI.Expose public final String mcp; - @StableAPI.Expose public MappedString(String[] source, int offset, int stride, Function remapper, Map stringPool) { notch = stringPool.computeIfAbsent(remapper.apply(source[offset]), (str) -> str); srg = stringPool.computeIfAbsent(remapper.apply(source[offset + stride]), (str) -> str); mcp = stringPool.computeIfAbsent(remapper.apply(source[offset + stride * 2]), (str) -> str); } - @StableAPI.Expose public static MappedString fuse(MappedString a, MappedString b, String delimiter, Map stringPool) { return new MappedString(stringPool.computeIfAbsent(a.notch + delimiter + b.notch, (str) -> str), stringPool.computeIfAbsent(a.srg + delimiter + b.srg, (str) -> str), stringPool.computeIfAbsent(a.mcp + delimiter + b.mcp, (str) -> str)); } - @StableAPI.Expose public String get(MappingType type) { switch (type) { case Notch: diff --git a/src/main/java/com/falsepattern/lib/mapping/types/MappingType.java b/src/main/java/com/falsepattern/lib/mapping/types/MappingType.java index 5f2e6bf..0d33a00 100644 --- a/src/main/java/com/falsepattern/lib/mapping/types/MappingType.java +++ b/src/main/java/com/falsepattern/lib/mapping/types/MappingType.java @@ -21,11 +21,8 @@ */ package com.falsepattern.lib.mapping.types; -import com.falsepattern.lib.StableAPI; - -@StableAPI(since = "0.10.0") public enum MappingType { - @StableAPI.Expose Notch, - @StableAPI.Expose SRG, - @StableAPI.Expose MCP + Notch, + SRG, + MCP } diff --git a/src/main/java/com/falsepattern/lib/mapping/types/NameType.java b/src/main/java/com/falsepattern/lib/mapping/types/NameType.java index d825a86..d2dfd30 100644 --- a/src/main/java/com/falsepattern/lib/mapping/types/NameType.java +++ b/src/main/java/com/falsepattern/lib/mapping/types/NameType.java @@ -21,10 +21,7 @@ */ package com.falsepattern.lib.mapping.types; -import com.falsepattern.lib.StableAPI; - -@StableAPI(since = "0.10.0") public enum NameType { - @StableAPI.Expose Internal, - @StableAPI.Expose Regular + Internal, + Regular } \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/mapping/types/UniversalClass.java b/src/main/java/com/falsepattern/lib/mapping/types/UniversalClass.java index 7a57a8d..c25abe2 100644 --- a/src/main/java/com/falsepattern/lib/mapping/types/UniversalClass.java +++ b/src/main/java/com/falsepattern/lib/mapping/types/UniversalClass.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.mapping.types; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.asm.CoreLoadingPlugin; import com.falsepattern.lib.mapping.storage.Lookup; import com.falsepattern.lib.mapping.storage.MappedString; @@ -35,13 +34,12 @@ import java.util.Map; @Accessors(fluent = true) @ToString(onlyExplicitlyIncluded = true) @EqualsAndHashCode(onlyExplicitlyIncluded = true) -@StableAPI(since = "0.10.0") public class UniversalClass { - @Getter(onMethod_ = @StableAPI.Expose) + @Getter @ToString.Include @EqualsAndHashCode.Include public final MappedString internalName; - @Getter(onMethod_ = @StableAPI.Expose) + @Getter @ToString.Include @EqualsAndHashCode.Include public final MappedString regularName; @@ -53,7 +51,6 @@ public class UniversalClass { @Getter private MappingType realClassMapping = null; - @StableAPI.Expose public UniversalClass(String[] names, Map stringPool) { internalName = new MappedString(names, 0, 1, (str) -> str, stringPool); regularName = new MappedString(names, 0, 1, (str) -> str.replace('/', '.'), stringPool); @@ -73,7 +70,6 @@ public class UniversalClass { methods.unwrap(method.fusedNameDescriptor, method); } - @StableAPI.Expose public Class asJavaClass() throws ClassNotFoundException { if (javaClassCache != null) { return javaClassCache; @@ -98,7 +94,6 @@ public class UniversalClass { return javaClassCache; } - @StableAPI.Expose public String getName(NameType nameType, MappingType mappingType) { switch (nameType) { case Internal: @@ -110,12 +105,10 @@ public class UniversalClass { } } - @StableAPI.Expose public String getNameAsDescriptor(MappingType mappingType) { return "L" + getName(NameType.Internal, mappingType) + ";"; } - @StableAPI.Expose public UniversalField getField(MappingType mappingType, String fieldName) throws NoSuchFieldException { try { return fields.get(mappingType, fieldName); @@ -124,7 +117,6 @@ public class UniversalClass { } } - @StableAPI.Expose public UniversalMethod getMethod(MappingType mappingType, String methodName, String methodDescriptor) throws NoSuchMethodException { try { diff --git a/src/main/java/com/falsepattern/lib/mapping/types/UniversalField.java b/src/main/java/com/falsepattern/lib/mapping/types/UniversalField.java index df8382d..a0f2101 100644 --- a/src/main/java/com/falsepattern/lib/mapping/types/UniversalField.java +++ b/src/main/java/com/falsepattern/lib/mapping/types/UniversalField.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.mapping.types; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.ReflectionUtil; import com.falsepattern.lib.mapping.storage.MappedString; import lombok.EqualsAndHashCode; @@ -39,14 +38,13 @@ import java.util.Map; @Accessors(fluent = true) @ToString @EqualsAndHashCode -@StableAPI(since = "0.10.0") public class UniversalField { - @Getter(onMethod_ = @StableAPI.Expose) + @Getter @ToString.Exclude @EqualsAndHashCode.Exclude public final UniversalClass parent; - @Getter(onMethod_ = @StableAPI.Expose) + @Getter public final MappedString name; private Field javaFieldCache = null; @@ -57,17 +55,14 @@ public class UniversalField { parent.addField(this); } - @StableAPI.Expose public static void createAndAddToParent(@NonNull UniversalClass parent, String[] names, Map stringPool) { new UniversalField(parent, names, stringPool); } - @StableAPI.Expose public String getName(MappingType mappingType) { return name.get(mappingType); } - @StableAPI.Expose public Field asJavaField() throws ClassNotFoundException, NoSuchFieldException { if (javaFieldCache != null) { return javaFieldCache; @@ -83,13 +78,11 @@ public class UniversalField { * you don't need to manually handle exceptions. */ @SuppressWarnings("unchecked") - @StableAPI.Expose public T get(Object instance) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException { val field = asJavaField(); return (T) field.get(instance); } - @StableAPI.Expose public FieldInsnNode asInstruction(int opcode, MappingType mapping, String descriptor) { return new FieldInsnNode(opcode, parent.getName(NameType.Internal, mapping), getName(mapping), descriptor); } diff --git a/src/main/java/com/falsepattern/lib/mapping/types/UniversalMethod.java b/src/main/java/com/falsepattern/lib/mapping/types/UniversalMethod.java index 7e20b98..085d5b2 100644 --- a/src/main/java/com/falsepattern/lib/mapping/types/UniversalMethod.java +++ b/src/main/java/com/falsepattern/lib/mapping/types/UniversalMethod.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.mapping.types; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.ReflectionUtil; import com.falsepattern.lib.mapping.storage.MappedString; import lombok.EqualsAndHashCode; @@ -41,20 +40,19 @@ import java.util.Map; @Accessors(fluent = true) @ToString @EqualsAndHashCode -@StableAPI(since = "0.10.0") public class UniversalMethod { - @Getter(onMethod_ = @StableAPI.Expose) + @Getter @ToString.Exclude @EqualsAndHashCode.Exclude public final UniversalClass parent; - @Getter(onMethod_ = @StableAPI.Expose) + @Getter public final MappedString name; - @Getter(onMethod_ = @StableAPI.Expose) + @Getter public final MappedString descriptor; - @Getter(onMethod_ = @StableAPI.Expose) + @Getter public final MappedString fusedNameDescriptor; private Method javaMethodCache = null; @@ -67,7 +65,6 @@ public class UniversalMethod { parent.addMethod(this); } - @StableAPI.Expose public static void createAndAddToParent(@NonNull UniversalClass parent, String[] names, Map stringPool) { new UniversalMethod(parent, names, stringPool); } @@ -135,17 +132,14 @@ public class UniversalMethod { return result.toArray(new Class[0]); } - @StableAPI.Expose public String getName(MappingType mappingType) { return name.get(mappingType); } - @StableAPI.Expose public String getDescriptor(MappingType mappingType) { return descriptor.get(mappingType); } - @StableAPI.Expose public Method asJavaMethod() throws ClassNotFoundException, NoSuchMethodException { if (javaMethodCache != null) { return javaMethodCache; @@ -163,18 +157,15 @@ public class UniversalMethod { */ @SuppressWarnings("unchecked") @SneakyThrows - @StableAPI.Expose public T invoke(Object instance, Object... arguments) { val m = asJavaMethod(); return (T) m.invoke(instance, arguments); } - @StableAPI.Expose public T invokeStatic(Object... arguments) { return invoke(null, arguments); } - @StableAPI.Expose public MethodInsnNode asInstruction(int opcode, MappingType mapping, boolean itf) { return new MethodInsnNode(opcode, parent.getName(NameType.Internal, mapping), diff --git a/src/main/java/com/falsepattern/lib/mapping/types/package-info.java b/src/main/java/com/falsepattern/lib/mapping/types/package-info.java new file mode 100644 index 0000000..92264d0 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/mapping/types/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +/** + * @since 0.10.0 + */ +package com.falsepattern.lib.mapping.types; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/mixin/IMixin.java b/src/main/java/com/falsepattern/lib/mixin/IMixin.java index 5dd2e53..aa86a07 100644 --- a/src/main/java/com/falsepattern/lib/mixin/IMixin.java +++ b/src/main/java/com/falsepattern/lib/mixin/IMixin.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.mixin; -import com.falsepattern.lib.StableAPI; import lombok.val; import cpw.mods.fml.relauncher.FMLLaunchHandler; @@ -30,16 +29,9 @@ import java.util.List; import java.util.function.Predicate; import java.util.function.Supplier; -@StableAPI(since = "0.8.0") public interface IMixin { - - @StableAPI.Expose String getMixin(); - - @StableAPI.Expose Side getSide(); - - @StableAPI.Expose Predicate> getFilter(); default boolean shouldLoad(List loadedMods) { @@ -49,36 +41,35 @@ public interface IMixin { || side == Side.CLIENT && FMLLaunchHandler.side().isClient()) && getFilter().test(loadedMods); } - @StableAPI(since = "0.10.0") + /** + * @since 0.10.0 + */ enum Side { - @StableAPI.Expose COMMON, - @StableAPI.Expose CLIENT, - @StableAPI.Expose SERVER + COMMON, + CLIENT, + SERVER } - @StableAPI(since = "0.10.0") + /** + * @since 0.10.0 + */ final class PredicateHelpers { - @StableAPI.Expose public static Predicate> never() { return (list) -> false; } - @StableAPI.Expose public static Predicate> condition(Supplier condition) { return (list) -> condition.get(); } - @StableAPI.Expose public static Predicate> always() { return (list) -> true; } - @StableAPI.Expose public static Predicate> require(ITargetedMod mod) { return (list) -> list.contains(mod); } - @StableAPI.Expose public static Predicate> avoid(ITargetedMod mod) { return (list) -> !list.contains(mod); } diff --git a/src/main/java/com/falsepattern/lib/mixin/IMixinPlugin.java b/src/main/java/com/falsepattern/lib/mixin/IMixinPlugin.java index ceb6640..b39b292 100644 --- a/src/main/java/com/falsepattern/lib/mixin/IMixinPlugin.java +++ b/src/main/java/com/falsepattern/lib/mixin/IMixinPlugin.java @@ -21,12 +21,11 @@ */ package com.falsepattern.lib.mixin; -import com.falsepattern.lib.DeprecationDetails; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.util.FileUtil; import lombok.val; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.ApiStatus; import org.spongepowered.asm.lib.tree.ClassNode; import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; import org.spongepowered.asm.mixin.extensibility.IMixinInfo; @@ -47,19 +46,14 @@ import java.util.stream.Collectors; import static java.nio.file.Files.walk; -@StableAPI(since = "0.8.0") public interface IMixinPlugin extends IMixinConfigPlugin { - @StableAPI.Expose Path MODS_DIRECTORY_PATH = FileUtil.getMinecraftHome().toPath().resolve("mods"); - @StableAPI.Expose static Logger createLogger(String modName) { return LogManager.getLogger(modName + " Mixin Loader"); } - @Deprecated - @DeprecationDetails(deprecatedSince = "1.4.0") - @StableAPI.Expose + @Deprecated(since = "1.4.0") static File findJarOf(final ITargetedMod mod) { File result = null; try (val stream = walk(MODS_DIRECTORY_PATH)) { @@ -85,7 +79,9 @@ public interface IMixinPlugin extends IMixinConfigPlugin { return result; } - @StableAPI.Expose(since = "1.4.0") + /** + * @since 1.4.0 + */ static Set findJarsOf(IMixinPlugin self, final ITargetedMod mod) { if (!self.useNewFindJar()) { val jar = findJarOf(mod); @@ -111,46 +107,45 @@ public interface IMixinPlugin extends IMixinConfigPlugin { return results; } - @StableAPI.Expose Logger getLogger(); - @StableAPI.Expose IMixin[] getMixinEnumValues(); - @StableAPI.Expose ITargetedMod[] getTargetedModEnumValues(); - @StableAPI.Expose(since = "1.4.0") + /** + * @since 1.4.0 + */ default boolean useNewFindJar() { return false; } @Override - @StableAPI.Expose(since = "__INTERNAL__") + @ApiStatus.Internal default void onLoad(String mixinPackage) { } @Override - @StableAPI.Expose(since = "__INTERNAL__") + @ApiStatus.Internal default String getRefMapperConfig() { return null; } @Override - @StableAPI.Expose(since = "__INTERNAL__") + @ApiStatus.Internal default boolean shouldApplyMixin(String targetClassName, String mixinClassName) { return true; } @Override - @StableAPI.Expose(since = "__INTERNAL__") + @ApiStatus.Internal default void acceptTargets(Set myTargets, Set otherTargets) { } @Override - @StableAPI.Expose(since = "__INTERNAL__") + @ApiStatus.Internal default List getMixins() { val isDevelopmentEnvironment = (boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); val targetedMods = getTargetedModEnumValues(); @@ -185,7 +180,7 @@ public interface IMixinPlugin extends IMixinConfigPlugin { return mixins; } - @StableAPI.Expose(since = "__INTERNAL__") + @ApiStatus.Internal default boolean loadJarOf(final ITargetedMod mod) { try { val jars = findJarsOf(this, mod); @@ -207,14 +202,14 @@ public interface IMixinPlugin extends IMixinConfigPlugin { return true; } - @StableAPI.Expose(since = "__INTERNAL__") @Override + @ApiStatus.Internal default void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { } - @StableAPI.Expose(since = "__INTERNAL__") @Override + @ApiStatus.Internal default void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { } diff --git a/src/main/java/com/falsepattern/lib/mixin/ITargetedMod.java b/src/main/java/com/falsepattern/lib/mixin/ITargetedMod.java index e20e4c0..e021831 100644 --- a/src/main/java/com/falsepattern/lib/mixin/ITargetedMod.java +++ b/src/main/java/com/falsepattern/lib/mixin/ITargetedMod.java @@ -21,23 +21,17 @@ */ package com.falsepattern.lib.mixin; -import com.falsepattern.lib.StableAPI; import com.google.common.io.Files; import java.nio.file.Path; import java.util.function.Predicate; -@StableAPI(since = "0.8.0") public interface ITargetedMod { - - @StableAPI.Expose String getModName(); - @StableAPI.Expose boolean isLoadInDevelopment(); @SuppressWarnings("UnstableApiUsage") - @StableAPI.Expose default boolean isMatchingJar(Path path) { String pathString = path.toString(); String nameLowerCase = Files.getNameWithoutExtension(pathString).toLowerCase(); @@ -46,22 +40,17 @@ public interface ITargetedMod { return "jar".equals(fileExtension) && getCondition().test(nameLowerCase); } - @StableAPI.Expose Predicate getCondition(); - @StableAPI(since = "0.5.0") final class PredicateHelpers { - @StableAPI.Expose public static Predicate startsWith(String subString) { return (name) -> name.startsWith(subString.toLowerCase()); } - @StableAPI.Expose public static Predicate contains(String subString) { return (name) -> name.contains(subString.toLowerCase()); } - @StableAPI.Expose public static Predicate matches(String regex) { return (name) -> name.matches(regex); } diff --git a/src/main/java/com/falsepattern/lib/mixin/MinecraftURLClassPath.java b/src/main/java/com/falsepattern/lib/mixin/MinecraftURLClassPath.java index 746be0e..d02f896 100644 --- a/src/main/java/com/falsepattern/lib/mixin/MinecraftURLClassPath.java +++ b/src/main/java/com/falsepattern/lib/mixin/MinecraftURLClassPath.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.mixin; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.impl.mixin.UCPImpl; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -32,11 +31,11 @@ import java.io.File; * Backport from spongemixins 1.3 for compat with the curseforge 1.2.0 version. *

* Also added Grimoire protection. + * + * @since 0.10.0 */ @NoArgsConstructor(access = AccessLevel.PRIVATE) -@StableAPI(since = "0.10.0") public final class MinecraftURLClassPath { - @StableAPI.Expose public static void addJar(File pathToJar) throws Exception { UCPImpl.addJar(pathToJar); } diff --git a/src/main/java/com/falsepattern/lib/mixin/MixinInfo.java b/src/main/java/com/falsepattern/lib/mixin/MixinInfo.java index c2b2efd..0503b6b 100644 --- a/src/main/java/com/falsepattern/lib/mixin/MixinInfo.java +++ b/src/main/java/com/falsepattern/lib/mixin/MixinInfo.java @@ -22,8 +22,8 @@ package com.falsepattern.lib.mixin; -import com.falsepattern.lib.StableAPI; import lombok.val; +import org.jetbrains.annotations.ApiStatus; import org.spongepowered.asm.launch.MixinBootstrap; import net.minecraft.launchwrapper.Launch; @@ -31,9 +31,10 @@ import net.minecraft.launchwrapper.Launch; import java.io.IOException; import java.util.Optional; -@StableAPI(since = "0.10.2") +/** + * @since 0.10.2 + */ public final class MixinInfo { - @StableAPI.Expose public static final MixinBootstrapperType mixinBootstrapper; static { @@ -41,12 +42,10 @@ public final class MixinInfo { mixinBootstrapper = detect(); } - @StableAPI.Expose public static boolean isMixinsInstalled() { return mixinBootstrapper != MixinBootstrapperType.None; } - @StableAPI.Expose public static boolean isOfficialSpongeMixins() { return (mixinBootstrapper == MixinBootstrapperType.SpongeMixins) && getVerUnsafe().equals("0.7.11"); } @@ -54,37 +53,36 @@ public final class MixinInfo { /** * The nh fork of spongemixins breaks some stuff since 1.5.0. */ - @StableAPI.Expose public static boolean isTamperedSpongeMixins() { return (mixinBootstrapper == MixinBootstrapperType.SpongeMixins) && getVerUnsafe().equals("0.7.12"); } - @StableAPI.Expose public static boolean isGrimoire() { return mixinBootstrapper == MixinBootstrapperType.Grimoire; } - @StableAPI.Expose public static boolean isMixinBooterLegacy() { return mixinBootstrapper == MixinBootstrapperType.MixinBooterLegacy; } - @StableAPI.Expose(since = "0.10.14") + /** + * @since 0.10.14 + */ public static boolean isGasStation() { return mixinBootstrapper == MixinBootstrapperType.GasStation; } - @StableAPI.Expose(since = "0.10.15") + /** + * @since 0.10.15 + */ public static boolean isUniMixin() { return mixinBootstrapper == MixinBootstrapperType.UniMixin; } - @StableAPI.Expose public static MixinBootstrapperType bootstrapperType() { return mixinBootstrapper; } - @StableAPI.Expose public static Optional mixinVersion() { return mixinBootstrapper != MixinBootstrapperType.None ? Optional.of(getVerUnsafe()) : Optional.empty(); } @@ -93,6 +91,7 @@ public final class MixinInfo { return MixinBootstrap.VERSION; } + @ApiStatus.Internal public static boolean isClassPresentSafe(String clazz) { try { val bytes = Launch.classLoader.getClassBytes(clazz); @@ -130,14 +129,18 @@ public final class MixinInfo { return MixinBootstrapperType.Other; } - @StableAPI(since = "0.10.2") + /** + * @since 0.10.2 + */ public enum MixinBootstrapperType { - @StableAPI.Expose None, - @StableAPI.Expose(since = "0.10.9") GasStation, - @StableAPI.Expose SpongeMixins, - @StableAPI.Expose Grimoire, - @StableAPI.Expose MixinBooterLegacy, - @StableAPI.Expose Other, - @StableAPI.Expose(since = "0.10.15") UniMixin + None, + /** @since 0.10.9 */ + GasStation, + SpongeMixins, + Grimoire, + MixinBooterLegacy, + Other, + /** @since 0.10.15 */ + UniMixin } } diff --git a/src/main/java/com/falsepattern/lib/mixin/MixinInfoCompatCompanion.java b/src/main/java/com/falsepattern/lib/mixin/MixinInfoCompatCompanion.java index 2d78ea2..f2e40eb 100644 --- a/src/main/java/com/falsepattern/lib/mixin/MixinInfoCompatCompanion.java +++ b/src/main/java/com/falsepattern/lib/mixin/MixinInfoCompatCompanion.java @@ -22,7 +22,6 @@ package com.falsepattern.lib.mixin; -import com.falsepattern.lib.StableAPI; import lombok.Getter; import java.util.ArrayList; @@ -32,20 +31,20 @@ import java.util.List; /** * This is a class you can use to interact with MixinInfo before it gets classloaded. * (Originally placed here for future unimixins compat in case they change the class names) + * + * @since 0.10.15 */ -@StableAPI(since = "0.10.15") public class MixinInfoCompatCompanion { /** * A list of all mixin classes that are candidates for unimixins. * This is used to determine if a mixin plugin is unimixins. Once MixinInfo is classloaded, this list has no effect. */ - @StableAPI.Expose public static final List UNIMIXIN_CANDIDATES = new ArrayList<>(Arrays.asList( "io.github.legacymoddingmc.unimixins.compat.CompatCore", "io.github.legacymoddingmc.unimixins.devcompat.DevCompatCore", "io.github.legacymoddingmc.unimixins.all.AllCore", "io.github.legacymoddingmc.unimixins.mixin.MixinModule")); - @Getter(onMethod_ = @StableAPI.Expose) + @Getter static boolean mixinInfoClassLoaded = false; } diff --git a/src/main/java/com/falsepattern/lib/mixin/package-info.java b/src/main/java/com/falsepattern/lib/mixin/package-info.java new file mode 100644 index 0000000..8dacac9 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/mixin/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +/** + * @since 0.8.0 + */ +package com.falsepattern.lib.mixin; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/optifine/OptiFineTransformerHooks.java b/src/main/java/com/falsepattern/lib/optifine/OptiFineTransformerHooks.java index 55043cd..0c8c7ca 100644 --- a/src/main/java/com/falsepattern/lib/optifine/OptiFineTransformerHooks.java +++ b/src/main/java/com/falsepattern/lib/optifine/OptiFineTransformerHooks.java @@ -22,7 +22,6 @@ package com.falsepattern.lib.optifine; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.impl.optifine.OptiFineTransformerHooksImpl; /** @@ -30,10 +29,10 @@ import com.falsepattern.lib.internal.impl.optifine.OptiFineTransformerHooksImpl; * If you have a mod that injects code that would otherwise conflict with OptiFine, and you have provably tested that * removing certain OptiFine patches from the jar does NOT break anything, you may use this class to disable them * without having to do jar file edits. + * + * @since 1.0.0 */ -@StableAPI(since = "1.0.0") public class OptiFineTransformerHooks { - @StableAPI.Expose public static void disableOptiFinePatch(String patchName) { OptiFineTransformerHooksImpl.disableOptiFinePatch(patchName); } diff --git a/src/main/java/com/falsepattern/lib/text/FormattedText.java b/src/main/java/com/falsepattern/lib/text/FormattedText.java index f593932..523560c 100644 --- a/src/main/java/com/falsepattern/lib/text/FormattedText.java +++ b/src/main/java/com/falsepattern/lib/text/FormattedText.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.text; -import com.falsepattern.lib.StableAPI; import lombok.NonNull; import lombok.val; @@ -52,8 +51,9 @@ import java.util.function.Consumer; /** * Universal escape sequence-based text rendering and chat messages. + * + * @since 0.6.0 */ -@StableAPI(since = "0.6.0") public final class FormattedText { private static final Map reverseMap = new HashMap<>(); private static final Map colorMap = new HashMap<>(); @@ -149,7 +149,6 @@ public final class FormattedText { * * @return The parsed text structure */ - @StableAPI.Expose public static FormattedText parse(String text) { EnumChatFormatting currentColorStyle = EnumChatFormatting.WHITE; val currentFancyStyle = new HashSet(); @@ -199,7 +198,6 @@ public final class FormattedText { return result; } - @StableAPI.Expose public void addChatMessage(ICommandSender target) { addChatMessage(target::addChatMessage); } @@ -216,7 +214,6 @@ public final class FormattedText { * * @return The chat component. */ - @StableAPI.Expose public List toChatText() { var thisComponent = toChatTextSingle(); val result = new ArrayList(); @@ -264,33 +261,27 @@ public final class FormattedText { } @SideOnly(Side.CLIENT) - @StableAPI.Expose public void addChatMessage(EntityOtherPlayerMP target) { addChatMessage(target::addChatMessage); } @SideOnly(Side.CLIENT) - @StableAPI.Expose public void addChatMessage(EntityPlayerSP target) { addChatMessage(target::addChatMessage); } - @StableAPI.Expose public void addChatMessage(CommandBlockLogic target) { addChatMessage(target::addChatMessage); } - @StableAPI.Expose public void addChatMessage(EntityPlayerMP target) { addChatMessage(target::addChatMessage); } - @StableAPI.Expose public void addChatMessage(RConConsoleSource target) { addChatMessage(target::addChatMessage); } - @StableAPI.Expose public void addChatMessage(MinecraftServer target) { addChatMessage(target::addChatMessage); } @@ -303,7 +294,6 @@ public final class FormattedText { * @param y Top side */ @SideOnly(Side.CLIENT) - @StableAPI.Expose public void draw(FontRenderer renderer, int x, int y) { draw(renderer, x, y, false); } @@ -317,7 +307,6 @@ public final class FormattedText { * @param shadow Whether to have drop shadow under the text */ @SideOnly(Side.CLIENT) - @StableAPI.Expose public void draw(FontRenderer renderer, int x, int y, boolean shadow) { int startX = x; x = renderer.drawString(text, x, y, colorMap.get(colorStyle).getRGB(), shadow); @@ -342,7 +331,6 @@ public final class FormattedText { * @param y Top side */ @SideOnly(Side.CLIENT) - @StableAPI.Expose public void drawWithShadow(FontRenderer renderer, int x, int y) { draw(renderer, x, y, true); } diff --git a/src/main/java/com/falsepattern/lib/toasts/GuiToast.java b/src/main/java/com/falsepattern/lib/toasts/GuiToast.java index 57cd082..4794926 100644 --- a/src/main/java/com/falsepattern/lib/toasts/GuiToast.java +++ b/src/main/java/com/falsepattern/lib/toasts/GuiToast.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.toasts; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.impl.toast.GuiToastImpl; import cpw.mods.fml.relauncher.Side; @@ -30,20 +29,16 @@ import cpw.mods.fml.relauncher.SideOnly; import javax.annotation.Nullable; @SideOnly(Side.CLIENT) -@StableAPI(since = "0.10.0") public class GuiToast { @Nullable - @StableAPI.Expose public static T getToast(Class toastClass, Object type) { return GuiToastImpl.getInstance().getToast(toastClass, type); } - @StableAPI.Expose public static void clear() { GuiToastImpl.getInstance().clear(); } - @StableAPI.Expose public static void add(IToast toastIn) { GuiToastImpl.getInstance().add(toastIn); } diff --git a/src/main/java/com/falsepattern/lib/toasts/IToast.java b/src/main/java/com/falsepattern/lib/toasts/IToast.java index a48aa9d..e1ccad5 100644 --- a/src/main/java/com/falsepattern/lib/toasts/IToast.java +++ b/src/main/java/com/falsepattern/lib/toasts/IToast.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.toasts; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.Tags; import com.falsepattern.lib.internal.impl.toast.GuiToastImpl; @@ -32,27 +31,20 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) -@StableAPI(since = "0.10.0") public interface IToast { - @StableAPI.Expose Object NO_TOKEN = new Object(); - @StableAPI.Expose Visibility draw(GuiToastImpl toastGui, long delta); - @StableAPI.Expose int width(); - @StableAPI.Expose int height(); - @StableAPI.Expose default Object getType() { return NO_TOKEN; } @SideOnly(Side.CLIENT) - @StableAPI(since = "0.10.0") enum Visibility { SHOW(new ResourceLocation(Tags.MODID, "ui.toast.in")), HIDE(new ResourceLocation(Tags.MODID, "ui.toast.out")); @@ -63,7 +55,6 @@ public interface IToast { this.sound = soundIn; } - @StableAPI.Expose public void playSound(SoundHandler handler) { handler.playSound(PositionedSoundRecord.func_147674_a(this.sound, 1.0F)); } diff --git a/src/main/java/com/falsepattern/lib/toasts/SimpleToast.java b/src/main/java/com/falsepattern/lib/toasts/SimpleToast.java index 340e7f2..f7f2771 100644 --- a/src/main/java/com/falsepattern/lib/toasts/SimpleToast.java +++ b/src/main/java/com/falsepattern/lib/toasts/SimpleToast.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.toasts; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.impl.toast.GuiToastImpl; import com.falsepattern.lib.toasts.icon.ToastBG; import com.falsepattern.lib.toasts.icon.ToastIcon; @@ -38,7 +37,6 @@ import cpw.mods.fml.relauncher.SideOnly; import javax.annotation.Nullable; @SideOnly(Side.CLIENT) -@StableAPI(since = "0.10.0") public class SimpleToast implements IToast { private final ToastBG background; private final ToastIcon icon; @@ -51,7 +49,6 @@ public class SimpleToast implements IToast { private float displayedProgress; private float currentProgress; - @StableAPI.Expose public SimpleToast(@NonNull ToastBG background, @Nullable ToastIcon icon, IChatComponent titleComponent, @Nullable IChatComponent subtitleComponent, boolean drawProgressBar, long timeout) { @@ -117,12 +114,10 @@ public class SimpleToast implements IToast { return background.getIcon().getIconHeight(); } - @StableAPI.Expose public void hide() { visibility = IToast.Visibility.HIDE; } - @StableAPI.Expose public void setProgress(float progress) { this.currentProgress = progress; } diff --git a/src/main/java/com/falsepattern/lib/toasts/icon/ToastBG.java b/src/main/java/com/falsepattern/lib/toasts/icon/ToastBG.java index 3fda1e0..3397a3f 100644 --- a/src/main/java/com/falsepattern/lib/toasts/icon/ToastBG.java +++ b/src/main/java/com/falsepattern/lib/toasts/icon/ToastBG.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.toasts.icon; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.Tags; import lombok.NonNull; import org.lwjgl.opengl.GL11; @@ -34,40 +33,30 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) -@StableAPI(since = "0.10.0") public class ToastBG extends ToastTexture { - @StableAPI.Expose public static final ToastBG TOAST_DARK = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_dark.png"), 160, 32, 0xFFFFFFFF); - @StableAPI.Expose public static final ToastBG TOAST_DARK_ROUNDED = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_dark_rounded.png"), 160, 32, 0xFFFFFFFF); - @StableAPI.Expose public static final ToastBG TOAST_NARRATOR = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_narrator.png"), 160, 32, 0xFFAAAA00); - @StableAPI.Expose public static final ToastBG TOAST_NARRATOR_ROUNDED = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_narrator_rounded.png"), 160, 32, 0xFFAAAA00); - @StableAPI.Expose public static final ToastBG TOAST_WHITE = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_white.png"), 160, 32, 0xFF500050); - @StableAPI.Expose public static final ToastBG TOAST_WHITE_ROUNDED = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_white_rounded.png"), 160, 32, 0xFF500050); - @StableAPI.Expose public final int defaultTextColor; - @StableAPI.Expose public ToastBG(@NonNull ResourceLocation texture, int width, int height, int defaultTextColor) { super(texture, width, height); this.defaultTextColor = defaultTextColor; } - @StableAPI.Expose public ToastBG(@NonNull ResourceLocation texture, @NonNull IIcon icon, int defaultTextColor) { super(texture, icon); this.defaultTextColor = defaultTextColor; diff --git a/src/main/java/com/falsepattern/lib/toasts/icon/ToastIcon.java b/src/main/java/com/falsepattern/lib/toasts/icon/ToastIcon.java index c55aec4..7811874 100644 --- a/src/main/java/com/falsepattern/lib/toasts/icon/ToastIcon.java +++ b/src/main/java/com/falsepattern/lib/toasts/icon/ToastIcon.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.toasts.icon; -import com.falsepattern.lib.StableAPI; import lombok.NonNull; import org.lwjgl.opengl.GL11; @@ -33,14 +32,11 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) -@StableAPI(since = "0.10.0") public class ToastIcon extends ToastTexture { - @StableAPI.Expose public ToastIcon(@NonNull ResourceLocation texture, int width, int height) { super(texture, width, height); } - @StableAPI.Expose public ToastIcon(@NonNull ResourceLocation texture, @NonNull IIcon icon) { super(texture, icon); } diff --git a/src/main/java/com/falsepattern/lib/toasts/icon/ToastTexture.java b/src/main/java/com/falsepattern/lib/toasts/icon/ToastTexture.java index 5db6524..1ba956c 100644 --- a/src/main/java/com/falsepattern/lib/toasts/icon/ToastTexture.java +++ b/src/main/java/com/falsepattern/lib/toasts/icon/ToastTexture.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.toasts.icon; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.util.RenderUtil; import lombok.Getter; import lombok.NonNull; @@ -33,19 +32,16 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) -@StableAPI(since = "0.10.0") public abstract class ToastTexture { - @Getter(onMethod_ = @StableAPI.Expose) + @Getter protected final IIcon icon; - @Getter(onMethod_ = @StableAPI.Expose) + @Getter protected final ResourceLocation texture; - @StableAPI.Expose public ToastTexture(@NonNull ResourceLocation texture, int width, int height) { this(texture, RenderUtil.getFullTextureIcon(texture.toString(), width, height)); } - @StableAPI.Expose public ToastTexture(@NonNull ResourceLocation texture, @NonNull IIcon icon) { this.icon = icon; this.texture = texture; @@ -54,6 +50,5 @@ public abstract class ToastTexture { /** * Draws the icon at the specified position in the specified Gui */ - @StableAPI.Expose public abstract void draw(Gui guiIn, int x, int y); } \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/toasts/icon/package-info.java b/src/main/java/com/falsepattern/lib/toasts/icon/package-info.java new file mode 100644 index 0000000..9e2a642 --- /dev/null +++ b/src/main/java/com/falsepattern/lib/toasts/icon/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +/** + * @since 0.10.0 + */ +package com.falsepattern.lib.toasts.icon; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/toasts/package-info.java b/src/main/java/com/falsepattern/lib/toasts/package-info.java new file mode 100644 index 0000000..2f32b4e --- /dev/null +++ b/src/main/java/com/falsepattern/lib/toasts/package-info.java @@ -0,0 +1,26 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ + +/** + * @since 0.10.0 + */ +package com.falsepattern.lib.toasts; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/turboasm/ClassHeaderMetadata.java b/src/main/java/com/falsepattern/lib/turboasm/ClassHeaderMetadata.java index cef36d0..103bc6b 100644 --- a/src/main/java/com/falsepattern/lib/turboasm/ClassHeaderMetadata.java +++ b/src/main/java/com/falsepattern/lib/turboasm/ClassHeaderMetadata.java @@ -22,8 +22,6 @@ package com.falsepattern.lib.turboasm; -import com.falsepattern.lib.StableAPI; -import com.falsepattern.lib.StableAPI.Expose; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -36,42 +34,28 @@ import java.io.IOException; /** * Utilities for quickly processing class files without fully parsing them. */ -@StableAPI(since = "__EXPERIMENTAL__") public final class ClassHeaderMetadata implements FastClassAccessor { - @Expose public final int minorVersion; - @Expose public final int majorVersion; - @Expose public final int constantPoolEntryCount; /** Byte offsets of where each constant pool entry starts (index of the tag byte), zero-indexed! */ - @Expose public final int @NotNull [] constantPoolEntryOffsets; /** Type of each parsed constant pool entry, zero-indexed! */ - @Expose public final ConstantPoolEntryTypes @NotNull [] constantPoolEntryTypes; - @Expose public final int constantPoolEndOffset; - @Expose public final int accessFlags; - @Expose public final int thisClassIndex; - @Expose public final int superClassIndex; - @Expose public final int interfacesCount; - @Expose public final @NotNull String binaryThisName; - @Expose public final @Nullable String binarySuperName; /** * Attempts to parse a class header. * @param bytes The class bytes to parse. */ - @Expose public ClassHeaderMetadata(byte @NotNull [] bytes) { if (!isValidClass(bytes)) { throw new IllegalArgumentException("Invalid class detected"); @@ -143,7 +127,6 @@ public final class ClassHeaderMetadata implements FastClassAccessor { * @param off Offset to the 16-bit length field. * @return The decoded String. */ - @Expose public static @NotNull String modifiedUtf8(byte @NotNull [] arr, int off) { try (ByteArrayInputStream bais = new ByteArrayInputStream(arr, off, arr.length - off); DataInputStream dis = new DataInputStream(bais)) { @@ -174,85 +157,57 @@ public final class ClassHeaderMetadata implements FastClassAccessor { * attribute_info attributes[attributes_count]; * } */ - @StableAPI(since = "__EXPERIMENTAL__") public static final class Offsets { private Offsets() {} /** The magic item supplies the magic number identifying the class file format; it has the value 0xCAFEBABE */ - @Expose public static final int magicU32 = 0; /** The values of the minor_version and major_version items are the minor and major version numbers of this class file. Together, a major and a minor version number determine the version of the class file format. If a class file has major version number M and minor version number m, we denote the version of its class file format as M.m */ - @Expose public static final int minorVersionU16 = magicU32 + 4; /** The values of the minor_version and major_version items are the minor and major version numbers of this class file. Together, a major and a minor version number determine the version of the class file format. If a class file has major version number M and minor version number m, we denote the version of its class file format as M.m */ - @Expose public static final int majorVersionU16 = minorVersionU16 + 2; /** The value of the constant_pool_count item is equal to the number of entries in the constant_pool table plus one. A constant_pool index is considered valid if it is greater than zero and less than constant_pool_count, with the exception for constants of type long and double noted in §4.4.5. */ - @Expose public static final int constantPoolCountU16 = majorVersionU16 + 2; /** * The constant_pool is a table of structures (§4.4) representing various string constants, class and interface names, field names, and other constants that are referred to within the ClassFile structure and its substructures. The format of each constant_pool table entry is indicated by its first "tag" byte. *

* The constant_pool table is indexed from 1 to constant_pool_count - 1. */ - @Expose public static final int constantPoolStart = constantPoolCountU16 + 2; /** * The value of the access_flags item is a mask of flags used to denote access permissions to and properties of this class or interface. The interpretation of each flag, when set, is specified in Table 4.1-B. */ - @Expose public static final int pastCpAccessFlagsU16 = 0; /** * The value of the this_class item must be a valid index into the constant_pool table. The constant_pool entry at that index must be a CONSTANT_Class_info structure (§4.4.1) representing the class or interface defined by this class file. */ - @Expose public static final int pastCpThisClassU16 = pastCpAccessFlagsU16 + 2; /** * For a class, the value of the super_class item either must be zero or must be a valid index into the constant_pool table. If the value of the super_class item is nonzero, the constant_pool entry at that index must be a CONSTANT_Class_info structure representing the direct superclass of the class defined by this class file. Neither the direct superclass nor any of its superclasses may have the ACC_FINAL flag set in the access_flags item of its ClassFile structure.

* If the value of the super_class item is zero, then this class file must represent the class Object, the only class or interface without a direct superclass.

* For an interface, the value of the super_class item must always be a valid index into the constant_pool table. The constant_pool entry at that index must be a CONSTANT_Class_info structure representing the class Object. */ - @Expose public static final int pastCpSuperClassU16 = pastCpThisClassU16 + 2; /** The value of the interfaces_count item gives the number of direct superinterfaces of this class or interface type */ - @Expose public static final int pastCpInterfacesCountU16 = pastCpSuperClassU16 + 2; } - @StableAPI(since = "__EXPERIMENTAL__") public enum ConstantPoolEntryTypes { - @Expose Utf8(1, 45, -1), - @Expose Integer(3, 45, 4), - @Expose Float(4, 45, 4), - @Expose Long(5, 45, 8), - @Expose Double(6, 45, 8), - @Expose Class(7, 49, 2), - @Expose String(8, 45, 2), - @Expose FieldRef(9, 45, 4), - @Expose MethodRef(10, 45, 4), - @Expose InterfaceMethodRef(11, 45, 4), - @Expose NameAndType(12, 45, 4), - @Expose MethodHandle(15, 51, 3), - @Expose MethodType(16, 51, 2), - @Expose Dynamic(17, 55, 4), - @Expose InvokeDynamic(18, 51, 4), - @Expose Module(19, 53, 2), - @Expose Package(20, 53, 2), ; private static final ConstantPoolEntryTypes[] lookup; @@ -267,10 +222,8 @@ public final class ClassHeaderMetadata implements FastClassAccessor { lookup = lut; } - @Expose public final int tag, minMajorVersion; /** Length in bytes of the entry (excluding the 1 byte tag), or -1 if length-encoded */ - @Expose public final int maybeByteLength; ConstantPoolEntryTypes(int tag, int minMajorVersion, int maybeByteLength) { @@ -284,7 +237,6 @@ public final class ClassHeaderMetadata implements FastClassAccessor { * @param offset The offset where the entry starts * @return The total length of the entry, including the tag byte */ - @Expose public int byteLength(final byte @NotNull [] classFile, final int offset) { if (this == ConstantPoolEntryTypes.Utf8) { return 3 + u16(classFile, offset + 1); @@ -295,7 +247,6 @@ public final class ClassHeaderMetadata implements FastClassAccessor { return 1 + maybeByteLength; } - @Expose public static @NotNull ConstantPoolEntryTypes parse(final byte @NotNull [] classFile, final int offset) { final int tag = u8(classFile, offset); final ConstantPoolEntryTypes type = tag >= lookup.length ? null : lookup[tag]; @@ -312,7 +263,6 @@ public final class ClassHeaderMetadata implements FastClassAccessor { * @return If the class passes simple sanity checks. */ @Contract("null -> false") - @Expose public static boolean isValidClass(byte @Nullable [] classBytes) { if (classBytes == null) { return false; @@ -329,7 +279,6 @@ public final class ClassHeaderMetadata implements FastClassAccessor { * @param classBytes Class data * @return The major version number of the class file. See {@link org.objectweb.asm.Opcodes#V1_8} */ - @Expose public static int majorVersion(byte @NotNull [] classBytes) { return u16(classBytes, Offsets.majorVersionU16); } @@ -340,7 +289,6 @@ public final class ClassHeaderMetadata implements FastClassAccessor { * @param substring The short substring to search for. * @return If the substring was found somewhere in the long string. */ - @Expose public static boolean hasSubstring(final byte @Nullable [] classBytes, final byte @NotNull [] substring) { if (classBytes == null) { return false; diff --git a/src/main/java/com/falsepattern/lib/turboasm/ClassNodeHandle.java b/src/main/java/com/falsepattern/lib/turboasm/ClassNodeHandle.java index f205162..6a34782 100644 --- a/src/main/java/com/falsepattern/lib/turboasm/ClassNodeHandle.java +++ b/src/main/java/com/falsepattern/lib/turboasm/ClassNodeHandle.java @@ -22,8 +22,6 @@ package com.falsepattern.lib.turboasm; -import com.falsepattern.lib.StableAPI; -import com.falsepattern.lib.StableAPI.Expose; import org.intellij.lang.annotations.MagicConstant; import org.jetbrains.annotations.Nullable; import org.objectweb.asm.ClassReader; @@ -31,7 +29,6 @@ import org.objectweb.asm.ClassWriter; import org.objectweb.asm.tree.ClassNode; /** A simple handle to a mutable ClassNode and flags for ClassWriter. */ -@StableAPI(since = "__EXPERIMENTAL__") public final class ClassNodeHandle { private final byte @Nullable [] originalBytes; private final @Nullable ClassHeaderMetadata originalMetadata; @@ -42,13 +39,11 @@ public final class ClassNodeHandle { private int writerFlags = 0; /** Parse the class data with no reader options (for fastest speed). */ - @Expose public ClassNodeHandle(byte @Nullable [] classData) { this(classData, 0); } /** Parse the class data with custom reader options. */ - @Expose public ClassNodeHandle( byte @Nullable [] classData, @MagicConstant(flagsFromClass = ClassReader.class) int readerOptions) { @Nullable ClassHeaderMetadata originalMetadata; @@ -68,31 +63,26 @@ public final class ClassNodeHandle { } /** Gets the original pre-transformer-phase bytes of the class. */ - @Expose public byte @Nullable [] getOriginalBytes() { return originalBytes; } /** Gets the original pre-transformer-phase header metadata of the class, or null if invalid/not present. */ - @Expose public @Nullable ClassHeaderMetadata getOriginalMetadata() { return originalMetadata; } /** Gets the fast class metadata accessor of the class, that can access the current state of various class attributes without (re)parsing. */ - @Expose public @Nullable FastClassAccessor getFastAccessor() { return accessor; } /** @return If the class was not yet turned into a ClassNode object, and the original bytes still represent the class. */ - @Expose public boolean isOriginal() { return !initialized; } /** If the class currently has any bytes or a node associated with it. */ - @Expose public boolean isPresent() { if (initialized) { return node != null; @@ -102,14 +92,12 @@ public final class ClassNodeHandle { } /** Gets the parsed node of the currently processed class. This can cause full class parsing! */ - @Expose public @Nullable ClassNode getNode() { ensureInitialized(); return node; } /** Overwrites the parsed node of the currently processed class. */ - @Expose public void setNode(@Nullable ClassNode node) { initialized = true; this.node = node; @@ -121,7 +109,6 @@ public final class ClassNodeHandle { } /** Computes the byte[] array of the transformed class. Returns the original bytes if {@link ClassNodeHandle#getNode()} was never called. */ - @Expose public byte @Nullable [] computeBytes() { if (!initialized) { return originalBytes; @@ -135,31 +122,26 @@ public final class ClassNodeHandle { } /** Gets the ClassWriter flags for the current class. */ - @Expose public int getWriterFlags() { return writerFlags; } /** Set the ClassWriter flags for the current class. */ - @Expose public void setWriterFlags(@MagicConstant(flagsFromClass = ClassWriter.class) int flags) { this.writerFlags = flags; } /** Combine the currently set writer flags with the given flags using bitwise OR. */ - @Expose public void orWriterFlags(@MagicConstant(flagsFromClass = ClassWriter.class) int flags) { this.writerFlags |= flags; } /** Set ClassWriter.COMPUTE_MAXS on the writer flags. */ - @Expose public void computeMaxs() { this.writerFlags |= ClassWriter.COMPUTE_MAXS; } /** Set ClassWriter.COMPUTE_FRAMES on the writer flags. */ - @Expose public void computeFrames() { this.writerFlags |= ClassWriter.COMPUTE_FRAMES; } diff --git a/src/main/java/com/falsepattern/lib/turboasm/FastClassAccessor.java b/src/main/java/com/falsepattern/lib/turboasm/FastClassAccessor.java index 12844c8..49ca1f7 100644 --- a/src/main/java/com/falsepattern/lib/turboasm/FastClassAccessor.java +++ b/src/main/java/com/falsepattern/lib/turboasm/FastClassAccessor.java @@ -22,8 +22,6 @@ package com.falsepattern.lib.turboasm; -import com.falsepattern.lib.StableAPI; -import com.falsepattern.lib.StableAPI.Expose; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.objectweb.asm.Opcodes; @@ -32,49 +30,36 @@ import org.objectweb.asm.tree.ClassNode; import java.lang.reflect.Modifier; /** An accessor to metadata about a class that is quickly accessible without fully parsing one. */ -@StableAPI(since = "__EXPERIMENTAL__") public interface FastClassAccessor { /** Accessible from outside its package */ - @Expose boolean isPublic(); /** No subclasses allowed */ - @Expose boolean isFinal(); /** Is an interface instead of a class */ - @Expose boolean isInterface(); /** Is an abstract class that should not be instantiated */ - @Expose boolean isAbstract(); /** Is not present in source code (often used by obfuscated code too) */ - @Expose boolean isSynthetic(); /** Is an annotation interface */ - @Expose boolean isAnnotation(); /** Is an enum class */ - @Expose boolean isEnum(); /** Binary (slash-separated packages) name of the class */ @NotNull - @Expose String binaryThisName(); /** Binary (slash-separated packages) name of the super-class, null for the Object class */ @Nullable - @Expose String binarySuperName(); - @Expose static OfLoaded ofLoaded(Class loadedClass) { return new OfLoaded(loadedClass); } - @Expose static OfAsmNode ofAsmNode(ClassNode handle) { return new OfAsmNode(handle); } - @StableAPI(since = "__EXPERIMENTAL__") final class OfAsmNode implements FastClassAccessor { public final ClassNode handle; @@ -128,7 +113,6 @@ public interface FastClassAccessor { } } - @StableAPI(since = "__EXPERIMENTAL__") final class OfLoaded implements FastClassAccessor { public final Class handle; diff --git a/src/main/java/com/falsepattern/lib/turboasm/MergeableTurboTransformer.java b/src/main/java/com/falsepattern/lib/turboasm/MergeableTurboTransformer.java index b2af1eb..c138545 100644 --- a/src/main/java/com/falsepattern/lib/turboasm/MergeableTurboTransformer.java +++ b/src/main/java/com/falsepattern/lib/turboasm/MergeableTurboTransformer.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.turboasm; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.asm.CoreLoadingPlugin; import lombok.val; @@ -30,7 +29,6 @@ import net.minecraft.launchwrapper.IClassTransformer; import java.util.ArrayList; import java.util.List; -@StableAPI(since = "__EXPERIMENTAL__") public class MergeableTurboTransformer implements IClassTransformer { private final List transformers; diff --git a/src/main/java/com/falsepattern/lib/turboasm/TransformerUtil.java b/src/main/java/com/falsepattern/lib/turboasm/TransformerUtil.java index d860ab9..cb9ec5e 100644 --- a/src/main/java/com/falsepattern/lib/turboasm/TransformerUtil.java +++ b/src/main/java/com/falsepattern/lib/turboasm/TransformerUtil.java @@ -26,9 +26,11 @@ import com.falsepattern.lib.internal.Tags; import lombok.val; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.ApiStatus; import java.util.List; +@ApiStatus.Internal public class TransformerUtil { private static final boolean DEBUG_VERBOSE_TRANSFORMERS = Boolean.parseBoolean(System.getProperty(Tags.MODID + ".debug.verboseTransformers", "false")); private static final Logger LOG = LogManager.getLogger("ASM"); diff --git a/src/main/java/com/falsepattern/lib/turboasm/TurboClassTransformer.java b/src/main/java/com/falsepattern/lib/turboasm/TurboClassTransformer.java index 924ec22..05d4445 100644 --- a/src/main/java/com/falsepattern/lib/turboasm/TurboClassTransformer.java +++ b/src/main/java/com/falsepattern/lib/turboasm/TurboClassTransformer.java @@ -22,26 +22,21 @@ package com.falsepattern.lib.turboasm; -import com.falsepattern.lib.StableAPI; -import com.falsepattern.lib.StableAPI.Expose; import org.jetbrains.annotations.NotNull; /** * A simple transformer that takes in class bytes and outputs different class bytes. * It should be thread-safe, and not change class names. It should also have a public no-arguments constructor. */ -@StableAPI(since = "__EXPERIMENTAL__") public interface TurboClassTransformer { /** * @return The user-friendly owner name of this transformer. Usually a mod id. */ - @Expose String owner(); /** * @return The user-friendly name of this transformer. Used in logs. */ - @Expose String name(); /** @@ -50,7 +45,6 @@ public interface TurboClassTransformer { * @param classNode The handle to the class data and parsed metadata, try to avoid triggering the lazy ASM parse if possible for performance. * @return true if the class will be transformed by this class transformer. */ - @Expose boolean shouldTransformClass(@NotNull String className, @NotNull ClassNodeHandle classNode); /** @@ -60,6 +54,5 @@ public interface TurboClassTransformer { * @return True if the class has been modified in any way by this transformer. If all transformers return false, * then the ClassNode instance will not be re-serialized. */ - @Expose boolean transformClass(@NotNull String className, @NotNull ClassNodeHandle classNode); } \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/turboasm/package-info.java b/src/main/java/com/falsepattern/lib/turboasm/package-info.java new file mode 100644 index 0000000..655defe --- /dev/null +++ b/src/main/java/com/falsepattern/lib/turboasm/package-info.java @@ -0,0 +1,25 @@ +/* + * This file is part of FalsePatternLib. + * + * Copyright (C) 2022-2025 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * FalsePatternLib is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, only version 3 of the License. + * + * FalsePatternLib is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with FalsePatternLib. If not, see . + */ +@ApiStatus.Experimental +package com.falsepattern.lib.turboasm; + +import org.jetbrains.annotations.ApiStatus; \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/util/FileUtil.java b/src/main/java/com/falsepattern/lib/util/FileUtil.java index 4102b99..16ab2ce 100644 --- a/src/main/java/com/falsepattern/lib/util/FileUtil.java +++ b/src/main/java/com/falsepattern/lib/util/FileUtil.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.util; -import com.falsepattern.lib.StableAPI; import lombok.experimental.UtilityClass; import net.minecraft.launchwrapper.Launch; @@ -30,15 +29,18 @@ import java.io.File; import java.nio.file.Path; import java.nio.file.Paths; +/** + * @since 0.8.2 + */ @UtilityClass -@StableAPI(since = "0.8.2") public final class FileUtil { - @StableAPI.Expose public static File getMinecraftHome() { return getMinecraftHomePath().toFile(); } - @StableAPI.Expose(since = "1.0.0") + /** + * @since 1.0.0 + */ public static Path getMinecraftHomePath() { return Launch.minecraftHome == null ? Paths.get("").toAbsolutePath() : Launch.minecraftHome.toPath(); } diff --git a/src/main/java/com/falsepattern/lib/util/LangUtil.java b/src/main/java/com/falsepattern/lib/util/LangUtil.java index c202819..431a7ce 100644 --- a/src/main/java/com/falsepattern/lib/util/LangUtil.java +++ b/src/main/java/com/falsepattern/lib/util/LangUtil.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.util; -import com.falsepattern.lib.StableAPI; import lombok.NonNull; import lombok.experimental.UtilityClass; import lombok.val; @@ -31,19 +30,18 @@ import cpw.mods.fml.common.registry.LanguageRegistry; import java.util.HashMap; import java.util.Map; +/** + * @since 0.8.0 + */ @UtilityClass -@StableAPI(since = "0.8.0") public final class LangUtil { - @StableAPI.Expose public static final String DEFAULT_LOCALE = "en_US"; private static final ThreadLocal> tempMap = ThreadLocal.withInitial(HashMap::new); - @StableAPI.Expose public static void defaultLocalization(@NonNull Map localeMap) { localeMap.forEach(LangUtil::defaultLocalization); } - @StableAPI.Expose public static void defaultLocalization(@NonNull String key, @NonNull String value) { if (!LanguageRegistry.instance().getStringLocalization(key, DEFAULT_LOCALE).isEmpty()) { return; diff --git a/src/main/java/com/falsepattern/lib/util/MathUtil.java b/src/main/java/com/falsepattern/lib/util/MathUtil.java index 8136fa3..36a0307 100644 --- a/src/main/java/com/falsepattern/lib/util/MathUtil.java +++ b/src/main/java/com/falsepattern/lib/util/MathUtil.java @@ -21,17 +21,17 @@ */ package com.falsepattern.lib.util; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.compat.Vec3i; import lombok.experimental.UtilityClass; import java.util.Random; import java.util.UUID; +/** + * @since 0.10.0 + */ @UtilityClass -@StableAPI(since = "0.10.0") public final class MathUtil { - @StableAPI.Expose public static final float SQRT_2 = sqrt(2.0F); /** * A table of sin values computed from 0 (inclusive) to 2*pi (exclusive), with steps of 2*PI / 65536. @@ -73,7 +73,6 @@ public final class MathUtil { /** * sin looked up in a table */ - @StableAPI.Expose public static float sin(float value) { return SIN_TABLE[(int) (value * 10430.378F) & 65535]; } @@ -81,18 +80,14 @@ public final class MathUtil { /** * cos looked up in the sin table with the appropriate offset */ - - @StableAPI.Expose public static float cos(float value) { return SIN_TABLE[(int) (value * 10430.378F + 16384.0F) & 65535]; } - @StableAPI.Expose public static float sqrt(float value) { return (float) Math.sqrt(value); } - @StableAPI.Expose public static float sqrt(double value) { return (float) Math.sqrt(value); } @@ -100,16 +95,14 @@ public final class MathUtil { /** * Returns the greatest integer less than or equal to the float argument */ - @StableAPI.Expose public static int floor(float value) { int i = (int) value; return value < (float) i ? i - 1 : i; } /** - * returns par0 cast as an int, and no greater than Integer.MAX_VALUE-1024 + * returns value cast as an int, and no greater than Integer.MAX_VALUE-1024 */ - @StableAPI.Expose public static int fastFloor(double value) { return (int) (value + 1024.0D) - 1024; } @@ -117,7 +110,6 @@ public final class MathUtil { /** * Returns the greatest integer less than or equal to the double argument */ - @StableAPI.Expose public static int floor(double value) { int i = (int) value; return value < (double) i ? i - 1 : i; @@ -126,18 +118,15 @@ public final class MathUtil { /** * Long version of floor() */ - @StableAPI.Expose public static long lfloor(double value) { long i = (long) value; return value < (double) i ? i - 1L : i; } - @StableAPI.Expose public static int absFloor(double value) { return (int) (value >= 0.0D ? value : -value + 1.0D); } - @StableAPI.Expose public static float abs(float value) { return value >= 0.0F ? value : -value; } @@ -145,18 +134,15 @@ public final class MathUtil { /** * Returns the unsigned value of an int. */ - @StableAPI.Expose public static int abs(int value) { return value >= 0 ? value : -value; } - @StableAPI.Expose public static int ceil(float value) { int i = (int) value; return value > (float) i ? i + 1 : i; } - @StableAPI.Expose public static int ceil(double value) { int i = (int) value; return value > (double) i ? i + 1 : i; @@ -166,7 +152,6 @@ public final class MathUtil { * Returns the value of the first parameter, clamped to be within the lower and upper limits given by the second and * third parameters. */ - @StableAPI.Expose public static int clamp(int num, int min, int max) { return num < min ? min : Math.min(num, max); } @@ -175,17 +160,14 @@ public final class MathUtil { * Returns the value of the first parameter, clamped to be within the lower and upper limits given by the second and * third parameters */ - @StableAPI.Expose public static float clamp(float num, float min, float max) { return num < min ? min : Math.min(num, max); } - @StableAPI.Expose public static double clamp(double num, double min, double max) { return num < min ? min : Math.min(num, max); } - @StableAPI.Expose public static double clampedLerp(double lowerBnd, double upperBnd, double slide) { if (slide < 0.0D) { return lowerBnd; @@ -197,7 +179,6 @@ public final class MathUtil { /** * Maximum of the absolute value of two numbers. */ - @StableAPI.Expose public static double absMax(double a, double b) { if (a < 0.0D) { a = -a; @@ -213,27 +194,22 @@ public final class MathUtil { /** * Buckets an integer with specified bucket sizes. */ - @StableAPI.Expose public static int intFloorDiv(int number, int bucket) { return number < 0 ? -((-number - 1) / bucket) - 1 : number / bucket; } - @StableAPI.Expose public static int getInt(Random random, int minimum, int maximum) { return minimum >= maximum ? minimum : random.nextInt(maximum - minimum + 1) + minimum; } - @StableAPI.Expose public static float nextFloat(Random random, float minimum, float maximum) { return minimum >= maximum ? minimum : random.nextFloat() * (maximum - minimum) + minimum; } - @StableAPI.Expose public static double nextDouble(Random random, double minimum, double maximum) { return minimum >= maximum ? minimum : random.nextDouble() * (maximum - minimum) + minimum; } - @StableAPI.Expose public static double average(long[] values) { long i = 0L; @@ -244,22 +220,18 @@ public final class MathUtil { return (double) i / (double) values.length; } - @StableAPI.Expose public static boolean epsilonEquals(float a, float b) { return abs(b - a) < 1.0E-5F; } - @StableAPI.Expose public static int normalizeAngle(int a, int b) { return (a % b + b) % b; } - @StableAPI.Expose public static float positiveModulo(float numerator, float denominator) { return (numerator % denominator + denominator) % denominator; } - @StableAPI.Expose public static double positiveModulo(double numerator, double denominator) { return (numerator % denominator + denominator) % denominator; } @@ -267,7 +239,6 @@ public final class MathUtil { /** * the angle is reduced to an angle between -180 and +180 by mod, and a 360 check */ - @StableAPI.Expose public static float wrapDegrees(float value) { value = value % 360.0F; @@ -285,7 +256,6 @@ public final class MathUtil { /** * the angle is reduced to an angle between -180 and +180 by mod, and a 360 check */ - @StableAPI.Expose public static double wrapDegrees(double value) { value = value % 360.0D; @@ -303,7 +273,6 @@ public final class MathUtil { /** * Adjust the angle so that his value is in range [-180;180[ */ - @StableAPI.Expose public static int wrapDegrees(int angle) { angle = angle % 360; @@ -321,7 +290,6 @@ public final class MathUtil { /** * parses the string as integer or returns the second parameter if it fails */ - @StableAPI.Expose public static int getInt(String value, int defaultValue) { try { return Integer.parseInt(value); @@ -333,7 +301,6 @@ public final class MathUtil { /** * parses the string as integer or returns the second parameter if it fails. this value is capped to par2 */ - @StableAPI.Expose public static int getInt(String value, int defaultValue, int max) { return Math.max(max, getInt(value, defaultValue)); } @@ -341,7 +308,6 @@ public final class MathUtil { /** * parses the string as double or returns the second parameter if it fails. */ - @StableAPI.Expose public static double getDouble(String value, double defaultValue) { try { return Double.parseDouble(value); @@ -350,7 +316,6 @@ public final class MathUtil { } } - @StableAPI.Expose public static double getDouble(String value, double defaultValue, double max) { return Math.max(max, getDouble(value, defaultValue)); } @@ -358,7 +323,6 @@ public final class MathUtil { /** * Returns the input value rounded up to the next highest power of two. */ - @StableAPI.Expose public static int smallestEncompassingPowerOfTwo(int value) { int i = value - 1; i = i | i >> 1; @@ -372,7 +336,6 @@ public final class MathUtil { /** * Is the given value a power of two? (1, 2, 4, 8, 16, ...) */ - @StableAPI.Expose private static boolean isPowerOfTwo(int value) { return value != 0 && (value & value - 1) == 0; } @@ -382,7 +345,6 @@ public final class MathUtil { * value. Optimized for cases where the input value is a power-of-two. If the input value is not a power-of-two, * then subtract 1 from the return value. */ - @StableAPI.Expose public static int log2DeBruijn(int value) { value = isPowerOfTwo(value) ? value : smallestEncompassingPowerOfTwo(value); return MULTIPLY_DE_BRUIJN_BIT_POSITION[(int) ((long) value * 125613361L >> 27) & 31]; @@ -392,7 +354,6 @@ public final class MathUtil { * Efficiently calculates the floor of the base-2 log of an integer value. This is effectively the index of the * highest bit that is set. For example, if the number in binary is 0...100101, this will return 5. */ - @StableAPI.Expose public static int log2(int value) { return log2DeBruijn(value) - (isPowerOfTwo(value) ? 0 : 1); } @@ -403,7 +364,6 @@ public final class MathUtil { * For instance, {@code roundUp(1, 4)} returns 4; {@code roundUp(0, 4)} returns 0; and {@code roundUp(4, 4)} returns * 4. */ - @StableAPI.Expose public static int roundUp(int number, int interval) { if (interval == 0) { return 0; @@ -419,7 +379,6 @@ public final class MathUtil { } } - @StableAPI.Expose public static long getCoordinateRandom(int x, int y, int z) { long i = (x * 3129871L) ^ (long) z * 116129781L ^ (long) y; i = i * i * 42317861L + i * 11L; @@ -429,7 +388,6 @@ public final class MathUtil { /** * Makes an integer color from the given red, green, and blue float values */ - @StableAPI.Expose public static int rgb(float rIn, float gIn, float bIn) { return rgb(floor(rIn * 255.0F), floor(gIn * 255.0F), floor(bIn * 255.0F)); } @@ -437,14 +395,12 @@ public final class MathUtil { /** * Makes a single int color with the given red, green, and blue values. */ - @StableAPI.Expose public static int rgb(int rIn, int gIn, int bIn) { int lvt_3_1_ = (rIn << 8) + gIn; lvt_3_1_ = (lvt_3_1_ << 8) + bIn; return lvt_3_1_; } - @StableAPI.Expose public static int multiplyColor(int colorA, int colorB) { int rA = (colorA & 0xFF0000) >> 16; int rB = (colorB & 0xFF0000) >> 16; @@ -461,17 +417,14 @@ public final class MathUtil { /** * Gets the decimal portion of the given double. For instance, {@code frac(5.5)} returns {@code .5}. */ - @StableAPI.Expose public static double frac(double number) { return number - Math.floor(number); } - @StableAPI.Expose public static long getPositionRandom(Vec3i pos) { return getCoordinateRandom(pos.getX(), pos.getY(), pos.getZ()); } - @StableAPI.Expose public static UUID getRandomUUID(Random rand) { long i = rand.nextLong() & -61441L | 16384L; long j = rand.nextLong() & 4611686018427387903L | Long.MIN_VALUE; @@ -481,17 +434,14 @@ public final class MathUtil { /** * Generates a random UUID using the shared random */ - @StableAPI.Expose public static UUID getRandomUUID() { return getRandomUUID(RANDOM); } - @StableAPI.Expose public static double pct(double a, double b, double c) { return (a - b) / (c - b); } - @StableAPI.Expose public static double atan2(double y, double x) { double d0 = x * x + y * y; @@ -551,7 +501,6 @@ public final class MathUtil { * Computes 1/sqrt(n) using the fast inverse square * root with a constant of 0x5FE6EB50C7B537AA. */ - @StableAPI.Expose public static double fastInvSqrt(double x) { double d0 = 0.5D * x; long i = Double.doubleToRawLongBits(x); @@ -561,7 +510,6 @@ public final class MathUtil { return x; } - @StableAPI.Expose public static int hsvToRGB(float hue, float saturation, float value) { int i = (int) (hue * 6.0F) % 6; float f = hue * 6.0F - (float) i; @@ -618,7 +566,6 @@ public final class MathUtil { return j << 16 | k << 8 | l; } - @StableAPI.Expose public static int hash(int x) { x = x ^ x >>> 16; x = x * -2048144789; diff --git a/src/main/java/com/falsepattern/lib/util/RenderUtil.java b/src/main/java/com/falsepattern/lib/util/RenderUtil.java index f7adc3a..6e33f04 100644 --- a/src/main/java/com/falsepattern/lib/util/RenderUtil.java +++ b/src/main/java/com/falsepattern/lib/util/RenderUtil.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.util; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.Tags; import com.falsepattern.lib.internal.render.ClampedIcon; import com.falsepattern.lib.internal.render.FullTextureIcon; @@ -41,9 +40,11 @@ import cpw.mods.fml.relauncher.SideOnly; import static cpw.mods.fml.relauncher.Side.CLIENT; import static net.minecraft.client.Minecraft.getMinecraft; +/** + * @since 0.8.0 + */ @SideOnly(CLIENT) @UtilityClass -@StableAPI(since = "0.8.0") public final class RenderUtil { private static final Timer MINECRAFT_TIMER = getMinecraftTimer(); private static final ResourceLocation EMPTY_TEXTURE = new ResourceLocation(Tags.MODID, "textures/empty_texture.png"); @@ -54,8 +55,9 @@ public final class RenderUtil { * This is useful for rendering things that are not part of the world mesh, but should be rendered as if they were. *

* It's good practice to make this call inside a {@link GL11#glPushMatrix() push}/{@link GL11#glPopMatrix() pop} matrix block. + * + * @since 0.12.0 */ - @StableAPI.Expose(since = "0.12.0") public static void setGLTranslationRelativeToPlayer() { val player = getMinecraft().thePlayer; val partialTick = partialTick(); @@ -77,8 +79,9 @@ public final class RenderUtil { * @param height The icon height in pixels * * @return The full resolution texture icon. + * + * @since 0.10.0 */ - @StableAPI.Expose(since = "0.10.0") public static IIcon getFullTextureIcon(String iconName, int width, int height) { return new FullTextureIcon(iconName, width, height); } @@ -91,8 +94,9 @@ public final class RenderUtil { * This is helpful when using {@link RenderBlocks} but having different bounds. * * @param icon The icon to clamp + * + * @since 0.12.0 */ - @StableAPI.Expose(since = "0.12.0") public static IIcon wrapAsClampedIcon(IIcon icon) { return new ClampedIcon(icon); } @@ -104,8 +108,9 @@ public final class RenderUtil { * is sufficient to achieve the same effect. *

* However, when shaders are enabled, disabling textures using this method will have no effect. Therefore this method can be used as a workaround. + * + * @since 1.3.0 */ - @StableAPI.Expose(since = "1.3.0") public static void bindEmptyTexture() { getMinecraft().renderEngine.bindTexture(EMPTY_TEXTURE); } @@ -117,12 +122,10 @@ public final class RenderUtil { * * @return The current partial tick */ - @StableAPI.Expose public static float partialTick() { return MINECRAFT_TIMER.renderPartialTicks; } - @StableAPI.Expose @SneakyThrows private static Timer getMinecraftTimer() { val timerField = ReflectionHelper.findField(Minecraft.class, "timer", "field_71428_T"); diff --git a/src/main/java/com/falsepattern/lib/util/ResourceUtil.java b/src/main/java/com/falsepattern/lib/util/ResourceUtil.java index 53f5d01..8b885eb 100644 --- a/src/main/java/com/falsepattern/lib/util/ResourceUtil.java +++ b/src/main/java/com/falsepattern/lib/util/ResourceUtil.java @@ -21,7 +21,6 @@ */ package com.falsepattern.lib.util; -import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.internal.FPLog; import lombok.experimental.UtilityClass; import lombok.val; @@ -36,9 +35,10 @@ import java.nio.charset.StandardCharsets; /** * A utility class for reading resources in many ways. + * + * @since 0.6.0 */ @UtilityClass -@StableAPI(since = "0.6.0") public final class ResourceUtil { /** @@ -52,7 +52,6 @@ public final class ResourceUtil { * * @throws IOException From {@link #readBytes(InputStream)} */ - @StableAPI.Expose public static String getResourceStringFromJar(String resourcePath, Class referenceClass) throws IOException { return getResourceStringFromJar(resourcePath, referenceClass, StandardCharsets.UTF_8); } @@ -69,7 +68,6 @@ public final class ResourceUtil { * * @throws IOException From {@link #readBytes(InputStream)} */ - @StableAPI.Expose public static String getResourceStringFromJar(String resourcePath, Class referenceClass, Charset charset) throws IOException { return new String(getResourceBytesFromJar(resourcePath, referenceClass), charset); @@ -85,7 +83,6 @@ public final class ResourceUtil { * * @throws IOException From {@link #readBytes(InputStream)} */ - @StableAPI.Expose public static byte[] getResourceBytesFromJar(String resourcePath, Class referenceClass) throws IOException { return readBytesSafe(getResourceFromJar(resourcePath, referenceClass), resourcePath); } @@ -107,7 +104,6 @@ public final class ResourceUtil { * * @return The resource, or null if it was not found. */ - @StableAPI.Expose public static InputStream getResourceFromJar(String resourcePath, Class referenceClass) { URL classFile = referenceClass.getResource('/' + referenceClass.getName().replace('.', '/') + ".class"); lookup: @@ -145,7 +141,6 @@ public final class ResourceUtil { * * @throws IOException From {@link InputStream#read(byte[])} */ - @StableAPI.Expose public static byte[] readBytes(InputStream stream) throws IOException { val out = new ByteArrayOutputStream(); val buf = new byte[4096]; @@ -165,7 +160,6 @@ public final class ResourceUtil { * * @throws IOException From {@link #readBytes(InputStream)} */ - @StableAPI.Expose public static String getResourceString(String resourcePath) throws IOException { return getResourceString(resourcePath, StandardCharsets.UTF_8); } @@ -180,7 +174,6 @@ public final class ResourceUtil { * * @throws IOException From {@link #readBytes(InputStream)} */ - @StableAPI.Expose public static String getResourceString(String resourcePath, Charset charset) throws IOException { return new String(getResourceBytes(resourcePath), charset); } @@ -194,7 +187,6 @@ public final class ResourceUtil { * * @throws IOException From {@link #readBytes(InputStream)} */ - @StableAPI.Expose public static byte[] getResourceBytes(String resourcePath) throws IOException { return readBytesSafe(ResourceUtil.class.getResourceAsStream(resourcePath), resourcePath); }