NaturesAura/src/main/java/de/ellpeck/naturesaura/blocks/tiles/render/RenderAuraTimer.java

69 lines
3 KiB
Java
Raw Normal View History

2020-05-05 19:43:27 +02:00
package de.ellpeck.naturesaura.blocks.tiles.render;
import com.mojang.blaze3d.vertex.PoseStack;
2021-12-19 18:47:50 +01:00
import com.mojang.blaze3d.vertex.VertexConsumer;
2020-05-05 19:43:27 +02:00
import de.ellpeck.naturesaura.NaturesAura;
2021-12-04 15:40:09 +01:00
import de.ellpeck.naturesaura.blocks.tiles.BlockEntityAuraTimer;
2020-05-05 19:43:27 +02:00
import de.ellpeck.naturesaura.items.ItemAuraBottle;
2021-12-19 18:47:50 +01:00
import net.minecraft.client.model.Model;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.model.geom.PartPose;
2023-02-15 23:52:52 +01:00
import net.minecraft.client.model.geom.builders.CubeListBuilder;
import net.minecraft.client.model.geom.builders.LayerDefinition;
import net.minecraft.client.model.geom.builders.MeshDefinition;
import net.minecraft.client.renderer.MultiBufferSource;
2021-12-19 18:47:50 +01:00
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.resources.ResourceLocation;
2024-03-12 19:04:56 +01:00
import net.neoforged.neoforge.capabilities.Capabilities;
2021-12-19 18:47:50 +01:00
public class RenderAuraTimer implements BlockEntityRenderer<BlockEntityAuraTimer> {
2020-05-05 19:43:27 +02:00
private static final ResourceLocation RES = new ResourceLocation(NaturesAura.MOD_ID, "textures/models/aura_timer_aura.png");
2021-12-19 18:47:50 +01:00
private final AuraModel model = new AuraModel();
public RenderAuraTimer(BlockEntityRendererProvider.Context context) {
2020-05-05 19:43:27 +02:00
}
@Override
public void render(BlockEntityAuraTimer tile, float partialTicks, PoseStack stack, MultiBufferSource buffer, int combinedLightIn, int combinedOverlayIn) {
2024-03-12 19:04:56 +01:00
var bottle = tile.getLevel().getCapability(Capabilities.ItemHandler.BLOCK, tile.getBlockPos(), tile.getBlockState(), tile, null).getStackInSlot(0);
2020-05-05 19:43:27 +02:00
if (bottle.isEmpty())
return;
stack.pushPose();
2020-05-05 19:43:27 +02:00
stack.translate(4 / 16F, 2.001F / 16, 4 / 16F);
2021-12-15 16:30:22 +01:00
var percentage = 1 - tile.getTimerPercentage();
2020-05-05 19:43:27 +02:00
stack.scale(8 / 16F, 6.5F / 16 * percentage, 8 / 16F);
2021-12-15 16:30:22 +01:00
var type = ItemAuraBottle.getType(bottle);
var r = (type.getColor() >> 16 & 255) / 255F;
var g = (type.getColor() >> 8 & 255) / 255F;
var b = (type.getColor() & 255) / 255F;
2022-06-27 15:24:04 +02:00
this.model.renderToBuffer(stack, buffer.getBuffer(this.model.renderType(RenderAuraTimer.RES)), combinedLightIn, combinedOverlayIn, r, g, b, 0.75F);
stack.popPose();
2020-05-05 19:43:27 +02:00
}
2021-12-19 18:47:50 +01:00
private static class AuraModel extends Model {
2020-05-05 19:43:27 +02:00
2021-12-19 18:47:50 +01:00
private final ModelPart model;
2020-05-05 19:43:27 +02:00
public AuraModel() {
2021-12-19 18:47:50 +01:00
super(RenderType::entityTranslucent);
var mesh = new MeshDefinition();
var part = mesh.getRoot();
part.addOrReplaceChild("main", new CubeListBuilder().addBox(0, 0, 0, 16, 16, 16), PartPose.ZERO);
this.model = LayerDefinition.create(mesh, 64, 64).bakeRoot();
2020-05-05 19:43:27 +02:00
}
@Override
2021-12-19 18:47:50 +01:00
public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha) {
this.model.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, red, green, blue, alpha);
2020-05-05 19:43:27 +02:00
}
2024-03-12 19:04:56 +01:00
2021-12-19 18:47:50 +01:00
}
2024-03-12 19:04:56 +01:00
2020-05-05 19:43:27 +02:00
}