package net.minecraft.util.datafix.fixes; import com.mojang.datafixers.DSL; import com.mojang.datafixers.DataFix; import com.mojang.datafixers.OpticFinder; import com.mojang.datafixers.TypeRewriteRule; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.Type; import com.mojang.serialization.Dynamic; import java.util.Optional; public class HeightmapRenamingFix extends DataFix { public HeightmapRenamingFix(final Schema outputSchema, final boolean changesType) { super(outputSchema, changesType); } @Override protected TypeRewriteRule makeRule() { Type inputType = this.getInputSchema().getType(References.CHUNK); OpticFinder levelF = inputType.findField("Level"); return this.fixTypeEverywhereTyped( "HeightmapRenamingFix", inputType, input -> input.updateTyped(levelF, level -> level.update(DSL.remainderFinder(), this::fix)) ); } private Dynamic fix(final Dynamic tag) { Optional> heightmaps = tag.get("Heightmaps").result(); if (heightmaps.isEmpty()) { return tag; } else { Dynamic heightmapsTag = (Dynamic)heightmaps.get(); Optional> liquid = heightmapsTag.get("LIQUID").result(); if (liquid.isPresent()) { heightmapsTag = heightmapsTag.remove("LIQUID"); heightmapsTag = heightmapsTag.set("WORLD_SURFACE_WG", (Dynamic)liquid.get()); } Optional> solid = heightmapsTag.get("SOLID").result(); if (solid.isPresent()) { heightmapsTag = heightmapsTag.remove("SOLID"); heightmapsTag = heightmapsTag.set("OCEAN_FLOOR_WG", (Dynamic)solid.get()); heightmapsTag = heightmapsTag.set("OCEAN_FLOOR", (Dynamic)solid.get()); } Optional> light = heightmapsTag.get("LIGHT").result(); if (light.isPresent()) { heightmapsTag = heightmapsTag.remove("LIGHT"); heightmapsTag = heightmapsTag.set("LIGHT_BLOCKING", (Dynamic)light.get()); } Optional> rain = heightmapsTag.get("RAIN").result(); if (rain.isPresent()) { heightmapsTag = heightmapsTag.remove("RAIN"); heightmapsTag = heightmapsTag.set("MOTION_BLOCKING", (Dynamic)rain.get()); heightmapsTag = heightmapsTag.set("MOTION_BLOCKING_NO_LEAVES", (Dynamic)rain.get()); } return tag.set("Heightmaps", heightmapsTag); } } }