Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ dependencies {
compileOnly(libs.de.oliver.fancynpcs)
compileOnly(libs.li.cinnazeyy.langlibs.api)
compileOnly(libs.commons.io.commons.io)
compileOnly(libs.asia.buildtheearth.asean.discord.discord.plotsystem.api)
}

val versionDetails: groovy.lang.Closure<com.palantir.gradle.gitversion.VersionDetails> by extra
Expand Down
4 changes: 3 additions & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ io-papermc-paper-paper-api = "1.21.8-R0.1-SNAPSHOT"
li-cinnazeyy-langlibs-api = "1.5.1"
org-mariadb-jdbc-mariadb-java-client = "2.7.4"
com-intellectualsites-bom-bom-newest = "1.55" # Ref: https://github.com/IntellectualSites/bom
asia-buildtheearth-asean-discord-discord-plotsystem-api = "1.2.3" # Ref: https://github.com/ASEAN-Build-The-Earth/discordsrv-plotsystem

[libraries]
com-alpsbte-alpslib-alpslib-hologram = { module = "com.alpsbte.alpslib:alpslib-hologram", version.ref = "com-alpsbte-alpslib-alpslib-hologram" }
Expand All @@ -35,4 +36,5 @@ de-oliver-fancynpcs = { module = "de.oliver:FancyNpcs", version.ref = "de-oliver
io-papermc-paper-paper-api = { module = "io.papermc.paper:paper-api", version.ref = "io-papermc-paper-paper-api" }
li-cinnazeyy-langlibs-api = { module = "li.cinnazeyy:LangLibs-API", version.ref = "li-cinnazeyy-langlibs-api" }
org-mariadb-jdbc-mariadb-java-client = { module = "org.mariadb.jdbc:mariadb-java-client", version.ref = "org-mariadb-jdbc-mariadb-java-client" }
com-intellectualsites-bom-bom-newest = { module = "com.intellectualsites.bom:bom-newest", version.ref = "com-intellectualsites-bom-bom-newest" }
com-intellectualsites-bom-bom-newest = { module = "com.intellectualsites.bom:bom-newest", version.ref = "com-intellectualsites-bom-bom-newest" }
asia-buildtheearth-asean-discord-discord-plotsystem-api = { module = "asia.buildtheearth.asean.discord:discord-plotsystem-api", version.ref = "asia-buildtheearth-asean-discord-discord-plotsystem-api" }
7 changes: 7 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,13 @@
<version>2.9.2</version>
<scope>provided</scope>
</dependency>
<!-- Discord Integration -->
<dependency>
<groupId>asia.buildtheearth.asean.discord</groupId>
<artifactId>discord-plotsystem-api</artifactId>
<version>1.2.3</version>
<scope>provided</scope>
</dependency>
<!-- Alps Utils -->
<dependency>
<groupId>com.alpsbte.alpslib</groupId>
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/com/alpsbte/plotsystem/PlotSystem.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import com.alpsbte.plotsystem.core.system.tutorial.TutorialEventListener;
import com.alpsbte.plotsystem.core.system.tutorial.utils.TutorialNPCTurnTracker;
import com.alpsbte.plotsystem.core.system.tutorial.utils.TutorialUtils;
import com.alpsbte.plotsystem.utils.DependencyManager;
import com.alpsbte.plotsystem.utils.DiscordUtil;
import com.alpsbte.plotsystem.utils.Utils;
import com.alpsbte.plotsystem.utils.io.ConfigPaths;
import com.alpsbte.plotsystem.utils.io.ConfigUtil;
Expand Down Expand Up @@ -127,6 +129,10 @@ public void onEnable() {
Bukkit.getScheduler().runTaskTimerAsynchronously(FancyNpcsPlugin.get().getPlugin(), new TutorialNPCTurnTracker(), 0, 1L);
}

// Register discord Integration
org.bukkit.plugin.Plugin discordPlugin = DependencyManager.getDiscordIntegration();
if(discordPlugin != null) DiscordUtil.init(discordPlugin);

pluginEnabled = true;
getComponentLogger().info(text("Enabled Plot-System plugin.", DARK_GREEN));
getComponentLogger().info(text("------------------------------------------------------", GOLD));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.alpsbte.plotsystem.core.system.plot.AbstractPlot;
import com.alpsbte.plotsystem.core.system.plot.Plot;
import com.alpsbte.plotsystem.core.system.plot.utils.PlotUtils;
import com.alpsbte.plotsystem.utils.DiscordUtil;
import com.alpsbte.plotsystem.utils.Utils;
import com.alpsbte.plotsystem.utils.enums.Status;
import com.alpsbte.plotsystem.utils.io.LangPaths;
Expand Down Expand Up @@ -67,7 +68,7 @@ public void onCommand(CommandSender sender, String[] args) {
}

Bukkit.getScheduler().runTask(PlotSystem.getPlugin(), () -> {
if (PlotUtils.Actions.abandonPlot(plot)) {
if (PlotUtils.Actions.abandonPlot(plot, DiscordUtil.AbandonType.MANUALLY)) {
sender.sendMessage(Utils.ChatUtils.getInfoFormat(langUtil.get(sender, LangPaths.Message.Info.ABANDONED_PLOT, plot.getId() + "")));
player.playSound(player.getLocation(), Utils.SoundUtils.ABANDON_PLOT_SOUND, 1, 1);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.alpsbte.plotsystem.core.system.plot.AbstractPlot;
import com.alpsbte.plotsystem.core.system.plot.Plot;
import com.alpsbte.plotsystem.core.system.plot.utils.PlotUtils;
import com.alpsbte.plotsystem.utils.DiscordUtil;
import com.alpsbte.plotsystem.utils.Utils;
import com.alpsbte.plotsystem.utils.enums.Status;
import com.alpsbte.plotsystem.utils.io.LangPaths;
Expand Down Expand Up @@ -70,6 +71,7 @@ public void onCommand(CommandSender sender, String[] args) {

Bukkit.getScheduler().runTask(PlotSystem.getPlugin(), () -> {
PlotUtils.Actions.undoSubmit(plot);
DiscordUtil.getOpt(plot.getId()).ifPresent(DiscordUtil.PlotEventAction::onPlotUndoSubmit);

sender.sendMessage(Utils.ChatUtils.getInfoFormat(langUtil.get(sender, LangPaths.Message.Info.UNDID_SUBMISSION, plot.getId() + "")));
player.playSound(player.getLocation(), Utils.SoundUtils.FINISH_PLOT_SOUND, 1, 1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.alpsbte.plotsystem.core.system.review.PlotReview;
import com.alpsbte.plotsystem.core.system.review.ReviewRating;
import com.alpsbte.plotsystem.core.system.review.ToggleCriteria;
import com.alpsbte.plotsystem.utils.DiscordUtil;
import com.alpsbte.plotsystem.utils.Utils;
import com.alpsbte.plotsystem.utils.chat.ChatInput;
import com.alpsbte.plotsystem.utils.chat.PlayerFeedbackChatInput;
Expand Down Expand Up @@ -129,9 +130,11 @@ private void submitReview() {
if (!isRejected) {
reviewerConfirmationMessage = Utils.ChatUtils.getInfoFormat(LangUtil.getInstance().get(getMenuPlayer(), LangPaths.Message.Info.PLOT_MARKED_REVIEWED, Integer.toString(plot.getId()), getParticipantsString()));
if(!acceptPlot(review.getScore(), review.getSplitScore())) return;
DiscordUtil.getOpt(plot.getId()).ifPresent(DiscordUtil.PlotEventAction::onPlotApprove);
} else {
reviewerConfirmationMessage = Utils.ChatUtils.getInfoFormat(LangUtil.getInstance().get(getMenuPlayer(), LangPaths.Message.Info.PLOT_REJECTED, Integer.toString(plot.getId()), getParticipantsString()));
PlotUtils.Actions.undoSubmit(plot);
DiscordUtil.getOpt(plot.getId()).ifPresent(DiscordUtil.PlotEventAction::onPlotReject);
}

Bukkit.getScheduler().runTask(PlotSystem.getPlugin(), () -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.alpsbte.plotsystem.core.system.plot.world.OnePlotWorld;
import com.alpsbte.plotsystem.core.system.plot.world.PlotWorld;
import com.alpsbte.plotsystem.utils.DependencyManager;
import com.alpsbte.plotsystem.utils.DiscordUtil;
import com.alpsbte.plotsystem.utils.Utils;
import com.alpsbte.plotsystem.utils.io.ConfigPaths;
import com.alpsbte.plotsystem.utils.io.ConfigUtil;
Expand Down Expand Up @@ -112,7 +113,7 @@ private AbstractPlotGenerator(@NotNull AbstractPlot plot, @NotNull Builder build
this.onComplete(exception != null, false);

if (exception != null) {
PlotUtils.Actions.abandonPlot(plot);
PlotUtils.Actions.abandonPlot(plot, DiscordUtil.AbandonType.SYSTEM);
onException(exception);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.alpsbte.plotsystem.core.system.plot.utils.PlotType;
import com.alpsbte.plotsystem.core.system.plot.utils.PlotUtils;
import com.alpsbte.plotsystem.core.system.plot.world.PlotWorld;
import com.alpsbte.plotsystem.utils.DiscordUtil;
import com.alpsbte.plotsystem.utils.Utils;
import com.alpsbte.plotsystem.utils.enums.PlotDifficulty;
import com.alpsbte.plotsystem.utils.enums.Status;
Expand Down Expand Up @@ -117,5 +118,8 @@ protected void onComplete(boolean failed, boolean unloadWorld) {
PlotUtils.Cache.clearCache(getBuilder().getUUID());
plot.getWorld().teleportPlayer(getBuilder().getPlayer());
LangUtil.getInstance().broadcast(LangPaths.Message.Info.CREATED_NEW_PLOT, getBuilder().getName());

// Create the plot to discord forum
DiscordUtil.getOpt(plot.getId()).ifPresent(event -> event.onPlotCreate(this.plot));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.alpsbte.plotsystem.core.system.review.PlotReview;
import com.alpsbte.plotsystem.core.system.review.ReviewNotification;
import com.alpsbte.plotsystem.utils.DependencyManager;
import com.alpsbte.plotsystem.utils.DiscordUtil;
import com.alpsbte.plotsystem.utils.ShortLink;
import com.alpsbte.plotsystem.utils.Utils;
import com.alpsbte.plotsystem.utils.enums.Status;
Expand Down Expand Up @@ -74,6 +75,8 @@
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.CompletableFuture;

import static net.kyori.adventure.text.Component.empty;
Expand Down Expand Up @@ -328,16 +331,36 @@ public static void checkPlotsForLastActivity() {
Bukkit.getScheduler().runTaskTimerAsynchronously(PlotSystem.getPlugin(), () -> {
List<Plot> plots = DataProvider.PLOT.getPlots(Status.unfinished);
FileConfiguration config = PlotSystem.getPlugin().getConfig();
long inactivityIntervalDays = config.getLong(ConfigPaths.INACTIVITY_INTERVAL);
long inactivityIntervalDays = config.getLong(ConfigPaths.INACTIVITY_INTERVAL, -2);
long rejectedInactivityIntervalDays = (config.getLong(ConfigPaths.REJECTED_INACTIVITY_INTERVAL) != -1) ? config.getLong(ConfigPaths.REJECTED_INACTIVITY_INTERVAL) : inactivityIntervalDays;
int inactivityNotificationDays = config.getInt(ConfigPaths.INACTIVITY_NOTIFICATION_DAYS, 0);
int inactivityNotificationTime = config.getInt(ConfigPaths.INACTIVITY_NOTIFICATION_TIME, 16);
if (inactivityIntervalDays == -2 && rejectedInactivityIntervalDays == -2) return;

// Determine if the current time is within the notification window.
// Run within a ±minute window around a set local time.
LocalTime now = LocalTime.now();
LocalTime start = LocalTime.of(inactivityNotificationTime, 0).minusMinutes(30);
LocalTime end = LocalTime.of(inactivityNotificationTime, 0).plusMinutes(30);
boolean inNotificationWindow = inactivityNotificationDays > 0 && !now.isBefore(start) && !now.isAfter(end);;

for (Plot plot : plots) {
LocalDate lastActivity = plot.getLastActivity();

if(lastActivity == null) continue;
long interval = plot.isRejected() ? rejectedInactivityIntervalDays : inactivityIntervalDays;
if (interval == -2 || lastActivity == null || lastActivity.plusDays(interval).isAfter(LocalDate.now())) continue;
LocalDate abandonDate = lastActivity.plusDays(interval);

// Check if today is within X days before the plot's abandon date
if(inNotificationWindow && LocalDate.now().isAfter(abandonDate.minusDays(inactivityNotificationDays))) {
// Notify the plot's owner on discord
DiscordUtil.getOpt(plot.getId()).ifPresent(event -> event.onPlotInactivity(abandonDate));
}

if (interval == -2 || abandonDate.isAfter(LocalDate.now())) continue;

Bukkit.getScheduler().runTask(PlotSystem.getPlugin(), () -> {
if (Actions.abandonPlot(plot)) {
if (Actions.abandonPlot(plot, DiscordUtil.AbandonType.INACTIVE)) {
PlotSystem.getPlugin().getComponentLogger().info(text("Abandoned plot #" + plot.getId() + " due to inactivity!"));
} else {
PlotSystem.getPlugin().getComponentLogger().warn(text("An error occurred while abandoning plot #" + plot.getId() + " due to inactivity!"));
Expand Down Expand Up @@ -384,6 +407,8 @@ public static void submitPlot(@NotNull Plot plot) {
plot.getPermissions().removeBuilderPerms(builder.getUUID());
}
}

DiscordUtil.getOpt(plot.getId()).ifPresent(DiscordUtil.PlotEventAction::onPlotSubmit);
}

public static void undoSubmit(@NotNull Plot plot) {
Expand All @@ -397,7 +422,7 @@ public static void undoSubmit(@NotNull Plot plot) {
}
}

public static boolean abandonPlot(@NotNull AbstractPlot plot) {
public static boolean abandonPlot(@NotNull AbstractPlot plot, @NotNull DiscordUtil.AbandonType type) {
try {
if (plot.getWorld() instanceof OnePlotWorld) {
if (plot.getWorld().isWorldGenerated()) {
Expand Down Expand Up @@ -431,6 +456,8 @@ public static boolean abandonPlot(@NotNull AbstractPlot plot) {
if (plot.getWorld().isWorldLoaded()) plot.getWorld().unloadWorld(false);
}
}
// Send to discord
DiscordUtil.getOpt(plot.getId()).ifPresent(event -> event.onPlotAbandon(type));
} catch (IOException | WorldEditException ex) {
PlotSystem.getPlugin().getComponentLogger().error(text("Failed to abandon plot with the ID " + plot.getId() + "!"), ex);
return false;
Expand Down Expand Up @@ -467,7 +494,7 @@ public static boolean abandonPlot(@NotNull AbstractPlot plot) {
}

public static boolean deletePlot(Plot plot) {
if (abandonPlot(plot)) {
if (abandonPlot(plot, DiscordUtil.AbandonType.COMMANDS)) {
CompletableFuture.runAsync(() -> {
if (DataProvider.PLOT.deletePlot(plot.getId())) return;
PlotSystem.getPlugin().getComponentLogger().warn(text("Failed to abandon plot with the ID " + plot.getId() + "!"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.alpsbte.plotsystem.core.database.DataProvider;
import com.alpsbte.plotsystem.core.system.Builder;
import com.alpsbte.plotsystem.core.system.plot.Plot;
import com.alpsbte.plotsystem.utils.DiscordUtil;
import com.alpsbte.plotsystem.utils.enums.Slot;
import com.alpsbte.plotsystem.utils.enums.Status;
import org.jetbrains.annotations.Nullable;
Expand Down Expand Up @@ -67,6 +68,7 @@ public UUID getReviewerUUID() {
public boolean updateFeedback(String feedback) {
if (DataProvider.REVIEW.updateFeedback(reviewId, feedback)) {
this.feedback = feedback;
DiscordUtil.getOpt(this.plot.getId()).ifPresent(event -> event.onPlotFeedback(feedback));
return true;
}
return false;
Expand Down Expand Up @@ -106,6 +108,9 @@ public boolean undoReview() {
successful = false;
PlotSystem.getPlugin().getComponentLogger().error("Failed to remove plot review with ID {} from database!", reviewId);
}
else {
DiscordUtil.getOpt(this.plot.getId()).ifPresent(DiscordUtil.PlotEventAction::onPlotUndoReview);
}

return successful;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import org.bukkit.Bukkit;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.mvplugins.multiverse.core.MultiverseCoreApi;

import java.util.Objects;
Expand All @@ -26,6 +27,10 @@ public static boolean isWorldGuardExtraFlagsEnabled() {
return PlotSystem.getPlugin().getServer().getPluginManager().isPluginEnabled("WorldGuardExtraFlags");
}

public static @Nullable org.bukkit.plugin.Plugin getDiscordIntegration() {
return PlotSystem.getPlugin().getServer().getPluginManager().getPlugin("DiscordPlotSystem");
}

/**
* @param worldName Name of the world
* @return Config path for the world
Expand Down
Loading
Loading