Find block when group is unknown
This commit is contained in:
parent
f403feb298
commit
aa0aefd41b
2 changed files with 20 additions and 2 deletions
|
@ -135,8 +135,14 @@ namespace GamecraftModdingAPI
|
|||
Id = id;
|
||||
}
|
||||
|
||||
public Block(uint id) : this(new EGID(id, CommonExclusiveGroups.BUILD_STANDARD_BLOCK_GROUP))
|
||||
{ //TODO: Figure out the block group based on the id
|
||||
/// <summary>
|
||||
/// This overload searches for the correct group the block is in.
|
||||
/// 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.
|
||||
/// </summary>
|
||||
public Block(uint id)
|
||||
{
|
||||
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.");
|
||||
}
|
||||
|
||||
public EGID Id { get; }
|
||||
|
|
|
@ -171,6 +171,18 @@ namespace GamecraftModdingAPI.Blocks
|
|||
return list.ToArray();
|
||||
}
|
||||
|
||||
public EGID? FindBlockEGID(uint id)
|
||||
{
|
||||
var groups = entitiesDB.FindGroups<DBEntityStruct>();
|
||||
foreach (ExclusiveGroupStruct group in groups)
|
||||
{
|
||||
if (entitiesDB.Exists<DBEntityStruct>(id, group))
|
||||
return new EGID(id, group);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Synchronize newly created entity components with entities DB.
|
||||
/// This forces a partial game tick, so it may be slow.
|
||||
|
|
Loading…
Reference in a new issue