WIP: eternal crystal render

This commit is contained in:
Aleksey 2020-11-21 01:27:03 +03:00
parent d9a60fc7f2
commit 0dcc003333
4 changed files with 138 additions and 94 deletions

View file

@ -23,7 +23,10 @@ import ru.betterend.blocks.EternalPedestal;
import ru.betterend.blocks.basis.BlockPedestal;
import ru.betterend.blocks.entities.PedestalBlockEntity;
import ru.betterend.client.render.BeamRenderer;
import ru.betterend.client.render.EndCrystalRenderer;
import ru.betterend.client.render.EternalCrystalRenderer;
import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndItems;
@Environment(EnvType.CLIENT)
public class PedestalItemRenderer<T extends PedestalBlockEntity> extends BlockEntityRenderer<T> {
@ -63,6 +66,8 @@ public class PedestalItemRenderer<T extends PedestalBlockEntity> extends BlockEn
}
if (activeItem.getItem() == Items.END_CRYSTAL) {
EndCrystalRenderer.render(blockEntity.getAge(), blockEntity.getMaxAge(), tickDelta, matrices, vertexConsumers, light);
} else if (activeItem.getItem() == EndItems.ETERNAL_CRYSTAL) {
EternalCrystalRenderer.render(blockEntity.getAge(), tickDelta, matrices, vertexConsumers, light);
} else {
float rotation = (blockEntity.getAge() + tickDelta) / 25.0F + 6.0F;
matrices.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion(rotation));

View file

@ -1,4 +1,4 @@
package ru.betterend.blocks.entities.render;
package ru.betterend.client.render;
import net.minecraft.client.model.ModelPart;
import net.minecraft.client.render.OverlayTexture;
@ -54,11 +54,11 @@ public class EndCrystalRenderer {
float g = MathHelper.sqrt(dx * dx + dy * dy + dz * dz);
matrices.push();
matrices.translate(0.0D, 2.0D, 0.0D);
matrices.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion((float)(-Math.atan2((double)dz, (double)dx)) - 1.5707964F));
matrices.multiply(Vector3f.POSITIVE_X.getRadialQuaternion((float)(-Math.atan2((double)f, (double)dy)) - 1.5707964F));
matrices.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion((float)(-Math.atan2((double) dz, (double) dx)) - 1.5707964F));
matrices.multiply(Vector3f.POSITIVE_X.getRadialQuaternion((float)(-Math.atan2((double) f, (double) dy)) - 1.5707964F));
VertexConsumer vertexConsumer = vertexConsumers.getBuffer(CRYSTAL_BEAM_LAYER);
float h = 0.0F - ((float)age + tickDelta) * 0.01F;
float i = MathHelper.sqrt(dx * dx + dy * dy + dz * dz) / 32.0F - ((float)age + tickDelta) * 0.01F;
float h = 0.0F - ((float) age + tickDelta) * 0.01F;
float i = MathHelper.sqrt(dx * dx + dy * dy + dz * dz) / 32.0F - ((float) age + tickDelta) * 0.01F;
float k = 0.0F;
float l = 0.75F;
float m = 0.0F;
@ -67,9 +67,9 @@ public class EndCrystalRenderer {
Matrix3f matrix3f = entry.getNormal();
for(int n = 1; n <= 8; ++n) {
float o = MathHelper.sin((float)n * 6.2831855F / 8.0F) * 0.75F;
float p = MathHelper.cos((float)n * 6.2831855F / 8.0F) * 0.75F;
float q = (float)n / 8.0F;
float o = MathHelper.sin((float) n * 6.2831855F / 8.0F) * 0.75F;
float p = MathHelper.cos((float) n * 6.2831855F / 8.0F) * 0.75F;
float q = (float) n / 8.0F;
vertexConsumer.vertex(matrix4f, k * 0.2F, l * 0.2F, 0.0F).color(0, 0, 0, 255).texture(m, h).overlay(OverlayTexture.DEFAULT_UV).light(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).next();
vertexConsumer.vertex(matrix4f, k, l, g).color(255, 255, 255, 255).texture(m, i).overlay(OverlayTexture.DEFAULT_UV).light(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).next();
vertexConsumer.vertex(matrix4f, o, p, g).color(255, 255, 255, 255).texture(q, i).overlay(OverlayTexture.DEFAULT_UV).light(light).normal(matrix3f, 0.0F, -1.0F, 0.0F).next();

View file

@ -0,0 +1,39 @@
package ru.betterend.client.render;
import net.minecraft.client.model.ModelPart;
import net.minecraft.client.render.OverlayTexture;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.util.math.Vector3f;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
import ru.betterend.BetterEnd;
public class EternalCrystalRenderer {
private static final Identifier CRYSTAL_TEXTURE = BetterEnd.makeID("textures/entity/eternal_crystal.png");
private static final RenderLayer RENDER_LAYER;
private static final ModelPart CORE;
public static void render(int age, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumerProvider, int light) {
VertexConsumer vertexConsumer = vertexConsumerProvider.getBuffer(RENDER_LAYER);
float rotation = (age + tickDelta) / 25.0F + 6.0F;
float altitude = MathHelper.sin((age + tickDelta) / 10.0F) * 0.1F + 0.1F;
matrices.push();
matrices.scale(0.6F, 0.6F, 0.6F);
matrices.translate(0.0D, altitude / 2.0D, 0.0D);
matrices.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion(rotation));
matrices.push();
matrices.translate(-0.125D, -0.1D, -0.125D);
CORE.render(matrices, vertexConsumer, light, OverlayTexture.DEFAULT_UV);
matrices.pop();
matrices.pop();
}
static {
RENDER_LAYER = RenderLayer.getEntityTranslucent(CRYSTAL_TEXTURE);
CORE = new ModelPart(16, 16, 0, 0);
CORE.addCuboid(0.0F, 0.0F, 0.0F, 4.0F, 12.0F, 4.0F);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B