@@ -0,0 +1,98 @@
|
||||
# Static Content
|
||||
|
||||
*Static Content* is a wrapper for [*Static Data*](https://git.bigduckie.dev/big-duckie/static-data) that provides an
|
||||
easy method for registering similar content through your mod while also providing cross-mod compatibility & support.
|
||||
|
||||
### Use Cases
|
||||
|
||||
This library works best for mods that offer multiple pieces of similar content.
|
||||
An example would be a library that provides numerous Apple variants (Emerald, Diamond, Iron), because
|
||||
each Apple only has slight differences (while the core mechanics remain similar). The power of
|
||||
*Static Content* in this situation is:
|
||||
|
||||
- Allowing you to add Apples through JSON files
|
||||
- Allowing *other* developers to add optional Apples that will only be registered when your mod is present
|
||||
|
||||
### Installation
|
||||
|
||||
```groovy
|
||||
repositories {
|
||||
maven { url "https://maven.bigduckie.dev/releases" }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
modImplementation 'dev.bigduckie:static-content:${project.static_content_version}'
|
||||
include 'dev.bigduckie:static-content:${project.static_content_version}'
|
||||
}
|
||||
```
|
||||
|
||||
### Usage
|
||||
|
||||
There are 3 major things you will need to do to port your mod to Static Content:
|
||||
|
||||
- Create a class representation of your data
|
||||
- Populate JSON files with your mods' relevant data
|
||||
- Tell Static Content to load your files
|
||||
|
||||
To start, let us make a simple class for loading Apple types.
|
||||
Each Apple will have a name, and a hunger restoration value.
|
||||
|
||||
Our class will implement *ContentData*, which is provides a *register* method that is called once per file.
|
||||
What you do in this method is up to your implementation & use case.
|
||||
|
||||
```java
|
||||
public class AppleData implements ContentData {
|
||||
|
||||
private final String name;
|
||||
private final int hunger;
|
||||
|
||||
public AppleData(String name, int hunger) {
|
||||
this.name = name;
|
||||
this.hunger = hunger;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(Identifier fileID) {
|
||||
Registry.register(
|
||||
Registry.ITEM,
|
||||
new Identifier("applemod", name),
|
||||
new Item(new Item.Settings().food(
|
||||
new FoodComponent.Builder()
|
||||
.hunger(hunger)
|
||||
.build()))
|
||||
);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Your data classes' constructor will not be called, but it is still needed to prevent in-lining (which *will* happen
|
||||
without one).
|
||||
Remember to use your IDE to auto-generate the constructor after assembling your fields.
|
||||
|
||||
After creating our initial class, we can tell Static Content to deserialize data files under a certain directory to our
|
||||
class:
|
||||
|
||||
```java
|
||||
|
||||
@Override
|
||||
public void onInitialize() {
|
||||
StaticContent.load(new Identifier("applemod", "apples"), AppleData.class);
|
||||
}
|
||||
```
|
||||
|
||||
This will deserialize all JSON files under `resources/static_data/applemod/apples/`.
|
||||
Let us make one at `resources/static_data/applemod/apples/emerald_apple.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "emerald_apple",
|
||||
"hunger": 6
|
||||
}
|
||||
```
|
||||
|
||||
Start the game...
|
||||
|
||||
```
|
||||
[main/INFO] (Static Content) Loaded 1 Static Content file for applemod:apples
|
||||
[Worker-Main-12/WARN] (Minecraft) Unable to load model: 'applemod:emerald_apple#inventory' referenced from: applemod:emerald_apple#inventory: java.io.FileNotFoundException: applemod:models/item/emerald_apple.json
|
||||
```
|
||||
Reference in New Issue
Block a user