Welcome to the serene yet strangely addictive world of Chop Your Tree on Roblox. In this simulator, your goal is simple: nurture a tree, chop it down for wood, sell it for coins, and repeat the cycle to unlock better tools and machinery. It sounds peaceful, but as you progress, the grind becomes intense. You need millions of coins to unlock the best axes, water purifiers, and prestige levels. Manually tapping your screen or clicking your mouse for hours can be exhausting.
This is where a high-quality Chop Your Tree script comes into play. By automating the core loop of watering and chopping, you can turn this active simulator into a fully AFK (Away From Keyboard) tycoon. Whether you are looking for a keyless Chop Your Tree script to run on your phone or a robust auto-farm for PC, we have found the perfect tool for you.
In this guide, we will showcase a top-tier script that covers everything from “Auto Water” to “Speed Hacks.” We will also provide a step-by-step execution guide for both PC and Mobile users, along with a beginner’s guide to mastering the forest. If you have been searching for a reliable Chop Your Tree script pastebin, look no further. Let’s start chopping!

1. Mobile Xeno AutoChop β (Auto Tap, Auto Water, Speed Hack)
This script is a comprehensive automation suite designed to handle every single mechanic in the game. It is particularly notable for its broad compatibility, working smoothly on both PC executors like Xeno and Solara, as well as mobile executors like Delta and Potassium. It transforms the game from a manual grind into an automated resource generator.
Script Features
| Feature | Description |
|---|---|
| Auto Tap Water | Automatically taps the water button to keep your can filled. |
| Auto Hit Tree | Swings your axe automatically, destroying the tree instantly as it grows. |
| Use Cans | Automatically equips and uses watering cans to boost tree growth. |
| Fill Purifier | Automates the purifier mechanic, filling and claiming it at your desired level. |
| Collect Coins | Teleports your character to coins instantly before they de-spawn or spread out. |
| Speed Hack | Increases your movement speed to navigate the map faster. |
| Auto Prestige | Automatically performs a prestige reset when you meet the requirements (requires Totem). |
Detailed Description
The Mobile Xeno AutoChop script is a powerhouse for progression. Its “Auto Hit Tree” and “Auto Tap Water” features work in perfect sync, ensuring your tree is always growing and always being harvested. This removes the need for you to be present at your screen.
One of the most unique features is the Collect Coins teleport. In Chop Your Tree, coins often scatter on the ground. This script teleports your character to them instantly, ensuring you never miss a single coin. Additionally, the Fill Purifier automation is a massive time-saver, as managing the purifier manually can be tedious. Whether you have the “Steal Cans” gamepass or are a free-to-play user, this script adapts to your inventory. It is an open-source Chop Your Tree script that is safe, efficient, and packed with utility.
if getgenv().ChopYourTree then
pcall(function() getgenv().ChopYourTree.Unload() end)
task.wait(0.3)
end
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local VirtualInputManager = game:GetService("VirtualInputManager")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local LocalPlayer = Players.LocalPlayer
local Remotes = ReplicatedStorage:WaitForChild("Remotes", 10)
if not Remotes then
warn("[ChopTree] Remotes folder not found")
return
end
local TapButtonClick = Remotes:FindFirstChild("TapButtonClick")
local TreeClick = Remotes:FindFirstChild("TreeClick")
local AxeSwing = Remotes:FindFirstChild("AxeSwing")
local CollectCoin = Remotes:FindFirstChild("CollectCoin")
local Prestige = Remotes:FindFirstChild("Prestige")
local ClickWateringCan = Remotes:FindFirstChild("ClickWateringCan")
local ClaimWaterPurifier = Remotes:FindFirstChild("ClaimWaterPurifier")
local WaterPurifier = Remotes:FindFirstChild("WaterPurifier")
local TIMING = {
TAP_SPEED = 0.01,
MUTATION_HIT_DELAY = 0.02,
MUTATION_LOOP_DELAY = 0.05,
COIN_COLLECT_DELAY = 0.03,
COIN_LOOP_DELAY = 0.2,
PRESTIGE_INTERVAL = 5,
USE_CANS_KEY_DELAY = 0.3,
USE_CANS_CLICK_DELAY = 0.4,
USE_CANS_INTERVAL = 5,
PICKUP_CANS_DELAY = 0.3,
PICKUP_CANS_INTERVAL = 8,
CLAIM_PURIFIER_INTERVAL = 10,
FILL_PURIFIER_INTERVAL = 5,
FILL_PURIFIER_DELAY = 2,
STATS_UPDATE_INTERVAL = 1,
KEY_PRESS_DURATION = 0.05,
CLICK_DURATION = 0.05,
STEAL_DELAY = 0.5,
STEAL_LOOP_INTERVAL = 3,
}
local Config = {
AutoTap = false,
TapThreads = 5,
AutoMutations = false,
AutoCollectCoins = false,
AutoPrestige = false,
SpeedHack = false,
SpeedAmount = 100,
AutoUseCans = false,
AutoPickupCans = false,
AutoClaimPurifier = false,
AutoFillPurifier = false,
AutoSteal = false,
WaterLevelThreshold = 3,
}
local State = {
Running = true,
Tapping = false,
HittingTrees = false,
CollectingCoins = false,
UsingCans = false,
PickingUpCans = false,
Prestiging = false,
ClaimingPurifier = false,
FillingPurifier = false,
Stealing = false,
}
local Connections = {}
local Threads = {}
local ScreenGui = nil
local function SafeDisconnect(name)
if Connections[name] then
pcall(function() Connections[name]:Disconnect() end)
Connections[name] = nil
end
end
local function SafeCancel(name)
if Threads[name] then
pcall(function() task.cancel(Threads[name]) end)
Threads[name] = nil
end
end
local function DisconnectAll()
for name in pairs(Connections) do
SafeDisconnect(name)
end
end
local function CancelAllThreads()
for name in pairs(Threads) do
SafeCancel(name)
end
end
local function Unload()
State.Running = false
for k, v in pairs(Config) do
if type(v) == "boolean" then
Config[k] = false
end
end
for k, v in pairs(State) do
if type(v) == "boolean" and k ~= "Running" then
State[k] = false
end
end
task.wait(0.1)
DisconnectAll()
CancelAllThreads()
if ScreenGui then
pcall(function() ScreenGui:Destroy() end)
ScreenGui = nil
end
getgenv().ChopYourTree = nil
end
local function GetPlayerPlot()
local plotVal = LocalPlayer:FindFirstChild("Plot")
if plotVal and plotVal:IsA("ObjectValue") and plotVal.Value then
return plotVal.Value
end
local plots = Workspace:FindFirstChild("Plots")
if plots then
for _, plot in ipairs(plots:GetChildren()) do
if plot:GetAttribute("Plr") == LocalPlayer.Name then
return plot
end
end
end
return nil
end
local function GetMutations()
local mutations = {}
local seen = {}
local plot = GetPlayerPlot()
if plot then
for _, child in ipairs(plot:GetChildren()) do
if child.Name == "TreeValue" and child:IsA("ObjectValue") then
local tree = child.Value
if tree and tree.Parent and not seen[tree] then
seen[tree] = true
table.insert(mutations, tree)
end
end
end
end
return mutations
end
local function GetWateringCans()
local cans = {}
local seen = {}
local plot = GetPlayerPlot()
if plot then
for _, desc in ipairs(plot:GetDescendants()) do
if desc.Name == "WateringCanValue" and desc:IsA("ObjectValue") then
local can = desc.Value
if can and can.Parent and not seen[can] then
seen[can] = true
table.insert(cans, can)
end
end
end
end
return cans
end
local function GetStealableCans()
local stealable = {}
local myPlot = GetPlayerPlot()
local plots = Workspace:FindFirstChild("Plots")
if not plots then return stealable end
for _, plot in ipairs(plots:GetChildren()) do
if plot ~= myPlot then
for _, desc in ipairs(plot:GetDescendants()) do
if desc.Name == "WateringCanValue" and desc:IsA("ObjectValue") then
local can = desc.Value
if can and can.Parent then
local canSteal = can:GetAttribute("CanSteal") or can:GetAttribute("Stealable")
if canSteal == nil or canSteal == true then
table.insert(stealable, can)
end
end
end
if desc:IsA("Model") or desc:IsA("BasePart") then
local name = desc.Name:lower()
if name:find("water") and name:find("can") then
local canSteal = desc:GetAttribute("CanSteal") or desc:GetAttribute("Stealable")
if canSteal == nil or canSteal == true then
table.insert(stealable, desc)
end
end
end
end
end
end
return stealable
end
local function StealCan(can)
if not can or not can.Parent then return end
if ClickWateringCan then
pcall(function() ClickWateringCan:FireServer(can) end)
end
end
local function StealAllCans()
local cans = GetStealableCans()
for _, can in ipairs(cans) do
if not Config.AutoSteal or not State.Running then break end
StealCan(can)
task.wait(TIMING.STEAL_DELAY)
end
return #cans
end
local function GetMainTree()
local plot = GetPlayerPlot()
if plot then
local contents = plot:FindFirstChild("PlotContents")
if contents then
return contents:FindFirstChild("Tree")
end
end
return nil
end
local function GetWateringCanLevels()
local levels = {}
local data = LocalPlayer:FindFirstChild("Data")
if data then
local tapCans = data:FindFirstChild("TapWateringCans")
if tapCans then
for _, slot in ipairs(tapCans:GetChildren()) do
local levelVal = slot:FindFirstChild("Level")
if levelVal then
levels[slot.Name] = levelVal.Value
end
end
end
end
return levels
end
local function GetHighestWaterLevel()
local highest = 0
for _, level in pairs(GetWateringCanLevels()) do
if level > highest then
highest = level
end
end
return highest
end
local function ShouldAutoWater()
return GetHighestWaterLevel() >= Config.WaterLevelThreshold
end
local function GetLowestLevelCanSlot()
local lowestSlot, lowestLevel = nil, 999
local data = LocalPlayer:FindFirstChild("Data")
if data then
local tapCans = data:FindFirstChild("TapWateringCans")
if tapCans then
for _, slot in ipairs(tapCans:GetChildren()) do
local levelVal = slot:FindFirstChild("Level")
if levelVal and levelVal.Value < lowestLevel then
lowestLevel = levelVal.Value
lowestSlot = tonumber(slot.Name)
end
end
end
end
return lowestSlot, lowestLevel
end
local function IsPurifierEmpty()
local plot = GetPlayerPlot()
if plot then
local contents = plot:FindFirstChild("PlotContents")
if contents then
local purifier = contents:FindFirstChild("Water Purifier")
if purifier then
return not (purifier:FindFirstChild("WateringCan") or purifier:FindFirstChild("Can"))
end
end
end
return true
end
local function GetCoinsValue()
local ls = LocalPlayer:FindFirstChild("leaderstats")
if ls then
local coins = ls:FindFirstChild("π΅ Coins")
if coins then return tostring(coins.Value) end
end
return "0"
end
local function GetPrestigesValue()
local ls = LocalPlayer:FindFirstChild("leaderstats")
if ls then
local prestiges = ls:FindFirstChild("π Prestiges")
if prestiges then return prestiges.Value end
end
return 0
end
local function HasWateringCans()
local backpack = LocalPlayer:FindFirstChild("Backpack")
local char = LocalPlayer.Character
if backpack then
for _, item in ipairs(backpack:GetChildren()) do
local name = item.Name:lower()
if name:find("water") or name:find("can") then
return true
end
end
end
if char then
for _, item in ipairs(char:GetChildren()) do
if item:IsA("Tool") then
local name = item.Name:lower()
if name:find("water") or name:find("can") then
return true
end
end
end
end
return false
end
local function PressKey(keyCode)
pcall(function()
VirtualInputManager:SendKeyEvent(true, keyCode, false, game)
task.wait(TIMING.KEY_PRESS_DURATION)
VirtualInputManager:SendKeyEvent(false, keyCode, false, game)
end)
end
local function ClickMouse()
pcall(function()
VirtualInputManager:SendMouseButtonEvent(0, 0, 0, true, game, 1)
task.wait(TIMING.CLICK_DURATION)
VirtualInputManager:SendMouseButtonEvent(0, 0, 0, false, game, 1)
end)
end
local HotbarKeys = {
Enum.KeyCode.Two, Enum.KeyCode.Three, Enum.KeyCode.Four,
Enum.KeyCode.Five, Enum.KeyCode.Six, Enum.KeyCode.Seven,
Enum.KeyCode.Eight, Enum.KeyCode.Nine,
}
local function TapTree()
if not TapButtonClick then return end
local plot = GetPlayerPlot()
if plot then
pcall(function() TapButtonClick:FireServer(plot) end)
end
end
local function HitMutation(mutation)
if not mutation or not mutation.Parent then return end
if TreeClick then
pcall(function() TreeClick:InvokeServer(mutation) end)
end
if AxeSwing then
pcall(function() AxeSwing:FireServer() end)
end
end
local function HitAllMutations()
local mutations = GetMutations()
for _, mutation in ipairs(mutations) do
if not Config.AutoMutations or not State.Running then break end
HitMutation(mutation)
task.wait(TIMING.MUTATION_HIT_DELAY)
end
end
local function CollectAllCoins()
local char = LocalPlayer.Character
local root = char and char:FindFirstChild("HumanoidRootPart")
if not root then return end
local originalCFrame = root.CFrame
local orbsFolder = Workspace:FindFirstChild("Orbs")
if orbsFolder then
for _, coin in ipairs(orbsFolder:GetChildren()) do
if not Config.AutoCollectCoins or not State.Running then break end
if coin and coin.Parent and coin:IsA("BasePart") and coin:GetAttribute("CanCollect") then
pcall(function() root.CFrame = coin.CFrame end)
if firetouchinterest then
pcall(function()
firetouchinterest(root, coin, 0)
firetouchinterest(root, coin, 1)
end)
end
if CollectCoin then
pcall(function() CollectCoin:FireServer(coin) end)
end
task.wait(TIMING.COIN_COLLECT_DELAY)
end
end
end
pcall(function() root.CFrame = originalCFrame end)
end
local function UseCans()
if State.UsingCans then return end
State.UsingCans = true
if not HasWateringCans() then
PressKey(Enum.KeyCode.One)
State.UsingCans = false
return
end
for _, keyCode in ipairs(HotbarKeys) do
if not Config.AutoUseCans or not State.Running then break end
PressKey(keyCode)
task.wait(TIMING.USE_CANS_KEY_DELAY)
ClickMouse()
task.wait(TIMING.USE_CANS_CLICK_DELAY)
end
PressKey(Enum.KeyCode.One)
State.UsingCans = false
end
local function PickupCans()
if State.PickingUpCans then return end
State.PickingUpCans = true
local cans = GetWateringCans()
if #cans == 0 then
PressKey(Enum.KeyCode.One)
State.PickingUpCans = false
return
end
for _, can in ipairs(cans) do
if not Config.AutoPickupCans or not State.Running then break end
if ClickWateringCan then
pcall(function() ClickWateringCan:FireServer(can) end)
end
task.wait(TIMING.PICKUP_CANS_DELAY)
end
local tree = GetMainTree()
if tree and ClickWateringCan then
pcall(function() ClickWateringCan:FireServer(tree) end)
end
local plot = GetPlayerPlot()
if plot and ClickWateringCan then
pcall(function() ClickWateringCan:FireServer(plot) end)
end
PressKey(Enum.KeyCode.One)
State.PickingUpCans = false
end
local function ClaimPurifier()
if ClaimWaterPurifier then
pcall(function() ClaimWaterPurifier:InvokeServer() end)
end
end
local function FillPurifier()
local slot, level = GetLowestLevelCanSlot()
if slot and level < 100 and WaterPurifier then
pcall(function() WaterPurifier:InvokeServer(slot) end)
end
end
local function DoPrestige()
if Prestige then
pcall(function() Prestige:InvokeServer() end)
end
end
local function SetSpeed(speed)
local char = LocalPlayer.Character
if char then
local humanoid = char:FindFirstChildOfClass("Humanoid")
if humanoid then
pcall(function() humanoid.WalkSpeed = speed end)
end
end
end
local function StartAutoTap()
if State.Tapping then return end
State.Tapping = true
for i = 1, Config.TapThreads do
Threads["Tap_" .. i] = task.spawn(function()
while Config.AutoTap and State.Running do
TapTree()
task.wait(TIMING.TAP_SPEED)
end
end)
end
Threads["TapMonitor"] = task.spawn(function()
while Config.AutoTap and State.Running do
task.wait(0.1)
end
State.Tapping = false
end)
end
local function StopAutoTap()
Config.AutoTap = false
for i = 1, Config.TapThreads do
SafeCancel("Tap_" .. i)
end
SafeCancel("TapMonitor")
State.Tapping = false
end
local function StartAutoMutations()
if State.HittingTrees then return end
State.HittingTrees = true
Threads["Mutations"] = task.spawn(function()
while Config.AutoMutations and State.Running do
HitAllMutations()
task.wait(TIMING.MUTATION_LOOP_DELAY)
end
State.HittingTrees = false
end)
end
local function StopAutoMutations()
Config.AutoMutations = false
SafeCancel("Mutations")
State.HittingTrees = false
end
local function StartAutoCollect()
if State.CollectingCoins then return end
State.CollectingCoins = true
Threads["Collect"] = task.spawn(function()
while Config.AutoCollectCoins and State.Running do
CollectAllCoins()
task.wait(TIMING.COIN_LOOP_DELAY)
end
State.CollectingCoins = false
end)
end
local function StopAutoCollect()
Config.AutoCollectCoins = false
SafeCancel("Collect")
State.CollectingCoins = false
end
local function StartAutoPrestige()
if State.Prestiging then return end
State.Prestiging = true
Threads["Prestige"] = task.spawn(function()
while Config.AutoPrestige and State.Running do
DoPrestige()
task.wait(TIMING.PRESTIGE_INTERVAL)
end
State.Prestiging = false
end)
end
local function StopAutoPrestige()
Config.AutoPrestige = false
SafeCancel("Prestige")
State.Prestiging = false
end
local function StartAutoUseCans()
Threads["UseCans"] = task.spawn(function()
while Config.AutoUseCans and State.Running do
if ShouldAutoWater() then
task.spawn(UseCans)
end
task.wait(TIMING.USE_CANS_INTERVAL)
end
end)
end
local function StopAutoUseCans()
Config.AutoUseCans = false
SafeCancel("UseCans")
end
local function StartAutoPickupCans()
Threads["PickupCans"] = task.spawn(function()
while Config.AutoPickupCans and State.Running do
if ShouldAutoWater() then
task.spawn(PickupCans)
end
task.wait(TIMING.PICKUP_CANS_INTERVAL)
end
end)
end
local function StopAutoPickupCans()
Config.AutoPickupCans = false
SafeCancel("PickupCans")
end
local function StartAutoClaimPurifier()
Threads["ClaimPurifier"] = task.spawn(function()
while Config.AutoClaimPurifier and State.Running do
ClaimPurifier()
task.wait(TIMING.CLAIM_PURIFIER_INTERVAL)
end
end)
end
local function StopAutoClaimPurifier()
Config.AutoClaimPurifier = false
SafeCancel("ClaimPurifier")
end
local function StartAutoFillPurifier()
Threads["FillPurifier"] = task.spawn(function()
while Config.AutoFillPurifier and State.Running do
if IsPurifierEmpty() then
FillPurifier()
task.wait(TIMING.FILL_PURIFIER_DELAY)
end
task.wait(TIMING.FILL_PURIFIER_INTERVAL)
end
end)
end
local function StopAutoFillPurifier()
Config.AutoFillPurifier = false
SafeCancel("FillPurifier")
end
local function StartAutoSteal()
if State.Stealing then return end
State.Stealing = true
Threads["Steal"] = task.spawn(function()
while Config.AutoSteal and State.Running do
local stolen = StealAllCans()
task.wait(TIMING.STEAL_LOOP_INTERVAL)
end
State.Stealing = false
end)
end
local function StopAutoSteal()
Config.AutoSteal = false
SafeCancel("Steal")
State.Stealing = false
end
local function StartSpeedHack()
SafeDisconnect("SpeedHack")
Connections.SpeedHack = RunService.Heartbeat:Connect(function()
if Config.SpeedHack and State.Running then
SetSpeed(Config.SpeedAmount)
end
end)
end
local function StopSpeedHack()
Config.SpeedHack = false
SafeDisconnect("SpeedHack")
SetSpeed(16)
end
local function CreateGUI()
local isMobile = UserInputService.TouchEnabled and not UserInputService.KeyboardEnabled
ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "ChopYourTreeGUI"
ScreenGui.ResetOnSpawn = false
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
ScreenGui.IgnoreGuiInset = true
pcall(function()
if syn then
syn.protect_gui(ScreenGui)
elseif gethui then
ScreenGui.Parent = gethui()
return
end
end)
ScreenGui.Parent = LocalPlayer:WaitForChild("PlayerGui")
local Icons = {
Power = "rbxassetid://97421363782839",
}
local Accent = Color3.fromRGB(0, 170, 255)
local GlassBg = Color3.fromRGB(40, 44, 52)
local GlassCard = Color3.fromRGB(55, 60, 70)
local TextPrimary = Color3.fromRGB(255, 255, 255)
local TextSecondary = Color3.fromRGB(140, 145, 155)
local MainContainer = Instance.new("Frame")
MainContainer.Name = "MainContainer"
MainContainer.AnchorPoint = Vector2.new(0.5, 0.5)
MainContainer.Position = UDim2.new(0.5, 0, 0.5, 0)
MainContainer.Size = isMobile and UDim2.new(0.75, 0, 0, 280) or UDim2.new(0, 480, 0, 210)
MainContainer.BackgroundColor3 = GlassBg
MainContainer.BackgroundTransparency = 0.05
MainContainer.BorderSizePixel = 0
MainContainer.ClipsDescendants = true
MainContainer.Parent = ScreenGui
local MainCorner = Instance.new("UICorner")
MainCorner.CornerRadius = UDim.new(0, 16)
MainCorner.Parent = MainContainer
local TopBar = Instance.new("Frame")
TopBar.Size = UDim2.new(1, 0, 0, 44)
TopBar.BackgroundColor3 = Color3.fromRGB(35, 38, 46)
TopBar.BackgroundTransparency = 0.3
TopBar.BorderSizePixel = 0
TopBar.Parent = MainContainer
local TopCorner = Instance.new("UICorner")
TopCorner.CornerRadius = UDim.new(0, 16)
TopCorner.Parent = TopBar
local FarmingTab = Instance.new("TextButton")
FarmingTab.Size = UDim2.new(0, 80, 0, 30)
FarmingTab.Position = UDim2.new(0, 12, 0.5, -15)
FarmingTab.BackgroundColor3 = Accent
FarmingTab.BackgroundTransparency = 0.7
FarmingTab.BorderSizePixel = 0
FarmingTab.Text = "Farming"
FarmingTab.TextSize = 12
FarmingTab.Font = Enum.Font.GothamBold
FarmingTab.TextColor3 = TextPrimary
FarmingTab.Parent = TopBar
local FarmCorner = Instance.new("UICorner")
FarmCorner.CornerRadius = UDim.new(0, 8)
FarmCorner.Parent = FarmingTab
local PlayerTab = Instance.new("TextButton")
PlayerTab.Size = UDim2.new(0, 70, 0, 30)
PlayerTab.Position = UDim2.new(0, 100, 0.5, -15)
PlayerTab.BackgroundTransparency = 1
PlayerTab.BorderSizePixel = 0
PlayerTab.Text = "Player"
PlayerTab.TextSize = 12
PlayerTab.Font = Enum.Font.GothamMedium
PlayerTab.TextColor3 = TextSecondary
PlayerTab.Parent = TopBar
local PlayerCorner = Instance.new("UICorner")
PlayerCorner.CornerRadius = UDim.new(0, 8)
PlayerCorner.Parent = PlayerTab
local PowerBtn = Instance.new("ImageButton")
PowerBtn.Size = UDim2.new(0, 28, 0, 28)
PowerBtn.Position = UDim2.new(1, -42, 0.5, -14)
PowerBtn.BackgroundColor3 = Color3.fromRGB(200, 60, 60)
PowerBtn.BackgroundTransparency = 0.6
PowerBtn.BorderSizePixel = 0
PowerBtn.Image = Icons.Power
PowerBtn.ImageColor3 = TextPrimary
PowerBtn.Parent = TopBar
local PowerCorner = Instance.new("UICorner")
PowerCorner.CornerRadius = UDim.new(0, 8)
PowerCorner.Parent = PowerBtn
PowerBtn.MouseButton1Click:Connect(Unload)
local AvatarFrame = Instance.new("Frame")
AvatarFrame.Size = UDim2.new(0, 32, 0, 32)
AvatarFrame.Position = UDim2.new(1, -80, 0.5, -16)
AvatarFrame.BackgroundColor3 = GlassCard
AvatarFrame.BorderSizePixel = 0
AvatarFrame.Parent = TopBar
local AvatarCorner = Instance.new("UICorner")
AvatarCorner.CornerRadius = UDim.new(1, 0)
AvatarCorner.Parent = AvatarFrame
local AvatarImg = Instance.new("ImageLabel")
AvatarImg.Size = UDim2.new(1, 0, 1, 0)
AvatarImg.BackgroundTransparency = 1
AvatarImg.Parent = AvatarFrame
task.spawn(function()
local ok, img = pcall(function()
return Players:GetUserThumbnailAsync(LocalPlayer.UserId, Enum.ThumbnailType.HeadShot, Enum.ThumbnailSize.Size100x100)
end)
if ok then AvatarImg.Image = img end
end)
local AvatarImgCorner = Instance.new("UICorner")
AvatarImgCorner.CornerRadius = UDim.new(1, 0)
AvatarImgCorner.Parent = AvatarImg
local FarmingPanel = Instance.new("Frame")
FarmingPanel.Name = "FarmingPanel"
FarmingPanel.Size = UDim2.new(1, -16, 1, -52)
FarmingPanel.Position = UDim2.new(0, 8, 0, 48)
FarmingPanel.BackgroundTransparency = 1
FarmingPanel.Parent = MainContainer
local PlayerPanel = Instance.new("Frame")
PlayerPanel.Name = "PlayerPanel"
PlayerPanel.Size = UDim2.new(1, -16, 1, -52)
PlayerPanel.Position = UDim2.new(0, 8, 0, 48)
PlayerPanel.BackgroundTransparency = 1
PlayerPanel.Visible = false
PlayerPanel.Parent = MainContainer
FarmingTab.MouseButton1Click:Connect(function()
FarmingPanel.Visible = true
PlayerPanel.Visible = false
FarmingTab.BackgroundTransparency = 0.7
FarmingTab.TextColor3 = TextPrimary
PlayerTab.BackgroundTransparency = 1
PlayerTab.TextColor3 = TextSecondary
end)
PlayerTab.MouseButton1Click:Connect(function()
FarmingPanel.Visible = false
PlayerPanel.Visible = true
FarmingTab.BackgroundTransparency = 1
FarmingTab.TextColor3 = TextSecondary
PlayerTab.BackgroundTransparency = 0.7
PlayerTab.BackgroundColor3 = Accent
PlayerTab.TextColor3 = TextPrimary
end)
local function CreateToggle(parent, pos, size, label, default, callback)
local Frame = Instance.new("Frame")
Frame.Size = size
Frame.Position = pos
Frame.BackgroundColor3 = GlassCard
Frame.BackgroundTransparency = 0.4
Frame.BorderSizePixel = 0
Frame.Parent = parent
local Corner = Instance.new("UICorner")
Corner.CornerRadius = UDim.new(0, 12)
Corner.Parent = Frame
local Label = Instance.new("TextLabel")
Label.Size = UDim2.new(1, -60, 1, 0)
Label.Position = UDim2.new(0, 12, 0, 0)
Label.BackgroundTransparency = 1
Label.Text = label
Label.TextSize = 11
Label.Font = Enum.Font.GothamMedium
Label.TextColor3 = TextPrimary
Label.TextXAlignment = Enum.TextXAlignment.Left
Label.Parent = Frame
local ToggleBg = Instance.new("Frame")
ToggleBg.Size = UDim2.new(0, 40, 0, 22)
ToggleBg.Position = UDim2.new(1, -50, 0.5, -11)
ToggleBg.BackgroundColor3 = default and Accent or Color3.fromRGB(60, 65, 75)
ToggleBg.BorderSizePixel = 0
ToggleBg.Parent = Frame
local BgCorner = Instance.new("UICorner")
BgCorner.CornerRadius = UDim.new(1, 0)
BgCorner.Parent = ToggleBg
local Circle = Instance.new("Frame")
Circle.Size = UDim2.new(0, 16, 0, 16)
Circle.Position = default and UDim2.new(1, -19, 0.5, -8) or UDim2.new(0, 3, 0.5, -8)
Circle.BackgroundColor3 = TextPrimary
Circle.BorderSizePixel = 0
Circle.Parent = ToggleBg
local CircleCorner = Instance.new("UICorner")
CircleCorner.CornerRadius = UDim.new(1, 0)
CircleCorner.Parent = Circle
local enabled = default
local Btn = Instance.new("TextButton")
Btn.Size = UDim2.new(1, 0, 1, 0)
Btn.BackgroundTransparency = 1
Btn.Text = ""
Btn.Parent = Frame
Btn.MouseButton1Click:Connect(function()
enabled = not enabled
TweenService:Create(ToggleBg, TweenInfo.new(0.2), {
BackgroundColor3 = enabled and Accent or Color3.fromRGB(60, 65, 75)
}):Play()
TweenService:Create(Circle, TweenInfo.new(0.2, Enum.EasingStyle.Back), {
Position = enabled and UDim2.new(1, -19, 0.5, -8) or UDim2.new(0, 3, 0.5, -8)
}):Play()
callback(enabled)
end)
return Frame
end
local function CreateSlider(parent, pos, size, label, min, max, default, callback)
min = math.min(min, max)
default = math.clamp(default, min, max)
local Frame = Instance.new("Frame")
Frame.Size = size
Frame.Position = pos
Frame.BackgroundColor3 = GlassCard
Frame.BackgroundTransparency = 0.4
Frame.BorderSizePixel = 0
Frame.Parent = parent
local Corner = Instance.new("UICorner")
Corner.CornerRadius = UDim.new(0, 12)
Corner.Parent = Frame
local Label = Instance.new("TextLabel")
Label.Size = UDim2.new(0.6, 0, 0, 18)
Label.Position = UDim2.new(0, 12, 0, 6)
Label.BackgroundTransparency = 1
Label.Text = label
Label.TextSize = 11
Label.Font = Enum.Font.GothamMedium
Label.TextColor3 = TextPrimary
Label.TextXAlignment = Enum.TextXAlignment.Left
Label.Parent = Frame
local Value = Instance.new("TextLabel")
Value.Size = UDim2.new(0.3, 0, 0, 18)
Value.Position = UDim2.new(0.7, -12, 0, 6)
Value.BackgroundTransparency = 1
Value.Text = tostring(default)
Value.TextSize = 11
Value.Font = Enum.Font.GothamBold
Value.TextColor3 = Accent
Value.TextXAlignment = Enum.TextXAlignment.Right
Value.Parent = Frame
local SliderBg = Instance.new("Frame")
SliderBg.Size = UDim2.new(1, -24, 0, 6)
SliderBg.Position = UDim2.new(0, 12, 0, 32)
SliderBg.BackgroundColor3 = Color3.fromRGB(50, 55, 65)
SliderBg.BorderSizePixel = 0
SliderBg.Parent = Frame
local BgCorner = Instance.new("UICorner")
BgCorner.CornerRadius = UDim.new(1, 0)
BgCorner.Parent = SliderBg
local Fill = Instance.new("Frame")
Fill.Size = UDim2.new((default - min) / (max - min), 0, 1, 0)
Fill.BackgroundColor3 = Accent
Fill.BorderSizePixel = 0
Fill.Parent = SliderBg
local FillCorner = Instance.new("UICorner")
FillCorner.CornerRadius = UDim.new(1, 0)
FillCorner.Parent = Fill
local currentValue = default
local dragging = false
local SliderBtn = Instance.new("TextButton")
SliderBtn.Size = UDim2.new(1, 0, 0, 20)
SliderBtn.Position = UDim2.new(0, 0, 0, 24)
SliderBtn.BackgroundTransparency = 1
SliderBtn.Text = ""
SliderBtn.Parent = Frame
local function UpdateSlider(inputPos)
local pct = math.clamp((inputPos - SliderBg.AbsolutePosition.X) / SliderBg.AbsoluteSize.X, 0, 1)
currentValue = math.floor(min + (max - min) * pct)
Fill.Size = UDim2.new(pct, 0, 1, 0)
Value.Text = tostring(currentValue)
callback(currentValue)
end
SliderBtn.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
UpdateSlider(input.Position.X)
end
end)
SliderBtn.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = false
end
end)
Connections["Slider_" .. label] = UserInputService.InputChanged:Connect(function(input)
if dragging and State.Running and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
UpdateSlider(input.Position.X)
end
end)
return Frame
end
CreateToggle(FarmingPanel, UDim2.new(0, 0, 0, 0), UDim2.new(0.32, -4, 0, 40), "Auto Tap", false, function(v)
Config.AutoTap = v
if v then StartAutoTap() else StopAutoTap() end
end)
CreateToggle(FarmingPanel, UDim2.new(0.34, 0, 0, 0), UDim2.new(0.32, -4, 0, 40), "Hit Trees", false, function(v)
Config.AutoMutations = v
if v then StartAutoMutations() else StopAutoMutations() end
end)
CreateToggle(FarmingPanel, UDim2.new(0.68, 0, 0, 0), UDim2.new(0.32, 0, 0, 40), "Collect Coins", false, function(v)
Config.AutoCollectCoins = v
if v then StartAutoCollect() else StopAutoCollect() end
end)
CreateToggle(FarmingPanel, UDim2.new(0, 0, 0, 46), UDim2.new(0.32, -4, 0, 40), "Fill Purifier", false, function(v)
Config.AutoFillPurifier = v
Config.AutoClaimPurifier = v
if v then
StartAutoFillPurifier()
StartAutoClaimPurifier()
else
StopAutoFillPurifier()
StopAutoClaimPurifier()
end
end)
CreateToggle(FarmingPanel, UDim2.new(0.34, 0, 0, 46), UDim2.new(0.32, -4, 0, 40), "Use Cans", false, function(v)
Config.AutoUseCans = v
if v then StartAutoUseCans() else StopAutoUseCans() end
end)
CreateToggle(FarmingPanel, UDim2.new(0.68, 0, 0, 46), UDim2.new(0.32, 0, 0, 40), "Pickup Cans", false, function(v)
Config.AutoPickupCans = v
if v then StartAutoPickupCans() else StopAutoPickupCans() end
end)
CreateToggle(FarmingPanel, UDim2.new(0, 0, 0, 92), UDim2.new(0.5, -4, 0, 50), "Steal Cans (GP)", false, function(v)
Config.AutoSteal = v
if v then StartAutoSteal() else StopAutoSteal() end
end)
CreateSlider(FarmingPanel, UDim2.new(0.5, 4, 0, 92), UDim2.new(0.5, -4, 0, 50), "Min Can Lvl", 1, 100, 3, function(v)
Config.WaterLevelThreshold = v
end)
CreateToggle(PlayerPanel, UDim2.new(0, 0, 0, 0), UDim2.new(0.5, -4, 0, 40), "Speed Hack", false, function(v)
Config.SpeedHack = v
if v then StartSpeedHack() else StopSpeedHack() end
end)
CreateToggle(PlayerPanel, UDim2.new(0.5, 4, 0, 0), UDim2.new(0.5, -4, 0, 40), "Auto Prestige", false, function(v)
Config.AutoPrestige = v
if v then StartAutoPrestige() else StopAutoPrestige() end
end)
local StatsRow = Instance.new("Frame")
StatsRow.Size = UDim2.new(1, 0, 0, 36)
StatsRow.Position = UDim2.new(0, 0, 0, 46)
StatsRow.BackgroundColor3 = GlassCard
StatsRow.BackgroundTransparency = 0.4
StatsRow.BorderSizePixel = 0
StatsRow.Parent = PlayerPanel
local StatsCorner = Instance.new("UICorner")
StatsCorner.CornerRadius = UDim.new(0, 8)
StatsCorner.Parent = StatsRow
local CoinsLabel = Instance.new("TextLabel")
CoinsLabel.Size = UDim2.new(0.25, 0, 1, 0)
CoinsLabel.Position = UDim2.new(0, 8, 0, 0)
CoinsLabel.BackgroundTransparency = 1
CoinsLabel.Text = "π° ..."
CoinsLabel.TextSize = 13
CoinsLabel.Font = Enum.Font.GothamBold
CoinsLabel.TextColor3 = TextPrimary
CoinsLabel.TextXAlignment = Enum.TextXAlignment.Left
CoinsLabel.Parent = StatsRow
local WaterStatLabel = Instance.new("TextLabel")
WaterStatLabel.Size = UDim2.new(0.2, 0, 1, 0)
WaterStatLabel.Position = UDim2.new(0.28, 0, 0, 0)
WaterStatLabel.BackgroundTransparency = 1
WaterStatLabel.Text = "π§ ..."
WaterStatLabel.TextSize = 13
WaterStatLabel.Font = Enum.Font.GothamBold
WaterStatLabel.TextColor3 = TextPrimary
WaterStatLabel.TextXAlignment = Enum.TextXAlignment.Left
WaterStatLabel.Parent = StatsRow
local PlotLabel = Instance.new("TextLabel")
PlotLabel.Size = UDim2.new(0.2, 0, 1, 0)
PlotLabel.Position = UDim2.new(0.52, 0, 0, 0)
PlotLabel.BackgroundTransparency = 1
PlotLabel.Text = "π ..."
PlotLabel.TextSize = 13
PlotLabel.Font = Enum.Font.GothamBold
PlotLabel.TextColor3 = TextPrimary
PlotLabel.TextXAlignment = Enum.TextXAlignment.Left
PlotLabel.Parent = StatsRow
local PrestigeLabel = Instance.new("TextLabel")
PrestigeLabel.Size = UDim2.new(0.2, 0, 1, 0)
PrestigeLabel.Position = UDim2.new(0.76, 0, 0, 0)
PrestigeLabel.BackgroundTransparency = 1
PrestigeLabel.Text = "π ..."
PrestigeLabel.TextSize = 13
PrestigeLabel.Font = Enum.Font.GothamBold
PrestigeLabel.TextColor3 = TextPrimary
PrestigeLabel.TextXAlignment = Enum.TextXAlignment.Left
PrestigeLabel.Parent = StatsRow
local PrestigeBtn = Instance.new("TextButton")
PrestigeBtn.Size = UDim2.new(1, 0, 0, 32)
PrestigeBtn.Position = UDim2.new(0, 0, 0, 88)
PrestigeBtn.BackgroundColor3 = Accent
PrestigeBtn.BackgroundTransparency = 0.2
PrestigeBtn.BorderSizePixel = 0
PrestigeBtn.Text = "β PRESTIGE NOW"
PrestigeBtn.TextSize = 14
PrestigeBtn.Font = Enum.Font.GothamBold
PrestigeBtn.TextColor3 = TextPrimary
PrestigeBtn.Parent = PlayerPanel
local PrestigeBtnCorner = Instance.new("UICorner")
PrestigeBtnCorner.CornerRadius = UDim.new(0, 8)
PrestigeBtnCorner.Parent = PrestigeBtn
PrestigeBtn.MouseButton1Click:Connect(DoPrestige)
Threads["StatsUpdate"] = task.spawn(function()
while State.Running and CoinsLabel and CoinsLabel.Parent do
pcall(function()
CoinsLabel.Text = "π° " .. GetCoinsValue()
local lvl = GetHighestWaterLevel()
local ready = lvl >= Config.WaterLevelThreshold and "β" or ""
WaterStatLabel.Text = "π§ " .. lvl .. ready
PrestigeLabel.Text = "π " .. tostring(GetPrestigesValue())
local plot = GetPlayerPlot()
PlotLabel.Text = plot and "π β" or "π β"
end)
task.wait(TIMING.STATS_UPDATE_INTERVAL)
end
end)
local dragging = false
local dragStart, startPos
TopBar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = MainContainer.Position
end
end)
TopBar.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = false
end
end)
Connections["Drag"] = UserInputService.InputChanged:Connect(function(input)
if dragging and State.Running and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local delta = input.Position - dragStart
MainContainer.Position = UDim2.new(
startPos.X.Scale, startPos.X.Offset + delta.X,
startPos.Y.Scale, startPos.Y.Offset + delta.Y
)
end
end)
if isMobile then
local MobileToggle = Instance.new("TextButton")
MobileToggle.Name = "MobileToggle"
MobileToggle.Size = UDim2.new(0, 44, 0, 44)
MobileToggle.Position = UDim2.new(1, -54, 0, 50)
MobileToggle.BackgroundColor3 = GlassBg
MobileToggle.BackgroundTransparency = 0.1
MobileToggle.BorderSizePixel = 0
MobileToggle.Text = "π΄"
MobileToggle.TextSize = 20
MobileToggle.Font = Enum.Font.GothamBold
MobileToggle.Parent = ScreenGui
local MobileCorner = Instance.new("UICorner")
MobileCorner.CornerRadius = UDim.new(1, 0)
MobileCorner.Parent = MobileToggle
local MobileStroke = Instance.new("UIStroke")
MobileStroke.Color = Accent
MobileStroke.Thickness = 2
MobileStroke.Parent = MobileToggle
local visible = true
local mobileDragging = false
local mobileDragStart, mobileStartPos
MobileToggle.MouseButton1Click:Connect(function()
if not mobileDragging then
visible = not visible
MainContainer.Visible = visible
end
end)
MobileToggle.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.Touch then
mobileDragging = false
mobileDragStart = input.Position
mobileStartPos = MobileToggle.Position
end
end)
MobileToggle.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.Touch then
local delta = input.Position - mobileDragStart
if delta.Magnitude > 10 then
mobileDragging = true
local screenSize = ScreenGui.AbsoluteSize
local btnSize = MobileToggle.AbsoluteSize
local newX = math.clamp(mobileStartPos.X.Offset + delta.X, 10, screenSize.X - btnSize.X - 10)
local newY = math.clamp(mobileStartPos.Y.Offset + delta.Y, 50, screenSize.Y - btnSize.Y - 10)
MobileToggle.Position = UDim2.new(0, newX, 0, newY)
end
end
end)
MobileToggle.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.Touch then
task.wait(0.1)
mobileDragging = false
end
end)
end
end
CreateGUI()
StartSpeedHack()
getgenv().ChopYourTree = {
Config = Config,
State = State,
TIMING = TIMING,
Unload = Unload,
TapTree = TapTree,
HitAllMutations = HitAllMutations,
CollectAllCoins = CollectAllCoins,
UseCans = UseCans,
PickupCans = PickupCans,
ClaimPurifier = ClaimPurifier,
FillPurifier = FillPurifier,
DoPrestige = DoPrestige,
StealCan = StealCan,
StealAllCans = StealAllCans,
GetPlayerPlot = GetPlayerPlot,
GetMutations = GetMutations,
GetWateringCans = GetWateringCans,
GetStealableCans = GetStealableCans,
GetMainTree = GetMainTree,
GetWateringCanLevels = GetWateringCanLevels,
GetHighestWaterLevel = GetHighestWaterLevel,
GetLowestLevelCanSlot = GetLowestLevelCanSlot,
IsPurifierEmpty = IsPurifierEmpty,
ShouldAutoWater = ShouldAutoWater,
HasWateringCans = HasWateringCans,
StartAutoTap = StartAutoTap,
StopAutoTap = StopAutoTap,
StartAutoMutations = StartAutoMutations,
StopAutoMutations = StopAutoMutations,
StartAutoCollect = StartAutoCollect,
StopAutoCollect = StopAutoCollect,
StartAutoPrestige = StartAutoPrestige,
StopAutoPrestige = StopAutoPrestige,
StartAutoUseCans = StartAutoUseCans,
StopAutoUseCans = StopAutoUseCans,
StartAutoPickupCans = StartAutoPickupCans,
StopAutoPickupCans = StopAutoPickupCans,
StartAutoSteal = StartAutoSteal,
StopAutoSteal = StopAutoSteal,
}
How to Execute Chop Your Tree Scripts on PC & Mobile
Running a script Chop Your Tree is straightforward, but it requires specific software known as an “executor” (or exploit). Here is how to get started on your device.
PC Execution Guide (Windows)
- Download an Executor: You will need a reliable tool. Solara is a popular free option, while Synapse Z offers premium stability.
- Disable Antivirus: Real-time protection often flags executors as false positives because they inject code into game processes. You may need to turn it off temporarily.
- Launch Roblox: Open Chop Your Tree via the Roblox player.
- Inject: Open your executor and click the “Attach” or “Inject” button.
- Run Script: Copy the Lua code from the section above, paste it into the executor’s text box, and click “Execute.”
Mobile Execution Guide (Android/iOS)
Mobile scripting is highly recommended for this game due to its simulator nature.
- Get a Mobile Executor: For Android, Delta Mobile or Codex are the industry leaders. For iOS, options are more limited but AppleWare is a known choice (requires sideloading).
- Install: Uninstall the official Roblox app and install the custom Roblox APK provided by the executor’s website.
- Play: Log in to your account and launch Chop Your Tree. A floating icon will appear.
- Execute: Tap the icon, paste the keyless Chop Your Tree script code, and hit the play button.
Chop Your Tree Beginner Guide
If you are new to the game, the mechanics can be simple but deep. Here is how to optimize your growth.
The Core Loop
- Water: Use your can to water the sapling. This makes it grow into a tree.
- Chop: Use your axe to chop the tree down.
- Collect: Gather the wood/coins that drop.
- Upgrade: Use coins to buy better axes (chop faster) and better cans (hold more water).
Advanced Mechanics
- Purifiers: These machines passively generate water or resources. Keep them upgraded.
- Prestige: Once you max out your current upgrades, you can “Prestige.” This resets your progress but gives you permanent multipliers and “Prestige Currency” to buy special totems.
- Automation: Eventually, you can unlock in-game auto-tappers, but using a free Chop Your Tree script gives you these benefits immediately without spending millions of coins.
Chop Your Tree Codes
Codes are usually a way for developers to give free rewards. However, the developers of Chop Your Tree have not released active codes recently.
Current Status:
- There are no active codes for Chop Your Tree at this moment.
- There are no expired codes listed, as the game relies on gameplay rewards rather than code redemption.
We recommend bookmarking this page; if the developers add a code system in a future update, we will list them here immediately. For now, using the Chop Your Tree script pastebin code is your best method for getting free resources.
FAQs About Chop Your Tree Scripts
1. Is this script safe to use?
Generally, yes. Chop Your Tree is a non-competitive simulator game. Developers typically focus anti-cheat efforts on competitive shooters. However, always use scripts at your own risk and consider testing on an alt account first.
2. Can I use this on iOS?
Yes, but you need an iOS-compatible executor. These are harder to install than Android ones. If you manage to get one running, the script provided above is compatible with mobile views.
3. What does “Keyless” mean?
A keyless Chop Your Tree script means you do not have to visit a third-party website (like Linkvertise) to generate a password before the script works. You simply paste the code, and it runs instantly.
4. Why isn’t the script working?
Roblox updates its engine every Wednesday. This often breaks executors. If the script doesn’t work, check if your executor (Solara, Delta, etc.) needs an update.
Conclusion
With the Mobile Xeno AutoChop script, you can turn Chop Your Tree into an effortless idle game. Whether you are using the Auto Hit to farm wood or the Speed Hack to zip around the lobby, this tool gives you complete control over your progression.
Remember to use these tools responsibly and have fun building the biggest tree farm in Roblox! Bookmark this page for future updates on the best scripts and guides. Happy chopping!