if getgenv().
bleach then warn("Bleachhack is already executed") return end
getgenv().bleach = true
-- Minimal polyfill for environments that expect it
local function LPH_NO_VIRTUALIZE(f) return f end
local RunService = game:GetService("RunService")
local Debris = game:GetService("Debris")
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local Stats = game:GetService("Stats")
local UserInputService = game:GetService("UserInputService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local HttpService = game:GetService("HttpService")
local StarterGui = game:GetService("StarterGui")
local player = [Link]
local mouse = player:GetMouse()
local camera = [Link]
local valuesFolder = ReplicatedStorage:FindFirstChild("Values")
local IS_PRACTICE = [Link] == 8206123457
local IS_SOLARA = getexecutorname():lower():find("solara") or false
-- Force bypass mode (most games read something like this)
local AC_BYPASS = true
-- Create values folder if missing (practice / fallback)
if not valuesFolder then
valuesFolder = [Link]("Folder")
[Link] = "Values"
[Link] = ReplicatedStorage
local status = [Link]("StringValue")
[Link] = "Status"
[Link] = "InPlay"
[Link] = valuesFolder
end
local values = valuesFolder
-- UI library (your existing one)
local Lib = loadstring(game:HttpGet("[Link]
bleachhack-ui-lib/main/[Link]"))()
local UI = Lib:Create()
local configSavingUI = game:GetObjects("rbxassetid://18187656247")[1]:Clone()
[Link] = (gethui and gethui()) or game:GetService("CoreGui")
[Link] = false
-- Categories
local Catching = UI:CreateCategory("Catching", "")
local Physics = UI:CreateCategory("Physics", "")
local Throwing = UI:CreateCategory("Throwing", "")
local Visuals = UI:CreateCategory("Visuals", "")
local Automatics = UI:CreateCategory("Automatics", "")
local PlayerCat = UI:CreateCategory("Player", "")
local Configs = UI:CreateCategory("Configs", "")
-- Helpers
local function getPing()
return [Link]:GetValue()
end
local function getServerPing()
return [Link]["Data Ping"]:GetValue()
end
local ping, fps = 0, 0
[Link](function()
while true do
[Link](0.1)
ping = (getPing() + getServerPing()) / 1000
end
end)
[Link]:Connect(function()
fps = fps + 1
[Link](1, function() fps = fps - 1 end)
end)
local function findClosestBall()
local lowest = [Link]
local nearest = nil
local root = [Link] and
[Link]:FindFirstChild("HumanoidRootPart")
if not root then return nil end
for _, obj in workspace:GetChildren() do
if [Link] == "Football" and obj:IsA("BasePart") then
local dist = ([Link] - [Link]).Magnitude
if dist < lowest then
lowest = dist
nearest = obj
end
end
end
return nearest
end
-- Fake balls table for Solara / visual spoof
local fakeBalls = {}
-- ======================
-- CATCHING FEATURES
-- ======================
local magnets = Catching:CreateModule("Magnets")
magnets:CreateSwitch({Title = "Type", Range = {"Blatant", "Legit", "League",
"Custom"}})
magnets:CreateSlider({Title = "Custom Radius", Range = {0, 70}})
magnets:CreateToggle({Title = "Show Hitbox"})
local pullVector = Catching:CreateModule("PullVector")
pullVector:CreateSlider({Title = "Distance", Range = {0, 100}})
pullVector:CreateSwitch({Title = "Type", Range = {"Glide", "Teleport"}})
pullVector:CreateSlider({Title = "Power", Range = {1, 5}})
-- Fake touch simulation for Solara
local oldFireTouch
if IS_SOLARA then
oldFireTouch = firetouchinterest
firetouchinterest = function(part1, part2, state)
if not AC_BYPASS then
-- your original fake ball logic here if needed
return
end
[Link] = [Link]
end
end
-- Ball velocity tracking
local ballVelocities = {}
[Link]:Connect(function(child)
if [Link] ~= "Football" or not child:IsA("BasePart") then return end
[Link]()
local lastPos = [Link]
local lastTime = [Link]()
if IS_SOLARA and child:FindFirstChildWhichIsA("Trail") and not [Link]
then
local fake = child:Clone()
[Link] = "FFootball"
[Link] = true
[Link] = false
[Link] = workspace
if fake:FindFirstChildWhichIsA("PointLight") then
fake:FindFirstChildWhichIsA("PointLight"):Destroy()
end
[Link] = 1
fakeBalls[child] = fake
[Link](function()
local spiral = 0
while [Link] do
local dt = [Link]:Wait()
spiral += 1500 * dt
local vel = [Link] + [Link](0, -28 * dt,
0)
[Link] += vel * dt
[Link] = [Link]([Link], [Link] + vel) *
[Link]([Link](90), [Link](spiral), 0)
end
fake:Destroy()
fakeBalls[child] = nil
end)
end
[Link](function()
while [Link] do
[Link](0.1)
local now = [Link]()
local dt = now - lastTime
if dt > 0 then
ballVelocities[child] = ([Link] - lastPos) / dt
end
lastPos = [Link]
lastTime = now
end
ballVelocities[child] = nil
end)
end)
-- ======================
-- PLAYER MOVEMENT
-- ======================
local speedModule = PlayerCat:CreateModule("Speed")
local speedVal = speedModule:CreateSlider({Title = "Speed", Range = {20,
23}})
local jumpModule = PlayerCat:CreateModule("JumpPower")
local jumpVal = jumpModule:CreateSlider({Title = "Power", Range = {50, 70}})
local angleModule = PlayerCat:CreateModule("AngleEnhancer")
local angleJP = angleModule:CreateSlider({Title = "JP", Range = {50, 70}})
angleModule:CreateToggle({Title = "Indicator"})
local lagModule = PlayerCat:CreateModule("ReplicationLag")
local lagVal = lagModule:CreateSlider({Title = "Lag", Range = {0, 100},
NonDecimal = false, Value = 0})
-- Silent velocity override (no BindToRenderStep)
[Link]:Connect(function()
local char = [Link]
if not char then return end
local hum = char:FindFirstChildOfClass("Humanoid")
local root = char:FindFirstChild("HumanoidRootPart")
if not hum or not root then return end
if hum:GetState() ~= [Link] then return end
if [Link] == 0 then return end
local moveDir = [Link]
local curVel = [Link]
local targetSpeed = 20
if [Link] then
targetSpeed = [Link](20, [Link])
end
[Link] = [Link](
moveDir.X * targetSpeed,
curVel.Y,
moveDir.Z * targetSpeed
)
end)
-- Jump power & angle enhancer
local function setupCharacter(char)
local hum = char:WaitForChild("Humanoid", 5)
if not hum then return end
[Link] = [Link] and [Link] or 50
[Link]:Connect(function(active)
if not active then return end
[Link](0.05)
if [Link] then
[Link] += [Link](0,
[Link] - 50, 0)
end
end)
end
if [Link] then
[Link](setupCharacter, [Link])
end
[Link]:Connect(setupCharacter)
-- ======================
-- CONFIG SYSTEM
-- ======================
local SaveModule = Configs:CreateModule("Save", true, function()
[Link] = true
local name = nil
local conn; conn =
[Link].MouseButton1Click:Connect(function()
name = [Link]
conn:Disconnect()
end)
repeat [Link]() until name
[Link] = false
local json = UI:Export()
if not isfolder("bleachhack") then makefolder("bleachhack") end
writefile("bleachhack/" .. name .. ".json", json)
end)
local LoadModule = Configs:CreateModule("Load", true, function()
[Link] = true
local name = nil
local conn; conn =
[Link].MouseButton1Click:Connect(function()
name = [Link]
conn:Disconnect()
end)
repeat [Link]() until name
[Link] = false
local path = "bleachhack/" .. name .. ".json"
if not isfile(path) then return end
local content = readfile(path)
UI:Import(content)
end)
print("[Bleach] Loaded – AC_BYPASS active")