Added location information to webhooks
+ Added `World` and `Location` fields + Player Alert URLs can have fields for locationsmaster
parent
78791c6ee2
commit
bc339caad6
|
@ -1,13 +1,20 @@
|
||||||
package xyz.etztech.minealert;
|
package xyz.etztech.minealert;
|
||||||
|
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import xyz.etztech.Javacord;
|
||||||
|
import xyz.etztech.Webhook;
|
||||||
|
import xyz.etztech.embed.Author;
|
||||||
|
import xyz.etztech.embed.Embed;
|
||||||
|
import xyz.etztech.embed.Field;
|
||||||
import xyz.etztech.minealert.commands.AlertMute;
|
import xyz.etztech.minealert.commands.AlertMute;
|
||||||
import xyz.etztech.minealert.commands.MainCommand;
|
import xyz.etztech.minealert.commands.MainCommand;
|
||||||
import xyz.etztech.minealert.listeners.GriefAlertListener;
|
import xyz.etztech.minealert.listeners.GriefAlertListener;
|
||||||
import xyz.etztech.minealert.listeners.OreAlertListener;
|
import xyz.etztech.minealert.listeners.OreAlertListener;
|
||||||
|
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
public class MineAlert extends JavaPlugin {
|
public class MineAlert extends JavaPlugin {
|
||||||
|
@ -68,8 +75,76 @@ public class MineAlert extends JavaPlugin {
|
||||||
return def;
|
return def;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param player Player to check
|
||||||
|
* @param muteType Type of alert to check fo
|
||||||
|
* @return True if the player ignores the alert, false otherwise
|
||||||
|
*/
|
||||||
static public Boolean hasIgnoreAlertPerm(Player player, MuteType muteType) {
|
static public Boolean hasIgnoreAlertPerm(Player player, MuteType muteType) {
|
||||||
return player.hasPermission("minealert.ignore") || player.hasPermission(muteType.getMetadataValue());
|
return player.hasPermission("minealert.ignore") || player.hasPermission(muteType.getMetadataValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param baseURL Template URL string
|
||||||
|
* @param player Player that generated the alert
|
||||||
|
* @param location Location of the alert
|
||||||
|
* @return Formatted alert URL
|
||||||
|
*/
|
||||||
|
static public String formatAlertURL(String baseURL, Player player, Location location) {
|
||||||
|
return baseURL.replaceAll("\\{username}", player.getName())
|
||||||
|
.replaceAll("\\{x}", String.valueOf(location.getBlockX()))
|
||||||
|
.replaceAll("\\{y}", String.valueOf(location.getBlockY()))
|
||||||
|
.replaceAll("\\{z}", String.valueOf(location.getBlockZ()))
|
||||||
|
.replaceAll("\\{world_name}", location.getWorld().getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param location Location to format
|
||||||
|
* @return Location string
|
||||||
|
*/
|
||||||
|
static public String formattedLocation(Location location) {
|
||||||
|
return String.format("%d %d %d", location.getBlockX(), location.getBlockY(), location.getBlockZ());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param color Color of the embed
|
||||||
|
* @param player Player the alert is for
|
||||||
|
* @param location Location of the alert
|
||||||
|
* @param message Alert message
|
||||||
|
* @param baseURL Template url
|
||||||
|
* @return Alert Embed
|
||||||
|
*/
|
||||||
|
static public Embed buildAlertEmbed(Color color, Player player, Location location, String message, String baseURL) {
|
||||||
|
String usernameURL = formatAlertURL(baseURL, player, location);
|
||||||
|
return new Embed()
|
||||||
|
.color(color.getInt())
|
||||||
|
.description(Javacord.escapeFormat(message))
|
||||||
|
.timestamp(OffsetDateTime.now())
|
||||||
|
.author(new Author(player.getName(),
|
||||||
|
!"".equals(usernameURL) ? usernameURL : "",
|
||||||
|
String.format("https://minotar.net/helm/%s/100.png", player.getName()),
|
||||||
|
""))
|
||||||
|
.addField(new Field("Location", String.format("`%s`", MineAlert.formattedLocation(location))))
|
||||||
|
.addField(new Field("World", String.format("`%s`", location.getWorld().getName())));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param webhookURL URL to send the webhook to
|
||||||
|
* @param color Color of the embed
|
||||||
|
* @param player Player the alert is for
|
||||||
|
* @param location Location of the alert
|
||||||
|
* @param message Alert message
|
||||||
|
* @param baseURL Template url
|
||||||
|
*/
|
||||||
|
public void sendWebhook(String webhookURL, Color color, Player player, Location location, String message, String baseURL) {
|
||||||
|
this.getServer().getScheduler().runTaskAsynchronously(this, () -> {
|
||||||
|
Embed embed = buildAlertEmbed(color, player, location, message, baseURL);
|
||||||
|
try {
|
||||||
|
Javacord.sendWebhook(webhookURL, new Webhook("@here", embed));
|
||||||
|
} catch (Exception e) {
|
||||||
|
this.log(Lang.WEBHOOK_FAILED.getMessage());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package xyz.etztech.minealert.listeners;
|
package xyz.etztech.minealert.listeners;
|
||||||
|
|
||||||
import net.md_5.bungee.api.ChatColor;
|
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import net.md_5.bungee.api.chat.ClickEvent;
|
import net.md_5.bungee.api.chat.ClickEvent;
|
||||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||||
|
@ -13,16 +12,11 @@ import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.BlockIgniteEvent;
|
import org.bukkit.event.block.BlockIgniteEvent;
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||||
import xyz.etztech.Javacord;
|
|
||||||
import xyz.etztech.Webhook;
|
|
||||||
import xyz.etztech.embed.Author;
|
|
||||||
import xyz.etztech.embed.Embed;
|
|
||||||
import xyz.etztech.minealert.Color;
|
import xyz.etztech.minealert.Color;
|
||||||
import xyz.etztech.minealert.Lang;
|
import xyz.etztech.minealert.Lang;
|
||||||
import xyz.etztech.minealert.MineAlert;
|
import xyz.etztech.minealert.MineAlert;
|
||||||
import xyz.etztech.minealert.MuteType;
|
import xyz.etztech.minealert.MuteType;
|
||||||
|
|
||||||
import java.time.OffsetDateTime;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class GriefAlertListener implements Listener {
|
public class GriefAlertListener implements Listener {
|
||||||
|
@ -85,7 +79,7 @@ public class GriefAlertListener implements Listener {
|
||||||
"",
|
"",
|
||||||
"grief.url",
|
"grief.url",
|
||||||
"url"
|
"url"
|
||||||
).replaceAll("\\{username}", playerName);
|
);
|
||||||
|
|
||||||
int threshold = this.plugin.getConfig().getInt("grief.threshold", 5);
|
int threshold = this.plugin.getConfig().getInt("grief.threshold", 5);
|
||||||
if (dates.size() <= threshold) {
|
if (dates.size() <= threshold) {
|
||||||
|
@ -99,21 +93,7 @@ public class GriefAlertListener implements Listener {
|
||||||
);
|
);
|
||||||
if (!"".equals(webhook)) {
|
if (!"".equals(webhook)) {
|
||||||
extra.append(" and pinging Discord");
|
extra.append(" and pinging Discord");
|
||||||
Embed embed = new Embed()
|
this.plugin.sendWebhook(webhook, color, player, eventLocation, alert, usernameURL);
|
||||||
.color(color.getInt())
|
|
||||||
.description(Javacord.escapeFormat(alert))
|
|
||||||
.timestamp(OffsetDateTime.now())
|
|
||||||
.author(new Author(playerName,
|
|
||||||
!"".equals(usernameURL) ? usernameURL : "",
|
|
||||||
String.format("https://minotar.net/helm/%s/100.png", playerName),
|
|
||||||
""));
|
|
||||||
this.plugin.getServer().getScheduler().runTaskAsynchronously(this.plugin, () -> {
|
|
||||||
try {
|
|
||||||
Javacord.sendWebhook(webhook, new Webhook("@here", embed));
|
|
||||||
} catch (Exception e) {
|
|
||||||
this.plugin.log(Lang.WEBHOOK_FAILED.getMessage());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
extra.append("...");
|
extra.append("...");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package xyz.etztech.minealert.listeners;
|
package xyz.etztech.minealert.listeners;
|
||||||
|
|
||||||
import net.md_5.bungee.api.ChatColor;
|
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import net.md_5.bungee.api.chat.ClickEvent;
|
import net.md_5.bungee.api.chat.ClickEvent;
|
||||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||||
|
@ -14,16 +13,11 @@ import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
import xyz.etztech.Javacord;
|
|
||||||
import xyz.etztech.Webhook;
|
|
||||||
import xyz.etztech.embed.Author;
|
|
||||||
import xyz.etztech.embed.Embed;
|
|
||||||
import xyz.etztech.minealert.Color;
|
import xyz.etztech.minealert.Color;
|
||||||
import xyz.etztech.minealert.Lang;
|
import xyz.etztech.minealert.Lang;
|
||||||
import xyz.etztech.minealert.MineAlert;
|
import xyz.etztech.minealert.MineAlert;
|
||||||
import xyz.etztech.minealert.MuteType;
|
import xyz.etztech.minealert.MuteType;
|
||||||
|
|
||||||
import java.time.OffsetDateTime;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
|
@ -198,20 +192,22 @@ public class OreAlertListener implements Listener {
|
||||||
|
|
||||||
private void sendAlert(BlockEvent event, int strikes, boolean ping) {
|
private void sendAlert(BlockEvent event, int strikes, boolean ping) {
|
||||||
String message = Lang.ORE_ALERT.getMessage(event.getPlayer().getName(), strikes, Lang.getMaterialName(event.getMaterial()));
|
String message = Lang.ORE_ALERT.getMessage(event.getPlayer().getName(), strikes, Lang.getMaterialName(event.getMaterial()));
|
||||||
String hexColor = this.plugin.getConfigStringFallback(
|
Color color = new Color(plugin.getConfigStringFallback(
|
||||||
"#AAAAAA",
|
"#AAAAAA",
|
||||||
String.format("ore.blocks.%s.color", Lang.getMaterialKey(event.getMaterial())),
|
String.format("ore.blocks.%s.color", Lang.getMaterialKey(event.getMaterial())),
|
||||||
"ore.color"
|
"ore.color"
|
||||||
);
|
));
|
||||||
String usernameURL = this.plugin.getConfigStringFallback(
|
String usernameURL = this.plugin.getConfigStringFallback(
|
||||||
"",
|
"",
|
||||||
String.format("ore.blocks.%s.url", Lang.getMaterialKey(event.getMaterial())),
|
String.format("ore.blocks.%s.url", Lang.getMaterialKey(event.getMaterial())),
|
||||||
"ore.url",
|
"ore.url",
|
||||||
"url"
|
"url"
|
||||||
).replaceAll("\\{username}", event.getPlayer().getName());
|
);
|
||||||
|
|
||||||
|
usernameURL = MineAlert.formatAlertURL(usernameURL, event.getPlayer(), event.getLocation());
|
||||||
|
|
||||||
ComponentBuilder builder = new ComponentBuilder()
|
ComponentBuilder builder = new ComponentBuilder()
|
||||||
.append(message).color(ChatColor.of(hexColor));
|
.append(message).color(color.getChatColor());
|
||||||
if (!"".equals(usernameURL)) {
|
if (!"".equals(usernameURL)) {
|
||||||
builder.event(new ClickEvent(ClickEvent.Action.OPEN_URL, usernameURL));
|
builder.event(new ClickEvent(ClickEvent.Action.OPEN_URL, usernameURL));
|
||||||
}
|
}
|
||||||
|
@ -230,21 +226,7 @@ public class OreAlertListener implements Listener {
|
||||||
"webhook"
|
"webhook"
|
||||||
);
|
);
|
||||||
if (!"".equals(webhook)) {
|
if (!"".equals(webhook)) {
|
||||||
Embed embed = new Embed()
|
this.plugin.sendWebhook(webhook, color, event.getPlayer(), event.getLocation(), message, usernameURL);
|
||||||
.color(Color.hexToInt(hexColor))
|
|
||||||
.description(Javacord.escapeFormat(message))
|
|
||||||
.timestamp(OffsetDateTime.now())
|
|
||||||
.author(new Author(event.getPlayer().getName(),
|
|
||||||
!"".equals(usernameURL) ? usernameURL : "",
|
|
||||||
String.format("https://minotar.net/helm/%s/100.png", event.getPlayer().getName()),
|
|
||||||
""));
|
|
||||||
this.plugin.getServer().getScheduler().runTaskAsynchronously(this.plugin, () -> {
|
|
||||||
try {
|
|
||||||
Javacord.sendWebhook(webhook, new Webhook(ping ? "@here" : "", embed));
|
|
||||||
} catch (Exception e) {
|
|
||||||
this.plugin.log(Lang.WEBHOOK_FAILED.getMessage());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue