Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Send Discord player messages asynchronously #13

Merged
merged 2 commits into from
Aug 5, 2023
Merged
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
3 changes: 1 addition & 2 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@
*/
pluginManagement {
repositories {
maven("https://repo.papermc.io/repository/maven-public/")
gradlePluginPortal()
gradlePluginPortal()
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,53 +1,65 @@
package ghosti3.mcplugin.customplugin;

import static org.bukkit.entity.EntityType.CREEPER;

import ghosti3.mcplugin.customplugin.disco.DiscordEmbed;
import ghosti3.mcplugin.customplugin.disco.DiscordMessage;
import ghosti3.mcplugin.customplugin.disco.DiscordRunnable;
import org.bukkit.Color;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerQuitEvent.QuitReason;

import ghosti3.mcplugin.customplugin.disco.DiscordEmbed;
import ghosti3.mcplugin.customplugin.disco.DiscordMessage;
import ghosti3.mcplugin.customplugin.disco.DiscordPush;

import static org.bukkit.entity.EntityType.CREEPER;

import org.bukkit.Color;
import org.bukkit.scheduler.BukkitScheduler;

class CustomEventListener implements Listener {
private final DiscordPush senderRef;

public CustomEventListener(CustomPlugin instance) {
this.senderRef = instance.getSender();
}
private final CustomPlugin plugin;
private final BukkitScheduler scheduler;

@EventHandler
public void onCreeperExplode(EntityExplodeEvent evt) {
if (evt.getEntityType() != CREEPER)
return;
public CustomEventListener(CustomPlugin instance) {
this.plugin = instance;
this.scheduler = instance.getServer().getScheduler();
}

evt.blockList().clear();
@EventHandler
public void onCreeperExplode(EntityExplodeEvent evt) {
if (evt.getEntityType() != CREEPER) {
return;
}

@EventHandler
public void onPlayerJoin(PlayerJoinEvent evt) {
var embed = new DiscordEmbed.Builder()
.setColor(Color.LIME)
.setTitle("%s joined the server".formatted(evt.getPlayer().getName()))
.toEmbed();
senderRef.send(new DiscordMessage.Builder().setEmbed(embed).toMessage());
}
evt.blockList().clear();
}

@EventHandler
public void onPlayerQuit(PlayerQuitEvent evt) {
if (evt.getReason() != QuitReason.DISCONNECTED)
return;
@EventHandler
public void onPlayerJoin(PlayerJoinEvent evt) {
var embed = new DiscordEmbed.Builder()
.setColor(Color.LIME)
.setTitle("%s joined the server".formatted(
evt.getPlayer().getName()))
.toEmbed();
this.scheduler.runTaskAsynchronously(
plugin, new DiscordRunnable(
plugin.getSender(),
new DiscordMessage.Builder().setEmbed(embed).toMessage()));
}

var embed = new DiscordEmbed.Builder()
.setColor(Color.RED)
.setTitle("%s left the server".formatted(evt.getPlayer().getName()))
.toEmbed();
senderRef.send(new DiscordMessage.Builder().setEmbed(embed).toMessage());
@EventHandler
public void onPlayerQuit(PlayerQuitEvent evt) {
if (evt.getReason() != QuitReason.DISCONNECTED) {
return;
}

var embed =
new DiscordEmbed.Builder()
.setColor(Color.RED)
.setTitle("%s left the server".formatted(evt.getPlayer().getName()))
.toEmbed();
this.scheduler.runTaskAsynchronously(
plugin, new DiscordRunnable(
plugin.getSender(),
new DiscordMessage.Builder().setEmbed(embed).toMessage()));
}
}
96 changes: 47 additions & 49 deletions src/main/java/ghosti3/mcplugin/customplugin/CustomPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,71 +3,69 @@
*/
package ghosti3.mcplugin.customplugin;

import ghosti3.mcplugin.customplugin.disco.DiscordPush;
import java.net.MalformedURLException;
import java.util.Optional;
import java.util.logging.Logger;

import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import ghosti3.mcplugin.customplugin.disco.DiscordPush;

public class CustomPlugin extends JavaPlugin {
private static CustomPlugin instance = null;

private Settings settings;
private Logger logger = null;
private DiscordPush sender = null;

@Override
public void onEnable() {
CustomPlugin.instance = this;
logger = getLogger();
this.saveDefaultConfig();
settings = Settings.fromFileConfig(getConfig());
private static CustomPlugin instance = null;

try {
sender = new DiscordPush(settings.webhookUrl, logger);
} catch (MalformedURLException e) {
logger.severe("Bad WEBHOOK_URL.");
getServer().getPluginManager().disablePlugin(this);
return;
}
private Settings settings;
private Logger logger = null;
private DiscordPush sender = null;

logger.info("Registering custom events");
getServer().getPluginManager()
.registerEvents(new CustomEventListener(this), this);
@Override
public void onEnable() {
CustomPlugin.instance = this;
logger = getLogger();
this.saveDefaultConfig();
settings = Settings.fromFileConfig(getConfig());

sender.send(DiscordPush.SERVER_ONLINE);
try {
sender = new DiscordPush(settings.webhookUrl, logger);
} catch (MalformedURLException e) {
logger.severe("Bad WEBHOOK_URL.");
getServer().getPluginManager().disablePlugin(this);
return;
}

@Override
public void onDisable() {
if (sender != null) {
sender.send(DiscordPush.SERVER_OFFLINE);
}
logger.info("Registering custom events");
getServer().getPluginManager().registerEvents(new CustomEventListener(this),
this);

CustomPlugin.instance = null;
}
sender.send(DiscordPush.SERVER_ONLINE);
}

@NotNull
public Settings getSettings() {
return settings;
@Override
public void onDisable() {
if (sender != null) {
sender.send(DiscordPush.SERVER_OFFLINE);
}

@NotNull
public DiscordPush getSender() {
return sender;
}
CustomPlugin.instance = null;
}

/**
* Returns possible instance of initialised plugin.
*
* @return possible reference to {@link CustomPlugin} active instance
*/
@Nullable
public static Optional<CustomPlugin> getInstance() {
return Optional.ofNullable(instance);
}
@NotNull
public Settings getSettings() {
return settings;
}

@NotNull
public DiscordPush getSender() {
return sender;
}

/**
* Returns possible instance of initialised plugin.
*
* @return possible reference to {@link CustomPlugin} active instance
*/
@Nullable
public static Optional<CustomPlugin> getInstance() {
return Optional.ofNullable(instance);
}
}
47 changes: 24 additions & 23 deletions src/main/java/ghosti3/mcplugin/customplugin/Settings.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,34 +6,35 @@
* Settings, Singleton
*/
public class Settings {
private static Settings instance;
private static Settings instance;

public final String webhookUrl;
public final int messageDelay;
public final String webhookUrl;
public final int messageDelay;

private Settings(final String webhookUrl, final int messageDelay) {
this.webhookUrl = webhookUrl;
this.messageDelay = messageDelay;
}

@Override
public String toString() {
return String.format(
"Settings [webhookUrl = '%s', messageDelay = '%d']",
webhookUrl, messageDelay);
}
private Settings(final String webhookUrl, final int messageDelay) {
this.webhookUrl = webhookUrl;
this.messageDelay = messageDelay;
}

public static Settings fromFileConfig(FileConfiguration config) {
if (instance != null)
return instance;
@Override
public String toString() {
return String.format("Settings [webhookUrl = '%s', messageDelay = '%d']",
webhookUrl, messageDelay);
}

String webhookUrl = config.getString("webhook_url");
int messageDelay = config.getInt("mdelay", 5);
public static Settings fromFileConfig(FileConfiguration config) {
if (instance != null) {
return instance;
}

if (webhookUrl == null)
throw new NullPointerException();
String webhookUrl = config.getString("webhook_url");
int messageDelay = config.getInt("mdelay", 5);

instance = new Settings(webhookUrl, messageDelay);
return instance;
if (webhookUrl == null) {
throw new NullPointerException();
}

instance = new Settings(webhookUrl, messageDelay);
return instance;
}
}
Loading