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;
|
||||
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
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.MainCommand;
|
||||
import xyz.etztech.minealert.listeners.GriefAlertListener;
|
||||
import xyz.etztech.minealert.listeners.OreAlertListener;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class MineAlert extends JavaPlugin {
|
||||
|
@ -68,8 +75,76 @@ public class MineAlert extends JavaPlugin {
|
|||
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) {
|
||||
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;
|
||||
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import net.md_5.bungee.api.chat.ClickEvent;
|
||||
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.BlockPlaceEvent;
|
||||
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.Lang;
|
||||
import xyz.etztech.minealert.MineAlert;
|
||||
import xyz.etztech.minealert.MuteType;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.*;
|
||||
|
||||
public class GriefAlertListener implements Listener {
|
||||
|
@ -85,7 +79,7 @@ public class GriefAlertListener implements Listener {
|
|||
"",
|
||||
"grief.url",
|
||||
"url"
|
||||
).replaceAll("\\{username}", playerName);
|
||||
);
|
||||
|
||||
int threshold = this.plugin.getConfig().getInt("grief.threshold", 5);
|
||||
if (dates.size() <= threshold) {
|
||||
|
@ -99,21 +93,7 @@ public class GriefAlertListener implements Listener {
|
|||
);
|
||||
if (!"".equals(webhook)) {
|
||||
extra.append(" and pinging Discord");
|
||||
Embed embed = new Embed()
|
||||
.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());
|
||||
}
|
||||
});
|
||||
this.plugin.sendWebhook(webhook, color, player, eventLocation, alert, usernameURL);
|
||||
}
|
||||
extra.append("...");
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
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.ClickEvent;
|
||||
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.block.BlockBreakEvent;
|
||||
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.Lang;
|
||||
import xyz.etztech.minealert.MineAlert;
|
||||
import xyz.etztech.minealert.MuteType;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
|
@ -198,20 +192,22 @@ public class OreAlertListener implements Listener {
|
|||
|
||||
private void sendAlert(BlockEvent event, int strikes, boolean ping) {
|
||||
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",
|
||||
String.format("ore.blocks.%s.color", Lang.getMaterialKey(event.getMaterial())),
|
||||
"ore.color"
|
||||
);
|
||||
));
|
||||
String usernameURL = this.plugin.getConfigStringFallback(
|
||||
"",
|
||||
String.format("ore.blocks.%s.url", Lang.getMaterialKey(event.getMaterial())),
|
||||
"ore.url",
|
||||
"url"
|
||||
).replaceAll("\\{username}", event.getPlayer().getName());
|
||||
);
|
||||
|
||||
usernameURL = MineAlert.formatAlertURL(usernameURL, event.getPlayer(), event.getLocation());
|
||||
|
||||
ComponentBuilder builder = new ComponentBuilder()
|
||||
.append(message).color(ChatColor.of(hexColor));
|
||||
.append(message).color(color.getChatColor());
|
||||
if (!"".equals(usernameURL)) {
|
||||
builder.event(new ClickEvent(ClickEvent.Action.OPEN_URL, usernameURL));
|
||||
}
|
||||
|
@ -230,21 +226,7 @@ public class OreAlertListener implements Listener {
|
|||
"webhook"
|
||||
);
|
||||
if (!"".equals(webhook)) {
|
||||
Embed embed = new Embed()
|
||||
.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());
|
||||
}
|
||||
});
|
||||
this.plugin.sendWebhook(webhook, color, event.getPlayer(), event.getLocation(), message, usernameURL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue