package net.minecraft.util.datafix.fixes; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.mojang.datafixers.DSL; import com.mojang.datafixers.DataFix; import com.mojang.datafixers.TypeRewriteRule; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.Type; import com.mojang.datafixers.util.Pair; import com.mojang.serialization.Dynamic; import com.mojang.serialization.DynamicOps; import java.util.Map; import java.util.Objects; import java.util.Optional; public class ReorganizePoi extends DataFix { public ReorganizePoi(Schema p_16853_, boolean p_16854_) { super(p_16853_, p_16854_); } @Override protected TypeRewriteRule makeRule() { Type>> type = DSL.named(References.POI_CHUNK.typeName(), DSL.remainderType()); if (!Objects.equals(type, this.getInputSchema().getType(References.POI_CHUNK))) { throw new IllegalStateException("Poi type is not what was expected."); } else { return this.fixTypeEverywhere("POI reorganization", type, p_16860_ -> p_145640_ -> p_145640_.mapSecond(ReorganizePoi::cap)); } } private static Dynamic cap(Dynamic p_16858_) { Map, Dynamic> map = Maps.newHashMap(); for (int i = 0; i < 16; i++) { String s = String.valueOf(i); Optional> optional = p_16858_.get(s).result(); if (optional.isPresent()) { Dynamic dynamic = optional.get(); Dynamic dynamic1 = p_16858_.createMap(ImmutableMap.of(p_16858_.createString("Records"), dynamic)); map.put(p_16858_.createString(Integer.toString(i)), dynamic1); p_16858_ = p_16858_.remove(s); } } return p_16858_.set("Sections", p_16858_.createMap(map)); } }