Create/src/main/java/com/simibubi/create/content/equipment/armor/BacktankArmorLayer.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

93 lines
3.4 KiB
Java

package com.simibubi.create.content.equipment.armor;
import com.mojang.blaze3d.vertex.PoseStack;
import net.createmod.catnip.render.CachedBuffers;
import net.createmod.catnip.render.SuperByteBuffer;
import net.createmod.catnip.utility.math.AngleHelper;
import net.createmod.ponder.utility.WorldTickHolder;
import net.minecraft.client.model.EntityModel;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.Sheets;
import net.minecraft.client.renderer.entity.EntityRenderDispatcher;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
import net.minecraft.client.renderer.entity.RenderLayerParent;
import net.minecraft.client.renderer.entity.layers.RenderLayer;
import net.minecraft.core.Direction;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.Pose;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.block.state.BlockState;
public class BacktankArmorLayer<T extends LivingEntity, M extends EntityModel<T>> extends RenderLayer<T, M> {
public BacktankArmorLayer(RenderLayerParent<T, M> renderer) {
super(renderer);
}
@Override
public void render(PoseStack ms, MultiBufferSource buffer, int light, LivingEntity entity, float yaw, float pitch,
float pt, float p_225628_8_, float p_225628_9_, float p_225628_10_) {
if (entity.getPose() == Pose.SLEEPING)
return;
BacktankItem item = BacktankItem.getWornBy(entity);
if (item == null)
return;
M entityModel = getParentModel();
if (!(entityModel instanceof HumanoidModel))
return;
HumanoidModel<?> model = (HumanoidModel<?>) entityModel;
RenderType renderType = Sheets.cutoutBlockSheet();
BlockState renderedState = item.getBlock().defaultBlockState()
.setValue(BacktankBlock.HORIZONTAL_FACING, Direction.SOUTH);
SuperByteBuffer backtank = CachedBuffers.block(renderedState);
SuperByteBuffer cogs = CachedBuffers.partial(BacktankRenderer.getCogsModel(renderedState), renderedState);
ms.pushPose();
model.body.translateAndRotate(ms);
ms.translate(-1 / 2f, 10 / 16f, 1f);
ms.scale(1, -1, -1);
backtank.forEntityRender()
.light(light)
.renderInto(ms, buffer.getBuffer(renderType));
cogs.centre()
.rotateY(180)
.unCentre()
.translate(0, 6.5f / 16, 11f / 16)
.rotate(Direction.EAST, AngleHelper.rad(2 * WorldTickHolder.getRenderTime(entity.level) % 360))
.translate(0, -6.5f / 16, -11f / 16);
cogs.forEntityRender()
.light(light)
.renderInto(ms, buffer.getBuffer(renderType));
ms.popPose();
}
public static void registerOnAll(EntityRenderDispatcher renderManager) {
for (EntityRenderer<? extends Player> renderer : renderManager.getSkinMap().values())
registerOn(renderer);
for (EntityRenderer<?> renderer : renderManager.renderers.values())
registerOn(renderer);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void registerOn(EntityRenderer<?> entityRenderer) {
if (!(entityRenderer instanceof LivingEntityRenderer))
return;
LivingEntityRenderer<?, ?> livingRenderer = (LivingEntityRenderer<?, ?>) entityRenderer;
if (!(livingRenderer.getModel() instanceof HumanoidModel))
return;
BacktankArmorLayer<?, ?> layer = new BacktankArmorLayer<>(livingRenderer);
livingRenderer.addLayer((BacktankArmorLayer) layer);
}
}