Finish main content, add MidnightLib wiki

This commit is contained in:
Martin Prokoph
2024-02-08 12:01:49 +01:00
parent e4037faf4a
commit 23fd6e87f7
16 changed files with 170 additions and 106 deletions

View File

@@ -0,0 +1,116 @@
---
layout: ../../layouts/MarkdownLayout.astro
title: MidnightLib Wiki
---
import { Icon } from 'astro-icon/components'
import { Notification } from 'accessible-astro-components'
# MidnightLib Wiki
Welcome to the MidnightLib wiki. Thanks for showing interest in our library!
This documentation aims to show you how to use the config system and the other features the library provides.
Use the tabs on the right side to switch between the different pages.
To use the library in your mods, just edit `build.gradle` and `gradle.properties` as seen below:
### `build.gradle`
```java
repositories {
[... other repos ...]
maven {
url = "https://api.modrinth.com/maven"
}
}
dependencies {
[... other dependencies ...]
modImplementation include "maven.modrinth:midnightlib:${project.midnightlib_version}"
}
```
### `gradle.properties`
```js
midnightlib_version=1.5.3-fabric
```
<Notification type="info">
<Icon name="ion:information-circle-outline" />
<p>
<strong>Info:</strong> You should always pick the version that suits your modloader and Minecraft version best.
Find all available versions on [Modrinth](https://www.modrinth.com/mod/midnightlib/versions)
</p>
</Notification>
### `MidnightConfigExample.java`
To get started with implementing the config, you must create a public class that extends MidnightConfig.
In this class, your variables can be stored and accessed. Here you can see the contents of an example config class:
```java
package eu.midnightdust.core.config;
import com.google.common.collect.Lists;
import eu.midnightdust.lib.config.MidnightConfig;
import java.util.List;
/** Every option in a MidnightConfig class has to be public and static, so we can access it from other classes.
* The config class also has to extend MidnightConfig*/
public class MidnightConfigExample extends MidnightConfig {
@Comment(category = "text") public static Comment text1; // Comments are rendered like an option without a button and are excluded from the config file
@Comment(category = "text", centered = true) public static Comment text2; // Centered comments are the same as normal ones - just centered!
@Comment(category = "text") public static Comment spacer1; // Comments containing the word "spacer" will just appear as a blank line
@Entry(category = "text") public static boolean showInfo = true; // Example for a boolean option
@Entry(category = "text") public static String name = "Hello World!"; // Example for a string option, which is in a category!
@Entry(category = "text") public static TestEnum testEnum = TestEnum.FABRIC; // Example for an enum option
public enum TestEnum { // Enums allow the user to cycle through predefined options
QUILT, FABRIC, FORGE
}
@Entry(category = "numbers") public static int fabric = 16777215; // Example for an int option
@Entry(category = "numbers") public static double world = 1.4D; // Example for a double option
@Entry(category = "numbers", min=69,max=420) public static int hello = 420; // - The entered number has to be larger than 69 and smaller than 420
@Entry(category = "text", width = 7, min = 7, isColor = true, name = "I am a color!") public static String titleColor = "#ffffff"; // The isColor property adds a preview box for a hexadecimal color
@Entry(category = "text", name = "I am an array list!") public static List<String> arrayList = Lists.newArrayList("String1", "String2"); // Array String Lists are also supported
@Entry(category = "sliders", name = "I am an int slider.",isSlider = true, min = 0, max = 100) public static int intSlider = 35; // Int fields can also be displayed as a Slider
@Entry(category = "sliders", name = "I am a float slider!", isSlider = true, min = 0f, max = 1f, precision = 1000) public static float floatSlider = 0.24f; // And so can floats! Precision defines the amount of decimal places
// The name field can be used to specify a custom translation string or plain text
public static int imposter = 16777215; // - Entries without an @Entry or @Comment annotation are ignored
}
```
### `assets/modid/lang/`**`en_US.json`**
The .json language file for your config class could look similar to this:
```json
{
"modid.midnightconfig.title":"I am a title",
// "*.midnightconfig.title" defines the title of the screen
"modid.midnightconfig.text1":"I am a comment *u*",
// Translation for the comment "text1" defined in the example config
"modid.midnightconfig.text2":"I am a centered comment (╯°□°)╯︵ ┻━┻",
"modid.midnightconfig.name":"I am a string!",
// Translation for the field "name" defined in the example config
"modid.midnightconfig.name.tooltip":"I am a tooltip uwu \nI am a new line",
// When hovering over the option "showInfo",
// this text will appear as a tooltip.
// "\n" inserts a line break.
"modid.midnightconfig.fabric":"I am an int",
"modid.midnightconfig.world":"I am a double",
"modid.midnightconfig.showInfo":"I am a boolean",
"modid.midnightconfig.hello":"I am a limited int!",
"modid.midnightconfig.testEnum":"I am an enum!",
"modid.midnightconfig.enum.TestEnum.FORGE":"Slow",
"modid.midnightconfig.enum.TestEnum.FABRIC":"Fancy",
"modid.midnightconfig.enum.TestEnum.QUILT":"Fabulous",
"modid.midnightconfig.category.numbers": "Numbers",
"modid.midnightconfig.category.text": "Text",
"modid.midnightconfig.category.sliders": "Sliders"
}
```
To initialize the config you have to call `MidnightConfig.init("modid", MidnightConfigExample.class);` in your ModInitializer.
To get an instance of the config screen you have to call `MidnightConfig.getScreen(parent, "modid");`
If you don't use the whole library and therefore not the automatic ModMenu integration, the code in your ModMenu integration class would look something like this:
### `ModMenuInit.java`
```java
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return parent -> MidnightConfig.getScreen(parent, "modid");
}`
```