Skip to content

GameRule-Codec & Serialisierung

ThemaSpezifikation
SerialisierungsfehlerAbsturz in SavedDataStorage.encodeUnchecked beim Welt-Speichern
Behoben in Release1.8.15
Ganzzahlgrenzenmin = Integer.MIN_VALUE (oder Math.min(Integer.MIN_VALUE, defaultValue))

🛠️ Der Integer-GameRule-Codec-Fix

In Minecraft 26.2 werden dynamische GameRules über SavedDataStorage.encodeUnchecked in level.dat / game_rules.dat serialisiert. In frühen Versionen führte die Registrierung von Integer-Regeln ohne explizite Untergrenze dazu, dass der Codec min = 0 erzwang, was beim Speichern negativer Zahlen oder Standardwerten zu einer IllegalStateException führte.

Die Lösung in DynamicGameRuleManager

java
// IntegerBuilder initialization fix in DynamicGameRuleManager
public class IntegerBuilder {
    private int min = Integer.MIN_VALUE;
    private int max = Integer.MAX_VALUE;

    public GameRule<Integer> register() {
        int effectiveMin = Math.min(min, defaultValue);
        int effectiveMax = Math.max(max, defaultValue);
        // Uses Codec.INT.intRange(effectiveMin, effectiveMax) to prevent encodeUnchecked bounds check failure
        GameRule<Integer> rule = new GameRule<>(
            GameRuleType.INT, defaultValue, Codec.INT.intRange(effectiveMin, effectiveMax), 
            FeatureFlagSet.of(), category, visitor
        );
        return Registry.register(BuiltInRegistries.GAME_RULE, Identifier.parse(ruleName), rule);
    }
}

🔒 NBT-Namespace-Sicherheit

Verwenden Sie bei dynamischen Regeln immer das Format modid:rule_name ([ERR-20260510-002]). Regeln ohne Namespace können nicht sauber in die Weltdaten serialisiert werden, was zu stillem Konfigurationsverlust beim Server-Neustart führt.


🔗 Verwandte Seiten

Official documentation & web portal for Dasik Igaijinn mods.