225 lines
12 KiB
Java
225 lines
12 KiB
Java
package net.minecraft.util.datafix.fixes;
|
|
|
|
import net.minecraft.Util;
|
|
import java.util.HashMap;
|
|
import java.util.Collections;
|
|
import javax.annotation.Nullable;
|
|
import java.util.List;
|
|
import java.util.Iterator;
|
|
import java.util.stream.Collector;
|
|
import java.util.function.Function;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Stream;
|
|
import com.google.common.collect.ImmutableMap;
|
|
import com.mojang.datafixers.util.Pair;
|
|
import com.google.common.collect.Lists;
|
|
import java.util.Locale;
|
|
import com.google.common.collect.Maps;
|
|
import com.google.common.base.Splitter;
|
|
import com.google.gson.JsonElement;
|
|
import com.mojang.datafixers.types.Type;
|
|
import java.util.Optional;
|
|
import com.mojang.datafixers.Typed;
|
|
import net.minecraft.util.GsonHelper;
|
|
import com.mojang.datafixers.types.JsonOps;
|
|
import com.mojang.datafixers.Dynamic;
|
|
import com.mojang.datafixers.types.DynamicOps;
|
|
import com.mojang.datafixers.TypeRewriteRule;
|
|
import com.mojang.datafixers.schemas.Schema;
|
|
import java.util.Map;
|
|
import com.mojang.datafixers.DataFix;
|
|
|
|
public class LevelDataGeneratorOptionsFix extends DataFix {
|
|
static final Map<String, String> MAP;
|
|
|
|
public LevelDataGeneratorOptionsFix(final Schema schema, final boolean boolean2) {
|
|
super(schema, boolean2);
|
|
}
|
|
|
|
protected TypeRewriteRule makeRule() {
|
|
final Type<?> type2 = this.getOutputSchema().getType(References.LEVEL);
|
|
final Dynamic<?> dynamic3;
|
|
final Optional<String> optional4;
|
|
String string6;
|
|
Dynamic<?> dynamic4;
|
|
Dynamic<JsonElement> dynamic5;
|
|
final Type type3;
|
|
return this.fixTypeEverywhereTyped("LevelDataGeneratorOptionsFix", this.getInputSchema().getType(References.LEVEL), (Type)type2, typed -> {
|
|
dynamic3 = typed.write();
|
|
optional4 = (Optional<String>)dynamic3.get("generatorOptions").asString();
|
|
if ("flat".equalsIgnoreCase(dynamic3.get("generatorName").asString(""))) {
|
|
string6 = optional4.orElse("");
|
|
dynamic4 = dynamic3.set("generatorOptions", (Dynamic)LevelDataGeneratorOptionsFix.convert(string6, (com.mojang.datafixers.types.DynamicOps<Object>)dynamic3.getOps()));
|
|
}
|
|
else if ("buffet".equalsIgnoreCase(dynamic3.get("generatorName").asString("")) && optional4.isPresent()) {
|
|
dynamic5 = (Dynamic<JsonElement>)new Dynamic((DynamicOps)JsonOps.INSTANCE, GsonHelper.parse(optional4.get(), true));
|
|
dynamic4 = dynamic3.set("generatorOptions", dynamic5.convert(dynamic3.getOps()));
|
|
}
|
|
else {
|
|
dynamic4 = dynamic3;
|
|
}
|
|
return (Typed)((Optional)type3.readTyped((Dynamic)dynamic4).getSecond()).orElseThrow(() -> new IllegalStateException("Could not read new level type."));
|
|
});
|
|
}
|
|
|
|
private static <T> Dynamic<T> convert(final String string, final DynamicOps<T> dynamicOps) {
|
|
final Iterator<String> iterator3 = Splitter.on(';').split(string).iterator();
|
|
String string2 = "minecraft:plains";
|
|
final Map<String, Map<String, String>> map6 = Maps.newHashMap();
|
|
List<Pair<Integer, String>> list4;
|
|
if (!string.isEmpty() && iterator3.hasNext()) {
|
|
list4 = getLayersInfoFromString(iterator3.next());
|
|
if (!list4.isEmpty()) {
|
|
if (iterator3.hasNext()) {
|
|
string2 = LevelDataGeneratorOptionsFix.MAP.getOrDefault(iterator3.next(), "minecraft:plains");
|
|
}
|
|
if (iterator3.hasNext()) {
|
|
final String[] split;
|
|
final String[] arr7 = split = iterator3.next().toLowerCase(Locale.ROOT).split(",");
|
|
for (final String string3 : split) {
|
|
final String[] arr8 = string3.split("\\(", 2);
|
|
if (!arr8[0].isEmpty()) {
|
|
map6.put(arr8[0], Maps.newHashMap());
|
|
if (arr8.length > 1 && arr8[1].endsWith(")") && arr8[1].length() > 1) {
|
|
final String[] split2;
|
|
final String[] arr9 = split2 = arr8[1].substring(0, arr8[1].length() - 1).split(" ");
|
|
for (final String string4 : split2) {
|
|
final String[] arr10 = string4.split("=", 2);
|
|
if (arr10.length == 2) {
|
|
map6.get(arr8[0]).put(arr10[0], arr10[1]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
map6.put("village", Maps.newHashMap());
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
list4 = Lists.newArrayList();
|
|
list4.add((Pair<Integer, String>)Pair.of(1, "minecraft:bedrock"));
|
|
list4.add((Pair<Integer, String>)Pair.of(2, "minecraft:dirt"));
|
|
list4.add((Pair<Integer, String>)Pair.of(1, "minecraft:grass_block"));
|
|
map6.put("village", Maps.newHashMap());
|
|
}
|
|
final T object7 = (T)dynamicOps.createList((Stream)list4.stream().map(pair -> dynamicOps.createMap((Map)ImmutableMap.of(dynamicOps.createString("height"), dynamicOps.createInt((int)pair.getFirst()), dynamicOps.createString("block"), dynamicOps.createString((String)pair.getSecond())))));
|
|
final T object8 = (T)dynamicOps.createMap((Map)map6.entrySet().stream().map(entry -> Pair.of(dynamicOps.createString(entry.getKey().toLowerCase(Locale.ROOT)), dynamicOps.createMap((Map)((Map)entry.getValue()).entrySet().stream().map(entry -> Pair.of(dynamicOps.createString((String)entry.getKey()), dynamicOps.createString((String)entry.getValue()))).collect(Collectors.toMap(Pair::getFirst, Pair::getSecond))))).collect(Collectors.toMap(Pair::getFirst, Pair::getSecond)));
|
|
return (Dynamic<T>)new Dynamic((DynamicOps)dynamicOps, dynamicOps.createMap((Map)ImmutableMap.of(dynamicOps.createString("layers"), object7, dynamicOps.createString("biome"), dynamicOps.createString(string2), dynamicOps.createString("structures"), object8)));
|
|
}
|
|
|
|
@Nullable
|
|
private static Pair<Integer, String> getLayerInfoFromString(final String string) {
|
|
final String[] arr2 = string.split("\\*", 2);
|
|
int integer3 = 0;
|
|
Label_0030: {
|
|
if (arr2.length == 2) {
|
|
try {
|
|
integer3 = Integer.parseInt(arr2[0]);
|
|
break Label_0030;
|
|
}
|
|
catch (NumberFormatException numberFormatException4) {
|
|
return null;
|
|
}
|
|
}
|
|
integer3 = 1;
|
|
}
|
|
final String string2 = arr2[arr2.length - 1];
|
|
return (Pair<Integer, String>)Pair.of(integer3, string2);
|
|
}
|
|
|
|
private static List<Pair<Integer, String>> getLayersInfoFromString(final String string) {
|
|
final List<Pair<Integer, String>> list2 = Lists.newArrayList();
|
|
final String[] split;
|
|
final String[] arr3 = split = string.split(",");
|
|
for (final String string2 : split) {
|
|
final Pair<Integer, String> pair8 = getLayerInfoFromString(string2);
|
|
if (pair8 == null) {
|
|
return Collections.<Pair<Integer, String>>emptyList();
|
|
}
|
|
list2.add(pair8);
|
|
}
|
|
return list2;
|
|
}
|
|
|
|
static {
|
|
MAP = Util.<Map<String, String>>make(Maps.newHashMap(), hashMap -> {
|
|
hashMap.put("0", "minecraft:ocean");
|
|
hashMap.put("1", "minecraft:plains");
|
|
hashMap.put("2", "minecraft:desert");
|
|
hashMap.put("3", "minecraft:mountains");
|
|
hashMap.put("4", "minecraft:forest");
|
|
hashMap.put("5", "minecraft:taiga");
|
|
hashMap.put("6", "minecraft:swamp");
|
|
hashMap.put("7", "minecraft:river");
|
|
hashMap.put("8", "minecraft:nether");
|
|
hashMap.put("9", "minecraft:the_end");
|
|
hashMap.put("10", "minecraft:frozen_ocean");
|
|
hashMap.put("11", "minecraft:frozen_river");
|
|
hashMap.put("12", "minecraft:snowy_tundra");
|
|
hashMap.put("13", "minecraft:snowy_mountains");
|
|
hashMap.put("14", "minecraft:mushroom_fields");
|
|
hashMap.put("15", "minecraft:mushroom_field_shore");
|
|
hashMap.put("16", "minecraft:beach");
|
|
hashMap.put("17", "minecraft:desert_hills");
|
|
hashMap.put("18", "minecraft:wooded_hills");
|
|
hashMap.put("19", "minecraft:taiga_hills");
|
|
hashMap.put("20", "minecraft:mountain_edge");
|
|
hashMap.put("21", "minecraft:jungle");
|
|
hashMap.put("22", "minecraft:jungle_hills");
|
|
hashMap.put("23", "minecraft:jungle_edge");
|
|
hashMap.put("24", "minecraft:deep_ocean");
|
|
hashMap.put("25", "minecraft:stone_shore");
|
|
hashMap.put("26", "minecraft:snowy_beach");
|
|
hashMap.put("27", "minecraft:birch_forest");
|
|
hashMap.put("28", "minecraft:birch_forest_hills");
|
|
hashMap.put("29", "minecraft:dark_forest");
|
|
hashMap.put("30", "minecraft:snowy_taiga");
|
|
hashMap.put("31", "minecraft:snowy_taiga_hills");
|
|
hashMap.put("32", "minecraft:giant_tree_taiga");
|
|
hashMap.put("33", "minecraft:giant_tree_taiga_hills");
|
|
hashMap.put("34", "minecraft:wooded_mountains");
|
|
hashMap.put("35", "minecraft:savanna");
|
|
hashMap.put("36", "minecraft:savanna_plateau");
|
|
hashMap.put("37", "minecraft:badlands");
|
|
hashMap.put("38", "minecraft:wooded_badlands_plateau");
|
|
hashMap.put("39", "minecraft:badlands_plateau");
|
|
hashMap.put("40", "minecraft:small_end_islands");
|
|
hashMap.put("41", "minecraft:end_midlands");
|
|
hashMap.put("42", "minecraft:end_highlands");
|
|
hashMap.put("43", "minecraft:end_barrens");
|
|
hashMap.put("44", "minecraft:warm_ocean");
|
|
hashMap.put("45", "minecraft:lukewarm_ocean");
|
|
hashMap.put("46", "minecraft:cold_ocean");
|
|
hashMap.put("47", "minecraft:deep_warm_ocean");
|
|
hashMap.put("48", "minecraft:deep_lukewarm_ocean");
|
|
hashMap.put("49", "minecraft:deep_cold_ocean");
|
|
hashMap.put("50", "minecraft:deep_frozen_ocean");
|
|
hashMap.put("127", "minecraft:the_void");
|
|
hashMap.put("129", "minecraft:sunflower_plains");
|
|
hashMap.put("130", "minecraft:desert_lakes");
|
|
hashMap.put("131", "minecraft:gravelly_mountains");
|
|
hashMap.put("132", "minecraft:flower_forest");
|
|
hashMap.put("133", "minecraft:taiga_mountains");
|
|
hashMap.put("134", "minecraft:swamp_hills");
|
|
hashMap.put("140", "minecraft:ice_spikes");
|
|
hashMap.put("149", "minecraft:modified_jungle");
|
|
hashMap.put("151", "minecraft:modified_jungle_edge");
|
|
hashMap.put("155", "minecraft:tall_birch_forest");
|
|
hashMap.put("156", "minecraft:tall_birch_hills");
|
|
hashMap.put("157", "minecraft:dark_forest_hills");
|
|
hashMap.put("158", "minecraft:snowy_taiga_mountains");
|
|
hashMap.put("160", "minecraft:giant_spruce_taiga");
|
|
hashMap.put("161", "minecraft:giant_spruce_taiga_hills");
|
|
hashMap.put("162", "minecraft:modified_gravelly_mountains");
|
|
hashMap.put("163", "minecraft:shattered_savanna");
|
|
hashMap.put("164", "minecraft:shattered_savanna_plateau");
|
|
hashMap.put("165", "minecraft:eroded_badlands");
|
|
hashMap.put("166", "minecraft:modified_wooded_badlands_plateau");
|
|
hashMap.put("167", "minecraft:modified_badlands_plateau");
|
|
});
|
|
}
|
|
}
|