[coat-bridge] Implement first version of Tweed Coat bridge
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
package de.siphalor.tweed5.coat.bridge.testmod;
|
||||
|
||||
import de.siphalor.amecs.api.PriorityKeyBinding;
|
||||
import de.siphalor.coat.screen.ConfigScreen;
|
||||
import de.siphalor.tweed5.coat.bridge.api.ConfigScreenCreateParams;
|
||||
import de.siphalor.tweed5.coat.bridge.api.TweedCoatBridgeExtension;
|
||||
import de.siphalor.tweed5.coat.bridge.api.TweedCoatMappers;
|
||||
import de.siphalor.tweed5.core.api.container.ConfigContainer;
|
||||
import de.siphalor.tweed5.data.hjson.HjsonSerde;
|
||||
import de.siphalor.tweed5.data.hjson.HjsonWriter;
|
||||
import de.siphalor.tweed5.fabric.helper.api.FabricConfigContainerHelper;
|
||||
import de.siphalor.tweed5.weaver.pojo.impl.weaving.TweedPojoWeaverBootstrapper;
|
||||
import lombok.extern.apachecommons.CommonsLog;
|
||||
import net.fabricmc.api.ClientModInitializer;
|
||||
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
|
||||
import net.minecraft.client.KeyMapping;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.screens.TitleScreen;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@CommonsLog
|
||||
public class TweedCoatBridgeTestMod implements ClientModInitializer {
|
||||
public static final String MOD_ID = "tweed5_coat_bridge_testmod";
|
||||
|
||||
private static final TweedCoatBridgeTestModConfig DEFAULT_CONFIG_VALUE = new TweedCoatBridgeTestModConfig();
|
||||
|
||||
private ConfigContainer<TweedCoatBridgeTestModConfig> configContainer;
|
||||
private TweedCoatBridgeExtension configCoatBridgeExtension;
|
||||
private FabricConfigContainerHelper<TweedCoatBridgeTestModConfig> configContainerHelper;
|
||||
private TweedCoatBridgeTestModConfig config;
|
||||
|
||||
@Override
|
||||
public void onInitializeClient() {
|
||||
configContainer = TweedPojoWeaverBootstrapper.create(TweedCoatBridgeTestModConfig.class).weave();
|
||||
configCoatBridgeExtension = configContainer.extension(TweedCoatBridgeExtension.class)
|
||||
.orElseThrow(() -> new IllegalStateException("TweedCoatBridgeExtension not found"));
|
||||
Arrays.asList(
|
||||
TweedCoatMappers.compoundCategoryMapper(),
|
||||
TweedCoatMappers.stringTextMapper(),
|
||||
TweedCoatMappers.integerTextMapper()
|
||||
).forEach(configCoatBridgeExtension::addMapper);
|
||||
|
||||
configContainer.initialize();
|
||||
|
||||
configContainerHelper = FabricConfigContainerHelper.create(
|
||||
configContainer,
|
||||
new HjsonSerde(new HjsonWriter.Options()),
|
||||
MOD_ID
|
||||
);
|
||||
|
||||
config = configContainerHelper.loadAndUpdateInConfigDirectory(() -> DEFAULT_CONFIG_VALUE);
|
||||
|
||||
KeyBindingHelper.registerKeyBinding(new ScreenKeyBinding(MOD_ID + ".config", 84, KeyMapping.Category.MISC));
|
||||
|
||||
log.info("current config");
|
||||
}
|
||||
|
||||
private class ScreenKeyBinding extends KeyMapping implements PriorityKeyBinding {
|
||||
public ScreenKeyBinding(String name, int key, Category category) {
|
||||
super(name, key, category);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPressedPriority() {
|
||||
if (!(Minecraft.getInstance().screen instanceof TitleScreen)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ConfigScreen configScreen = configCoatBridgeExtension.createConfigScreen(
|
||||
ConfigScreenCreateParams.<TweedCoatBridgeTestModConfig>builder()
|
||||
.translationKeyPrefix(MOD_ID + ".config")
|
||||
.title(Component.translatable(MOD_ID + ".title"))
|
||||
.rootEntry(configContainer.rootEntry())
|
||||
.currentValue(config)
|
||||
.defaultValue(DEFAULT_CONFIG_VALUE)
|
||||
.saveHandler(value -> {
|
||||
config = value;
|
||||
log.info("Updated config: " + config);
|
||||
configContainerHelper.writeConfigInConfigDirectory(config);
|
||||
})
|
||||
.build()
|
||||
);
|
||||
Minecraft.getInstance().setScreen(configScreen);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package de.siphalor.tweed5.coat.bridge.testmod;
|
||||
|
||||
import de.siphalor.tweed5.attributesextension.api.AttributesExtension;
|
||||
import de.siphalor.tweed5.coat.bridge.api.TweedCoatAttributes;
|
||||
import de.siphalor.tweed5.coat.bridge.api.TweedCoatBridgeExtension;
|
||||
import de.siphalor.tweed5.data.extension.api.ReadWriteExtension;
|
||||
import de.siphalor.tweed5.defaultextensions.validation.api.ValidationExtension;
|
||||
import de.siphalor.tweed5.weaver.pojo.api.annotation.CompoundWeaving;
|
||||
import de.siphalor.tweed5.weaver.pojo.api.annotation.DefaultWeavingExtensions;
|
||||
import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeaving;
|
||||
import de.siphalor.tweed5.weaver.pojo.api.annotation.PojoWeavingExtension;
|
||||
import de.siphalor.tweed5.weaver.pojoext.attributes.api.Attribute;
|
||||
import de.siphalor.tweed5.weaver.pojoext.attributes.api.AttributesPojoWeavingProcessor;
|
||||
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.Validator;
|
||||
import de.siphalor.tweed5.weaver.pojoext.validation.api.ValidatorsPojoWeavingProcessor;
|
||||
import de.siphalor.tweed5.weaver.pojoext.validation.api.validators.WeavableNumberRangeValidator;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@PojoWeaving(extensions = {
|
||||
ReadWriteExtension.class,
|
||||
TweedCoatBridgeExtension.class,
|
||||
ValidationExtension.class,
|
||||
AttributesExtension.class,
|
||||
})
|
||||
@PojoWeavingExtension(AutoReadWritePojoWeavingProcessor.class)
|
||||
@PojoWeavingExtension(ValidatorsPojoWeavingProcessor.class)
|
||||
@PojoWeavingExtension(AttributesPojoWeavingProcessor.class)
|
||||
@DefaultWeavingExtensions
|
||||
@DefaultReadWriteMappings
|
||||
@CompoundWeaving(namingFormat = "kebab_case")
|
||||
@Data
|
||||
public class TweedCoatBridgeTestModConfig {
|
||||
private String test = "hello world";
|
||||
private int someInteger = 123;
|
||||
@Validator(value = WeavableNumberRangeValidator.class, config = "-10=..=10")
|
||||
private int integerInRange = -5;
|
||||
|
||||
@Attribute(key = TweedCoatAttributes.BACKGROUND_TEXTURE, values = "textures/block/green_terracotta.png")
|
||||
private Greeting serverGreeting = new Greeting("Hello server!", "Server");
|
||||
@Attribute(key = TweedCoatAttributes.BACKGROUND_TEXTURE, values = "textures/block/red_terracotta.png")
|
||||
private Greeting clientGreeting = new Greeting("Hello client!", "Client");
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@CompoundWeaving
|
||||
public static class Greeting {
|
||||
public String greeting;
|
||||
public String greeter;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"tweed5_coat_bridge_testmod.title": "Test Mod",
|
||||
"tweed5_coat_bridge_testmod.config": "Test Mod config",
|
||||
"tweed5_coat_bridge_testmod.config.test": "Test entry",
|
||||
"tweed5_coat_bridge_testmod.config.test.description": "Just a simple string entry",
|
||||
"tweed5_coat_bridge_testmod.config.some-integer": "Some integer",
|
||||
"tweed5_coat_bridge_testmod.config.integer-in-range": "Integer in range"
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"id": "tweed5_coat_bridge_testmod",
|
||||
"version": "0.1.0",
|
||||
"entrypoints": {
|
||||
"client": [
|
||||
"de.siphalor.tweed5.coat.bridge.testmod.TweedCoatBridgeTestMod"
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user