Skip to content

Commit d4f3879

Browse files
committed
feat: simple datagen for machines
texture providers are no longer dynamic multiple models and blockstate variants should be used instead
1 parent d873880 commit d4f3879

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+792
-535
lines changed

.github/workflows/codeql.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ on:
88

99
jobs:
1010
codeql:
11-
runs-on: ubuntu-22.04
11+
runs-on: ubuntu-24.04
1212
if: ${{ github.event.workflow_run.conclusion == 'success' }}
1313
steps:
1414
- name: Checkout repository

.github/workflows/commit.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66

77
jobs:
88
build:
9-
runs-on: ubuntu-22.04
9+
runs-on: ubuntu-24.04
1010
steps:
1111
- name: Checkout repository
1212
uses: actions/checkout@v4

.github/workflows/pr_check.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ on:
77

88
jobs:
99
build:
10-
runs-on: ubuntu-22.04
10+
runs-on: ubuntu-24.04
1111
steps:
1212
- name: Checkout repository
1313
uses: actions/checkout@v4
@@ -28,9 +28,9 @@ jobs:
2828
~/.gradle/caches
2929
~/.gradle/wrapper
3030
.gradle
31-
key: ${{ runner.os }}-gradle-PR${{github.event.number}}-${{ hashFiles('gradle/gradle-wrapper.properties', 'settings.gradle.kts', '**/build.gradle.kts', '**/gradle.properties') }}
31+
key: ${{ runner.os }}-gradle-PR${{github.event.number}}-${{ hashFiles('gradle/gradle-wrapper.properties', 'settings.gradle.kts', 'build.gradle.kts', 'gradle.properties') }}
3232
restore-keys: |
33-
${{ runner.os }}-gradle-${{ hashFiles('gradle/gradle-wrapper.properties', 'settings.gradle.kts', '**/build.gradle.kts', '**/gradle.properties') }}
33+
${{ runner.os }}-gradle-${{ hashFiles('gradle/gradle-wrapper.properties', 'settings.gradle.kts', 'build.gradle.kts', 'gradle.properties') }}
3434
${{ runner.os }}-gradle-PR${{github.event.number}}-
3535
${{ runner.os }}-gradle-
3636

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -235,3 +235,5 @@ gradle-app.setting
235235
# FabricMC
236236
run/
237237
remappedSrc/
238+
239+
src/testmod/generated/.cache

build.gradle.kts

+14-2
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ val wthit = project.property("wthit.version").toString()
4444
plugins {
4545
java
4646
`maven-publish`
47-
id("fabric-loom") version("1.8-SNAPSHOT")
47+
id("fabric-loom") version("1.9-SNAPSHOT")
4848
id("org.cadixdev.licenser") version("0.6.1")
4949
id("org.ajoberstar.grgit") version("5.2.2")
50-
id("dev.galacticraft.mojarn") version("0.5.1+14")
50+
id("dev.galacticraft.mojarn") version("0.5.2+15")
5151
}
5252

5353
group = "dev.galacticraft"
@@ -86,6 +86,8 @@ java {
8686

8787
sourceSets {
8888
register("testmod") {
89+
resources.srcDir("src/testmod/generated")
90+
8991
runtimeClasspath += sourceSets.main.get().runtimeClasspath
9092
compileClasspath += sourceSets.main.get().compileClasspath
9193
}
@@ -126,6 +128,16 @@ loom {
126128
property("fabric-api.gametest")
127129
property("fabric-api.gametest.report-file", "${project.layout.buildDirectory.get()}/junit.xml")
128130
}
131+
register("data") {
132+
name("Data Generation")
133+
client()
134+
source(testmod)
135+
runDir("build/datagen")
136+
property("fabric-api.datagen")
137+
property("fabric-api.datagen.modid", "machinelib_testmod")
138+
property("fabric-api.datagen.output-dir", project.file("src/testmod/generated").toString())
139+
property("fabric-api.datagen.strict-validation", "false")
140+
}
129141
}
130142
}
131143

gradle.properties

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ mod.version=0.7.0
77

88
# Minecraft and Fabric Loader
99
minecraft.version=1.21.1
10-
loader.version=0.16.7
10+
loader.version=0.16.9
1111
yarn.build=3
1212

1313
# Mod Dependencies
1414
badpackets.version=0.8.1
1515
energy.version=4.1.0
16-
fabric.version=0.107.0+1.21.1
16+
fabric.version=0.110.0+1.21.1
1717

1818
# Optional Mod Dependencies
1919
cloth.config.version=15.0.140

gradle/wrapper/gradle-wrapper.properties

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionSha256Sum=31c55713e40233a8303827ceb42ca48a47267a0ad4bab9177123121e71524c26
4-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
3+
distributionSha256Sum=f397b287023acdba1e9f6fc5ea72d22dd63669d59ed4a289a29b1a76eee151c6
4+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
55
networkTimeout=10000
66
validateDistributionUrl=true
77
zipStoreBase=GRADLE_USER_HOME
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/*
2+
* Copyright (c) 2021-2024 Team Galacticraft
3+
*
4+
* Permission is hereby granted, free of charge, to any person obtaining a copy
5+
* of this software and associated documentation files (the "Software"), to deal
6+
* in the Software without restriction, including without limitation the rights
7+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8+
* copies of the Software, and to permit persons to whom the Software is
9+
* furnished to do so, subject to the following conditions:
10+
*
11+
* The above copyright notice and this permission notice shall be included in all
12+
* copies or substantial portions of the Software.
13+
*
14+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20+
* SOFTWARE.
21+
*/
22+
23+
package dev.galacticraft.machinelib.api.data.model;
24+
25+
import dev.galacticraft.machinelib.client.api.model.MachineTextureBase;
26+
import dev.galacticraft.machinelib.client.api.model.TextureProvider;
27+
import dev.galacticraft.machinelib.client.impl.data.model.MachineModelData;
28+
import dev.galacticraft.machinelib.client.impl.data.model.MachineTextureBaseData;
29+
import dev.galacticraft.machinelib.client.impl.model.MachineModelLoadingPlugin;
30+
import net.minecraft.core.registries.BuiltInRegistries;
31+
import net.minecraft.data.models.BlockModelGenerators;
32+
import net.minecraft.data.models.blockstates.MultiVariantGenerator;
33+
import net.minecraft.data.models.blockstates.Variant;
34+
import net.minecraft.data.models.blockstates.VariantProperties;
35+
import net.minecraft.resources.ResourceLocation;
36+
import net.minecraft.world.level.block.Block;
37+
import org.jetbrains.annotations.Nullable;
38+
39+
public class MachineModelGenerator {
40+
public static ResourceLocation getMachineModelLocation(Block block) {
41+
ResourceLocation resourceLocation = BuiltInRegistries.BLOCK.getKey(block);
42+
return resourceLocation.withPrefix("machine/");
43+
}
44+
45+
public static ResourceLocation getMachineModelLocation(Block block, String suffix) {
46+
return getMachineModelLocation(block).withSuffix(suffix);
47+
}
48+
49+
public static void setupMachineBaseTextures(BlockModelGenerators gen, String namespace, MachineTextureBase base) {
50+
setupMachineBaseTextures(gen, ResourceLocation.fromNamespaceAndPath(namespace, MachineModelLoadingPlugin.DEFAULT_MACHINE_BASE), base);
51+
}
52+
53+
public static void setupMachineBaseTextures(BlockModelGenerators gen, ResourceLocation id, MachineTextureBase base) {
54+
gen.modelOutput.accept(id, new MachineTextureBaseData(base));
55+
}
56+
57+
public static ResourceLocation generateMachineModel(BlockModelGenerators gen, Block block, TextureProvider textureProvider) {
58+
return generateMachineModel(gen, block, null, textureProvider);
59+
}
60+
61+
public static ResourceLocation generateMachineModel(BlockModelGenerators gen, Block block, @Nullable ResourceLocation base, TextureProvider textureProvider) {
62+
return generateMachineModel(gen, getMachineModelLocation(block), base, textureProvider);
63+
}
64+
65+
public static ResourceLocation generateMachineModel(BlockModelGenerators gen, ResourceLocation id, TextureProvider textureProvider) {
66+
return generateMachineModel(gen, id, null, textureProvider);
67+
}
68+
69+
public static ResourceLocation generateMachineModel(BlockModelGenerators gen, ResourceLocation id, @Nullable ResourceLocation base, TextureProvider textureProvider) {
70+
gen.modelOutput.accept(id, new MachineModelData(base, textureProvider));
71+
return id;
72+
}
73+
74+
public static void createTrivialMachine(BlockModelGenerators gen, Block block, TextureProvider textureProvider) {
75+
createTrivialMachine(gen, block, null, textureProvider);
76+
}
77+
78+
public static void createTrivialMachine(BlockModelGenerators gen, Block block, @Nullable ResourceLocation base, TextureProvider textureProvider) {
79+
gen.blockStateOutput.accept(MultiVariantGenerator.multiVariant(block, Variant.variant().with(VariantProperties.MODEL, generateMachineModel(gen, block, base, textureProvider))));
80+
gen.skipAutoItemBlock(block);
81+
}
82+
}

src/main/java/dev/galacticraft/machinelib/client/api/model/MachineModelRegistry.java

-72
This file was deleted.

src/main/java/dev/galacticraft/machinelib/client/api/model/sprite/MachineTextureBase.java src/main/java/dev/galacticraft/machinelib/client/api/model/MachineTextureBase.java

