diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs
index 0d1c2bc7..42cd9ef1 100644
--- a/TShockAPI/TShock.cs
+++ b/TShockAPI/TShock.cs
@@ -349,6 +349,7 @@ namespace TShockAPI
ServerApi.Hooks.WorldHalloweenCheck.Register(this, OnHalloweenCheck);
ServerApi.Hooks.NetNameCollision.Register(this, NetHooks_NameCollision);
ServerApi.Hooks.ItemForceIntoChest.Register(this, OnItemForceIntoChest);
+ ServerApi.Hooks.WorldGrassSpread.Register(this, OnWorldGrassSpread);
Hooks.PlayerHooks.PlayerPreLogin += OnPlayerPreLogin;
Hooks.PlayerHooks.PlayerPostLogin += OnPlayerLogin;
Hooks.AccountHooks.AccountDelete += OnAccountDelete;
@@ -419,6 +420,7 @@ namespace TShockAPI
ServerApi.Hooks.WorldHalloweenCheck.Deregister(this, OnHalloweenCheck);
ServerApi.Hooks.NetNameCollision.Deregister(this, NetHooks_NameCollision);
ServerApi.Hooks.ItemForceIntoChest.Deregister(this, OnItemForceIntoChest);
+ ServerApi.Hooks.WorldGrassSpread.Deregister(this, OnWorldGrassSpread);
TShockAPI.Hooks.PlayerHooks.PlayerPostLogin -= OnPlayerLogin;
if (File.Exists(Path.Combine(SavePath, "tshock.pid")))
@@ -1208,24 +1210,50 @@ namespace TShockAPI
if (args.Handled)
return;
- if (!Config.AllowCrimsonCreep && (args.Type == TileID.Dirt || args.Type == TileID.FleshWeeds
- || TileID.Sets.Crimson[args.Type]))
+ if (!OnCreep(args.Type))
{
args.Handled = true;
+ }
+ }
+
+ /// OnWorldGrassSpread - Fired when grass is attempting to spread.
+ /// args - The GrassSpreadEventArgs object.
+ private void OnWorldGrassSpread(GrassSpreadEventArgs args)
+ {
+ if (args.Handled)
return;
+
+ if(!OnCreep(args.Grass))
+ {
+ args.Handled = true;
+ }
+ }
+
+ ///
+ /// Checks if the tile type is allowed to creep
+ ///
+ /// Tile id
+ /// True if allowed, otherwise false
+ private bool OnCreep(int tileType)
+ {
+ if (!Config.AllowCrimsonCreep && (tileType == TileID.Dirt || tileType == TileID.FleshWeeds
+ || TileID.Sets.Crimson[tileType]))
+ {
+ return false;
}
- if (!Config.AllowCorruptionCreep && (args.Type == TileID.Dirt || args.Type == TileID.CorruptThorns
- || TileID.Sets.Corrupt[args.Type]))
+ if (!Config.AllowCorruptionCreep && (tileType == TileID.Dirt || tileType == TileID.CorruptThorns
+ || TileID.Sets.Corrupt[tileType]))
{
- args.Handled = true;
- return;
+ return false;
}
- if (!Config.AllowHallowCreep && (TileID.Sets.Hallow[args.Type]))
+ if (!Config.AllowHallowCreep && (TileID.Sets.Hallow[tileType]))
{
- args.Handled = true;
+ return false;
}
+
+ return true;
}
/// OnStatueSpawn - Fired when a statue spawns.
diff --git a/TerrariaServerAPI b/TerrariaServerAPI
index a9d1b0e4..d3b7d9f4 160000
--- a/TerrariaServerAPI
+++ b/TerrariaServerAPI
@@ -1 +1 @@
-Subproject commit a9d1b0e4e096ecbd0b2033ce4ff636759c9448c3
+Subproject commit d3b7d9f4575602f468cf1e009ebc4bc5b79547c4