--// Load Fluent UI local Fluent = loadstring(game:HttpGet("https://github.com/dawid-scripts/Fluent/releases/latest/download/main.lua"))() local SaveManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/SaveManager.lua"))() local InterfaceManager = loadstring(game:HttpGet("https://raw.githubusercontent.com/dawid-scripts/Fluent/master/Addons/InterfaceManager.lua"))() --// Setup window local Window = Fluent:CreateWindow({ Title = "Hat Mover FE | by milkchocouser", SubTitle = "Soft float hats (FE)", TabWidth = 160, Size = UDim2.fromOffset(580, 460), Acrylic = true, Theme = "Dark", MinimizeKey = Enum.KeyCode.LeftControl }) local Tabs = { Enable = Window:AddTab({ Title = "FE Enable", Icon = "wand" }), Float = Window:AddTab({ Title = "Hats/Accessory", Icon = "layers" }), Block = Window:AddTab({ Title = "Blocker Hat", Icon = "alert-circle" }) } local LP = game:GetService("Players").LocalPlayer local RS = game:GetService("RunService") local Char = LP.Character or LP.CharacterAdded:Wait() local hats = {} local mode = "none" --// Float hats logic RS.Heartbeat:Connect(function() local root = Char:FindFirstChild("HumanoidRootPart") if not root then return end for i, hat in ipairs(hats) do local t = tick() + i local offset = Vector3.zero if mode == "Orbit" then offset = Vector3.new(math.cos(t) * 3, 2, math.sin(t) * 3) elseif mode == "Line" then offset = Vector3.new(0, 2, (i - 1) * 2) elseif mode == "LineCrazy" then offset = Vector3.new(math.sin(t * 3) * 2, math.cos(t * 2) * 2, i) elseif mode == "Tool" then local arm = Char:FindFirstChild("RightHand") or Char:FindFirstChild("Right Arm") if arm then offset = (arm.Position - root.Position) end elseif mode == "Car" then if i == 1 or i == 2 then offset = Vector3.new(math.cos(t * 3) * 2, -1.5, math.sin(t * 3) * 2) else offset = Vector3.new(0, -0.5, 0) end elseif mode == "Wizard" then offset = Vector3.new(math.sin(t * 1.5) * 2, math.cos(t * 1.2) * 2 + 2, math.sin(t) * 2) end local target = root.Position + offset pcall(function() hat.CanCollide = false hat.Velocity = Vector3.zero if hat:IsA("BasePart") then hat.CustomPhysicalProperties = PhysicalProperties.new(0, 0, 0) end if mode ~= "none" then hat.CFrame = hat.CFrame:Lerp(CFrame.new(target), 0.15) else hat.CFrame = hat.CFrame:Lerp(root.CFrame, 0.15) end end) end end) --// Enable hat float Tabs.Enable:AddButton({ Title = "Enable Move Hats", Description = "Detach & float all hats soft", Callback = function() hats = {} Char = LP.Character or LP.CharacterAdded:Wait() for _, acc in ipairs(Char:GetChildren()) do if acc:IsA("Accessory") and acc:FindFirstChild("Handle") then local h = acc.Handle h.Massless = true h.CanCollide = false h.CustomPhysicalProperties = PhysicalProperties.new(0, 0, 0) for _, w in ipairs(h:GetChildren()) do if w:IsA("Weld") or w:IsA("WeldConstraint") then w:Destroy() end end table.insert(hats, h) end end Fluent:Notify({ Title = "Floating Enabled", Content = "Hats now gently float ✨", Duration = 5 }) end }) --// Reset character Tabs.Enable:AddButton({ Title = "Reset", Description = "Instant reset character", Callback = function() local hum = Char:FindFirstChildOfClass("Humanoid") if hum then hum.Health = 0 end Char = LP.CharacterAdded:Wait() end }) --// Discord button Tabs.Enable:AddButton({ Title = "Join Discord", Description = "Copy Discord invite", Callback = function() setclipboard("https://discord.gg/w3qHHUxekM") Fluent:Notify({ Title = "Copied", Content = "Discord invite copied!", Duration = 4 }) end }) --// Float Modes (Toggles) Tabs.Float:AddToggle("Orbit", { Title = "Orbit Mode" }):OnChanged(function(v) if v then mode = "Orbit" end end) Tabs.Float:AddToggle("Line", { Title = "Line Mode" }):OnChanged(function(v) if v then mode = "Line" end end) Tabs.Float:AddToggle("LineCrazy", { Title = "Crazy Line Mode" }):OnChanged(function(v) if v then mode = "LineCrazy" end end) Tabs.Float:AddToggle("Tool", { Title = "Tool Follow Mode" }):OnChanged(function(v) if v then mode = "Tool" end end) Tabs.Float:AddToggle("Car", { Title = "Car Hat Mode" }):OnChanged(function(v) if v then mode = "Car" end end) Tabs.Float:AddToggle("Wizard", { Title = "Wizard Soft Float" }):OnChanged(function(v) if v then mode = "Wizard" end end) Tabs.Float:AddToggle("None", { Title = "Disable Float", Default = true }):OnChanged(function(v) if v then mode = "none" end end) --// Block hat meshes Tabs.Block:AddParagraph({ Title = "Info", Content = "Some games support FE hat blocking, some classic ones don’t." }) Tabs.Block:AddButton({ Title = "Block Hat", Description = "Remove hat mesh + texture (client)", Callback = function() for _, acc in ipairs(Char:GetChildren()) do if acc:IsA("Accessory") and acc:FindFirstChild("Handle") then for _, p in ipairs(acc.Handle:GetChildren()) do if p:IsA("SpecialMesh") or p:IsA("MeshPart") then p:Destroy() end end end end end }) Tabs.Block:AddInput("HatSize", { Title = "Size (CLIENT)", Placeholder = "e.g. 2,2,2", Callback = function(txt) local parts = string.split(txt, ",") if #parts == 3 then local size = Vector3.new(tonumber(parts[1]), tonumber(parts[2]), tonumber(parts[3])) for _, acc in ipairs(Char:GetChildren()) do if acc:IsA("Accessory") and acc:FindFirstChild("Handle") then acc.Handle.Size = size end end end end }) --// Final Fluent setup SaveManager:SetLibrary(Fluent) InterfaceManager:SetLibrary(Fluent) SaveManager:IgnoreThemeSettings() InterfaceManager:SetFolder("HatMoverFE") SaveManager:SetFolder("HatMoverFE") InterfaceManager:BuildInterfaceSection(Tabs.Enable) SaveManager:BuildConfigSection(Tabs.Enable) Window:SelectTab(1) SaveManager:LoadAutoloadConfig()