Etiquetas Holográficas e Limiares de Quantidade (MC 26.2)
Este documento detalha o sistema de indicadores flutuantes de quantidade, filtro de limiar label_min_count e renderização de etiquetas vanilla do Item Clumps para Minecraft 26.2.
📊 Ficha Técnica do Recurso
| Propriedade | Especificação |
|---|---|
| Nome do Sistema | Provedor de Etiquetas Holográficas no Servidor |
| Estratégia de Renderização | Etiquetas de nome personalizadas nativas do vanilla (setCustomName / setCustomNameVisible) |
| Mod no Cliente Necessário? | Não (100% renderizado por clientes vanilla não modificados) |
| Padrão de Formato de Etiqueta | <nome_localizado_item> x<quantidade> (ex.: Diamond x128, Oak Log x500) |
| GameRule de Limiar | item_clumps:label_min_count (Padrão: -1, usa DataComponents.MAX_STACK_SIZE) |
| GameRule de Alternância | item_clumps:render_labels (Padrão: true) |
| Custo por Tick | $0.00\text{ ms}$ (Disparado estritamente na mutação de setItem()) |
🏷️ Como as Etiquetas Flutuantes Renderizam em Clientes Vanilla
Em vez de exigir um mod no cliente ou enviar pacotes de renderização OpenGL personalizados, o Item Clumps utiliza a renderização nativa de etiquetas de nome de entidades do 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! │
└───────────────────────────┘⚙️ Personalização de Limiar (label_min_count)
No Minecraft 26.2, administradores podem personalizar exatamente quando as etiquetas aparecem usando a GameRule item_clumps:label_min_count:
Valor de label_min_count | Comportamento do Limiar |
|---|---|
-1 (Padrão) | Tamanho de Pilha Vanilla: Etiquetas só aparecem quando o agrupamento excede o tamanho máximo de pilha nativo ($> 64$ para pedregulho, $> 16$ para pérolas, $> 1$ para espadas). |
0 | Sempre Visível: Toda entidade de item caído no mundo exibe sua etiqueta de quantidade (ex.: Terra x1). |
100 | Filtro de Mega-Agrupamentos: Etiquetas são ocultadas até que o agrupamento alcance $101+$ itens. |
1000 | Modo de Rendimento Ultra Alto: Apenas agrupamentos massivos de armazenamento exibem etiquetas. |
💻 Implementação do Código-Fonte Java Real
De ItemEntityMixin.java no 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();
}
}