Skip to content

Etiquetas holográficas y umbrales de cantidad (MC 26.2)

Este documento detalla el sistema de indicadores de recuento flotantes, el control por umbral label_min_count y la renderización de etiquetas de nombre puramente vanilla de Item Clumps para Minecraft 26.2.


📊 Ficha técnica de características

PropiedadEspecificación
Nombre del sistemaProveedor de etiquetas holográficas en servidor
Estrategia de renderizadoEtiquetas de nombre personalizadas nativas de Vanilla (setCustomName / setCustomNameVisible)
¿Se requiere mod en cliente?No (100% renderizado por clientes de Minecraft Vanilla sin modificar)
Patrón de formato de etiqueta<nombre_localizado_objeto> x<cantidad> (ej. Diamond x128, Oak Log x500)
GameRule de umbralitem_clumps:label_min_count (Predeterminado: -1, usa DataComponents.MAX_STACK_SIZE)
GameRule de alternanciaitem_clumps:render_labels (Predeterminado: true)
Sobrecarga por tick$0.00\text{ ms}$ (Activado estrictamente en la mutación setItem())

🏷️ Cómo se renderizan las etiquetas flotantes en clientes Vanilla

En lugar de requerir un mod en el cliente o enviar paquetes personalizados de renderizado OpenGL, Item Clumps aprovecha el renderizado nativo de etiquetas de nombre de entidades de Minecraft Vanilla:

                      ┌───────────────────────────────┐
                      │ Ground Item Stack Size Changes│
                      │      (ItemEntity.setItem)     │
                      └───────────────┬───────────────┘


                      ┌───────────────────────────────┐
                      │  Is render_labels Enabled?    │
                      │  Does count > maxStack?       │
                      └───────────────┬───────────────┘

                     ┌────────────────┴────────────────┐
                     │ (Yes)                           │ (No)
                     ▼                                 ▼
       ┌───────────────────────────┐     ┌───────────────────────────┐
       │ Set Entity Custom Name    │     │ Clear Entity Custom Name  │
       │ setCustomName(name xCount)│     │ setCustomName(null)       │
       │ setCustomNameVisible(true)│     │ setCustomNameVisible(false│
       └─────────────┬─────────────┘     └───────────────────────────┘


       ┌───────────────────────────┐
       │ SyncedEntityData Packet   │
       │ Sent to all nearby clients│
       └─────────────┬─────────────┘


       ┌───────────────────────────┐
       │ Vanilla Client Renders    │
       │ Clean Floating Name Tag!  │
       └───────────────────────────┘

⚙️ Personalización de umbral (label_min_count)

En Minecraft 26.2, los administradores pueden personalizar exactamente cuándo aparecen las etiquetas usando la GameRule item_clumps:label_min_count:

Valor de label_min_countComportamiento de umbral
-1 (Predeterminado)Tamaño de stack Vanilla: Las etiquetas solo aparecen cuando el grupo supera su tamaño de stack máximo nativo ($> 64$ para adoquín, $> 16$ para perlas, $> 1$ para espadas).
0Siempre visible: Cada entidad de objeto caído en el mundo muestra su etiqueta de cantidad (ej. Tierra x1).
100Filtro de mega-grupos: Las etiquetas se ocultan hasta que un grupo alcanza $101+$ objetos.
1000Modo de rendimiento ultra alto: Solo los grupos masivos de almacenamiento muestran etiquetas.

💻 Implementación del código fuente Java real

De ItemEntityMixin.java en Minecraft 26.2:

java
private void item_clumps$updateVanillaNameTag() {
    if (this.level() == null || this.level().isClientSide()) return;
    ItemStack stack = this.getItem();
    if (stack.isEmpty()) {
        this.setCustomName(null);
        this.setCustomNameVisible(false);
        return;
    }

    int count = stack.getCount();
    int labelMin = DynamicGameRuleManager.getInt(this.level(), ItemClumpsFabric.LABEL_MIN_COUNT);
    int maxStack = (labelMin == -1) ? stack.getOrDefault(DataComponents.MAX_STACK_SIZE, 1) : labelMin;
    
    if (DynamicGameRuleManager.getBoolean(this.level(), ItemClumpsFabric.RENDER_LABELS) && count > maxStack) {
        Component name = stack.getItemName().copy().append(" x" + count);
        if (!this.hasCustomName() || !this.getCustomName().getString().equals(name.getString())) {
            this.setCustomName(name);
            this.setCustomNameVisible(true);
        }
    } else {
        if (this.hasCustomName()) {
            this.setCustomName(null);
            this.setCustomNameVisible(false);
        }
    }
}

@Inject(method = "setItem", at = @At("TAIL"))
private void item_clumps$onSetItem(ItemStack itemStack, CallbackInfo ci) {
    if (!this.level().isClientSide()) {
        this.item_clumps$updateVanillaNameTag();
    }
}

🔗 Documentación relacionada (MC 26.2)

Official documentation & web portal for Dasik Igaijinn mods.