Implemented a chat event handler system to allow for manipulating and handeling the various chat/command events.

This commit is contained in:
LexManos 2012-04-02 02:26:13 -07:00
parent 1a024e5656
commit f327dd5d7f
6 changed files with 234 additions and 14 deletions

View File

@ -209,6 +209,70 @@ public class ForgeHooks
}
static LinkedList<IEntityInteractHandler> entityInteractHandlers = new LinkedList<IEntityInteractHandler>();
public static String onServerChat(EntityPlayer player, String message)
{
for (IChatHandler handler : chatHandlers)
{
message = handler.onServerChat(player, message);
if (message == null)
{
return null;
}
}
return message;
}
public static boolean onChatCommand(EntityPlayer player, boolean isOp, String command)
{
for (IChatHandler handler : chatHandlers)
{
if (handler.onChatCommand(player, isOp, command))
{
return true;
}
}
return false;
}
public static boolean onServerCommand(Object listener, String username, String command)
{
for (IChatHandler handler : chatHandlers)
{
if (handler.onServerCommand(listener, username, command))
{
return true;
}
}
return false;
}
public static String onServerCommandSay(Object listener, String username, String message)
{
for (IChatHandler handler : chatHandlers)
{
message = handler.onServerCommandSay(listener, username, message);
if (message == null)
{
return null;
}
}
return message;
}
public static String onClientChatRecv(String message)
{
for (IChatHandler handler : chatHandlers)
{
message = handler.onClientChatRecv(message);
if (message == null)
{
return null;
}
}
return message;
}
static LinkedList<IChatHandler> chatHandlers = new LinkedList<IChatHandler>();
// Plant Management
// ------------------------------------------------------------
static class ProbableItem

View File

@ -0,0 +1,76 @@
package net.minecraft.src.forge;
import net.minecraft.src.EntityPlayer;
public interface IChatHandler
{
/**
* Called when a player sends a normal chat message to the server,
* you can manipulate the message parameter by returning a modified
* version from this function.
*
* This is only called on the server side.
*
* @param player The player issuing the message
* @param message The message the player is sending
* @return The message to be displayed, normal case is the 'message' parameter. Return null to cancel displaying this message.
*/
public String onServerChat(EntityPlayer player, String message);
/**
* Called when a player sends a normal chat message to the server
* that starts with a '/'.
*
* This is only called on the server side.
*
* Return true from this function to indicate that you have
* handled the command and no further processing is necessary.
*
* @param player The player trying to issue the command
* @param isOp True if the player is on the Op list
* @param command The command trying to be issued
* @return True if no further processing is necessary, false to continue processing.
*/
public boolean onChatCommand(EntityPlayer player, boolean isOp, String command);
/**
* Called when either the console or a player issues a / command that is not handled elsewhere.
*
* This is only called on the server side.
*
* Return true from this function to indicate that you have
* handled the command and no further processing is necessary.
*
* The listener will always be a instance of ICommandListener, but because the client does
* not have this class it is defined as a Object to allow client compilation.
*
* @param listener The source of the command, will always be a instance of ICommandListener
* @param username The username of the person issuing the command, 'CONSOLE' if it's not a player.
* @param command The command trying to be issued
* @return True if no further processing is necessary, false to continue processing.
*/
public boolean onServerCommand(Object listener, String username, String command);
/**
*
* Called when either the console or a player issues the /say command
*
* This is only called on the server side.
*
* @param listener The source of the command, will always be a instance of ICommandListener
* @param username The username of the person issuing the command, 'CONSOLE' if it's not a player.
* @param message The message trying to be sent, without the /say
* @return The message to be displayed, normal case is the 'message' parameter. Return null to cancel displaying this message.
*/
public String onServerCommandSay(Object listener, String username, String message);
/**
* Called when the client receives a Chat packet.
*
* This is only called on the client side
*
* @param message The chat message received
* @return The message to be displayed, normal case is the 'message' parameter. Return null to cancel displaying this message.
*/
public String onClientChatRecv(String message);
}

View File

@ -120,6 +120,15 @@ public class MinecraftForge
ForgeHooks.entityInteractHandlers.add(handler);
}
/**
* Registers a new chat handler.
* @param handler The Handler to be registered
*/
public static void registerChatHandler(IChatHandler handler)
{
ForgeHooks.chatHandlers.add(handler);
}
/**
* This is not supposed to be called outside of Minecraft internals.
*/

View File

@ -50,7 +50,22 @@
ModLoader.serverLogin(this, par1Packet1Login);
}
@@ -675,7 +704,19 @@
@@ -587,8 +616,12 @@
public void handleChat(Packet3Chat par1Packet3Chat)
{
- this.mc.ingameGUI.addChatMessage(par1Packet3Chat.message);
- ModLoader.serverChat(par1Packet3Chat.message);
+ par1Packet3Chat.message = ForgeHooks.onClientChatRecv(par1Packet3Chat.message);
+ if (par1Packet3Chat.message != null)
+ {
+ this.mc.ingameGUI.addChatMessage(par1Packet3Chat.message);
+ ModLoader.serverChat(par1Packet3Chat.message);
+ }
}
public void handleAnimation(Packet18Animation par1Packet18Animation)
@@ -675,7 +708,19 @@
}
else if (par1Packet2Handshake.username.equals("-"))
{
@ -71,7 +86,7 @@
}
else
{
@@ -688,7 +729,19 @@
@@ -688,7 +733,19 @@
if (var6.equalsIgnoreCase("ok"))
{
@ -92,7 +107,7 @@
}
else
{
@@ -1156,5 +1209,40 @@
@@ -1156,5 +1213,40 @@
public void handleCustomPayload(Packet250CustomPayload var1)
{
ModLoader.receivePacket(var1);

View File

@ -1,14 +1,15 @@
--- ../src_base/minecraft_server/net/minecraft/src/ConsoleCommandHandler.java 0000-00-00 00:00:00.000000000 -0000
+++ ../src_work/minecraft_server/net/minecraft/src/ConsoleCommandHandler.java 0000-00-00 00:00:00.000000000 -0000
@@ -4,6 +4,7 @@
@@ -4,6 +4,8 @@
import java.util.Set;
import java.util.logging.Logger;
import net.minecraft.server.MinecraftServer;
+import net.minecraft.src.forge.DimensionManager;
+import net.minecraft.src.forge.ForgeHooks;
public class ConsoleCommandHandler
{
@@ -52,9 +53,9 @@
@@ -52,9 +54,9 @@
var5.savePlayerStates();
}
@ -20,7 +21,7 @@
boolean var8 = var7.levelSaving;
var7.levelSaving = false;
var7.saveWorld(true, (IProgressUpdate)null);
@@ -67,20 +68,18 @@
@@ -67,20 +69,18 @@
{
this.sendNoticeToOps(var4, "Disabling level saving..");
@ -45,7 +46,7 @@
}
}
else
@@ -356,20 +355,18 @@
@@ -356,20 +356,18 @@
if ("add".equalsIgnoreCase(var20))
{
@ -70,7 +71,22 @@
}
this.sendNoticeToOps(var4, "Set time to " + var18);
@@ -414,7 +411,7 @@
@@ -387,8 +385,12 @@
else if (var2.toLowerCase().startsWith("say "))
{
var2 = var2.substring(var2.indexOf(" ")).trim();
- minecraftLogger.info("[" + var4 + "] " + var2);
- var5.sendPacketToAllPlayers(new Packet3Chat("\u00a7d[Server] " + var2));
+ var2 = ForgeHooks.onServerCommandSay(var3, var3.getUsername(), var2);
+ if (var2 != null)
+ {
+ minecraftLogger.info("[" + var4 + "] " + var2);
+ var5.sendPacketToAllPlayers(new Packet3Chat("\u00a7d[Server] " + var2));
+ }
}
else if (var2.toLowerCase().startsWith("tell "))
{
@@ -414,7 +416,7 @@
}
else if (var2.toLowerCase().startsWith("toggledownfall"))
{
@ -79,3 +95,14 @@
var3.log("Toggling rain and snow, hold on...");
}
else if (var2.toLowerCase().startsWith("banlist"))
@@ -433,6 +435,10 @@
var3.log("Ban list:" + this.func_40648_a(this.minecraftServer.getBannedPlayersList(), ", "));
}
}
+ else if (ForgeHooks.onServerCommand(var3, var3.getUsername(), var2))
+ {
+ //Nom Nom Nom, Do we need to log anything, Let the command handle it themselves.
+ }
else
{
minecraftLogger.info("Unknown console command. Type \"help\" for help.");

View File

@ -1,15 +1,16 @@
--- ../src_base/minecraft_server/net/minecraft/src/NetServerHandler.java 0000-00-00 00:00:00.000000000 -0000
+++ ../src_work/minecraft_server/net/minecraft/src/NetServerHandler.java 0000-00-00 00:00:00.000000000 -0000
@@ -4,6 +4,8 @@
@@ -4,6 +4,9 @@
import java.util.Random;
import java.util.logging.Logger;
import net.minecraft.server.MinecraftServer;
+import net.minecraft.src.forge.ForgeHooks;
+import net.minecraft.src.forge.MessageManager;
+import java.io.UnsupportedEncodingException;
public class NetServerHandler extends NetHandler implements ICommandListener
{
@@ -372,8 +374,11 @@
@@ -372,8 +375,11 @@
double var10 = this.playerEntity.posY - ((double)var6 + 0.5D) + 1.5D;
double var12 = this.playerEntity.posZ - ((double)var7 + 0.5D);
double var14 = var8 * var8 + var10 * var10 + var12 * var12;
@ -22,7 +23,7 @@
{
return;
}
@@ -465,8 +470,9 @@
@@ -465,8 +471,9 @@
{
var12 = var11;
}
@ -34,7 +35,35 @@
{
this.playerEntity.itemInWorldManager.activeBlockOrUseItem(this.playerEntity, var2, var3, var5, var6, var7, var8);
}
@@ -764,9 +770,10 @@
@@ -597,9 +604,13 @@
}
else
{
- var2 = "<" + this.playerEntity.username + "> " + var2;
- logger.info(var2);
- this.mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat(var2));
+ var2 = ForgeHooks.onServerChat(playerEntity, var2);
+ if (var2 != null)
+ {
+ var2 = "<" + this.playerEntity.username + "> " + var2;
+ logger.info(var2);
+ this.mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat(var2));
+ }
}
this.field_45001_m += 20;
@@ -647,6 +658,10 @@
{
logger.info("ModLoaderMP : " + this.playerEntity.username + " issued command: " + par1Str.substring(1));
}
+ else if (ForgeHooks.onChatCommand(this.playerEntity, this.mcServer.configManager.isOp(playerEntity.username), par1Str.substring(1)))
+ {
+ logger.info("Forge: " + playerEntity.username + " issues command: " + par1Str.substring(1));
+ }
else
{
String var3;
@@ -764,9 +779,10 @@
*/
public void handleRespawn(Packet9Respawn par1Packet9Respawn)
{
@ -46,7 +75,7 @@
}
else
{
@@ -775,7 +782,7 @@
@@ -775,7 +791,7 @@
return;
}
@ -55,7 +84,7 @@
}
}
@@ -965,4 +972,49 @@
@@ -965,4 +981,49 @@
{
this.playerEntity.capabilities.isFlying = par1Packet202PlayerAbilities.field_50005_b && this.playerEntity.capabilities.allowFlying;
}