Étiquettes Holographiques (MC 26.1.2)
Ce document détaille le système d'indicateurs de quantité flottants et le rendu natif des étiquettes de noms vanilla d'Item Clumps pour Minecraft 26.1.2.
📊 Fiche Technique de Fonctionnalité
| Propriété | Spécification |
|---|---|
| Nom du Système | Fournisseur d'Étiquettes Holographiques Côté Serveur |
| Stratégie d'Affichage | Étiquettes de noms vanilla natives (setCustomName / setCustomNameVisible) |
| Mod Client Requis ? | Non (100 % géré par les clients vanilla non modifiés) |
| Format de l'Étiquette | <nom_item> x<nombre> (ex. Diamant x128, Bûche de chêne x500) |
| Règle de Seuil | S'affiche lorsque $\text{count} > \text{maxStackSize}$ (ex. $> 64$ pour la pierre) |
| GameRule d'Affichage | item_clumps:render_labels (Défaut : true) |
🏷️ Affichage des Étiquettes Flottantes sur Clients Vanilla
Item Clumps s'appuie sur le moteur de rendu d'étiquettes de noms natif de Minecraft Vanilla :
┌───────────────────────────────┐
│ Ground Item Stack Size Changes│
└───────────────┬───────────────┘
│
▼
┌───────────────────────────────┐
│ Is render_labels Enabled? │
│ Does count > maxStackSize? │
└───────────────┬───────────────┘
│
┌────────────────┴────────────────┐
│ (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! │
└───────────────────────────┘💻 Implémentation du Code Source Java Réel
Depuis ItemEntityMixin.java dans Minecraft 26.1.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 maxStack = stack.getMaxStackSize();
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 = "tick", at = @At("HEAD"))
private void item_clumps$onTick(CallbackInfo ci) {
if (!this.level().isClientSide()) {
this.item_clumps$updateVanillaNameTag();
}
}
@Inject(method = "setItem", at = @At("TAIL"))
private void item_clumps$onSetItem(ItemStack itemStack, CallbackInfo ci) {
if (!this.level().isClientSide()) {
this.item_clumps$updateVanillaNameTag();
}
}