package net.minecraft.world.item.component; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import java.util.Map; import net.minecraft.core.Holder; import net.minecraft.util.Util; import net.minecraft.world.level.saveddata.maps.MapDecorationType; public record MapDecorations(Map decorations) { public static final MapDecorations EMPTY = new MapDecorations(Map.of()); public static final Codec CODEC = Codec.unboundedMap(Codec.STRING, MapDecorations.Entry.CODEC) .xmap(MapDecorations::new, MapDecorations::decorations); public MapDecorations withDecoration(final String id, final MapDecorations.Entry entry) { return new MapDecorations(Util.copyAndPut(this.decorations, id, entry)); } public record Entry(Holder type, double x, double z, float rotation) { public static final Codec CODEC = RecordCodecBuilder.create( i -> i.group( MapDecorationType.CODEC.fieldOf("type").forGetter(MapDecorations.Entry::type), Codec.DOUBLE.fieldOf("x").forGetter(MapDecorations.Entry::x), Codec.DOUBLE.fieldOf("z").forGetter(MapDecorations.Entry::z), Codec.FLOAT.fieldOf("rotation").forGetter(MapDecorations.Entry::rotation) ) .apply(i, MapDecorations.Entry::new) ); } }