本文整理汇总了C#中RemoteClient.SendPacket方法的典型用法代码示例。如果您正苦于以下问题:C# RemoteClient.SendPacket方法的具体用法?C# RemoteClient.SendPacket怎么用?C# RemoteClient.SendPacket使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类RemoteClient
的用法示例。
在下文中一共展示了RemoteClient.SendPacket方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Handshake
public static void Handshake(RemoteClient client, MinecraftServer server, IPacket _packet)
{
var packet = (HandshakePacket)_packet;
if (packet.ProtocolVersion < PacketReader.ProtocolVersion)
{
client.SendPacket(new DisconnectPacket("Outdated client!"));
return;
}
if (packet.ProtocolVersion > PacketReader.ProtocolVersion)
{
client.SendPacket(new DisconnectPacket("Outdated server!"));
return;
}
if (server.Clients.Any(c => c.Username == packet.Username))
{
client.SendPacket(new DisconnectPacket(""));
return;
}
client.Username = packet.Username;
client.Hostname = packet.ServerHostname + ":" + packet.ServerPort;
if (server.Settings.OnlineMode)
client.AuthenticationHash = CreateHash();
else
client.AuthenticationHash = "-";
if (server.Settings.EnableEncryption)
client.SendPacket(CreateEncryptionRequest(client, server));
else
server.LogInPlayer(client);
}
示例2: Handshake
public static void Handshake(RemoteClient client, MinecraftServer server, IPacket _packet)
{
var packet = (HandshakePacket)_packet;
if (packet.ProtocolVersion < NetworkManager.ProtocolVersion)
{
client.SendPacket(new DisconnectPacket("Outdated client!"));
return;
}
if (packet.ProtocolVersion > NetworkManager.ProtocolVersion)
{
client.SendPacket(new DisconnectPacket("Outdated server!"));
return;
}
client.Hostname = packet.ServerHostname + ":" + packet.ServerPort;
}
示例3: EncryptionKeyResponse
public static void EncryptionKeyResponse(RemoteClient client, MinecraftServer server, IPacket _packet)
{
var packet = (EncryptionKeyResponsePacket)_packet;
var decryptedToken = server.CryptoServiceProvider.Decrypt(packet.VerificationToken, false);
for (int i = 0; i < decryptedToken.Length; i++)
{
if (decryptedToken[i] != client.VerificationToken[i])
{
client.Disconnect("Unable to authenticate.");
return;
}
}
client.SharedKey = server.CryptoServiceProvider.Decrypt(packet.SharedSecret, false);
client.SendPacket(new EncryptionKeyResponsePacket(new byte[0], new byte[0]));
}
示例4: LoginStart
public static void LoginStart(RemoteClient client, MinecraftServer server, IPacket _packet)
{
var packet = (LoginStartPacket)_packet;
if (server.Clients.Any(c => c.IsLoggedIn && c.Username == packet.Username))
client.Disconnect("You're already on this server!");
else
{
client.Username = packet.Username;
if (server.Settings.OnlineMode)
client.ServerId = CreateId();
else
{
client.ServerId = CreateId();
client.UUID = Guid.NewGuid().ToJavaUUID();
}
if (server.Settings.EnableEncryption)
client.SendPacket(CreateEncryptionRequest(client, server));
else
server.LogInPlayer(client);
}
}
示例5: ClientStatus
public static void ClientStatus(RemoteClient client, MinecraftServer server, IPacket _packet)
{
var packet = (ClientStatusPacket)_packet;
if (packet.Change == ClientStatusPacket.StatusChange.Respawn)
{
var world = client.Entity.World;
client.Entity.Position = new Vector3(
client.Entity.SpawnPoint.X,
// FIXME: This seems to drop the player camera from half the height of a login spawn
client.Entity.SpawnPoint.Y,
client.Entity.SpawnPoint.Z);
client.Entity.Health = client.Entity.MaxHealth;
client.Entity.Food = 20;
client.Entity.FoodSaturation = 20;
server.EntityManager.SpawnEntity(world, client.Entity);
client.SendPacket(new UpdateHealthPacket(client.Entity.Health, client.Entity.Food, client.Entity.FoodSaturation));
client.SendPacket(new RespawnPacket(Dimension.Overworld, server.Settings.Difficulty, client.GameMode, world.WorldGenerator.GeneratorName));
client.SendPacket(new PlayerPositionAndLookPacket(client.Entity.Position.X, client.Entity.Position.Y, client.Entity.Position.Z,
client.Entity.Position.Y + PlayerEntity.Height, client.Entity.Yaw, client.Entity.Pitch, true));
}
}
示例6: ServerListPing
public static void ServerListPing(RemoteClient client, MinecraftServer server, IPacket _packet)
{
client.SendPacket(new DisconnectPacket(GetPingValue(server)));
}
示例7: StatusPing
public static void StatusPing(RemoteClient client, MinecraftServer server, IPacket _packet)
{
client.SendPacket(_packet);
}
示例8: StatusRequest
public static void StatusRequest(RemoteClient client, MinecraftServer server, IPacket _packet)
{
client.SendPacket(new StatusResponsePacket(GetServerStatus(server)));
}
示例9: ClientStatus
public static void ClientStatus(RemoteClient client, MinecraftServer server, IPacket _packet)
{
var packet = (ClientStatusPacket)_packet;
if (packet.Status == ClientStatusPacket.ClientStatus.InitialSpawn)
{
// Create a hash for session verification
AsnKeyBuilder.AsnMessage encodedKey = AsnKeyBuilder.PublicKeyToX509(server.ServerKey);
byte[] shaData = Encoding.UTF8.GetBytes(client.AuthenticationHash)
.Concat(client.SharedKey)
.Concat(encodedKey.GetBytes()).ToArray();
string hash = Cryptography.JavaHexDigest(shaData);
// Talk to session.minecraft.net
if (server.Settings.OnlineMode)
{
var webClient = new WebClient();
var webReader = new StreamReader(webClient.OpenRead(
new Uri(string.Format(sessionCheckUri, client.Username, hash))));
string response = webReader.ReadToEnd();
webReader.Close();
if (response != "YES")
{
client.Disconnect("Failed to verify username!");
return;
}
}
var eventArgs = new ConnectionEstablishedEventArgs(client);
server.OnConnectionEstablished(eventArgs);
if (eventArgs.PermitConnection)
server.LogInPlayer(client);
else
client.Disconnect(eventArgs.DisconnectReason);
}
else if (packet.Status == ClientStatusPacket.ClientStatus.Respawn)
{
var world = client.Entity.World;
client.Entity.Position = new Vector3(
client.Entity.SpawnPoint.X,
// FIXME: This seems to drop the player camera from half the height of a login spawn
client.Entity.SpawnPoint.Y,
client.Entity.SpawnPoint.Z);
client.Entity.Health = client.Entity.MaxHealth;
client.Entity.Food = 20;
client.Entity.FoodSaturation = 20;
server.EntityManager.SpawnEntity(world, client.Entity);
client.SendPacket(new UpdateHealthPacket(client.Entity.Health, client.Entity.Food, client.Entity.FoodSaturation));
client.SendPacket(new RespawnPacket(Dimension.Overworld, server.Settings.Difficulty, client.GameMode, World.Height, world.WorldGenerator.GeneratorName));
client.SendPacket(new PlayerPositionAndLookPacket(client.Entity.Position.X, client.Entity.Position.Y, client.Entity.Position.Z,
client.Entity.Position.Y + PlayerEntity.Height, client.Entity.Yaw, client.Entity.Pitch, true));
}
}
示例10: RightClick
public static void RightClick(RemoteClient client, MinecraftServer server, IPacket _packet)
{
var packet = (RightClickPacket)_packet;
var slot = client.Entity.Inventory[client.Entity.SelectedSlot];
var position = new Coordinates3D(packet.X, packet.Y, packet.Z);
var cursorPosition = new Coordinates3D(packet.CursorX, packet.CursorY, packet.CursorZ);
BlockInfo? block = null;
if (position != -Coordinates3D.One)
{
if (position.DistanceTo((Coordinates3D)client.Entity.Position) > client.Reach)
return;
block = client.World.GetBlockInfo(position);
}
bool use = true;
if (block != null)
use = client.World.RightClickBlock(position, packet.Face, cursorPosition, slot.AsItem());
if (!slot.Empty)
{
var item = slot.AsItem();
if (use)
{
if (block != null)
{
client.World.UseItemOnBlock(position, packet.Face, cursorPosition, item.Value);
if (item.Value.ItemId < 0x100)
{
client.SendPacket(new SoundEffectPacket(Block.GetPlacementSoundEffect(item.Value.ItemId),
position.X, position.Y, position.Z, SoundEffectPacket.DefaultVolume, SoundEffectPacket.DefaultPitch));
}
if (client.GameMode != GameMode.Creative)
{
slot.Count--; // TODO: This is probably a bad place to put this code
if (slot.Count == 0)
client.Entity.Inventory[client.Entity.SelectedSlot] = ItemStack.EmptyStack;
else
client.Entity.Inventory[client.Entity.SelectedSlot] = slot;
}
}
else
{
client.World.UseItemOnBlock(position, packet.Face, cursorPosition, item.Value);
if (item.Value.ItemId < 0x100)
{
client.SendPacket(new SoundEffectPacket(Block.GetPlacementSoundEffect(item.Value.ItemId),
position.X, position.Y, position.Z, SoundEffectPacket.DefaultVolume, SoundEffectPacket.DefaultPitch));
}
}
}
}
}