diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml
index dd986d3..f7735b1 100644
--- a/dependency-reduced-pom.xml
+++ b/dependency-reduced-pom.xml
@@ -229,7 +229,7 @@
com.comphenix.protocol
ProtocolLib
- 3.3.1
+ 3.4.0
compile
@@ -280,6 +280,12 @@
1.9.2
compile
+
+ me.botsko
+ Prism
+ 2.0.1
+ compile
+
diff --git a/pom.xml b/pom.xml
index d41bb80..c2fe24c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -200,7 +200,7 @@
com.comphenix.protocol
ProtocolLib
- 3.3.1
+ 3.4.0
@@ -257,6 +257,13 @@
DynmapAPI
1.9.2
+
+
+
+ me.botsko
+ Prism
+ 2.0.1
+
diff --git a/src/main/java/com/cnaude/purpleirc/GameListeners/PrismListener.java b/src/main/java/com/cnaude/purpleirc/GameListeners/PrismListener.java
new file mode 100644
index 0000000..8b427a3
--- /dev/null
+++ b/src/main/java/com/cnaude/purpleirc/GameListeners/PrismListener.java
@@ -0,0 +1,77 @@
+package com.cnaude.purpleirc.GameListeners;
+
+import com.cnaude.purpleirc.PurpleBot;
+import com.cnaude.purpleirc.PurpleIRC;
+import com.cnaude.purpleirc.TemplateName;
+import me.botsko.prism.events.PrismBlocksDrainEvent;
+import me.botsko.prism.events.PrismBlocksExtinguishEvent;
+import me.botsko.prism.events.PrismBlocksRollbackEvent;
+import me.botsko.prism.events.PrismCustomPlayerActionEvent;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+
+/**
+ *
+ * @author cnaude
+ */
+public class PrismListener implements Listener {
+
+ private final PurpleIRC plugin;
+
+ /**
+ *
+ * @param plugin
+ */
+ public PrismListener(PurpleIRC plugin) {
+ this.plugin = plugin;
+ }
+
+ /**
+ *
+ * @param event
+ */
+ @EventHandler
+ public void onPrismBlocksRollbackEvent(PrismBlocksRollbackEvent event) {
+ plugin.logDebug("onPrismBlocksRollbackEvent caught");
+ for (PurpleBot ircBot : plugin.ircBots.values()) {
+ ircBot.gamePrismRollback(event.onBehalfOf(), event.getQueryParameters());
+ }
+ }
+
+ /**
+ *
+ * @param event
+ */
+ @EventHandler
+ public void onPrismBlocksDrainEvent(PrismBlocksDrainEvent event) {
+ plugin.logDebug("onPrismBlocksDrainEvent caught");
+ for (PurpleBot ircBot : plugin.ircBots.values()) {
+ ircBot.gamePrismDrainOrExtinguish(TemplateName.PRISM_DRAIN, event.onBehalfOf(), event.getRadius(), event.getBlockStateChanges());
+ }
+ }
+
+ /**
+ *
+ * @param event
+ */
+ @EventHandler
+ public void onPrismBlocksExtinguishEvent(PrismBlocksExtinguishEvent event) {
+ plugin.logDebug("onPrismBlocksExtinguishEvent caught");
+ for (PurpleBot ircBot : plugin.ircBots.values()) {
+ ircBot.gamePrismDrainOrExtinguish(TemplateName.PRISM_EXTINGUISH, event.onBehalfOf(), event.getRadius(), event.getBlockStateChanges());
+ }
+ }
+
+ /**
+ *
+ * @param event
+ */
+ @EventHandler
+ public void onPrismCustomPlayerActionEvent(PrismCustomPlayerActionEvent event) {
+ plugin.logDebug("onPrismCustomPlayerActionEvent caught");
+ for (PurpleBot ircBot : plugin.ircBots.values()) {
+ ircBot.gamePrismCustom(event.getPlayer(), event.getActionTypeName(),
+ event.getMessage(), event.getPluginName());
+ }
+ }
+}
diff --git a/src/main/java/com/cnaude/purpleirc/PurpleBot.java b/src/main/java/com/cnaude/purpleirc/PurpleBot.java
index ab53870..5628f29 100644
--- a/src/main/java/com/cnaude/purpleirc/PurpleBot.java
+++ b/src/main/java/com/cnaude/purpleirc/PurpleBot.java
@@ -1,12 +1,5 @@
package com.cnaude.purpleirc;
-import com.dthielke.herochat.Chatter;
-import java.io.File;
-import java.text.Collator;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
import com.cnaude.purpleirc.IRCListeners.ActionListener;
import com.cnaude.purpleirc.IRCListeners.ConnectListener;
import com.cnaude.purpleirc.IRCListeners.DisconnectListener;
@@ -25,6 +18,7 @@
import com.cnaude.purpleirc.IRCListeners.VersionListener;
import com.cnaude.purpleirc.IRCListeners.WhoisListener;
import com.cnaude.purpleirc.Utilities.CaseInsensitiveMap;
+import com.dthielke.herochat.Chatter;
import com.dthielke.herochat.Herochat;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableSortedSet;
@@ -32,12 +26,18 @@
import com.massivecraft.factions.entity.UPlayer;
import com.nyancraft.reportrts.data.HelpRequest;
import com.titankingdoms.dev.titanchat.core.participant.Participant;
+import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.charset.Charset;
-import java.util.logging.Level;
-import java.util.logging.Logger;
+import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import me.botsko.prism.actionlibs.QueryParameters;
+import me.botsko.prism.events.BlockStateChange;
import org.bukkit.Achievement;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
@@ -2607,4 +2607,62 @@ public void setConnected(boolean connected) {
public String getFileName() {
return fileName;
}
+
+ public void gamePrismRollback(Player player, QueryParameters queryParams) {
+ if (!this.isConnected()) {
+ return;
+ }
+ for (String channelName : botChannels) {
+ if (isMessageEnabled(channelName, TemplateName.PRISM_ROLLBACK)) {
+ asyncIRCMessage(channelName, plugin.tokenizer
+ .playerTokenizer(player, plugin.getMsgTemplate(botNick, TemplateName.PRISM_ROLLBACK))
+ .replace("%COMMAND%", queryParams.getOriginalCommand())
+ .replace("%KEYWORD%", queryParams.getKeyword())
+ .replace("%SORTDIRECTION%", queryParams.getSortDirection())
+ .replace("%PARAMWORLD%", queryParams.getWorld())
+ .replace("%ID%", String.valueOf(queryParams.getId()))
+ .replace("%RADIUS%", String.valueOf(queryParams.getRadius()))
+ .replace("%X%", String.valueOf(queryParams.getSpecificBlockLocations().get(0).getX()))
+ .replace("%Y%", String.valueOf(queryParams.getSpecificBlockLocations().get(0).getY()))
+ .replace("%Z%", String.valueOf(queryParams.getSpecificBlockLocations().get(0).getZ()))
+ );
+ }
+ }
+ }
+
+ public void gamePrismDrainOrExtinguish(String template, Player player, int radius, ArrayList blockStateChange) {
+ if (!this.isConnected()) {
+ return;
+ }
+ for (String channelName : botChannels) {
+ if (isMessageEnabled(channelName, template)) {
+ asyncIRCMessage(channelName, plugin.tokenizer
+ .playerTokenizer(player, plugin.getMsgTemplate(botNick, template))
+ .replace("%RADIUS%", String.valueOf(radius))
+ .replace("%ORIGINALBLOCK%", String.valueOf(blockStateChange.get(0).getOriginalBlock().getType().name()))
+ .replace("%NEWBLOCK%", String.valueOf(blockStateChange.get(0).getNewBlock().getType().name()))
+ .replace("%X%", String.valueOf(blockStateChange.get(0).getNewBlock().getX()))
+ .replace("%Y%", String.valueOf(blockStateChange.get(0).getNewBlock().getY()))
+ .replace("%Z%", String.valueOf(blockStateChange.get(0).getNewBlock().getZ()))
+ .replace("%BLOCKWORLD%", String.valueOf(blockStateChange.get(0).getNewBlock().getWorld().getName()))
+ );
+ }
+ }
+ }
+
+ public void gamePrismCustom(Player player, String actionName, String message, String pluginName) {
+ if (!this.isConnected()) {
+ return;
+ }
+ for (String channelName : botChannels) {
+ if (isMessageEnabled(channelName, TemplateName.PRISM_CUSTOM)) {
+ asyncIRCMessage(channelName, plugin.tokenizer
+ .playerTokenizer(player, plugin.getMsgTemplate(botNick, TemplateName.PRISM_CUSTOM))
+ .replace("%ACTION%", actionName)
+ .replace("%MESSAGE%", message)
+ .replace("%PLUGIN%", pluginName)
+ );
+ }
+ }
+ }
}
diff --git a/src/main/java/com/cnaude/purpleirc/PurpleIRC.java b/src/main/java/com/cnaude/purpleirc/PurpleIRC.java
index d23bbd6..b461b05 100644
--- a/src/main/java/com/cnaude/purpleirc/PurpleIRC.java
+++ b/src/main/java/com/cnaude/purpleirc/PurpleIRC.java
@@ -16,44 +16,45 @@
import com.cnaude.purpleirc.GameListeners.HeroChatListener;
import com.cnaude.purpleirc.GameListeners.McMMOChatListener;
import com.cnaude.purpleirc.GameListeners.OreBroadcastListener;
+import com.cnaude.purpleirc.GameListeners.PrismListener;
import com.cnaude.purpleirc.GameListeners.ReportRTSListener;
import com.cnaude.purpleirc.GameListeners.TitanChatListener;
import com.cnaude.purpleirc.GameListeners.TownyChatListener;
import com.cnaude.purpleirc.Hooks.DynmapHook;
-import com.cnaude.purpleirc.Hooks.VaultHook;
-import com.cnaude.purpleirc.Utilities.ColorConverter;
-import com.cnaude.purpleirc.Utilities.RegexGlobber;
-import com.google.common.base.Joiner;
-import com.onarandombox.MultiverseCore.api.MVPlugin;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.management.ManagementFactory;
-import java.text.Collator;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
import com.cnaude.purpleirc.Hooks.FactionChatHook;
import com.cnaude.purpleirc.Hooks.JobsHook;
import com.cnaude.purpleirc.Hooks.ShortifyHook;
import com.cnaude.purpleirc.Hooks.TownyChatHook;
import com.cnaude.purpleirc.Hooks.VanishHook;
+import com.cnaude.purpleirc.Hooks.VaultHook;
import com.cnaude.purpleirc.Utilities.CaseInsensitiveMap;
import com.cnaude.purpleirc.Utilities.ChatTokenizer;
+import com.cnaude.purpleirc.Utilities.ColorConverter;
import com.cnaude.purpleirc.Utilities.IRCMessageHandler;
import com.cnaude.purpleirc.Utilities.NetPackets;
import com.cnaude.purpleirc.Utilities.Query;
+import com.cnaude.purpleirc.Utilities.RegexGlobber;
+import com.google.common.base.Joiner;
+import com.onarandombox.MultiverseCore.api.MVPlugin;
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import java.io.BufferedReader;
import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.management.ManagementFactory;
+import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.InvalidConfigurationException;
@@ -146,7 +147,7 @@ public class PurpleIRC extends JavaPlugin {
public VaultHook vaultHelpers;
public VanishHook vanishHook;
private YamlConfiguration heroConfig;
- private File cacheFile;
+ private final File cacheFile;
public PurpleIRC() {
this.MAINCONFIG = "MAIN-CONFIG";
@@ -194,7 +195,7 @@ public void onEnable() {
getServer().getPluginManager().registerEvents(new GamePlayerJoinListener(this), this);
getServer().getPluginManager().registerEvents(new GamePlayerKickListener(this), this);
getServer().getPluginManager().registerEvents(new GamePlayerQuitListener(this), this);
- getServer().getPluginManager().registerEvents(new GameServerCommandListener(this), this);
+ getServer().getPluginManager().registerEvents(new GameServerCommandListener(this), this);
if (isPluginEnabled("Herochat")) {
logInfo("Enabling HeroChat support.");
getServer().getPluginManager().registerEvents(new HeroChatListener(this), this);
@@ -216,6 +217,12 @@ public void onEnable() {
} else {
logInfo("TitanChat not detected.");
}
+ if (isPluginEnabled("Prism")) {
+ logInfo("Enabling Prism support.");
+ getServer().getPluginManager().registerEvents(new PrismListener(this), this);
+ } else {
+ logInfo("Prism not detected.");
+ }
if (isPluginEnabled("TownyChat")) {
logInfo("Enabling TownyChat support.");
getServer().getPluginManager().registerEvents(new TownyChatListener(this), this);
diff --git a/src/main/java/com/cnaude/purpleirc/TemplateName.java b/src/main/java/com/cnaude/purpleirc/TemplateName.java
index 972e3a2..7d8e6bb 100644
--- a/src/main/java/com/cnaude/purpleirc/TemplateName.java
+++ b/src/main/java/com/cnaude/purpleirc/TemplateName.java
@@ -96,5 +96,10 @@ public class TemplateName {
public final static String DEATH_MESSAGES = "death-messages";
public final static String ORE_BROADCAST = "ore-broadcast";
+
+ public final static String PRISM_ROLLBACK = "prism-rollback";
+ public final static String PRISM_DRAIN = "prism-drain";
+ public final static String PRISM_EXTINGUISH = "prism-extinguish";
+ public final static String PRISM_CUSTOM = "prism-custom";
}
diff --git a/src/main/resources/SampleBot.yml b/src/main/resources/SampleBot.yml
index d8ffc96..fd991b4 100644
--- a/src/main/resources/SampleBot.yml
+++ b/src/main/resources/SampleBot.yml
@@ -98,6 +98,11 @@ channels:
- game-mode
# Essentials helpop messages (/helpop /amsg /ac)
- ess-helpop
+ # Prism
+ #- prism-rollback
+ #- prism-drain
+ #- prism-extinguish
+ #- prism-custom
# The game-afk message type is not functional yet.
#- game-afk
# These messages are sent from IRC to game (see permissions)
@@ -163,7 +168,7 @@ channels:
hero-channel: admin
# Towny channel destination for IRC messages
towny-channel: irc
- # Log all messages from IRC to HeroChat
+ # Log all messages from IRC to HeroChat
log-irc-to-hero-chat: false
# ops - IRC hostname mask styled ops list
ops:
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index b2b0114..8be684a 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -39,6 +39,29 @@ channel-check-interval: 100
# %TOWNYMSGCOLOR% - Towny message color
# %JOBS% - Player jobs
# %JOBS% - Player jobs shortened
+# Prism custom tokens:
+# prism-rollback:
+# %COMMAND%
+# %KEYWORD%
+# %SORTDIRECTION%
+# %PARAMWORLD%
+# %ID%
+# %RADIUS%
+# %X%
+# %Y%
+# %Z%
+# prism-drain and prism-extinguish:
+# %RADIUS%
+# %ORIGINALBLOCK%
+# %NEWBLOCK%
+# %X%
+# %Y%
+# %Z%
+# %BLOCKWORLD%
+# prism-custom:
+# %ACTION%
+# %MESSAGE%
+# %PLUGIN%
message-format:
# Message templates for game to IRC messages
console-chat: '[&dServer&r] %MESSAGE%'
@@ -141,6 +164,11 @@ message-format:
irc: '[IRC]%PLAYERPREFIX%%NAME% %MESSAGE%'
broadcast-message: '[Broadcast] <%NAME%> %MESSAGE%'
broadcast-console-message: '[Broadcast] %MESSAGE%'
+ # Prism templates. See above for token names.
+ prism-rollback: '[PrismRollback] [Player: %NAME%] [Radius: %RADIUS%] [Command: %COMMAND%] [Keyword: %KEYWORD%] [X,Y,Z: %X%,%Y%,%Z%] [World: %PARAMWORLD%]'
+ prism-drain: '[PrismDrain] [Player: %NAME%] [Radius: %RADIUS%] [OrigBlock: %ORIGINALBLOCK%] [NewBlock: %NEWBLOCK%] [X,Y,Z: %X%,%Y%,%Z%] [World: %BLOCKWORLD%]'
+ prism-extinguish: '[PrismExtinguish] [Player: %NAME%] [Radius%: %RADIUS] [OrigBlock: %ORIGINALBLOCK%] [NewBlock: %NEWBLOCK%] [X,Y,Z: %X%,%Y%,%Z%] [World: %BLOCKWORLD%]'
+ prism-custom: '[PrismCustom] [Player: %NAME%] [Action: %ACTION%] [Message: %MESSAGE%] [Plugin: %PLUGIN%]'
# Defaults below take effect when user joins IRC and matching player is offline
default-player-suffix: ''
default-player-prefix: ''