Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
plugins {
id 'fabric-loom' version '1.6-SNAPSHOT'
id 'fabric-loom' version '1.10-SNAPSHOT'
id 'maven-publish'
}

sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21

archivesBaseName = project.archives_base_name
version = project.mod_version
group = project.maven_group
Expand Down Expand Up @@ -37,15 +34,17 @@ processResources {
}

tasks.withType(JavaCompile).configureEach {
// Minecraft 1.18 (1.18-pre2) upwards uses Java 17.
it.options.release = 17
it.options.encoding = "UTF-8"
it.options.release = 21
}

java {
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
// if it is present.
// If you remove this line, sources will not be generated.
withSourcesJar()
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}

jar {
Expand Down
10 changes: 5 additions & 5 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
org.gradle.jvmargs=-Xmx1G

minecraft_version=1.21
yarn_mappings=1.21+build.9
loader_version=0.16.10
minecraft_version=1.21.8
yarn_mappings=1.21.8+build.1
loader_version=0.16.14

mod_version = 0.3+1.21
mod_version = 0.3+1.21.8
maven_group = io.github.foundationgames
archives_base_name = jsonem

fabric_version=0.102.0+1.21
fabric_version=0.131.0+1.21.8
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
8 changes: 4 additions & 4 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#Mon Apr 03 00:00:04 CDT 2023
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
HOME
zipStorePath=wrapper/dists
Empty file modified gradlew
100644 → 100755
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package io.github.foundationgames.jsonem.mixin;

import com.google.common.collect.ImmutableMap;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import io.github.foundationgames.jsonem.util.JsonEntityModelUtil;
import net.minecraft.client.render.entity.model.LoadedEntityModels;
import net.minecraft.client.render.model.BakedModelManager;
import net.minecraft.resource.ResourceManager;
import net.minecraft.resource.ResourceReloader;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

import java.util.HashMap;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.function.Supplier;

@Mixin(BakedModelManager.class)
public class BakedModelManagerMixin {
@SuppressWarnings("unchecked")
@WrapOperation(method = "reload", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;supplyAsync(Ljava/util/function/Supplier;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;", ordinal = 0))
private <U> CompletableFuture<U> jsonem$loadJsonEntityModels(Supplier<U> supplier, Executor executor, Operation<CompletableFuture<U>> original, ResourceReloader.Synchronizer synchronizer, ResourceManager resourceManager) {
Supplier<U> wrappedSupplier = () -> {
U obj = supplier.get();

if (obj instanceof LoadedEntityModels entityModels) {
var modelParts = new HashMap<>(((LoadedEntityModelsAccess) entityModels).jsonem$getModelParts());
JsonEntityModelUtil.loadModels(resourceManager, modelParts);
return (U) new LoadedEntityModels(ImmutableMap.copyOf(modelParts));
} else {
return obj;
}
};

return original.call(wrappedSupplier, executor);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package io.github.foundationgames.jsonem.mixin;

import com.google.common.collect.ImmutableMap;
import io.github.foundationgames.jsonem.JsonEM;
import io.github.foundationgames.jsonem.util.JsonEntityModelUtil;
import net.minecraft.client.model.TexturedModelData;
Expand All @@ -10,17 +9,16 @@
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;

import java.io.IOException;
import java.util.Map;

@Mixin(EntityModels.class)
public class EntityModelsMixin {
@Inject(method = "getModels", at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;filter(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;"), locals = LocalCapture.CAPTURE_FAILSOFT)
private static void jsonem$dumpModels(CallbackInfoReturnable<Map<EntityModelLayer, TexturedModelData>> cir, ImmutableMap.Builder<EntityModelLayer, TexturedModelData> layers) {
@Inject(method = "getModels", at = @At("RETURN"))
private static void jsonem$dumpModels(CallbackInfoReturnable<Map<EntityModelLayer, TexturedModelData>> cir) {
if ("true".equals(JsonEM.CONFIG.values.getProperty("dump_models"))) {
layers.build().forEach((layer, data) -> {
cir.getReturnValue().forEach((layer, data) -> {
try {
JsonEntityModelUtil.dump(layer, data);
} catch (IOException e) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package io.github.foundationgames.jsonem.mixin;

import net.minecraft.client.model.TexturedModelData;
import net.minecraft.client.render.entity.model.EntityModelLayer;
import net.minecraft.client.render.entity.model.LoadedEntityModels;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

import java.util.Map;

@Mixin(LoadedEntityModels.class)
public interface LoadedEntityModelsAccess {
@Accessor("modelParts")
Map<EntityModelLayer, TexturedModelData> jsonem$getModelParts();
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ public class JsonEMCodecs {

public static final Codec<ModelTransform> MODEL_TRANSFORM = RecordCodecBuilder.create((instance) ->
instance.group(
Codecs.VECTOR_3F.optionalFieldOf("origin", new Vector3f(0)).forGetter(obj -> new Vector3f(obj.pivotX, obj.pivotY, obj.pivotZ)),
Codecs.VECTOR_3F.optionalFieldOf("rotation", new Vector3f(0)).forGetter(obj -> new Vector3f(obj.pitch, obj.yaw, obj.roll))
Codecs.VECTOR_3F.optionalFieldOf("origin", new Vector3f(0)).forGetter(obj -> new Vector3f(obj.x(), obj.y(), obj.z())),
Codecs.VECTOR_3F.optionalFieldOf("rotation", new Vector3f(0)).forGetter(obj -> new Vector3f(obj.pitch(), obj.yaw(), obj.roll()))
).apply(instance, (origin, rot) -> ModelTransform.of(origin.x(), origin.y(), origin.z(), rot.x(), rot.y(), rot.z()))
);

Expand Down Expand Up @@ -94,21 +94,16 @@ private static Optional<List<Direction>> optionalFaceList(Set<Direction> faces)
).apply(instance, JsonEMCodecs::createCuboidData)
);

private static Codec<ModelPartData> createPartDataCodec() {
return RecordCodecBuilder.create((instance) ->
instance.group(
MODEL_TRANSFORM.optionalFieldOf("transform", ModelTransform.NONE).forGetter(obj -> ((ModelPartDataAccess) obj).jsonem$transform()),
Codec.list(MODEL_CUBOID_DATA).fieldOf("cuboids").forGetter(obj -> ((ModelPartDataAccess) obj).jsonem$cuboids()),
LazyTypeUnboundedMapCodec.of(Codec.STRING, JsonEMCodecs::createPartDataCodec).optionalFieldOf("children", new HashMap<>()).forGetter(obj -> ((ModelPartDataAccess) obj).jsonem$children())
).apply(instance, (transform, cuboids, children) -> {
var data = ModelPartDataAccess.create(cuboids, transform);
((ModelPartDataAccess) data).jsonem$children().putAll(children);
return data;
})
);
}

public static final Codec<ModelPartData> MODEL_PART_DATA = createPartDataCodec();
public static final Codec<ModelPartData> MODEL_PART_DATA = Codec.recursive("JsonEM Model Part Data", self ->
RecordCodecBuilder.create(i -> i.group(
MODEL_TRANSFORM.optionalFieldOf("transform", ModelTransform.NONE).forGetter(obj -> ((ModelPartDataAccess) obj).jsonem$transform()),
Codec.list(MODEL_CUBOID_DATA).fieldOf("cuboids").forGetter(obj -> ((ModelPartDataAccess) obj).jsonem$cuboids()),
Codec.unboundedMap(Codec.STRING, self).optionalFieldOf("children", new HashMap<>()).forGetter(obj -> ((ModelPartDataAccess) obj).jsonem$children())
).apply(i, (transform, cuboids, children) -> {
var data = ModelPartDataAccess.create(cuboids, transform);
((ModelPartDataAccess) data).jsonem$children().putAll(children);
return data;
})));

public static final Codec<TexturedModelData> TEXTURED_MODEL_DATA = RecordCodecBuilder.create((instance) ->
instance.group(
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ public static void dump(EntityModelLayer layer, TexturedModelData data) throws I
}

var modelResult = JsonEMCodecs.TEXTURED_MODEL_DATA.encode(data, JsonOps.INSTANCE, new JsonObject());
var modelFolder = DUMP_DIR.resolve("assets").resolve(layer.getId().getNamespace()).resolve("models").resolve("entity").resolve(layer.getId().getPath());
var modelFile = modelFolder.resolve(layer.getName()+".json");
var modelFolder = DUMP_DIR.resolve("assets").resolve(layer.id().getNamespace()).resolve("models").resolve("entity").resolve(layer.id().getPath());
var modelFile = modelFolder.resolve(layer.name()+".json");

if (!Files.exists(modelFolder)) {
Files.createDirectories(modelFolder);
Expand Down
3 changes: 2 additions & 1 deletion src/main/resources/jsonem.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@
"package": "io.github.foundationgames.jsonem.mixin",
"compatibilityLevel": "JAVA_17",
"client": [
"BakedModelManagerMixin",
"DilationAccess",
"EntityModelLoaderMixin",
"EntityModelsMixin",
"LoadedEntityModelsAccess",
"ModelCuboidDataAccess",
"ModelPartDataAccess",
"TextureDimensionsAccess",
Expand Down
Loading