Added support for Trapdoor placement/use

This commit is contained in:
Ross L 2015-05-03 17:57:33 -04:00
parent 6575444768
commit 75f593e243

View File

@ -1,15 +1,32 @@
using System; using System;
using TrueCraft.API.Logic; using TrueCraft.API.Logic;
using TrueCraft.API; using TrueCraft.API;
using TrueCraft.API.World;
using TrueCraft.API.Networking;
namespace TrueCraft.Core.Logic.Blocks namespace TrueCraft.Core.Logic.Blocks
{ {
public class TrapdoorBlock : BlockProvider, ICraftingRecipe public class TrapdoorBlock : BlockProvider, ICraftingRecipe
{ {
public enum TrapdoorDirection
{
West = 0x0,
East = 0x1,
South = 0x2,
North = 0x3,
}
[Flags]
public enum TrapdoorFlags
{
Closed = 0x0,
Open = 0x4
}
public static readonly byte BlockID = 0x60; public static readonly byte BlockID = 0x60;
public override byte ID { get { return 0x60; } } public override byte ID { get { return 0x60; } }
public override double BlastResistance { get { return 15; } } public override double BlastResistance { get { return 15; } }
public override double Hardness { get { return 3; } } public override double Hardness { get { return 3; } }
@ -17,7 +34,7 @@ namespace TrueCraft.Core.Logic.Blocks
public override byte Luminance { get { return 0; } } public override byte Luminance { get { return 0; } }
public override bool Opaque { get { return false; } } public override bool Opaque { get { return false; } }
public override string DisplayName { get { return "Trapdoor"; } } public override string DisplayName { get { return "Trapdoor"; } }
public override Tuple<int, int> GetTextureMap(byte metadata) public override Tuple<int, int> GetTextureMap(byte metadata)
@ -25,6 +42,54 @@ namespace TrueCraft.Core.Logic.Blocks
return new Tuple<int, int>(4, 5); return new Tuple<int, int>(4, 5);
} }
public override void BlockLeftClicked(BlockDescriptor descriptor, BlockFace face, IWorld world, IRemoteClient user)
{
BlockRightClicked(descriptor, face, world, user);
}
public override bool BlockRightClicked(BlockDescriptor descriptor, BlockFace face, IWorld world, IRemoteClient user)
{
// Flip bit back and forth between Open and Closed
world.SetMetadata(descriptor.Coordinates, (byte)(descriptor.Metadata ^ (byte)TrapdoorFlags.Open));
return false;
}
public override void ItemUsedOnBlock(Coordinates3D coordinates, ItemStack item, BlockFace face, IWorld world, IRemoteClient user)
{
if (face == BlockFace.PositiveY || face == BlockFace.NegativeY)
{
// Trapdoors are not placed when the user clicks on the top or bottom of a block
return;
}
// NOTE: These directions are rotated by 90 degrees so that the hinge of the trapdoor is placed
// where the user had their cursor.
switch (face)
{
case BlockFace.NegativeZ:
item.Metadata = (byte)TrapdoorDirection.West;
break;
case BlockFace.PositiveZ:
item.Metadata = (byte)TrapdoorDirection.East;
break;
case BlockFace.NegativeX:
item.Metadata = (byte)TrapdoorDirection.South;
break;
case BlockFace.PositiveX:
item.Metadata = (byte)TrapdoorDirection.North;
break;
default:
return;
}
base.ItemUsedOnBlock(coordinates, item, face, world, user);
}
protected override ItemStack[] GetDrop(BlockDescriptor descriptor)
{
return new[] { new ItemStack(ID) };
}
public ItemStack[,] Pattern public ItemStack[,] Pattern
{ {
get get