package ru.magistu.siegemachines.client.renderer; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import ru.magistu.siegemachines.client.renderer.model.MachineModel; import ru.magistu.siegemachines.entity.machine.Trebuchet; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.resources.ResourceLocation; import software.bernie.geckolib3.geo.render.built.GeoBone; import software.bernie.geckolib3.geo.render.built.GeoModel; import software.bernie.geckolib3.model.provider.GeoModelProvider; import java.util.Optional; public class TrebuchetGeoRenderer extends MachineGeoRenderer { public TrebuchetGeoRenderer(EntityRendererProvider.Context renderManager) { super(renderManager, new MachineModel<>("trebuchet")); } @Override public RenderType getRenderType(Trebuchet animatable, float partialTicks, PoseStack stack, MultiBufferSource renderTypeBuffer, VertexConsumer vertexBuilder, int packedLightIn, ResourceLocation textureLocation) { return RenderType.entityTranslucent(getTextureLocation(animatable)); } @Override public void renderEarly(Trebuchet animatable, PoseStack stackIn, float ticks, MultiBufferSource renderTypeBuffer, VertexConsumer vertexBuilder, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float partialTicks) { GeoModelProvider modelProvider = this.getGeoModelProvider(); GeoModel model = modelProvider.getModel(modelProvider.getModelResource(animatable)); Optional projectile = model.getBone("Cobblestone"); int projectilesize = (animatable.state == Trebuchet.State.IDLE_RELOADED || animatable.shootingticks > 0) && animatable.hasAmmo() ? 1 : 0; projectile.ifPresent(bone -> bone.setScaleX(projectilesize)); projectile.ifPresent(bone -> bone.setScaleY(projectilesize)); projectile.ifPresent(bone -> bone.setScaleZ(projectilesize)); super.renderEarly(animatable, stackIn, ticks, renderTypeBuffer, vertexBuilder, packedLightIn, packedOverlayIn, red, green, blue, partialTicks); } }