diff --git a/SubstrateCS/Source/AlphaBlockCollection.cs b/SubstrateCS/Source/AlphaBlockCollection.cs
index 6f05a2d..9c1b331 100644
--- a/SubstrateCS/Source/AlphaBlockCollection.cs
+++ b/SubstrateCS/Source/AlphaBlockCollection.cs
@@ -677,9 +677,15 @@ namespace Substrate
}
///
- public TileEntity GetTileEntity (int x, int y, int z)
+ public TileEntity GetTileEntity(int x, int y, int z)
{
- return _tileEntityManager.GetTileEntity(x, y, z);
+ return GetTileEntity(x, y, z, false);
+ }
+
+ ///
+ public TileEntity GetTileEntity(int x, int y, int z, bool unregistered)
+ {
+ return _tileEntityManager.GetTileEntity(x, y, z, unregistered);
}
internal TileEntity GetTileEntity (int index)
@@ -687,7 +693,7 @@ namespace Substrate
int x, y, z;
_blocks.GetMultiIndex(index, out x, out y, out z);
- return _tileEntityManager.GetTileEntity(x, y, z);
+ return GetTileEntity(x, y, z, false);
}
///
diff --git a/SubstrateCS/Source/Core/BlockTileEntities.cs b/SubstrateCS/Source/Core/BlockTileEntities.cs
index 4876da6..0790add 100644
--- a/SubstrateCS/Source/Core/BlockTileEntities.cs
+++ b/SubstrateCS/Source/Core/BlockTileEntities.cs
@@ -31,7 +31,7 @@ namespace Substrate.Core
BuildTileEntityCache();
}
- public TileEntity GetTileEntity (int x, int y, int z)
+ public TileEntity GetTileEntity (int x, int y, int z, bool unregistered)
{
BlockKey key = (TranslateCoordinates != null)
? TranslateCoordinates(x, y, z)
@@ -43,7 +43,7 @@ namespace Substrate.Core
return null;
}
- return TileEntityFactory.Create(te);
+ return unregistered ? TileEntityFactory.CreateAlways(te) : TileEntityFactory.Create(te);
}
public void SetTileEntity (int x, int y, int z, TileEntity te)
diff --git a/SubstrateCS/Source/TileEntityFactory.cs b/SubstrateCS/Source/TileEntityFactory.cs
index cb2f033..5d7865a 100644
--- a/SubstrateCS/Source/TileEntityFactory.cs
+++ b/SubstrateCS/Source/TileEntityFactory.cs
@@ -36,12 +36,13 @@ namespace Substrate
///
/// A representing a single Tile Entity, containing an 'id' field of the Tile Entity's registered name.
/// A new instance of a concrete type, or null if no type was registered with the given name.
- public static TileEntity Create (TagNodeCompound tree)
+ public static TileEntity Create(TagNodeCompound tree)
{
string type = tree["id"].ToTagString();
Type t;
- if (!_registry.TryGetValue(type, out t)) {
+ if (!_registry.TryGetValue(type, out t))
+ {
return null;
}
@@ -50,6 +51,31 @@ namespace Substrate
return te.LoadTreeSafe(tree);
}
+ ///
+ /// Create a new instance of a type by NBT node, or a blank TileEntity otherwise.
+ ///
+ /// A representing a single Tile Entity, containing an 'id' field of the Tile Entity's registered name.
+ /// A new instance of a concrete type, or null if no type was registered with the given name.
+ public static TileEntity CreateAlways(TagNodeCompound tree)
+ {
+ string type = tree["id"].ToTagString();
+
+ Type t;
+
+ TileEntity te;
+
+ if (!_registry.TryGetValue(type, out t))
+ {
+ te = new TileEntity("");
+ }
+ else
+ {
+ te = Activator.CreateInstance(t) as TileEntity;
+ }
+
+ return te.LoadTreeSafe(tree);
+ }
+
///
/// Lookup a concrete type by name.
///