+9-4
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
* SOFTWARE.
2121
*/
2222

23-
package dev.galacticraft.machinelib.client.api.model.sprite;
23+
package dev.galacticraft.machinelib.client.api.model;
2424

2525
import com.mojang.serialization.Codec;
2626
import com.mojang.serialization.codecs.RecordCodecBuilder;
@@ -34,20 +34,23 @@
3434
import java.util.Collections;
3535
import java.util.function.Function;
3636

37-
public record MachineTextureBase(Material machineEnergyIn, Material machineEnergyOut, Material machineEnergyBoth,
37+
public record MachineTextureBase(Material base,
38+
Material machineEnergyIn, Material machineEnergyOut, Material machineEnergyBoth,
3839
Material machineItemIn, Material machineItemOut, Material machineItemBoth,
3940
Material machineFluidIn, Material machineFluidOut, Material machineFluidBoth,
4041
Material machineAnyIn, Material machineAnyOut, Material machineAnyBoth
4142
) implements UnbakedModel {
4243
public static final Codec<MachineTextureBase> CODEC = RecordCodecBuilder.create(instance -> instance.group(
44+
TextureProvider.MATERIAL_CODEC.fieldOf("base").forGetter(MachineTextureBase::base),
4345
TypedResourceSprites.CODEC.fieldOf("energy").forGetter(b -> new TypedResourceSprites(b.machineEnergyIn, b.machineEnergyOut, b.machineEnergyBoth)),
4446
TypedResourceSprites.CODEC.fieldOf("item").forGetter(b -> new TypedResourceSprites(b.machineItemIn, b.machineItemOut, b.machineItemBoth)),
4547
TypedResourceSprites.CODEC.fieldOf("fluid").forGetter(b -> new TypedResourceSprites(b.machineFluidIn, b.machineFluidOut, b.machineFluidBoth)),
4648
TypedResourceSprites.CODEC.fieldOf("any").forGetter(b -> new TypedResourceSprites(b.machineAnyIn, b.machineAnyOut, b.machineAnyBoth))
47-
).apply(instance, (e, i, f ,a) -> new MachineTextureBase(e.input, e.output, e.both, i.input, i.output, i.both, f.input, f.output, f.both, a.input, a.output, a.both)));
49+
).apply(instance, (b, e, i, f ,a) -> new MachineTextureBase(b, e.input, e.output, e.both, i.input, i.output, i.both, f.input, f.output, f.both, a.input, a.output, a.both)));
4850

4951
public static MachineTextureBase prefixed(String id, String prefix) {
5052
return new MachineTextureBase(
53+
mat(id, prefix),
5154
mat(id, prefix + "_energy_input"), mat(id, prefix + "_energy_output"), mat(id, prefix + "_energy_both"),
5255
mat(id, prefix + "_item_input"), mat(id, prefix + "_item_output"), mat(id, prefix + "_item_both"),
5356
mat(id, prefix + "_fluid_input"), mat(id, prefix + "_fluid_output"), mat(id, prefix + "_fluid_both"),
@@ -57,6 +60,7 @@ public static MachineTextureBase prefixed(String id, String prefix) {
5760

5861
public Bound bind(Function<Material, TextureAtlasSprite> atlas) {
5962
return new Bound(
63+
atlas.apply(this.base),
6064
atlas.apply(this.machineEnergyIn), atlas.apply(this.machineEnergyOut), atlas.apply(this.machineEnergyBoth),
6165
atlas.apply(this.machineItemIn), atlas.apply(this.machineItemOut), atlas.apply(this.machineItemBoth),
6266
atlas.apply(this.machineFluidIn), atlas.apply(this.machineFluidOut), atlas.apply(this.machineFluidBoth),
@@ -78,7 +82,8 @@ public void resolveParents(Function<ResourceLocation, UnbakedModel> modelLoader)
7882
return null;
7983
}
8084

81-
public record Bound(TextureAtlasSprite machineEnergyIn, TextureAtlasSprite machineEnergyOut, TextureAtlasSprite machineEnergyBoth,
85+
public record Bound(TextureAtlasSprite base,
86+
TextureAtlasSprite machineEnergyIn, TextureAtlasSprite machineEnergyOut, TextureAtlasSprite machineEnergyBoth,
8287
TextureAtlasSprite machineItemIn, TextureAtlasSprite machineItemOut, TextureAtlasSprite machineItemBoth,
8388
TextureAtlasSprite machineFluidIn, TextureAtlasSprite machineFluidOut, TextureAtlasSprite machineFluidBoth,
8489
TextureAtlasSprite machineAnyIn, TextureAtlasSprite machineAnyOut, TextureAtlasSprite machineAnyBoth) {

0 commit comments

Comments
 (0)