fix: apply project code style

This commit is contained in:
Dmitry Luk 2025-03-07 00:39:22 +04:00
parent 03124cb008
commit 0a93b0fac3
3 changed files with 65 additions and 54 deletions

View File

@ -80,6 +80,7 @@ object Versions {
object Allay { object Allay {
const val api = "0.2.0" const val api = "0.2.0"
const val gson = "2.12.1"
} }
object Minestom { object Minestom {

View File

@ -1,5 +1,7 @@
dependencies { dependencies {
shadedApi(project(":common:implementation:base")) shadedApi(project(":common:implementation:base"))
implementation("com.google.code.gson", "gson", Versions.Allay.gson)
compileOnly("org.allaymc.allay", "api", Versions.Allay.api) compileOnly("org.allaymc.allay", "api", Versions.Allay.api)
} }

View File

@ -23,16 +23,18 @@ import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects; import java.util.Objects;
import java.util.TreeMap; import java.util.TreeMap;
/** /**
* @author daoge_cmd * @author daoge_cmd | IWareQ
*/ */
public final class Mapping { public final class Mapping {
private static final Gson GSON = new GsonBuilder() private static final Gson GSON = new GsonBuilder()
.registerTypeAdapterFactory(new IgnoreFailureTypeAdapterFactory()) .registerTypeAdapterFactory(new IgnoreFailureTypeAdapterFactory())
.create(); .create();
private static final Map<String, Map<String, String>> JE_BLOCK_DEFAULT_PROPERTIES = new Object2ObjectOpenHashMap<>(); private static final Map<String, Map<String, String>> JE_BLOCK_DEFAULT_PROPERTIES = new Object2ObjectOpenHashMap<>();
private static final Map<BlockState, JeBlockState> BE_BLOCK_STATE_TO_JE = new Object2ObjectOpenHashMap<>(); private static final Map<BlockState, JeBlockState> 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(); private static final BlockState BE_AIR_STATE = BlockTypes.AIR.getDefaultState();
public static void init() { public static void init() {
if (!initBlockStateMapping()) error(); if(!initBlockStateMapping()) error();
if (!initJeBlockDefaultProperties()) error(); if(!initJeBlockDefaultProperties()) error();
if (!initItemMapping()) error(); if(!initItemMapping()) error();
if (!initBiomeMapping()) error(); if(!initBiomeMapping()) error();
} }
public static JeBlockState blockStateBeToJe(BlockState beBlockState) { public static JeBlockState blockStateBeToJe(BlockState beBlockState) {
@ -55,7 +57,7 @@ public final class Mapping {
public static BlockState blockStateJeToBe(JeBlockState jeBlockState) { public static BlockState blockStateJeToBe(JeBlockState jeBlockState) {
BlockState result = JE_BLOCK_STATE_HASH_TO_BE.get(jeBlockState.getHash()); 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); TerraAllayPlugin.INSTANCE.getPluginLogger().warn("Failed to find be block state for {}", jeBlockState);
return BE_AIR_STATE; return BE_AIR_STATE;
} }
@ -82,7 +84,7 @@ public final class Mapping {
public static Map<String, String> getJeBlockDefaultProperties(String jeBlockIdentifier) { public static Map<String, String> getJeBlockDefaultProperties(String jeBlockIdentifier) {
var defaultProperties = JE_BLOCK_DEFAULT_PROPERTIES.get(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); TerraAllayPlugin.INSTANCE.getPluginLogger().warn("Failed to find default properties for {}", jeBlockIdentifier);
return Map.of(); return Map.of();
} }
@ -95,15 +97,15 @@ public final class Mapping {
} }
private static boolean initBiomeMapping() { private static boolean initBiomeMapping() {
try (var stream = Mapping.class.getClassLoader().getResourceAsStream("mapping/biomes.json")) { try(InputStream stream = Mapping.class.getClassLoader().getResourceAsStream("mapping/biomes.json")) {
if (stream == null) { if(stream == null) {
TerraAllayPlugin.INSTANCE.getPluginLogger().error("biomes mapping not found"); TerraAllayPlugin.INSTANCE.getPluginLogger().error("biomes mapping not found");
return false; return false;
} }
Map<String, BiomeMapping> mappings = from(stream, new TypeToken<>() {}); Map<String, BiomeMapping> mappings = from(stream, new TypeToken<>() {});
mappings.forEach((javaId, mapping) -> JE_BIOME_ID_TO_BE.put(javaId, mapping.bedrockId())); 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); TerraAllayPlugin.INSTANCE.getPluginLogger().error("Failed to load biomes mapping", e);
return false; return false;
} }
@ -111,21 +113,21 @@ public final class Mapping {
} }
private static boolean initItemMapping() { private static boolean initItemMapping() {
try (var stream = Mapping.class.getClassLoader().getResourceAsStream("mapping/items.json")) { try(InputStream stream = Mapping.class.getClassLoader().getResourceAsStream("mapping/items.json")) {
if (stream == null) { if(stream == null) {
TerraAllayPlugin.INSTANCE.getPluginLogger().error("items mapping not found"); TerraAllayPlugin.INSTANCE.getPluginLogger().error("items mapping not found");
return false; return false;
} }
Map<String, ItemMapping> mappings = from(stream, new TypeToken<>() {}); Map<String, ItemMapping> mappings = from(stream, new TypeToken<>() {});
mappings.forEach((javaId, mapping) -> { mappings.forEach((javaId, mapping) -> {
var itemType = ItemTypeSafeGetter ItemType<?> itemType = ItemTypeSafeGetter
.name(mapping.bedrockId()) .name(mapping.bedrockId())
.meta(mapping.bedrockData()) .meta(mapping.bedrockData())
.itemType(); .itemType();
JE_ITEM_ID_TO_BE.put(javaId, 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); TerraAllayPlugin.INSTANCE.getPluginLogger().error("Failed to load items mapping", e);
return false; return false;
} }
@ -133,8 +135,8 @@ public final class Mapping {
} }
private static boolean initBlockStateMapping() { private static boolean initBlockStateMapping() {
try (var stream = Mapping.class.getClassLoader().getResourceAsStream("mapping/blocks.json")) { try(InputStream stream = Mapping.class.getClassLoader().getResourceAsStream("mapping/blocks.json")) {
if (stream == null) { if(stream == null) {
TerraAllayPlugin.INSTANCE.getPluginLogger().error("blocks mapping not found"); TerraAllayPlugin.INSTANCE.getPluginLogger().error("blocks mapping not found");
return false; return false;
} }
@ -142,12 +144,12 @@ public final class Mapping {
Map<String, List<BlockMapping>> root = from(stream, new TypeToken<>() {}); Map<String, List<BlockMapping>> root = from(stream, new TypeToken<>() {});
List<BlockMapping> mappings = root.get("mappings"); List<BlockMapping> mappings = root.get("mappings");
mappings.forEach(mapping -> { mappings.forEach(mapping -> {
var jeState = createJeBlockState(mapping.javaState()); JeBlockState jeState = createJeBlockState(mapping.javaState());
var beState = createBeBlockState(mapping.bedrockState()); BlockState beState = createBeBlockState(mapping.bedrockState());
BE_BLOCK_STATE_TO_JE.put(beState, jeState); BE_BLOCK_STATE_TO_JE.put(beState, jeState);
JE_BLOCK_STATE_HASH_TO_BE.put(jeState.getHash(), beState); 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); TerraAllayPlugin.INSTANCE.getPluginLogger().error("Failed to load blocks mapping", e);
return false; return false;
} }
@ -155,15 +157,15 @@ public final class Mapping {
} }
private static boolean initJeBlockDefaultProperties() { private static boolean initJeBlockDefaultProperties() {
try (var stream = Mapping.class.getClassLoader().getResourceAsStream("je_block_default_states.json")) { try(InputStream stream = Mapping.class.getClassLoader().getResourceAsStream("je_block_default_states.json")) {
if (stream == null) { if(stream == null) {
TerraAllayPlugin.INSTANCE.getPluginLogger().error("je_block_default_states.json not found"); TerraAllayPlugin.INSTANCE.getPluginLogger().error("je_block_default_states.json not found");
return false; return false;
} }
Map<String, Map<String, String>> states = from(stream, new TypeToken<>() {}); Map<String, Map<String, String>> states = from(stream, new TypeToken<>() {});
JE_BLOCK_DEFAULT_PROPERTIES.putAll(states); JE_BLOCK_DEFAULT_PROPERTIES.putAll(states);
} catch (IOException e) { } catch(IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
return true; return true;
@ -175,8 +177,8 @@ public final class Mapping {
} }
private static BlockState createBeBlockState(BlockMapping.BedrockState state) { private static BlockState createBeBlockState(BlockMapping.BedrockState state) {
var getter = BlockStateSafeGetter.name("minecraft:" + state.bedrockId()); BlockStateSafeGetter.Getter getter = BlockStateSafeGetter.name("minecraft:" + state.bedrockId());
if (state.state() != null) { if(state.state() != null) {
convertValueType(state.state()).forEach(getter::property); convertValueType(state.state()).forEach(getter::property);
} }
return getter.blockState(); return getter.blockState();
@ -184,8 +186,8 @@ public final class Mapping {
private static Map<String, Object> convertValueType(Map<String, Object> data) { private static Map<String, Object> convertValueType(Map<String, Object> data) {
Map<String, Object> result = new TreeMap<>(); Map<String, Object> result = new TreeMap<>();
for (var entry : data.entrySet()) { for(Entry<String, Object> entry : data.entrySet()) {
if (entry.getValue() instanceof Number number) { if(entry.getValue() instanceof Number number) {
// Convert double to int because the number in json is double // Convert double to int because the number in json is double
result.put(entry.getKey(), number.intValue()); result.put(entry.getKey(), number.intValue());
} else { } else {
@ -197,55 +199,61 @@ public final class Mapping {
} }
public static <V> V from(InputStream inputStream, TypeToken<V> typeToken) { public static <V> V from(InputStream inputStream, TypeToken<V> 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()); return GSON.fromJson(reader, typeToken.getType());
} }
public record BiomeMapping( public record BiomeMapping(
@SerializedName("bedrock_id") @SerializedName("bedrock_id")
int bedrockId int bedrockId
) { ) {
} }
public record ItemMapping( public record ItemMapping(
@SerializedName("bedrock_identifier") @SerializedName("bedrock_identifier")
String bedrockId, String bedrockId,
@SerializedName("bedrock_data") @SerializedName("bedrock_data")
int bedrockData int bedrockData
) { ) {
} }
public record BlockMapping( public record BlockMapping(
@SerializedName("java_state") @SerializedName("java_state")
BlockMapping.JavaState javaState, BlockMapping.JavaState javaState,
@SerializedName("bedrock_state") @SerializedName("bedrock_state")
BlockMapping.BedrockState bedrockState BlockMapping.BedrockState bedrockState
) { ) {
public record JavaState( public record JavaState(
@SerializedName("Name") @SerializedName("Name")
String name, String name,
@Nullable @Nullable
@SerializedName("Properties") @SerializedName("Properties")
Map<String, String> properties Map<String, String> properties
) { ) {
} }
public record BedrockState( public record BedrockState(
@SerializedName("bedrock_identifier") @SerializedName("bedrock_identifier")
String bedrockId, String bedrockId,
@Nullable @Nullable
Map<String, Object> state Map<String, Object> state
) { ) {
} }
} }
/** /**
* @see <a href="https://stackoverflow.com/questions/59655279/is-there-an-easy-way-to-make-gson-skip-a-field-if-theres-an-error-deserializing">IgnoreFailureTypeAdapterFactory</a> * @see <a
* href="https://stackoverflow.com/questions/59655279/is-there-an-easy-way-to-make-gson-skip-a-field-if-theres-an-error
* -deserializing">IgnoreFailureTypeAdapterFactory</a>
*/ */
public static class IgnoreFailureTypeAdapterFactory implements TypeAdapterFactory { public static class IgnoreFailureTypeAdapterFactory implements TypeAdapterFactory {
@Override @Override
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) { public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) {
var delegate = gson.getDelegateAdapter(this, typeToken); TypeAdapter<T> delegate = gson.getDelegateAdapter(this, typeToken);
return new TypeAdapter<>() { return new TypeAdapter<>() {
@Override @Override
public void write(JsonWriter writer, T value) throws IOException { public void write(JsonWriter writer, T value) throws IOException {
@ -256,7 +264,7 @@ public final class Mapping {
public T read(JsonReader reader) throws IOException { public T read(JsonReader reader) throws IOException {
try { try {
return delegate.read(reader); return delegate.read(reader);
} catch (Exception e) { } catch(Exception e) {
reader.skipValue(); reader.skipValue();
return null; return null;
} }