minecraft-src/net/minecraft/client/renderer/block/model/SimpleUnbakedGeometry.java
2025-07-04 03:45:38 +03:00

50 lines
2.2 KiB
Java

package net.minecraft.client.renderer.block.model;
import java.util.List;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.model.ModelBaker;
import net.minecraft.client.resources.model.ModelDebugName;
import net.minecraft.client.resources.model.ModelState;
import net.minecraft.client.resources.model.QuadCollection;
import net.minecraft.client.resources.model.SpriteGetter;
import net.minecraft.client.resources.model.UnbakedGeometry;
import net.minecraft.core.Direction;
@Environment(EnvType.CLIENT)
public record SimpleUnbakedGeometry(List<BlockElement> elements) implements UnbakedGeometry {
@Override
public QuadCollection bake(TextureSlots textureSlots, ModelBaker modelBaker, ModelState modelState, ModelDebugName modelDebugName) {
return bake(this.elements, textureSlots, modelBaker.sprites(), modelState, modelDebugName);
}
public static QuadCollection bake(
List<BlockElement> elements, TextureSlots textureSlots, SpriteGetter sprites, ModelState modelState, ModelDebugName debugName
) {
QuadCollection.Builder builder = new QuadCollection.Builder();
for (BlockElement blockElement : elements) {
blockElement.faces()
.forEach(
(direction, blockElementFace) -> {
TextureAtlasSprite textureAtlasSprite = sprites.resolveSlot(textureSlots, blockElementFace.texture(), debugName);
if (blockElementFace.cullForDirection() == null) {
builder.addUnculledFace(bakeFace(blockElement, blockElementFace, textureAtlasSprite, direction, modelState));
} else {
builder.addCulledFace(
Direction.rotate(modelState.transformation().getMatrix(), blockElementFace.cullForDirection()),
bakeFace(blockElement, blockElementFace, textureAtlasSprite, direction, modelState)
);
}
}
);
}
return builder.build();
}
private static BakedQuad bakeFace(BlockElement element, BlockElementFace face, TextureAtlasSprite sprite, Direction direction, ModelState modelState) {
return FaceBakery.bakeQuad(element.from(), element.to(), face, sprite, direction, modelState, element.rotation(), element.shade(), element.lightEmission());
}
}