Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Daniel Vidmar 2015-01-26 06:21:21 -05:00
commit 64c9cd30db
7 changed files with 142 additions and 7 deletions

View File

@ -30,8 +30,11 @@ namespace TrueCraft.Core.Networking.Packets
WindowID = stream.ReadInt8();
SlotIndex = stream.ReadInt16();
ItemID = stream.ReadInt16();
Count = stream.ReadInt8();
Metadata = stream.ReadInt16();
if (ItemID != -1)
{
Count = stream.ReadInt8();
Metadata = stream.ReadInt16();
}
}
public void WritePacket(IMinecraftStream stream)
@ -39,8 +42,11 @@ namespace TrueCraft.Core.Networking.Packets
stream.WriteInt8(WindowID);
stream.WriteInt16(SlotIndex);
stream.WriteInt16(ItemID);
stream.WriteInt8(Count);
stream.WriteInt16(Metadata);
if (ItemID != -1)
{
stream.WriteInt8(Count);
stream.WriteInt16(Metadata);
}
}
}
}

View File

@ -22,6 +22,7 @@ namespace TrueCraft.Commands
Commands.Add(new PingCommand());
Commands.Add(new GiveCommand());
Commands.Add(new HelpCommand());
Commands.Add(new ResendInvCommand());
}
/// <summary>

View 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.");
}
}
}

View File

@ -62,7 +62,7 @@ namespace TrueCraft.Handlers
{
if (use)
{
// Temporary
// Temporary: just place the damn thing
position += MathHelper.BlockFaceToCoordinates(packet.Face);
client.World.SetBlockID(position, (byte)slot.Id);
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)
{
var packet = (ChangeHeldItemPacket)_packet;

View File

@ -23,6 +23,7 @@ namespace TrueCraft.Handlers
server.RegisterPacketHandler(new PlayerDiggingPacket().ID, InteractionHandlers.HandlePlayerDiggingPacket);
server.RegisterPacketHandler(new PlayerBlockPlacementPacket().ID, InteractionHandlers.HandlePlayerBlockPlacementPacket);
server.RegisterPacketHandler(new ChangeHeldItemPacket().ID, InteractionHandlers.HandleChangeHeldItem);
server.RegisterPacketHandler(new ClickWindowPacket().ID, InteractionHandlers.HandleClickWindowPacket);
}
internal static void HandleKeepAlive(IPacket _packet, IRemoteClient _client, IMultiplayerServer server)

View File

@ -31,6 +31,8 @@ namespace TrueCraft
Inventory = new InventoryWindow();
InventoryWindow.WindowChange += HandleWindowChange;
SelectedSlot = InventoryWindow.HotbarIndex;
CurrentWindow = InventoryWindow;
ItemStaging = ItemStack.EmptyStack;
}
public NetworkStream NetworkStream { get; set; }
@ -43,6 +45,8 @@ namespace TrueCraft
public IEntity Entity { get; internal set; }
public IWindow Inventory { get; private set; }
public short SelectedSlot { get; internal set; }
public ItemStack ItemStaging { get; set; }
public IWindow CurrentWindow { get; set; }
public ItemStack SelectedItem
{
@ -86,7 +90,6 @@ namespace TrueCraft
if (ChunkRadius < 16) // TODO: Allow customization of this number
{
ChunkRadius++;
Console.WriteLine("Expanding chunk radius to {0}", ChunkRadius);
UpdateChunks();
server.Scheduler.ScheduleEvent(DateTime.Now.AddSeconds(1), ExpandChunkRadius);
}

View File

@ -56,6 +56,7 @@
<Compile Include="Entities\ObjectEntity.cs" />
<Compile Include="Entities\PlayerEntity.cs" />
<Compile Include="Handlers\InteractionHandlers.cs" />
<Compile Include="Commands\DebugCommands.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
@ -73,4 +74,4 @@
</ProjectReference>
</ItemGroup>
<ItemGroup />
</Project>
</Project>