2019-02-25 13:36:05 +01:00
|
|
|
package de.ellpeck.naturesaura.blocks.tiles.render;
|
|
|
|
|
2021-12-15 14:26:42 +01:00
|
|
|
import com.mojang.blaze3d.vertex.PoseStack;
|
2021-12-19 18:47:50 +01:00
|
|
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
2023-07-08 12:32:27 +02:00
|
|
|
import com.mojang.math.Axis;
|
2019-02-25 13:36:05 +01:00
|
|
|
import de.ellpeck.naturesaura.NaturesAura;
|
2021-12-04 15:40:09 +01:00
|
|
|
import de.ellpeck.naturesaura.blocks.tiles.BlockEntityGeneratorLimitRemover;
|
|
|
|
import de.ellpeck.naturesaura.blocks.tiles.BlockEntityImpl;
|
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;
|
|
|
|
import net.minecraft.client.model.geom.builders.CubeListBuilder;
|
|
|
|
import net.minecraft.client.model.geom.builders.LayerDefinition;
|
|
|
|
import net.minecraft.client.model.geom.builders.MeshDefinition;
|
2021-12-15 14:26:42 +01:00
|
|
|
import net.minecraft.client.renderer.MultiBufferSource;
|
2021-12-19 18:47:50 +01:00
|
|
|
import net.minecraft.client.renderer.RenderType;
|
2021-12-15 14:26:42 +01:00
|
|
|
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
|
|
|
|
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
|
|
|
import net.minecraft.resources.ResourceLocation;
|
2019-10-20 22:30:49 +02:00
|
|
|
import net.minecraftforge.api.distmarker.Dist;
|
|
|
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
2019-02-25 13:36:05 +01:00
|
|
|
|
2019-10-20 22:30:49 +02:00
|
|
|
@OnlyIn(Dist.CLIENT)
|
2021-12-15 14:26:42 +01:00
|
|
|
public class RenderGeneratorLimitRemover implements BlockEntityRenderer<BlockEntityGeneratorLimitRemover> {
|
|
|
|
|
2019-02-25 13:36:05 +01:00
|
|
|
private static final ResourceLocation RES = new ResourceLocation(NaturesAura.MOD_ID, "textures/models/generator_limit_remover_glint.png");
|
2021-12-19 18:47:50 +01:00
|
|
|
private final ModelLimitRemoverGlint model = new ModelLimitRemoverGlint();
|
2021-12-15 14:26:42 +01:00
|
|
|
|
|
|
|
public RenderGeneratorLimitRemover(BlockEntityRendererProvider.Context context) {
|
2020-01-28 18:08:56 +01:00
|
|
|
|
|
|
|
}
|
2019-02-25 13:36:05 +01:00
|
|
|
|
2020-01-28 18:08:56 +01:00
|
|
|
@Override
|
2021-12-15 14:26:42 +01:00
|
|
|
public void render(BlockEntityGeneratorLimitRemover te, float v, PoseStack matrixStack, MultiBufferSource iRenderTypeBuffer, int combinedLightIn, int combinedOverlayIn) {
|
2021-12-15 16:30:22 +01:00
|
|
|
var above = te.getLevel().getBlockEntity(te.getBlockPos().above());
|
2021-12-04 15:40:09 +01:00
|
|
|
if (above instanceof BlockEntityImpl && ((BlockEntityImpl) above).wantsLimitRemover()) {
|
2023-02-16 20:01:21 +01:00
|
|
|
RenderGeneratorLimitRemover.renderGlint(matrixStack, iRenderTypeBuffer, this.model, 0, 1, 0, combinedOverlayIn, RenderGeneratorLimitRemover.RES, 1);
|
|
|
|
RenderGeneratorLimitRemover.renderGlint(matrixStack, iRenderTypeBuffer, this.model, 0, 0, 0, combinedOverlayIn, RenderGeneratorLimitRemover.RES, 1);
|
2019-02-25 13:36:05 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-02-16 20:01:21 +01:00
|
|
|
public static void renderGlint(PoseStack stack, MultiBufferSource buffer, ModelLimitRemoverGlint model, int xOff, int yOff, int zOff, int combinedOverlayIn, ResourceLocation texture, float maxAlpha) {
|
2021-12-15 14:26:42 +01:00
|
|
|
stack.pushPose();
|
2021-12-15 16:30:22 +01:00
|
|
|
var brightness = 15 << 20 | 15 << 4;
|
|
|
|
var alpha = ((float) Math.sin(System.currentTimeMillis() / 800D) + 1F) / 2F;
|
2023-02-16 20:01:21 +01:00
|
|
|
stack.translate(-0.002F + xOff, 1 + 0.002F + yOff, 1 + 0.002F + zOff);
|
2023-07-08 12:32:27 +02:00
|
|
|
stack.mulPose(Axis.XP.rotationDegrees(180F));
|
2023-02-16 20:01:21 +01:00
|
|
|
stack.scale(1.004F, 1.004F, 1.004F);
|
|
|
|
model.renderToBuffer(stack, buffer.getBuffer(model.renderType(texture)), brightness, combinedOverlayIn, 1, 1, 1, alpha * maxAlpha);
|
2021-12-15 14:26:42 +01:00
|
|
|
stack.popPose();
|
2019-02-25 13:36:05 +01:00
|
|
|
}
|
|
|
|
|
2023-02-16 19:03:26 +01:00
|
|
|
public static class ModelLimitRemoverGlint extends Model {
|
2019-02-25 13:36:05 +01:00
|
|
|
|
2021-12-19 18:47:50 +01:00
|
|
|
private final ModelPart model;
|
2019-02-25 13:36:05 +01:00
|
|
|
|
|
|
|
public ModelLimitRemoverGlint() {
|
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();
|
2019-02-25 13:36:05 +01:00
|
|
|
}
|
|
|
|
|
2020-01-28 18:08:56 +01: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);
|
2019-02-25 13:36:05 +01:00
|
|
|
}
|
2021-12-19 18:47:50 +01:00
|
|
|
}
|
2019-02-25 13:36:05 +01:00
|
|
|
}
|