Skip to content
Draft
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why no import?

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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Import

return PlotSystem.getPlugin().getServer().getPluginManager().getPlugin("DiscordPlotSystem");
}

/**
* @param worldName Name of the world
* @return Config path for the world
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
[Feature] Discord Integration (f/ ASEAN) v1.2.3 by tintinkung · Pull Request #200 · AlpsBTE/Plot-System · GitHub
Skip to content
Draft
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why no import?

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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Import

return PlotSystem.getPlugin().getServer().getPluginManager().getPlugin("DiscordPlotSystem");
}

/**
* @param worldName Name of the world
* @return Config path for the world
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [Feature] Discord Integration (f/ ASEAN) v1.2.3 by tintinkung · Pull Request #200 · AlpsBTE/Plot-System · GitHub
Skip to content
Draft
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why no import?

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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Import

return PlotSystem.getPlugin().getServer().getPluginManager().getPlugin("DiscordPlotSystem");
}

/**
* @param worldName Name of the world
* @return Config path for the world
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [Feature] Discord Integration (f/ ASEAN) v1.2.3 by tintinkung · Pull Request #200 · AlpsBTE/Plot-System · GitHub
Skip to content
Draft
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why no import?

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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Import

return PlotSystem.getPlugin().getServer().getPluginManager().getPlugin("DiscordPlotSystem");
}

/**
* @param worldName Name of the world
* @return Config path for the world
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' [Feature] Discord Integration (f/ ASEAN) v1.2.3 by tintinkung · Pull Request #200 · AlpsBTE/Plot-System · GitHub
Skip to content
Draft
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why no import?

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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Import

return PlotSystem.getPlugin().getServer().getPluginManager().getPlugin("DiscordPlotSystem");
}

/**
* @param worldName Name of the world
* @return Config path for the world
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [Feature] Discord Integration (f/ ASEAN) v1.2.3 by tintinkung · Pull Request #200 · AlpsBTE/Plot-System · GitHub
Skip to content
Draft
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why no import?

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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Import

return PlotSystem.getPlugin().getServer().getPluginManager().getPlugin("DiscordPlotSystem");
}

/**
* @param worldName Name of the world
* @return Config path for the world
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [Feature] Discord Integration (f/ ASEAN) v1.2.3 by tintinkung · Pull Request #200 · AlpsBTE/Plot-System · GitHub
Skip to content
Draft
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why no import?

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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Import

return PlotSystem.getPlugin().getServer().getPluginManager().getPlugin("DiscordPlotSystem");
}

/**
* @param worldName Name of the world
* @return Config path for the world
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); [Feature] Discord Integration (f/ ASEAN) v1.2.3 by tintinkung · Pull Request #200 · AlpsBTE/Plot-System · GitHub
Skip to content
Draft
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why no import?

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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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() {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Import

return PlotSystem.getPlugin().getServer().getPluginManager().getPlugin("DiscordPlotSystem");
}

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