Check if block type is correct
This commit is contained in:
parent
94c0c1370b
commit
b31eaa20c0
1 changed files with 14 additions and 10 deletions
|
@ -87,23 +87,27 @@ namespace TechbloxModdingAPI
|
||||||
remove => BlockEventsEngine.Removed -= value;
|
remove => BlockEventsEngine.Removed -= value;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static readonly Dictionary<ExclusiveBuildGroup, Func<EGID, Block>> GroupToConstructor =
|
private static readonly Dictionary<ExclusiveBuildGroup, (Func<EGID, Block> Constructor, Type Type)> GroupToConstructor =
|
||||||
new Dictionary<ExclusiveBuildGroup, Func<EGID, Block>>
|
new Dictionary<ExclusiveBuildGroup, (Func<EGID, Block>, Type)>
|
||||||
{
|
{
|
||||||
{CommonExclusiveGroups.DAMPEDSPRING_BLOCK_GROUP, id => new DampedSpring(id)},
|
{CommonExclusiveGroups.DAMPEDSPRING_BLOCK_GROUP, (id => new DampedSpring(id), typeof(DampedSpring))},
|
||||||
{CommonExclusiveGroups.ENGINE_BLOCK_BUILD_GROUP, id => new Engine(id)}
|
{CommonExclusiveGroups.ENGINE_BLOCK_BUILD_GROUP, (id => new Engine(id), typeof(Engine))}
|
||||||
};
|
};
|
||||||
|
|
||||||
internal static Block New(EGID egid)
|
internal static Block New(EGID egid)
|
||||||
{
|
{
|
||||||
return GroupToConstructor.ContainsKey(egid.groupID)
|
return GroupToConstructor.ContainsKey(egid.groupID)
|
||||||
? GroupToConstructor[egid.groupID](egid)
|
? GroupToConstructor[egid.groupID].Constructor(egid)
|
||||||
: new Block(egid);
|
: new Block(egid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Block(EGID id)
|
public Block(EGID id)
|
||||||
{
|
{
|
||||||
Id = id; //TODO: Check if block type is correct
|
Id = id;
|
||||||
|
Type expectedType;
|
||||||
|
if (GroupToConstructor.ContainsKey(id.groupID) &&
|
||||||
|
!GetType().IsAssignableFrom(expectedType = GroupToConstructor[id.groupID].Type))
|
||||||
|
throw new BlockSpecializationException($"Incorrect block type! Expected: {expectedType} Actual: {GetType()}");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -111,11 +115,11 @@ namespace TechbloxModdingAPI
|
||||||
/// It will throw an exception if the block doesn't exist.
|
/// It will throw an exception if the block doesn't exist.
|
||||||
/// Use the EGID constructor where possible or subclasses of Block as those specify the group.
|
/// Use the EGID constructor where possible or subclasses of Block as those specify the group.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Block(uint id)
|
public Block(uint id) : this(BlockEngine.FindBlockEGID(id)
|
||||||
|
?? throw new BlockTypeException(
|
||||||
|
"Could not find the appropriate group for the block." +
|
||||||
|
" The block probably doesn't exist or hasn't been submitted."))
|
||||||
{
|
{
|
||||||
Id = BlockEngine.FindBlockEGID(id)
|
|
||||||
?? throw new BlockTypeException("Could not find the appropriate group for the block." +
|
|
||||||
" The block probably doesn't exist or hasn't been submitted.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Loading…
Reference in a new issue