From 04fe933f4c24817100f3101f088accf55a621f8a Mon Sep 17 00:00:00 2001 From: isxander Date: Thu, 11 Apr 2024 18:43:06 +0100 Subject: Extremely fragile and broken multiversion build with stonecutter --- .../dev/isxander/yacl3/api/utils/Dimension.java | 33 ++++++++++++++++++ .../isxander/yacl3/api/utils/MutableDimension.java | 11 ++++++ .../dev/isxander/yacl3/api/utils/OptionUtils.java | 39 ++++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 src/main/java/dev/isxander/yacl3/api/utils/Dimension.java create mode 100644 src/main/java/dev/isxander/yacl3/api/utils/MutableDimension.java create mode 100644 src/main/java/dev/isxander/yacl3/api/utils/OptionUtils.java (limited to 'src/main/java/dev/isxander/yacl3/api/utils') diff --git a/src/main/java/dev/isxander/yacl3/api/utils/Dimension.java b/src/main/java/dev/isxander/yacl3/api/utils/Dimension.java new file mode 100644 index 0000000..ec09238 --- /dev/null +++ b/src/main/java/dev/isxander/yacl3/api/utils/Dimension.java @@ -0,0 +1,33 @@ +package dev.isxander.yacl3.api.utils; + +import dev.isxander.yacl3.impl.utils.DimensionIntegerImpl; + +public interface Dimension { + T x(); + T y(); + + T width(); + T height(); + + T xLimit(); + T yLimit(); + + T centerX(); + T centerY(); + + boolean isPointInside(T x, T y); + + MutableDimension clone(); + + Dimension withX(T x); + Dimension withY(T y); + Dimension withWidth(T width); + Dimension withHeight(T height); + + Dimension moved(T x, T y); + Dimension expanded(T width, T height); + + static MutableDimension ofInt(int x, int y, int width, int height) { + return new DimensionIntegerImpl(x, y, width, height); + } +} diff --git a/src/main/java/dev/isxander/yacl3/api/utils/MutableDimension.java b/src/main/java/dev/isxander/yacl3/api/utils/MutableDimension.java new file mode 100644 index 0000000..f551232 --- /dev/null +++ b/src/main/java/dev/isxander/yacl3/api/utils/MutableDimension.java @@ -0,0 +1,11 @@ +package dev.isxander.yacl3.api.utils; + +public interface MutableDimension extends Dimension { + MutableDimension setX(T x); + MutableDimension setY(T y); + MutableDimension setWidth(T width); + MutableDimension setHeight(T height); + + MutableDimension move(T x, T y); + MutableDimension expand(T width, T height); +} diff --git a/src/main/java/dev/isxander/yacl3/api/utils/OptionUtils.java b/src/main/java/dev/isxander/yacl3/api/utils/OptionUtils.java new file mode 100644 index 0000000..cf33f0f --- /dev/null +++ b/src/main/java/dev/isxander/yacl3/api/utils/OptionUtils.java @@ -0,0 +1,39 @@ +package dev.isxander.yacl3.api.utils; + +import dev.isxander.yacl3.api.*; + +import java.util.function.Consumer; +import java.util.function.Function; + +public class OptionUtils { + /** + * Consumes all options, ignoring groups and categories. + * When consumer returns true, this function stops iterating. + */ + public static void consumeOptions(YetAnotherConfigLib yacl, Function, Boolean> consumer) { + for (ConfigCategory category : yacl.categories()) { + for (OptionGroup group : category.groups()) { + if (group instanceof ListOption list) { + if (consumer.apply(list)) return; + } else { + for (Option option : group.options()) { + if (consumer.apply(option)) return; + } + } + + } + } + } + + /** + * Consumes all options, ignoring groups and categories. + * + * @see OptionUtils#consumeOptions(YetAnotherConfigLib, Function) + */ + public static void forEachOptions(YetAnotherConfigLib yacl, Consumer> consumer) { + consumeOptions(yacl, (opt) -> { + consumer.accept(opt); + return false; + }); + } +} -- cgit