using System.Xml; using System.Xml.Linq; // // public class RequirementLookingAt : RequirementBase { public string blocks = ""; public string cvar = "focusBlockLocation"; public override bool ParamsValid(MinEventParams _params) { var blockPosition = _params.Self.GetBlockPosition(); var num = World.toChunkXZ(blockPosition.x); var num2 = World.toChunkXZ(blockPosition.z); if (blocks.Contains("Any") || string.IsNullOrEmpty(blocks)) return true; var world = _params.Self.world; for (var i = -1; i < 2; i++) { for (var j = -1; j < 2; j++) { var chunk = (Chunk)world.GetChunkSync(num + j, num2 + i); if (chunk == null) continue; var tileEntities = chunk.GetTileEntities(); foreach (var tileEntity in tileEntities.list) { var position = tileEntity.ToWorldPos().ToVector3(); var distanceSq = _params.Self.GetDistanceSq(position); // If the TileEntity is greater than 2 away, don't bother checking. if (distanceSq > 2) continue; if (blocks.Contains(tileEntity.GetTileEntityType().ToString())) { // lower than my feet if (position.y < _params.Self.position.y) { _params.Self.Buffs.AddCustomVar(cvar, -1); } // at my feet else if (position.y == _params.Self.position.y + 0.1f) { _params.Self.Buffs.AddCustomVar(cvar, 0); } // at my eye level else if (position.y <= _params.Self.GetEyeHeight()) { _params.Self.Buffs.AddCustomVar(cvar, 1); } else if (position.y > _params.Self.GetHeight()) { _params.Self.Buffs.AddCustomVar(cvar, 2); } else _params.Self.Buffs.AddCustomVar(cvar, 0); return true; } } } } _params.Self.Buffs.RemoveCustomVar(cvar); return false; } public override bool ParseXAttribute(XAttribute _attribute) { var name = _attribute.Name.LocalName; if (name == "cvar") { cvar = _attribute.Value; } else if (name == "block") { blocks = _attribute.Value; } else return base.ParseXAttribute(_attribute); return true; } }