缓存无人机渲染的挂载实体

This commit is contained in:
Light_Quanta 2025-07-01 12:09:22 +08:00
parent 21dc782fb7
commit 4014507e41
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959

View file

@ -112,39 +112,51 @@ public class DroneRenderer extends GeoEntityRenderer<DroneEntity> {
poseStack.popPose(); poseStack.popPose();
} }
renderAttachments(entityIn, player, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn); renderAttachments(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn);
} }
} }
poseStack.popPose(); poseStack.popPose();
} }
private String entityNameCache = "";
private Entity entityCache = null;
// 统一渲染挂载实体 // 统一渲染挂载实体
private void renderAttachments(DroneEntity entity, Player player, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { private void renderAttachments(DroneEntity entity, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource buffer, int packedLight) {
var attached = entity.getEntityData().get(ATTACHED_ENTITY); var attached = entity.getEntityData().get(ATTACHED_ENTITY);
if (attached.isEmpty()) return; if (attached.isEmpty()) return;
EntityType.byString(attached).ifPresent(entityType -> { Entity renderEntity;
var renderEntity = entityType.create(entity.level());
if (entityNameCache.equals(attached) && entityCache != null) {
renderEntity = entityCache;
} else {
renderEntity = EntityType.byString(attached)
.map(type -> type.create(entity.level()))
.orElse(null);
if (renderEntity == null) return; if (renderEntity == null) return;
var displayData = entity.getEntityData().get(ATTACHMENT_DISPLAY); entityNameCache = attached;
entityCache = renderEntity;
}
var scale = new float[]{displayData.get(0), displayData.get(1), displayData.get(2)}; var displayData = entity.getEntityData().get(ATTACHMENT_DISPLAY);
var offset = new float[]{displayData.get(3), displayData.get(4), displayData.get(5)};
var rotation = new float[]{displayData.get(6), displayData.get(7), displayData.get(8)};
poseStack.pushPose(); var scale = new float[]{displayData.get(0), displayData.get(1), displayData.get(2)};
poseStack.translate(offset[0], offset[1], offset[2]); var offset = new float[]{displayData.get(3), displayData.get(4), displayData.get(5)};
poseStack.scale(scale[0], scale[1], scale[2]); var rotation = new float[]{displayData.get(6), displayData.get(7), displayData.get(8)};
poseStack.mulPose(Axis.XP.rotationDegrees(rotation[0]));
poseStack.mulPose(Axis.YP.rotationDegrees(rotation[2]));
poseStack.mulPose(Axis.ZP.rotationDegrees(rotation[1]));
entityRenderDispatcher.render(renderEntity, 0, 0, 0, entityYaw, partialTicks, poseStack, buffer, packedLight); poseStack.pushPose();
poseStack.translate(offset[0], offset[1], offset[2]);
poseStack.scale(scale[0], scale[1], scale[2]);
poseStack.mulPose(Axis.XP.rotationDegrees(rotation[0]));
poseStack.mulPose(Axis.YP.rotationDegrees(rotation[2]));
poseStack.mulPose(Axis.ZP.rotationDegrees(rotation[1]));
poseStack.popPose(); entityRenderDispatcher.render(renderEntity, 0, 0, 0, entityYaw, partialTicks, poseStack, buffer, packedLight);
});
poseStack.popPose();
} }
@Override @Override