Forge 1.19.2 Как добавить слой к модели игрока? ⇐ JAVA
-
Anonymous
Forge 1.19.2 Как добавить слой к модели игрока?
Я хочу визуализировать модель надкрылий по умолчанию в виде слоя на проигрывателе, а не размещать ее вручную, как я сделал здесь:
public static void renderElytra(сущность LivingEntity, float partsticks, PoseStackposeStack, буфер MultiBufferSource, int packageLight) { если (getPlayerWings()) { Майнкрафт Minecraft = Minecraft.getInstance(); ElytraModel elytraModel = (ElytraModel) getElytraModel(); minecraft.getTextureManager().bindForSetup(ELYTRA_TEXTURE); poseStack.pushPose(); double bodyRotRadians = (double) Math.toRadians(entity.yBodyRot); // Вычисляем смещение позиции на основе вращения игрока // Отрегулируйте эти значения по мере необходимости, чтобы правильно расположить надкрылья на спине игрока двойной xOffset = 0,1 * Math.sin(bodyRotRadians); двойной zOffset = -0,1 * Math.cos(bodyRotRadians); двойной xFlyOffset = -3 * Math.sin(bodyRotRadians); двойной zFlyOffset = 3 * Math.cos(bodyRotRadians); логическое значение isFlying =entity.isFallFlying(); если (isFlying) { poseStack.translate(xFlyOffset, -0.4, zFlyOffset); poseStack.mulPose(Vector3f.YP.rotationDegrees(180F -entity.yBodyRot)); poseStack.mulPose(Vector3f.ZP.rotationDegrees(180F)); poseStack.mulPose(Vector3f.XP.rotationDegrees(90F -entity.getXRot())); } еще { poseStack.translate(xOffset, 2.9, zOffset); poseStack.mulPose(Vector3f.YP.rotationDegrees(180F -entity.yBodyRot)); poseStack.mulPose(Vector3f.ZP.rotationDegrees(180F)); } плавающая шкала = 1,93F; // При необходимости корректируем poseStack.scale(масштаб, масштаб, масштаб); elytraModel.setupAnim(entity, 0, 0, partsTicks, 0, 0); elytraModel.renderToBuffer(poseStack, buffer.getBuffer(RenderType.entityCutoutNoCull(ELYTRA_TEXTURE)), packageLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); poseStack.popPose(); } } @Mod.EventBusSubscriber(значение = Dist.CLIENT) общественный класс PlayerRendererHandler { @SubscribeEvent public static void onPlayerRender(RenderPlayerEvent.Post event) { если (ClientWingsData.getPlayerWings()) { ClientWingsData.renderElytra(event.getEntity(), event.getPartialTick(), event.getPoseStack(), event.getMultiBufferSource(), event.getPackedLight()); } } } Мне удалось создать слой надкрылий:
@Mod.EventBusSubscriber(modid = EnderiteMod.MOD_ID, значение = Dist.CLIENT) публичный финальный класс LayerRenderSubscriber { @SubscribeEvent(приоритет = EventPriority.LOW) public static void renderPlayer(окончательное событие EntityRenderersEvent.AddLayers) { LivingEntityRenderer
> рендерер = event.getRenderer(EntityType.PLAYER); ElytraLayer Layer = new ElytraLayer(рендерер, event.getEntityModels()); renderer.addLayer(слой); } Проблема в том, что мне не удалось реально реализовать слой и добавить его в модель плеера, я не знаю, как заменить модель плеера или как добавить к ней дополнительный слой. Я попробовал много методов, но ни один из них не добавил модель. самое близкое, что я получил, это метод PlayerModel.createMesh, но мне не удалось заставить его работать. Я также нашел метод .render, но тоже не смог его понять.
Я хочу визуализировать модель надкрылий по умолчанию в виде слоя на проигрывателе, а не размещать ее вручную, как я сделал здесь:
public static void renderElytra(сущность LivingEntity, float partsticks, PoseStackposeStack, буфер MultiBufferSource, int packageLight) { если (getPlayerWings()) { Майнкрафт Minecraft = Minecraft.getInstance(); ElytraModel elytraModel = (ElytraModel) getElytraModel(); minecraft.getTextureManager().bindForSetup(ELYTRA_TEXTURE); poseStack.pushPose(); double bodyRotRadians = (double) Math.toRadians(entity.yBodyRot); // Вычисляем смещение позиции на основе вращения игрока // Отрегулируйте эти значения по мере необходимости, чтобы правильно расположить надкрылья на спине игрока двойной xOffset = 0,1 * Math.sin(bodyRotRadians); двойной zOffset = -0,1 * Math.cos(bodyRotRadians); двойной xFlyOffset = -3 * Math.sin(bodyRotRadians); двойной zFlyOffset = 3 * Math.cos(bodyRotRadians); логическое значение isFlying =entity.isFallFlying(); если (isFlying) { poseStack.translate(xFlyOffset, -0.4, zFlyOffset); poseStack.mulPose(Vector3f.YP.rotationDegrees(180F -entity.yBodyRot)); poseStack.mulPose(Vector3f.ZP.rotationDegrees(180F)); poseStack.mulPose(Vector3f.XP.rotationDegrees(90F -entity.getXRot())); } еще { poseStack.translate(xOffset, 2.9, zOffset); poseStack.mulPose(Vector3f.YP.rotationDegrees(180F -entity.yBodyRot)); poseStack.mulPose(Vector3f.ZP.rotationDegrees(180F)); } плавающая шкала = 1,93F; // При необходимости корректируем poseStack.scale(масштаб, масштаб, масштаб); elytraModel.setupAnim(entity, 0, 0, partsTicks, 0, 0); elytraModel.renderToBuffer(poseStack, buffer.getBuffer(RenderType.entityCutoutNoCull(ELYTRA_TEXTURE)), packageLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); poseStack.popPose(); } } @Mod.EventBusSubscriber(значение = Dist.CLIENT) общественный класс PlayerRendererHandler { @SubscribeEvent public static void onPlayerRender(RenderPlayerEvent.Post event) { если (ClientWingsData.getPlayerWings()) { ClientWingsData.renderElytra(event.getEntity(), event.getPartialTick(), event.getPoseStack(), event.getMultiBufferSource(), event.getPackedLight()); } } } Мне удалось создать слой надкрылий:
@Mod.EventBusSubscriber(modid = EnderiteMod.MOD_ID, значение = Dist.CLIENT) публичный финальный класс LayerRenderSubscriber { @SubscribeEvent(приоритет = EventPriority.LOW) public static void renderPlayer(окончательное событие EntityRenderersEvent.AddLayers) { LivingEntityRenderer
> рендерер = event.getRenderer(EntityType.PLAYER); ElytraLayer Layer = new ElytraLayer(рендерер, event.getEntityModels()); renderer.addLayer(слой); } Проблема в том, что мне не удалось реально реализовать слой и добавить его в модель плеера, я не знаю, как заменить модель плеера или как добавить к ней дополнительный слой. Я попробовал много методов, но ни один из них не добавил модель. самое близкое, что я получил, это метод PlayerModel.createMesh, но мне не удалось заставить его работать. Я также нашел метод .render, но тоже не смог его понять.
Мобильная версия