With the latest Rust update, Facepunch introduced performance optimizations to reduce memory allocation and garbage collection overhead.

As part of this update, they changed how console command arguments are handled. The arg.Args array no longer returns standard strings (string[]), but uses the new Facepunch.StringView[] struct instead.

Because of this change, calling string methods directly on the arguments, such as arg.Args[0].ToLower(), now throws a compiler error ('StringView' does not contain a definition for 'ToLower'). To fix this, we have to use the arg.GetString(index) method to properly extract the string before modifying it.

Additionally, I replaced the string conversions for building grades (e.g., block.grade.ToString() == "Metal") with direct Enum comparisons (block.grade == BuildingGrade.Enum.Metal). This bypasses the StringView issue entirely and is a much cleaner and faster way to check the grade.

You just have to replace the old
[ConsoleCommand("UI_BuildingController")]
privatevoidCmdConsoleHandler(ConsoleSystem.Arg arg)

method with the updated one below.

[ConsoleCommand("UI_BuildingController")]
        private void CmdConsoleHandler(ConsoleSystem.Arg arg)
        {
            var player = arg.Player();
            if (player == null || !arg.HasArgs(1)) return;
            var playerData = storedData.PlayerData[player.userID];
            SoundEffect(player, "assets/bundled/prefabs/fx/notice/loot.drag.grab.fx.prefab");

            int index, skinIndex;
            
            // HIER WAR DER FEHLER: Das neue GetString(0) wird genutzt
            switch (arg.GetString(0).ToLower())
            {
                case "open":
                    {
                        InitializeLayers(player, true);
                        break;
                    }
                case "build":
                    {
                        var blocks = player.GetBuildingPrivilege().GetBuilding()?.buildingBlocks.ToArray();
                        if (blocks == null) return;
                        PrintToChat(player, GetMessage("Lang_UpdateBuilding", player));
                        StartCoroutine(player, UpgradeSkin(player, blocks));
                        TCupboardLayer(player);
                        SoundEffect(player, "assets/prefabs/deployable/repair bench/effects/skinchange_spraypaint.prefab");
                        break;
                    }
                case "change":
                    {
                        if (!int.TryParse(arg.GetString(1), out index) || !int.TryParse(arg.GetString(2), out skinIndex)) return;
                        ImageLayers(player, index, skinIndex);
                        break;
                    }
                case "choose":
                    {
                        if (!int.TryParse(arg.GetString(1), out index) || !int.TryParse(arg.GetString(2), out skinIndex)) return;
                        var grades = gradesSkin.ElementAt(index);
                        playerData.GetType().GetField(grades.Key.ToString())?.SetValue(playerData, grades.Value[skinIndex]);
                        ImageLayers(player, index, skinIndex);
                        SoundEffect(player, "assets/prefabs/missions/effects/mission_objective_complete.prefab");
                        break;
                    }
                case "settings":
                    {
                        SettingsLayer(player);
                        break;
                    }
                case "colors":
                    {
                        if (!int.TryParse(arg.GetString(1), out index)) return;
                        ColorLayer(player, index);
                        break;
                    }
                case "setcolor":
                    {
                        if (!int.TryParse(arg.GetString(1), out index) || !uint.TryParse(arg.GetString(2), out uint colorId)) return;
                        player.SetInfo("client.SelectedShippingContainerBlockColour", colorId.ToString());
                        playerData.Color = colorId;
                        ColorLayer(player, index);
                        SoundEffect(player, "assets/prefabs/deployable/repair bench/effects/skinchange_spraypaint.prefab");
                        break;
                    }
                case "randomcolor":
                    {
                        if (!int.TryParse(arg.GetString(1), out index)) return;
                        var randomColor = !playerData.RandomColor;
                        playerData.RandomColor = randomColor;
                        player.SetInfo("client.SelectedShippingContainerBlockColour", randomColor ? "0" : playerData.Color.ToString());
                        ColorLayer(player, index);
                        break;
                    }
                case "hammer":
                    {
                        var changeHammer = !playerData.ChangeHammer;
                        playerData.ChangeHammer = changeHammer;
                        SettingsLayer(player);
                        break;
                    }
                case "repair":
                    {
                        var needsRepair = !playerData.NeedsRepair;
                        playerData.NeedsRepair = needsRepair;
                        SettingsLayer(player);
                        break;
                    }
                case "animation":
                    {
                        var enableAnimation = !playerData.EnableAnimation;
                        playerData.EnableAnimation = enableAnimation;
                        SettingsLayer(player);
                        break;
                    }
            }
        }