mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-06-11 07:09:01 +02:00
9098002c17
- add flywheel as a dependency to catnip
93 lines
3.4 KiB
Java
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);
|
|
}
|
|
}
|