Create/src/main/java/com/simibubi/create/content/kinetics/fan/EncasedFanRenderer.java
zelophed 9098002c17 Wait it's all Flywheel? Always has been.
- add flywheel as a dependency to catnip
2023-08-13 23:39:10 +02:00

58 lines
2.3 KiB
Java

package com.simibubi.create.content.kinetics.fan;
import static net.minecraft.world.level.block.state.properties.BlockStateProperties.FACING;
import com.jozufozu.flywheel.backend.Backend;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.simibubi.create.AllPartialModels;
import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer;
import net.createmod.catnip.render.CachedBuffers;
import net.createmod.catnip.render.SuperByteBuffer;
import net.createmod.ponder.utility.WorldTickHolder;
import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.core.Direction;
import net.minecraft.util.Mth;
public class EncasedFanRenderer extends KineticBlockEntityRenderer<EncasedFanBlockEntity> {
public EncasedFanRenderer(BlockEntityRendererProvider.Context context) {
super(context);
}
@Override
protected void renderSafe(EncasedFanBlockEntity be, float partialTicks, PoseStack ms, MultiBufferSource buffer,
int light, int overlay) {
if (Backend.canUseInstancing(be.getLevel())) return;
Direction direction = be.getBlockState()
.getValue(FACING);
VertexConsumer vb = buffer.getBuffer(RenderType.cutoutMipped());
int lightBehind = LevelRenderer.getLightColor(be.getLevel(), be.getBlockPos().relative(direction.getOpposite()));
int lightInFront = LevelRenderer.getLightColor(be.getLevel(), be.getBlockPos().relative(direction));
SuperByteBuffer shaftHalf =
CachedBuffers.partialFacing(AllPartialModels.SHAFT_HALF, be.getBlockState(), direction.getOpposite());
SuperByteBuffer fanInner =
CachedBuffers.partialFacing(AllPartialModels.ENCASED_FAN_INNER, be.getBlockState(), direction.getOpposite());
float time = WorldTickHolder.getRenderTime(be.getLevel());
float speed = be.getSpeed() * 5;
if (speed > 0)
speed = Mth.clamp(speed, 80, 64 * 20);
if (speed < 0)
speed = Mth.clamp(speed, -64 * 20, -80);
float angle = (time * speed * 3 / 10f) % 360;
angle = angle / 180f * (float) Math.PI;
standardKineticRotationTransform(shaftHalf, be, lightBehind).renderInto(ms, vb);
kineticRotationTransform(fanInner, be, direction.getAxis(), angle, lightInFront).renderInto(ms, vb);
}
}