2020-05-29 23:18:34 +05:00
|
|
|
using System;
|
2014-05-31 01:59:03 +02:00
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
2015-11-27 17:16:33 +01:00
|
|
|
using MinecraftClient.Mapping;
|
2020-03-26 15:01:42 +08:00
|
|
|
using MinecraftClient.Inventory;
|
2014-05-31 01:59:03 +02:00
|
|
|
|
|
|
|
|
namespace MinecraftClient.Protocol
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Interface for the MinecraftCom Handler.
|
|
|
|
|
/// It defines some callbacks that the MinecraftCom handler must have.
|
|
|
|
|
/// It allows the protocol handler to abstract from the other parts of the program.
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
|
|
public interface IMinecraftComHandler
|
|
|
|
|
{
|
2016-02-07 14:24:01 -08:00
|
|
|
/* The MinecraftCom Handler must
|
2014-05-31 01:59:03 +02:00
|
|
|
* provide these getters */
|
|
|
|
|
|
2015-06-20 22:58:18 +02:00
|
|
|
int GetServerPort();
|
|
|
|
|
string GetServerHost();
|
|
|
|
|
string GetUsername();
|
|
|
|
|
string GetUserUUID();
|
|
|
|
|
string GetSessionID();
|
2016-08-27 15:46:34 +02:00
|
|
|
string[] GetOnlinePlayers();
|
2019-03-30 10:47:59 -04:00
|
|
|
Dictionary<string, string> GetOnlinePlayersWithUUID();
|
2015-11-27 17:16:33 +01:00
|
|
|
Location GetCurrentLocation();
|
2015-11-30 15:30:49 +01:00
|
|
|
World GetWorld();
|
2019-04-28 21:32:03 +02:00
|
|
|
bool GetTerrainEnabled();
|
|
|
|
|
bool SetTerrainEnabled(bool enabled);
|
2019-05-26 10:36:46 -04:00
|
|
|
bool GetInventoryEnabled();
|
2019-05-30 11:34:08 +02:00
|
|
|
bool SetInventoryEnabled(bool enabled);
|
2020-03-23 19:59:00 +08:00
|
|
|
bool GetEntityHandlingEnabled();
|
2020-03-31 20:36:45 +08:00
|
|
|
bool SetEntityHandlingEnabled(bool enabled);
|
2020-05-24 10:33:09 +08:00
|
|
|
Container GetInventory(int inventoryID);
|
2014-11-11 00:32:32 +11:00
|
|
|
|
2015-09-30 20:01:57 +02:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when a server was successfully joined
|
|
|
|
|
/// </summary>
|
|
|
|
|
void OnGameJoined();
|
|
|
|
|
|
2014-05-31 01:59:03 +02:00
|
|
|
/// <summary>
|
|
|
|
|
/// This method is called when the protocol handler receives a chat message
|
|
|
|
|
/// </summary>
|
2016-10-07 19:52:28 +02:00
|
|
|
/// <param name="text">Text received from the server</param>
|
2017-05-31 20:54:16 +02:00
|
|
|
/// <param name="isJson">TRUE if the text is JSON-Encoded</param>
|
|
|
|
|
void OnTextReceived(string text, bool isJson);
|
2014-05-31 01:59:03 +02:00
|
|
|
|
2019-09-15 17:01:53 +02:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when receiving a connection keep-alive from the server
|
|
|
|
|
/// </summary>
|
|
|
|
|
void OnServerKeepAlive();
|
|
|
|
|
|
2019-05-26 10:36:46 -04:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when an inventory is opened
|
|
|
|
|
/// </summary>
|
2020-03-29 18:41:26 +02:00
|
|
|
void OnInventoryOpen(int inventoryID, Container inventory);
|
2019-05-26 10:36:46 -04:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Called when an inventory is closed
|
2019-05-25 17:45:59 -04:00
|
|
|
/// </summary>
|
2020-03-29 18:41:26 +02:00
|
|
|
void OnInventoryClose(int inventoryID);
|
2019-05-25 17:45:59 -04:00
|
|
|
|
2019-04-28 21:32:03 +02:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when the player respawns, which happens on login, respawn and world change.
|
|
|
|
|
/// </summary>
|
|
|
|
|
void OnRespawn();
|
|
|
|
|
|
2014-11-10 20:43:00 +01:00
|
|
|
/// <summary>
|
|
|
|
|
/// This method is called when a new player joins the game
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="uuid">UUID of the player</param>
|
2016-08-27 15:46:34 +02:00
|
|
|
/// <param name="name">Name of the player</param>
|
|
|
|
|
void OnPlayerJoin(Guid uuid, string name);
|
2014-11-10 20:43:00 +01:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// This method is called when a player has left the game
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="uuid">UUID of the player</param>
|
|
|
|
|
void OnPlayerLeave(Guid uuid);
|
|
|
|
|
|
2015-11-27 17:16:33 +01:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when the server sets the new location for the player
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="location">New location of the player</param>
|
2019-04-09 18:01:00 -07:00
|
|
|
/// <param name="yaw">New yaw</param>
|
|
|
|
|
/// <param name="pitch">New pitch</param>
|
|
|
|
|
void UpdateLocation(Location location, float yaw, float pitch);
|
2015-11-27 17:16:33 +01:00
|
|
|
|
2014-05-31 01:59:03 +02:00
|
|
|
/// <summary>
|
|
|
|
|
/// This method is called when the connection has been lost
|
|
|
|
|
/// </summary>
|
|
|
|
|
void OnConnectionLost(ChatBot.DisconnectReason reason, string message);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Called ~10 times per second (10 ticks per second)
|
|
|
|
|
/// Useful for updating bots in other parts of the program
|
|
|
|
|
/// </summary>
|
|
|
|
|
void OnUpdate();
|
2016-02-07 14:24:01 -08:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Registers the given plugin channel for the given bot.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="channel">The channel to register.</param>
|
|
|
|
|
/// <param name="bot">The bot to register the channel for.</param>
|
|
|
|
|
void RegisterPluginChannel(string channel, ChatBot bot);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Unregisters the given plugin channel for the given bot.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="channel">The channel to unregister.</param>
|
|
|
|
|
/// <param name="bot">The bot to unregister the channel for.</param>
|
|
|
|
|
void UnregisterPluginChannel(string channel, ChatBot bot);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2016-03-10 13:29:05 +01:00
|
|
|
/// Sends a plugin channel packet to the server.
|
|
|
|
|
/// See http://wiki.vg/Plugin_channel for more information about plugin channels.
|
2016-02-07 14:24:01 -08:00
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="channel">The channel to send the packet on.</param>
|
|
|
|
|
/// <param name="data">The payload for the packet.</param>
|
|
|
|
|
/// <param name="sendEvenIfNotRegistered">Whether the packet should be sent even if the server or the client hasn't registered it yet.</param>
|
|
|
|
|
/// <returns>Whether the packet was sent: true if it was sent, false if there was a connection error or it wasn't registered.</returns>
|
|
|
|
|
bool SendPluginChannelMessage(string channel, byte[] data, bool sendEvenIfNotRegistered = false);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Called when a plugin channel message was sent from the server.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="channel">The channel the message was sent on</param>
|
|
|
|
|
/// <param name="data">The data from the channel</param>
|
|
|
|
|
void OnPluginChannelMessage(string channel, byte[] data);
|
2020-03-21 18:41:48 +08:00
|
|
|
|
2020-03-28 00:48:41 +01:00
|
|
|
/// <summary>
|
2020-05-24 18:21:22 +02:00
|
|
|
/// Called when an entity has spawned
|
2020-03-28 00:48:41 +01:00
|
|
|
/// </summary>
|
2020-05-24 18:21:22 +02:00
|
|
|
/// <param name="entity">Spawned entity</param>
|
|
|
|
|
void OnSpawnEntity(Entity entity);
|
2020-03-21 18:41:48 +08:00
|
|
|
|
2020-03-28 00:48:41 +01:00
|
|
|
/// <summary>
|
2020-05-25 21:39:24 +02:00
|
|
|
/// Called when a player spawns or enters the client's render distance
|
2020-03-28 00:48:41 +01:00
|
|
|
/// </summary>
|
2020-05-25 21:39:24 +02:00
|
|
|
/// <param name="entityID">Entity ID</param>
|
|
|
|
|
/// <param name="uuid">Entity UUID</param>
|
2020-03-28 00:48:41 +01:00
|
|
|
/// <param name="location">Entity location</param>
|
2020-05-25 21:39:24 +02:00
|
|
|
/// <param name="yaw">Player head yaw</param>
|
|
|
|
|
/// <param name="pitch">Player head pitch</param>
|
2020-05-24 18:21:22 +02:00
|
|
|
void OnSpawnPlayer(int entityID, Guid uuid, Location location, byte yaw, byte pitch);
|
2020-03-26 15:01:42 +08:00
|
|
|
|
2020-03-28 00:48:41 +01:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when entities have despawned
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="EntityID">List of Entity ID that have despawned</param>
|
2020-03-21 18:41:48 +08:00
|
|
|
void OnDestroyEntities(int[] EntityID);
|
|
|
|
|
|
2020-03-28 00:48:41 +01:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when an entity moved by coordinate offset
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="EntityID">Entity ID</param>
|
|
|
|
|
/// <param name="Dx">X offset</param>
|
|
|
|
|
/// <param name="Dy">Y offset</param>
|
|
|
|
|
/// <param name="Dz">Z offset</param>
|
|
|
|
|
/// <param name="onGround">TRUE if on ground</param>
|
2020-05-25 21:39:24 +02:00
|
|
|
void OnEntityPosition(int entityID, Double dx, Double dy, Double dz, bool onGround);
|
2020-03-21 18:41:48 +08:00
|
|
|
|
2020-03-28 00:48:41 +01:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when an entity moved to fixed coordinates
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="EntityID">Entity ID</param>
|
|
|
|
|
/// <param name="Dx">X</param>
|
|
|
|
|
/// <param name="Dy">Y</param>
|
|
|
|
|
/// <param name="Dz">Z</param>
|
|
|
|
|
/// <param name="onGround">TRUE if on ground</param>
|
2020-05-24 18:21:22 +02:00
|
|
|
void OnEntityTeleport(int entityID, Double x, Double y, Double z, bool onGround);
|
2020-03-28 00:48:41 +01:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Called when additional properties have been received for an entity
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="EntityID">Entity ID</param>
|
|
|
|
|
/// <param name="prop">Dictionary of properties</param>
|
2020-05-24 18:21:22 +02:00
|
|
|
void OnEntityProperties(int entityID, Dictionary<string, Double> prop);
|
2020-03-21 18:41:48 +08:00
|
|
|
|
2020-03-28 00:48:41 +01:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when the world age has been updated
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="WorldAge">World age</param>
|
|
|
|
|
/// <param name="TimeOfDay">Time of Day</param>
|
2020-05-24 18:21:22 +02:00
|
|
|
void OnTimeUpdate(long worldAge, long timeOfDay);
|
2020-03-21 18:41:48 +08:00
|
|
|
|
2020-03-28 00:48:41 +01:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when inventory items have been received
|
|
|
|
|
/// </summary>
|
2020-03-29 18:41:26 +02:00
|
|
|
/// <param name="inventoryID">Inventory ID</param>
|
2020-03-28 00:48:41 +01:00
|
|
|
/// <param name="itemList">Item list</param>
|
2020-05-24 18:21:22 +02:00
|
|
|
void OnWindowItems(byte inventoryID, Dictionary<int, Item> itemList);
|
2020-03-22 23:19:31 +08:00
|
|
|
|
2020-03-28 00:48:41 +01:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when a single slot has been updated inside an inventory
|
|
|
|
|
/// </summary>
|
2020-03-29 18:41:26 +02:00
|
|
|
/// <param name="inventoryID">Window ID</param>
|
|
|
|
|
/// <param name="slotID">Slot ID</param>
|
|
|
|
|
/// <param name="item">Item (may be null for empty slot)</param>
|
|
|
|
|
void OnSetSlot(byte inventoryID, short slotID, Item item);
|
2020-03-28 00:48:41 +01:00
|
|
|
|
2020-04-08 00:28:03 +08:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when player health or hunger changed.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="health"></param>
|
|
|
|
|
/// <param name="food"></param>
|
2020-04-04 19:18:18 +08:00
|
|
|
void OnUpdateHealth(float health, int food);
|
2020-04-01 18:28:00 +08:00
|
|
|
|
2020-05-29 23:18:34 +05:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when and explosion occurs on the server
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="location">Explosion location</param>
|
|
|
|
|
/// <param name="strength">Explosion strength</param>
|
|
|
|
|
/// <param name="affectedBlocks">Amount of affected blocks</param>
|
|
|
|
|
void OnExplosion(Location location, float strength, int affectedBlocks);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Called when a player's game mode has changed
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="uuid">Affected player's UUID</param>
|
|
|
|
|
/// <param name="gamemode">New game mode</param>
|
|
|
|
|
void OnGamemodeUpdate(Guid uuid, int gamemode);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Called when Experience bar is updated
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="Experiencebar">Experience bar level</param>
|
|
|
|
|
/// <param name="Level">Player Level</param>
|
|
|
|
|
/// <param name="TotalExperience">Total experience</param>
|
|
|
|
|
void OnSetExperience(float Experiencebar, int Level, int TotalExperience);
|
|
|
|
|
|
2020-04-08 00:28:03 +08:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when client need to change slot.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <remarks>Used for setting player slot after joining game</remarks>
|
|
|
|
|
/// <param name="slot"></param>
|
|
|
|
|
void OnHeldItemChange(byte slot);
|
|
|
|
|
|
2020-03-28 00:48:41 +01:00
|
|
|
/// <summary>
|
|
|
|
|
/// Called when the Player entity ID has been received from the server
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="EntityID">Player entity ID</param>
|
2020-03-21 18:41:48 +08:00
|
|
|
void SetPlayerEntityID(int EntityID);
|
2014-05-31 01:59:03 +02:00
|
|
|
}
|
|
|
|
|
}
|