Implemented a chat event handler system to allow for manipulating and handeling the various chat/command events.
This commit is contained in:
parent
1a024e5656
commit
f327dd5d7f
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.");
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue