Improve tool effectiveness subsystem
This commit is contained in:
parent
fea89a9462
commit
61310e6bbb
@ -16,6 +16,8 @@ namespace TrueCraft.API.Logic
|
||||
bool RenderOpaque { get; }
|
||||
byte LightModifier { get; }
|
||||
bool DiffuseSkyLight { get; }
|
||||
ToolMaterial EffectiveToolMaterials { get; }
|
||||
ToolType EffectiveTools { get; }
|
||||
string DisplayName { get; }
|
||||
BoundingBox? BoundingBox { get; } // NOTE: Will this eventually need to be metadata-aware?
|
||||
Tuple<int, int> GetTextureMap(byte metadata);
|
||||
|
@ -8,36 +8,42 @@ namespace TrueCraft.API
|
||||
/// <summary>
|
||||
/// Enumerates the materials tools can be crafted from.
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum ToolMaterial
|
||||
{
|
||||
/// <summary>
|
||||
/// The tool is crafted from no material (special).
|
||||
/// </summary>
|
||||
None,
|
||||
None = 1,
|
||||
|
||||
/// <summary>
|
||||
/// The tool is crafted from wood.
|
||||
/// </summary>
|
||||
Wood,
|
||||
Wood = 2,
|
||||
|
||||
/// <summary>
|
||||
/// The tool is crafted from cobblestone.
|
||||
/// </summary>
|
||||
Stone,
|
||||
Stone = 4,
|
||||
|
||||
/// <summary>
|
||||
/// The tool is crafted from iron ingots.
|
||||
/// </summary>
|
||||
Iron,
|
||||
Iron = 8,
|
||||
|
||||
/// <summary>
|
||||
/// The tool is crafted from gold ingots.
|
||||
/// </summary>
|
||||
Gold,
|
||||
Gold = 16,
|
||||
|
||||
/// <summary>
|
||||
/// The tool is crafted from diamonds.
|
||||
/// </summary>
|
||||
Diamond
|
||||
Diamond = 32,
|
||||
|
||||
/// <summary>
|
||||
/// Any tool material is valid in these circumstances.
|
||||
/// </summary>
|
||||
All = None | Wood | Stone | Iron | Gold | Diamond
|
||||
}
|
||||
}
|
16
TrueCraft.API/ToolType.cs
Normal file
16
TrueCraft.API/ToolType.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
|
||||
namespace TrueCraft.API
|
||||
{
|
||||
[Flags]
|
||||
public enum ToolType
|
||||
{
|
||||
None = 1,
|
||||
Pickaxe = 2,
|
||||
Axe = 4,
|
||||
Shovel = 8,
|
||||
Hoe = 16,
|
||||
Sword = 32,
|
||||
All = None | Pickaxe | Axe | Shovel | Hoe | Sword
|
||||
}
|
||||
}
|
@ -106,6 +106,7 @@
|
||||
<Compile Include="ArmorMaterial.cs" />
|
||||
<Compile Include="Server\PlayerJoinedQuitEventArgs.cs" />
|
||||
<Compile Include="World\ChunkGeneratedEventArgs.cs" />
|
||||
<Compile Include="ToolType.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<ItemGroup />
|
||||
|
@ -31,6 +31,9 @@ namespace TrueCraft.Core.Test.Logic
|
||||
EntityManager = new Mock<IEntityManager>();
|
||||
User = new Mock<IRemoteClient>();
|
||||
BlockRepository = new Mock<IBlockRepository>();
|
||||
var itemRepository = new ItemRepository();
|
||||
BlockProvider.BlockRepository = BlockRepository.Object;
|
||||
BlockProvider.ItemRepository = itemRepository;
|
||||
|
||||
User.SetupGet(u => u.World).Returns(World.Object);
|
||||
User.SetupGet(u => u.Server).Returns(Server.Object);
|
||||
@ -67,7 +70,7 @@ namespace TrueCraft.Core.Test.Logic
|
||||
EntityManager.Verify(m => m.SpawnEntity(It.Is<ItemEntity>(e => e.Item.ID == 10)));
|
||||
World.Verify(w => w.SetBlockID(Coordinates3D.Zero, 0));
|
||||
|
||||
blockProvider.Protected().Setup<ItemStack[]>("GetDrop", ItExpr.IsAny<BlockDescriptor>())
|
||||
blockProvider.Protected().Setup<ItemStack[]>("GetDrop", ItExpr.IsAny<BlockDescriptor>(), ItExpr.IsAny<ItemStack>())
|
||||
.Returns(() => new[] { new ItemStack(12) });
|
||||
blockProvider.Object.BlockMined(descriptor, BlockFace.PositiveY, World.Object, User.Object);
|
||||
EntityManager.Verify(m => m.SpawnEntity(It.Is<ItemEntity>(e => e.Item.ID == 12)));
|
||||
|
@ -44,7 +44,24 @@ namespace TrueCraft.Core.Logic
|
||||
public void GenerateDropEntity(BlockDescriptor descriptor, IWorld world, IMultiplayerServer server, ItemStack item)
|
||||
{
|
||||
var entityManager = server.GetEntityManagerForWorld(world);
|
||||
var items = GetDrop(descriptor, item);
|
||||
var items = new ItemStack[0];
|
||||
var type = ToolType.None;
|
||||
var material = ToolMaterial.None;
|
||||
var held = ItemRepository.GetItemProvider(item.ID);
|
||||
|
||||
if (held is ToolItem)
|
||||
{
|
||||
var tool = held as ToolItem;
|
||||
material = tool.Material;
|
||||
type = tool.ToolType;
|
||||
}
|
||||
|
||||
if ((EffectiveTools & type) > 0)
|
||||
{
|
||||
if ((EffectiveToolMaterials & material) > 0)
|
||||
items = GetDrop(descriptor, item);
|
||||
}
|
||||
|
||||
foreach (var i in items)
|
||||
{
|
||||
if (i.Empty) continue;
|
||||
@ -200,6 +217,10 @@ namespace TrueCraft.Core.Logic
|
||||
/// </summary>
|
||||
public virtual string DisplayName { get { return string.Empty; } }
|
||||
|
||||
public virtual ToolMaterial EffectiveToolMaterials { get { return ToolMaterial.All; } }
|
||||
|
||||
public virtual ToolType EffectiveTools { get { return ToolType.All; } }
|
||||
|
||||
public virtual Tuple<int, int> GetTextureMap(byte metadata)
|
||||
{
|
||||
return null;
|
||||
|
@ -24,6 +24,14 @@ namespace TrueCraft.Core.Logic.Blocks
|
||||
return new Tuple<int, int>(2, 2);
|
||||
}
|
||||
|
||||
public override ToolType EffectiveTools
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Pickaxe;
|
||||
}
|
||||
}
|
||||
|
||||
protected override ItemStack[] GetDrop(BlockDescriptor descriptor, ItemStack item)
|
||||
{
|
||||
return new[] { new ItemStack(CoalItem.ItemID, 1, descriptor.Metadata) };
|
||||
|
@ -19,7 +19,21 @@ namespace TrueCraft.Core.Logic.Blocks
|
||||
|
||||
public override bool Opaque { get { return false; } }
|
||||
|
||||
//TODO: Mark this as a block that diffuses sun light.
|
||||
public override bool DiffuseSkyLight
|
||||
{
|
||||
get
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType EffectiveTools
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Sword;
|
||||
}
|
||||
}
|
||||
|
||||
public override string DisplayName { get { return "Cobweb"; } }
|
||||
|
||||
@ -30,11 +44,7 @@ namespace TrueCraft.Core.Logic.Blocks
|
||||
|
||||
protected override ItemStack[] GetDrop(BlockDescriptor descriptor, ItemStack item)
|
||||
{
|
||||
var provider = ItemRepository.GetItemProvider(item.ID);
|
||||
if (provider is SwordItem)
|
||||
return new[] { new ItemStack(StringItem.ItemID, 1, descriptor.Metadata) };
|
||||
else
|
||||
return new ItemStack[0];
|
||||
return new[] { new ItemStack(StringItem.ItemID, 1, descriptor.Metadata) };
|
||||
}
|
||||
}
|
||||
}
|
@ -46,5 +46,21 @@ namespace TrueCraft.Core.Logic.Blocks
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
public override ToolMaterial EffectiveToolMaterials
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolMaterial.Iron | ToolMaterial.Diamond;
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType EffectiveTools
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Pickaxe;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -19,6 +19,22 @@ namespace TrueCraft.Core.Logic.Blocks
|
||||
|
||||
public override string DisplayName { get { return "Diamond Ore"; } }
|
||||
|
||||
public override ToolMaterial EffectiveToolMaterials
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolMaterial.Iron | ToolMaterial.Diamond;
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType EffectiveTools
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Pickaxe;
|
||||
}
|
||||
}
|
||||
|
||||
public override Tuple<int, int> GetTextureMap(byte metadata)
|
||||
{
|
||||
return new Tuple<int, int>(2, 3);
|
||||
|
@ -46,5 +46,21 @@ namespace TrueCraft.Core.Logic.Blocks
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
public override ToolMaterial EffectiveToolMaterials
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolMaterial.Iron | ToolMaterial.Diamond;
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType EffectiveTools
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Pickaxe;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using TrueCraft.API.Logic;
|
||||
using TrueCraft.API;
|
||||
|
||||
namespace TrueCraft.Core.Logic.Blocks
|
||||
{
|
||||
@ -21,5 +22,21 @@ namespace TrueCraft.Core.Logic.Blocks
|
||||
{
|
||||
return new Tuple<int, int>(0, 2);
|
||||
}
|
||||
|
||||
public override ToolMaterial EffectiveToolMaterials
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolMaterial.Iron | ToolMaterial.Diamond;
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType EffectiveTools
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Pickaxe;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -46,5 +46,21 @@ namespace TrueCraft.Core.Logic.Blocks
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
public override ToolMaterial EffectiveToolMaterials
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolMaterial.Stone | ToolMaterial.Iron | ToolMaterial.Diamond;
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType EffectiveTools
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Pickaxe;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using TrueCraft.API.Logic;
|
||||
using TrueCraft.API;
|
||||
|
||||
namespace TrueCraft.Core.Logic.Blocks
|
||||
{
|
||||
@ -21,5 +22,21 @@ namespace TrueCraft.Core.Logic.Blocks
|
||||
{
|
||||
return new Tuple<int, int>(1, 2);
|
||||
}
|
||||
|
||||
public override ToolMaterial EffectiveToolMaterials
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolMaterial.Stone | ToolMaterial.Iron | ToolMaterial.Diamond;
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType EffectiveTools
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Pickaxe;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -58,5 +58,21 @@ namespace TrueCraft.Core.Logic.Blocks
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override ToolMaterial EffectiveToolMaterials
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolMaterial.Stone | ToolMaterial.Iron | ToolMaterial.Diamond;
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType EffectiveTools
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Pickaxe;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -28,5 +28,21 @@ namespace TrueCraft.Core.Logic.Blocks
|
||||
{
|
||||
return new[] { new ItemStack(DyeItem.ItemID, (sbyte)new Random().Next(4, 8), (short)DyeItem.DyeType.LapisLazuli) };
|
||||
}
|
||||
|
||||
public override ToolMaterial EffectiveToolMaterials
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolMaterial.Stone | ToolMaterial.Iron | ToolMaterial.Diamond;
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType EffectiveTools
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Pickaxe;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using TrueCraft.API.Logic;
|
||||
using TrueCraft.API;
|
||||
|
||||
namespace TrueCraft.Core.Logic.Blocks
|
||||
{
|
||||
@ -21,5 +22,21 @@ namespace TrueCraft.Core.Logic.Blocks
|
||||
{
|
||||
return new Tuple<int, int>(5, 2);
|
||||
}
|
||||
|
||||
public override ToolMaterial EffectiveToolMaterials
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolMaterial.Diamond;
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType EffectiveTools
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Pickaxe;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -78,13 +78,17 @@ namespace TrueCraft.Core.Logic.Blocks
|
||||
return new Tuple<int, int>(2, 4);
|
||||
}
|
||||
|
||||
public override ToolType EffectiveTools
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Shovel;
|
||||
}
|
||||
}
|
||||
|
||||
protected override ItemStack[] GetDrop(BlockDescriptor descriptor, ItemStack item)
|
||||
{
|
||||
var provider = ItemRepository.GetItemProvider(item.ID);
|
||||
if (provider is ShovelItem)
|
||||
return new[] { new ItemStack(SnowballItem.ItemID) };
|
||||
else
|
||||
return new ItemStack[0];
|
||||
return new[] { new ItemStack(SnowballItem.ItemID) };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ using TrueCraft.API.Entities;
|
||||
using TrueCraft.API;
|
||||
using TrueCraft.API.World;
|
||||
|
||||
namespace TrueCraft
|
||||
namespace TrueCraft.Core.Logic
|
||||
{
|
||||
public class ItemRepository : IItemRepository
|
||||
{
|
||||
@ -44,7 +44,7 @@ namespace TrueCraft
|
||||
ItemProviders.Insert(i + 1, provider);
|
||||
}
|
||||
|
||||
internal void DiscoverItemProviders()
|
||||
public void DiscoverItemProviders()
|
||||
{
|
||||
var providerTypes = new List<Type>();
|
||||
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
|
@ -58,6 +58,14 @@ namespace TrueCraft.Core.Logic.Items
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType ToolType
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Axe;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class WoodenAxeItem : AxeItem
|
||||
|
@ -61,6 +61,14 @@ namespace TrueCraft.Core.Logic.Items
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType ToolType
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Hoe;
|
||||
}
|
||||
}
|
||||
|
||||
public override void ItemUsedOnBlock(Coordinates3D coordinates, ItemStack item, BlockFace face, IWorld world, IRemoteClient user)
|
||||
{
|
||||
var id = world.GetBlockID(coordinates);
|
||||
|
@ -58,6 +58,14 @@ namespace TrueCraft.Core.Logic.Items
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType ToolType
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Pickaxe;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class WoodenPickaxeItem : PickaxeItem
|
||||
|
@ -58,6 +58,14 @@ namespace TrueCraft.Core.Logic.Items
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType ToolType
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Shovel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class WoodenShovelItem : ShovelItem
|
||||
|
@ -60,6 +60,14 @@ namespace TrueCraft.Core.Logic.Items
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public override ToolType ToolType
|
||||
{
|
||||
get
|
||||
{
|
||||
return ToolType.Sword;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class WoodenSwordItem : SwordItem
|
||||
|
@ -10,6 +10,8 @@ namespace TrueCraft.Core.Logic
|
||||
{
|
||||
public virtual ToolMaterial Material { get { return ToolMaterial.None; } }
|
||||
|
||||
public virtual ToolType ToolType { get { return ToolType.None; } }
|
||||
|
||||
public virtual short BaseDurability { get { return 0; } }
|
||||
|
||||
public override sbyte MaximumStack { get { return 1; } }
|
||||
|
@ -326,6 +326,7 @@
|
||||
<Compile Include="Windows\ChestWindow.cs" />
|
||||
<Compile Include="TerrainGen\EmptyGenerator.cs" />
|
||||
<Compile Include="Lighting\WorldLighter.cs" />
|
||||
<Compile Include="Logic\ItemRepository.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<ItemGroup>
|
||||
|
@ -54,7 +54,6 @@
|
||||
<Compile Include="Handlers\InteractionHandlers.cs" />
|
||||
<Compile Include="Commands\DebugCommands.cs" />
|
||||
<Compile Include="Exceptions\PlayerDisconnectException.cs" />
|
||||
<Compile Include="ItemRepository.cs" />
|
||||
<Compile Include="CraftingRepository.cs" />
|
||||
<Compile Include="ServerConfiguration.cs" />
|
||||
<Compile Include="PhysicsEngine.cs" />
|
||||
|
Reference in New Issue
Block a user