feat(weaver-pojo-presets-ext): Implement POJO weaving for presets

This commit is contained in:
2025-11-02 19:46:58 +01:00
parent 2b0fac4127
commit 36dff476ea
13 changed files with 283 additions and 6 deletions

View File

@@ -19,6 +19,7 @@ dependencies {
implementation("de.siphalor.tweed5:tweed5-serde-extension")
implementation("de.siphalor.tweed5:tweed5-weaver-pojo")
implementation("de.siphalor.tweed5:tweed5-weaver-pojo-attributes-extension")
implementation("de.siphalor.tweed5:tweed5-weaver-pojo-presets-extension")
implementation("de.siphalor.tweed5:tweed5-weaver-pojo-serde-extension")
implementation("de.siphalor.tweed5:tweed5-weaver-pojo-validation-extension")
}

View File

@@ -9,6 +9,8 @@ import de.siphalor.tweed5.defaultextensions.validation.api.ValidationExtension;
import de.siphalor.tweed5.defaultextensions.validationfallback.api.ValidationFallbackExtension;
import de.siphalor.tweed5.weaver.pojo.api.annotation.*;
import de.siphalor.tweed5.weaver.pojoext.attributes.api.AttributesPojoWeavingProcessor;
import de.siphalor.tweed5.weaver.pojoext.presets.api.DefaultPresetWeavingProcessor;
import de.siphalor.tweed5.weaver.pojoext.presets.api.PresetsWeavingProcessor;
import de.siphalor.tweed5.weaver.pojoext.serde.api.auto.AutoReadWritePojoWeavingProcessor;
import de.siphalor.tweed5.weaver.pojoext.serde.api.auto.DefaultReadWriteMappings;
import de.siphalor.tweed5.weaver.pojoext.validation.api.ValidatorsPojoWeavingProcessor;
@@ -26,7 +28,9 @@ import java.lang.annotation.Target;
DefaultReadWriteMappings.class,
CompoundWeaving.class
})
@PojoWeaving
@TweedExtension(ReadWriteExtension.class)
@TweedExtension(PresetsExtension.class)
@TweedExtension(ValidationExtension.class)
@TweedExtension(ValidationFallbackExtension.class)
@TweedExtension(AttributesExtension.class)
@@ -34,6 +38,8 @@ import java.lang.annotation.Target;
@PojoWeavingExtension(AutoReadWritePojoWeavingProcessor.class)
@PojoWeavingExtension(ValidatorsPojoWeavingProcessor.class)
@PojoWeavingExtension(AttributesPojoWeavingProcessor.class)
@PojoWeavingExtension(PresetsWeavingProcessor.class)
@PojoWeavingExtension(DefaultPresetWeavingProcessor.class)
@DefaultWeavingExtensions
@DefaultReadWriteMappings
@CompoundWeaving

View File

@@ -8,6 +8,7 @@ import de.siphalor.tweed5.dataapi.api.TweedDataWriter;
import de.siphalor.tweed5.dataapi.api.TweedSerde;
import de.siphalor.tweed5.defaultextensions.patch.api.PatchExtension;
import de.siphalor.tweed5.defaultextensions.patch.api.PatchInfo;
import de.siphalor.tweed5.defaultextensions.presets.api.PresetsExtension;
import de.siphalor.tweed5.patchwork.api.Patchwork;
import lombok.Getter;
import lombok.extern.apachecommons.CommonsLog;
@@ -29,6 +30,7 @@ public class FabricConfigContainerHelper<T extends @Nullable Object> {
private final ConfigContainer<T> configContainer;
private final ReadWriteExtension readWriteExtension;
private final @Nullable PatchExtension patchExtension;
private final @Nullable PresetsExtension presetsExtension;
private final TweedSerde serde;
@Getter
private final String modId;
@@ -54,10 +56,16 @@ public class FabricConfigContainerHelper<T extends @Nullable Object> {
this.readWriteExtension = configContainer.extension(ReadWriteExtension.class)
.orElseThrow(() -> new IllegalStateException("ReadWriteExtension not declared in config container"));
this.patchExtension = configContainer.extension(PatchExtension.class).orElse(null);
this.presetsExtension = configContainer.extension(PresetsExtension.class).orElse(null);
this.serde = serde;
this.modId = modId;
}
public T loadAndUpdateInConfigDirectory() {
T defaultPresetValue = getDefaultPresetValue();
return loadAndUpdateInConfigDirectory(() -> configContainer.rootEntry().deepCopy(defaultPresetValue));
}
public T loadAndUpdateInConfigDirectory(Supplier<T> defaultValueSupplier) {
T configValue = readConfigInConfigDirectory(defaultValueSupplier);
writeConfigInConfigDirectory(configValue);
@@ -89,6 +97,11 @@ public class FabricConfigContainerHelper<T extends @Nullable Object> {
}
}
public T readConfigInConfigDirectory() {
T defaultPresetValue = getDefaultPresetValue();
return readConfigInConfigDirectory(() -> configContainer.rootEntry().deepCopy(defaultPresetValue));
}
public T readConfigInConfigDirectory(Supplier<T> defaultValueSupplier) {
File configFile = getConfigFile();
if (!configFile.exists()) {
@@ -158,4 +171,13 @@ public class FabricConfigContainerHelper<T extends @Nullable Object> {
}
return tempConfigDirectory;
}
private T getDefaultPresetValue() {
if (presetsExtension == null) {
throw new IllegalStateException(
"No presets extension registered, either register such extension or provide a default value manually"
);
}
return presetsExtension.presetValue(configContainer.rootEntry(), PresetsExtension.DEFAULT_PRESET_NAME);
}
}