diff --git a/src/main/java/com/falsepattern/lib/DeprecationDetails.java b/src/main/java/com/falsepattern/lib/DeprecationDetails.java index 2a83646..663b790 100644 --- a/src/main/java/com/falsepattern/lib/DeprecationDetails.java +++ b/src/main/java/com/falsepattern/lib/DeprecationDetails.java @@ -12,8 +12,7 @@ import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) @StableAPI(since = "0.10.0") public @interface DeprecationDetails { - @StableAPI(since = "0.10.0") - String stableSince() default ""; - @StableAPI(since = "0.10.0") - String deprecatedSince(); + @StableAPI(since = "0.10.0") String stableSince() default ""; + + @StableAPI(since = "0.10.0") String deprecatedSince(); } diff --git a/src/main/java/com/falsepattern/lib/StableAPI.java b/src/main/java/com/falsepattern/lib/StableAPI.java index 53548f3..227e468 100644 --- a/src/main/java/com/falsepattern/lib/StableAPI.java +++ b/src/main/java/com/falsepattern/lib/StableAPI.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -43,6 +43,5 @@ public @interface StableAPI { /** * The version this API was introduced/stabilized in. Used for library version tracking. */ - @StableAPI(since = "0.6.0") - String since(); + @StableAPI(since = "0.6.0") String since(); } diff --git a/src/main/java/com/falsepattern/lib/asm/ASMUtil.java b/src/main/java/com/falsepattern/lib/asm/ASMUtil.java index 7b86717..e17b9b2 100644 --- a/src/main/java/com/falsepattern/lib/asm/ASMUtil.java +++ b/src/main/java/com/falsepattern/lib/asm/ASMUtil.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -32,15 +32,12 @@ import com.falsepattern.lib.mapping.types.UniversalField; import com.falsepattern.lib.mapping.types.UniversalMethod; import lombok.SneakyThrows; import lombok.val; -import org.apache.logging.log4j.Logger; import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.FieldNode; import org.objectweb.asm.tree.MethodNode; -import org.objectweb.asm.util.CheckClassAdapter; import java.util.Arrays; import java.util.Objects; @@ -65,17 +62,15 @@ public class ASMUtil { throw new AsmClassNotFoundException("The class " + cn + " is not from Minecraft, or the mapping manager" + "doesn't have it, cannot use findFieldFromMCP! Use findFieldStandard instead!"); } - return findFieldStandard(cn, - MappingManager.classForName(NameType.Internal, classMapping, cn.name) - .getField(MappingType.MCP, fieldName) - .getName(classMapping), - optional); + return findFieldStandard(cn, MappingManager.classForName(NameType.Internal, classMapping, cn.name) + .getField(MappingType.MCP, fieldName) + .getName(classMapping), optional); } public static FieldNode findFieldFromUniversal(ClassNode cn, UniversalField field, boolean optional) { - String[] possibilities = CoreLoadingPlugin.isObfuscated() ? - new String[]{field.getName(MappingType.SRG), field.getName(MappingType.Notch)} : - new String[] {field.getName(MappingType.MCP)}; + String[] possibilities = CoreLoadingPlugin.isObfuscated() ? new String[]{field.getName(MappingType.SRG), + field.getName(MappingType.Notch)} + : new String[]{field.getName(MappingType.MCP)}; for (final FieldNode ret : cn.fields) { if (anyEquals(ret.name, possibilities)) { return ret; @@ -84,7 +79,8 @@ public class ASMUtil { if (optional) { return null; } - throw new AsmFieldNotFoundException(possibilities.length == 1 ? possibilities[0] : Arrays.toString(possibilities)); + throw new AsmFieldNotFoundException( + possibilities.length == 1 ? possibilities[0] : Arrays.toString(possibilities)); } public static MethodNode findMethodStandard(ClassNode cn, String name, String descriptor, boolean optional) { @@ -112,12 +108,13 @@ public class ASMUtil { } public static MethodNode findMethodFromUniversal(ClassNode cn, UniversalMethod method, boolean optional) { - String[] possibleNames = CoreLoadingPlugin.isObfuscated() ? - new String[]{method.getName(MappingType.SRG), method.getName(MappingType.Notch)} : - new String[] {method.getName(MappingType.MCP)}; - String[] possibleDescriptors = CoreLoadingPlugin.isObfuscated() ? - new String[]{method.getDescriptor(MappingType.SRG), method.getDescriptor(MappingType.Notch)} : - new String[] {method.getDescriptor(MappingType.MCP)}; + String[] possibleNames = CoreLoadingPlugin.isObfuscated() ? new String[]{method.getName(MappingType.SRG), + method.getName(MappingType.Notch)} + : new String[]{method.getName(MappingType.MCP)}; + String[] possibleDescriptors = + CoreLoadingPlugin.isObfuscated() ? new String[]{method.getDescriptor(MappingType.SRG), + method.getDescriptor(MappingType.Notch)} + : new String[]{method.getDescriptor(MappingType.MCP)}; for (final MethodNode ret : cn.methods) { if (anyEquals(ret.name, possibleNames) && anyEquals(ret.desc, possibleDescriptors)) { return ret; @@ -126,7 +123,8 @@ public class ASMUtil { if (optional) { return null; } - throw new AsmFieldNotFoundException(possibleDescriptors.length == 1 ? possibleDescriptors[0] : Arrays.toString(possibleDescriptors)); + throw new AsmFieldNotFoundException( + possibleDescriptors.length == 1 ? possibleDescriptors[0] : Arrays.toString(possibleDescriptors)); } public static MappingType discoverClassMappingType(ClassNode cn) { @@ -175,7 +173,7 @@ public class ASMUtil { } public static boolean anyEquals(String str, String... options) { - for (val option: options) { + for (val option : options) { if (Objects.equals(str, option)) { return true; } diff --git a/src/main/java/com/falsepattern/lib/asm/IClassNodeTransformer.java b/src/main/java/com/falsepattern/lib/asm/IClassNodeTransformer.java index c34ff5c..78a3515 100644 --- a/src/main/java/com/falsepattern/lib/asm/IClassNodeTransformer.java +++ b/src/main/java/com/falsepattern/lib/asm/IClassNodeTransformer.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -24,7 +24,9 @@ import org.objectweb.asm.tree.ClassNode; public interface IClassNodeTransformer { String getName(); + boolean shouldTransform(ClassNode cn, String transformedName, boolean obfuscated); + default int internalSortingOrder() { return 0; } diff --git a/src/main/java/com/falsepattern/lib/asm/SmartTransformer.java b/src/main/java/com/falsepattern/lib/asm/SmartTransformer.java index 7b1632c..d141c24 100644 --- a/src/main/java/com/falsepattern/lib/asm/SmartTransformer.java +++ b/src/main/java/com/falsepattern/lib/asm/SmartTransformer.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -20,7 +20,6 @@ */ package com.falsepattern.lib.asm; -import com.falsepattern.lib.asm.exceptions.AsmTransformException; import com.falsepattern.lib.internal.CoreLoadingPlugin; import lombok.val; import org.apache.logging.log4j.Logger; @@ -38,7 +37,9 @@ import java.util.List; */ public interface SmartTransformer extends IClassTransformer { Logger logger(); + List transformers(); + @Override default byte[] transform(String name, String transformedName, byte[] bytes) { if (bytes == null) { @@ -46,7 +47,7 @@ public interface SmartTransformer extends IClassTransformer { } val transformers = new ArrayList(); val cn = ASMUtil.parseClass(bytes, ClassReader.EXPAND_FRAMES); - for (val transformer: transformers()) { + for (val transformer : transformers()) { if (transformer.shouldTransform(cn, transformedName, CoreLoadingPlugin.isObfuscated())) { transformers.add(transformer); } @@ -56,7 +57,7 @@ public interface SmartTransformer extends IClassTransformer { } transformers.sort(Comparator.comparingInt(IClassNodeTransformer::internalSortingOrder)); val log = logger(); - for (val transformer: transformers) { + for (val transformer : transformers) { log.debug("Patching {} with {}...", transformedName, transformer.getName()); try { transformer.transform(cn, transformedName, CoreLoadingPlugin.isObfuscated()); 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 8392d86..4455331 100644 --- a/src/main/java/com/falsepattern/lib/asm/exceptions/AsmClassNotFoundException.java +++ b/src/main/java/com/falsepattern/lib/asm/exceptions/AsmClassNotFoundException.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * 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 0ce7650..53f809e 100644 --- a/src/main/java/com/falsepattern/lib/asm/exceptions/AsmFieldNotFoundException.java +++ b/src/main/java/com/falsepattern/lib/asm/exceptions/AsmFieldNotFoundException.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * 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 502dc71..24e0586 100644 --- a/src/main/java/com/falsepattern/lib/asm/exceptions/AsmMethodNotFoundException.java +++ b/src/main/java/com/falsepattern/lib/asm/exceptions/AsmMethodNotFoundException.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * 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 1d51a73..8532287 100644 --- a/src/main/java/com/falsepattern/lib/asm/exceptions/AsmTransformException.java +++ b/src/main/java/com/falsepattern/lib/asm/exceptions/AsmTransformException.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * diff --git a/src/main/java/com/falsepattern/lib/compat/BlockPos.java b/src/main/java/com/falsepattern/lib/compat/BlockPos.java index da67b47..a3a5700 100644 --- a/src/main/java/com/falsepattern/lib/compat/BlockPos.java +++ b/src/main/java/com/falsepattern/lib/compat/BlockPos.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -23,20 +23,22 @@ package com.falsepattern.lib.compat; import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.util.MathUtil; import com.google.common.collect.AbstractIterator; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import java.util.ArrayList; -import java.util.List; -import javax.annotation.concurrent.Immutable; import lombok.Getter; import lombok.NonNull; import lombok.Setter; import lombok.val; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + import net.minecraft.entity.Entity; import net.minecraft.util.EnumFacing; import net.minecraft.util.Vec3; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import javax.annotation.concurrent.Immutable; +import java.util.ArrayList; +import java.util.List; import static net.minecraft.util.EnumFacing.DOWN; import static net.minecraft.util.EnumFacing.EAST; @@ -105,12 +107,9 @@ public class BlockPos extends Vec3i { * @see #getAllInBoxMutable(BlockPos, BlockPos) */ public static Iterable getAllInBox(@NonNull BlockPos from, @NonNull BlockPos to) { - return getAllInBox(Math.min(from.getX(), to.getX()), - Math.min(from.getY(), to.getY()), - Math.min(from.getZ(), to.getZ()), - Math.max(from.getX(), to.getX()), - Math.max(from.getY(), to.getY()), - Math.max(from.getZ(), to.getZ())); + return getAllInBox(Math.min(from.getX(), to.getX()), Math.min(from.getY(), to.getY()), + Math.min(from.getZ(), to.getZ()), Math.max(from.getX(), to.getX()), + Math.max(from.getY(), to.getY()), Math.max(from.getZ(), to.getZ())); } /** @@ -130,12 +129,7 @@ public class BlockPos extends Vec3i { * @see #getAllInBox(BlockPos, BlockPos) * @see #getAllInBoxMutable(BlockPos, BlockPos) */ - public static Iterable getAllInBox(final int x0, - final int y0, - final int z0, - final int x1, - final int y1, - final int z1) { + 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; private int lastX; @@ -186,12 +180,9 @@ public class BlockPos extends Vec3i { * @see #getAllInBoxMutable(BlockPos, BlockPos) */ public static Iterable getAllInBoxMutable(@NonNull BlockPos from, @NonNull BlockPos to) { - return getAllInBoxMutable(Math.min(from.getX(), to.getX()), - Math.min(from.getY(), to.getY()), - Math.min(from.getZ(), to.getZ()), - Math.max(from.getX(), to.getX()), - Math.max(from.getY(), to.getY()), - Math.max(from.getZ(), to.getZ())); + return getAllInBoxMutable(Math.min(from.getX(), to.getX()), Math.min(from.getY(), to.getY()), + Math.min(from.getZ(), to.getZ()), Math.max(from.getX(), to.getX()), + Math.max(from.getY(), to.getY()), Math.max(from.getZ(), to.getZ())); } /** @@ -214,12 +205,7 @@ public class BlockPos extends Vec3i { * @see #getAllInBox(int, int, int, int, int, int) * @see #getAllInBoxMutable(BlockPos, BlockPos) */ - public static Iterable getAllInBoxMutable(final int x0, - final int y0, - final int z0, - final int x1, - final int y1, - final int z1) { + 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; @@ -297,8 +283,7 @@ public class BlockPos extends Vec3i { if (blocks == 0) { return this; } - return new BlockPos(x + facing.getFrontOffsetX() * blocks, - y + facing.getFrontOffsetY() * blocks, + return new BlockPos(x + facing.getFrontOffsetX() * blocks, y + facing.getFrontOffsetY() * blocks, z + facing.getFrontOffsetZ() * blocks); } @@ -362,8 +347,7 @@ public class BlockPos extends Vec3i { @Override public BlockPos crossProduct(@NonNull Vec3i vec) { - return new BlockPos(y * vec.getZ() - z * vec.getY(), - z * vec.getX() - x * vec.getZ(), + return new BlockPos(y * vec.getZ() - z * vec.getY(), z * vec.getX() - x * vec.getZ(), x * vec.getY() - y * vec.getX()); } @@ -451,8 +435,7 @@ public class BlockPos extends Vec3i { } public BlockPos.MutableBlockPos move(@NonNull EnumFacing facing, int blocks) { - return this.setPos(x + facing.getFrontOffsetX() * blocks, - y + facing.getFrontOffsetY() * blocks, + return this.setPos(x + facing.getFrontOffsetX() * blocks, y + facing.getFrontOffsetY() * blocks, z + facing.getFrontOffsetZ() * blocks); } } diff --git a/src/main/java/com/falsepattern/lib/compat/ChunkPos.java b/src/main/java/com/falsepattern/lib/compat/ChunkPos.java index 5e86f47..4e124f2 100644 --- a/src/main/java/com/falsepattern/lib/compat/ChunkPos.java +++ b/src/main/java/com/falsepattern/lib/compat/ChunkPos.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,13 +21,15 @@ package com.falsepattern.lib.compat; import com.falsepattern.lib.StableAPI; -import javax.annotation.concurrent.Immutable; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.NonNull; import lombok.val; + import net.minecraft.entity.Entity; +import javax.annotation.concurrent.Immutable; + /** * A functional equivalent to ChunkPos present in Minecraft 1.12. */ diff --git a/src/main/java/com/falsepattern/lib/compat/GuiLabel.java b/src/main/java/com/falsepattern/lib/compat/GuiLabel.java index d90f7f1..31fffbd 100644 --- a/src/main/java/com/falsepattern/lib/compat/GuiLabel.java +++ b/src/main/java/com/falsepattern/lib/compat/GuiLabel.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,19 +21,21 @@ package com.falsepattern.lib.compat; import com.falsepattern.lib.StableAPI; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import java.util.ArrayList; -import java.util.List; import lombok.NonNull; import lombok.val; import lombok.var; +import org.lwjgl.opengl.GL11; + import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.Gui; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.resources.I18n; -import org.lwjgl.opengl.GL11; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import java.util.ArrayList; +import java.util.List; /** * A functional equivalent to GuiLabel present in Minecraft 1.12. diff --git a/src/main/java/com/falsepattern/lib/compat/MathHelper.java b/src/main/java/com/falsepattern/lib/compat/MathHelper.java index e412e1b..0539eef 100644 --- a/src/main/java/com/falsepattern/lib/compat/MathHelper.java +++ b/src/main/java/com/falsepattern/lib/compat/MathHelper.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -169,7 +169,7 @@ public class MathHelper { } /** - * Buckets an integer with specifed bucket sizes. Args: i, bucketSize + * Buckets an integer with specified bucket sizes. Args: i, bucketSize */ public static int bucketInt(int i, int bucketSize) { return i < 0 ? -((-i - 1) / bucketSize) - 1 : i / bucketSize; @@ -196,11 +196,8 @@ public class MathHelper { public static double average(long[] values) { long i = 0L; - long[] along1 = values; - int j = values.length; - for (int k = 0; k < j; ++k) { - long l = along1[k]; + for (long l : values) { i += l; } @@ -245,25 +242,23 @@ public class MathHelper { * parses the string as integer or returns the second parameter if it fails */ public static int parseIntWithDefault(String str, int def) { - int j = def; - try { - j = Integer.parseInt(str); + return Integer.parseInt(str); } catch (Throwable throwable) { + return def; } - - return j; } /** * parses the string as integer or returns the second parameter if it fails. this value is capped to par2 */ public static int parseIntWithDefaultAndMax(String str, int def, int min) { - int k = def; + int k; try { k = Integer.parseInt(str); } catch (Throwable throwable) { + k = def; } if (k < min) { @@ -288,11 +283,12 @@ public class MathHelper { } public static double parseDoubleWithDefaultAndMin(String str, double def, double min) { - double d2 = def; + double d2; try { d2 = Double.parseDouble(str); } catch (Throwable throwable) { + d2 = def; } if (d2 < min) { @@ -337,7 +333,7 @@ public class MathHelper { * highest bit that is set. For example, if the number in binary is 0...100101, this will return 5. */ public static int calculateLogBaseTwo(int a) { - /** + /* * Uses a B(2, 5) De Bruijn sequence and a lookup table to efficiently calculate the log-base-two of the given * 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. diff --git a/src/main/java/com/falsepattern/lib/compat/Rotation.java b/src/main/java/com/falsepattern/lib/compat/Rotation.java index d94d14e..42e49dc 100644 --- a/src/main/java/com/falsepattern/lib/compat/Rotation.java +++ b/src/main/java/com/falsepattern/lib/compat/Rotation.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -22,6 +22,8 @@ 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") @@ -32,43 +34,8 @@ public enum Rotation { COUNTERCLOCKWISE_90; public Rotation add(@NonNull Rotation rotation) { - switch (rotation) { - case CLOCKWISE_180: - switch (this) { - case NONE: - return CLOCKWISE_180; - case CLOCKWISE_90: - return COUNTERCLOCKWISE_90; - case CLOCKWISE_180: - return NONE; - case COUNTERCLOCKWISE_90: - return CLOCKWISE_90; - } - case COUNTERCLOCKWISE_90: - switch (this) { - case NONE: - return COUNTERCLOCKWISE_90; - case CLOCKWISE_90: - return NONE; - case CLOCKWISE_180: - return CLOCKWISE_90; - case COUNTERCLOCKWISE_90: - return CLOCKWISE_180; - } - case CLOCKWISE_90: - switch (this) { - case NONE: - return CLOCKWISE_90; - case CLOCKWISE_90: - return CLOCKWISE_180; - case CLOCKWISE_180: - return COUNTERCLOCKWISE_90; - case COUNTERCLOCKWISE_90: - return NONE; - } - default: - return this; - } + val values = Rotation.values(); + return values[(ordinal() + rotation.ordinal()) % values.length]; } public EnumFacing rotate(@NonNull EnumFacing facing) { diff --git a/src/main/java/com/falsepattern/lib/compat/Vec3i.java b/src/main/java/com/falsepattern/lib/compat/Vec3i.java index 200817c..349cac9 100644 --- a/src/main/java/com/falsepattern/lib/compat/Vec3i.java +++ b/src/main/java/com/falsepattern/lib/compat/Vec3i.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,8 +21,6 @@ package com.falsepattern.lib.compat; import com.falsepattern.lib.StableAPI; -import javax.annotation.concurrent.Immutable; - import com.falsepattern.lib.util.MathUtil; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; @@ -30,6 +28,8 @@ import lombok.Getter; import lombok.NonNull; import lombok.val; +import javax.annotation.concurrent.Immutable; + /** * A functional equivalent to Vec3i present in Minecraft 1.12. */ @@ -71,8 +71,7 @@ public class Vec3i implements Comparable { * @return the new resulting vector */ public Vec3i crossProduct(@NonNull Vec3i vec) { - return new Vec3i(y * vec.getZ() - z * vec.getY(), - z * vec.getX() - x * vec.getZ(), + return new Vec3i(y * vec.getZ() - z * vec.getY(), z * vec.getX() - x * vec.getZ(), x * vec.getY() - y * vec.getX()); } diff --git a/src/main/java/com/falsepattern/lib/config/Config.java b/src/main/java/com/falsepattern/lib/config/Config.java index c23fd22..eb676df 100644 --- a/src/main/java/com/falsepattern/lib/config/Config.java +++ b/src/main/java/com/falsepattern/lib/config/Config.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -22,6 +22,7 @@ package com.falsepattern.lib.config; import com.falsepattern.lib.DeprecationDetails; import com.falsepattern.lib.StableAPI; + import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -31,7 +32,7 @@ import java.util.function.BiConsumer; /** * A modern configuration system to replace the old and obtuse forge config system. - * + *

* Note that just annotating a configuration class with {@link Config} is not enough, you must also register it using * {@link ConfigurationManager#initialize(Class[])} or {@link ConfigurationManager#initialize(BiConsumer, Class[])}! */ @@ -191,10 +192,10 @@ public @interface Config { /** * This annotation limits the maximum number of characters present in a string configuration. - * + *

* Note: If this annotation is not present, the maximum length will be implicitly set to 256 to avoid malicious * synchronizations that would make clients run out of memory! - * + *

* When used with a string list, this limit will apply to each element individually, not to the size of the list as a whole. */ @StableAPI(since = "0.10.0") @@ -265,7 +266,7 @@ public @interface Config { } /** - * The default value for an boolean array field. Not having a default is deprecated since 0.10, and will be strongly + * The default value for a boolean array field. Not having a default is deprecated since 0.10, and will be strongly * enforced in 0.11+! */ @StableAPI(since = "0.10.0") @@ -290,7 +291,7 @@ public @interface Config { /** * This annotation limits the maximum number of elements present in an array configuration. Only effective if * {@link ListFixedLength} is NOT present. - * + *

* Note: If this annotation is not present, the maximum length will be implicitly set to 256 to avoid malicious * synchronizations that would make clients run out of memory! */ @@ -303,7 +304,6 @@ public @interface Config { } - /** * The name of this config property in the config file. If not specified, the field's name will be used instead. */ @@ -338,7 +338,7 @@ public @interface Config { /** * Signals that this configuration class should be synchronized between the client and the server when * joining a multiplayer instance. - * + *

* 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. */ diff --git a/src/main/java/com/falsepattern/lib/config/ConfigException.java b/src/main/java/com/falsepattern/lib/config/ConfigException.java index 81fb448..026da1a 100644 --- a/src/main/java/com/falsepattern/lib/config/ConfigException.java +++ b/src/main/java/com/falsepattern/lib/config/ConfigException.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * diff --git a/src/main/java/com/falsepattern/lib/config/ConfigurationManager.java b/src/main/java/com/falsepattern/lib/config/ConfigurationManager.java index 393d7fd..e3dabc9 100644 --- a/src/main/java/com/falsepattern/lib/config/ConfigurationManager.java +++ b/src/main/java/com/falsepattern/lib/config/ConfigurationManager.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -49,17 +49,18 @@ public class ConfigurationManager { } @StableAPI(since = "0.10.0") - public static void initialize(BiConsumer, Field> validatorErrorCallback, Class... configClasses) throws ConfigException { - for (val clazz: configClasses) { + public static void initialize(BiConsumer, Field> validatorErrorCallback, Class... configClasses) + throws ConfigException { + for (val clazz : configClasses) { ConfigurationManagerImpl.register(clazz); ConfigurationManagerImpl.load(clazz); ConfigurationManagerImpl.validateFields(validatorErrorCallback, clazz, true); ConfigurationManagerImpl.save(clazz); } } + @StableAPI(since = "0.10.0") - public static boolean validate(boolean resetInvalid, Class... configClasses) - throws ConfigException { + public static boolean validate(boolean resetInvalid, Class... configClasses) throws ConfigException { return validate((x, y) -> {}, resetInvalid, configClasses); } @@ -67,7 +68,7 @@ public class ConfigurationManager { public static boolean validate(BiConsumer, Field> validatorErrorCallback, boolean resetInvalid, Class... configClasses) throws ConfigException { boolean valid = true; - for (val clazz: configClasses) { + for (val clazz : configClasses) { valid &= ConfigurationManagerImpl.validateFields(validatorErrorCallback, clazz, resetInvalid); } return valid; @@ -75,14 +76,14 @@ public class ConfigurationManager { @StableAPI(since = "0.10.0") public static void loadFromFile(Class... configClasses) throws ConfigException { - for (val clazz: configClasses) { + for (val clazz : configClasses) { ConfigurationManagerImpl.load(clazz); } } @StableAPI(since = "0.10.0") public static void saveToFile(boolean validateAndResetInvalid, Class... configClasses) throws ConfigException { - for (val clazz: configClasses) { + for (val clazz : configClasses) { if (validateAndResetInvalid) { ConfigurationManagerImpl.validateFields((a, b) -> {}, clazz, true); } @@ -99,7 +100,9 @@ public class ConfigurationManager { @DeprecationDetails(stableSince = "0.6.0", deprecatedSince = "0.10.0") public static void registerConfig(Class configClass) throws ConfigException { - FalsePatternLib.getLog().warn("A mod is using the deprecated config registration method! The following exception contains the stacktrace.", new Exception()); + FalsePatternLib.getLog() + .warn("A mod is using the deprecated config registration method! The following exception contains the stacktrace.", + new Exception()); ConfigurationManagerImpl.registerLoadSaveConfig(configClass); } @@ -127,11 +130,13 @@ public class ConfigurationManager { @StableAPI(since = "0.10.0") public static List getConfigElementsMulti(Class... configClasses) throws ConfigException { switch (configClasses.length) { - case 0: return Collections.emptyList(); - case 1: return getConfigElements(configClasses[0]); + case 0: + return Collections.emptyList(); + case 1: + return getConfigElements(configClasses[0]); default: val result = new ArrayList(); - for (val configClass: configClasses) { + for (val configClass : configClasses) { result.addAll(getConfigElements(configClass)); } return result; diff --git a/src/main/java/com/falsepattern/lib/config/IConfigElementProxy.java b/src/main/java/com/falsepattern/lib/config/IConfigElementProxy.java index fafcd94..476cef9 100644 --- a/src/main/java/com/falsepattern/lib/config/IConfigElementProxy.java +++ b/src/main/java/com/falsepattern/lib/config/IConfigElementProxy.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -24,6 +24,7 @@ import cpw.mods.fml.client.config.ConfigGuiType; import cpw.mods.fml.client.config.GuiConfigEntries; import cpw.mods.fml.client.config.GuiEditArrayEntries; import cpw.mods.fml.client.config.IConfigElement; + import java.util.List; import java.util.regex.Pattern; diff --git a/src/main/java/com/falsepattern/lib/config/SimpleGuiConfig.java b/src/main/java/com/falsepattern/lib/config/SimpleGuiConfig.java index d7a2f05..697be26 100644 --- a/src/main/java/com/falsepattern/lib/config/SimpleGuiConfig.java +++ b/src/main/java/com/falsepattern/lib/config/SimpleGuiConfig.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,28 +21,25 @@ package com.falsepattern.lib.config; import com.falsepattern.lib.StableAPI; -import lombok.val; -import cpw.mods.fml.client.config.GuiConfig; -import cpw.mods.fml.client.config.IConfigElement; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.resources.I18n; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import cpw.mods.fml.client.config.GuiConfig; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) @StableAPI(since = "0.9.0") public class SimpleGuiConfig extends GuiConfig { - public SimpleGuiConfig(GuiScreen parent, Class configClass, String modID, String modName) throws ConfigException { + public SimpleGuiConfig(GuiScreen parent, Class configClass, String modID, String modName) + throws ConfigException { this(parent, new Class[]{configClass}, modID, modName); } @StableAPI(since = "0.10.0") - public SimpleGuiConfig(GuiScreen parent, Class[] configClasses, String modID, String modName) throws ConfigException { - super(parent, ConfigurationManager.getConfigElementsMulti(configClasses), modID, false, false, modName + " Configuration", I18n.format("falsepatternlib.gui.config.description")); + public SimpleGuiConfig(GuiScreen parent, Class[] configClasses, String modID, String modName) + throws ConfigException { + super(parent, ConfigurationManager.getConfigElementsMulti(configClasses), modID, false, false, + modName + " Configuration", I18n.format("falsepatternlib.gui.config.description")); } } diff --git a/src/main/java/com/falsepattern/lib/config/SimpleGuiFactory.java b/src/main/java/com/falsepattern/lib/config/SimpleGuiFactory.java index 697eac0..9474f18 100644 --- a/src/main/java/com/falsepattern/lib/config/SimpleGuiFactory.java +++ b/src/main/java/com/falsepattern/lib/config/SimpleGuiFactory.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,10 +21,11 @@ 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; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.Minecraft; import java.util.Set; 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 acdf292..f082db2 100644 --- a/src/main/java/com/falsepattern/lib/config/event/AllConfigSyncEvent.java +++ b/src/main/java/com/falsepattern/lib/config/event/AllConfigSyncEvent.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -32,7 +32,7 @@ import cpw.mods.fml.relauncher.SideOnly; /** * This event is pushed on the FMLCommonHandler event bus once all the config synchronizations have finished. - * + *

* This is a client-only event, and is never triggered serverside! */ @SideOnly(Side.CLIENT) 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 e0dd27f..bc8361a 100644 --- a/src/main/java/com/falsepattern/lib/config/event/ConfigSyncEvent.java +++ b/src/main/java/com/falsepattern/lib/config/event/ConfigSyncEvent.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -32,7 +32,7 @@ import cpw.mods.fml.relauncher.SideOnly; /** * This event is pushed on the FMLCommonHandler event bus once each time a single config synchronization has finished. - * + *

* This is a client-only event, and is never triggered serverside! */ @SideOnly(Side.CLIENT) 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 fff967a..0f11a02 100644 --- a/src/main/java/com/falsepattern/lib/config/event/ConfigSyncRequestEvent.java +++ b/src/main/java/com/falsepattern/lib/config/event/ConfigSyncRequestEvent.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -36,11 +36,20 @@ import java.util.List; * You can use this event to manually trigger a synchronization request. The two different flavors are used on the two * 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") @RequiredArgsConstructor(access = AccessLevel.PROTECTED) public class ConfigSyncRequestEvent extends Event { + @StableAPI(since = "0.10.0") + public static void postClient() { + FMLCommonHandler.instance().bus().post(new Client()); + } + + @StableAPI(since = "0.10.0") + public static void postServer(List players) { + FMLCommonHandler.instance().bus().post(new Server(new ArrayList<>(players))); + } + @StableAPI(since = "0.10.0") public static class Client extends ConfigSyncRequestEvent { @@ -55,14 +64,4 @@ public class ConfigSyncRequestEvent extends Event { return Collections.unmodifiableList(players); } } - - @StableAPI(since = "0.10.0") - public static void postClient() { - FMLCommonHandler.instance().bus().post(new Client()); - } - - @StableAPI(since = "0.10.0") - public static void postServer(List players) { - FMLCommonHandler.instance().bus().post(new Server(new ArrayList<>(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 a509a7f..a94bea6 100644 --- a/src/main/java/com/falsepattern/lib/config/event/ConfigValidationFailureEvent.java +++ b/src/main/java/com/falsepattern/lib/config/event/ConfigValidationFailureEvent.java @@ -54,15 +54,24 @@ public abstract class ConfigValidationFailureEvent extends Event { public final int listIndex; public static void postNumericRangeOutOfBounds(Field field, int listIndex, String value, String min, String max) { - FMLCommonHandler.instance().bus().post(new NumericRangeOutOfBounds(field.getDeclaringClass(), field.getName(), listIndex, value, min, max)); + FMLCommonHandler.instance() + .bus() + .post(new NumericRangeOutOfBounds(field.getDeclaringClass(), field.getName(), listIndex, value, + min, max)); } public static void postSize(Field field, int requestedSize, boolean fixedSize, int maxSize, int defaultSize) { - FMLCommonHandler.instance().bus().post(new ListSizeOutOfBounds(field.getDeclaringClass(), field.getName(), requestedSize, fixedSize, maxSize, defaultSize)); + FMLCommonHandler.instance() + .bus() + .post(new ListSizeOutOfBounds(field.getDeclaringClass(), field.getName(), requestedSize, + fixedSize, maxSize, defaultSize)); } public static void postStringSizeOutOfBounds(Field field, int listIndex, String text, int maxSize) { - FMLCommonHandler.instance().bus().post(new StringSizeOutOfBounds(field.getDeclaringClass(), field.getName(), listIndex, text, maxSize)); + FMLCommonHandler.instance() + .bus() + .post(new StringSizeOutOfBounds(field.getDeclaringClass(), field.getName(), listIndex, text, + maxSize)); } public static void fieldIsNull(Field field, int listIndex) { @@ -70,7 +79,35 @@ public abstract class ConfigValidationFailureEvent extends Event { } public static void postStringPatternMismatch(Field field, int listIndex, String text, String pattern) { - FMLCommonHandler.instance().bus().post(new StringPatternMismatch(field.getDeclaringClass(), field.getName(), listIndex, text, pattern)); + FMLCommonHandler.instance() + .bus() + .post(new StringPatternMismatch(field.getDeclaringClass(), field.getName(), listIndex, text, + pattern)); + } + + @SideOnly(Side.CLIENT) + public void toast() { + val ann = configClass.getAnnotation(Config.class); + val toast = new SimpleToast(ToastBG.TOAST_DARK, null, + FormattedText.parse(EnumChatFormatting.RED + "Config validation failed") + .toChatText() + .get(0), + FormattedText.parse(ann.modid() + ":" + ann.category()).toChatText().get(0), false, + 2000); + GuiToast.add(toast); + } + + protected abstract void customText(StringBuilder b); + + public void logWarn() { + val errorString = new StringBuilder("Error validating configuration field!"); + errorString.append("\nReason: ").append(reason); + errorString.append("\nClass: ").append(configClass.getName()).append("\nField: ").append(fieldName); + if (listElement) { + errorString.append("\nArray index: ").append(listIndex); + } + customText(errorString); + FalsePatternLib.getLog().error(errorString.toString()); } @StableAPI(since = "0.10.0") @@ -91,9 +128,7 @@ public abstract class ConfigValidationFailureEvent extends Event { @Override protected void customText(StringBuilder b) { - b.append("\nValue: ").append(value) - .append("\nMin: ").append(min) - .append("\nMax: ").append(max); + b.append("\nValue: ").append(value).append("\nMin: ").append(min).append("\nMax: ").append(max); } } @@ -132,6 +167,7 @@ public abstract class ConfigValidationFailureEvent extends Event { public final String text; @StableAPI(since = "0.10.0") public final int maxSize; + private 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; @@ -140,9 +176,12 @@ public abstract class ConfigValidationFailureEvent extends Event { @Override protected void customText(StringBuilder b) { - b.append("\nText: ").append(text) - .append("\nSize: ").append(text.length()) - .append("\nMax size:").append(maxSize); + b.append("\nText: ") + .append(text) + .append("\nSize: ") + .append(text.length()) + .append("\nMax size:") + .append(maxSize); } } @@ -173,32 +212,7 @@ public abstract class ConfigValidationFailureEvent extends Event { @Override protected void customText(StringBuilder b) { - b.append("\nText: ").append(text) - .append("\nPattern: ").append(pattern); + b.append("\nText: ").append(text).append("\nPattern: ").append(pattern); } } - - @SideOnly(Side.CLIENT) - public void toast() { - val ann = configClass.getAnnotation(Config.class); - val toast = new SimpleToast(ToastBG.TOAST_DARK, null, - FormattedText.parse(EnumChatFormatting.RED + "Config validation failed").toChatText().get(0), - FormattedText.parse(ann.modid() + ":" + ann.category()).toChatText().get(0), - false, 2000); - GuiToast.add(toast); - } - - protected abstract void customText(StringBuilder b); - - public void logWarn() { - val errorString = new StringBuilder("Error validating configuration field!"); - errorString.append("\nReason: ").append(reason); - errorString.append("\nClass: ").append(configClass.getName()) - .append("\nField: ").append(fieldName); - if (listElement) { - errorString.append("\nArray index: ").append(listIndex); - } - customText(errorString); - FalsePatternLib.getLog().error(errorString.toString()); - } } diff --git a/src/main/java/com/falsepattern/lib/dependencies/ComplexVersion.java b/src/main/java/com/falsepattern/lib/dependencies/ComplexVersion.java index 858d918..3279dbd 100644 --- a/src/main/java/com/falsepattern/lib/dependencies/ComplexVersion.java +++ b/src/main/java/com/falsepattern/lib/dependencies/ComplexVersion.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,11 +21,12 @@ package com.falsepattern.lib.dependencies; import com.falsepattern.lib.StableAPI; -import java.util.Arrays; -import java.util.stream.Collectors; 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; diff --git a/src/main/java/com/falsepattern/lib/dependencies/DependencyLoader.java b/src/main/java/com/falsepattern/lib/dependencies/DependencyLoader.java index bb9ea1f..7001ce9 100644 --- a/src/main/java/com/falsepattern/lib/dependencies/DependencyLoader.java +++ b/src/main/java/com/falsepattern/lib/dependencies/DependencyLoader.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -34,14 +34,7 @@ public class DependencyLoader { } @Builder - public static void loadLibrary(@NonNull String loadingModId, - @NonNull String groupId, - @NonNull String artifactId, - @NonNull Version minVersion, - Version maxVersion, - @NonNull Version preferredVersion, - String regularSuffix, - String devSuffix) { + public static void loadLibrary(@NonNull String loadingModId, @NonNull String groupId, @NonNull String artifactId, @NonNull Version minVersion, Version maxVersion, @NonNull Version preferredVersion, String regularSuffix, String devSuffix) { DependencyLoaderImpl.loadLibrary(loadingModId, groupId, artifactId, minVersion, maxVersion, preferredVersion, regularSuffix, devSuffix); } diff --git a/src/main/java/com/falsepattern/lib/dependencies/SemanticVersion.java b/src/main/java/com/falsepattern/lib/dependencies/SemanticVersion.java index 410ab91..8370d8c 100644 --- a/src/main/java/com/falsepattern/lib/dependencies/SemanticVersion.java +++ b/src/main/java/com/falsepattern/lib/dependencies/SemanticVersion.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,19 +21,25 @@ package com.falsepattern.lib.dependencies; import com.falsepattern.lib.StableAPI; -import java.util.Objects; import lombok.Builder; import lombok.Getter; import lombok.NonNull; import lombok.val; +import java.util.Objects; + @StableAPI(since = "0.6.0") public class SemanticVersion extends Version { - @Getter private final int majorVersion; - @Getter private final int minorVersion; - @Getter private final int patchVersion; - @Getter private final String preRelease; - @Getter private final String build; + @Getter + private final int majorVersion; + @Getter + private final int minorVersion; + @Getter + private final int patchVersion; + @Getter + private final String preRelease; + @Getter + private final String build; public SemanticVersion(int majorVersion, int minorVersion, int patchVersion, String preRelease) { this(majorVersion, minorVersion, patchVersion, preRelease, null); diff --git a/src/main/java/com/falsepattern/lib/dependencies/Version.java b/src/main/java/com/falsepattern/lib/dependencies/Version.java index c3f9ad3..073349e 100644 --- a/src/main/java/com/falsepattern/lib/dependencies/Version.java +++ b/src/main/java/com/falsepattern/lib/dependencies/Version.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * diff --git a/src/main/java/com/falsepattern/lib/internal/CoreLoadingPlugin.java b/src/main/java/com/falsepattern/lib/internal/CoreLoadingPlugin.java index 1edcfb7..34c4332 100644 --- a/src/main/java/com/falsepattern/lib/internal/CoreLoadingPlugin.java +++ b/src/main/java/com/falsepattern/lib/internal/CoreLoadingPlugin.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -27,6 +27,7 @@ import cpw.mods.fml.relauncher.IFMLLoadingPlugin; import cpw.mods.fml.relauncher.IFMLLoadingPlugin.MCVersion; import cpw.mods.fml.relauncher.IFMLLoadingPlugin.Name; import cpw.mods.fml.relauncher.IFMLLoadingPlugin.SortingIndex; + import java.util.Map; /** @@ -39,6 +40,16 @@ public class CoreLoadingPlugin implements IFMLLoadingPlugin { @Getter private static boolean obfuscated; + static { + try { + Class.forName("thermos.Thermos"); + throw skillIssue("Thermos is not supported by FalsePatternLib, please use a normal forge server."); + } catch (ClassNotFoundException ignored) { + } + + } + + @SuppressWarnings("SameParameterValue") private static Error skillIssue(String message) { int width = message.length(); String shutup = "Any bug reports concerning this message will be silently deleted."; @@ -87,13 +98,6 @@ public class CoreLoadingPlugin implements IFMLLoadingPlugin { skillIssue.setStackTrace(new StackTraceElement[0]); return skillIssue; } - static { - try { - Class.forName("thermos.Thermos"); - throw skillIssue("Thermos is not supported by FalsePatternLib, please use a normal forge server."); - } catch (ClassNotFoundException ignored) {} - - } @Override public String[] getASMTransformerClass() { diff --git a/src/main/java/com/falsepattern/lib/internal/FalsePatternLib.java b/src/main/java/com/falsepattern/lib/internal/FalsePatternLib.java index 8766889..d7ae122 100644 --- a/src/main/java/com/falsepattern/lib/internal/FalsePatternLib.java +++ b/src/main/java/com/falsepattern/lib/internal/FalsePatternLib.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,21 +21,19 @@ package com.falsepattern.lib.internal; import com.falsepattern.lib.internal.proxy.CommonProxy; +import lombok.Getter; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; -import cpw.mods.fml.common.*; +import net.minecraft.launchwrapper.Launch; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLConstructionEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; -import lombok.Getter; - -import net.minecraft.launchwrapper.Launch; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - /** * Utility class used by FalsePatternLib's internal code. This can change between versions without notice, so do not use * this in your code! @@ -50,12 +48,14 @@ public class FalsePatternLib { public static final String UPDATE_URL = "https://falsepattern.com/mc/versions.json"; public static final SimpleNetworkWrapper NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel(Tags.MODID); - @Getter private static final Logger log = LogManager.getLogger(Tags.MODNAME); + @Getter + private static final Logger log = LogManager.getLogger(Tags.MODNAME); - @Getter private static final boolean developerEnvironment = - (boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); + @Getter + private static final boolean developerEnvironment = (boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); - @SidedProxy(clientSide = Tags.GROUPNAME + ".internal.proxy.ClientProxy", serverSide = Tags.GROUPNAME + ".internal.proxy.CommonProxy") + @SidedProxy(clientSide = Tags.GROUPNAME + ".internal.proxy.ClientProxy", + serverSide = Tags.GROUPNAME + ".internal.proxy.CommonProxy") private static CommonProxy proxy; public FalsePatternLib() { diff --git a/src/main/java/com/falsepattern/lib/internal/Internet.java b/src/main/java/com/falsepattern/lib/internal/Internet.java index 1d1ea6b..008ee36 100644 --- a/src/main/java/com/falsepattern/lib/internal/Internet.java +++ b/src/main/java/com/falsepattern/lib/internal/Internet.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -23,7 +23,10 @@ package com.falsepattern.lib.internal; import lombok.val; import lombok.var; -import java.io.*; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.concurrent.CompletableFuture; diff --git a/src/main/java/com/falsepattern/lib/internal/SRGGen.java b/src/main/java/com/falsepattern/lib/internal/SRGGen.java index c845078..d49838f 100644 --- a/src/main/java/com/falsepattern/lib/internal/SRGGen.java +++ b/src/main/java/com/falsepattern/lib/internal/SRGGen.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -19,6 +19,7 @@ * along with this program. If not, see . */ package com.falsepattern.lib.internal; + import lombok.Getter; import java.io.IOException; @@ -32,8 +33,81 @@ import java.util.List; import java.util.Map; import java.util.Objects; +@SuppressWarnings("ALL") @Getter class SRGGen { + private static final Map class_notch_srg = new HashMap<>(); + private static final Map class_notch_mcp = new HashMap<>(); + private static final Map class_srg_mcp = new HashMap<>(); + private static final Map class_mcp_srg = new HashMap<>(); + private static final Map class_mcp_notch = new HashMap<>(); + private static final Map field_notch_srg = new HashMap<>(); + private static final Map field_notch_mcp = new HashMap<>(); + private static final Map field_srg_mcp = new HashMap<>(); + private static final Map field_mcp_srg = new HashMap<>(); + private static final Map field_mcp_notch = new HashMap<>(); + private static final Map method_notch_srg = new HashMap<>(); + private static final Map method_notch_mcp = new HashMap<>(); + private static final Map method_srg_mcp = new HashMap<>(); + private static final Map method_mcp_srg = new HashMap<>(); + private static final Map method_mcp_notch = new HashMap<>(); + + public static void main(String[] args) throws IOException { + Path dir = Paths.get(args[0]); + parseLines(Files.readAllLines(dir.resolve("notch-srg.srg")), class_notch_srg, field_notch_srg, + method_notch_srg); + parseLines(Files.readAllLines(dir.resolve("notch-mcp.srg")), class_notch_mcp, field_notch_mcp, + method_notch_mcp); + parseLines(Files.readAllLines(dir.resolve("srg-mcp.srg")), class_srg_mcp, field_srg_mcp, method_srg_mcp); + parseLines(Files.readAllLines(dir.resolve("mcp-srg.srg")), class_mcp_srg, field_mcp_srg, method_mcp_srg); + parseLines(Files.readAllLines(dir.resolve("mcp-notch.srg")), class_mcp_notch, field_mcp_notch, + method_mcp_notch); + try (OutputStream output = Files.newOutputStream(dir.resolve("classes.csv"))) { + output.write("notch,srg,mcp\n".getBytes(StandardCharsets.UTF_8)); + crossValidate(class_notch_srg, class_notch_mcp, class_srg_mcp, class_mcp_srg, class_mcp_notch, output); + } + try (OutputStream output = Files.newOutputStream(dir.resolve("fields.csv"))) { + output.write("notch,srg,mcp\n".getBytes(StandardCharsets.UTF_8)); + crossValidate(field_notch_srg, field_notch_mcp, field_srg_mcp, field_mcp_srg, field_mcp_notch, output); + } + + try (OutputStream output = Files.newOutputStream(dir.resolve("methods.csv"))) { + output.write("notch,notchdesc,srg,srgdesc,mcp,mcpdesc\n".getBytes(StandardCharsets.UTF_8)); + crossValidate(method_notch_srg, method_notch_mcp, method_srg_mcp, method_mcp_srg, method_mcp_notch, output); + } + } + + private static boolean crossValidate(Map notch_srg, Map notch_mcp, Map srg_mcp, Map mcp_srg, Map mcp_notch, OutputStream output) + throws IOException { + for (Map.Entry notch_srg_entry : notch_srg.entrySet()) { + Object notch = notch_srg_entry.getKey(); + Object srg = notch_srg_entry.getValue(); + Object mcp = notch_mcp.get(notch); + if (!srg_mcp.get(srg).equals(mcp) || !mcp_srg.get(mcp).equals(srg) || !mcp_notch.get(mcp).equals(notch)) { + throw new RuntimeException(notch + " - " + srg + " - " + mcp); + } + output.write((notch + "," + srg + "," + mcp + "\n").getBytes(StandardCharsets.UTF_8)); + } + return true; + } + + private static void parseLines(List lines, Map classes, Map fields, Map methods) { + for (String line : lines) { + String[] parts = line.split(" "); + switch (parts[0]) { + case "CL:": + classes.put(parts[1], parts[2]); + break; + case "FD:": + fields.put(parts[1], parts[2]); + break; + case "MD:": + methods.put(new StringPair(parts[1], parts[2]), new StringPair(parts[3], parts[4])); + break; + } + } + } + private static class StringPair { public final String name; public final String desc; @@ -65,73 +139,4 @@ class SRGGen { return name + "," + desc; } } - private static Map class_notch_srg = new HashMap<>(); - private static Map class_notch_mcp = new HashMap<>(); - private static Map class_srg_mcp = new HashMap<>(); - private static Map class_mcp_srg = new HashMap<>(); - private static Map class_mcp_notch = new HashMap<>(); - private static Map field_notch_srg = new HashMap<>(); - private static Map field_notch_mcp = new HashMap<>(); - private static Map field_srg_mcp = new HashMap<>(); - private static Map field_mcp_srg = new HashMap<>(); - private static Map field_mcp_notch = new HashMap<>(); - private static Map method_notch_srg = new HashMap<>(); - private static Map method_notch_mcp = new HashMap<>(); - private static Map method_srg_mcp = new HashMap<>(); - private static Map method_mcp_srg = new HashMap<>(); - private static Map method_mcp_notch = new HashMap<>(); - public static void main(String[] args) throws IOException { - Path dir = Paths.get(args[0]); - parseLines(Files.readAllLines(dir.resolve("notch-srg.srg")), class_notch_srg, field_notch_srg, method_notch_srg); - parseLines(Files.readAllLines(dir.resolve("notch-mcp.srg")), class_notch_mcp, field_notch_mcp, method_notch_mcp); - parseLines(Files.readAllLines(dir.resolve("srg-mcp.srg")), class_srg_mcp, field_srg_mcp, method_srg_mcp); - parseLines(Files.readAllLines(dir.resolve("mcp-srg.srg")), class_mcp_srg, field_mcp_srg, method_mcp_srg); - parseLines(Files.readAllLines(dir.resolve("mcp-notch.srg")), class_mcp_notch, field_mcp_notch, method_mcp_notch); - try (OutputStream output = Files.newOutputStream(dir.resolve("classes.csv"))) { - output.write("notch,srg,mcp\n".getBytes(StandardCharsets.UTF_8)); - crossValidate(class_notch_srg, class_notch_mcp, class_srg_mcp, class_mcp_srg, class_mcp_notch, output); - } - try (OutputStream output = Files.newOutputStream(dir.resolve("fields.csv"))) { - output.write("notch,srg,mcp\n".getBytes(StandardCharsets.UTF_8)); - crossValidate(field_notch_srg, field_notch_mcp, field_srg_mcp, field_mcp_srg, field_mcp_notch, output); - } - - try (OutputStream output = Files.newOutputStream(dir.resolve("methods.csv"))) { - output.write("notch,notchdesc,srg,srgdesc,mcp,mcpdesc\n".getBytes(StandardCharsets.UTF_8)); - crossValidate(method_notch_srg, method_notch_mcp, method_srg_mcp, method_mcp_srg, method_mcp_notch, output); - } - } - - private static boolean crossValidate(Map notch_srg, Map notch_mcp, Map srg_mcp, Map mcp_srg, Map mcp_notch, OutputStream output) - throws IOException { - for (Map.Entry notch_srg_entry: notch_srg.entrySet()) { - Object notch = notch_srg_entry.getKey(); - Object srg = notch_srg_entry.getValue(); - Object mcp = notch_mcp.get(notch); - if (!srg_mcp.get(srg).equals(mcp) || - !mcp_srg.get(mcp).equals(srg) || - !mcp_notch.get(mcp).equals(notch)) { - throw new RuntimeException(notch + " - " + srg + " - " + mcp); - } - output.write((notch + "," + srg + "," + mcp + "\n").getBytes(StandardCharsets.UTF_8)); - } - return true; - } - - private static void parseLines(List lines, Map classes, Map fields, Map methods) { - for (String line: lines) { - String[] parts = line.split(" "); - switch (parts[0]) { - case "CL:": - classes.put(parts[1], parts[2]); - break; - case "FD:": - fields.put(parts[1], parts[2]); - break; - case "MD:": - methods.put(new StringPair(parts[1], parts[2]), new StringPair(parts[3], parts[4])); - break; - } - } - } } \ No newline at end of file diff --git a/src/main/java/com/falsepattern/lib/internal/Tags.java b/src/main/java/com/falsepattern/lib/internal/Tags.java index de2c1f4..553ee5f 100644 --- a/src/main/java/com/falsepattern/lib/internal/Tags.java +++ b/src/main/java/com/falsepattern/lib/internal/Tags.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * diff --git a/src/main/java/com/falsepattern/lib/internal/config/LibraryConfig.java b/src/main/java/com/falsepattern/lib/internal/config/LibraryConfig.java index fcc4992..da91a24 100644 --- a/src/main/java/com/falsepattern/lib/internal/config/LibraryConfig.java +++ b/src/main/java/com/falsepattern/lib/internal/config/LibraryConfig.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -45,6 +45,8 @@ public class LibraryConfig { public static ValidationLogging CONFIG_ERROR_LOUDNESS; public enum ValidationLogging { - None, Log, LogAndToast + None, + Log, + LogAndToast } } diff --git a/src/main/java/com/falsepattern/lib/internal/config/LibraryGuiConfig.java b/src/main/java/com/falsepattern/lib/internal/config/LibraryGuiConfig.java index 5d0ad96..e525c6f 100644 --- a/src/main/java/com/falsepattern/lib/internal/config/LibraryGuiConfig.java +++ b/src/main/java/com/falsepattern/lib/internal/config/LibraryGuiConfig.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -24,9 +24,9 @@ import com.falsepattern.lib.config.ConfigException; import com.falsepattern.lib.config.SimpleGuiConfig; import com.falsepattern.lib.internal.Tags; +import net.minecraft.client.gui.GuiScreen; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; @SideOnly(Side.CLIENT) public class LibraryGuiConfig extends SimpleGuiConfig { diff --git a/src/main/java/com/falsepattern/lib/internal/config/LibraryGuiFactory.java b/src/main/java/com/falsepattern/lib/internal/config/LibraryGuiFactory.java index cbb33e0..ea51600 100644 --- a/src/main/java/com/falsepattern/lib/internal/config/LibraryGuiFactory.java +++ b/src/main/java/com/falsepattern/lib/internal/config/LibraryGuiFactory.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,9 +21,10 @@ package com.falsepattern.lib.internal.config; import com.falsepattern.lib.config.SimpleGuiFactory; + +import net.minecraft.client.gui.GuiScreen; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; @SideOnly(Side.CLIENT) public class LibraryGuiFactory implements SimpleGuiFactory { 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 3dd548e..2e6eaa0 100644 --- a/src/main/java/com/falsepattern/lib/internal/config/ToastConfig.java +++ b/src/main/java/com/falsepattern/lib/internal/config/ToastConfig.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -54,6 +54,7 @@ public class ToastConfig { } public enum Side { - Left, Right + Left, + Right } } diff --git a/src/main/java/com/falsepattern/lib/internal/impl/config/ConfigurationManagerImpl.java b/src/main/java/com/falsepattern/lib/internal/impl/config/ConfigurationManagerImpl.java index f9df8ce..27806cd 100644 --- a/src/main/java/com/falsepattern/lib/internal/impl/config/ConfigurationManagerImpl.java +++ b/src/main/java/com/falsepattern/lib/internal/impl/config/ConfigurationManagerImpl.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -73,7 +73,7 @@ import java.util.function.BiConsumer; /** * The actual implementation of ConfigurationManager. Migrated stuff here so that we don't unnecessarily expose * internal-use functionality. - * + *

* Do not read if you value your sanity. */ @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -116,7 +116,8 @@ public class ConfigurationManagerImpl { parsedConfigMap.get(configClass).save(); } - public static boolean validateFields(BiConsumer, Field> invalidFieldHandler, Class configClass, boolean resetInvalid) throws ConfigException { + public static boolean validateFields(BiConsumer, Field> invalidFieldHandler, Class configClass, boolean resetInvalid) + throws ConfigException { if (!parsedConfigMap.containsKey(configClass)) { throw new ConfigException("Class " + configClass.getName() + " is not a registered configuration!"); } @@ -133,13 +134,13 @@ public class ConfigurationManagerImpl { public static void sendRequest(DataOutput output) throws IOException { val synced = new ArrayList>(); - for (val entry: parsedConfigMap.entrySet()) { + for (val entry : parsedConfigMap.entrySet()) { if (entry.getValue().sync) { synced.add(entry.getKey()); } } output.writeInt(synced.size()); - for (val clazz: synced) { + for (val clazz : synced) { output.writeUTF(clazz.getName()); } } @@ -151,7 +152,7 @@ public class ConfigurationManagerImpl { for (int i = 0; i < count; i++) { classNames.add(input.readUTF()); } - for (val entry: parsedConfigMap.keySet()) { + for (val entry : parsedConfigMap.keySet()) { if (classNames.contains(entry.getName())) { result.add(entry); } @@ -161,13 +162,13 @@ public class ConfigurationManagerImpl { public static void sendReply(DataOutput output, List> requestedClasses) throws IOException { val syncEntries = new HashMap<>(parsedConfigMap); - for (val entry: parsedConfigMap.entrySet()) { + for (val entry : parsedConfigMap.entrySet()) { if (!entry.getValue().sync || !requestedClasses.contains(entry.getKey())) { syncEntries.remove(entry.getKey()); } } output.writeInt(syncEntries.size()); - for (val entry: syncEntries.entrySet()) { + for (val entry : syncEntries.entrySet()) { output.writeUTF(entry.getKey().getName()); val b = new ByteArrayOutputStream(); val bo = new DataOutputStream(b); @@ -187,7 +188,8 @@ public class ConfigurationManagerImpl { for (int i = 0; i < count; i++) { String className = input.readUTF(); int dataSize = input.readInt(); - val opt = parsedConfigMap.keySet().stream().filter((clazz) -> clazz.getName().equals(className)).findFirst(); + val opt = + parsedConfigMap.keySet().stream().filter((clazz) -> clazz.getName().equals(className)).findFirst(); if (!opt.isPresent()) { input.skipBytes(dataSize); FalsePatternLib.getLog().warn("Server tried to sync config not registered on our side: " + className); @@ -197,7 +199,9 @@ public class ConfigurationManagerImpl { val config = parsedConfigMap.get(clazz); if (!config.sync) { input.skipBytes(dataSize); - FalsePatternLib.getLog().warn("Server tried to sync config without @Synchronize annotation on our side: " + className); + FalsePatternLib.getLog() + .warn("Server tried to sync config without @Synchronize annotation on our side: " + + className); continue; } if (!ConfigSyncEvent.postStart(clazz)) { @@ -223,11 +227,11 @@ public class ConfigurationManagerImpl { public static void loadRawConfig(Configuration rawConfig) throws ConfigException { rawConfig.load(); - for (val configClass: configToClassMap.get(rawConfig)) { + for (val configClass : configToClassMap.get(rawConfig)) { val config = parsedConfigMap.get(configClass); try { config.reloadFields(); - } catch (NoSuchFieldException | IllegalAccessException e) { + } catch (IllegalAccessException e) { throw new ConfigException(e); } } @@ -296,7 +300,7 @@ public class ConfigurationManagerImpl { return; } val configClasses = configToClassMap.get(rawConfig); - for (val clazz: configClasses) { + for (val clazz : configClasses) { val config = parsedConfigMap.get(clazz); config.configChanged(); } @@ -323,12 +327,16 @@ public class ConfigurationManagerImpl { val cfg = e.configClass.getAnnotation(Config.class); if (e.successful) { GuiToast.add(new SimpleToast(ToastBG.TOAST_DARK, null, - FormattedText.parse(EnumChatFormatting.GREEN + "Synced config").toChatText().get(0), + FormattedText.parse(EnumChatFormatting.GREEN + "Synced config") + .toChatText() + .get(0), FormattedText.parse(cfg.modid() + ":" + cfg.category()).toChatText().get(0), false, 5000)); } else { GuiToast.add(new SimpleToast(ToastBG.TOAST_DARK, null, - FormattedText.parse(EnumChatFormatting.RED + "Failed to sync config").toChatText().get(0), + FormattedText.parse(EnumChatFormatting.RED + "Failed to sync config") + .toChatText() + .get(0), FormattedText.parse(cfg.modid() + ":" + cfg.category()).toChatText().get(0), false, 5000)); } diff --git a/src/main/java/com/falsepattern/lib/internal/impl/config/ParsedConfiguration.java b/src/main/java/com/falsepattern/lib/internal/impl/config/ParsedConfiguration.java index 2c09771..38ce24d 100644 --- a/src/main/java/com/falsepattern/lib/internal/impl/config/ParsedConfiguration.java +++ b/src/main/java/com/falsepattern/lib/internal/impl/config/ParsedConfiguration.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -38,7 +38,6 @@ import lombok.val; import net.minecraftforge.common.config.ConfigElement; import net.minecraftforge.common.config.Configuration; - import cpw.mods.fml.client.config.IConfigElement; import java.io.DataInput; @@ -57,15 +56,6 @@ import java.util.function.BiConsumer; public class ParsedConfiguration { private static final Field propField; - public final Class configClass; - public final String modid; - public final String category; - public final Configuration rawConfig; - public final boolean sync; - private final Map> fields = new HashMap<>(); - private final Map> elements = new HashMap<>(); - private int maxFieldNameLength; - static { try { propField = ConfigElement.class.getDeclaredField("prop"); @@ -75,6 +65,15 @@ public class ParsedConfiguration { ReflectionUtil.jailBreak(propField); } + public final Class configClass; + public final String modid; + public final String category; + public final Configuration rawConfig; + public final boolean sync; + private final Map> fields = new HashMap<>(); + private final Map> elements = new HashMap<>(); + private int maxFieldNameLength; + public static ParsedConfiguration parseConfig(Class configClass) throws ConfigException { val cfg = Optional.ofNullable(configClass.getAnnotation(Config.class)) .orElseThrow(() -> new ConfigException( @@ -84,10 +83,11 @@ public class ParsedConfiguration { .orElseThrow(() -> new ConfigException( "Config class " + configClass.getName() + " has an empty category!")); val rawConfig = ConfigurationManagerImpl.getForgeConfig(cfg.modid()); - val parsedConfig = new ParsedConfiguration(configClass, cfg.modid(), category, rawConfig, configClass.isAnnotationPresent(Config.Synchronize.class)); + val parsedConfig = new ParsedConfiguration(configClass, cfg.modid(), category, rawConfig, + configClass.isAnnotationPresent(Config.Synchronize.class)); try { parsedConfig.reloadFields(); - } catch (NoSuchFieldException | IllegalAccessException e) { + } catch (IllegalAccessException e) { throw new ConfigException(e); } return parsedConfig; @@ -102,7 +102,7 @@ public class ParsedConfiguration { //Happens when changed through the gui public void configChanged() { - for (val field: fields.values()) { + for (val field : fields.values()) { field.load(); } rawConfig.save(); @@ -110,7 +110,7 @@ public class ParsedConfiguration { public void load() throws ConfigException { ConfigurationManagerImpl.loadRawConfig(rawConfig); - for (val field: fields.values()) { + for (val field : fields.values()) { field.load(); } } @@ -118,15 +118,17 @@ public class ParsedConfiguration { public void receive(DataInput input) throws IOException { if (sync) { val syncFields = new HashMap<>(fields); - for (val key: fields.keySet()) { + for (val key : fields.keySet()) { if (syncFields.get(key).noSync) { syncFields.remove(key); } } while (syncFields.size() > 0) { - val fieldName = StringConfigField.receiveString(input, maxFieldNameLength, "field name", configClass.getName()); + val fieldName = + StringConfigField.receiveString(input, maxFieldNameLength, "field name", configClass.getName()); if (!syncFields.containsKey(fieldName)) { - throw new IOException("Invalid sync field name received: " + fieldName + " for config class " + configClass.getName()); + throw new IOException("Invalid sync field name received: " + fieldName + " for config class " + + configClass.getName()); } syncFields.remove(fieldName).receive(input); } @@ -136,19 +138,19 @@ public class ParsedConfiguration { public void transmit(DataOutput output) throws IOException { if (sync) { val syncFields = new HashMap<>(fields); - for (val key: fields.keySet()) { + for (val key : fields.keySet()) { if (syncFields.get(key).noSync) { syncFields.remove(key); } } - for (val field: syncFields.entrySet()) { + for (val field : syncFields.entrySet()) { StringConfigField.transmitString(output, field.getKey()); field.getValue().transmit(output); } } } - public void reloadFields() throws ConfigException, NoSuchFieldException, IllegalAccessException { + public void reloadFields() throws ConfigException, IllegalAccessException { fields.clear(); maxFieldNameLength = 0; val cat = rawConfig.getCategory(category); @@ -209,7 +211,7 @@ public class ParsedConfiguration { public boolean validate(BiConsumer, Field> invalidFieldHandler, boolean resetInvalid) { boolean valid = true; - for (val field: fields.values()) { + for (val field : fields.values()) { if (!field.validateField()) { if (resetInvalid) { field.setToDefault(); diff --git a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/AConfigField.java b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/AConfigField.java index cb9da41..702ba76 100644 --- a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/AConfigField.java +++ b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/AConfigField.java @@ -102,6 +102,7 @@ public abstract class AConfigField { return property; } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") public abstract boolean validateField(); public abstract void transmit(DataOutput output) throws IOException; diff --git a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/DoubleConfigField.java b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/DoubleConfigField.java index 5e1b569..5e95d63 100644 --- a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/DoubleConfigField.java +++ b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/DoubleConfigField.java @@ -112,7 +112,8 @@ public class DoubleConfigField extends AConfigField { if (value >= min && value <= max) { return true; } - ConfigValidationFailureEvent.postNumericRangeOutOfBounds(field, -1, Double.toString(value), Double.toString(min), Double.toString(max)); + ConfigValidationFailureEvent.postNumericRangeOutOfBounds(field, -1, Double.toString(value), + Double.toString(min), Double.toString(max)); return false; } diff --git a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/DoubleListConfigField.java b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/DoubleListConfigField.java index 9b3d229..73e0187 100644 --- a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/DoubleListConfigField.java +++ b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/DoubleListConfigField.java @@ -107,7 +107,8 @@ public class DoubleListConfigField extends AListConfigField { for (int j = 0; j < doubles.length; j++) { double d = doubles[j]; if (d < min || d > max) { - ConfigValidationFailureEvent.postNumericRangeOutOfBounds(field, j, Double.toString(d), Double.toString(min), Double.toString(max)); + ConfigValidationFailureEvent.postNumericRangeOutOfBounds(field, j, Double.toString(d), + Double.toString(min), Double.toString(max)); valid = false; } } diff --git a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/EnumConfigField.java b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/EnumConfigField.java index a2ae305..7a1a4bc 100644 --- a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/EnumConfigField.java +++ b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/EnumConfigField.java @@ -57,7 +57,9 @@ public class EnumConfigField> extends AConfigField { .stream() .filter((e) -> e.name().equals(defName)) .findAny() - .orElseThrow(() -> new IllegalArgumentException("Default value \"" + defName + "\" was not found in enum " + enumClass.getName()))) + .orElseThrow(() -> new IllegalArgumentException( + "Default value \"" + defName + + "\" was not found in enum " + enumClass.getName()))) .orElseGet(() -> { FalsePatternLib.getLog() .warn("The field " + field.getName() + " in class " + diff --git a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/FloatConfigField.java b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/FloatConfigField.java index db8975c..de51f5e 100644 --- a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/FloatConfigField.java +++ b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/FloatConfigField.java @@ -118,7 +118,8 @@ public class FloatConfigField extends AConfigField { if (value >= min && value <= max) { return true; } - ConfigValidationFailureEvent.postNumericRangeOutOfBounds(field, -1, Float.toString(value), Float.toString(min), Float.toString(max)); + ConfigValidationFailureEvent.postNumericRangeOutOfBounds(field, -1, Float.toString(value), + Float.toString(min), Float.toString(max)); return false; } else { return true; diff --git a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/IntConfigField.java b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/IntConfigField.java index 696aeb4..c083750 100644 --- a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/IntConfigField.java +++ b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/IntConfigField.java @@ -112,7 +112,8 @@ public class IntConfigField extends AConfigField { if (value >= min && value <= max) { return true; } - ConfigValidationFailureEvent.postNumericRangeOutOfBounds(field, -1, Integer.toString(value), Integer.toString(min), Integer.toString(max)); + ConfigValidationFailureEvent.postNumericRangeOutOfBounds(field, -1, Integer.toString(value), + Integer.toString(min), Integer.toString(max)); return false; } diff --git a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/IntListConfigField.java b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/IntListConfigField.java index 6e14b63..76c0b05 100644 --- a/src/main/java/com/falsepattern/lib/internal/impl/config/fields/IntListConfigField.java +++ b/src/main/java/com/falsepattern/lib/internal/impl/config/fields/IntListConfigField.java @@ -107,7 +107,8 @@ public class IntListConfigField extends AListConfigField { for (int j = 0; j < ints.length; j++) { int i = ints[j]; if (i < min || i > max) { - ConfigValidationFailureEvent.postNumericRangeOutOfBounds(field, j, Integer.toString(i), Integer.toString(min), Integer.toString(max)); + ConfigValidationFailureEvent.postNumericRangeOutOfBounds(field, j, Integer.toString(i), + Integer.toString(min), Integer.toString(max)); valid = false; } } diff --git a/src/main/java/com/falsepattern/lib/internal/impl/dependencies/DependencyLoaderImpl.java b/src/main/java/com/falsepattern/lib/internal/impl/dependencies/DependencyLoaderImpl.java index b670921..9e5c7a7 100644 --- a/src/main/java/com/falsepattern/lib/internal/impl/dependencies/DependencyLoaderImpl.java +++ b/src/main/java/com/falsepattern/lib/internal/impl/dependencies/DependencyLoaderImpl.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -24,8 +24,8 @@ import com.falsepattern.lib.dependencies.DependencyLoader; import com.falsepattern.lib.dependencies.Version; import com.falsepattern.lib.internal.FalsePatternLib; import com.falsepattern.lib.internal.Internet; -import com.falsepattern.lib.internal.config.LibraryConfig; import com.falsepattern.lib.internal.Tags; +import com.falsepattern.lib.internal.config.LibraryConfig; import com.falsepattern.lib.util.FileUtil; import lombok.NonNull; import lombok.RequiredArgsConstructor; @@ -66,11 +66,9 @@ public class DependencyLoaderImpl { mavenRepositories.add(url); } - public static void loadLibrary(@NonNull String loadingModId, @NonNull String groupId, @NonNull String artifactId, - @NonNull Version minVersion, Version maxVersion, @NonNull Version preferredVersion, - String regularSuffix, String devSuffix) { - new DependencyLoadTask(loadingModId, groupId, artifactId, minVersion, maxVersion, preferredVersion, regularSuffix, devSuffix) - .load(); + public static void loadLibrary(@NonNull String loadingModId, @NonNull String groupId, @NonNull String artifactId, @NonNull Version minVersion, Version maxVersion, @NonNull Version preferredVersion, String regularSuffix, String devSuffix) { + new DependencyLoadTask(loadingModId, groupId, artifactId, minVersion, maxVersion, preferredVersion, + regularSuffix, devSuffix).load(); } private static String bytesToHex(byte[] hash) { @@ -188,8 +186,8 @@ public class DependencyLoaderImpl { private void setupLibraryNames() { suffix = FalsePatternLib.isDeveloperEnvironment() ? devSuffix : regularSuffix; - artifactLogName = - String.format("%s:%s:%s%s", groupId, artifactId, preferredVersion, suffix != null ? "-" + suffix : ""); + artifactLogName = String.format("%s:%s:%s%s", groupId, artifactId, preferredVersion, + suffix != null ? "-" + suffix : ""); log.info("Adding library {}, requested by mod {}", artifactLogName, loadingModId); artifact = groupId + ":" + artifactId + ":" + suffix; } @@ -230,8 +228,8 @@ public class DependencyLoaderImpl { } } val modsDir = Paths.get(homeDir, "mods").toFile(); - mavenJarName = String.format("%s-%s%s.jar", artifactId, preferredVersion, - (suffix != null) ? ("-" + suffix) : ""); + mavenJarName = + String.format("%s-%s%s.jar", artifactId, preferredVersion, (suffix != null) ? ("-" + suffix) : ""); jarName = groupId + "-" + mavenJarName; libDir = new File(modsDir, "falsepattern"); if (!libDir.exists()) { @@ -244,7 +242,9 @@ public class DependencyLoaderImpl { } private boolean tryLoadingExistingFile() { - if (!file.exists()) return false; + if (!file.exists()) { + return false; + } try { addToClasspath(file); loadedLibraries.put(artifact, preferredVersion); @@ -273,8 +273,8 @@ public class DependencyLoaderImpl { if (!repo.endsWith("/")) { repo = repo + "/"; } - val url = String.format("%s%s/%s/%s/%s", repo, groupId.replace('.', '/'), artifactId, - preferredVersion, mavenJarName); + val url = String.format("%s%s/%s/%s/%s", repo, groupId.replace('.', '/'), artifactId, preferredVersion, + mavenJarName); String finalRepo = repo; int retryCount = 0; while (true) { @@ -283,14 +283,14 @@ public class DependencyLoaderImpl { break; } val success = new AtomicBoolean(false); - Internet.connect(new URL(url), (ex) -> log.debug("Artifact {} could not be downloaded from repo {}: {}", - artifactLogName, finalRepo, ex.getMessage()), - (input) -> { - log.debug("Downloading {} from {}", artifactLogName, finalRepo); - download(input, file); - log.debug("Downloaded {} from {}", artifactLogName, finalRepo); - success.set(true); - }); + Internet.connect(new URL(url), + (ex) -> log.debug("Artifact {} could not be downloaded from repo {}: {}", + artifactLogName, finalRepo, ex.getMessage()), (input) -> { + log.debug("Downloading {} from {}", artifactLogName, finalRepo); + download(input, file); + log.debug("Downloaded {} from {}", artifactLogName, finalRepo); + success.set(true); + }); if (success.get()) { log.debug("Validating checksum for {}", artifactLogName); val hadChecksum = validateChecksum(url); @@ -322,13 +322,13 @@ public class DependencyLoaderImpl { log.debug("Attempting to get {} checksum...", checksumType); val success = new AtomicBoolean(false); Internet.connect(new URL(checksumURL), - (ex) -> log.debug("Could not get {} checksum for {}: {}", checksumType, artifactLogName, ex.getMessage()), - (input) -> { - log.debug("Downloading {} checksum for {}", checksumType, artifactLogName); - download(input, checksumFile); - log.debug("Downloaded {} checksum for {}", checksumType, artifactLogName); - success.set(true); - }); + (ex) -> log.debug("Could not get {} checksum for {}: {}", checksumType, + artifactLogName, ex.getMessage()), (input) -> { + log.debug("Downloading {} checksum for {}", checksumType, artifactLogName); + download(input, checksumFile); + log.debug("Downloaded {} checksum for {}", checksumType, artifactLogName); + success.set(true); + }); if (success.get()) { val fileHash = hash(checksumType, file); val referenceHash = new String(Files.readAllBytes(checksumFile.toPath())); @@ -347,7 +347,9 @@ public class DependencyLoaderImpl { } private enum ChecksumStatus { - OK, FAILED, MISSING + OK, + FAILED, + MISSING } } } diff --git a/src/main/java/com/falsepattern/lib/internal/impl/toast/GuiToastImpl.java b/src/main/java/com/falsepattern/lib/internal/impl/toast/GuiToastImpl.java index 4040e9b..6919881 100644 --- a/src/main/java/com/falsepattern/lib/internal/impl/toast/GuiToastImpl.java +++ b/src/main/java/com/falsepattern/lib/internal/impl/toast/GuiToastImpl.java @@ -20,7 +20,6 @@ */ package com.falsepattern.lib.internal.impl.toast; -import com.falsepattern.lib.internal.config.LibraryConfig; import com.falsepattern.lib.internal.config.ToastConfig; import com.falsepattern.lib.toasts.IToast; import com.falsepattern.lib.util.MathUtil; @@ -45,10 +44,14 @@ import java.util.Deque; @SideOnly(Side.CLIENT) public class GuiToastImpl extends Gui { + private static GuiToastImpl instance; private final Minecraft mc; private final Deque toastsQueue = Queues.newArrayDeque(); private ToastInstance[] visible = new ToastInstance[0]; - private static GuiToastImpl instance; + + public GuiToastImpl(Minecraft mcIn) { + this.mc = mcIn; + } public static void initialize(Minecraft mc) { if (instance != null) { @@ -64,7 +67,7 @@ public class GuiToastImpl extends Gui { @SubscribeEvent public void updateToasts(TickEvent.RenderTickEvent event) { - if ( event.phase != TickEvent.Phase.END) { + if (event.phase != TickEvent.Phase.END) { return; } mc.mcProfiler.startSection("toasts"); @@ -72,11 +75,6 @@ public class GuiToastImpl extends Gui { mc.mcProfiler.endSection(); } - - public GuiToastImpl(Minecraft mcIn) { - this.mc = mcIn; - } - public void drawToast(ScaledResolution resolution) { if (!this.mc.gameSettings.hideGUI) { RenderHelper.disableStandardItemLighting(); @@ -168,9 +166,7 @@ public class GuiToastImpl extends Gui { GL11.glPushMatrix(); val shift = toast.width() * getVisibility(sysTime); val X = ToastConfig.leftAlign() ? shift - toast.width() : x - shift; - GL11.glTranslatef(X, - (float) (y * 32) + ToastConfig.Y_OFFSET, - (float) (500 + y)); + GL11.glTranslatef(X, (float) (y * 32) + ToastConfig.Y_OFFSET, (float) (500 + y)); val visibility = this.toast.draw(GuiToastImpl.this, sysTime - this.visibleTime); GL11.glPopMatrix(); diff --git a/src/main/java/com/falsepattern/lib/internal/proxy/ClientProxy.java b/src/main/java/com/falsepattern/lib/internal/proxy/ClientProxy.java index 83a443d..abcce71 100644 --- a/src/main/java/com/falsepattern/lib/internal/proxy/ClientProxy.java +++ b/src/main/java/com/falsepattern/lib/internal/proxy/ClientProxy.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -25,10 +25,6 @@ import com.falsepattern.lib.config.ConfigurationManager; import com.falsepattern.lib.internal.FalsePatternLib; import com.falsepattern.lib.internal.Tags; import com.falsepattern.lib.internal.config.ToastConfig; -import com.falsepattern.lib.internal.impl.config.net.SyncPrompt; -import com.falsepattern.lib.internal.impl.config.net.SyncPromptHandler; -import com.falsepattern.lib.internal.impl.config.net.SyncReply; -import com.falsepattern.lib.internal.impl.config.net.SyncReplyHandler; import com.falsepattern.lib.internal.impl.toast.GuiToastImpl; import com.falsepattern.lib.updates.UpdateChecker; import lombok.val; @@ -83,11 +79,12 @@ public class ClientProxy extends CommonProxy { @SubscribeEvent public void onSinglePlayer(EntityJoinWorldEvent e) { - if (chatFuture == null || - !(e.entity instanceof EntityPlayerSP)) return; + if (chatFuture == null || !(e.entity instanceof EntityPlayerSP)) { + return; + } val player = (EntityPlayerSP) e.entity; try { - for (val line: chatFuture.get()) { + for (val line : chatFuture.get()) { player.addChatMessage(line); } chatFuture = null; diff --git a/src/main/java/com/falsepattern/lib/internal/proxy/CommonProxy.java b/src/main/java/com/falsepattern/lib/internal/proxy/CommonProxy.java index 9edee62..e7e2ee9 100644 --- a/src/main/java/com/falsepattern/lib/internal/proxy/CommonProxy.java +++ b/src/main/java/com/falsepattern/lib/internal/proxy/CommonProxy.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -24,7 +24,6 @@ import com.falsepattern.lib.config.ConfigException; import com.falsepattern.lib.config.ConfigurationManager; import com.falsepattern.lib.internal.FalsePatternLib; import com.falsepattern.lib.internal.config.LibraryConfig; -import com.falsepattern.lib.internal.config.ToastConfig; import com.falsepattern.lib.internal.impl.config.ConfigurationManagerImpl; import com.falsepattern.lib.internal.impl.config.net.SyncPrompt; import com.falsepattern.lib.internal.impl.config.net.SyncPromptHandler; @@ -34,14 +33,13 @@ import com.falsepattern.lib.internal.impl.config.net.SyncRequest; import com.falsepattern.lib.internal.impl.config.net.SyncRequestHandler; import com.falsepattern.lib.updates.ModUpdateInfo; import com.falsepattern.lib.updates.UpdateChecker; +import lombok.val; import cpw.mods.fml.common.event.FMLConstructionEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.relauncher.Side; -import lombok.val; - import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; diff --git a/src/main/java/com/falsepattern/lib/mapping/MappingManager.java b/src/main/java/com/falsepattern/lib/mapping/MappingManager.java index ebb6be5..91ac8c0 100644 --- a/src/main/java/com/falsepattern/lib/mapping/MappingManager.java +++ b/src/main/java/com/falsepattern/lib/mapping/MappingManager.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -37,20 +37,21 @@ import org.objectweb.asm.tree.MethodInsnNode; import java.util.HashMap; public class MappingManager { - private static boolean initialized = false; - private static final Lookup internalLookup = new Lookup<>(); private static final Lookup regularLookup = new Lookup<>(); - + private static boolean initialized = false; @SneakyThrows private static synchronized void initialize() { - if (initialized) return; + if (initialized) { + return; + } initialized = true; long start = System.nanoTime(); val stringPool = new HashMap(); { - val classMappings = ResourceUtil.getResourceStringFromJar("/classes.csv", FalsePatternLib.class).split("\n"); + val classMappings = + ResourceUtil.getResourceStringFromJar("/classes.csv", FalsePatternLib.class).split("\n"); for (int i = 1; i < classMappings.length; i++) { val line = classMappings[i].split(","); val clazz = new UniversalClass(line, stringPool); @@ -67,7 +68,8 @@ public class MappingManager { } } { - val methodMappings = ResourceUtil.getResourceStringFromJar("/methods.csv", FalsePatternLib.class).split("\n"); + val methodMappings = + ResourceUtil.getResourceStringFromJar("/methods.csv", FalsePatternLib.class).split("\n"); for (int i = 1; i < methodMappings.length; i++) { val line = methodMappings[i].split(","); val clazz = internalLookup.get(MappingType.Notch, line[0].substring(0, line[0].lastIndexOf('/'))); @@ -78,7 +80,8 @@ public class MappingManager { System.out.println("Parsed in " + (end - start) / 1000000 + "ms"); } - public static UniversalClass classForName(NameType nameType, MappingType mappingType, String className) throws ClassNotFoundException { + public static UniversalClass classForName(NameType nameType, MappingType mappingType, String className) + throws ClassNotFoundException { initialize(); try { switch (nameType) { @@ -90,7 +93,9 @@ public class MappingManager { throw new IllegalArgumentException("Invalid enum value " + nameType); } } catch (Lookup.LookupException e) { - throw new ClassNotFoundException("Could not find class \"" + className + "\" with " + nameType.name().toLowerCase() + " name in the " + mappingType.name() + " mapping."); + throw new ClassNotFoundException( + "Could not find class \"" + className + "\" with " + nameType.name().toLowerCase() + + " name in the " + mappingType.name() + " mapping."); } } @@ -105,22 +110,27 @@ public class MappingManager { } } - public static UniversalField getField(FieldInsnNode instruction) throws ClassNotFoundException, - NoSuchFieldException { + public static UniversalField getField(FieldInsnNode instruction) + throws ClassNotFoundException, NoSuchFieldException { if (!CoreLoadingPlugin.isObfuscated()) { try { - return classForName(NameType.Internal, MappingType.MCP, instruction.owner).getField(MappingType.MCP, instruction.name); + return classForName(NameType.Internal, MappingType.MCP, instruction.owner).getField(MappingType.MCP, + instruction.name); } catch (ClassNotFoundException e) { - throw new ClassNotFoundException("Could not find the class " + instruction.owner + " in the MCP mappings. Are you sure it's a Minecraft class? (we're in dev, cannot use SRG or Notch here)."); + throw new ClassNotFoundException("Could not find the class " + instruction.owner + + " in the MCP mappings. Are you sure it's a Minecraft class? (we're in dev, cannot use SRG or Notch here)."); } } else { try { - return classForName(NameType.Internal, MappingType.SRG, instruction.owner).getField(MappingType.SRG, instruction.name); + return classForName(NameType.Internal, MappingType.SRG, instruction.owner).getField(MappingType.SRG, + instruction.name); } catch (ClassNotFoundException e) { try { - return classForName(NameType.Internal, MappingType.Notch, instruction.owner).getField(MappingType.Notch, instruction.name); + return classForName(NameType.Internal, MappingType.Notch, instruction.owner).getField( + MappingType.Notch, instruction.name); } catch (ClassNotFoundException ex) { - throw new ClassNotFoundException("Could not find the class " + instruction.owner + " neither in the SRG nor in the Notch mappings. Are you sure it's a Minecraft class? (we're in obf, cannot use MCP here)"); + throw new ClassNotFoundException("Could not find the class " + instruction.owner + + " neither in the SRG nor in the Notch mappings. Are you sure it's a Minecraft class? (we're in obf, cannot use MCP here)"); } } } @@ -130,18 +140,25 @@ public class MappingManager { throws ClassNotFoundException, NoSuchMethodException { if (!CoreLoadingPlugin.isObfuscated()) { try { - return classForName(NameType.Internal, MappingType.MCP, instruction.owner).getMethod(MappingType.MCP, instruction.name, instruction.desc); + return classForName(NameType.Internal, MappingType.MCP, instruction.owner).getMethod(MappingType.MCP, + instruction.name, + instruction.desc); } catch (ClassNotFoundException e) { - throw new ClassNotFoundException("Could not find the class " + instruction.owner + " in the MCP mappings. Are you sure it's a Minecraft class? (we're in dev, cannot use SRG or Notch here)."); + throw new ClassNotFoundException("Could not find the class " + instruction.owner + + " in the MCP mappings. Are you sure it's a Minecraft class? (we're in dev, cannot use SRG or Notch here)."); } } else { try { - return classForName(NameType.Internal, MappingType.SRG, instruction.owner).getMethod(MappingType.SRG, instruction.name, instruction.desc); + return classForName(NameType.Internal, MappingType.SRG, instruction.owner).getMethod(MappingType.SRG, + instruction.name, + instruction.desc); } catch (ClassNotFoundException e) { try { - return classForName(NameType.Internal, MappingType.Notch, instruction.owner).getMethod(MappingType.Notch, instruction.name, instruction.desc); + return classForName(NameType.Internal, MappingType.Notch, instruction.owner).getMethod( + MappingType.Notch, instruction.name, instruction.desc); } catch (ClassNotFoundException ex) { - throw new ClassNotFoundException("Could not find the class " + instruction.owner + " neither in the SRG nor in the Notch mappings. Are you sure it's a Minecraft class? (we're in obf, cannot use MCP here)"); + throw new ClassNotFoundException("Could not find the class " + instruction.owner + + " neither in the SRG nor in the Notch mappings. Are you sure it's a Minecraft class? (we're in obf, cannot use MCP here)"); } } } 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 f04b056..47120fc 100644 --- a/src/main/java/com/falsepattern/lib/mapping/storage/Lookup.java +++ b/src/main/java/com/falsepattern/lib/mapping/storage/Lookup.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -40,6 +40,16 @@ public class Lookup { private final Map srg = new HashMap<>(); private final Map mcp = new HashMap<>(); + private static void removeFirst(Iterator> iterator, T value) { + while (iterator.hasNext()) { + val entry = iterator.next(); + if (entry.getValue().equals(value)) { + iterator.remove(); + return; + } + } + } + public boolean contains(T value) { return values.contains(value); } @@ -92,16 +102,6 @@ public class Lookup { return result; } - private static void removeFirst(Iterator> iterator, T value) { - while (iterator.hasNext()) { - val entry = iterator.next(); - if (entry.getValue().equals(value)) { - iterator.remove(); - return; - } - } - } - public static class LookupException extends Exception { 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 6338ea5..957d83a 100644 --- a/src/main/java/com/falsepattern/lib/mapping/storage/MappedString.java +++ b/src/main/java/com/falsepattern/lib/mapping/storage/MappedString.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -40,16 +40,17 @@ public class MappedString { public final String notch; public final String srg; public final String mcp; + 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); + 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); } 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)); + stringPool.computeIfAbsent(a.srg + delimiter + b.srg, (str) -> str), + stringPool.computeIfAbsent(a.mcp + delimiter + b.mcp, (str) -> str)); } public String get(MappingType type) { 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 71c359e..a240717 100644 --- a/src/main/java/com/falsepattern/lib/mapping/types/MappingType.java +++ b/src/main/java/com/falsepattern/lib/mapping/types/MappingType.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * 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 03d6c25..5250481 100644 --- a/src/main/java/com/falsepattern/lib/mapping/types/NameType.java +++ b/src/main/java/com/falsepattern/lib/mapping/types/NameType.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * 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 2fb2dbd..2b7d9af 100644 --- a/src/main/java/com/falsepattern/lib/mapping/types/UniversalClass.java +++ b/src/main/java/com/falsepattern/lib/mapping/types/UniversalClass.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -116,7 +116,8 @@ public class UniversalClass { } } - public UniversalMethod getMethod(MappingType mappingType, String methodName, String methodDescriptor) throws NoSuchMethodException { + public UniversalMethod getMethod(MappingType mappingType, String methodName, String methodDescriptor) + throws NoSuchMethodException { try { return methods.get(mappingType, methodName + methodDescriptor); } catch (Lookup.LookupException e) { 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 663face..cf35d67 100644 --- a/src/main/java/com/falsepattern/lib/mapping/types/UniversalField.java +++ b/src/main/java/com/falsepattern/lib/mapping/types/UniversalField.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -20,8 +20,8 @@ */ package com.falsepattern.lib.mapping.types; -import com.falsepattern.lib.util.ReflectionUtil; import com.falsepattern.lib.mapping.storage.MappedString; +import com.falsepattern.lib.util.ReflectionUtil; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NonNull; 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 13c1974..d512a4f 100644 --- a/src/main/java/com/falsepattern/lib/mapping/types/UniversalMethod.java +++ b/src/main/java/com/falsepattern/lib/mapping/types/UniversalMethod.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -20,8 +20,8 @@ */ package com.falsepattern.lib.mapping.types; -import com.falsepattern.lib.util.ReflectionUtil; import com.falsepattern.lib.mapping.storage.MappedString; +import com.falsepattern.lib.util.ReflectionUtil; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NonNull; @@ -61,30 +61,12 @@ public class UniversalMethod { parent.addMethod(this); } - public String getName(MappingType mappingType) { - return name.get(mappingType); - } - - public String getDescriptor(MappingType mappingType) { - return descriptor.get(mappingType); - } - - public Method asJavaMethod() throws ClassNotFoundException, NoSuchMethodException { - if (javaMethodCache != null) { - return javaMethodCache; - } - val parentClass = parent.asJavaClass(); - javaMethodCache = parentClass.getDeclaredMethod(getName(parent.realClassMapping()), decodeMethodDescriptor(getDescriptor(parent.realClassMapping()))); - ReflectionUtil.jailBreak(javaMethodCache); - return javaMethodCache; - } - private static Class[] decodeMethodDescriptor(String desc) throws ClassNotFoundException { val result = new ArrayList>(); val buf = new StringBuilder(); boolean readingReference = false; int arrayDimensions = 0; - for (val c: desc.toCharArray()) { + for (val c : desc.toCharArray()) { Class parsedClass = null; if (readingReference) { if (c == ';') { @@ -95,9 +77,12 @@ public class UniversalMethod { buf.append(c); continue; } - } else if (c == '(') continue; - else if (c == ')') break; - else switch (c) { + } else if (c == '(') { + continue; + } else if (c == ')') { + break; + } else { + switch (c) { case 'B': parsedClass = byte.class; break; @@ -128,6 +113,7 @@ public class UniversalMethod { case '[': arrayDimensions++; continue; + } } for (int i = 0; i < arrayDimensions; i++) { parsedClass = Array.newInstance(parsedClass, 0).getClass(); @@ -138,15 +124,36 @@ public class UniversalMethod { return result.toArray(new Class[0]); } + public String getName(MappingType mappingType) { + return name.get(mappingType); + } + + public String getDescriptor(MappingType mappingType) { + return descriptor.get(mappingType); + } + + public Method asJavaMethod() throws ClassNotFoundException, NoSuchMethodException { + if (javaMethodCache != null) { + return javaMethodCache; + } + val parentClass = parent.asJavaClass(); + javaMethodCache = parentClass.getDeclaredMethod(getName(parent.realClassMapping()), decodeMethodDescriptor( + getDescriptor(parent.realClassMapping()))); + ReflectionUtil.jailBreak(javaMethodCache); + return javaMethodCache; + } + /** * This is only here for completeness' sake, given that MethodInsnNode itself also has a deprecated yet functional constructor. */ @Deprecated public MethodInsnNode asInstruction(int opcode, MappingType mapping) { - return new MethodInsnNode(opcode, parent.getName(NameType.Internal, mapping), getName(mapping), getDescriptor(mapping)); + return new MethodInsnNode(opcode, parent.getName(NameType.Internal, mapping), getName(mapping), + getDescriptor(mapping)); } public MethodInsnNode asInstruction(int opcode, MappingType mapping, boolean itf) { - return new MethodInsnNode(opcode, parent.getName(NameType.Internal, mapping), getName(mapping), getDescriptor(mapping), itf); + return new MethodInsnNode(opcode, parent.getName(NameType.Internal, mapping), getName(mapping), + getDescriptor(mapping), itf); } } diff --git a/src/main/java/com/falsepattern/lib/mixin/IMixin.java b/src/main/java/com/falsepattern/lib/mixin/IMixin.java index fffac22..b579788 100644 --- a/src/main/java/com/falsepattern/lib/mixin/IMixin.java +++ b/src/main/java/com/falsepattern/lib/mixin/IMixin.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,11 +21,13 @@ package com.falsepattern.lib.mixin; import com.falsepattern.lib.StableAPI; +import lombok.val; + import cpw.mods.fml.relauncher.FMLLaunchHandler; + import java.util.List; import java.util.function.Predicate; import java.util.function.Supplier; -import lombok.val; @StableAPI(since = "0.8.0") public interface IMixin { diff --git a/src/main/java/com/falsepattern/lib/mixin/IMixinPlugin.java b/src/main/java/com/falsepattern/lib/mixin/IMixinPlugin.java index 13ac23e..1eeff02 100644 --- a/src/main/java/com/falsepattern/lib/mixin/IMixinPlugin.java +++ b/src/main/java/com/falsepattern/lib/mixin/IMixinPlugin.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,6 +21,16 @@ package com.falsepattern.lib.mixin; 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.spongepowered.asm.lib.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import net.minecraft.launchwrapper.Launch; + import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -31,15 +41,6 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; -import com.falsepattern.lib.util.FileUtil; -import lombok.val; -import net.minecraft.launchwrapper.Launch; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.spongepowered.asm.lib.tree.ClassNode; -import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; -import org.spongepowered.asm.mixin.extensibility.IMixinInfo; - import static java.nio.file.Files.walk; @StableAPI(since = "0.8.0") @@ -50,6 +51,15 @@ public interface IMixinPlugin extends IMixinConfigPlugin { return LogManager.getLogger(modName + " Mixin Loader"); } + static File findJarOf(final ITargetedMod mod) { + try (val stream = walk(MODS_DIRECTORY_PATH)) { + return stream.filter(mod::isMatchingJar).map(Path::toFile).findFirst().orElse(null); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + @Override default void onLoad(String mixinPackage) { @@ -124,15 +134,6 @@ public interface IMixinPlugin extends IMixinConfigPlugin { IMixin[] getMixinEnumValues(); - static File findJarOf(final ITargetedMod mod) { - try (val stream = walk(MODS_DIRECTORY_PATH)) { - return stream.filter(mod::isMatchingJar).map(Path::toFile).findFirst().orElse(null); - } catch (IOException e) { - e.printStackTrace(); - return null; - } - } - @Override default void preApply(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 2c6689e..0d76ae0 100644 --- a/src/main/java/com/falsepattern/lib/mixin/ITargetedMod.java +++ b/src/main/java/com/falsepattern/lib/mixin/ITargetedMod.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -22,6 +22,7 @@ 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; diff --git a/src/main/java/com/falsepattern/lib/mixin/MinecraftURLClassPath.java b/src/main/java/com/falsepattern/lib/mixin/MinecraftURLClassPath.java index b951583..1eb44ed 100644 --- a/src/main/java/com/falsepattern/lib/mixin/MinecraftURLClassPath.java +++ b/src/main/java/com/falsepattern/lib/mixin/MinecraftURLClassPath.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -20,15 +20,17 @@ */ package com.falsepattern.lib.mixin; -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.ModClassLoader; -import java.io.File; -import java.lang.reflect.Method; -import java.net.URL; import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.val; + import net.minecraft.launchwrapper.LaunchClassLoader; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.ModClassLoader; + +import java.io.File; +import java.lang.reflect.Method; +import java.net.URL; /** * Backport from spongemixins 1.3 for compat with the curseforge 1.2.0 version. @@ -47,16 +49,15 @@ public final class MinecraftURLClassPath { static { boolean grimoire = false; - String[] knownGrimoireClassNames = new String[]{ - "io.github.crucible.grimoire.Grimoire", - "io.github.crucible.grimoire.common.GrimoireCore" - }; - for (val className: knownGrimoireClassNames) { + String[] knownGrimoireClassNames = + new String[]{"io.github.crucible.grimoire.Grimoire", "io.github.crucible.grimoire.common.GrimoireCore"}; + for (val className : knownGrimoireClassNames) { try { Class.forName(className, false, MinecraftURLClassPath.class.getClassLoader()); grimoire = true; break; - } catch (ClassNotFoundException ignored) {} + } catch (ClassNotFoundException ignored) { + } } GRIMOIRE = grimoire; if (!GRIMOIRE) { @@ -64,8 +65,8 @@ public final class MinecraftURLClassPath { val modClassLoaderField = Loader.class.getDeclaredField("modClassLoader"); modClassLoaderField.setAccessible(true); - val loaderinstanceField = Loader.class.getDeclaredField("instance"); - loaderinstanceField.setAccessible(true); + val loaderInstanceField = Loader.class.getDeclaredField("instance"); + loaderInstanceField.setAccessible(true); val mainClassLoaderField = ModClassLoader.class.getDeclaredField("mainClassLoader"); mainClassLoaderField.setAccessible(true); @@ -73,7 +74,7 @@ public final class MinecraftURLClassPath { val ucpField = LaunchClassLoader.class.getSuperclass().getDeclaredField("ucp"); ucpField.setAccessible(true); - Object loader = loaderinstanceField.get(null); + Object loader = loaderInstanceField.get(null); val modClassLoader = (ModClassLoader) modClassLoaderField.get(loader); val mainClassLoader = (LaunchClassLoader) mainClassLoaderField.get(modClassLoader); ucp = ucpField.get(mainClassLoader); diff --git a/src/main/java/com/falsepattern/lib/text/FormattedText.java b/src/main/java/com/falsepattern/lib/text/FormattedText.java index c7566a3..a41cf25 100644 --- a/src/main/java/com/falsepattern/lib/text/FormattedText.java +++ b/src/main/java/com/falsepattern/lib/text/FormattedText.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,20 +21,10 @@ package com.falsepattern.lib.text; import com.falsepattern.lib.StableAPI; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import java.awt.Color; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Consumer; import lombok.NonNull; import lombok.val; import lombok.var; + import net.minecraft.client.entity.EntityOtherPlayerMP; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.gui.FontRenderer; @@ -47,6 +37,18 @@ import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IChatComponent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import java.awt.Color; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Consumer; /** * Universal escape sequence-based text rendering and chat messages. @@ -132,10 +134,7 @@ public final class FormattedText { private final boolean endLine; - private FormattedText(@NonNull String text, - @NonNull EnumChatFormatting colorStyle, - @NonNull Set fancyStyles, - boolean endLine) { + private FormattedText(@NonNull String text, @NonNull EnumChatFormatting colorStyle, @NonNull Set fancyStyles, boolean endLine) { this.text = text; this.fancyStyles.addAll(fancyStyles); this.colorStyle = colorStyle; diff --git a/src/main/java/com/falsepattern/lib/toasts/SimpleToast.java b/src/main/java/com/falsepattern/lib/toasts/SimpleToast.java index f06865e..fb72d87 100644 --- a/src/main/java/com/falsepattern/lib/toasts/SimpleToast.java +++ b/src/main/java/com/falsepattern/lib/toasts/SimpleToast.java @@ -51,9 +51,9 @@ public class SimpleToast implements IToast { private float currentProgress; @StableAPI(since = "0.10.0") - public SimpleToast(@NonNull ToastBG background, @Nullable ToastIcon icon, - IChatComponent titleComponent, @Nullable IChatComponent subtitleComponent, - boolean drawProgressBar, long timeout) { + public SimpleToast(@NonNull ToastBG background, + @Nullable ToastIcon icon, IChatComponent titleComponent, + @Nullable IChatComponent subtitleComponent, boolean drawProgressBar, long timeout) { this.background = background; this.icon = icon; this.title = titleComponent.getFormattedText(); @@ -83,7 +83,8 @@ public class SimpleToast implements IToast { if (hasProgressBar) { val bgWidth = background.getIcon().getIconWidth(); Gui.drawRect(3, bgHeight - 4, bgWidth - 3, bgHeight - 3, 0xFFFFFFFF); - float f = (float) MathUtil.clampedLerp(displayedProgress, currentProgress, (float) (delta - lastDelta) / 100.0F); + float f = (float) MathUtil.clampedLerp(displayedProgress, currentProgress, + (float) (delta - lastDelta) / 100.0F); int i; if (currentProgress >= displayedProgress) { 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 f6cb7ae..a0acf26 100644 --- a/src/main/java/com/falsepattern/lib/toasts/icon/ToastBG.java +++ b/src/main/java/com/falsepattern/lib/toasts/icon/ToastBG.java @@ -36,17 +36,24 @@ import cpw.mods.fml.relauncher.SideOnly; @StableAPI(since = "0.10.0") public class ToastBG extends ToastTexture { @StableAPI(since = "0.10.0") - public static final ToastBG TOAST_DARK = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_dark.png"), 160, 32, 0xFFFFFFFF); + public static final ToastBG TOAST_DARK = + new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_dark.png"), 160, 32, 0xFFFFFFFF); @StableAPI(since = "0.10.0") - public static final ToastBG TOAST_DARK_ROUNDED = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_dark_rounded.png"), 160, 32, 0xFFFFFFFF); + public static final ToastBG TOAST_DARK_ROUNDED = + new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_dark_rounded.png"), 160, 32, 0xFFFFFFFF); @StableAPI(since = "0.10.0") - public static final ToastBG TOAST_NARRATOR = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_narrator.png"), 160, 32, 0xFFAAAA00); + public static final ToastBG TOAST_NARRATOR = + new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_narrator.png"), 160, 32, 0xFFAAAA00); @StableAPI(since = "0.10.0") - public static final ToastBG TOAST_NARRATOR_ROUNDED = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_narrator_rounded.png"), 160, 32, 0xFFAAAA00); + public static final ToastBG TOAST_NARRATOR_ROUNDED = + new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_narrator_rounded.png"), 160, 32, + 0xFFAAAA00); @StableAPI(since = "0.10.0") - public static final ToastBG TOAST_WHITE = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_white.png"), 160, 32, 0xFF500050); + public static final ToastBG TOAST_WHITE = + new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_white.png"), 160, 32, 0xFF500050); @StableAPI(since = "0.10.0") - public static final ToastBG TOAST_WHITE_ROUNDED = new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_white_rounded.png"), 160, 32, 0xFF500050); + public static final ToastBG TOAST_WHITE_ROUNDED = + new ToastBG(new ResourceLocation(Tags.MODID, "textures/gui/toast_white_rounded.png"), 160, 32, 0xFF500050); @StableAPI(since = "0.10.0") public final int defaultTextColor; 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 1c0ce4d..60f7fca 100644 --- a/src/main/java/com/falsepattern/lib/toasts/icon/ToastTexture.java +++ b/src/main/java/com/falsepattern/lib/toasts/icon/ToastTexture.java @@ -34,9 +34,9 @@ import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) @StableAPI(since = "0.10.0") public abstract class ToastTexture { - @Getter(onMethod_={@StableAPI(since = "0.10.0")}) + @Getter(onMethod_ = {@StableAPI(since = "0.10.0")}) protected final IIcon icon; - @Getter(onMethod_={@StableAPI(since = "0.10.0")}) + @Getter(onMethod_ = {@StableAPI(since = "0.10.0")}) protected final ResourceLocation texture; @StableAPI(since = "0.10.0") diff --git a/src/main/java/com/falsepattern/lib/updates/ModUpdateInfo.java b/src/main/java/com/falsepattern/lib/updates/ModUpdateInfo.java index f343d14..2954623 100644 --- a/src/main/java/com/falsepattern/lib/updates/ModUpdateInfo.java +++ b/src/main/java/com/falsepattern/lib/updates/ModUpdateInfo.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -28,17 +28,18 @@ import org.apache.logging.log4j.Logger; @Data @StableAPI(since = "0.8.0") public class ModUpdateInfo { - @NonNull public final String modID; - @NonNull public final String currentVersion; - @NonNull public final String latestVersion; - @NonNull public final String updateURL; + @NonNull + public final String modID; + @NonNull + public final String currentVersion; + @NonNull + public final String latestVersion; + @NonNull + public final String updateURL; public void log(Logger logger) { logger.info("Updates are available for mod {}: Currently installed version is {}, " + - "latest available version is {}. Update URL: {}", - modID, - currentVersion, - latestVersion, - updateURL.isEmpty() ? "unavailable": updateURL); + "latest available version is {}. Update URL: {}", modID, currentVersion, latestVersion, + updateURL.isEmpty() ? "unavailable" : updateURL); } } diff --git a/src/main/java/com/falsepattern/lib/updates/UpdateCheckException.java b/src/main/java/com/falsepattern/lib/updates/UpdateCheckException.java index 1d15694..6642762 100644 --- a/src/main/java/com/falsepattern/lib/updates/UpdateCheckException.java +++ b/src/main/java/com/falsepattern/lib/updates/UpdateCheckException.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * diff --git a/src/main/java/com/falsepattern/lib/updates/UpdateChecker.java b/src/main/java/com/falsepattern/lib/updates/UpdateChecker.java index 3d62b8b..339c6d1 100644 --- a/src/main/java/com/falsepattern/lib/updates/UpdateChecker.java +++ b/src/main/java/com/falsepattern/lib/updates/UpdateChecker.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -25,14 +25,15 @@ import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.dependencies.DependencyLoader; import com.falsepattern.lib.dependencies.SemanticVersion; import com.falsepattern.lib.internal.Internet; -import com.falsepattern.lib.internal.config.LibraryConfig; import com.falsepattern.lib.internal.Tags; +import com.falsepattern.lib.internal.config.LibraryConfig; import com.falsepattern.lib.text.FormattedText; -import cpw.mods.fml.common.Loader; import lombok.val; + import net.minecraft.client.resources.I18n; import net.minecraft.event.ClickEvent; import net.minecraft.util.IChatComponent; +import cpw.mods.fml.common.Loader; import java.net.MalformedURLException; import java.net.URL; @@ -67,7 +68,9 @@ public class UpdateChecker { * ...etc, one json object per mod. * ] * } + * * @param url The URL to check + * * @return A list of mods that were both available on the URL and installed */ public static CompletableFuture> fetchUpdatesAsync(String url) { @@ -93,7 +96,8 @@ public class UpdateChecker { .preferredVersion(new SemanticVersion(0, 4, 1)) .build(); } catch (Exception e) { - throw new CompletionException(new UpdateCheckException("Failed to load json library for update checker!", e)); + throw new CompletionException( + new UpdateCheckException("Failed to load json library for update checker!", e)); } jsonLibraryLoaded.set(true); } @@ -102,7 +106,8 @@ public class UpdateChecker { try { parsed = JsonNode.parse(Internet.download(URL).thenApply(String::new).join()); } catch (CompletionException e) { - throw new CompletionException(new UpdateCheckException("Failed to download update checker JSON file!", e.getCause() == null ? e : e.getCause())); + throw new CompletionException(new UpdateCheckException("Failed to download update checker JSON file!", + e.getCause() == null ? e : e.getCause())); } List modList; if (parsed.isList()) { @@ -111,12 +116,20 @@ public class UpdateChecker { modList = Collections.singletonList(parsed); } val installedMods = Loader.instance().getIndexedModList(); - for (val node: modList) { - if (!node.isObject()) continue; - if (!node.containsKey("modid")) continue; - if (!node.containsKey("latestVersion")) continue; + for (val node : modList) { + if (!node.isObject()) { + continue; + } + if (!node.containsKey("modid")) { + continue; + } + if (!node.containsKey("latestVersion")) { + continue; + } val modid = node.getString("modid"); - if (!installedMods.containsKey(modid)) continue; + if (!installedMods.containsKey(modid)) { + continue; + } val mod = installedMods.get(modid); val latestVersionsNode = node.get("latestVersion"); List latestVersions; @@ -124,16 +137,22 @@ public class UpdateChecker { latestVersions = Collections.singletonList(latestVersionsNode.stringValue()); } else if (latestVersionsNode.isList()) { latestVersions = new ArrayList<>(); - for (val version: latestVersionsNode.getJavaList()) { - if (!version.isString()) continue; + for (val version : latestVersionsNode.getJavaList()) { + if (!version.isString()) { + continue; + } latestVersions.add(version.stringValue()); } } else { continue; } val currentVersion = mod.getVersion(); - if (latestVersions.contains(currentVersion)) continue; - val updateURL = node.containsKey("updateURL") && node.get("updateURL").isString() ? node.getString("updateURL") : ""; + if (latestVersions.contains(currentVersion)) { + continue; + } + val updateURL = + node.containsKey("updateURL") && node.get("updateURL").isString() ? node.getString("updateURL") + : ""; result.add(new ModUpdateInfo(modid, currentVersion, latestVersions.get(0), updateURL)); } return result; @@ -142,8 +161,11 @@ public class UpdateChecker { /** * Same this as {@link #fetchUpdatesAsync(String)}, but returns the result in a blocking fashion. + * * @param url The URL to check + * * @return A future that will contain the update info about mods that were both available on the URL and installed + * * @throws UpdateCheckException If the update checker is disabled in config, the URL is invalid, or */ public static List fetchUpdates(String url) throws UpdateCheckException { @@ -162,20 +184,29 @@ public class UpdateChecker { /** * Formats the raw list of updates into lines of chat messages you can send to players. + * * @param initiator Who/what/which mod did this update check - * @param updates The list of updates to convert + * @param updates The list of updates to convert + * * @return A list of chat messages that can be sent to players */ public static List updateListToChatMessages(String initiator, List updates) { - if (updates == null || updates.size() == 0) + if (updates == null || updates.size() == 0) { return null; - val updateText = new ArrayList(FormattedText.parse(I18n.format("falsepatternlib.chat.updatesavailable", initiator)).toChatText()); + } + val updateText = new ArrayList( + FormattedText.parse(I18n.format("falsepatternlib.chat.updatesavailable", initiator)).toChatText()); val mods = Loader.instance().getIndexedModList(); for (val update : updates) { val mod = mods.get(update.modID); - updateText.addAll(FormattedText.parse(I18n.format("falsepatternlib.chat.modname", mod.getName())).toChatText()); - updateText.addAll(FormattedText.parse(I18n.format("falsepatternlib.chat.currentversion", update.currentVersion)).toChatText()); - updateText.addAll(FormattedText.parse(I18n.format("falsepatternlib.chat.latestversion", update.latestVersion)).toChatText()); + updateText.addAll( + FormattedText.parse(I18n.format("falsepatternlib.chat.modname", mod.getName())).toChatText()); + updateText.addAll( + FormattedText.parse(I18n.format("falsepatternlib.chat.currentversion", update.currentVersion)) + .toChatText()); + updateText.addAll( + FormattedText.parse(I18n.format("falsepatternlib.chat.latestversion", update.latestVersion)) + .toChatText()); if (!update.updateURL.isEmpty()) { val pre = FormattedText.parse(I18n.format("falsepatternlib.chat.updateurlpre")).toChatText(); val link = FormattedText.parse(I18n.format("falsepatternlib.chat.updateurl")).toChatText(); diff --git a/src/main/java/com/falsepattern/lib/util/FileUtil.java b/src/main/java/com/falsepattern/lib/util/FileUtil.java index 79ed241..54a572f 100644 --- a/src/main/java/com/falsepattern/lib/util/FileUtil.java +++ b/src/main/java/com/falsepattern/lib/util/FileUtil.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,6 +21,7 @@ package com.falsepattern.lib.util; import com.falsepattern.lib.StableAPI; + import net.minecraft.launchwrapper.Launch; import java.io.File; diff --git a/src/main/java/com/falsepattern/lib/util/LangUtil.java b/src/main/java/com/falsepattern/lib/util/LangUtil.java index b7e9feb..996079b 100644 --- a/src/main/java/com/falsepattern/lib/util/LangUtil.java +++ b/src/main/java/com/falsepattern/lib/util/LangUtil.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,8 +21,11 @@ package com.falsepattern.lib.util; import com.falsepattern.lib.StableAPI; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import lombok.val; + import cpw.mods.fml.common.registry.LanguageRegistry; -import lombok.*; import java.util.HashMap; import java.util.Map; @@ -40,8 +43,9 @@ public final class LangUtil { } public static void defaultLocalization(@NonNull String key, @NonNull String value) { - if (!LanguageRegistry.instance().getStringLocalization(key, DEFAULT_LOCALE).isEmpty()) + if (!LanguageRegistry.instance().getStringLocalization(key, DEFAULT_LOCALE).isEmpty()) { return; + } val map = tempMap.get(); map.put(key, value); LanguageRegistry.instance().injectLanguage(DEFAULT_LOCALE, map); diff --git a/src/main/java/com/falsepattern/lib/util/MathUtil.java b/src/main/java/com/falsepattern/lib/util/MathUtil.java index 4fbcef5..4fbf352 100644 --- a/src/main/java/com/falsepattern/lib/util/MathUtil.java +++ b/src/main/java/com/falsepattern/lib/util/MathUtil.java @@ -207,7 +207,7 @@ public class MathUtil { } /** - * Buckets an integer with specifed bucket sizes. + * Buckets an integer with specified bucket sizes. */ @StableAPI(since = "0.10.0") public static int intFloorDiv(int number, int bucket) { diff --git a/src/main/java/com/falsepattern/lib/util/ReflectionUtil.java b/src/main/java/com/falsepattern/lib/util/ReflectionUtil.java index 6846e6f..8067392 100644 --- a/src/main/java/com/falsepattern/lib/util/ReflectionUtil.java +++ b/src/main/java/com/falsepattern/lib/util/ReflectionUtil.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -28,6 +28,7 @@ import java.lang.reflect.Modifier; public class ReflectionUtil { private static final Field f_modifiers; + static { try { f_modifiers = Field.class.getDeclaredField("modifiers"); diff --git a/src/main/java/com/falsepattern/lib/util/RenderUtil.java b/src/main/java/com/falsepattern/lib/util/RenderUtil.java index 87d8d34..9615709 100644 --- a/src/main/java/com/falsepattern/lib/util/RenderUtil.java +++ b/src/main/java/com/falsepattern/lib/util/RenderUtil.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * diff --git a/src/main/java/com/falsepattern/lib/util/ResourceUtil.java b/src/main/java/com/falsepattern/lib/util/ResourceUtil.java index 08e6090..ea3c352 100644 --- a/src/main/java/com/falsepattern/lib/util/ResourceUtil.java +++ b/src/main/java/com/falsepattern/lib/util/ResourceUtil.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2022 FalsePattern * All Rights Reserved * @@ -21,6 +21,8 @@ package com.falsepattern.lib.util; import com.falsepattern.lib.StableAPI; +import lombok.val; + import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.IOException; @@ -28,7 +30,6 @@ import java.io.InputStream; import java.net.URL; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import lombok.val; /** * A utility class for reading resources in many ways.