diff --git a/pom.xml b/pom.xml
index 183e846..d4e0ba3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
xyz.etztech
MineAlert
- 0.0.3
+ 0.0.4
jar
@@ -44,7 +44,11 @@
commons-lang
2.6
-
+
+ xyz.etztech
+ plugin-api
+ 1.0.8
+
diff --git a/src/main/java/xyz/etztech/minealert/Lang.java b/src/main/java/xyz/etztech/minealert/Lang.java
index 9100d0b..4719c69 100644
--- a/src/main/java/xyz/etztech/minealert/Lang.java
+++ b/src/main/java/xyz/etztech/minealert/Lang.java
@@ -10,6 +10,9 @@ public enum Lang {
UNKNOWN_COMMAND("This command wasn't recognized.", Color.ERROR),
PLUGIN_RELOADED("MineAlert reloaded.", Color.INFO),
WEBHOOK_FAILED("Could not send webhook.", Color.ERROR),
+ PLAYER_NOT_FOUND("Could not find the player specified.", Color.ERROR),
+ DURATION_PARSE_ERROR("Error parsing time format.", Color.ERROR),
+ ALERT_MUTE("%s's alerts have been muted.", Color.PRIMARY),
ORE_ALERT("%s has found %d %s veins.", Color.DEFAULT),
diff --git a/src/main/java/xyz/etztech/minealert/MineAlert.java b/src/main/java/xyz/etztech/minealert/MineAlert.java
index 917c741..4125344 100644
--- a/src/main/java/xyz/etztech/minealert/MineAlert.java
+++ b/src/main/java/xyz/etztech/minealert/MineAlert.java
@@ -2,6 +2,7 @@ package xyz.etztech.minealert;
import org.bukkit.plugin.java.JavaPlugin;
+import xyz.etztech.minealert.commands.AlertMute;
import xyz.etztech.minealert.commands.MainCommand;
import xyz.etztech.minealert.listeners.GriefAlertListener;
import xyz.etztech.minealert.listeners.OreAlertListener;
@@ -22,6 +23,7 @@ public class MineAlert extends JavaPlugin {
new MainCommand(this);
new GriefAlertListener(this);
new OreAlertListener(this);
+ new AlertMute(this);
}
}
diff --git a/src/main/java/xyz/etztech/minealert/MuteType.java b/src/main/java/xyz/etztech/minealert/MuteType.java
new file mode 100644
index 0000000..e88ded4
--- /dev/null
+++ b/src/main/java/xyz/etztech/minealert/MuteType.java
@@ -0,0 +1,31 @@
+package xyz.etztech.minealert;
+
+import org.bukkit.entity.Player;
+import org.bukkit.metadata.FixedMetadataValue;
+
+public enum MuteType {
+ OREALERT_MUTE("MineAlert.OreAlert"),
+ GRIEFALERT_MUTE("MineAlert.GriefAlert");
+
+ private final String metadataValue;
+
+ MuteType(String s) {
+ this.metadataValue = s;
+ }
+
+ public String getMetadataValue() {
+ return metadataValue;
+ }
+
+ public void setMuteStatus(Player player, MineAlert plugin) {
+ player.setMetadata(getMetadataValue(), new FixedMetadataValue(plugin, getMetadataValue()));
+ }
+
+ public void removeMuteStatus(Player player, MineAlert plugin) {
+ player.removeMetadata(getMetadataValue(), plugin);
+ }
+
+ public boolean hasMuteStatus(Player player, MineAlert plugin) {
+ return player.hasMetadata(this.getMetadataValue());
+ }
+}
diff --git a/src/main/java/xyz/etztech/minealert/commands/AlertMute.java b/src/main/java/xyz/etztech/minealert/commands/AlertMute.java
new file mode 100644
index 0000000..1e3a66d
--- /dev/null
+++ b/src/main/java/xyz/etztech/minealert/commands/AlertMute.java
@@ -0,0 +1,98 @@
+package xyz.etztech.minealert.commands;
+
+import net.md_5.bungee.api.chat.BaseComponent;
+import net.md_5.bungee.api.chat.ComponentBuilder;
+import org.bukkit.Bukkit;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import xyz.etztech.minealert.Color;
+import xyz.etztech.minealert.Lang;
+import xyz.etztech.minealert.MineAlert;
+import xyz.etztech.core.command.TickDuration;
+import xyz.etztech.minealert.MuteType;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public class AlertMute implements CommandExecutor {
+ MineAlert plugin;
+
+ public AlertMute(MineAlert plugin) {
+ this.plugin = plugin;
+ this.plugin.getCommand("alertmute").setExecutor(this);
+ }
+
+ @Override
+ public boolean onCommand(CommandSender commandSender, Command command, String commandPassed, String[] args) {
+ if (!commandSender.hasPermission("minealert.alert_mute")) {
+ Lang.NO_PERMISSION.sms(commandSender);
+ return true;
+ }
+
+ if (args.length == 0) {
+ BaseComponent[] message = new ComponentBuilder()
+ .color(Color.INFO.getChatColor())
+ .append("/")
+ .append(commandPassed)
+ .append(" [ore|grief]")
+ .create();
+ commandSender.spigot().sendMessage(message);
+ }
+ else {
+ Player player = commandSender.getServer().getPlayer(args[0]);
+ if (player == null) {
+ Lang.PLAYER_NOT_FOUND.sms(commandSender);
+ return true;
+ }
+
+ TickDuration duration;
+
+ try {
+ duration = TickDuration.parse(args[1]);
+ }
+ catch (Exception e) {
+ Lang.DURATION_PARSE_ERROR.sms(commandSender);
+ return true;
+ }
+
+ List mutes = new LinkedList<>();
+
+ if (args.length == 3) {
+ switch (args[2].toLowerCase()) {
+ case "ore":
+ mutes.add(MuteType.OREALERT_MUTE);
+ break;
+ case "grief":
+ mutes.add(MuteType.GRIEFALERT_MUTE);
+ break;
+ default:
+ Lang.UNKNOWN_COMMAND.sms(commandSender);
+ return true;
+ }
+ }
+ else {
+ mutes.add(MuteType.GRIEFALERT_MUTE);
+ mutes.add(MuteType.OREALERT_MUTE);
+ }
+
+ for (MuteType mute: mutes) {
+ mute.setMuteStatus(player, plugin);
+ }
+
+ Bukkit.getScheduler().runTaskLater(plugin, new Runnable() {
+ @Override
+ public void run() {
+ for (MuteType mute: mutes) {
+ mute.removeMuteStatus(player, plugin);
+ }
+ }
+ }, duration.toTicks());
+
+ Lang.ALERT_MUTE.sms(commandSender, player.getName());
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/xyz/etztech/minealert/listeners/GriefAlertListener.java b/src/main/java/xyz/etztech/minealert/listeners/GriefAlertListener.java
index 599ff31..b14a828 100644
--- a/src/main/java/xyz/etztech/minealert/listeners/GriefAlertListener.java
+++ b/src/main/java/xyz/etztech/minealert/listeners/GriefAlertListener.java
@@ -20,6 +20,7 @@ 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.*;
@@ -44,7 +45,8 @@ public class GriefAlertListener implements Listener {
}
}
- public void addAlert(String playerName, Location eventLocation, Lang lang) {
+ public void addAlert(Player player, Location eventLocation, Lang lang) {
+ String playerName = player.getName();
String alert = lang.getMessage(playerName);
purge();
@@ -67,6 +69,10 @@ public class GriefAlertListener implements Listener {
dates.add(new Date());
map.put(alert, dates);
+ if (MuteType.GRIEFALERT_MUTE.hasMuteStatus(player, plugin)) {
+ return;
+ }
+
Color color = new Color(plugin.getConfigStringFallback(
"#FFA500",
"grief.color"
@@ -130,21 +136,21 @@ public class GriefAlertListener implements Listener {
if (event.getPlayer() != null &&
(event.getCause() == BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL ||
event.getCause() == BlockIgniteEvent.IgniteCause.FIREBALL)) {
- addAlert(event.getPlayer().getName(), event.getBlock().getLocation(), Lang.IGNITE_ALERT);
+ addAlert(event.getPlayer(), event.getBlock().getLocation(), Lang.IGNITE_ALERT);
}
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
if(event.getBlockPlaced().getType() == Material.TNT) {
- addAlert(event.getPlayer().getName(), event.getBlock().getLocation(), Lang.TNT_ALERT);
+ addAlert(event.getPlayer(), event.getBlock().getLocation(), Lang.TNT_ALERT);
}
}
@EventHandler
public void onBucketEmpty(PlayerBucketEmptyEvent event) {
if(event.getBucket() == Material.LAVA_BUCKET) {
- addAlert(event.getPlayer().getName(), event.getBlock().getLocation(), Lang.LAVA_ALERT);
+ addAlert(event.getPlayer(), event.getBlock().getLocation(), Lang.LAVA_ALERT);
}
}
diff --git a/src/main/java/xyz/etztech/minealert/listeners/OreAlertListener.java b/src/main/java/xyz/etztech/minealert/listeners/OreAlertListener.java
index 10c0ab8..8abd07a 100644
--- a/src/main/java/xyz/etztech/minealert/listeners/OreAlertListener.java
+++ b/src/main/java/xyz/etztech/minealert/listeners/OreAlertListener.java
@@ -21,6 +21,7 @@ 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.*;
@@ -145,6 +146,10 @@ public class OreAlertListener implements Listener {
return;
}
+ if (MuteType.GRIEFALERT_MUTE.hasMuteStatus(event.getPlayer(), plugin)) {
+ return;
+ }
+
int strikes = 0;
for (BlockEvent e : map.getOrDefault(event.getPlayer().getUniqueId(), new ArrayList<>())) {
if (e.isParent() && e.getMaterial().name().equals(event.getMaterial().name())) {
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index e5c417d..5e3a1c2 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -9,6 +9,9 @@ commands:
minealert:
aliases: ma
description: Base command
+ alertmute:
+ aliases: am
+ description: Mutes alerts from a user
permissions:
minealert.admin:
description: Ability to reload the plugin
@@ -16,3 +19,6 @@ permissions:
minealert.alert:
description: Get alerts
default: op
+ minealert.alert_mute:
+ description: Ability to mute alerts
+ default: op