feat(weaver-pojo-presets-ext): Implement POJO weaving for presets
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user