LevelDatToSavedDataPreparationFix.java

net.minecraft.util.datafix.fixes.LevelDatToSavedDataPreparationFix

信息

  • 全限定名:net.minecraft.util.datafix.fixes.LevelDatToSavedDataPreparationFix
  • 类型:public class
  • 包:net.minecraft.util.datafix.fixes
  • 源码路径:src/main/java/net/minecraft/util/datafix/fixes/LevelDatToSavedDataPreparationFix.java
  • 起始行号:L11
  • 继承:DataFix
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

构造器

public LevelDatToSavedDataPreparationFix(Schema outputSchema) @ L12

  • 构造器名:LevelDatToSavedDataPreparationFix
  • 源码定位:L12
  • 修饰符:public

参数:

  • outputSchema: Schema

说明:

TODO

方法

下面的方法块按源码顺序生成。

protected TypeRewriteRule makeRule() @ L16

  • 方法名:makeRule
  • 源码定位:L16
  • 返回类型:TypeRewriteRule
  • 修饰符:protected

参数:

说明:

TODO

private static Dynamic<?> fixDragonFight(Dynamic<?> levelData) @ L28

  • 方法名:fixDragonFight
  • 源码定位:L28
  • 返回类型:Dynamic<?>
  • 修饰符:private static

参数:

  • levelData: Dynamic<?>

说明:

TODO

private static Dynamic<?> fixWanderingTrader(Dynamic<?> levelData) @ L49

  • 方法名:fixWanderingTrader
  • 源码定位:L49
  • 返回类型:Dynamic<?>
  • 修饰符:private static

参数:

  • levelData: Dynamic<?>

说明:

TODO

private static Dynamic<?> fixWeatherData(Dynamic<?> levelData) @ L59

  • 方法名:fixWeatherData
  • 源码定位:L59
  • 返回类型:Dynamic<?>
  • 修饰符:private static

参数:

  • levelData: Dynamic<?>

说明:

TODO

private static Dynamic<?> fixScheduledEvents(Dynamic<?> levelData) @ L74

  • 方法名:fixScheduledEvents
  • 源码定位:L74
  • 返回类型:Dynamic<?>
  • 修饰符:private static

参数:

  • levelData: Dynamic<?>

说明:

TODO

private static Dynamic<?> fixWorldGenSettings(Dynamic<?> levelData) @ L89

  • 方法名:fixWorldGenSettings
  • 源码定位:L89
  • 返回类型:Dynamic<?>
  • 修饰符:private static

参数:

  • levelData: Dynamic<?>

说明:

TODO

代码

public class LevelDatToSavedDataPreparationFix extends DataFix {
    public LevelDatToSavedDataPreparationFix(Schema outputSchema) {
        super(outputSchema, true);
    }
 
    @Override
    protected TypeRewriteRule makeRule() {
        Type<?> levelType = this.getInputSchema().getType(References.LEVEL);
        return this.writeFixAndRead("LevelSplitSavedDataPreparationFix", levelType, this.getOutputSchema().getType(References.LEVEL), levelData -> {
            levelData = fixDragonFight(levelData);
            levelData = fixWanderingTrader(levelData);
            levelData = fixWeatherData(levelData);
            levelData = fixScheduledEvents(levelData);
            return fixWorldGenSettings(levelData);
        });
    }
 
    private static Dynamic<?> fixDragonFight(Dynamic<?> levelData) {
        return levelData.renameAndFixField(
            "DragonFight",
            "dragon_fight",
            dragonFight -> {
                Dynamic<?> newFight = dragonFight.renameField("NeedsStateScanning", "needs_state_scanning")
                    .renameField("DragonKilled", "dragon_killed")
                    .renameField("PreviouslyKilled", "previously_killed")
                    .renameField("Dragon", "dragon_uuid")
                    .renameField("ExitPortalLocation", "exit_portal_location")
                    .renameField("Gateways", "gateways");
                boolean isRespawning = dragonFight.get("IsRespawning").asBoolean(false);
                if (isRespawning) {
                    newFight = newFight.set("respawn_stage", levelData.createString("start")).set("respawn_time", levelData.createInt(0));
                }
 
                return newFight.remove("IsRespawning");
            }
        );
    }
 
    private static Dynamic<?> fixWanderingTrader(Dynamic<?> levelData) {
        Dynamic<?> wanderingTraderData = levelData.emptyMap()
            .set("spawn_delay", levelData.createInt(levelData.get("WanderingTraderSpawnDelay").asInt(24000)))
            .set("spawn_chance", levelData.createInt(levelData.get("WanderingTraderSpawnChance").asInt(25)));
        return levelData.set("wandering_trader_migration_data", wanderingTraderData)
            .remove("WanderingTraderSpawnDelay")
            .remove("WanderingTraderSpawnChance")
            .remove("WanderingTraderId");
    }
 
    private static Dynamic<?> fixWeatherData(Dynamic<?> levelData) {
        Dynamic<?> weatherData = levelData.emptyMap()
            .set("clear_weather_time", levelData.createInt(levelData.get("clearWeatherTime").asInt(0)))
            .set("rain_time", levelData.createInt(levelData.get("rainTime").asInt(0)))
            .set("thunder_time", levelData.createInt(levelData.get("thunderTime").asInt(0)))
            .set("raining", levelData.createBoolean(levelData.get("raining").asBoolean(false)))
            .set("thundering", levelData.createBoolean(levelData.get("thundering").asBoolean(false)));
        return levelData.remove("clearWeatherTime")
            .remove("rainTime")
            .remove("thunderTime")
            .remove("raining")
            .remove("thundering")
            .set("weather_data", weatherData);
    }
 
    private static Dynamic<?> fixScheduledEvents(Dynamic<?> levelData) {
        List<? extends Dynamic<?>> scheduledEvents = levelData.get("ScheduledEvents").asList(Function.identity());
        Dynamic<?> eventList = levelData.createList(
            scheduledEvents.stream()
                .map(
                    event -> event.renameField("Name", "id")
                        .renameField("TriggerTime", "trigger_time")
                        .renameAndFixField("Callback", "callback", callback -> callback.renameField("Type", "type").renameField("Name", "id"))
                )
        );
        Dynamic<?> newEvents = levelData.emptyMap();
        newEvents = newEvents.set("events", eventList);
        return levelData.remove("ScheduledEvents").set("scheduled_events", newEvents);
    }
 
    private static Dynamic<?> fixWorldGenSettings(Dynamic<?> levelData) {
        return levelData.renameAndFixField("WorldGenSettings", "world_gen_settings", tag -> tag.renameField("generate_features", "generate_structures"));
    }
}

引用的其他类