diff --git a/build.gradle.kts b/build.gradle.kts index 91296d2cc..d189d8080 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,68 +1,45 @@ plugins { base + java id("io.freefair.lombok") version "9.1.0" } -buildscript { - repositories { - mavenCentral() - maven("https://plugins.gradle.org/m2/") - } -} - -allprojects { - group = "net.swofty" - version = "1.0" - - repositories { - mavenLocal() - mavenCentral() - } -} +group = "net.swofty" +version = "1.0" subprojects { - apply(plugin = "io.freefair.lombok") apply(plugin = "java") apply(plugin = "java-library") - apply(plugin = "application") + apply(plugin = "io.freefair.lombok") - plugins.withType { - repositories { - mavenLocal() - mavenCentral() - gradlePluginPortal() + repositories { + mavenCentral() + mavenLocal() + maven("https://repo.viaversion.com") + maven("https://jitpack.io") + } - maven("https://repo.viaversion.com") - maven("https://jitpack.io") + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(25)) } + } - dependencies { - "testImplementation"("org.junit.jupiter:junit-jupiter:6.0.2") - - "implementation"("org.reflections:reflections:0.10.2") - "implementation"("com.fasterxml.jackson.core:jackson-databind:2.17.0") - "implementation"("com.fasterxml.jackson.core:jackson-annotations:2.17.0") - "implementation"("com.fasterxml.jackson.core:jackson-core:2.17.0") - "implementation"("org.json:json:20240303") - "compileOnly"("org.projectlombok:lombok:1.18.42") - } + dependencies { + testImplementation("org.junit.jupiter:junit-jupiter:6.0.2") - tasks.withType { - sourceCompatibility = JavaVersion.VERSION_25.toString() - targetCompatibility = JavaVersion.VERSION_25.toString() - options.encoding = "UTF-8" - } + implementation("org.reflections:reflections:0.10.2") + implementation("org.json:json:20240303") - tasks.withType { - useJUnitPlatform() - } - } + compileOnly("org.projectlombok:lombok:1.18.42") - tasks.named("distZip") { - duplicatesStrategy = DuplicatesStrategy.INCLUDE + implementation(platform("tools.jackson:jackson-bom:3.0.3")) + implementation("tools.jackson.core:jackson-core") + implementation("tools.jackson.core:jackson-databind") + implementation("com.fasterxml.jackson.core:jackson-annotations:2.20") } - tasks.named("distTar") { - duplicatesStrategy = DuplicatesStrategy.INCLUDE + tasks.test { + useJUnitPlatform() } -} \ No newline at end of file +} diff --git a/commons/src/main/java/net/swofty/commons/protocol/JacksonSerializer.java b/commons/src/main/java/net/swofty/commons/protocol/JacksonSerializer.java index 49ee04806..200ea01e6 100644 --- a/commons/src/main/java/net/swofty/commons/protocol/JacksonSerializer.java +++ b/commons/src/main/java/net/swofty/commons/protocol/JacksonSerializer.java @@ -1,18 +1,19 @@ package net.swofty.commons.protocol; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; import lombok.SneakyThrows; +import tools.jackson.databind.DeserializationFeature; +import tools.jackson.databind.SerializationFeature; +import tools.jackson.databind.json.JsonMapper; public class JacksonSerializer implements Serializer { - private final ObjectMapper mapper; + private final JsonMapper mapper; private final Class clazz; public JacksonSerializer(Class clazz) { - this.mapper = new ObjectMapper() + this.mapper = JsonMapper.builder() .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false) - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .build(); this.clazz = clazz; } diff --git a/commons/src/main/java/net/swofty/commons/protocol/serializers/MaterialDeserializer.java b/commons/src/main/java/net/swofty/commons/protocol/serializers/MaterialDeserializer.java index a6d0ac452..f5caf046a 100644 --- a/commons/src/main/java/net/swofty/commons/protocol/serializers/MaterialDeserializer.java +++ b/commons/src/main/java/net/swofty/commons/protocol/serializers/MaterialDeserializer.java @@ -1,17 +1,13 @@ package net.swofty.commons.protocol.serializers; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; -import com.fasterxml.jackson.databind.JsonNode; +import com.google.gson.*; import net.minestom.server.item.Material; -import java.io.IOException; +import java.lang.reflect.Type; -public class MaterialDeserializer extends JsonDeserializer { +public class MaterialDeserializer implements JsonDeserializer { @Override - public Material deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - JsonNode node = p.getCodec().readTree(p); - return Material.fromKey(node.asText()); + public Material deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { + return Material.fromKey(jsonElement.getAsString()); } } \ No newline at end of file diff --git a/commons/src/main/java/net/swofty/commons/protocol/serializers/MaterialSerializer.java b/commons/src/main/java/net/swofty/commons/protocol/serializers/MaterialSerializer.java index f2b4d8b5b..9ac0e38aa 100644 --- a/commons/src/main/java/net/swofty/commons/protocol/serializers/MaterialSerializer.java +++ b/commons/src/main/java/net/swofty/commons/protocol/serializers/MaterialSerializer.java @@ -1,15 +1,14 @@ package net.swofty.commons.protocol.serializers; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializerProvider; +import com.google.gson.JsonElement; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; import net.minestom.server.item.Material; +import java.lang.reflect.Type; -import java.io.IOException; - -public class MaterialSerializer extends JsonSerializer { +public class MaterialSerializer implements JsonSerializer { @Override - public void serialize(Material value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeString(value.key().asString()); + public JsonElement serialize(Material src, Type typeOfSrc, JsonSerializationContext context) { + return context.serialize(src.key().asString()); } } diff --git a/commons/src/main/java/net/swofty/commons/protocol/serializers/PlayerShopDataSerializer.java b/commons/src/main/java/net/swofty/commons/protocol/serializers/PlayerShopDataSerializer.java index d20c3296a..bf6d397ce 100644 --- a/commons/src/main/java/net/swofty/commons/protocol/serializers/PlayerShopDataSerializer.java +++ b/commons/src/main/java/net/swofty/commons/protocol/serializers/PlayerShopDataSerializer.java @@ -1,10 +1,10 @@ package net.swofty.commons.protocol.serializers; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import lombok.SneakyThrows; import net.swofty.commons.skyblock.PlayerShopData; import net.swofty.commons.protocol.Serializer; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; import java.util.Map; diff --git a/type.generic/src/main/java/net/swofty/type/generic/achievement/AchievementStatisticsService.java b/type.generic/src/main/java/net/swofty/type/generic/achievement/AchievementStatisticsService.java index 738b40d26..bdc049e57 100644 --- a/type.generic/src/main/java/net/swofty/type/generic/achievement/AchievementStatisticsService.java +++ b/type.generic/src/main/java/net/swofty/type/generic/achievement/AchievementStatisticsService.java @@ -1,12 +1,12 @@ package net.swofty.type.generic.achievement; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import net.minestom.server.MinecraftServer; import net.minestom.server.timer.TaskSchedule; import net.swofty.type.generic.data.mongodb.UserDatabase; import org.bson.Document; import org.tinylog.Logger; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -110,7 +110,7 @@ private static void countPlayerAchievements(String achievementDataJson, Map { + achievements.properties().forEach(entry -> { String achievementId = entry.getKey(); JsonNode progress = entry.getValue(); @@ -131,7 +131,8 @@ private static void countPlayerAchievements(String achievementDataJson, Map deepClone() { public Datapoint setUser(DataHandler dataHandler) { this.dataHandler = dataHandler; return this; } public Datapoint setData(Enum data) { this.data = data; return this; } - public String getSerializedValue() throws JsonProcessingException { return serializer.serialize(value); } + public String getSerializedValue() throws JacksonException { return serializer.serialize(value); } public void deserializeValue(String json) { this.value = serializer.deserialize(json); } /** Copy value from another datapoint without triggering onChange. */ diff --git a/type.generic/src/main/java/net/swofty/type/generic/data/HypixelDataHandler.java b/type.generic/src/main/java/net/swofty/type/generic/data/HypixelDataHandler.java index 81eec0f01..7b5f472d2 100644 --- a/type.generic/src/main/java/net/swofty/type/generic/data/HypixelDataHandler.java +++ b/type.generic/src/main/java/net/swofty/type/generic/data/HypixelDataHandler.java @@ -1,6 +1,5 @@ package net.swofty.type.generic.data; -import com.fasterxml.jackson.core.JsonProcessingException; import lombok.Getter; import net.kyori.adventure.text.Component; import net.minestom.server.MinecraftServer; @@ -20,6 +19,7 @@ import org.jetbrains.annotations.Blocking; import org.jetbrains.annotations.Nullable; import org.tinylog.Logger; +import tools.jackson.core.JacksonException; import java.util.UUID; import java.util.function.BiConsumer; @@ -76,7 +76,7 @@ public Document toDocument() { for (Data data : Data.values()) { try { document.put(data.getKey(), getDatapoint(data.getKey()).getSerializedValue()); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { Logger.error(e, "Failed to serialize datapoint {} for user {}", data.getKey(), this.uuid); } } diff --git a/type.generic/src/main/java/net/swofty/type/generic/data/handlers/BedWarsDataHandler.java b/type.generic/src/main/java/net/swofty/type/generic/data/handlers/BedWarsDataHandler.java index bdf08e901..2a9bb54d6 100644 --- a/type.generic/src/main/java/net/swofty/type/generic/data/handlers/BedWarsDataHandler.java +++ b/type.generic/src/main/java/net/swofty/type/generic/data/handlers/BedWarsDataHandler.java @@ -1,24 +1,19 @@ package net.swofty.type.generic.data.handlers; -import com.fasterxml.jackson.core.JsonProcessingException; import lombok.Getter; -import net.swofty.commons.bedwars.BedwarsGameType; import net.swofty.type.generic.data.DataHandler; import net.swofty.type.generic.data.Datapoint; import net.swofty.type.generic.data.GameDataHandler; -import net.swofty.commons.bedwars.BedWarsModeStats; -import net.swofty.commons.bedwars.LeaderboardPreferences; -import net.swofty.type.generic.data.HypixelDataHandler; import net.swofty.type.generic.data.datapoints.*; import net.swofty.type.generic.data.datapoints.DatapointBedWarsModeStats; import net.swofty.type.generic.data.datapoints.DatapointBedWarsQuickBuy; import net.swofty.type.generic.data.datapoints.DatapointLeaderboardPreferences; import net.swofty.type.generic.data.mongodb.UserDatabase; -import net.swofty.type.generic.leaderboard.LeaderboardService; import net.swofty.type.generic.user.HypixelPlayer; import org.bson.Document; import org.jetbrains.annotations.Nullable; import org.tinylog.Logger; +import tools.jackson.core.JacksonException; import java.util.HashMap; import java.util.Map; @@ -136,7 +131,7 @@ public Document toDocument() { for (Data data : Data.values()) { try { document.put(data.getKey(), getDatapoint(data.getKey()).getSerializedValue()); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { e.printStackTrace(); } } diff --git a/type.generic/src/main/java/net/swofty/type/generic/data/handlers/MurderMysteryDataHandler.java b/type.generic/src/main/java/net/swofty/type/generic/data/handlers/MurderMysteryDataHandler.java index 1242a86db..17980df9a 100644 --- a/type.generic/src/main/java/net/swofty/type/generic/data/handlers/MurderMysteryDataHandler.java +++ b/type.generic/src/main/java/net/swofty/type/generic/data/handlers/MurderMysteryDataHandler.java @@ -1,16 +1,15 @@ package net.swofty.type.generic.data.handlers; -import com.fasterxml.jackson.core.JsonProcessingException; import lombok.Getter; import net.swofty.type.generic.data.DataHandler; import net.swofty.type.generic.data.Datapoint; import net.swofty.type.generic.data.GameDataHandler; -import net.swofty.commons.murdermystery.MurderMysteryModeStats; import net.swofty.type.generic.data.datapoints.*; import net.swofty.type.generic.user.HypixelPlayer; import org.bson.Document; import org.jetbrains.annotations.Nullable; import org.tinylog.Logger; +import tools.jackson.core.JacksonException; import java.util.HashMap; import java.util.Map; @@ -120,7 +119,7 @@ public Document toDocument() { for (Data data : Data.values()) { try { document.put(data.getKey(), getDatapoint(data.getKey()).getSerializedValue()); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { e.printStackTrace(); } } @@ -132,7 +131,6 @@ public Datapoint get(Data datapoint) { return dp != null ? dp : datapoint.defaultDatapoint; } - @SuppressWarnings("unchecked") public > R get(Data datapoint, Class type) { Datapoint dp = this.datapoints.get(datapoint.key); return (R) (dp != null ? type.cast(dp) : type.cast(datapoint.defaultDatapoint)); diff --git a/type.generic/src/main/java/net/swofty/type/generic/data/handlers/PrototypeLobbyDataHandler.java b/type.generic/src/main/java/net/swofty/type/generic/data/handlers/PrototypeLobbyDataHandler.java index 6747050af..9d6808e5a 100644 --- a/type.generic/src/main/java/net/swofty/type/generic/data/handlers/PrototypeLobbyDataHandler.java +++ b/type.generic/src/main/java/net/swofty/type/generic/data/handlers/PrototypeLobbyDataHandler.java @@ -1,6 +1,5 @@ package net.swofty.type.generic.data.handlers; -import com.fasterxml.jackson.core.JsonProcessingException; import lombok.Getter; import net.swofty.type.generic.data.DataHandler; import net.swofty.type.generic.data.Datapoint; @@ -10,6 +9,7 @@ import org.bson.Document; import org.jetbrains.annotations.Nullable; import org.tinylog.Logger; +import tools.jackson.core.JacksonException; import java.util.HashMap; import java.util.Map; @@ -113,7 +113,7 @@ public Document toDocument() { for (Data data : Data.values()) { try { document.put(data.getKey(), getDatapoint(data.getKey()).getSerializedValue()); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { Logger.error(e, "Failed to serialize datapoint {} for user {}", data.getKey(), this.uuid); } } diff --git a/type.generic/src/main/java/net/swofty/type/generic/data/handlers/SkywarsDataHandler.java b/type.generic/src/main/java/net/swofty/type/generic/data/handlers/SkywarsDataHandler.java index 99a7b21af..3927aca64 100644 --- a/type.generic/src/main/java/net/swofty/type/generic/data/handlers/SkywarsDataHandler.java +++ b/type.generic/src/main/java/net/swofty/type/generic/data/handlers/SkywarsDataHandler.java @@ -1,8 +1,6 @@ package net.swofty.type.generic.data.handlers; -import com.fasterxml.jackson.core.JsonProcessingException; import lombok.Getter; -import net.swofty.commons.skywars.SkywarsModeStats; import net.swofty.type.generic.data.DataHandler; import net.swofty.type.generic.data.Datapoint; import net.swofty.type.generic.data.GameDataHandler; @@ -12,6 +10,7 @@ import org.bson.Document; import org.jetbrains.annotations.Nullable; import org.tinylog.Logger; +import tools.jackson.core.JacksonException; import java.util.HashMap; import java.util.Map; @@ -127,7 +126,7 @@ public Document toDocument() { for (Data data : Data.values()) { try { document.put(data.getKey(), getDatapoint(data.getKey()).getSerializedValue()); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { e.printStackTrace(); } } diff --git a/type.generic/src/main/java/net/swofty/type/generic/gui/HypixelSignGUI.java b/type.generic/src/main/java/net/swofty/type/generic/gui/HypixelSignGUI.java index 365c24060..da076c5be 100644 --- a/type.generic/src/main/java/net/swofty/type/generic/gui/HypixelSignGUI.java +++ b/type.generic/src/main/java/net/swofty/type/generic/gui/HypixelSignGUI.java @@ -53,11 +53,11 @@ public CompletableFuture open(String[] text) { .build()) .build(); - player.sendPackets( - new BlockChangePacket(pos, Block.OAK_SIGN), - new BlockEntityDataPacket(pos, Block.OAK_SIGN.registry().blockEntityId(), compound) - ); - MinecraftServer.getSchedulerManager().scheduleTask(() -> { + player.sendPackets( + new BlockChangePacket(pos, Block.OAK_SIGN), + new BlockEntityDataPacket(pos, Block.OAK_SIGN.registry().blockEntityType(), compound) + ); + MinecraftServer.getSchedulerManager().scheduleTask(() -> { player.sendPacket(new OpenSignEditorPacket(pos, true)); }, TaskSchedule.tick(2), TaskSchedule.stop()); diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/data/SkyBlockDataHandler.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/data/SkyBlockDataHandler.java index 446329427..4b01c28b0 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/data/SkyBlockDataHandler.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/data/SkyBlockDataHandler.java @@ -1,6 +1,5 @@ package net.swofty.type.skyblockgeneric.data; -import com.fasterxml.jackson.core.JsonProcessingException; import lombok.Getter; import lombok.SneakyThrows; import net.minestom.server.MinecraftServer; @@ -29,6 +28,7 @@ import org.bson.Document; import org.jetbrains.annotations.Nullable; import org.tinylog.Logger; +import tools.jackson.core.JacksonException; import java.util.*; import java.util.function.BiConsumer; @@ -116,7 +116,7 @@ public Document toProfileDocument() { for (Data data : Data.values()) { try { document.put(data.getKey(), getDatapoint(data.getKey()).getSerializedValue()); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { Logger.error(e, "Failed to serialize SkyBlock datapoint {} for user {}", data.getKey(), this.uuid); } } diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/server/attribute/ServerAttribute.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/server/attribute/ServerAttribute.java index dd84d0d5e..f1eaab9d4 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/server/attribute/ServerAttribute.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/server/attribute/ServerAttribute.java @@ -1,12 +1,15 @@ package net.swofty.type.skyblockgeneric.server.attribute; -import com.fasterxml.jackson.core.JsonProcessingException; import lombok.Getter; +import lombok.Setter; import net.swofty.commons.protocol.Serializer; +import tools.jackson.core.JacksonException; public abstract class ServerAttribute { - private final String key; @Getter + private final String key; + @Setter + @Getter private T value; protected Serializer serializer; @@ -16,11 +19,7 @@ protected ServerAttribute(String key, T value, Serializer serializer) { this.serializer = serializer; } - public String getKey() { - return key; - } - - public String getSerializedValue() throws JsonProcessingException { + public String getSerializedValue() throws JacksonException { return serializer.serialize(value); } @@ -28,7 +27,4 @@ public void deserializeValue(String json) { this.value = serializer.deserialize(json); } - public void setValue(T value) { - this.value = value; - } } \ No newline at end of file diff --git a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/server/attribute/SkyBlockServerAttributes.java b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/server/attribute/SkyBlockServerAttributes.java index 47109234a..fea831334 100644 --- a/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/server/attribute/SkyBlockServerAttributes.java +++ b/type.skyblockgeneric/src/main/java/net/swofty/type/skyblockgeneric/server/attribute/SkyBlockServerAttributes.java @@ -1,38 +1,23 @@ package net.swofty.type.skyblockgeneric.server.attribute; -import com.fasterxml.jackson.core.JsonProcessingException; import org.tinylog.Logger; import lombok.Getter; -import org.tinylog.Logger; import net.minestom.server.MinecraftServer; -import org.tinylog.Logger; import net.minestom.server.timer.ExecutionType; -import org.tinylog.Logger; import net.minestom.server.timer.TaskSchedule; -import org.tinylog.Logger; import net.swofty.type.generic.HypixelConst; -import org.tinylog.Logger; import net.swofty.type.generic.HypixelTypeLoader; -import org.tinylog.Logger; import net.swofty.type.generic.data.mongodb.AttributeDatabase; -import org.tinylog.Logger; import net.swofty.type.skyblockgeneric.calendar.SkyBlockCalendar; -import org.tinylog.Logger; import net.swofty.type.skyblockgeneric.server.attribute.attributes.AttributeLong; -import org.tinylog.Logger; import org.bson.Document; -import org.tinylog.Logger; +import tools.jackson.core.JacksonException; import java.util.Arrays; -import org.tinylog.Logger; import java.util.HashMap; -import org.tinylog.Logger; import java.util.Map; -import org.tinylog.Logger; import java.util.function.Consumer; -import org.tinylog.Logger; import java.util.function.Function; -import org.tinylog.Logger; public class SkyBlockServerAttributes { private static final Map serverAttributes = new HashMap<>(); @@ -65,7 +50,7 @@ public static Document toDocument() { try { document.append(key.getKey(), attribute.getSerializedValue()); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { Logger.error(e, "Failed to load or save server attributes"); } });