package com.thebrokenrail.energonrelics.client.block.entity.render; import com.thebrokenrail.energonrelics.EnergonRelics; import com.thebrokenrail.energonrelics.block.entity.DefensiveLaserBlockEntity; import net.minecraft.block.entity.BlockEntity; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; import net.minecraft.client.render.model.json.ModelTransformation; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.Vector3f; import net.minecraft.item.ItemStack; import net.minecraft.util.math.Matrix4f; import net.minecraft.util.math.Vec3d; public class DefensiveLaserBlockEntityRenderer extends HighlightBlockEntityRenderer { public DefensiveLaserBlockEntityRenderer(BlockEntityRenderDispatcher dispatcher) { super(dispatcher); } @Override public void render(BlockEntity entity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { if (entity instanceof DefensiveLaserBlockEntity) { matrices.push(); matrices.translate(0.5d, 0.5d, 0.5d); matrices.scale(0.6f, 0.6f, 0.6f); DefensiveLaserBlockEntity laser = (DefensiveLaserBlockEntity) entity; float yaw = (float) ((laser.rotation.getYaw()) * DefensiveLaserBlockEntity.DEG2RAD); if (yaw != 0) { matrices.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion(yaw)); } float pitch = (float) ((laser.rotation.getPitch() + 45) * DefensiveLaserBlockEntity.DEG2RAD); if (pitch != 0) { matrices.multiply(Vector3f.POSITIVE_X.getRadialQuaternion(pitch)); } matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(-90)); MinecraftClient client = MinecraftClient.getInstance(); client.getItemRenderer().renderItem(new ItemStack(EnergonRelics.Items.DEFENSIVE_LASER_CORE), ModelTransformation.Mode.FIXED, light, overlay, matrices, vertexConsumers); matrices.pop(); if (client.getEntityRenderDispatcher().shouldRenderHitboxes()) { matrices.push(); Matrix4f matrix4f = matrices.peek().getModel(); Vec3d vec3d = ((DefensiveLaserBlockEntity) entity).rotation.getRayVector().multiply(2d).add(0.5d, 0.5d, 0.5d); VertexConsumer vertices = vertexConsumers.getBuffer(RenderLayer.getLines()); vertices.vertex(matrix4f, 0.5f, 0.5f, 0.5f).color(0, 0, 255, 255).next(); vertices.vertex(matrix4f, (float) vec3d.getX(), (float) vec3d.getY(), (float) vec3d.getZ()).color(0, 0, 255, 255).next(); matrices.pop(); } } super.render(entity, tickDelta, matrices, vertexConsumers, light, overlay); } }