This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2015-02-09 22:41:31 -07:00

116 lines
3.8 KiB
C#

using System;
using TrueCraft.API.Logic;
using TrueCraft.API.Networking;
using TrueCraft.API.World;
using TrueCraft.API;
using TrueCraft.Core.Logic.Blocks;
namespace TrueCraft.Core.Logic.Items
{
public class BucketItem : ToolItem
{
public static readonly short ItemID = 0x145;
public override short ID { get { return 0x145; } }
public override string DisplayName { get { return "Bucket"; } }
protected virtual byte? RelevantBlockType { get { return null; } }
public override void ItemUsedOnBlock(Coordinates3D coordinates, ItemStack item, BlockFace face, IWorld world, IRemoteClient user)
{
coordinates += MathHelper.BlockFaceToCoordinates(face);
if (item.ID == ItemID) // Empty bucket
{
var block = world.GetBlockID(coordinates);
if (block == WaterBlock.BlockID || block == StationaryWaterBlock.BlockID)
{
var meta = world.GetMetadata(coordinates);
if (meta == 0) // Is source block?
{
user.Inventory[user.SelectedSlot] = new ItemStack(WaterBucketItem.ItemID);
world.SetBlockID(coordinates, 0);
}
}
else if (block == LavaBlock.BlockID || block == StationaryLavaBlock.BlockID)
{
var meta = world.GetMetadata(coordinates);
if (meta == 0) // Is source block?
{
user.Inventory[user.SelectedSlot] = new ItemStack(LavaBucketItem.ItemID);
world.SetBlockID(coordinates, 0);
}
}
}
else
{
var provider = user.Server.BlockRepository.GetBlockProvider(world.GetBlockID(coordinates));
if (!provider.Opaque)
{
if (RelevantBlockType != null)
{
var blockType = RelevantBlockType.Value;
user.Server.BlockUpdatesEnabled = false;
world.SetBlockID(coordinates, blockType);
world.SetMetadata(coordinates, 0); // Source block
user.Server.BlockUpdatesEnabled = true;
var liquidProvider = world.BlockRepository.GetBlockProvider(blockType);
liquidProvider.BlockPlaced(new BlockDescriptor { Coordinates = coordinates }, face, world, user);
}
user.Inventory[user.SelectedSlot] = new ItemStack(BucketItem.ItemID);
}
}
}
}
public class LavaBucketItem : BucketItem
{
public static readonly new short ItemID = 0x147;
public override short ID { get { return 0x147; } }
public override string DisplayName { get { return "Lava Bucket"; } }
protected override byte? RelevantBlockType
{
get
{
return LavaBlock.BlockID;
}
}
}
public class MilkItem : BucketItem
{
public static readonly new short ItemID = 0x14F;
public override short ID { get { return 0x14F; } }
public override string DisplayName { get { return "Milk"; } }
protected override byte? RelevantBlockType
{
get
{
return null;
}
}
}
public class WaterBucketItem : BucketItem
{
public static readonly new short ItemID = 0x146;
public override short ID { get { return 0x146; } }
public override string DisplayName { get { return "Water Bucket"; } }
protected override byte? RelevantBlockType
{
get
{
return WaterBlock.BlockID;
}
}
}
}