Fix cell rendering (blessed Grondag for helping immensely)
|
@ -33,6 +33,7 @@ import net.minecraft.client.render.model.ModelLoader;
|
||||||
import net.minecraft.client.render.model.UnbakedModel;
|
import net.minecraft.client.render.model.UnbakedModel;
|
||||||
import net.minecraft.client.texture.Sprite;
|
import net.minecraft.client.texture.Sprite;
|
||||||
import net.minecraft.client.texture.SpriteAtlasTexture;
|
import net.minecraft.client.texture.SpriteAtlasTexture;
|
||||||
|
import net.minecraft.client.util.ModelIdentifier;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import techreborn.client.render.DynamicCellBakedModel;
|
import techreborn.client.render.DynamicCellBakedModel;
|
||||||
|
|
||||||
|
@ -49,6 +50,13 @@ public class TechRebornClient implements ClientModInitializer {
|
||||||
ClientSpriteRegistryCallback.event(SpriteAtlasTexture.BLOCK_ATLAS_TEX)
|
ClientSpriteRegistryCallback.event(SpriteAtlasTexture.BLOCK_ATLAS_TEX)
|
||||||
.register((spriteAtlasTexture, registry) -> registry.register(new Identifier("techreborn:item/cell_base")));
|
.register((spriteAtlasTexture, registry) -> registry.register(new Identifier("techreborn:item/cell_base")));
|
||||||
|
|
||||||
|
ModelLoadingRegistry.INSTANCE.registerAppender((manager, out) -> {
|
||||||
|
out.accept(new ModelIdentifier(new Identifier(TechReborn.MOD_ID, "cell_base"), "inventory"));
|
||||||
|
out.accept(new ModelIdentifier(new Identifier(TechReborn.MOD_ID, "cell_fluid"), "inventory"));
|
||||||
|
out.accept(new ModelIdentifier(new Identifier(TechReborn.MOD_ID, "cell_background"), "inventory"));
|
||||||
|
out.accept(new ModelIdentifier(new Identifier(TechReborn.MOD_ID, "cell_glass"), "inventory"));
|
||||||
|
});
|
||||||
|
|
||||||
ModelLoadingRegistry.INSTANCE.registerVariantProvider(resourceManager -> (modelIdentifier, modelProviderContext) -> {
|
ModelLoadingRegistry.INSTANCE.registerVariantProvider(resourceManager -> (modelIdentifier, modelProviderContext) -> {
|
||||||
if (!modelIdentifier.getNamespace().equals("techreborn")) {
|
if (!modelIdentifier.getNamespace().equals("techreborn")) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -77,5 +85,4 @@ public class TechRebornClient implements ClientModInitializer {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,13 +35,16 @@ import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView;
|
||||||
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;
|
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;
|
||||||
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
|
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
|
||||||
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
|
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
|
||||||
|
import net.fabricmc.indigo.renderer.helper.GeometryHelper;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.render.model.BakedModel;
|
import net.minecraft.client.render.model.BakedModel;
|
||||||
|
import net.minecraft.client.render.model.BakedModelManager;
|
||||||
import net.minecraft.client.render.model.BakedQuad;
|
import net.minecraft.client.render.model.BakedQuad;
|
||||||
import net.minecraft.client.render.model.json.ModelItemPropertyOverrideList;
|
import net.minecraft.client.render.model.json.ModelItemPropertyOverrideList;
|
||||||
import net.minecraft.client.render.model.json.ModelTransformation;
|
import net.minecraft.client.render.model.json.ModelTransformation;
|
||||||
import net.minecraft.client.texture.Sprite;
|
import net.minecraft.client.texture.Sprite;
|
||||||
|
import net.minecraft.client.util.ModelIdentifier;
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
import net.minecraft.fluid.Fluid;
|
import net.minecraft.fluid.Fluid;
|
||||||
import net.minecraft.fluid.Fluids;
|
import net.minecraft.fluid.Fluids;
|
||||||
|
@ -52,6 +55,7 @@ import net.minecraft.util.math.Direction;
|
||||||
import net.minecraft.world.ExtendedBlockView;
|
import net.minecraft.world.ExtendedBlockView;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import reborncore.common.fluid.container.ItemFluidInfo;
|
import reborncore.common.fluid.container.ItemFluidInfo;
|
||||||
|
import techreborn.TechReborn;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
@ -62,7 +66,12 @@ import java.util.function.Supplier;
|
||||||
|
|
||||||
public class DynamicCellBakedModel implements BakedModel, FabricBakedModel {
|
public class DynamicCellBakedModel implements BakedModel, FabricBakedModel {
|
||||||
|
|
||||||
Sprite base;
|
private final Sprite base;
|
||||||
|
|
||||||
|
private static final ModelIdentifier CELL_BASE = new ModelIdentifier(new Identifier(TechReborn.MOD_ID, "cell_base"), "inventory");
|
||||||
|
private static final ModelIdentifier CELL_BACKGROUND = new ModelIdentifier(new Identifier(TechReborn.MOD_ID, "cell_background"), "inventory");
|
||||||
|
private static final ModelIdentifier CELL_FLUID = new ModelIdentifier(new Identifier(TechReborn.MOD_ID, "cell_fluid"), "inventory");
|
||||||
|
private static final ModelIdentifier CELL_GLASS = new ModelIdentifier(new Identifier(TechReborn.MOD_ID, "cell_glass"), "inventory");
|
||||||
|
|
||||||
public DynamicCellBakedModel() {
|
public DynamicCellBakedModel() {
|
||||||
base = MinecraftClient.getInstance().getSpriteAtlas().getSprite(new Identifier("techreborn:item/cell_base"));
|
base = MinecraftClient.getInstance().getSpriteAtlas().getSprite(new Identifier("techreborn:item/cell_base"));
|
||||||
|
@ -81,7 +90,31 @@ public class DynamicCellBakedModel implements BakedModel, FabricBakedModel {
|
||||||
fluid = fluidInfo.getFluid(stack);
|
fluid = fluidInfo.getFluid(stack);
|
||||||
|
|
||||||
}
|
}
|
||||||
context.meshConsumer().accept(getMesh(fluid));
|
BakedModelManager bakedModelManager = MinecraftClient.getInstance().getBakedModelManager();
|
||||||
|
context.fallbackConsumer().accept(bakedModelManager.getModel(CELL_BASE));
|
||||||
|
context.fallbackConsumer().accept(bakedModelManager.getModel(CELL_BACKGROUND));
|
||||||
|
|
||||||
|
if (fluid != Fluids.EMPTY) {
|
||||||
|
FluidRenderHandler fluidRenderHandler = FluidRenderHandlerRegistry.INSTANCE.get(fluid);
|
||||||
|
BakedModel fluidModel = bakedModelManager.getModel(CELL_FLUID);
|
||||||
|
int fluidColor = fluidRenderHandler.getFluidColor(MinecraftClient.getInstance().world, MinecraftClient.getInstance().player.getBlockPos(), fluid.getDefaultState());
|
||||||
|
Sprite fluidSprite = fluidRenderHandler.getFluidSprites(MinecraftClient.getInstance().world, BlockPos.ORIGIN, fluid.getDefaultState())[0];
|
||||||
|
int color = new Color((float) (fluidColor >> 16 & 255) / 255.0F, (float) (fluidColor >> 8 & 255) / 255.0F, (float) (fluidColor & 255) / 255.0F).getRGB();
|
||||||
|
context.pushTransform(quad -> {
|
||||||
|
quad.nominalFace(GeometryHelper.lightFace(quad));
|
||||||
|
quad.spriteColor(0, color, color, color, color);
|
||||||
|
quad.spriteBake(0, fluidSprite, MutableQuadView.BAKE_LOCK_UV);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
final QuadEmitter emitter = context.getEmitter();
|
||||||
|
fluidModel.getQuads(null, null, randomSupplier.get()).forEach(q -> {
|
||||||
|
emitter.fromVanilla(q.getVertexData(), 0, false);
|
||||||
|
emitter.emit();
|
||||||
|
});
|
||||||
|
context.popTransform();
|
||||||
|
}
|
||||||
|
|
||||||
|
context.fallbackConsumer().accept(bakedModelManager.getModel(CELL_GLASS));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -134,7 +167,7 @@ public class DynamicCellBakedModel implements BakedModel, FabricBakedModel {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasDepthInGui() {
|
public boolean hasDepthInGui() {
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -149,7 +182,7 @@ public class DynamicCellBakedModel implements BakedModel, FabricBakedModel {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ModelTransformation getTransformation() {
|
public ModelTransformation getTransformation() {
|
||||||
return ModelHelper.HANDHELD_ITEM_TRANSFORMS;
|
return ModelHelper.DEFAULT_ITEM_TRANSFORMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected class ItemProxy extends ModelItemPropertyOverrideList {
|
protected class ItemProxy extends ModelItemPropertyOverrideList {
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "techreborn:item/cell_fluid_template",
|
||||||
|
"textures": {
|
||||||
|
"texture": "techreborn:item/cell_background"
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"parent": "minecraft:item/generated",
|
"parent": "minecraft:item/generated",
|
||||||
"textures": {
|
"textures": {
|
||||||
"layer0": "techreborn:item/cell_empty"
|
"layer0": "techreborn:item/cell_base"
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "techreborn:item/cell_fluid_template",
|
||||||
|
"textures": {
|
||||||
|
"texture": "techreborn:item/cell_background"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [7, 4, 7.5],
|
||||||
|
"to": [10, 12, 8.5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [7, 4, 10, 12], "texture": "#texture"},
|
||||||
|
"south": {"uv": [7, 4, 10, 12], "texture": "#texture"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"display": {
|
||||||
|
"ground": {
|
||||||
|
"rotation": [ 0, 0, 0 ],
|
||||||
|
"translation": [ 0, 2, 0],
|
||||||
|
"scale":[ 0.5, 0.5, 0.5 ]
|
||||||
|
},
|
||||||
|
"head": {
|
||||||
|
"rotation": [ 0, 180, 0 ],
|
||||||
|
"translation": [ 0, 13, 7],
|
||||||
|
"scale":[ 1, 1, 1]
|
||||||
|
},
|
||||||
|
"thirdperson_righthand": {
|
||||||
|
"rotation": [ 0, 0, 0 ],
|
||||||
|
"translation": [ 0, 3, 1 ],
|
||||||
|
"scale": [ 0.55, 0.55, 0.55 ]
|
||||||
|
},
|
||||||
|
"firstperson_righthand": {
|
||||||
|
"rotation": [ 0, -90, 25 ],
|
||||||
|
"translation": [ 1.13, 3.2, 1.13],
|
||||||
|
"scale": [ 0.68, 0.68, 0.68 ]
|
||||||
|
},
|
||||||
|
"fixed": {
|
||||||
|
"rotation": [ 0, 180, 0 ],
|
||||||
|
"scale": [ 1, 1, 1 ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "techreborn:item/cell_fluid_template",
|
||||||
|
"textures": {
|
||||||
|
"texture": "techreborn:item/cell_glass"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 505 B After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 446 B |
Before Width: | Height: | Size: 506 B |
Before Width: | Height: | Size: 321 B |
After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 643 B After Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 832 B After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 664 B After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 634 B After Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 826 B After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 664 B After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 659 B After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 627 B After Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 823 B After Width: | Height: | Size: 1.8 KiB |