Skip to content

Optimisation des drops de conteneurs ​

La cause des ralentissements ​

Dans le jeu de base, briser un conteneur (coffre, tonneau, boîte de Shulker) scinde chaque emplacement en petits paquets de 10 à 30 objets. Si un coffre stocke des milliers ou des millions d'objets, sa destruction tente de faire apparaître des centaines de milliers d'entités en un seul tick, figeant ou faisant planter le serveur.


🧮 Découpage mathématique et apparition d'entités ​

InventoryDropHelper.dropItemStack intercepte Containers.dropItemStack via ContainersMixin :

java
public class InventoryDropHelper {
    public static void dropItemStack(Level level, double x, double y, double z, ItemStack itemStack) {
        ...
        int maxEntities = DynamicGameRuleManager.getInt(level, StackSizeAdjusterFabric.MAX_DROP_ENTITIES);
        
        while (!itemStack.isEmpty()) {
            int currentCount = itemStack.getCount();
            int splitSize = random.nextInt(21) + 10;
            
            // Sécurité : plafonner le nombre d'entités par slot
            if (currentCount > splitSize * maxEntities) {
                splitSize = (currentCount + maxEntities - 1) / maxEntities;
            }
            
            ItemEntity entity = new ItemEntity(level, xo, yo, zo, itemStack.split(splitSize));
            ...
            level.addFreshEntity(entity);
        }
    }
}

Modélisation mathématique ​

Pour un effectif total $N$ et une règle max_drop_entities valant $M$ :

  1. Taille de base aléatoire $S \in [10, 30]$.
  2. Seuil de division dynamique : $$\text{Si } N > S \times M \implies S_{\text{effective} = \left\lceil \frac{N}{M} \right\rceil$$
  3. Le nombre total d'ItemEntity créées par slot respecte : $$E_{\text{spawned} \le M$$

📊 Benchmarks de performances ​

Valeur de max_drop_entitiesEntités pour 100 000 objetsImpact sur le tick serveurRendu visuel
Vanilla (Sans limite)$\sim 5,000$ entitésCrash ou lag extrêmeExplosion chaotique
8 (Recommandé)$\le 8$ entités$< 1\text{ms}$ de calculDispersion esthétique
1 (Performance max)Exactement $1$ entitéInstantané ($0\text{ms}$)Pile compacte unique

Official documentation & web portal for Dasik Igaijinn mods.