2025-11-24 22:52:51 +03:00

101 lines
3.8 KiB
Java

/*
* Decompiled with CFR 0.152.
*
* Could not load the following classes:
* com.google.gson.JsonArray
* com.google.gson.JsonDeserializationContext
* com.google.gson.JsonDeserializer
* com.google.gson.JsonElement
* com.google.gson.JsonObject
* com.google.gson.JsonParseException
* org.jspecify.annotations.Nullable
*/
package net.minecraft.client.renderer.block.model;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.mojang.math.Quadrant;
import java.lang.reflect.Type;
import net.minecraft.core.Direction;
import net.minecraft.util.GsonHelper;
import org.jspecify.annotations.Nullable;
public record BlockElementFace(@Nullable Direction cullForDirection, int tintIndex, String texture, @Nullable UVs uvs, Quadrant rotation) {
public static final int NO_TINT = -1;
public static float getU(UVs uvs, Quadrant rotation, int vertex) {
return uvs.getVertexU(rotation.rotateVertexIndex(vertex)) / 16.0f;
}
public static float getV(UVs uvs, Quadrant rotation, int index) {
return uvs.getVertexV(rotation.rotateVertexIndex(index)) / 16.0f;
}
public record UVs(float minU, float minV, float maxU, float maxV) {
public float getVertexU(int index) {
return index == 0 || index == 1 ? this.minU : this.maxU;
}
public float getVertexV(int index) {
return index == 0 || index == 3 ? this.minV : this.maxV;
}
}
protected static class Deserializer
implements JsonDeserializer<BlockElementFace> {
private static final int DEFAULT_TINT_INDEX = -1;
private static final int DEFAULT_ROTATION = 0;
protected Deserializer() {
}
public BlockElementFace deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject object = json.getAsJsonObject();
Direction cullDirection = Deserializer.getCullFacing(object);
int tintIndex = Deserializer.getTintIndex(object);
String texture = Deserializer.getTexture(object);
UVs uvs = Deserializer.getUVs(object);
Quadrant rotation = Deserializer.getRotation(object);
return new BlockElementFace(cullDirection, tintIndex, texture, uvs, rotation);
}
private static int getTintIndex(JsonObject object) {
return GsonHelper.getAsInt(object, "tintindex", -1);
}
private static String getTexture(JsonObject object) {
return GsonHelper.getAsString(object, "texture");
}
private static @Nullable Direction getCullFacing(JsonObject object) {
String cullFace = GsonHelper.getAsString(object, "cullface", "");
return Direction.byName(cullFace);
}
private static Quadrant getRotation(JsonObject object) {
int rotation = GsonHelper.getAsInt(object, "rotation", 0);
return Quadrant.parseJson(rotation);
}
private static @Nullable UVs getUVs(JsonObject object) {
if (!object.has("uv")) {
return null;
}
JsonArray uvArray = GsonHelper.getAsJsonArray(object, "uv");
if (uvArray.size() != 4) {
throw new JsonParseException("Expected 4 uv values, found: " + uvArray.size());
}
float minU = GsonHelper.convertToFloat(uvArray.get(0), "minU");
float minV = GsonHelper.convertToFloat(uvArray.get(1), "minV");
float maxU = GsonHelper.convertToFloat(uvArray.get(2), "maxU");
float maxV = GsonHelper.convertToFloat(uvArray.get(3), "maxV");
return new UVs(minU, minV, maxU, maxV);
}
}
}