public static void PlayerPlacingPhysics(object sender, PlayerPlacingBlockEventArgs e)
{
World world = e.Player.World;
if (e.Result != CanPlaceResult.Allowed)
{
return;
}
if (e.NewBlock == Block.Gold)
{
if (e.Context == BlockChangeContext.Manual)
{
if (e.Player.fireworkMode && world.fireworkPhysics)
{
if (world.FireworkCount > 10)
{
e.Result = CanPlaceResult.Revert;
e.Player.Message("&WThere are too many active fireworks on this world");
return;
}
else
{
world.FireworkCount++;
world.AddPhysicsTask(new Firework(world, e.Coords), 300);
}
}
}
}
if (e.NewBlock == Block.TNT)
{
if (world.tntPhysics)
{
if (e.Context == BlockChangeContext.Manual)
{
lock (world.SyncRoot) {
world.AddPhysicsTask(new TNTTask(world, e.Coords, e.Player, false, true), 3000);
return;
}
}
}
}
if (e.NewBlock == Block.Sand || e.NewBlock == Block.Gravel)
{
if (e.Context == BlockChangeContext.Manual)
{
if (world.sandPhysics)
{
lock (world.SyncRoot) {
world.AddPhysicsTask(new SandTask(world, e.Coords, e.NewBlock), 150);
return;
}
}
}
}
if (Physics.CanFloat(e.NewBlock))
{
if (world.waterPhysics)
{
if (e.Context == BlockChangeContext.Manual)
{
world.AddPhysicsTask(new BlockFloat(world, e.Coords, e.NewBlock), 200);
return;
}
}
}
if (!Physics.CanFloat(e.NewBlock) &&
e.NewBlock != Block.Air &&
e.NewBlock != Block.Water &&
e.NewBlock != Block.Lava &&
e.NewBlock != Block.BrownMushroom &&
e.NewBlock != Block.RedFlower &&
e.NewBlock != Block.RedMushroom &&
e.NewBlock != Block.YellowFlower &&
e.NewBlock != Block.Plant)
{
if (e.Context == BlockChangeContext.Manual)
{
if (world.waterPhysics)
{
world.AddPhysicsTask(new BlockSink(world, e.Coords, e.NewBlock), 200);
return;
}
}
}
}