From 888883eea134efd18d28a4f823946dfa7b9828be Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 13:58:40 +0000 Subject: [PATCH 1/2] Update all dependencies --- .github/workflows/gradle.yml | 2 +- build.gradle.kts | 30 ++++++++++++------------ gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 3 +-- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 881e436b..bed81b41 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -32,7 +32,7 @@ jobs: - name: Build with Gradle run: ./gradlew clean shadowJar - name: Upload a Build Artifact - uses: actions/upload-artifact@v4.4.3 + uses: actions/upload-artifact@v4.5.0 with: name: 'ParcelLockers (MC 1.8.8 - 1.20.x)' path: build/libs/ParcelLockers* \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index ee008501..d4fb42a0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -29,15 +29,15 @@ dependencies { // minecraft development api compileOnly("org.spigotmc:spigot-api:1.21.1-R0.1-SNAPSHOT") implementation("net.kyori:adventure-platform-bukkit:4.3.4") - implementation("net.kyori:adventure-text-minimessage:4.17.0") - implementation("dev.rollczi:litecommands-bukkit:3.9.1") - implementation("dev.rollczi:litecommands-adventure:3.9.1") + implementation("net.kyori:adventure-text-minimessage:4.18.0") + implementation("dev.rollczi:litecommands-bukkit:3.9.5") + implementation("dev.rollczi:litecommands-adventure:3.9.5") // skull api implementation("dev.rollczi:liteskullapi:1.3.0") // gui library - implementation("dev.triumphteam:triumph-gui:3.1.10") + implementation("dev.triumphteam:triumph-gui:3.1.11") // economy compileOnly("com.github.MilkBowl:VaultAPI:1.7.1") @@ -53,14 +53,14 @@ dependencies { // metrics and sentry implementation("org.bstats:bstats-bukkit:3.1.0") - implementation("io.sentry:sentry:7.17.0") + implementation("io.sentry:sentry:7.19.1") // database - implementation("com.zaxxer:HikariCP:6.1.0") + implementation("com.zaxxer:HikariCP:6.2.1") // lombok - compileOnly("org.projectlombok:lombok:1.18.34") - annotationProcessor("org.projectlombok:lombok:1.18.34") + compileOnly("org.projectlombok:lombok:1.18.36") + annotationProcessor("org.projectlombok:lombok:1.18.36") // jetbrains annotations api("org.jetbrains:annotations:26.0.1") @@ -69,7 +69,7 @@ dependencies { implementation("io.papermc:paperlib:1.0.8") // signgui - implementation("de.rapha149.signgui:signgui:2.4.2") + implementation("de.rapha149.signgui:signgui:2.5.0") // panda-utilities implementation("org.panda-lang:panda-utilities:0.5.2-alpha") @@ -84,12 +84,12 @@ dependencies { implementation("com.eternalcode:eternalcode-commons-adventure:1.1.4") implementation("com.eternalcode:eternalcode-commons-bukkit:1.1.4") - testImplementation("org.junit.jupiter:junit-jupiter-api:5.11.3") - testImplementation("org.junit.jupiter:junit-jupiter-params:5.11.3") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.11.3") + testImplementation("org.junit.jupiter:junit-jupiter-api:5.11.4") + testImplementation("org.junit.jupiter:junit-jupiter-params:5.11.4") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.11.4") - testImplementation("org.testcontainers:junit-jupiter:1.20.3") - testImplementation("org.testcontainers:mysql:1.20.3") + testImplementation("org.testcontainers:junit-jupiter:1.20.4") + testImplementation("org.testcontainers:mysql:1.20.4") testImplementation("mysql:mysql-connector-java:8.0.33") } @@ -98,7 +98,7 @@ java { } checkstyle { - toolVersion = "10.20.1" + toolVersion = "10.21.0" configFile = file("${rootDir}/config/checkstyle/checkstyle.xml") diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 94113f20..cea7a793 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index f5feea6d..f3b75f3b 100644 --- a/gradlew +++ b/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum From acd615bda80e0dc4ceb7881877cb4bd31b6c64f7 Mon Sep 17 00:00:00 2001 From: Jakubk15 <77227023+Jakubk15@users.noreply.github.com> Date: Thu, 26 Dec 2024 18:08:10 +0100 Subject: [PATCH 2/2] Fix build, use LiteBukkitFactory --- .../parcellockers/ParcelLockers.java | 4 +- .../locker/ParcelSendingGUI.java | 103 ++++++++++-------- .../controller/LockerBreakController.java | 34 +++--- .../command/argument/ParcelArgument.java | 15 ++- 4 files changed, 89 insertions(+), 67 deletions(-) diff --git a/src/main/java/com/eternalcode/parcellockers/ParcelLockers.java b/src/main/java/com/eternalcode/parcellockers/ParcelLockers.java index ff9a8e8e..015b74a6 100644 --- a/src/main/java/com/eternalcode/parcellockers/ParcelLockers.java +++ b/src/main/java/com/eternalcode/parcellockers/ParcelLockers.java @@ -38,8 +38,8 @@ import dev.rollczi.litecommands.LiteCommands; import dev.rollczi.litecommands.adventure.LiteAdventureExtension; import dev.rollczi.litecommands.annotations.LiteCommandsAnnotations; +import dev.rollczi.litecommands.bukkit.LiteBukkitFactory; import dev.rollczi.litecommands.bukkit.LiteBukkitMessages; -import dev.rollczi.litecommands.bukkit.LiteCommandsBukkit; import dev.rollczi.liteskullapi.LiteSkullFactory; import dev.rollczi.liteskullapi.SkullAPI; import io.papermc.lib.PaperLib; @@ -125,7 +125,7 @@ public void onEnable() { MainGUI mainGUI = new MainGUI(this, server, miniMessage, config, parcelRepository, lockerRepository, userManager); ParcelListGUI parcelListGUI = new ParcelListGUI(this, server, miniMessage, config, parcelRepository, lockerRepository, userManager, mainGUI); - this.liteCommands = LiteCommandsBukkit.builder("parcellockers", this) + this.liteCommands = LiteBukkitFactory.builder("parcellockers", this) .argument(Parcel.class, new ParcelArgument(parcelRepository)) .argument(Locker.class, new ParcelLockerArgument(lockerRepository)) .extension(new LiteAdventureExtension<>()) diff --git a/src/main/java/com/eternalcode/parcellockers/gui/implementation/locker/ParcelSendingGUI.java b/src/main/java/com/eternalcode/parcellockers/gui/implementation/locker/ParcelSendingGUI.java index 7001f0ce..601ad0ed 100644 --- a/src/main/java/com/eternalcode/parcellockers/gui/implementation/locker/ParcelSendingGUI.java +++ b/src/main/java/com/eternalcode/parcellockers/gui/implementation/locker/ParcelSendingGUI.java @@ -16,6 +16,7 @@ import com.eternalcode.parcellockers.user.UserRepository; import de.rapha149.signgui.SignGUI; import de.rapha149.signgui.SignGUIAction; +import de.rapha149.signgui.exception.SignGUIVersionException; import dev.rollczi.liteskullapi.SkullAPI; import dev.triumphteam.gui.guis.Gui; import dev.triumphteam.gui.guis.GuiItem; @@ -94,63 +95,73 @@ public void show(Player player) { GuiItem cornerItem = guiSettings.cornerItem.toGuiItem(); ConfigItem nameItem = guiSettings.parcelNameItem.clone(); GuiItem nameGuiItem = nameItem.toGuiItem(event -> { - SignGUI nameSignGui = SignGUI.builder() - .setColor(DyeColor.BLACK) - .setType(Material.OAK_SIGN) - .setLine(0, "Enter parcel name:") - .setHandler((p, result) -> { - String name = result.getLineWithoutColor(1); - - if (name.isEmpty() || name.isBlank()) { - this.announcer.sendMessage(player, settings.messages.parcelNameCannotBeEmpty); - return Collections.emptyList(); - } + SignGUI nameSignGui = null; + try { + nameSignGui = SignGUI.builder() + .setColor(DyeColor.BLACK) + .setType(Material.OAK_SIGN) + .setLine(0, "Enter parcel name:") + .setHandler((p, result) -> { + String name = result.getLineWithoutColor(1); + + if (name.isEmpty() || name.isBlank()) { + this.announcer.sendMessage(player, settings.messages.parcelNameCannotBeEmpty); + return Collections.emptyList(); + } - this.state.setParcelName(name); - this.announcer.sendMessage(player, settings.messages.parcelNameSet); + this.state.setParcelName(name); + this.announcer.sendMessage(player, settings.messages.parcelNameSet); - List lore = nameItem.lore; - if (lore.size() > 1) { - lore.remove(1); - } + List lore = nameItem.lore; + if (lore.size() > 1) { + lore.remove(1); + } - lore.add(this.config.guiSettings.parcelNameSetLine.replace("{NAME}", this.state.getParcelName() == null - ? "None" : this.state.getParcelName())); + lore.add(this.config.guiSettings.parcelNameSetLine.replace("{NAME}", this.state.getParcelName() == null + ? "None" : this.state.getParcelName())); - this.gui.updateItem(21, nameItem - .setLore(lore) - .toItemStack()); - return List.of(SignGUIAction.runSync((JavaPlugin) this.plugin, () -> this.gui.open(player))); - }) - .build(); + this.gui.updateItem(21, nameItem + .setLore(lore) + .toItemStack()); + return List.of(SignGUIAction.runSync((JavaPlugin) this.plugin, () -> this.gui.open(player))); + }) + .build(); + } catch (SignGUIVersionException e) { + this.plugin.getLogger().severe("The server version is unsupported by SignGUI API!"); + } nameSignGui.open(player); }); ConfigItem descriptionItem = guiSettings.parcelDescriptionItem.clone(); GuiItem descriptionGuiItem = descriptionItem.toGuiItem(event -> { - SignGUI descriptionSignGui = SignGUI.builder() - .setColor(DyeColor.BLACK) - .setType(Material.OAK_SIGN) - .setLine(0, "Enter parcel description:") - .setHandler((p, result) -> { - String description = result.getLineWithoutColor(1); - - this.state.setParcelDescription(description); - this.announcer.sendMessage(player, settings.messages.parcelDescriptionSet); - - List lore = descriptionItem.clone().lore; - if (lore.size() > 1) { - lore.remove(1); - } + SignGUI descriptionSignGui = null; + try { + descriptionSignGui = SignGUI.builder() + .setColor(DyeColor.BLACK) + .setType(Material.OAK_SIGN) + .setLine(0, "Enter parcel description:") + .setHandler((p, result) -> { + String description = result.getLineWithoutColor(1); + + this.state.setParcelDescription(description); + this.announcer.sendMessage(player, settings.messages.parcelDescriptionSet); + + List lore = descriptionItem.clone().lore; + if (lore.size() > 1) { + lore.remove(1); + } - lore.add(this.config.guiSettings.parcelDescriptionSetLine.replace("{DESCRIPTION}", description)); + lore.add(this.config.guiSettings.parcelDescriptionSetLine.replace("{DESCRIPTION}", description)); - this.gui.updateItem(22, descriptionItem - .setLore(lore) - .toItemStack()); - return List.of(SignGUIAction.runSync((JavaPlugin) this.plugin, () -> this.gui.open(player))); - }) - .build(); + this.gui.updateItem(22, descriptionItem + .setLore(lore) + .toItemStack()); + return List.of(SignGUIAction.runSync((JavaPlugin) this.plugin, () -> this.gui.open(player))); + }) + .build(); + } catch (SignGUIVersionException e) { + this.plugin.getLogger().severe("The server version is unsupported by SignGUI API!"); + } descriptionSignGui.open(player); }); diff --git a/src/main/java/com/eternalcode/parcellockers/locker/controller/LockerBreakController.java b/src/main/java/com/eternalcode/parcellockers/locker/controller/LockerBreakController.java index 54bbf3d9..b643bfc1 100644 --- a/src/main/java/com/eternalcode/parcellockers/locker/controller/LockerBreakController.java +++ b/src/main/java/com/eternalcode/parcellockers/locker/controller/LockerBreakController.java @@ -23,12 +23,12 @@ public class LockerBreakController implements Listener { - private final LockerRepository parcelLockerRepository; + private final LockerRepository lockerRepository; private final NotificationAnnouncer announcer; private final PluginConfiguration.Messages messages; - public LockerBreakController(LockerRepository parcelLockerRepository, NotificationAnnouncer announcer, PluginConfiguration.Messages messages) { - this.parcelLockerRepository = parcelLockerRepository; + public LockerBreakController(LockerRepository lockerRepository, NotificationAnnouncer announcer, PluginConfiguration.Messages messages) { + this.lockerRepository = lockerRepository; this.announcer = announcer; this.messages = messages; } @@ -40,15 +40,24 @@ public void onBlockBreak(BlockBreakEvent event) { Position position = PositionAdapter.convert(location); Player player = event.getPlayer(); - if (this.parcelLockerRepository.isInCache(position)) { + this.lockerRepository.findByPosition(position).whenComplete((locker, throwable) -> { + if (locker.isEmpty()) { + return; + } + + if (throwable != null) { + throwable.printStackTrace(); + return; + } + if (!player.hasPermission("parcellockers.admin.break")) { event.setCancelled(true); this.announcer.sendMessage(player, this.messages.cannotBreakParcelLocker); return; } - UUID toRemove = this.parcelLockerRepository.positionCache().get(position); - this.parcelLockerRepository.remove(toRemove); + UUID toRemove = this.lockerRepository.positionCache().get(position); + this.lockerRepository.remove(toRemove); this.announcer.sendMessage(player, this.messages.parcelLockerSuccessfullyDeleted); @@ -60,8 +69,7 @@ public void onBlockBreak(BlockBreakEvent event) { .register("{PLAYER}", player.getName()); this.announcer.broadcast(formatter.format(this.messages.broadcastParcelLockerRemoved)); - } - + }); } @EventHandler @@ -70,7 +78,7 @@ public void onBlockBurn(BlockBurnEvent event) { Location location = block.getLocation(); Position position = PositionAdapter.convert(location); - if (this.parcelLockerRepository.isInCache(position)) { + if (this.lockerRepository.isInCache(position)) { event.setCancelled(true); } } @@ -81,7 +89,7 @@ public void onBlockExplode(BlockExplodeEvent event) { Location location = block.getLocation(); Position position = PositionAdapter.convert(location); - if (this.parcelLockerRepository.isInCache(position)) { + if (this.lockerRepository.isInCache(position)) { event.setCancelled(true); } } @@ -91,7 +99,7 @@ public void onEntityExplode(EntityExplodeEvent event) { event.blockList().removeIf(block -> { Location location = block.getLocation(); Position position = PositionAdapter.convert(location); - return this.parcelLockerRepository.isInCache(position); + return this.lockerRepository.isInCache(position); }); } @@ -101,7 +109,7 @@ public void onBlockIgnite(BlockIgniteEvent event) { Location location = block.getLocation(); Position position = PositionAdapter.convert(location); - if (this.parcelLockerRepository.isInCache(position)) { + if (this.lockerRepository.isInCache(position)) { event.setCancelled(true); } } @@ -112,7 +120,7 @@ public void onBlockDamage(BlockDamageEvent event) { Location location = block.getLocation(); Position position = PositionAdapter.convert(location); - if (this.parcelLockerRepository.isInCache(position)) { + if (this.lockerRepository.isInCache(position)) { event.setCancelled(true); } } diff --git a/src/main/java/com/eternalcode/parcellockers/parcel/command/argument/ParcelArgument.java b/src/main/java/com/eternalcode/parcellockers/parcel/command/argument/ParcelArgument.java index a005e9d5..69fc0604 100644 --- a/src/main/java/com/eternalcode/parcellockers/parcel/command/argument/ParcelArgument.java +++ b/src/main/java/com/eternalcode/parcellockers/parcel/command/argument/ParcelArgument.java @@ -12,6 +12,7 @@ import org.bukkit.command.CommandSender; import java.util.UUID; +import java.util.concurrent.CompletableFuture; public class ParcelArgument extends ArgumentResolver { @@ -23,12 +24,12 @@ public ParcelArgument(ParcelRepository cache) { @Override protected ParseResult parse(Invocation invocation, Argument context, String argument) { - Parcel parcel = this.databaseService.findParcel(UUID.fromString(argument)).orElse(null); - - if (parcel == null) { - return ParseResult.failure(InvalidUsage.Cause.MISSING_ARGUMENT); - } - return ParseResult.success(parcel); + UUID parcelId = UUID.fromString(argument); + CompletableFuture> future = this.databaseService.findByUUID(parcelId) + .thenApply(optional -> optional + .map(ParseResult::success) + .orElse(ParseResult.failure(InvalidUsage.Cause.INVALID_ARGUMENT))); + return ParseResult.completableFuture(future); } @Override @@ -37,5 +38,7 @@ public SuggestionResult suggest(Invocation invocation, Argument