Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
64c9cd30db
@ -30,17 +30,23 @@ namespace TrueCraft.Core.Networking.Packets
|
|||||||
WindowID = stream.ReadInt8();
|
WindowID = stream.ReadInt8();
|
||||||
SlotIndex = stream.ReadInt16();
|
SlotIndex = stream.ReadInt16();
|
||||||
ItemID = stream.ReadInt16();
|
ItemID = stream.ReadInt16();
|
||||||
|
if (ItemID != -1)
|
||||||
|
{
|
||||||
Count = stream.ReadInt8();
|
Count = stream.ReadInt8();
|
||||||
Metadata = stream.ReadInt16();
|
Metadata = stream.ReadInt16();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void WritePacket(IMinecraftStream stream)
|
public void WritePacket(IMinecraftStream stream)
|
||||||
{
|
{
|
||||||
stream.WriteInt8(WindowID);
|
stream.WriteInt8(WindowID);
|
||||||
stream.WriteInt16(SlotIndex);
|
stream.WriteInt16(SlotIndex);
|
||||||
stream.WriteInt16(ItemID);
|
stream.WriteInt16(ItemID);
|
||||||
|
if (ItemID != -1)
|
||||||
|
{
|
||||||
stream.WriteInt8(Count);
|
stream.WriteInt8(Count);
|
||||||
stream.WriteInt16(Metadata);
|
stream.WriteInt16(Metadata);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
@ -22,6 +22,7 @@ namespace TrueCraft.Commands
|
|||||||
Commands.Add(new PingCommand());
|
Commands.Add(new PingCommand());
|
||||||
Commands.Add(new GiveCommand());
|
Commands.Add(new GiveCommand());
|
||||||
Commands.Add(new HelpCommand());
|
Commands.Add(new HelpCommand());
|
||||||
|
Commands.Add(new ResendInvCommand());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
44
TrueCraft/Commands/DebugCommands.cs
Normal file
44
TrueCraft/Commands/DebugCommands.cs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using TrueCraft.Core.Windows;
|
||||||
|
using TrueCraft.API;
|
||||||
|
using TrueCraft.API.Networking;
|
||||||
|
using TrueCraft.Core.Networking.Packets;
|
||||||
|
|
||||||
|
namespace TrueCraft.Commands
|
||||||
|
{
|
||||||
|
public class ResendInvCommand : Command
|
||||||
|
{
|
||||||
|
public override string Name
|
||||||
|
{
|
||||||
|
get { return "reinv"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Description
|
||||||
|
{
|
||||||
|
get { return "Resends your inventory to the selected client."; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string[] Aliases
|
||||||
|
{
|
||||||
|
get { return new string[0]; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Handle(IRemoteClient Client, string Alias, string[] Arguments)
|
||||||
|
{
|
||||||
|
if (Arguments.Length != 0)
|
||||||
|
{
|
||||||
|
Help(Client, Alias, Arguments);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Client.QueuePacket(new WindowItemsPacket(0, Client.Inventory.GetSlots()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Help(IRemoteClient Client, string Alias, string[] Arguments)
|
||||||
|
{
|
||||||
|
Client.SendMessage("/reinv: Resends your inventory.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -62,7 +62,7 @@ namespace TrueCraft.Handlers
|
|||||||
{
|
{
|
||||||
if (use)
|
if (use)
|
||||||
{
|
{
|
||||||
// Temporary
|
// Temporary: just place the damn thing
|
||||||
position += MathHelper.BlockFaceToCoordinates(packet.Face);
|
position += MathHelper.BlockFaceToCoordinates(packet.Face);
|
||||||
client.World.SetBlockID(position, (byte)slot.Id);
|
client.World.SetBlockID(position, (byte)slot.Id);
|
||||||
client.World.SetMetadata(position, (byte)slot.Metadata);
|
client.World.SetMetadata(position, (byte)slot.Metadata);
|
||||||
@ -81,6 +81,85 @@ namespace TrueCraft.Handlers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void HandleClickWindowPacket(IPacket _packet, IRemoteClient _client, IMultiplayerServer server)
|
||||||
|
{
|
||||||
|
var packet = (ClickWindowPacket)_packet;
|
||||||
|
var client = (RemoteClient)_client;
|
||||||
|
var window = client.CurrentWindow;
|
||||||
|
if (packet.SlotIndex >= window.Length || packet.SlotIndex < 0)
|
||||||
|
return;
|
||||||
|
ItemStack existing = window[packet.SlotIndex];
|
||||||
|
ItemStack held = client.ItemStaging;
|
||||||
|
if (client.ItemStaging.Empty) // Picking up something
|
||||||
|
{
|
||||||
|
if (packet.Shift)
|
||||||
|
{
|
||||||
|
window.MoveToAlternateArea(packet.SlotIndex);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (packet.RightClick)
|
||||||
|
{
|
||||||
|
sbyte mod = (sbyte)(existing.Count % 2);
|
||||||
|
existing.Count /= 2;
|
||||||
|
held = existing;
|
||||||
|
held.Count += mod;
|
||||||
|
client.ItemStaging = held;
|
||||||
|
window[packet.SlotIndex] = existing;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
client.ItemStaging = window[packet.SlotIndex];
|
||||||
|
window[packet.SlotIndex] = ItemStack.EmptyStack;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // Setting something down
|
||||||
|
{
|
||||||
|
if (existing.Empty) // Replace empty slot
|
||||||
|
{
|
||||||
|
if (packet.RightClick)
|
||||||
|
{
|
||||||
|
var newItem = (ItemStack)client.ItemStaging.Clone();
|
||||||
|
newItem.Count = 1;
|
||||||
|
held.Count--;
|
||||||
|
window[packet.SlotIndex] = newItem;
|
||||||
|
client.ItemStaging = held;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
window[packet.SlotIndex] = client.ItemStaging;
|
||||||
|
client.ItemStaging = ItemStack.EmptyStack;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (existing.CanMerge(client.ItemStaging)) // Merge items
|
||||||
|
{
|
||||||
|
// TODO: Consider the maximum stack size
|
||||||
|
if (packet.RightClick)
|
||||||
|
{
|
||||||
|
existing.Count++;
|
||||||
|
held.Count--;
|
||||||
|
window[packet.SlotIndex] = existing;
|
||||||
|
client.ItemStaging = held;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
existing.Count += client.ItemStaging.Count;
|
||||||
|
window[packet.SlotIndex] = existing;
|
||||||
|
client.ItemStaging = ItemStack.EmptyStack;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // Swap items
|
||||||
|
{
|
||||||
|
window[packet.SlotIndex] = client.ItemStaging;
|
||||||
|
client.ItemStaging = existing;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void HandleChangeHeldItem(IPacket _packet, IRemoteClient _client, IMultiplayerServer server)
|
public static void HandleChangeHeldItem(IPacket _packet, IRemoteClient _client, IMultiplayerServer server)
|
||||||
{
|
{
|
||||||
var packet = (ChangeHeldItemPacket)_packet;
|
var packet = (ChangeHeldItemPacket)_packet;
|
||||||
|
@ -23,6 +23,7 @@ namespace TrueCraft.Handlers
|
|||||||
server.RegisterPacketHandler(new PlayerDiggingPacket().ID, InteractionHandlers.HandlePlayerDiggingPacket);
|
server.RegisterPacketHandler(new PlayerDiggingPacket().ID, InteractionHandlers.HandlePlayerDiggingPacket);
|
||||||
server.RegisterPacketHandler(new PlayerBlockPlacementPacket().ID, InteractionHandlers.HandlePlayerBlockPlacementPacket);
|
server.RegisterPacketHandler(new PlayerBlockPlacementPacket().ID, InteractionHandlers.HandlePlayerBlockPlacementPacket);
|
||||||
server.RegisterPacketHandler(new ChangeHeldItemPacket().ID, InteractionHandlers.HandleChangeHeldItem);
|
server.RegisterPacketHandler(new ChangeHeldItemPacket().ID, InteractionHandlers.HandleChangeHeldItem);
|
||||||
|
server.RegisterPacketHandler(new ClickWindowPacket().ID, InteractionHandlers.HandleClickWindowPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void HandleKeepAlive(IPacket _packet, IRemoteClient _client, IMultiplayerServer server)
|
internal static void HandleKeepAlive(IPacket _packet, IRemoteClient _client, IMultiplayerServer server)
|
||||||
|
@ -31,6 +31,8 @@ namespace TrueCraft
|
|||||||
Inventory = new InventoryWindow();
|
Inventory = new InventoryWindow();
|
||||||
InventoryWindow.WindowChange += HandleWindowChange;
|
InventoryWindow.WindowChange += HandleWindowChange;
|
||||||
SelectedSlot = InventoryWindow.HotbarIndex;
|
SelectedSlot = InventoryWindow.HotbarIndex;
|
||||||
|
CurrentWindow = InventoryWindow;
|
||||||
|
ItemStaging = ItemStack.EmptyStack;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NetworkStream NetworkStream { get; set; }
|
public NetworkStream NetworkStream { get; set; }
|
||||||
@ -43,6 +45,8 @@ namespace TrueCraft
|
|||||||
public IEntity Entity { get; internal set; }
|
public IEntity Entity { get; internal set; }
|
||||||
public IWindow Inventory { get; private set; }
|
public IWindow Inventory { get; private set; }
|
||||||
public short SelectedSlot { get; internal set; }
|
public short SelectedSlot { get; internal set; }
|
||||||
|
public ItemStack ItemStaging { get; set; }
|
||||||
|
public IWindow CurrentWindow { get; set; }
|
||||||
|
|
||||||
public ItemStack SelectedItem
|
public ItemStack SelectedItem
|
||||||
{
|
{
|
||||||
@ -86,7 +90,6 @@ namespace TrueCraft
|
|||||||
if (ChunkRadius < 16) // TODO: Allow customization of this number
|
if (ChunkRadius < 16) // TODO: Allow customization of this number
|
||||||
{
|
{
|
||||||
ChunkRadius++;
|
ChunkRadius++;
|
||||||
Console.WriteLine("Expanding chunk radius to {0}", ChunkRadius);
|
|
||||||
UpdateChunks();
|
UpdateChunks();
|
||||||
server.Scheduler.ScheduleEvent(DateTime.Now.AddSeconds(1), ExpandChunkRadius);
|
server.Scheduler.ScheduleEvent(DateTime.Now.AddSeconds(1), ExpandChunkRadius);
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,7 @@
|
|||||||
<Compile Include="Entities\ObjectEntity.cs" />
|
<Compile Include="Entities\ObjectEntity.cs" />
|
||||||
<Compile Include="Entities\PlayerEntity.cs" />
|
<Compile Include="Entities\PlayerEntity.cs" />
|
||||||
<Compile Include="Handlers\InteractionHandlers.cs" />
|
<Compile Include="Handlers\InteractionHandlers.cs" />
|
||||||
|
<Compile Include="Commands\DebugCommands.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
Reference in New Issue
Block a user