diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index caa7f49ee..4b600acac 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -80,6 +80,7 @@ object Versions { object Allay { const val api = "0.2.0" + const val gson = "2.12.1" } object Minestom { diff --git a/platforms/allay/build.gradle.kts b/platforms/allay/build.gradle.kts index d20a23e8d..85128a925 100644 --- a/platforms/allay/build.gradle.kts +++ b/platforms/allay/build.gradle.kts @@ -1,5 +1,7 @@ dependencies { shadedApi(project(":common:implementation:base")) + implementation("com.google.code.gson", "gson", Versions.Allay.gson) + compileOnly("org.allaymc.allay", "api", Versions.Allay.api) } \ No newline at end of file diff --git a/platforms/allay/src/main/java/com/dfsek/terra/allay/Mapping.java b/platforms/allay/src/main/java/com/dfsek/terra/allay/Mapping.java index b2bd6517a..aa647f4e3 100644 --- a/platforms/allay/src/main/java/com/dfsek/terra/allay/Mapping.java +++ b/platforms/allay/src/main/java/com/dfsek/terra/allay/Mapping.java @@ -23,16 +23,18 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Objects; import java.util.TreeMap; + /** - * @author daoge_cmd + * @author daoge_cmd | IWareQ */ public final class Mapping { private static final Gson GSON = new GsonBuilder() - .registerTypeAdapterFactory(new IgnoreFailureTypeAdapterFactory()) - .create(); + .registerTypeAdapterFactory(new IgnoreFailureTypeAdapterFactory()) + .create(); private static final Map> JE_BLOCK_DEFAULT_PROPERTIES = new Object2ObjectOpenHashMap<>(); private static final Map BE_BLOCK_STATE_TO_JE = new Object2ObjectOpenHashMap<>(); @@ -43,10 +45,10 @@ public final class Mapping { private static final BlockState BE_AIR_STATE = BlockTypes.AIR.getDefaultState(); public static void init() { - if (!initBlockStateMapping()) error(); - if (!initJeBlockDefaultProperties()) error(); - if (!initItemMapping()) error(); - if (!initBiomeMapping()) error(); + if(!initBlockStateMapping()) error(); + if(!initJeBlockDefaultProperties()) error(); + if(!initItemMapping()) error(); + if(!initBiomeMapping()) error(); } public static JeBlockState blockStateBeToJe(BlockState beBlockState) { @@ -55,7 +57,7 @@ public final class Mapping { public static BlockState blockStateJeToBe(JeBlockState jeBlockState) { BlockState result = JE_BLOCK_STATE_HASH_TO_BE.get(jeBlockState.getHash()); - if (result == null) { + if(result == null) { TerraAllayPlugin.INSTANCE.getPluginLogger().warn("Failed to find be block state for {}", jeBlockState); return BE_AIR_STATE; } @@ -82,7 +84,7 @@ public final class Mapping { public static Map getJeBlockDefaultProperties(String jeBlockIdentifier) { var defaultProperties = JE_BLOCK_DEFAULT_PROPERTIES.get(jeBlockIdentifier); - if (defaultProperties == null) { + if(defaultProperties == null) { TerraAllayPlugin.INSTANCE.getPluginLogger().warn("Failed to find default properties for {}", jeBlockIdentifier); return Map.of(); } @@ -95,15 +97,15 @@ public final class Mapping { } private static boolean initBiomeMapping() { - try (var stream = Mapping.class.getClassLoader().getResourceAsStream("mapping/biomes.json")) { - if (stream == null) { + try(InputStream stream = Mapping.class.getClassLoader().getResourceAsStream("mapping/biomes.json")) { + if(stream == null) { TerraAllayPlugin.INSTANCE.getPluginLogger().error("biomes mapping not found"); return false; } Map mappings = from(stream, new TypeToken<>() {}); mappings.forEach((javaId, mapping) -> JE_BIOME_ID_TO_BE.put(javaId, mapping.bedrockId())); - } catch (IOException e) { + } catch(IOException e) { TerraAllayPlugin.INSTANCE.getPluginLogger().error("Failed to load biomes mapping", e); return false; } @@ -111,21 +113,21 @@ public final class Mapping { } private static boolean initItemMapping() { - try (var stream = Mapping.class.getClassLoader().getResourceAsStream("mapping/items.json")) { - if (stream == null) { + try(InputStream stream = Mapping.class.getClassLoader().getResourceAsStream("mapping/items.json")) { + if(stream == null) { TerraAllayPlugin.INSTANCE.getPluginLogger().error("items mapping not found"); return false; } Map mappings = from(stream, new TypeToken<>() {}); mappings.forEach((javaId, mapping) -> { - var itemType = ItemTypeSafeGetter - .name(mapping.bedrockId()) - .meta(mapping.bedrockData()) - .itemType(); + ItemType itemType = ItemTypeSafeGetter + .name(mapping.bedrockId()) + .meta(mapping.bedrockData()) + .itemType(); JE_ITEM_ID_TO_BE.put(javaId, itemType); }); - } catch (IOException e) { + } catch(IOException e) { TerraAllayPlugin.INSTANCE.getPluginLogger().error("Failed to load items mapping", e); return false; } @@ -133,8 +135,8 @@ public final class Mapping { } private static boolean initBlockStateMapping() { - try (var stream = Mapping.class.getClassLoader().getResourceAsStream("mapping/blocks.json")) { - if (stream == null) { + try(InputStream stream = Mapping.class.getClassLoader().getResourceAsStream("mapping/blocks.json")) { + if(stream == null) { TerraAllayPlugin.INSTANCE.getPluginLogger().error("blocks mapping not found"); return false; } @@ -142,12 +144,12 @@ public final class Mapping { Map> root = from(stream, new TypeToken<>() {}); List mappings = root.get("mappings"); mappings.forEach(mapping -> { - var jeState = createJeBlockState(mapping.javaState()); - var beState = createBeBlockState(mapping.bedrockState()); + JeBlockState jeState = createJeBlockState(mapping.javaState()); + BlockState beState = createBeBlockState(mapping.bedrockState()); BE_BLOCK_STATE_TO_JE.put(beState, jeState); JE_BLOCK_STATE_HASH_TO_BE.put(jeState.getHash(), beState); }); - } catch (IOException e) { + } catch(IOException e) { TerraAllayPlugin.INSTANCE.getPluginLogger().error("Failed to load blocks mapping", e); return false; } @@ -155,15 +157,15 @@ public final class Mapping { } private static boolean initJeBlockDefaultProperties() { - try (var stream = Mapping.class.getClassLoader().getResourceAsStream("je_block_default_states.json")) { - if (stream == null) { + try(InputStream stream = Mapping.class.getClassLoader().getResourceAsStream("je_block_default_states.json")) { + if(stream == null) { TerraAllayPlugin.INSTANCE.getPluginLogger().error("je_block_default_states.json not found"); return false; } Map> states = from(stream, new TypeToken<>() {}); JE_BLOCK_DEFAULT_PROPERTIES.putAll(states); - } catch (IOException e) { + } catch(IOException e) { throw new RuntimeException(e); } return true; @@ -175,8 +177,8 @@ public final class Mapping { } private static BlockState createBeBlockState(BlockMapping.BedrockState state) { - var getter = BlockStateSafeGetter.name("minecraft:" + state.bedrockId()); - if (state.state() != null) { + BlockStateSafeGetter.Getter getter = BlockStateSafeGetter.name("minecraft:" + state.bedrockId()); + if(state.state() != null) { convertValueType(state.state()).forEach(getter::property); } return getter.blockState(); @@ -184,8 +186,8 @@ public final class Mapping { private static Map convertValueType(Map data) { Map result = new TreeMap<>(); - for (var entry : data.entrySet()) { - if (entry.getValue() instanceof Number number) { + for(Entry entry : data.entrySet()) { + if(entry.getValue() instanceof Number number) { // Convert double to int because the number in json is double result.put(entry.getKey(), number.intValue()); } else { @@ -197,55 +199,61 @@ public final class Mapping { } public static V from(InputStream inputStream, TypeToken typeToken) { - var reader = new JsonReader(new InputStreamReader(Objects.requireNonNull(inputStream))); + JsonReader reader = new JsonReader(new InputStreamReader(Objects.requireNonNull(inputStream))); return GSON.fromJson(reader, typeToken.getType()); } public record BiomeMapping( - @SerializedName("bedrock_id") - int bedrockId + @SerializedName("bedrock_id") + int bedrockId ) { } + public record ItemMapping( - @SerializedName("bedrock_identifier") - String bedrockId, - @SerializedName("bedrock_data") - int bedrockData + @SerializedName("bedrock_identifier") + String bedrockId, + @SerializedName("bedrock_data") + int bedrockData ) { } + public record BlockMapping( - @SerializedName("java_state") - BlockMapping.JavaState javaState, - @SerializedName("bedrock_state") - BlockMapping.BedrockState bedrockState + @SerializedName("java_state") + BlockMapping.JavaState javaState, + @SerializedName("bedrock_state") + BlockMapping.BedrockState bedrockState ) { public record JavaState( - @SerializedName("Name") - String name, - @Nullable - @SerializedName("Properties") - Map properties + @SerializedName("Name") + String name, + @Nullable + @SerializedName("Properties") + Map properties ) { } + public record BedrockState( - @SerializedName("bedrock_identifier") - String bedrockId, - @Nullable - Map state + @SerializedName("bedrock_identifier") + String bedrockId, + @Nullable + Map state ) { } } + /** - * @see IgnoreFailureTypeAdapterFactory + * @see IgnoreFailureTypeAdapterFactory */ public static class IgnoreFailureTypeAdapterFactory implements TypeAdapterFactory { @Override public TypeAdapter create(Gson gson, TypeToken typeToken) { - var delegate = gson.getDelegateAdapter(this, typeToken); + TypeAdapter delegate = gson.getDelegateAdapter(this, typeToken); return new TypeAdapter<>() { @Override public void write(JsonWriter writer, T value) throws IOException { @@ -256,7 +264,7 @@ public final class Mapping { public T read(JsonReader reader) throws IOException { try { return delegate.read(reader); - } catch (Exception e) { + } catch(Exception e) { reader.skipValue(); return null; }