diff --git a/MinecraftClient/config/ChatBots/AutoTree.cs b/MinecraftClient/config/ChatBots/AutoTree.cs new file mode 100644 index 00000000..89b26c6e --- /dev/null +++ b/MinecraftClient/config/ChatBots/AutoTree.cs @@ -0,0 +1,180 @@ +//MCCScript 1.0 + +MCC.LoadBot(new AutoTree()); + +//MCCScript Extensions + +public class AutoTree : ChatBot +{ + // Auto sapling placer - made for auto tree machine + // Put your bot in designed position for placing sapling + // Set the tree type by "/autotree type " + // Toggle on and off by "/autotree toggle" + + // Hard-code the location of the sapling (dirt coordinate with y-axis plus 1) + // Or use the in-game command "/autotree set x y z" + Location sapling = new Location(-6811, 79, -9935); + + Material[] saplingBlocks = + { + Material.AcaciaSapling, + Material.BirchSapling, + Material.DarkOakSapling, + Material.JungleSapling, + Material.OakSapling, + Material.SpruceSapling + }; + + ItemType[] saplingItems = + { + ItemType.AcaciaSapling, + ItemType.BirchSapling, + ItemType.DarkOakSapling, + ItemType.JungleSapling, + ItemType.OakSapling, + ItemType.SpruceSapling + }; + + bool running = false; + int treeTypeIndex = 1; // Default birch tree + + public override void Update() + { + if (running) + { + Material blockType = GetWorld().GetBlock(sapling).Type; + if (blockType == saplingBlocks[treeTypeIndex]) // Tree not yet grown + return; + switch (blockType) + { + case Material.Air: + // No tree, plant something + if (!SwitchToSapling()) + { + LogToConsole("No sapling in hotbar. Refill and start again."); + Toggle(); + break; + } + SendPlaceBlock(sapling, Direction.Up); + break; + } + } + } + public override void Initialize() + { + if (!GetTerrainEnabled()) + { + LogToConsoleTranslated("extra.terrainandmovement_required"); + UnloadBot(); + } + else if (!GetInventoryEnabled()) + { + LogToConsoleTranslated("extra.inventory_required"); + UnloadBot(); + } + else + { + RegisterChatBotCommand("autotree", "AutoTree ChatBot command", "Available commands: toggle, set, type", CommandHandler); + LogToConsole("Loaded."); + } + } + + public bool SetTreeType(int index) + { + if (index >= 0 && index < saplingItems.Length) + { + treeTypeIndex = index; + return true; + } + else return false; + } + + public void SetLocation(Location l) + { + sapling = l; + } + + public bool Toggle() + { + running = !running; + return running; + } + + public bool SwitchToSapling() + { + Container p = GetPlayerInventory(); + if (p.Items.ContainsKey(GetCurrentSlot() - 36) + && p.Items[GetCurrentSlot() - 36].Type == saplingItems[treeTypeIndex]) + { + // Already selected + return true; + } + // Search sapling in hotbar + List result = new List(p.SearchItem(saplingItems[treeTypeIndex])) + .Where(slot => slot >= 36 && slot <= 44) + .ToList(); + if (result.Count <= 0) + { + return false; + } + else + { + ChangeSlot((short)(result[0] - 36)); + return true; + } + } + + public string CommandHandler(string cmd, string[] args) + { + if (args.Length <= 0) + { + return "Available commands: toggle, set, type"; + } + string subCommand = args[0].ToLower(); + switch (subCommand) + { + case "toggle": + { + return Toggle() ? "Now is running" : "Now is stopping"; + } + case "set": + { + if (args.Length < 4) + { + return "Set the location for placing sapling. Usage: set "; + } + try + { + int x = int.Parse(args[1]); + int y = int.Parse(args[2]); + int z = int.Parse(args[3]); + var l = new Location(x, y, z); + SetLocation(l); + return "Location set to " + l.ToString(); + } + catch + { + return "Please input numbers. Usage: set "; + } + } + case "type": + { + if (args.Length < 2) + { + return "Set the tree type. Usage: type "; + } + string typeString = args[1].ToLower(); + for (int i = 0; i < saplingItems.Length; i++) + { + if (saplingItems[i].ToString().ToLower().StartsWith(typeString)) + { + treeTypeIndex = i; + break; + } + } + return "Tree sapling type set to " + saplingItems[treeTypeIndex].ToString(); + } + default: return "Available commands: toggle, set, type"; + } + } +} \ No newline at end of file