mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-06-02 18:59:19 +02:00
9098002c17
- add flywheel as a dependency to catnip
58 lines
2.3 KiB
Java
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);
|
|
}
|
|
|
|
}
|