private bool CheckTilePermission(TSPlayer player, DPoint location, BlockType blockType, int objectStyle, PaintColor paint, bool dropItem = false) { switch (blockType) { case BlockType.Statue: { DPoint originTileLocation = new DPoint(location.X, location.Y - 2); if (!TerrariaUtils.Tiles.IsObjectWired(originTileLocation, new DPoint(2, 3))) break; StatueStyle statueStyle = TerrariaUtils.Tiles.GetStatueStyle(objectStyle); StatueConfig statueConfig; if (!this.Config.StatueConfigs.TryGetValue(statueStyle, out statueConfig) || statueConfig == null) break; if (!player.Group.HasPermission(statueConfig.WirePermission)) { player.SendTileSquareEx(location, 10); if (dropItem) { ItemType itemTypeToDrop; itemTypeToDrop = TerrariaUtils.Tiles.GetItemTypeFromStatueStyle(statueStyle); Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 0, 0, (int)itemTypeToDrop); } this.TellNoStatueWiringPermission(player, statueStyle); return false; } break; } case BlockType.DartTrap: { Tile destTile = TerrariaUtils.Tiles[location]; if (!destTile.HasWire()) break; TrapConfig trapConfig; TrapStyle trapStyle = TerrariaUtils.Tiles.GetTrapStyle(destTile.frameY / 18); TrapConfigKey configKey = new TrapConfigKey(trapStyle, paint); if (!this.Config.TrapConfigs.TryGetValue(configKey, out trapConfig)) break; if (!player.Group.HasPermission(trapConfig.WirePermission)) { player.SendTileSquareEx(location, 10); if (dropItem) { ItemType itemTypeToDrop = TerrariaUtils.Tiles.GetItemTypeFromTrapStyle(trapStyle); Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 0, 0, (int)itemTypeToDrop); } this.TellMissingComponentWiringPermission(player, blockType); return false; } break; } case BlockType.Boulder: { DPoint originTileLocation = new DPoint(location.X - 1, location.Y - 1); if (!TerrariaUtils.Tiles.IsObjectWired(originTileLocation, new DPoint(2, 2))) break; if (!player.Group.HasPermission(AdvancedCircuitsPlugin.WireBoulder_Permission)) { player.SendTileSquareEx(location, 10); if (dropItem) Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 0, 0, (int)ItemType.Boulder); this.TellMissingComponentWiringPermission(player, blockType); return false; } break; } case BlockType.Sign: { if (!TerrariaUtils.Tiles.IsObjectWired(location, new DPoint(2, 2))) break; if (!player.Group.HasPermission(AdvancedCircuitsPlugin.WireSign_Permission)) { player.SendTileSquareEx(location, 10); if (dropItem) Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 0, 0, (int)ItemType.Sign); this.TellMissingComponentWiringPermission(player, blockType); return false; } break; } case BlockType.InletPump: case BlockType.OutletPump: { DPoint originTileLocation = new DPoint(location.X - 1, location.Y - 1); if (!TerrariaUtils.Tiles.IsObjectWired(originTileLocation, new DPoint(2, 2))) break; PumpConfig pumpConfig; if (!this.Config.PumpConfigs.TryGetValue(paint, out pumpConfig)) break; if (string.IsNullOrEmpty(pumpConfig.WirePermission)) break; if (!player.Group.HasPermission(pumpConfig.WirePermission)) { player.SendTileSquareEx(location, 10); if (dropItem) { ItemType itemTypeToDrop = ItemType.OutletPump; if (blockType == BlockType.InletPump) itemTypeToDrop = ItemType.InletPump; Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 0, 0, (int)itemTypeToDrop); } this.TellMissingComponentWiringPermission(player, blockType); return false; } break; } case AdvancedCircuits.BlockType_WirelessTransmitter: { if (!AdvancedCircuits.IsComponentWiredByPort(location, new DPoint(1, 1))) break; WirelessTransmitterConfig transmitterConfig; if (!this.Config.WirelessTransmitterConfigs.TryGetValue(paint, out transmitterConfig)) break; if (!player.Group.HasPermission(transmitterConfig.WirePermission)) { player.SendTileSquareEx(location, 1); if (dropItem) Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 0, 0, (int)ItemType.AdamantiteOre); this.TellMissingComponentWiringPermission(player, blockType); return false; } break; } case BlockType.Teleporter: { DPoint originTileLocation = new DPoint(location.X - 1, location.Y - 1); if (!TerrariaUtils.Tiles.IsObjectWired(originTileLocation, new DPoint(3, 1))) break; if (!player.Group.HasPermission(AdvancedCircuitsPlugin.WireTeleporter_Permission)) { player.SendTileSquareEx(location, 10); if (dropItem) Item.NewItem(location.X * TerrariaUtils.TileSize, location.Y * TerrariaUtils.TileSize, 0, 0, (int)ItemType.Teleporter); this.TellMissingComponentWiringPermission(player, blockType); return false; } break; } } return true; }