3
No Key
Minecraft V2 Script – Creative Mode, Block Building & Physics
Description
Minecraft V2 is a universal Roblox script that recreates several features inspired by Minecraft Java Edition. It includes Minecraft-style movement, physics, a Steve character model, and the ability to place or remove blocks. The project is still a work in progress, so bugs and incomplete features may occur.
Key Features
- Creative Mode: Includes a Minecraft-inspired creative experience
- Minecraft Movement: Recreates Minecraft-style character movement
- Accurate Physics: Features physics inspired by Minecraft
- Steve Model: Uses a Minecraft-style Steve character model
- Block Placement: Place blocks in the world
- Block Removal: Remove blocks from the world
- World Editing: Supports placing and removing world blocks
- Combat System: Allows hitting players and attacking entities or NPCs
- Universal Script: Listed under the universal script category
- Direct Execute: Supports direct execution
Views
3+
Likes
0
Dislikes
0
Posted
15 hours ago
Updated
15 hours ago
Key System
No
Mobile
Supported
Script Preview
local function __RunMinecraftClient()
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local GuiService = game:GetService("GuiService")
local ContextActionService = game:GetService("ContextActionService")
local Lighting = game:GetService("Lighting")
local lp = Players.LocalPlayer
local camera = workspace.CurrentCamera
while not camera do
workspace:GetPropertyChangedSignal("CurrentCamera"):Wait()
camera = workspace.CurrentCamera
end
local playerGui = lp:WaitForChild("PlayerGui")
local oldCameraMode = lp.CameraMode
local oldCameraMinZoom = lp.CameraMinZoomDistance
local oldCameraMaxZoom = lp.CameraMaxZoomDistance
local F = {} -- namespaces helper functions to stay within Luau local-register limits
if shared.__MCSteveStop then pcall(shared.__MCSteveStop) end
local conns = {}
F.track = function(c) conns[#conns + 1] = c return c end
local BLOCK = 2.75
local PX = BLOCK / 16
local TICK = 1 / 20
-- Build/Features : Steve model/animations, catalog, inventory/crafting, manual block
-- placement/breaking, and the original player-mechanics movement/camera behavior (recreated).
-- No initial world blocks are generated. Creative HUD omits hearts, hunger, and the XP bar.
local WALK_BLOCKS_PER_SECOND = 4.317
local SPRINT_BLOCKS_PER_SECOND = 5.612
local SNEAK_BLOCKS_PER_SECOND = 1.295
local FLY_BLOCKS_PER_SECOND = 10.92
local FLY_SPRINT_BLOCKS_PER_SECOND = 21.6
local GROUND_SLIPPERINESS = 0.6
local BODY_MOVE_TURN_RESPONSE = 16.0
local BODY_TURN_RESPONSE = 8.5
local BODY_TURN_DEADZONE = math.rad(3)
local MAX_HEAD_YAW = math.rad(38)
local IMG = {
inventory = {w=176,h=166,d="2:-;171:000000;4:-;1:000000;171:ffffff;1:000000;2:-;1:000000;172:ffffff;1:c6c6c6;1:000000;1:-;1:000000;3:ffffff;169:c6c6c6;2:555555;2:000000;2:ffffff;170:c6c6c6;2:555555;2:000000;2:ffffff;170:c6c6c6;2:555555;2:000000;2:ffffff;170:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;17:373737;1:8b8b8b;50:373737;1:8b8b8b;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;17:373737;1:8b8b8b;17:373737;1:8b8b8b;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:8b8b8b;17:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;17:373737;1:8b8b8b;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;20:c6c6c6;17:373737;1:8b8b8b;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;20:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;11:c6c6c6;1:8b8b8b;8:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;11:c6c6c6;2:8b8b8b;7:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;11:c6c6c6;3:8b8b8b;6:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;11:c6c6c6;4:8b8b8b;5:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;11:c6c6c6;5:8b8b8b;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;2:c6c6c6;15:8b8b8b;3:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;17:373737;1:8b8b8b;17:373737;1:8b8b8b;2:c6c6c6;16:8b8b8b;2:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;15:8b8b8b;3:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;11:c6c6c6;5:8b8b8b;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;11:c6c6c6;4:8b8b8b;5:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;11:c6c6c6;3:8b8b8b;6:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;11:c6c6c6;2:8b8b8b;7:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;11:c6c6c6;1:8b8b8b;8:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:8b8b8b;17:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;20:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;17:373737;1:8b8b8b;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;20:c6c6c6;1:373737;16:8b8b8b;1:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;20:c6c6c6;1:8b8b8b;17:ffffff;2:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;21:c6c6c6;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;40:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:8b8b8b;17:ffffff;1:373737;49:000000;1:ffffff;97:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;17:373737;1:8b8b8b;1:373737;49:000000;1:ffffff;17:373737;1:8b8b8b;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;49:000000;1:ffffff;1:373737;16:8b8b8b;1:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:8b8b8b;17:ffffff;1:8b8b8b;50:ffffff;1:8b8b8b;17:ffffff;79:c6c6c6;2:555555;2:000000;2:ffffff;170:c6c6c6;2:555555;2:000000;2:ffffff;170:c6c6c6;2:555555;2:000000;2:ffffff;170:c6c6c6;2:555555;2:000000;2:ffffff;170:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;170:c6c6c6;2:555555;2:000000;2:ffffff;170:c6c6c6;2:555555;2:000000;2:ffffff;170:c6c6c6;2:555555;2:000000;2:ffffff;170:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;17:373737;1:8b8b8b;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;1:373737;16:8b8b8b;1:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;4:c6c6c6;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;1:8b8b8b;17:ffffff;4:c6c6c6;2:555555;2:000000;2:ffffff;170:c6c6c6;2:555555;2:000000;2:ffffff;170:c6c6c6;2:555555;2:000000;2:ffffff;170:c6c6c6;2:555555;2:000000;2:ffffff;169:c6c6c6;3:555555;1:000000;1:-;1:000000;1:c6c6c6;172:555555;1:000000;2:-;1:000000;171:555555;1:000000;4:-;171:000000;2:-"},
hotbar = {w=182,h=22,d="183:000000;2:cecece;2:ababab;2:939393;1:ababab;172:939393;1:6d6d6d;2:000000;1:ababab;3:5d5d5d;1:676767;2:5d5d5d;1:626262;1:5a5a5a;1:5d5d5d;1:5a5a5a;1:5d5d5d;1:5a5a5a;1:5d5d5d;1:676767;1:626262;1:5a5a5a;1:5d5d5d;1:707070;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:5a5a5a;3:5d5d5d;1:666666;2:5d5d5d;1:5a5a5a;1:5d5d5d;1:606060;3:5d5d5d;1:6b6b6b;2:5d5d5d;1:777777;1:626262;1:7e7e7e;2:5d5d5d;1:626262;1:5d5d5d;1:666666;2:626262;1:5d5d5d;1:626262;1:676767;1:606060;1:5d5d5d;1:626262;4:5d5d5d;1:707070;1:5d5d5d;1:7e7e7e;3:5d5d5d;1:5a5a5a;4:5d5d5d;1:606060;3:5d5d5d;1:565656;1:5d5d5d;1:626262;2:5d5d5d;1:707070;1:5d5d5d;1:808080;1:5a5a5a;1:5d5d5d;1:5a5a5a;3:5d5d5d;1:6b6b6b;1:5a5a5a;3:5d5d5d;1:5a5a5a;3:5d5d5d;1:626262;1:5d5d5d;1:707070;1:5d5d5d;1:7e7e7e;3:5d5d5d;1:606060;2:5d5d5d;1:707070;4:5d5d5d;1:5a5a5a;5:5d5d5d;1:676767;1:666666;1:7c7c7c;1:5a5a5a;5:5d5d5d;1:5a5a5a;1:5d5d5d;1:626262;8:5d5d5d;1:707070;1:5d5d5d;1:7e7e7e;5:5d5d5d;1:5a5a5a;5:5d5d5d;1:666666;1:5d5d5d;1:626262;1:5d5d5d;1:5a5a5a;1:606060;1:666666;1:5d5d5d;1:7a7a7a;1:666666;5:5d5d5d;1:606060;2:676767;3:5d5d5d;1:626262;4:5d5d5d;1:707070;1:474747;2:000000;1:ababab;1:666666;8:040404;1:0b0b04;1:040404;1:080904;5:040404;1:737373;1:606060;1:7e7e7e;1:5a5a5a;1:040404;1:0d0e04;11:040404;1:080904;1:040404;1:060604;1:808080;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:060604;2:040404;1:080904;3:040404;1:060604;2:040404;1:080904;1:060604;2:040404;1:060604;1:7e7e7e;1:676767;1:7e7e7e;1:5d5d5d;7:040404;1:060604;8:040404;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:626262;7:040404;1:0f1004;1:060604;6:040404;1:060604;1:7e7e7e;1:6b6b6b;1:7e7e7e;1:5d5d5d;1:040404;1:060604;2:040404;1:060604;1:0f1004;5:040404;1:080904;4:040404;1:7e7e7e;1:5a5a5a;1:7e7e7e;1:5d5d5d;1:040404;1:060604;2:040404;1:0b0b04;7:040404;1:060604;3:040404;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;3:040404;1:060604;3:040404;1:080904;7:040404;1:080904;1:7e7e7e;1:5d5d5d;1:808080;1:626262;4:040404;1:060604;4:040404;1:0b0b04;1:080904;1:060604;4:040404;1:7e7e7e;1:474747;2:000000;1:939393;1:606060;1:040404;1:1b1d04;2:272505;1:191a04;1:272505;1:272406;1:2e2a0b;1:272406;1:272505;1:272406;1:161804;4:272505;1:7e7e7e;1:565656;1:7e7e7e;1:626262;1:040404;1:2e2a0b;7:272505;1:252404;1:2c2808;1:2a2607;1:1b1d04;1:272505;1:202205;1:2a2607;1:848484;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;5:272505;1:2a2507;1:272505;1:272406;3:272505;1:252404;1:1b1d04;1:222205;1:202205;1:808080;1:5d5d5d;1:7c7c7c;1:5d5d5d;1:040404;1:272505;1:252404;1:272505;1:2e2b0a;1:272505;1:1b1d04;1:222205;3:272505;1:191a04;3:272505;1:272406;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5a5a5a;1:040404;1:272505;1:252404;1:272505;1:222205;1:252404;1:1b1d04;1:272505;1:222205;1:252404;1:272505;1:191a04;1:272505;1:302d0e;1:222205;1:252404;1:7e7e7e;1:5d5d5d;1:7a7a7a;1:626262;1:040404;1:272505;1:1d2004;2:272505;1:2a2607;4:272505;1:191a04;1:202205;1:272505;1:2e2b0a;1:1b1d04;1:272505;1:737373;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:1d2004;6:272505;1:272406;1:2c2808;1:202205;1:272505;1:202205;1:272406;1:2a2607;1:272505;1:7e7e7e;1:606060;1:7e7e7e;1:5d5d5d;1:060604;2:272505;2:252404;1:272505;1:252404;5:272505;2:252404;1:2e2b0a;1:272505;1:777777;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:222205;1:272505;1:252404;1:222205;2:272505;1:2a2607;1:272505;1:272406;1:2a2607;1:272505;1:302d0e;1:272505;1:302c0e;1:272505;1:7e7e7e;1:474747;2:000000;1:ababab;1:5d5d5d;1:040404;4:272505;1:252404;3:272505;2:252404;1:2a2607;3:272505;1:272406;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:272505;1:252404;2:272505;1:252404;4:272505;1:302c0e;1:2a2507;1:272406;1:272505;1:2e2b0a;1:1b1d04;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:060604;1:191a04;3:272505;1:202205;6:272505;1:252404;1:222205;2:272505;1:777777;1:626262;1:7e7e7e;1:5a5a5a;1:040404;3:272505;1:2c2808;3:272505;1:202205;1:272505;1:2e2b0a;5:272505;1:858585;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:0d0e04;1:272505;1:1b1d04;1:252404;1:302c0e;2:272505;1:272406;2:272505;1:2e2b0a;3:272505;1:161804;1:272505;1:808080;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;2:272505;1:2c2808;1:332e10;1:222205;5:272505;1:252404;2:272505;1:1b1d04;1:191a04;1:7a7a7a;1:606060;1:848484;1:606060;1:040404;1:272505;1:2c2808;1:2a2607;3:272505;1:2a2507;2:272505;1:1d2004;1:272505;1:2e2b0a;3:272505;1:7e7e7e;1:606060;1:7e7e7e;1:5d5d5d;1:040404;3:272505;1:252404;1:272505;1:1b1d04;1:332e10;1:272505;1:272406;1:1b1d04;1:222205;4:272505;1:7e7e7e;1:5a5a5a;1:7e7e7e;1:606060;1:040404;1:272505;1:252404;1:222205;1:272505;1:272406;1:2c2808;1:1b1d04;1:2c2808;1:2a2607;2:272505;1:202205;1:2c2808;1:2a2607;1:272505;1:7e7e7e;1:474747;2:000000;1:939393;1:676767;1:040404;1:272505;1:2c2808;1:272505;1:191a04;1:272505;2:252404;1:272505;1:2a2607;1:2c2808;3:272505;1:2c2808;1:272505;1:7e7e7e;1:5a5a5a;1:7e7e7e;1:5d5d5d;1:080904;2:272505;1:2a2607;5:272505;1:272406;6:272505;1:7e7e7e;1:5a5a5a;1:7e7e7e;1:5d5d5d;1:040404;1:272505;1:272406;1:272505;1:2a2607;2:272505;1:2a2507;1:272505;1:2a2607;1:272505;1:1b1d04;1:272505;1:1b1d04;1:2e2a0b;1:272406;1:808080;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:060604;2:272505;1:272406;2:272505;2:252404;2:272505;1:2e2b0a;4:272505;1:222205;1:7e7e7e;1:5d5d5d;1:858585;1:626262;1:040404;1:252404;1:272406;1:2e2b0a;1:272505;1:272406;1:272505;1:1d2004;3:272505;1:1b1d04;2:272505;1:2c2808;1:272505;1:737373;1:666666;1:7e7e7e;1:5d5d5d;1:040404;1:1b1d04;7:272505;1:2a2607;2:272505;1:302c0e;3:272505;1:7a7a7a;1:626262;1:858585;1:5d5d5d;1:040404;1:272505;1:222205;2:272505;1:2a2607;2:272505;1:1d2004;1:272505;1:191a04;1:272406;1:2a2507;1:272406;1:202205;1:272505;1:7c7c7c;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:1b1d04;3:272505;1:2e2a0b;1:2a2507;5:272505;1:1b1d04;2:2e2b0a;1:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:272505;1:1d2004;1:272505;1:272406;1:2a2607;1:272505;1:2e2b0a;2:202205;1:272505;1:1b1d04;1:272505;1:202205;1:272406;1:2a2507;1:7e7e7e;1:474747;2:000000;1:939393;1:5d5d5d;1:040404;1:2c2808;1:2e2b0a;1:272505;1:1b1d04;4:272505;1:202205;1:2e2a0b;3:272505;1:2e2b0a;1:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:606060;1:040404;1:272505;1:272406;1:1b1d04;1:222205;1:272505;1:2a2507;2:272505;1:2a2607;1:272505;1:272406;3:272505;1:252404;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:626262;1:040404;1:272505;1:2a2507;5:272505;1:1d2004;1:272505;1:2e2b0a;1:1b1d04;2:272505;1:202205;1:2c2808;1:808080;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;2:252404;1:272505;1:161804;1:272505;1:2e2b0a;1:272406;1:272505;1:202205;3:272505;1:1b1d04;1:1d2004;1:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:606060;1:060604;2:272505;1:202205;1:272505;1:202205;1:222205;5:272505;1:1b1d04;1:252404;2:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:1b1d04;1:161804;1:252404;1:272406;1:272505;1:1b1d04;1:332e11;1:272406;2:272505;1:202205;2:2a2507;1:202205;1:272505;1:848484;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:060604;1:252404;1:272505;1:2a2607;1:252404;2:272505;1:272406;1:272505;1:2a2507;3:272505;1:332f11;1:272406;1:272505;1:848484;1:5d5d5d;1:737373;1:6d6d6d;1:060604;1:272505;1:302d0e;1:1d2004;2:272505;2:2e2b0a;1:222205;1:252404;6:272505;1:7e7e7e;1:626262;1:7e7e7e;1:5d5d5d;1:040404;1:302c0e;1:272505;1:161804;1:272406;5:272505;1:2c2808;2:272505;1:202205;2:272505;1:808080;1:474747;2:000000;1:939393;1:5d5d5d;1:040404;1:272505;1:2a2607;1:272505;1:2e2a0b;10:272505;1:1d2004;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;3:272505;1:202205;5:272505;1:2a2607;1:2e2b0a;2:272505;1:2e2b0a;1:272505;1:808080;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:2a2507;3:272505;1:252404;1:272406;2:272505;1:2e2b0a;3:272505;1:2e2a0b;2:272505;1:7e7e7e;1:666666;1:7e7e7e;1:5d5d5d;1:060604;2:272505;1:2e2b0a;2:272505;1:1b1d04;5:272505;1:161804;1:2c2808;1:222205;1:2a2607;1:777777;1:5d5d5d;1:7e7e7e;1:626262;1:040404;1:272505;1:202205;1:1b1d04;1:272505;1:2e2b0a;1:2c2808;3:272505;1:272406;1:1b1d04;3:272505;1:2e2a0b;1:848484;1:666666;1:7e7e7e;1:5d5d5d;1:040404;2:272505;1:2e2b0a;1:272505;1:252404;2:272505;1:191a04;5:272505;1:272406;1:191a04;1:7a7a7a;1:5d5d5d;1:8b8b8b;1:5d5d5d;1:060604;2:272505;1:252404;1:202205;1:272505;1:1b1d04;2:272505;1:252404;1:272505;1:272406;1:272505;1:2e2b0a;1:272505;1:2a2607;1:7e7e7e;1:626262;1:7e7e7e;1:5d5d5d;1:040404;4:272505;1:272406;1:272505;1:161804;1:272505;1:1b1d04;3:272505;1:252404;2:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:272505;2:191a04;3:272505;1:2e2a0b;8:272505;1:7e7e7e;1:474747;2:000000;1:939393;1:5d5d5d;1:040404;2:272505;1:272406;2:272505;1:1d2004;1:272505;1:1b1d04;3:272505;1:2a2507;1:272505;1:161804;1:272505;1:7e7e7e;1:606060;1:7a7a7a;1:5d5d5d;1:060604;1:272505;1:272406;2:272505;1:302c0e;1:1b1d04;1:191a04;2:272505;1:222205;1:272505;1:1d2004;1:272505;1:1b1d04;1:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;3:272505;1:272406;1:202205;1:2e2b0a;1:272505;1:252404;1:272505;1:272406;1:272505;1:302c0e;3:272505;1:7e7e7e;1:5a5a5a;1:7e7e7e;1:5d5d5d;1:040404;1:2c2808;1:272505;1:2a2507;1:202205;1:2a2607;1:272406;1:2a2607;1:2c2808;1:2a2607;1:222205;1:1b1d04;1:222205;1:272505;1:202205;1:332e10;1:7e7e7e;1:4d4d4d;1:7e7e7e;1:5a5a5a;1:060604;5:272505;1:2a2507;3:272505;1:272406;3:272505;1:202205;1:272505;1:7a7a7a;1:606060;1:858585;1:5d5d5d;1:040404;6:272505;2:202205;2:272505;1:222205;1:1b1d04;1:272505;1:2a2507;1:272505;1:7e7e7e;1:666666;1:707070;1:5d5d5d;1:040404;3:272505;1:252404;2:272406;1:2c2808;2:272505;1:222205;1:2a2507;1:2c2808;2:272505;1:2e2b0a;1:7e7e7e;1:5d5d5d;1:737373;1:626262;1:040404;1:1b1d04;1:272505;1:202205;1:272505;1:302d0e;1:252404;1:272505;1:2e2b0a;1:252404;1:1b1d04;1:222205;1:272505;1:1b1d04;1:2e2a0b;1:272505;1:7a7a7a;1:5d5d5d;1:808080;1:5d5d5d;1:080904;1:2c2808;2:272505;1:2e2b0a;1:191a04;1:272505;1:1b1d04;1:252404;4:272505;1:2c2808;2:272505;1:777777;1:474747;2:000000;1:939393;1:606060;1:040404;1:272505;1:2a2607;1:1b1d04;2:272505;1:272406;1:202205;1:272505;1:2e2a0b;1:222205;2:272505;1:252404;1:2e2a0b;1:272505;1:7e7e7e;1:626262;1:7e7e7e;1:5d5d5d;1:080904;1:202205;1:272505;1:1b1d04;1:252404;4:272505;1:1b1d04;1:272505;1:2c2808;2:272505;1:252404;1:332e10;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:080904;1:202205;1:272505;1:222205;1:252404;1:272505;1:1d2004;3:272505;1:272406;5:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:202205;1:252404;1:222205;1:202205;1:1b1d04;6:272505;1:2a2507;2:272505;1:272406;1:7e7e7e;1:5d5d5d;1:808080;1:606060;1:040404;1:1d2004;1:272406;3:272505;1:2a2607;4:272505;1:332e10;1:272505;1:272406;1:2e2b0a;1:272505;1:7c7c7c;1:5d5d5d;1:808080;1:5a5a5a;1:0b0b04;1:272505;1:202205;1:2e2a0b;3:272505;1:2e2b0a;1:272406;2:272505;1:1d2004;2:272505;1:161804;1:332f11;1:7e7e7e;1:666666;1:7e7e7e;1:5d5d5d;1:040404;3:272505;1:1b1d04;1:272505;1:272406;9:272505;1:7a7a7a;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;2:272505;1:1d2004;1:202205;1:272505;1:272406;5:272505;1:272406;1:252404;1:2e2b0a;1:272505;1:7e7e7e;1:5a5a5a;1:7e7e7e;1:5d5d5d;1:060604;1:272505;1:272406;1:2a2507;1:252404;1:2a2607;1:1b1d04;1:272505;1:202205;1:272505;1:2a2507;1:2c2808;4:272505;1:7e7e7e;1:474747;2:000000;1:939393;1:5d5d5d;1:040404;1:1d2004;1:272406;1:272505;1:2a2507;1:2c2808;2:252404;3:272505;1:1b1d04;2:272505;1:252404;1:272505;1:8b8b8b;1:5d5d5d;1:737373;1:5d5d5d;1:040404;4:272505;1:252404;1:272505;1:1d2004;1:252404;1:272505;1:272406;1:2e2b0a;1:272505;1:191a04;1:272505;1:252404;1:7e7e7e;1:5d5d5d;1:898989;1:5d5d5d;1:040404;1:1b1d04;1:272406;1:252404;3:272505;1:2a2607;1:302d0e;2:272505;1:252404;3:272505;1:222205;1:7c7c7c;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:252404;1:2a2607;1:332e11;1:272505;1:1b1d04;1:2a2607;5:272505;1:272406;1:1b1d04;2:272505;1:7a7a7a;1:676767;1:7c7c7c;1:4d4d4d;1:060604;2:272505;1:252404;1:1b1d04;1:272505;1:252404;3:272505;1:2c2808;1:252404;1:202205;1:272505;1:202205;1:2a2507;1:848484;1:666666;1:7e7e7e;1:5d5d5d;1:040404;1:1b1d04;6:272505;1:2c2808;2:272505;1:2a2507;1:272406;1:222205;1:272505;1:2c2808;1:7e7e7e;1:5d5d5d;1:7c7c7c;1:5d5d5d;1:060604;1:272406;1:272505;1:332f11;1:332e10;1:1b1d04;1:272505;1:222205;1:2c2808;6:272505;1:222205;1:7e7e7e;1:5d5d5d;1:7a7a7a;1:5d5d5d;1:040404;1:272505;1:272406;1:252404;1:272406;1:272505;1:1d2004;1:1b1d04;1:272505;1:2a2607;1:161804;4:272505;1:2a2507;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:565656;1:040404;4:272505;1:1d2004;5:272505;1:252404;1:272406;1:272505;1:191a04;1:272505;1:7e7e7e;1:474747;2:000000;1:939393;1:5d5d5d;1:040404;1:2a2507;3:272505;1:1b1d04;1:272505;1:2e2b0a;1:252404;3:272505;1:2c2808;1:272406;1:272505;1:2e2b0a;1:737373;1:5d5d5d;1:7a7a7a;1:5d5d5d;1:0f1004;2:272505;1:202205;2:272505;1:2e2a0b;1:272505;1:2a2507;1:272406;1:1b1d04;1:252404;1:2e2b0a;3:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:6b6b6b;1:040404;1:1b1d04;2:272505;1:252404;1:222205;2:1b1d04;1:202205;3:272505;1:1b1d04;1:272505;1:252404;1:272505;1:7e7e7e;1:5d5d5d;1:808080;1:5d5d5d;1:080904;1:1d2004;2:272505;1:1b1d04;2:272505;1:272406;1:2a2507;3:272505;1:2e2a0b;1:272505;1:252404;1:202205;1:848484;1:5d5d5d;1:858585;1:626262;1:040404;1:272505;1:272406;1:272505;1:252404;2:272505;1:2e2a0b;2:272505;1:222205;1:2a2507;1:252404;2:222205;1:272505;1:7e7e7e;1:5d5d5d;1:848484;1:5d5d5d;1:040404;1:2e2b0a;1:2a2607;1:141504;1:272406;1:191a04;4:272505;1:1b1d04;1:2e2b0a;1:1d2004;1:202205;1:2a2607;1:2e2b0a;1:808080;1:6b6b6b;1:858585;1:5d5d5d;1:040404;1:202205;1:1b1d04;3:272505;1:2c2808;1:252404;3:272505;1:252404;1:222205;2:272505;1:202205;1:7e7e7e;1:5d5d5d;1:737373;1:5d5d5d;1:060604;1:2a2507;1:1b1d04;2:272505;1:252404;1:272505;1:302c0e;1:272505;1:222205;1:272505;1:161804;1:272505;1:202205;2:272505;1:7a7a7a;1:5d5d5d;1:7e7e7e;1:5a5a5a;1:040404;1:1b1d04;3:272505;1:202205;1:272505;1:252404;1:191a04;7:272505;1:7e7e7e;1:474747;2:000000;1:939393;1:666666;1:060604;2:272505;1:1b1d04;1:2a2507;4:272505;1:2a2607;3:272505;1:191a04;1:272505;1:272406;1:7e7e7e;1:5a5a5a;1:7e7e7e;1:5d5d5d;1:040404;5:272505;1:2a2607;1:272505;1:202205;1:272505;2:272406;1:2c2808;1:1d2004;1:202205;1:222205;1:7a7a7a;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;2:272505;1:191a04;1:2a2607;1:202205;1:272505;1:222205;1:2e2b0a;1:272505;1:252404;3:272505;1:1b1d04;1:272505;1:7a7a7a;1:5a5a5a;1:7c7c7c;1:5a5a5a;1:060604;4:272505;1:252404;1:272505;1:2e2b0a;8:272505;1:7e7e7e;1:5a5a5a;1:7e7e7e;1:5d5d5d;1:040404;1:272505;1:202205;1:252404;1:2a2507;1:272505;1:1d2004;1:272505;1:2c2808;1:202205;1:272505;1:202205;1:2a2507;1:2e2a0b;1:272505;1:2a2507;1:7e7e7e;1:606060;1:7e7e7e;1:606060;1:080904;1:272505;1:2e2b0a;1:222205;9:272505;1:1b1d04;2:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:1b1d04;3:272505;1:2c2808;6:272505;1:202205;3:272505;1:7e7e7e;1:666666;1:7e7e7e;1:5d5d5d;1:040404;1:272505;1:272406;1:2c2808;4:272505;1:2a2607;3:272505;1:2a2607;3:272505;1:7e7e7e;1:5a5a5a;1:7e7e7e;1:606060;1:060604;1:272505;1:2a2607;3:272505;1:222205;1:2e2a0b;1:272406;1:272505;1:272406;1:272505;1:2e2b0a;1:272505;1:202205;1:272505;1:7e7e7e;1:474747;2:000000;1:939393;1:676767;1:060604;3:272505;1:2a2607;1:2a2507;2:272505;1:272406;1:272505;1:1b1d04;1:272505;1:272406;1:2c2808;1:191a04;1:272505;1:7e7e7e;1:5d5d5d;1:737373;1:5d5d5d;1:060604;1:272505;1:2a2507;4:272505;1:121304;1:252404;1:272505;1:2a2607;1:272505;1:272406;1:2a2507;1:161804;1:272505;1:707070;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:252404;1:272505;1:222205;1:272505;1:2a2607;1:1b1d04;6:272505;1:252404;2:272505;1:7e7e7e;1:5a5a5a;1:7e7e7e;1:626262;1:040404;1:272505;1:2a2507;1:2a2607;1:2a2507;2:272505;1:2a2607;1:1d2004;3:272505;1:202205;2:272505;1:272406;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5a5a5a;1:040404;3:272505;1:191a04;1:222205;1:1b1d04;1:252404;2:272505;1:272406;5:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:545454;1:040404;1:272505;1:252404;1:272505;2:272406;1:272505;1:272406;4:272505;1:2a2607;1:302d0e;2:252404;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:060604;7:272505;1:1b1d04;1:272505;1:2a2507;1:272505;1:272406;1:202205;2:272505;1:7e7e7e;1:626262;1:7e7e7e;1:5d5d5d;1:040404;1:272505;1:2e2a0b;1:252404;3:272505;1:2c2808;1:2a2507;5:272505;1:2a2507;1:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:606060;1:060604;1:272505;1:2a2607;1:2e2b0a;1:2a2507;7:272505;1:272406;1:272505;1:1b1d04;1:2c2808;1:7e7e7e;1:474747;2:000000;1:939393;1:5d5d5d;1:040404;1:2e2b0a;1:272505;1:1d2004;1:272505;1:1b1d04;1:272505;1:252404;2:272505;1:202205;1:2a2607;1:252404;1:1b1d04;1:202205;1:272505;1:7a7a7a;1:5a5a5a;1:737373;1:5d5d5d;1:040404;2:272505;1:272406;1:2a2607;1:272505;1:1b1d04;9:272505;1:7e7e7e;1:5d5d5d;1:848484;1:5d5d5d;1:040404;5:272505;1:272406;1:191a04;2:272505;1:202205;4:272505;1:2a2607;1:7e7e7e;1:5a5a5a;1:7e7e7e;1:5d5d5d;1:040404;2:272505;1:2c2808;1:191a04;1:2e2a0b;1:272505;1:272406;2:272505;1:2a2507;1:272505;1:302d0e;1:1d2004;2:272505;1:7e7e7e;1:5d5d5d;1:7c7c7c;1:5d5d5d;1:040404;1:2c2808;2:272505;1:2a2607;4:272505;1:202205;4:272505;1:252404;1:272406;1:7a7a7a;1:5d5d5d;1:858585;1:5d5d5d;1:040404;1:252404;3:272505;1:1b1d04;3:272505;1:202205;1:302d0e;3:272505;1:2e2a0b;1:272505;1:808080;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;2:272505;1:2e2b0a;1:1b1d04;3:272505;1:1b1d04;7:272505;1:858585;1:5d5d5d;1:7c7c7c;1:5d5d5d;1:040404;1:2a2507;1:252404;1:272505;1:252404;1:191a04;1:272505;1:272406;1:222205;1:272505;1:272406;3:272505;1:2a2507;1:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:272505;1:202205;1:272505;1:1b1d04;1:272406;2:272505;1:252404;3:272505;1:2a2507;1:272505;2:252404;1:7e7e7e;1:474747;2:000000;1:939393;1:5d5d5d;1:040404;1:272505;1:2e2b0a;1:272505;1:2a2607;1:272505;1:252404;2:272505;1:2a2607;6:272505;1:7e7e7e;1:676767;1:858585;1:626262;1:040404;1:272406;2:272505;1:2a2607;2:272505;1:1b1d04;1:2e2a0b;1:272505;1:191a04;1:272505;1:252404;2:272505;1:252404;1:7e7e7e;1:5d5d5d;1:898989;1:707070;1:040404;2:272505;1:1b1d04;1:2e2a0b;1:272505;1:272406;1:222205;2:272505;1:202205;1:1d2004;1:252404;1:1b1d04;1:272406;1:272505;1:848484;1:666666;1:7e7e7e;1:5d5d5d;1:040404;1:272505;1:202205;1:272406;1:272505;1:2e2b0a;1:2a2507;2:272505;1:272406;2:252404;1:272406;3:272505;1:7e7e7e;1:5d5d5d;1:777777;1:5d5d5d;1:040404;4:272505;1:252404;1:2a2607;1:272505;1:2c2808;2:272505;1:1b1d04;2:272505;1:2e2b0a;1:222205;1:7e7e7e;1:5d5d5d;1:808080;1:5d5d5d;1:040404;1:252404;1:272505;1:272406;1:2a2607;1:272505;1:252404;1:272406;1:1b1d04;1:302c0e;1:2a2607;4:272505;1:272406;1:777777;1:5d5d5d;1:858585;1:5d5d5d;1:040404;1:191a04;1:252404;1:332f11;5:272505;1:252404;1:202205;1:272505;1:202205;1:2e2a0b;2:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;3:272505;1:202205;1:252404;1:2a2607;3:272505;1:272406;1:2a2507;4:272505;1:7e7e7e;1:626262;1:808080;1:5d5d5d;1:040404;7:272505;1:2c2808;4:272505;1:2c2808;1:1b1d04;1:272505;1:7e7e7e;1:474747;2:000000;1:939393;1:5d5d5d;1:040404;9:272505;1:302c0e;4:272505;1:272406;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:202205;2:272505;1:202205;1:1b1d04;1:272505;1:272406;1:272505;1:2a2507;3:272505;1:252404;2:272505;1:808080;1:5d5d5d;1:858585;1:676767;1:040404;1:252404;2:272505;1:2e2b0a;3:272505;1:1b1d04;3:272505;1:2e2b0a;1:2a2607;1:1d2004;1:222205;1:808080;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:272505;1:252404;2:272505;2:252404;1:272505;1:332e10;2:272505;1:272406;1:1d2004;3:272505;1:7c7c7c;1:606060;1:707070;1:5a5a5a;1:0d0e04;1:332e11;3:272505;1:272406;1:272505;1:252404;1:1d2004;2:202205;1:1b1d04;1:272505;1:202205;1:2a2607;1:252404;1:808080;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;2:272505;1:222205;3:272505;1:202205;4:272505;1:222205;2:272505;1:2a2507;1:7e7e7e;1:5d5d5d;1:7c7c7c;1:5d5d5d;1:040404;1:272505;1:1d2004;1:2c2808;3:272505;1:2c2808;1:272505;1:272406;1:2a2507;5:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:1b1d04;3:272505;2:222205;2:272505;1:272406;1:272505;1:252404;1:302c0e;2:272505;1:2c2808;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;2:272505;1:252404;1:191a04;1:272406;1:222205;1:272505;1:1b1d04;1:2c2808;1:272406;2:272505;1:1d2004;1:2e2b0a;1:272505;1:7e7e7e;1:474747;2:000000;1:939393;1:5d5d5d;1:040404;2:272505;1:191a04;1:252404;1:272505;1:1b1d04;1:272505;1:272406;2:272505;1:161804;1:272406;3:272505;1:808080;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:060604;4:272505;1:222205;1:272505;1:252404;3:272505;1:1d2004;1:2e2b0a;3:272505;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:040404;1:332e10;1:2e2b0a;1:272406;2:272505;1:252404;2:272505;1:1b1d04;5:272505;1:202205;1:808080;1:5a5a5a;1:7e7e7e;1:5d5d5d;1:040404;1:222205;1:1b1d04;1:2c2808;1:1b1d04;1:2a2607;1:272505;1:2e2b0a;2:272505;1:191a04;1:272505;1:1b1d04;1:332e10;1:222205;1:272505;1:737373;1:606060;1:737373;1:5d5d5d;1:040404;1:1d2004;1:272505;1:252404;2:272505;1:2e2b0a;1:272505;1:2a2507;2:272505;1:1b1d04;1:272505;1:2c2808;2:272505;1:777777;1:5d5d5d;1:737373;1:5d5d5d;1:040404;1:272505;1:1b1d04;1:222205;1:272505;1:2a2607;1:272505;1:252404;1:272406;1:2a2507;1:272505;1:222205;1:252404;1:2a2607;1:2e2b0a;1:272406;1:7e7e7e;1:606060;1:808080;1:5a5a5a;1:040404;3:272505;1:2e2a0b;1:1b1d04;2:272505;1:191a04;1:222205;1:202205;3:272505;1:302d0e;1:2a2507;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:5d5d5d;1:060604;2:272505;1:222205;1:202205;1:272505;1:252404;1:202205;2:272406;2:272505;1:222205;2:272505;1:1b1d04;1:7c7c7c;1:5d5d5d;1:7a7a7a;1:666666;1:040404;1:272505;1:272406;1:2c2808;1:272505;1:1b1d04;1:2e2b0a;1:272505;1:1b1d04;2:272505;1:2a2607;1:202205;1:2a2507;1:272505;1:202205;1:7e7e7e;1:474747;2:000000;1:939393;1:707070;9:7e7e7e;1:898989;1:848484;2:7e7e7e;1:707070;1:898989;1:808080;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:6b6b6b;1:7e7e7e;1:7a7a7a;1:7e7e7e;1:848484;1:7a7a7a;1:7e7e7e;1:7a7a7a;1:7e7e7e;1:7c7c7c;2:7e7e7e;1:858585;2:7e7e7e;2:808080;1:7e7e7e;1:626262;1:7e7e7e;1:707070;1:7e7e7e;1:848484;2:7e7e7e;1:848484;1:7e7e7e;1:858585;1:7e7e7e;1:7c7c7c;3:7e7e7e;1:737373;1:808080;1:858585;1:7c7c7c;1:777777;1:5d5d5d;1:737373;1:6b6b6b;1:7c7c7c;1:777777;7:7e7e7e;1:808080;1:7e7e7e;2:848484;2:808080;1:7c7c7c;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:737373;3:7e7e7e;1:808080;1:7e7e7e;2:7a7a7a;3:7e7e7e;1:858585;1:7c7c7c;3:7e7e7e;1:7a7a7a;1:7e7e7e;1:5d5d5d;1:7e7e7e;1:737373;1:7e7e7e;1:7a7a7a;4:7e7e7e;1:808080;2:7e7e7e;1:737373;1:777777;2:808080;1:7e7e7e;1:808080;1:848484;1:7e7e7e;1:5a5a5a;1:777777;1:707070;2:7e7e7e;1:7c7c7c;4:7e7e7e;1:909090;2:7e7e7e;1:737373;4:7e7e7e;2:7c7c7c;1:5d5d5d;2:7a7a7a;1:909090;1:7a7a7a;8:7e7e7e;1:737373;1:7e7e7e;1:848484;1:7e7e7e;1:808080;2:7e7e7e;1:5d5d5d;1:7c7c7c;1:707070;5:7e7e7e;1:7c7c7c;1:7e7e7e;1:7c7c7c;1:7e7e7e;1:7c7c7c;1:777777;1:737373;3:7e7e7e;1:808080;1:7e7e7e;1:474747;2:000000;1:939393;1:676767;2:5d5d5d;1:606060;2:5d5d5d;2:626262;1:5d5d5d;1:5a5a5a;1:5d5d5d;1:676767;2:5d5d5d;1:666666;4:5d5d5d;1:6d6d6d;1:606060;1:666666;1:5d5d5d;1:5a5a5a;1:5d5d5d;1:626262;1:5d5d5d;1:606060;2:5d5d5d;1:5a5a5a;5:5d5d5d;1:565656;2:5d5d5d;1:707070;4:5d5d5d;2:626262;1:606060;3:5d5d5d;1:606060;4:5d5d5d;1:5a5a5a;3:5d5d5d;1:707070;5:5d5d5d;2:626262;3:5d5d5d;1:666666;2:5d5d5d;1:5a5a5a;2:626262;1:565656;2:5d5d5d;1:707070;1:5d5d5d;1:626262;3:5d5d5d;1:606060;2:5a5a5a;3:5d5d5d;1:666666;2:5d5d5d;1:606060;1:5d5d5d;1:606060;2:5d5d5d;1:707070;1:5d5d5d;1:666666;1:606060;1:5d5d5d;1:626262;5:5d5d5d;1:626262;1:565656;2:5d5d5d;1:606060;1:5d5d5d;1:606060;1:5d5d5d;1:606060;1:676767;1:5d5d5d;1:606060;1:5d5d5d;1:565656;1:606060;1:5d5d5d;1:5a5a5a;4:5d5d5d;1:606060;2:5d5d5d;1:5a5a5a;2:5d5d5d;2:5a5a5a;1:6b6b6b;2:5d5d5d;2:5a5a5a;5:5d5d5d;1:606060;2:5d5d5d;1:565656;3:5d5d5d;1:626262;2:5d5d5d;1:6d6d6d;3:5d5d5d;1:606060;5:5d5d5d;1:5a5a5a;7:5d5d5d;1:606060;1:474747;183:000000"},
hotbar_sel = {w=24,h=23,d="24:000000;1:040404;1:ffffff;1:fdfdfd;1:f6f6f6;1:f7f9f7;1:ddf0d8;1:fcfefc;2:d5e8d0;1:cee1c9;1:d4e7cf;1:d5e8d0;1:daedd5;2:d5e8d0;1:d8ebd3;1:d5e8d0;1:cde0c8;4:d5e8d0;1:a1b29d;2:040404;1:fcfcfc;3:a1b29d;1:9bac97;3:a1b29d;1:a0b19c;1:aebfaa;1:9aab96;1:a1b29d;1:90a18c;1:a2b39e;1:9aab96;1:a1b29d;1:9aab96;2:a1b29d;1:aabba6;1:a1b29d;1:5e6c5b;2:040404;1:f7f9f7;1:a1b29d;1:616f5e;1:5f6d5c;1:586655;1:5f6d5c;1:596756;1:5e6c5b;3:5f6d5c;1:62705f;1:5f6d5c;1:606e5d;1:5b6958;1:5f6d5c;1:5d6b5a;2:5f6d5c;1:a8b9a4;1:a5b6a1;1:5f6d5c;2:040404;1:ffffff;1:a1b29d;1:5f6d5c;16:-;1:d1e4cc;1:a1b29d;1:5f6d5c;2:040404;1:d5e8d0;1:acbda8;1:5f6d5c;16:-;1:e2f5dd;1:a1b29d;1:667463;2:040404;1:d5e8d0;1:a1b29d;1:5f6d5c;16:-;1:d5e8d0;1:a1b29d;1:657362;2:040404;1:d5e8d0;1:a1b29d;1:5f6d5c;16:-;1:d5e8d0;1:a1b29d;1:5f6d5c;2:040404;1:caddc5;1:a1b29d;1:5f6d5c;16:-;1:d5e8d0;1:a1b29d;1:5f6d5c;2:040404;1:d5e8d0;1:a1b29d;1:5f6d5c;16:-;1:d5e8d0;1:a9baa5;1:5f6d5c;2:040404;1:d6e9d1;1:a9baa5;1:5f6d5c;16:-;1:d8ebd3;1:a1b29d;1:566453;2:040404;1:d5e8d0;1:a1b29d;1:5f6d5c;16:-;1:def1d9;1:a1b29d;1:687665;2:040404;1:daedd5;1:a1b29d;1:5b6958;16:-;1:d5e8d0;1:a1b29d;1:5a6857;2:040404;1:d5e8d0;1:a3b49f;1:556352;16:-;1:d5e8d0;1:a1b29d;1:5f6d5c;2:040404;1:dcefd7;1:a1b29d;1:677564;16:-;1:d5e8d0;1:a1b29d;1:5f6d5c;2:040404;1:d5e8d0;1:a1b29d;1:6d7b6a;16:-;1:d5e8d0;1:9cad98;1:586655;2:040404;1:dcefd7;1:9dae99;1:616f5e;16:-;1:d5e8d0;1:a1b29d;1:606e5d;2:040404;1:caddc5;1:a1b29d;1:546251;16:-;1:cfe2ca;1:a4b5a0;1:657362;2:040404;1:d3e6ce;1:95a691;1:5a6857;16:-;1:d7ead2;1:a1b29d;1:5f6d5c;2:040404;1:d5e8d0;1:9fb09b;1:5c6a59;16:-;1:f8faf8;1:9fb09b;1:556352;2:040404;1:d6e9d1;1:a1b29d;1:d0e3cb;1:d3e6ce;2:d5e8d0;1:d8ebd3;1:cfe2ca;1:d1e4cc;1:d5e8d0;1:d2e5cd;6:d5e8d0;1:daedd5;2:f7f9f7;1:a1b29d;1:5f6d5c;2:040404;1:d5e8d0;2:a1b29d;1:abbca7;1:9aab96;1:a2b39e;2:a1b29d;1:99aa95;1:abbca7;1:a1b29d;1:9dae99;3:a1b29d;1:9eaf9a;1:a1b29d;1:9eaf9a;1:a1b29d;1:9fb09b;1:a0b19c;1:5f6d5c;2:040404;1:a1b29d;2:5f6d5c;2:647261;1:596756;1:5c6a59;2:5f6d5c;1:667463;1:677564;4:5f6d5c;1:5e6c5b;1:667463;1:5f6d5c;1:6e7c6b;1:5f6d5c;1:566453;1:606e5d;1:040404"},
xp_bg = {w=182,h=5,d="1:-;180:09100c;1:-;1:09100c;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;2:202b25;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;2:09100c;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;2:28332d;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;1:141f19;1:29352f;1:202c25;5:19241e;1:202c25;1:29352f;2:09100c;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;2:202b25;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:141f19;1:36433c;1:2e3a33;5:29352f;1:2e3a33;1:36433c;1:09100c;1:-;180:09100c;1:-"},
crosshair = {w=15,h=15,d="52:-;1:ffffff;14:-;1:ffffff;14:-;1:ffffff;14:-;1:ffffff;10:-;9:ffffff;10:-;1:ffffff;14:-;1:ffffff;14:-;1:ffffff;14:-;1:ffffff;52:-"},
}
local ICON = {
stone = {w=16,h=16,d="7:-;1:7f7f7f;1:8f8f8f;12:-;2:7f7f7f;1:8f8f8f;1:686868;2:747474;8:-;1:7f7f7f;1:8f8f8f;1:686868;1:8f8f8f;1:7f7f7f;1:747474;1:7f7f7f;1:686868;1:7f7f7f;1:686868;4:-;1:8f8f8f;1:747474;4:7f7f7f;1:747474;1:8f8f8f;1:7f7f7f;1:8f8f8f;2:7f7f7f;1:686868;1:7f7f7f;1:-;1:727272;2:7f7f7f;1:747474;2:8f8f8f;1:686868;2:8f8f8f;5:747474;1:7f7f7f;1:4c4c4c;1:5c5c5c;1:656565;1:5c5c5c;1:747474;1:7f7f7f;1:747474;3:7f7f7f;1:8f8f8f;3:7f7f7f;2:454545;1:4c4c4c;1:656565;1:727272;1:5c5c5c;1:656565;1:535353;1:8f8f8f;1:7f7f7f;2:747474;1:7f7f7f;1:747474;3:4c4c4c;1:454545;1:4c4c4c;2:656565;1:5c5c5c;1:656565;1:5c5c5c;1:535353;1:656565;1:7f7f7f;1:8f8f8f;1:555555;1:4c4c4c;1:3e3e3e;2:555555;1:3e3e3e;1:4c4c4c;1:727272;1:535353;1:727272;1:656565;1:727272;2:656565;1:5c5c5c;1:4c4c4c;1:3e3e3e;1:555555;3:454545;1:4c4c4c;1:454545;3:656565;2:5c5c5c;1:535353;2:5c5c5c;1:4c4c4c;1:454545;1:4c4c4c;1:555555;2:4c4c4c;1:555555;1:454545;1:5c5c5c;1:656565;1:5c5c5c;2:727272;1:5c5c5c;1:656565;1:727272;2:555555;1:3e3e3e;1:555555;2:4c4c4c;1:555555;1:454545;2:5c5c5c;1:727272;2:656565;1:727272;2:656565;1:454545;2:4c4c4c;1:3e3e3e;1:4c4c4c;1:3e3e3e;1:454545;1:555555;1:-;2:656565;1:5c5c5c;2:656565;1:5c5c5c;1:656565;2:4c4c4c;1:555555;2:454545;1:4c4c4c;1:454545;4:-;1:5c5c5c;2:656565;1:5c5c5c;1:727272;1:4c4c4c;1:454545;2:4c4c4c;1:555555;8:-;1:656565;2:727272;1:555555;2:4c4c4c;12:-;1:656565;1:4c4c4c;7:-"},
dirt = {w=16,h=16,d="7:-;1:79553a;1:966c4a;12:-;2:79553a;1:b9855c;1:593d29;1:79553a;1:b9855c;8:-;2:79553a;1:b9855c;2:79553a;1:966c4a;4:79553a;4:-;1:79553a;1:593d29;1:79553a;1:b9855c;1:79553a;1:966c4a;1:79553a;1:b9855c;2:593d29;2:79553a;2:b9855c;1:-;1:78563b;2:b9855c;1:745844;1:966c4a;1:79553a;1:966c4a;1:79553a;2:966c4a;1:b9855c;1:79553a;2:966c4a;1:79553a;1:6f4f37;2:60442e;1:946a49;1:878787;1:593d29;2:79553a;1:966c4a;1:593d29;1:b9855c;1:79553a;2:966c4a;1:483322;1:5a402c;1:483322;3:60442e;1:473020;1:60442e;1:79553a;1:966c4a;4:79553a;1:5a402c;1:6f4f37;1:483322;1:6f4f37;1:483322;1:60442e;2:78563b;1:946a49;2:60442e;1:946a49;1:79553a;1:966c4a;1:483322;1:5a402c;1:483322;1:5a402c;1:404040;1:483322;1:5a402c;1:60442e;1:946a49;1:60442e;2:473020;1:78563b;2:473020;1:5a402c;2:352418;2:483322;1:6f4f37;2:483322;1:78563b;1:60442e;1:78563b;2:60442e;1:473020;1:78563b;1:60442e;1:404040;1:6f4f37;1:5a402c;1:6f4f37;1:352418;1:483322;1:6f4f37;1:483322;1:473020;1:78563b;2:60442e;3:78563b;1:946a49;1:352418;1:483322;1:5a402c;1:352418;1:483322;1:352418;1:5a402c;1:6f4f37;2:60442e;2:78563b;1:946a49;2:60442e;1:78563b;1:483322;1:5a402c;1:352418;2:5a402c;1:483322;1:6f4f37;1:5a402c;1:-;1:78563b;1:473020;1:78563b;2:60442e;2:78563b;1:5a402c;2:6f4f37;1:483322;1:352418;2:5a402c;4:-;1:60442e;1:946a49;1:473020;1:60442e;1:473020;3:483322;1:352418;1:5a402c;8:-;2:60442e;1:78563b;1:5a402c;1:6f4f37;1:483322;12:-;1:473020;1:483322;7:-"},
cobblestone = {w=16,h=16,d="7:-;2:616161;12:-;1:b5b5b5;1:6e6d6d;1:888788;1:a6a6a6;1:888788;1:616161;8:-;2:616161;1:6e6d6d;2:888788;1:a6a6a6;2:888788;2:a6a6a6;4:-;1:616161;1:888788;6:6e6d6d;1:525252;4:616161;1:b5b5b5;1:-;1:4d4d4d;1:616161;1:6e6d6d;1:888788;1:616161;1:888788;1:525252;2:888788;4:a6a6a6;1:616161;1:6e6d6d;1:515151;1:848484;1:6c6c6c;1:4d4d4d;3:6e6d6d;1:a6a6a6;5:616161;1:b5b5b5;1:3a3a3a;1:515151;1:424141;2:585757;1:4d4d4d;1:909090;1:848484;3:616161;1:888788;2:b5b5b5;1:636363;1:515151;1:3a3a3a;1:515151;1:3a3a3a;1:6c6c6c;1:909090;1:848484;1:585757;1:848484;1:414141;1:909090;1:888788;1:616161;1:636363;1:313131;1:515151;1:424141;1:636363;1:515151;1:6c6c6c;1:4d4d4d;1:585757;1:6c6c6c;2:4d4d4d;1:6c6c6c;1:4d4d4d;1:6c6c6c;2:636363;1:3a3a3a;2:515151;1:636363;1:515151;1:424141;1:585757;1:6c6c6c;1:585757;2:4d4d4d;1:909090;1:848484;1:414141;1:3a3a3a;2:515151;1:424141;1:6c6c6c;2:515151;2:6c6c6c;2:4d4d4d;1:585757;1:6c6c6c;1:4d4d4d;1:585757;1:6c6c6c;1:424141;4:515151;1:3a3a3a;1:6c6c6c;1:515151;1:848484;1:6c6c6c;1:4d4d4d;1:909090;2:585757;1:4d4d4d;1:6c6c6c;1:515151;1:636363;1:515151;1:313131;4:3a3a3a;1:-;1:4d4d4d;1:585757;1:6c6c6c;1:848484;1:414141;1:848484;1:4d4d4d;1:6c6c6c;2:424141;1:636363;1:515151;1:3a3a3a;1:636363;4:-;1:4d4d4d;1:6c6c6c;1:585757;2:6c6c6c;1:424141;1:636363;1:3a3a3a;1:424141;1:3a3a3a;8:-;2:6c6c6c;1:585757;1:6c6c6c;1:424141;1:515151;12:-;1:585757;1:515151;7:-"},
oak_planks = {w=16,h=16,d="7:-;1:b8945f;1:af8f55;12:-;1:af8f55;1:c29d62;1:7e6237;1:b8945f;1:967441;1:c29d62;8:-;1:b8945f;1:c29d62;1:7e6237;1:b8945f;1:9f844d;1:c29d62;1:67502c;1:9f844d;1:b8945f;1:c29d62;4:-;1:af8f55;1:9f844d;1:7e6237;1:af8f55;1:b8945f;1:af8f55;1:67502c;1:967441;1:9f844d;1:c29d62;1:67502c;1:af8f55;1:b8945f;1:c29d62;1:-;1:8c7244;1:7e6237;1:af8f55;1:9f844d;1:b8945f;1:67502c;2:9f844d;1:c29d62;1:7e6237;1:af8f55;1:b8945f;1:af8f55;1:7e6237;1:967441;1:5a4527;1:93764c;1:8c7244;1:9b7d4e;2:967441;1:9f844d;1:c29d62;1:967441;2:af8f55;1:c29d62;1:7e6237;1:9f844d;1:745e3a;1:6e5839;1:5a4527;1:9b7d4e;1:785c34;2:93764c;1:9b7d4e;1:67502c;1:9f844d;2:b8945f;1:67502c;1:9f844d;1:745e3a;1:6e5839;1:695533;1:3d301a;1:6e5839;1:7f693d;1:8c7244;1:9b7d4e;1:524023;1:7f693d;1:8c7244;1:9b7d4e;1:67502c;1:9f844d;1:745e3a;2:5f4f2e;1:4b3a21;2:6e5839;1:5f4f2e;1:9b7d4e;1:644e2c;1:8c7244;1:785c34;1:9b7d4e;1:644e2c;1:93764c;1:7f693d;2:6e5839;1:4b3a21;1:5f4f2e;2:695533;1:5a4527;1:5f4f2e;2:93764c;1:8c7244;1:524023;2:93764c;1:8c7244;1:524023;1:4b3a21;1:745e3a;1:695533;1:5a4527;1:3d301a;1:745e3a;2:5f4f2e;1:7f693d;1:785c34;2:7f693d;1:9b7d4e;1:644e2c;1:7f693d;1:8c7244;2:6e5839;1:4b3a21;1:745e3a;1:5f4f2e;1:695533;1:3d301a;1:745e3a;1:7f693d;2:93764c;1:524023;1:8c7244;1:7f693d;1:9b7d4e;1:524023;1:3d301a;2:6e5839;1:5f4f2e;1:4b3a21;1:5f4f2e;1:695533;1:5f4f2e;1:-;1:524023;1:8c7244;1:7f693d;1:9b7d4e;1:644e2c;1:7f693d;1:785c34;2:695533;1:4b3a21;1:5f4f2e;1:6e5839;1:5f4f2e;1:3d301a;4:-;1:785c34;1:93764c;1:8c7244;1:93764c;1:524023;1:3d301a;1:745e3a;1:5f4f2e;1:5a4527;1:4b3a21;8:-;1:644e2c;1:7f693d;1:8c7244;2:695533;1:4b3a21;12:-;1:524023;1:4b3a21;7:-"},
oak_log = {w=16,h=16,d="7:-;2:4c3d26;12:-;1:4c3d26;1:af8f55;2:7e6237;1:b8945f;1:4c3d26;8:-;1:4c3d26;1:af8f55;1:9f844d;3:af8f55;1:b8945f;1:967441;1:c29d62;1:4c3d26;4:-;1:5f4a2b;1:b8945f;1:9f844d;1:b8945f;1:af8f55;1:967441;2:af8f55;1:9f844d;1:af8f55;1:b8945f;1:9f844d;1:b8945f;1:5f4a2b;1:-;1:3c301e;1:5f4a2b;1:b8945f;1:9f844d;2:af8f55;1:7e6237;2:af8f55;1:9f844d;1:af8f55;1:b8945f;1:9f844d;1:b8945f;1:5f4a2b;1:392c19;1:2c2213;1:4c3b22;1:2c2213;1:5f4a2b;1:af8f55;1:967441;1:b8945f;3:af8f55;1:967441;1:af8f55;1:5f4a2b;1:574327;1:453620;1:392c19;1:3c301e;1:4c3b22;1:2c2213;1:4c3b22;1:2c2213;1:5f4a2b;1:af8f55;2:967441;1:af8f55;1:5f4a2b;1:453620;1:21190e;1:2d2416;2:453620;2:5c482b;1:2c2213;1:4c3b22;1:3c301e;2:745a34;2:5f4a2b;1:453620;1:21190e;3:392c19;1:2d2416;1:453620;1:3c301e;1:5c482b;1:4c3b22;1:3c301e;1:4c3b22;1:2c2213;1:5c482b;1:4c3b22;1:2d2416;1:392c19;1:2d2416;2:392c19;1:453620;1:392c19;1:453620;1:5c482b;1:79603a;1:5c482b;1:745a34;1:5c482b;2:3c301e;1:4c3b22;1:21190e;1:392c19;1:2d2416;2:453620;1:392c19;2:453620;1:3c301e;1:745a34;1:4c3b22;1:5c482b;2:4c3b22;1:3c301e;1:5c482b;3:453620;1:574327;1:392c19;1:2d2416;2:453620;2:5c482b;1:4c3b22;1:2c2213;1:4c3b22;1:3c301e;1:4c3b22;1:5c482b;1:453620;1:5b482b;1:453620;1:21190e;1:453620;1:21190e;2:453620;1:-;1:745a34;1:5c482b;1:3c301e;1:4c3b22;1:2c2213;2:5c482b;1:453620;1:574327;1:392c19;1:21190e;1:392c19;1:2d2416;1:574327;4:-;3:3c301e;2:5c482b;1:2d2416;2:453620;1:21190e;1:2d2416;8:-;1:5c482b;1:745a34;1:5c482b;1:453620;1:574327;1:453620;12:-;1:4c3b22;1:453620;7:-"},
grass_block = {w=16,h=16,d="7:-;1:546e34;1:6e9044;12:-;1:577135;1:4a612d;1:4e6630;1:4b612e;1:577135;1:516931;8:-;1:556f34;1:587236;1:597436;1:516a32;1:495f2d;1:62803c;1:475c2b;1:516a32;1:485e2c;1:556f34;4:-;1:495f2d;1:556f34;1:4c632e;1:5d7a39;1:4f6730;1:495f2d;1:5d7939;1:485e2c;1:4c642f;1:425628;1:506831;1:62803c;1:6e9044;1:5e7b3a;1:-;1:405428;1:4d642f;1:455b2a;1:475c2b;1:526b32;1:536c32;1:536c33;1:4c642f;1:607e3b;1:4c642f;1:617f3c;1:445829;1:475d2b;1:5e7b3a;1:67863f;1:33421f;1:473020;2:405428;1:546d33;1:536c33;1:5b7738;1:526b32;1:4f6730;1:4a612d;1:506931;1:536c33;1:485e2c;1:516931;1:364621;1:2f3d1c;1:352418;1:60442e;2:473020;1:3a4c24;1:485d2c;1:465b2b;1:4c642f;1:5a7637;1:5d7a39;1:475c2b;1:516931;2:33421f;1:3a4c24;1:352418;1:483322;1:60442e;2:78563b;1:473020;1:485d2c;1:425628;1:3a4c24;1:4d642f;1:44592a;1:2f3d1c;3:352418;1:404040;1:483322;1:5a402c;1:60442e;1:946a49;1:60442e;3:473020;1:354620;1:3f5226;1:2f3d1c;1:2d3a1b;1:352418;2:483322;1:6f4f37;2:483322;1:78563b;1:60442e;1:78563b;2:60442e;1:473020;1:78563b;1:60442e;1:404040;1:6f4f37;1:5a402c;1:6f4f37;1:352418;1:483322;1:6f4f37;1:483322;1:473020;1:78563b;2:60442e;3:78563b;1:946a49;1:352418;1:483322;1:5a402c;1:352418;1:483322;1:352418;1:5a402c;1:6f4f37;2:60442e;2:78563b;1:946a49;2:60442e;1:78563b;1:483322;1:5a402c;1:352418;2:5a402c;1:483322;1:6f4f37;1:5a402c;1:-;1:78563b;1:473020;1:78563b;2:60442e;2:78563b;1:5a402c;2:6f4f37;1:483322;1:352418;2:5a402c;4:-;1:60442e;1:946a49;1:473020;1:60442e;1:473020;3:483322;1:352418;1:5a402c;8:-;2:60442e;1:78563b;1:5a402c;1:6f4f37;1:483322;12:-;1:473020;1:483322;7:-"},
crafting_table = {w=16,h=16,d="7:-;2:0e0b06;12:-;1:733920;1:9e5932;2:ae693c;1:9e5932;1:733920;8:-;1:733920;2:ae693c;1:553824;2:ae693c;1:553824;2:ae693c;1:733920;4:-;1:0e0b06;1:41230e;1:ae693c;2:4b2b18;1:ae693c;2:553824;1:ae693c;2:4b2b18;1:ae693c;1:41230e;1:0e0b06;1:-;1:8c7244;1:0e0b06;1:41230e;1:ae693c;2:4b2b18;1:ae693c;1:4b2b18;1:553824;1:ae693c;1:4b2b18;1:553824;1:ae693c;1:41230e;1:0e0b06;1:0f0c07;1:93764c;1:8c7244;1:2c1a11;1:733920;2:ae693c;1:553824;1:9e5932;1:ae693c;1:553824;2:ae693c;1:733920;1:745e3a;1:6e5839;1:0f0c07;1:9b7d4e;1:785c34;1:93764c;1:3c2213;1:5c2d19;1:733920;1:9e5932;2:ae693c;1:9e5932;1:733920;1:2d190e;1:21130d;1:695533;1:3d301a;1:0f0c07;1:7f693d;1:341c0b;1:9b7d4e;1:15110a;1:7f693d;1:8c7244;1:9b7d4e;1:0e0b06;1:1a150d;1:745e3a;1:5f4f2e;1:16130a;1:4b3a21;2:6e5839;1:0f0c07;1:9b7d4e;1:201808;1:8c7244;1:2c1a11;1:9b7d4e;1:341c0b;1:93764c;1:141009;2:6e5839;1:4b3a21;1:2d190e;2:695533;1:5a4527;1:0f0c07;1:93764c;1:acacac;1:8c7244;1:15110a;1:93764c;2:201808;1:141009;1:4b3a21;1:745e3a;1:271508;1:21130d;1:3d301a;1:745e3a;1:5f4f2e;1:0f0c07;1:7f693d;1:785c34;1:7f693d;1:2c1a11;1:9b7d4e;1:cccccc;1:909090;1:141009;1:6e5839;1:181206;1:4b3a21;1:2d190e;1:5f4f2e;1:695533;1:3d301a;1:0f0c07;1:7f693d;2:93764c;1:0d0b06;1:8c7244;1:7f693d;1:acacac;1:141009;1:3d301a;1:818181;1:6c6c6c;1:21130d;1:4b3a21;1:5f4f2e;1:695533;1:0f0c07;1:-;1:524023;1:8c7244;1:2c1a11;1:9b7d4e;1:644e2c;1:acacac;1:141009;2:695533;1:4b3a21;1:2d190e;1:6e5839;1:5f4f2e;1:3d301a;4:-;1:141009;1:93764c;1:8c7244;1:cccccc;1:141009;1:3d301a;1:745e3a;1:5f4f2e;1:21130d;1:4b3a21;8:-;1:644e2c;1:7f693d;1:141009;2:695533;1:4b3a21;12:-;1:15110a;1:4b3a21;7:-"},
diamond_sword = {w=16,h=16,d="13:-;3:0e3f36;12:-;1:0e3f36;2:a4fdf0;1:082520;11:-;1:0e3f36;1:a4fdf0;1:2bc7ac;1:a4fdf0;1:082520;10:-;1:0e3f36;1:a4fdf0;1:2bc7ac;1:a4fdf0;1:082520;10:-;1:0e3f36;1:a4fdf0;1:2bc7ac;1:33ebcb;1:082520;10:-;1:0e3f36;1:a4fdf0;1:2bc7ac;1:33ebcb;1:082520;5:-;2:0e3f36;3:-;1:0e3f36;1:33ebcb;1:2bc7ac;1:33ebcb;1:082520;6:-;1:0e3f36;1:156355;1:0e3f36;1:-;1:0e3f36;1:33ebcb;1:2bc7ac;1:33ebcb;1:082520;8:-;1:0e3f36;1:1e8a77;1:082520;1:33ebcb;1:1e8a77;1:33ebcb;1:082520;9:-;1:0e3f36;2:1e8a77;1:156355;1:33ebcb;1:082520;11:-;1:0e3f36;1:156355;1:0e3f36;1:082520;11:-;1:493615;1:684e1e;1:082520;2:0e3f36;1:082520;9:-;1:493615;1:896727;1:281e0b;1:-;2:082520;1:0e3f36;1:082520;6:-;2:0e3f36;1:684e1e;1:281e0b;4:-;2:082520;6:-;1:0e3f36;1:156355;1:082520;13:-;3:082520;13:-"},
diamond_pickaxe = {w=16,h=16,d="38:-;5:0e3f36;10:-;1:0e3f36;1:33ebcb;1:2bc7ac;2:27b29a;1:2bc7ac;1:0e3f36;1:493615;1:684e1e;8:-;1:0e3f36;3:082520;2:27b29a;1:896727;1:281e0b;12:-;1:493615;1:2bc7ac;1:27b29a;1:082520;11:-;1:493615;1:684e1e;1:281e0b;1:27b29a;1:2bc7ac;1:082520;9:-;1:493615;1:896727;1:281e0b;1:-;1:082520;1:27b29a;1:082520;8:-;1:493615;1:684e1e;1:281e0b;2:-;1:082520;1:27b29a;1:082520;7:-;1:493615;1:896727;1:281e0b;3:-;1:082520;1:2bc7ac;1:082520;6:-;1:493615;1:684e1e;1:281e0b;4:-;1:082520;1:33ebcb;1:082520;5:-;1:493615;1:896727;1:281e0b;6:-;1:082520;5:-;1:493615;1:684e1e;1:281e0b;12:-;1:493615;1:896727;1:281e0b;13:-;2:281e0b;28:-"},
diamond_axe = {w=16,h=16,d="25:-;2:0e3f36;13:-;1:0e3f36;2:33ebcb;1:0e3f36;11:-;1:0e3f36;1:33ebcb;1:27b29a;1:2bc7ac;1:0e3f36;10:-;1:0e3f36;1:33ebcb;3:27b29a;1:493615;1:684e1e;9:-;1:082520;1:33ebcb;1:2bc7ac;1:27b29a;1:1e8a77;1:27b29a;1:281e0b;10:-;2:082520;1:493615;1:27b29a;1:1e8a77;1:27b29a;1:082520;10:-;1:493615;1:684e1e;1:281e0b;2:27b29a;1:082520;9:-;1:493615;1:896727;1:281e0b;1:-;2:082520;9:-;1:493615;1:684e1e;1:281e0b;12:-;1:493615;1:684e1e;1:281e0b;12:-;1:493615;1:896727;1:281e0b;12:-;1:493615;1:684e1e;1:281e0b;12:-;1:493615;1:896727;1:281e0b;13:-;2:281e0b;28:-"},
diamond_shovel = {w=16,h=16,d="43:-;2:0e3f36;1:082520;12:-;1:0e3f36;2:33ebcb;1:27b29a;1:082520;10:-;1:0e3f36;1:33ebcb;1:2bc7ac;1:27b29a;1:33ebcb;1:082520;9:-;1:0e3f36;1:33ebcb;1:2bc7ac;1:27b29a;1:2bc7ac;1:33ebcb;1:082520;10:-;1:493615;1:27b29a;1:2bc7ac;1:33ebcb;1:082520;10:-;1:493615;1:896727;1:281e0b;1:33ebcb;1:082520;10:-;1:493615;1:896727;1:281e0b;1:-;1:082520;10:-;1:493615;1:684e1e;1:281e0b;12:-;1:493615;1:896727;1:281e0b;12:-;1:493615;1:684e1e;1:281e0b;11:-;2:493615;1:896727;1:281e0b;12:-;1:493615;1:896727;1:281e0b;14:-;2:281e0b;27:-"},
iron_helmet = {w=16,h=16,d="53:-;6:2d2d2d;9:-;1:2d2d2d;1:969696;4:c6c6c6;1:6b6b6b;1:191919;7:-;1:2d2d2d;1:969696;1:d8d8d8;1:ffffff;1:d8d8d8;2:c6c6c6;1:969696;1:6b6b6b;1:191919;6:-;1:2d2d2d;1:c6c6c6;2:d8d8d8;2:c6c6c6;3:969696;1:191919;6:-;1:2d2d2d;2:c6c6c6;3:2d2d2d;1:191919;1:6b6b6b;1:969696;1:191919;6:-;1:2d2d2d;1:c6c6c6;1:2d2d2d;5:191919;1:969696;1:191919;6:-;1:2d2d2d;1:c6c6c6;1:2d2d2d;5:191919;1:6b6b6b;1:191919;6:-;1:2d2d2d;1:969696;6:191919;1:6b6b6b;1:191919;7:-;1:2d2d2d;1:191919;4:-;2:191919;68:-"},
iron_chestplate = {w=16,h=16,d="33:-;5:2d2d2d;4:-;5:2d2d2d;2:-;1:2d2d2d;1:ffffff;1:d8d8d8;1:c6c6c6;1:2d2d2d;4:-;1:2d2d2d;1:ffffff;1:d8d8d8;1:c6c6c6;1:2d2d2d;2:-;1:2d2d2d;1:d8d8d8;2:c6c6c6;1:969696;1:2d2d2d;2:-;1:2d2d2d;1:969696;1:d8d8d8;2:c6c6c6;1:2d2d2d;2:-;1:2d2d2d;3:c6c6c6;1:d8d8d8;1:969696;2:2d2d2d;1:969696;4:c6c6c6;1:2d2d2d;2:-;1:2d2d2d;1:6b6b6b;1:969696;1:c6c6c6;1:ffffff;3:d8d8d8;3:c6c6c6;1:969696;1:6b6b6b;1:2d2d2d;2:-;2:191919;1:6b6b6b;3:d8d8d8;5:c6c6c6;1:6b6b6b;2:191919;4:-;1:191919;2:d8d8d8;6:c6c6c6;1:191919;6:-;1:191919;1:c6c6c6;1:d8d8d8;5:c6c6c6;1:969696;1:191919;6:-;1:191919;7:c6c6c6;1:969696;1:191919;6:-;1:191919;1:969696;5:c6c6c6;2:969696;1:191919;6:-;1:191919;1:6b6b6b;6:969696;1:6b6b6b;1:191919;7:-;1:191919;1:6b6b6b;4:969696;1:6b6b6b;1:191919;9:-;6:191919;21:-"},
iron_leggings = {w=16,h=16,d="36:-;7:2d2d2d;1:191919;7:-;1:2d2d2d;1:d8d8d8;2:ffffff;2:d8d8d8;2:c6c6c6;1:6b6b6b;1:191919;6:-;1:2d2d2d;2:d8d8d8;5:c6c6c6;1:969696;1:191919;6:-;1:2d2d2d;1:d8d8d8;1:c6c6c6;3:969696;2:c6c6c6;1:969696;1:191919;6:-;1:2d2d2d;1:d8d8d8;1:c6c6c6;1:969696;2:191919;1:6b6b6b;1:c6c6c6;1:969696;1:191919;6:-;1:2d2d2d;2:c6c6c6;1:191919;2:-;1:191919;1:c6c6c6;1:969696;1:191919;6:-;1:2d2d2d;1:c6c6c6;1:969696;1:191919;2:-;1:2d2d2d;1:c6c6c6;1:969696;1:191919;6:-;1:2d2d2d;1:c6c6c6;1:969696;1:191919;2:-;1:2d2d2d;1:c6c6c6;1:969696;1:191919;6:-;1:2d2d2d;2:969696;1:191919;2:-;1:191919;2:969696;1:191919;6:-;1:2d2d2d;1:969696;1:6b6b6b;1:191919;2:-;1:191919;1:969696;1:6b6b6b;1:191919;6:-;1:191919;2:6b6b6b;1:191919;2:-;1:191919;2:6b6b6b;1:191919;6:-;4:191919;2:-;4:191919;35:-"},
iron_boots = {w=16,h=16,d="52:-;3:2d2d2d;2:-;3:2d2d2d;7:-;1:2d2d2d;1:ffffff;1:d8d8d8;1:191919;2:-;1:2d2d2d;1:ffffff;1:d8d8d8;1:191919;6:-;1:2d2d2d;2:d8d8d8;1:191919;2:-;1:2d2d2d;1:d8d8d8;1:c6c6c6;1:191919;6:-;1:2d2d2d;1:d8d8d8;1:c6c6c6;1:191919;2:-;1:2d2d2d;2:c6c6c6;1:191919;6:-;1:2d2d2d;2:c6c6c6;1:191919;2:-;1:2d2d2d;2:c6c6c6;1:191919;6:-;1:2d2d2d;1:c6c6c6;1:969696;1:191919;2:-;1:2d2d2d;2:c6c6c6;1:191919;5:-;1:2d2d2d;2:c6c6c6;1:969696;1:191919;2:-;1:2d2d2d;1:969696;1:c6c6c6;1:969696;1:191919;3:-;1:2d2d2d;2:c6c6c6;1:969696;1:6b6b6b;1:191919;2:-;1:2d2d2d;1:6b6b6b;1:969696;1:c6c6c6;1:969696;1:191919;2:-;1:2d2d2d;2:969696;1:6b6b6b;2:191919;2:-;2:191919;2:969696;1:6b6b6b;1:191919;2:-;1:2d2d2d;3:191919;6:-;4:191919;49:-"},
cooked_beef = {w=16,h=16,d="57:-;4:4e2719;11:-;1:4e2719;1:713f2d;1:7c4835;1:713f2d;1:8e523c;1:4e2719;9:-;1:4e2719;1:522f1f;1:985c43;1:8e523c;1:673728;1:713f2d;1:673728;1:4e2719;7:-;1:4e2719;2:8e523c;1:522f1f;1:7c4835;1:8e523c;1:522f1f;1:713f2d;1:2a160d;5:-;2:4e2719;1:673728;1:522f1f;1:985c43;1:8e523c;1:522f1f;1:7c4835;1:713f2d;1:522f1f;1:2a160d;4:-;1:4e2719;1:522f1f;1:7c4835;1:8e523c;1:673728;1:522f1f;1:985c43;1:8e523c;1:713f2d;1:673728;1:3f2116;1:2a160d;4:-;1:4e2719;1:713f2d;1:522f1f;1:985c43;2:8e523c;1:522f1f;1:985c43;1:673728;1:3f2116;1:2a160d;4:-;1:4e2719;1:713f2d;1:7c4835;1:985c43;1:522f1f;1:985c43;1:8e523c;1:713f2d;1:522f1f;2:3f2116;1:2a160d;4:-;1:4e2719;1:985c43;1:713f2d;1:7c4835;1:985c43;1:522f1f;1:713f2d;1:7c4835;1:673728;1:3f2116;1:2a160d;6:-;1:4e2719;1:985c43;2:8e523c;1:7c4835;1:673728;2:3f2116;1:2a160d;7:-;2:2a160d;1:522f1f;3:3f2116;2:2a160d;10:-;4:2a160d;23:-"},
bread = {w=16,h=16,d="25:-;4:654b17;10:-;2:654b17;1:8c661e;2:a27924;1:8c661e;1:654b17;8:-;1:654b17;1:8c661e;4:bc8927;1:a27924;1:8c661e;1:3f2e0e;6:-;1:654b17;1:bc8927;1:a27924;2:8c661e;3:bc8927;1:8c661e;1:3f2e0e;5:-;1:654b17;4:bc8927;1:a27924;1:8c661e;1:bc8927;1:a27924;1:8c661e;1:3f2e0e;4:-;1:654b17;6:bc8927;1:a27924;1:bc8927;1:8c661e;1:654b17;1:3f2e0e;3:-;1:654b17;1:8c661e;1:a27924;2:8c661e;4:bc8927;2:8c661e;1:4c3811;1:3f2e0e;3:-;1:654b17;3:bc8927;1:a27924;1:8c661e;2:bc8927;2:8c661e;1:654b17;1:3f2e0e;3:-;1:654b17;1:8c661e;4:bc8927;1:a27924;1:bc8927;2:8c661e;1:654b17;1:3f2e0e;4:-;1:654b17;1:a27924;5:bc8927;2:8c661e;1:654b17;1:3f2e0e;5:-;1:654b17;2:a27924;3:bc8927;2:8c661e;1:654b17;1:3f2e0e;6:-;1:574114;1:8c661e;2:a27924;3:8c661e;1:654b17;1:3f2e0e;7:-;1:574114;1:654b17;4:8c661e;1:654b17;1:3f2e0e;9:-;1:4c3811;3:654b17;1:4c3811;1:3f2e0e;11:-;1:4c3811;3:3f2e0e;9:-"},
apple = {w=16,h=16,d="25:-;1:752802;14:-;1:7e370e;1:542409;14:-;1:752802;12:-;2:9c1017;1:752802;1:542409;2:752802;8:-;1:9c1017;1:b4131e;1:ff969d;1:b4131e;1:542409;1:9c1017;1:dd1725;1:b4131e;2:752802;5:-;1:9c1017;1:b4131e;1:ff1c2b;1:ff5e69;3:ff969d;1:ff5e69;1:ff1c2b;1:b4131e;2:752802;4:-;1:9c1017;1:b4131e;6:ff1c2b;1:dd1725;1:ff1c2b;1:b4131e;1:752802;4:-;1:9c1017;1:b4131e;1:dd1725;1:ff1c2b;1:dd1725;1:ff1c2b;3:dd1725;1:ff1c2b;1:dd1725;1:54090e;4:-;1:752802;2:b4131e;2:dd1725;2:b4131e;1:dd1725;1:b4131e;1:ff1c2b;1:dd1725;1:54090e;4:-;1:752802;5:b4131e;1:dd1725;2:b4131e;1:ff1c2b;1:b4131e;1:54090e;5:-;1:752802;2:b4131e;1:dd1725;3:b4131e;1:dd1725;1:b4131e;1:54090e;6:-;1:752802;1:9c1017;3:b4131e;2:dd1725;1:b4131e;1:9c1017;1:54090e;7:-;1:54090e;1:9c1017;1:b4131e;2:9c1017;1:b4131e;1:9c1017;1:54090e;9:-;1:54090e;3:752802;2:54090e;21:-"},
stick = {w=16,h=16,d="45:-;1:493615;1:281e0b;13:-;1:493615;1:896727;1:281e0b;12:-;1:493615;1:896727;1:281e0b;12:-;1:493615;1:684e1e;1:281e0b;12:-;1:493615;1:896727;1:281e0b;12:-;1:493615;1:684e1e;1:281e0b;12:-;1:493615;1:896727;1:281e0b;12:-;1:493615;1:684e1e;1:281e0b;12:-;1:493615;1:896727;1:281e0b;12:-;1:493615;1:684e1e;1:281e0b;12:-;1:493615;1:896727;1:281e0b;12:-;1:493615;1:896727;1:281e0b;13:-;2:281e0b;28:-"},
coal = {w=16,h=16,d="37:-;4:1c1c1e;11:-;1:1c1c1e;1:2e2e2e;2:323232;1:2e2e2e;1:1c1c1e;9:-;1:1c1c1e;1:252525;1:363636;1:393e46;1:323232;2:252525;1:1c1c1e;8:-;1:1c1c1e;1:363636;1:252525;1:323232;1:2e2e2e;1:323232;1:2e2e2e;1:252525;1:1c1c1e;7:-;1:1c1c1e;2:261e24;1:252525;1:363636;1:393e46;1:363636;1:323232;1:252525;1:1c1c1e;5:-;1:1c1c1e;1:252525;1:2e2e2e;1:252525;1:261e24;1:252525;2:363636;1:2e2e2e;1:252525;1:323232;1:101015;4:-;1:1c1c1e;1:2e2e2e;1:393e46;1:323232;1:252525;3:2e2e2e;1:252525;1:261e24;1:252525;1:101015;4:-;1:1c1c1e;1:252525;3:2e2e2e;3:252525;1:2e2e2e;3:261e24;1:101015;3:-;1:1c1c1e;3:252525;1:261e24;1:252525;1:2e2e2e;1:261e24;1:252525;1:1f1721;1:252525;1:1f1721;1:101015;3:-;1:1c1c1e;1:1f1721;1:261e24;1:252525;5:261e24;1:1f1721;1:261e24;1:1f1721;1:101015;4:-;1:101015;2:1f1721;1:261e24;1:252525;1:1f1721;2:261e24;2:1f1721;1:101015;6:-;1:101015;4:1f1721;4:101015;8:-;4:101015;23:-"},
iron_ingot = {w=16,h=16,d="42:-;2:5e5e5e;11:-;3:5e5e5e;2:a8a8a8;1:727272;7:-;3:5e5e5e;1:a8a8a8;4:d8d8d8;1:a8a8a8;1:727272;3:-;3:5e5e5e;1:a8a8a8;8:d8d8d8;1:a8a8a8;1:727272;1:-;1:5e5e5e;1:ffffff;10:d8d8d8;2:ffffff;1:d8d8d8;1:727272;1:5e5e5e;1:a8a8a8;1:ffffff;6:d8d8d8;3:ffffff;1:d8d8d8;1:727272;1:a8a8a8;1:353535;1:5e5e5e;2:a8a8a8;1:ffffff;2:d8d8d8;3:ffffff;1:d8d8d8;1:828282;2:727272;1:828282;1:a8a8a8;1:353535;1:5e5e5e;3:a8a8a8;2:ffffff;1:d8d8d8;1:828282;4:727272;3:a8a8a8;1:353535;1:5e5e5e;1:828282;2:a8a8a8;1:d8d8d8;1:828282;4:727272;2:a8a8a8;1:828282;2:353535;2:-;1:5e5e5e;1:828282;1:a8a8a8;1:d8d8d8;1:828282;2:727272;2:828282;3:353535;5:-;1:5e5e5e;1:828282;1:a8a8a8;1:828282;1:585858;3:353535;9:-;2:5e5e5e;2:353535;41:-"},
diamond = {w=16,h=16,d="38:-;4:11727a;11:-;1:11727a;3:ffffff;1:d5fff6;1:11727a;9:-;1:11727a;1:ffffff;2:4aedd9;1:a1fbe8;1:d5fff6;1:20c5b5;1:145e53;7:-;1:11727a;1:ffffff;1:4aedd9;2:a1fbe8;1:d5fff6;1:a1fbe8;1:4aedd9;1:20c5b5;1:145e53;6:-;1:11727a;1:ffffff;1:4aedd9;1:ffffff;1:d5fff6;1:ffffff;1:d5fff6;2:4aedd9;1:145e53;5:-;1:11727a;1:ffffff;1:4aedd9;1:ffffff;2:4aedd9;2:a1fbe8;1:1aaaa7;1:20c5b5;1:1aaaa7;1:145e53;4:-;1:11727a;1:ffffff;1:4aedd9;1:d5fff6;1:4aedd9;3:a1fbe8;1:1c919a;1:20c5b5;1:1aaaa7;1:145e53;4:-;1:11727a;2:ffffff;1:20c5b5;3:a1fbe8;1:4aedd9;1:1c919a;2:1aaaa7;1:145e53;4:-;1:11727a;1:d5fff6;2:4aedd9;4:1aaaa7;2:20c5b5;1:1c919a;1:145e53;5:-;1:145e53;1:4aedd9;1:1aaaa7;4:20c5b5;1:1aaaa7;1:20c5b5;1:145e53;6:-;1:145e53;1:2ce0d8;1:1aaaa7;4:20c5b5;1:1aaaa7;1:a1fbe8;1:145e53;7:-;1:145e53;1:1c919a;2:4aedd9;2:a1fbe8;1:20c5b5;1:145e53;9:-;6:145e53;21:-"},
bucket = {w=16,h=16,d="21:-;6:353535;8:-;2:353535;1:727272;3:969696;2:a8a8a8;2:353535;5:-;1:353535;2:727272;3:5f5f5f;3:727272;1:969696;1:727272;1:353535;4:-;1:353535;1:5f5f5f;3:545454;1:5f5f5f;4:727272;1:5f5f5f;1:353535;4:-;3:353535;2:545454;2:5f5f5f;2:727272;3:353535;4:-;1:353535;1:d8d8d8;1:a8a8a8;6:353535;1:727272;1:969696;1:353535;4:-;1:353535;4:d8d8d8;2:a8a8a8;1:969696;2:727272;1:969696;1:353535;4:-;1:353535;2:d8d8d8;1:ffffff;1:d8d8d8;2:a8a8a8;1:969696;2:727272;1:a8a8a8;1:353535;4:-;1:353535;1:a8a8a8;1:d8d8d8;1:ffffff;1:d8d8d8;2:a8a8a8;1:969696;2:727272;1:a8a8a8;1:353535;4:-;1:353535;1:727272;1:d8d8d8;1:ffffff;1:d8d8d8;2:a8a8a8;1:969696;2:727272;1:969696;1:353535;5:-;1:353535;3:d8d8d8;2:a8a8a8;1:969696;1:727272;1:969696;1:353535;6:-;1:353535;1:a8a8a8;2:d8d8d8;1:a8a8a8;2:969696;1:727272;1:969696;1:353535;7:-;1:353535;1:a8a8a8;1:d8d8d8;1:a8a8a8;1:969696;1:727272;1:969696;1:353535;9:-;6:353535;21:-"},
torch = {w=16,h=16,d="103:-;1:ffd800;1:ff8f00;14:-;1:ffff97;1:ffffff;14:-;1:9f7f50;1:6d5736;14:-;1:957546;1:55452e;14:-;1:9f7f50;1:423522;14:-;1:9f7f50;1:55452e;14:-;1:957546;1:55452e;14:-;1:6d5736;1:3d301d;14:-;1:9f7f50;1:3b2e1b;14:-;1:6d5736;1:372a17;7:-"},
ladder = {w=16,h=16,d="2:-;1:967441;1:513d24;8:-;1:967441;1:513d24;3:-;1:7e6237;1:b58d50;1:7e6237;1:967441;1:b58d50;1:967441;4:b58d50;1:967441;1:b58d50;1:7e6237;1:b58d50;2:-;1:67502c;1:7e6237;1:67502c;1:513d24;6:67502c;1:513d24;1:7e6237;2:67502c;3:-;1:513d24;1:3a2f1e;8:-;1:513d24;1:3a2f1e;4:-;1:967441;1:513d24;8:-;1:967441;1:513d24;3:-;2:b58d50;1:7e6237;1:967441;3:b58d50;1:967441;1:b58d50;2:967441;1:b58d50;1:7e6237;1:b58d50;2:-;1:67502c;1:7e6237;1:67502c;1:513d24;6:67502c;1:513d24;1:7e6237;2:67502c;3:-;1:513d24;1:3a2f1e;8:-;1:513d24;1:3a2f1e;4:-;1:967441;1:513d24;8:-;1:967441;1:513d24;3:-;2:b58d50;1:7e6237;1:967441;6:b58d50;1:967441;1:b58d50;2:7e6237;2:-;1:67502c;1:7e6237;1:67502c;1:513d24;6:67502c;1:513d24;1:7e6237;2:67502c;3:-;1:513d24;1:3a2f1e;8:-;1:513d24;1:3a2f1e;4:-;1:967441;1:513d24;8:-;1:967441;1:513d24;3:-;2:b58d50;1:7e6237;1:967441;1:b58d50;1:967441;4:b58d50;1:967441;1:b58d50;1:7e6237;1:b58d50;2:-;1:67502c;1:7e6237;1:67502c;1:513d24;6:67502c;1:513d24;1:7e6237;2:67502c;3:-;1:513d24;1:3a2f1e;8:-;1:513d24;1:3a2f1e;2:-"},
}
local BTEX = {
stone = {w=16,h=16,d="4:8f8f8f;1:7f7f7f;2:747474;1:7f7f7f;1:747474;1:686868;2:747474;6:7f7f7f;1:747474;1:7f7f7f;1:747474;6:7f7f7f;2:686868;1:747474;1:7f7f7f;1:747474;1:7f7f7f;1:747474;2:686868;3:747474;1:686868;3:747474;7:7f7f7f;2:8f8f8f;1:7f7f7f;1:8f8f8f;2:7f7f7f;2:8f8f8f;3:7f7f7f;4:747474;2:7f7f7f;3:747474;1:7f7f7f;1:747474;1:7f7f7f;4:8f8f8f;1:747474;3:7f7f7f;1:8f8f8f;7:7f7f7f;2:747474;1:686868;1:747474;1:686868;1:747474;1:8f8f8f;1:747474;2:7f7f7f;3:8f8f8f;1:747474;2:8f8f8f;3:747474;4:7f7f7f;2:747474;2:686868;1:747474;1:686868;2:747474;2:7f7f7f;3:747474;3:7f7f7f;3:8f8f8f;1:7f7f7f;1:8f8f8f;2:7f7f7f;3:8f8f8f;5:7f7f7f;1:747474;2:7f7f7f;1:8f8f8f;3:7f7f7f;3:8f8f8f;2:7f7f7f;4:8f8f8f;1:7f7f7f;1:686868;1:7f7f7f;1:747474;1:7f7f7f;2:747474;2:686868;1:747474;1:7f7f7f;1:747474;2:7f7f7f;3:747474;5:7f7f7f;2:8f8f8f;5:7f7f7f;2:8f8f8f;1:7f7f7f;1:8f8f8f;1:7f7f7f;3:747474;1:7f7f7f;1:8f8f8f;1:7f7f7f;2:747474;2:7f7f7f;2:686868;1:747474;1:686868;1:747474;2:8f8f8f;1:7f7f7f;2:747474;2:7f7f7f;3:747474;2:7f7f7f;3:747474;1:8f8f8f;1:7f7f7f;2:747474;9:7f7f7f;4:8f8f8f;6:7f7f7f;2:747474;1:7f7f7f;2:8f8f8f;2:7f7f7f;1:747474;2:7f7f7f"},
dirt = {w=16,h=16,d="1:b9855c;2:966c4a;2:79553a;1:b9855c;2:966c4a;2:79553a;1:593d29;2:79553a;1:b9855c;1:79553a;1:b9855c;1:79553a;1:966c4a;1:593d29;2:79553a;1:966c4a;1:878787;1:593d29;1:79553a;1:b9855c;1:966c4a;1:79553a;1:b9855c;1:966c4a;2:593d29;1:b9855c;2:79553a;1:593d29;1:b9855c;3:79553a;1:b9855c;3:79553a;2:593d29;1:b9855c;1:79553a;1:966c4a;1:6c6c6c;1:b9855c;1:79553a;1:966c4a;1:593d29;1:79553a;1:b9855c;2:966c4a;1:79553a;1:966c4a;1:79553a;1:b9855c;1:966c4a;1:79553a;1:966c4a;1:79553a;1:966c4a;1:b9855c;1:593d29;1:966c4a;2:79553a;1:966c4a;1:593d29;1:79553a;1:6c6c6c;1:79553a;1:966c4a;1:593d29;2:79553a;1:593d29;2:966c4a;1:79553a;1:966c4a;3:593d29;2:79553a;1:593d29;3:79553a;2:b9855c;3:79553a;1:878787;2:79553a;2:b9855c;1:79553a;2:b9855c;1:79553a;1:966c4a;1:79553a;1:966c4a;2:79553a;2:b9855c;2:966c4a;2:79553a;1:966c4a;1:593d29;2:966c4a;2:79553a;3:966c4a;2:79553a;1:966c4a;1:79553a;1:966c4a;1:79553a;1:593d29;1:79553a;2:966c4a;3:79553a;1:593d29;2:79553a;1:966c4a;1:593d29;2:79553a;2:593d29;5:79553a;2:b9855c;1:79553a;1:966c4a;1:79553a;1:966c4a;1:79553a;2:b9855c;1:79553a;1:b9855c;1:966c4a;1:593d29;2:b9855c;1:593d29;2:966c4a;1:878787;1:79553a;1:966c4a;2:79553a;2:966c4a;1:b9855c;1:79553a;1:966c4a;1:6c6c6c;2:966c4a;1:79553a;1:593d29;1:966c4a;1:79553a;1:593d29;1:79553a;1:593d29;1:966c4a;1:79553a;2:966c4a;1:b9855c;7:79553a;2:b9855c;1:79553a;1:966c4a;2:79553a;1:745844;1:79553a;2:966c4a;1:79553a;1:593d29;1:b9855c;1:593d29;1:79553a;1:b9855c;3:966c4a;1:79553a;1:593d29;1:b9855c;1:79553a;1:593d29;1:79553a;1:593d29;2:b9855c;1:79553a;1:966c4a;2:79553a;3:966c4a;1:79553a;1:b9855c;2:966c4a;1:79553a;1:878787;1:79553a;2:966c4a;2:79553a;2:966c4a;1:79553a;1:593d29"},
cobble = {w=16,h=16,d="1:6e6d6d;1:616161;2:a6a6a6;1:525252;2:616161;1:a6a6a6;1:b5b5b5;1:a6a6a6;1:888788;1:616161;1:888788;1:b5b5b5;1:a6a6a6;1:888788;1:616161;1:a6a6a6;1:b5b5b5;2:888788;1:525252;2:b5b5b5;1:a6a6a6;2:888788;1:525252;1:616161;1:888788;1:6e6d6d;1:888788;1:616161;1:a6a6a6;1:888788;1:a6a6a6;1:6e6d6d;1:616161;1:a6a6a6;2:888788;1:a6a6a6;1:6e6d6d;1:616161;1:525252;1:616161;1:888788;1:6e6d6d;2:616161;1:888788;1:6e6d6d;2:616161;1:888788;1:6e6d6d;1:888788;1:6e6d6d;1:616161;1:888788;1:a6a6a6;1:888788;1:616161;2:525252;1:6e6d6d;1:616161;1:888788;1:b5b5b5;1:a6a6a6;1:616161;1:888788;2:616161;1:b5b5b5;3:a6a6a6;1:888788;1:616161;1:b5b5b5;1:6e6d6d;1:a6a6a6;1:b5b5b5;2:888788;1:6e6d6d;1:616161;1:525252;2:888788;1:b5b5b5;1:a6a6a6;1:888788;1:6e6d6d;1:888788;1:a6a6a6;1:888788;1:616161;1:888788;1:a6a6a6;2:888788;1:6e6d6d;2:616161;1:6e6d6d;1:a6a6a6;1:888788;1:6e6d6d;1:616161;1:b5b5b5;2:888788;2:6e6d6d;2:888788;1:6e6d6d;1:616161;1:888788;1:b5b5b5;1:a6a6a6;1:616161;1:6e6d6d;1:888788;1:616161;1:888788;1:6e6d6d;1:616161;1:b5b5b5;1:a6a6a6;2:6e6d6d;1:616161;1:888788;1:b5b5b5;3:888788;2:616161;1:525252;1:6e6d6d;1:616161;1:b5b5b5;1:a6a6a6;1:888788;1:6e6d6d;1:888788;2:6e6d6d;2:888788;1:616161;1:6e6d6d;1:616161;1:888788;1:a6a6a6;1:616161;1:888788;1:6e6d6d;1:888788;1:6e6d6d;1:888788;2:616161;1:525252;1:616161;2:6e6d6d;1:616161;1:525252;2:a6a6a6;1:b5b5b5;1:888788;2:6e6d6d;2:616161;1:6e6d6d;1:888788;1:b5b5b5;1:a6a6a6;2:616161;1:525252;1:888788;2:b5b5b5;1:888788;1:6e6d6d;1:888788;1:b5b5b5;1:a6a6a6;1:6e6d6d;1:616161;1:b5b5b5;1:a6a6a6;1:888788;1:a6a6a6;1:6e6d6d;1:616161;2:888788;1:6e6d6d;1:888788;1:616161;1:b5b5b5;1:a6a6a6;2:888788;1:616161;1:a6a6a6;1:888788;1:6e6d6d;2:888788;1:6e6d6d;2:616161;1:888788;1:6e6d6d;2:a6a6a6;1:888788;1:6e6d6d;1:888788;1:6e6d6d;1:616161;1:6e6d6d;2:888788;1:6e6d6d;1:616161;1:a6a6a6;1:888788;3:616161;1:888788;2:616161;1:6e6d6d;1:888788;1:6e6d6d;1:616161;1:6e6d6d;2:616161;1:888788;1:b5b5b5;1:a6a6a6;1:888788;1:6e6d6d"},
planks = {w=16,h=16,d="1:b8945f;1:af8f55;1:b8945f;5:c29d62;1:b8945f;5:c29d62;1:b8945f;1:967441;2:b8945f;2:af8f55;1:967441;1:9f844d;1:af8f55;3:b8945f;2:af8f55;2:b8945f;2:9f844d;1:af8f55;3:b8945f;1:af8f55;1:b8945f;1:af8f55;4:9f844d;2:af8f55;2:b8945f;2:967441;2:7e6237;2:967441;1:7e6237;2:67502c;2:7e6237;1:67502c;1:7e6237;2:67502c;1:7e6237;1:67502c;1:b8945f;1:c29d62;1:9f844d;4:c29d62;1:9f844d;3:c29d62;1:b8945f;2:af8f55;1:9f844d;1:b8945f;1:af8f55;2:b8945f;1:af8f55;1:9f844d;1:af8f55;1:9f844d;1:967441;1:9f844d;2:af8f55;4:b8945f;1:af8f55;2:9f844d;1:af8f55;1:b8945f;3:af8f55;1:967441;3:b8945f;2:af8f55;3:9f844d;2:67502c;2:7e6237;1:967441;1:7e6237;4:67502c;3:7e6237;1:967441;1:7e6237;1:67502c;1:b8945f;2:c29d62;1:b8945f;2:af8f55;8:c29d62;1:b8945f;1:9f844d;1:b8945f;1:af8f55;4:b8945f;1:af8f55;3:9f844d;1:af8f55;1:9f844d;1:af8f55;2:9f844d;1:967441;1:c29d62;1:b8945f;2:af8f55;4:9f844d;4:af8f55;2:9f844d;1:b8945f;1:9f844d;2:67502c;1:7e6237;2:967441;1:7e6237;3:67502c;1:7e6237;1:967441;2:7e6237;3:67502c;1:c29d62;1:9f844d;1:b8945f;2:c29d62;2:b8945f;1:9f844d;3:c29d62;1:9f844d;1:c29d62;1:b8945f;2:c29d62;2:af8f55;2:b8945f;2:9f844d;1:af8f55;2:9f844d;2:b8945f;1:af8f55;1:b8945f;4:af8f55;2:9f844d;1:af8f55;1:b8945f;1:af8f55;1:9f844d;1:967441;2:b8945f;1:af8f55;5:9f844d;1:67502c;2:7e6237;2:67502c;1:7e6237;3:967441;1:7e6237;1:67502c;1:7e6237;4:67502c"},
log = {w=16,h=16,d="1:745a36;1:4c3d26;1:917142;2:745a36;1:382b18;1:917142;2:745a36;1:382b18;1:745a36;1:917142;1:4c3d26;1:917142;1:745a36;1:5f4a2b;1:745a36;1:4c3d26;1:987849;1:5f4a2b;1:745a36;1:382b18;1:987849;1:5f4a2b;1:745a36;1:382b18;1:745a36;1:917142;1:4c3d26;2:745a36;1:5f4a2b;1:745a36;1:382b18;2:5f4a2b;1:745a36;1:382b18;1:987849;1:5f4a2b;1:745a36;1:4c3d26;1:745a36;2:4c3d26;2:745a36;1:5f4a2b;1:917142;1:382b18;1:745a36;1:5f4a2b;1:745a36;1:4c3d26;1:745a36;1:5f4a2b;1:745a36;1:5f4a2b;1:745a36;1:382b18;1:4c3d26;1:745a36;1:917142;1:5f4a2b;1:917142;1:4c3d26;1:745a36;1:5f4a2b;1:745a36;1:382b18;1:745a36;1:5f4a2b;1:987849;1:5f4a2b;1:745a36;1:5f4a2b;1:745a36;1:4c3d26;1:917142;1:745a36;1:917142;1:745a36;1:4c3d26;1:745a36;1:917142;1:4c3d26;1:745a36;1:4c3d26;1:987849;1:5f4a2b;1:917142;1:4c3d26;1:745a36;1:4c3d26;1:917142;1:745a36;1:5f4a2b;1:745a36;1:4c3d26;1:745a36;1:917142;2:5f4a2b;1:745a36;1:917142;1:745a36;1:917142;2:745a36;1:4c3d26;1:917142;1:745a36;1:5f4a2b;1:745a36;1:382b18;1:745a36;1:917142;1:745a36;1:5f4a2b;1:917142;2:745a36;1:917142;1:5f4a2b;1:745a36;1:5f4a2b;1:917142;2:745a36;1:4c3d26;1:382b18;1:987849;2:745a36;1:5f4a2b;1:917142;1:745a36;1:5f4a2b;1:917142;1:5f4a2b;1:917142;1:5f4a2b;1:917142;3:745a36;1:4c3d26;1:987849;2:745a36;1:5f4a2b;2:745a36;1:5f4a2b;1:917142;1:4c3d26;1:917142;1:745a36;1:382b18;4:745a36;1:917142;1:745a36;1:5f4a2b;1:745a36;1:382b18;1:745a36;1:5f4a2b;1:745a36;1:4c3d26;1:917142;1:745a36;1:382b18;2:745a36;1:4c3d26;1:745a36;1:917142;1:745a36;1:5f4a2b;1:745a36;1:382b18;1:987849;2:745a36;1:382b18;1:987849;1:745a36;1:4c3d26;1:745a36;1:987849;1:4c3d26;2:745a36;1:917142;1:5f4a2b;1:917142;1:382b18;1:987849;1:5f4a2b;1:745a36;1:382b18;2:745a36;1:5f4a2b;1:745a36;1:987849;1:745a36;1:4c3d26;1:745a36;1:917142;2:745a36;1:4c3d26;1:917142;1:5f4a2b;1:745a36;1:4c3d26;4:745a36;1:917142;1:745a36;1:4c3d26;1:917142;2:745a36;1:917142;1:382b18;1:745a36;1:4c3d26;1:745a36;2:4c3d26;1:917142;2:745a36;1:917142;1:745a36;1:4c3d26;1:917142;1:4c3d26;1:745a36;1:917142;1:4c3d26;1:745a36;1:4c3d26;2:745a36;1:4c3d26;1:917142;1:745a36;1:5f4a2b"},
log_top = {w=16,h=16,d="1:5f4a2b;1:4c3d26;1:5f4a2b;1:745a36;1:5f4a2b;1:4c3d26;2:5f4a2b;1:745a36;1:4c3d26;2:5f4a2b;1:4c3d26;3:5f4a2b;1:4c3d26;4:b8945f;1:af8f55;1:b8945f;1:af8f55;1:c29d62;2:af8f55;4:b8945f;1:4c3d26;1:5f4a2b;1:b8945f;2:7e6237;2:967441;1:9f844d;1:967441;4:9f844d;2:967441;1:c29d62;2:5f4a2b;1:b8945f;1:7e6237;2:c29d62;4:b8945f;1:af8f55;3:b8945f;1:967441;1:b8945f;2:5f4a2b;1:af8f55;1:967441;1:b8945f;8:af8f55;1:b8945f;1:9f844d;1:af8f55;1:5f4a2b;1:4c3d26;1:b8945f;1:9f844d;1:b8945f;1:af8f55;2:967441;2:9f844d;2:967441;1:af8f55;1:b8945f;1:967441;1:af8f55;1:4c3d26;1:5f4a2b;1:af8f55;1:967441;2:af8f55;1:7e6237;4:af8f55;1:967441;2:af8f55;1:967441;1:b8945f;2:5f4a2b;1:af8f55;1:9f844d;1:b8945f;1:af8f55;1:967441;1:af8f55;2:9f844d;1:af8f55;1:9f844d;1:af8f55;1:b8945f;1:9f844d;1:af8f55;2:5f4a2b;1:af8f55;1:9f844d;1:b8945f;1:af8f55;1:967441;1:af8f55;1:9f844d;1:967441;1:af8f55;1:967441;1:af8f55;1:b8945f;1:967441;1:af8f55;1:5f4a2b;1:4c3d26;1:af8f55;1:9f844d;1:b8945f;1:af8f55;1:967441;4:af8f55;1:9f844d;2:af8f55;1:967441;1:af8f55;1:4c3d26;1:5f4a2b;1:af8f55;1:967441;1:b8945f;1:af8f55;2:967441;1:7e6237;1:967441;2:9f844d;1:af8f55;1:b8945f;1:9f844d;1:af8f55;2:5f4a2b;1:af8f55;1:9f844d;1:b8945f;8:af8f55;1:b8945f;1:967441;1:af8f55;1:5f4a2b;1:4c3d26;1:b8945f;1:9f844d;2:b8945f;1:af8f55;5:b8945f;1:c29d62;1:b8945f;1:967441;1:af8f55;1:4c3d26;1:5f4a2b;1:b8945f;1:9f844d;1:967441;1:9f844d;9:967441;1:b8945f;2:5f4a2b;3:b8945f;2:af8f55;1:b8945f;2:af8f55;1:c29d62;2:af8f55;3:b8945f;2:5f4a2b;1:4c3d26;3:5f4a2b;1:4c3d26;2:5f4a2b;1:745a36;1:4c3d26;2:5f4a2b;1:4c3d26;1:745a36;2:5f4a2b"},
grass_top = {w=16,h=16,d="1:546d33;1:6e9044;1:536c33;2:4c632e;1:516931;1:485e2c;1:4f6730;1:597537;1:556f34;1:4e6630;1:4c642f;1:4d652f;1:5e7b3a;1:3f5327;1:506831;1:546e34;1:4f6730;1:5a7637;1:556f34;1:577135;1:485e2c;1:577135;1:49602d;1:485e2c;1:607d3a;1:5e7b39;1:536c33;1:6e9044;1:4f6730;1:4c642f;1:4f6730;1:5c7838;1:506831;1:475c2b;1:4b612e;1:4d652f;1:4d642f;2:516a32;1:546d33;1:5a7537;1:5f7c3a;1:62803c;1:4c642f;1:435829;1:485e2c;1:67863f;1:435729;1:4b622e;1:4e6630;1:556f34;1:526b32;1:577135;1:475c2b;1:536c32;1:485e2c;1:4a612d;1:506831;1:556f34;1:516931;1:4f6730;1:5e7b3a;1:475c2b;1:5c7838;1:4a612d;1:62803c;1:4a612d;1:617f3c;1:62803c;1:4d642f;1:617f3c;1:698940;1:425628;1:485e2c;1:5e7b3a;1:617e3b;1:475d2b;1:4d642f;1:506831;1:577135;1:567035;1:445829;1:5e7b39;1:495f2d;1:556f34;1:546e34;1:587236;1:4c642f;1:546e34;1:4d642f;1:4a612d;1:445829;1:4d642f;1:506931;1:546d33;1:475d2b;1:587336;1:5d7a39;1:516a32;1:536c32;1:4a612d;1:4e6630;1:485e2c;1:4b612e;1:4c642f;1:66863f;1:617f3c;1:526b32;1:5e7b3a;1:556f34;2:516931;1:4c642f;1:597436;1:4f6730;1:516a32;1:465b2b;1:5d7939;1:4b612e;1:556f34;1:62803c;1:4c642f;1:495f2d;1:516931;1:5a7637;1:485e2c;1:607d3a;1:5e7b3a;1:587236;1:67863f;1:607e3b;1:617f3c;1:495f2d;1:62803c;1:587336;1:65843e;1:607e3b;1:49602d;1:536c32;1:4b622e;1:536c33;1:597537;1:475d2b;1:556f34;1:49602d;1:68873f;1:506831;1:4f6730;1:567035;1:607e3b;1:485e2c;1:4c642f;1:526b32;1:536c32;1:607d3a;1:506931;1:65843e;1:516931;1:495f2d;1:587236;1:597537;1:556f34;1:5d7a39;1:49602d;1:67863f;1:506931;1:536c33;1:6d8e43;1:44592a;1:5e7b3a;1:4a612d;1:516931;1:4d642f;1:556f34;1:516931;1:4b612e;1:62803c;1:4c632e;1:5c7838;1:556f34;1:4b612e;1:536c32;1:4d652f;1:556f34;1:536c32;1:4f6730;1:455b2a;1:65843e;1:485e2c;1:475c2b;1:4e6630;1:698940;1:556f34;1:495f2d;1:4e6630;1:577135;1:526b32;1:4b622e;1:455a2a;1:4e6630;1:526b32;1:4e6630;1:475c2b;1:5a7537;1:5d7a39;1:44592a;1:556f34;1:495f2d;1:5f7c3a;1:435729;1:536c32;1:475c2b;1:577135;1:495f2d;1:6e9044;1:5b7738;1:536c33;1:5f7c3a;1:587236;1:5a7637;1:4d642f;1:5f7c3a;1:62803c;1:5c7838;1:5b7738;1:6d8e43;1:455b2a;1:65843e;1:617e3b;1:546d33;1:536c33;1:475d2b;2:546e34;1:4c642f;1:607d3a;1:597436;1:4f6730;1:44592a;1:4b622e;1:556f34;1:4d642f;1:4d652f;1:5d7939;1:567035;1:546d33;1:536c33;1:506931;1:6c8d42;1:465b2b;1:607d3a;1:4b612e;1:516a32;1:4d642f;1:597537"},
grass_side = {w=16,h=16,d="1:607d3a;1:516a32;1:556f34;1:4f6730;1:607d3a;1:516a32;1:607d3a;2:556f34;1:5a7537;1:607d3a;1:5a7537;1:65833e;1:495f2d;1:5a7537;1:556f34;1:607d3a;1:4f6730;1:607d3a;1:516a32;1:65833e;1:593d29;1:607d3a;1:49602d;1:65833e;1:556f34;1:607d3a;1:536c33;1:607d3a;1:4f6730;1:607d3a;1:4f6730;1:556f34;1:593d29;1:65833e;1:4b612e;1:607d3a;1:593d29;1:516a32;1:593d29;1:607d3a;1:5a7537;1:556f34;1:62803c;1:593d29;1:435829;1:556f34;2:593d29;1:6c6c6c;2:593d29;1:526b32;3:593d29;1:485e2c;1:593d29;1:506831;1:593d29;1:79553a;2:593d29;1:79553a;1:966c4a;1:79553a;1:966c4a;1:b9855c;1:593d29;1:966c4a;2:79553a;3:593d29;1:6c6c6c;1:79553a;1:966c4a;1:593d29;2:79553a;1:593d29;2:966c4a;1:79553a;1:966c4a;3:593d29;2:79553a;1:593d29;3:79553a;2:b9855c;3:79553a;1:878787;2:79553a;2:b9855c;1:79553a;2:b9855c;1:79553a;1:966c4a;1:79553a;1:966c4a;2:79553a;2:b9855c;2:966c4a;2:79553a;1:966c4a;1:593d29;2:966c4a;2:79553a;3:966c4a;2:79553a;1:966c4a;1:79553a;1:966c4a;1:79553a;1:593d29;1:79553a;2:966c4a;3:79553a;1:593d29;2:79553a;1:966c4a;1:593d29;2:79553a;2:593d29;5:79553a;2:b9855c;1:79553a;1:966c4a;1:79553a;1:966c4a;1:79553a;2:b9855c;1:79553a;1:b9855c;1:966c4a;1:593d29;2:b9855c;1:593d29;2:966c4a;1:878787;1:79553a;1:966c4a;2:79553a;2:966c4a;1:b9855c;1:79553a;1:966c4a;1:6c6c6c;2:966c4a;1:79553a;1:593d29;1:966c4a;1:79553a;1:593d29;1:79553a;1:593d29;1:966c4a;1:79553a;2:966c4a;1:b9855c;7:79553a;2:b9855c;1:79553a;1:966c4a;2:79553a;1:745844;1:79553a;2:966c4a;1:79553a;1:593d29;1:b9855c;1:593d29;1:79553a;1:b9855c;3:966c4a;1:79553a;1:593d29;1:b9855c;1:79553a;1:593d29;1:79553a;1:593d29;2:b9855c;1:79553a;1:966c4a;2:79553a;3:966c4a;1:79553a;1:b9855c;2:966c4a;1:79553a;1:878787;1:79553a;2:966c4a;2:79553a;2:966c4a;1:79553a;1:593d29"},
ct_top = {w=16,h=16,d="1:19140c;2:0e0b06;1:19140c;1:41230e;6:733920;1:41230e;1:1a150d;1:0e0b06;1:1a150d;1:19140c;1:0e0b06;2:bc9862;1:41230e;1:9e5932;6:ae693c;1:9e5932;1:41230e;2:bc9862;2:0e0b06;1:bc9862;1:41230e;10:ae693c;1:41230e;1:bc9862;1:0e0b06;1:19140c;1:41230e;1:ae693c;1:553824;1:4b2b18;3:553824;4:4b2b18;1:553824;1:ae693c;1:41230e;1:19140c;1:41230e;1:9e5932;1:ae693c;1:553824;1:9e5932;1:ae693c;1:553824;2:ae693c;1:4b2b18;2:ae693c;1:553824;1:ae693c;1:9e5932;1:41230e;1:733920;2:ae693c;1:553824;2:ae693c;1:4b2b18;1:9e5932;1:ae693c;1:553824;1:9e5932;1:ae693c;1:553824;2:ae693c;2:733920;2:ae693c;2:553824;1:4b2b18;2:553824;1:4b2b18;2:553824;1:4b2b18;1:553824;2:ae693c;2:733920;2:ae693c;1:553824;2:ae693c;1:553824;2:ae693c;1:553824;2:ae693c;1:553824;2:ae693c;2:733920;2:ae693c;1:553824;2:ae693c;1:553824;2:ae693c;1:553824;2:ae693c;1:553824;2:ae693c;2:733920;2:ae693c;3:4b2b18;1:553824;2:4b2b18;2:553824;1:4b2b18;1:553824;2:ae693c;2:733920;2:ae693c;1:4b2b18;1:9e5932;1:ae693c;1:4b2b18;1:ae693c;1:9e5932;1:4b2b18;2:ae693c;1:553824;2:ae693c;1:733920;1:41230e;1:9e5932;1:ae693c;1:553824;1:9e5932;1:ae693c;1:4b2b18;2:ae693c;1:4b2b18;1:9e5932;1:ae693c;1:553824;1:ae693c;1:9e5932;1:41230e;1:1a150d;1:41230e;1:ae693c;2:553824;1:4b2b18;7:553824;1:ae693c;1:41230e;1:1a150d;1:0e0b06;1:bc9862;1:41230e;10:ae693c;1:41230e;1:bc9862;1:0e0b06;1:1a150d;2:bc9862;1:41230e;1:9e5932;6:ae693c;1:9e5932;1:41230e;2:bc9862;1:1a150d;1:19140c;1:1a150d;1:0e0b06;1:1a150d;1:41230e;6:733920;1:41230e;1:19140c;2:0e0b06;1:19140c"},
ct_front = {w=16,h=16,d="1:19140c;1:af8f55;1:b8945f;2:c29d62;1:382116;1:733920;2:4b2b18;1:733920;1:382116;3:c29d62;1:b8945f;2:19140c;1:b8945f;2:af8f55;1:967441;1:9f844d;1:382116;2:4b2b18;1:382116;2:af8f55;2:b8945f;1:9f844d;2:19140c;3:b8945f;1:af8f55;1:b8945f;1:af8f55;2:382116;2:9f844d;2:af8f55;2:b8945f;2:19140c;2:7e6237;2:967441;1:7e6237;1:67502c;2:1b160d;1:7e6237;1:67502c;3:41230e;1:7e6237;2:19140c;1:c29d62;1:9f844d;4:c29d62;2:4b2b18;2:c29d62;1:281e0b;1:af8f55;1:281e0b;1:9f844d;2:19140c;2:b8945f;1:41230e;1:9f844d;1:af8f55;1:9f844d;2:382116;2:af8f55;3:281e0b;1:b8945f;2:19140c;1:9f844d;1:af8f55;1:281e0b;3:af8f55;2:382116;2:b8945f;3:b5b5b5;1:9f844d;2:19140c;1:67502c;1:7e6237;1:281e0b;1:967441;1:7e6237;1:67502c;2:1b160d;1:67502c;1:7e6237;1:ffffff;2:d8d8d8;1:7e6237;2:19140c;2:c29d62;1:281e0b;2:af8f55;1:c29d62;2:4b2b18;2:c29d62;1:ffffff;2:d8d8d8;1:b8945f;2:19140c;1:af8f55;3:d8d8d8;1:b8945f;1:af8f55;2:382116;1:9f844d;1:af8f55;1:9f844d;2:d8d8d8;1:9f844d;2:19140c;1:b8945f;1:b5b5b5;1:d8d8d8;1:ffffff;2:9f844d;2:382116;3:af8f55;1:ffffff;1:d8d8d8;1:b8945f;2:19140c;1:67502c;1:7e6237;2:967441;1:7e6237;1:67502c;2:110e08;1:7e6237;1:967441;2:7e6237;1:d8d8d8;1:67502c;2:19140c;1:9f844d;1:b8945f;2:c29d62;2:b8945f;2:4b2b18;2:c29d62;1:9f844d;1:c29d62;1:ffffff;1:c29d62;2:19140c;1:af8f55;2:b8945f;2:9f844d;1:af8f55;2:382116;2:b8945f;1:af8f55;1:b8945f;2:af8f55;2:19140c;2:9f844d;1:af8f55;1:b8945f;1:af8f55;1:9f844d;2:382116;1:b8945f;1:af8f55;4:9f844d;1:19140c;1:1b160d;2:7e6237;2:67502c;1:7e6237;1:967441;1:19140c;1:1b160d;1:7e6237;1:67502c;1:7e6237;3:67502c;1:1b160d"},
ct_side = {w=16,h=16,d="1:19140c;1:af8f55;1:b8945f;2:c29d62;1:382116;1:733920;2:4b2b18;1:733920;1:382116;3:c29d62;1:b8945f;2:19140c;1:b8945f;2:af8f55;1:967441;1:9f844d;1:382116;2:4b2b18;1:382116;2:af8f55;2:b8945f;1:9f844d;2:19140c;3:b8945f;1:af8f55;1:b8945f;1:af8f55;2:262012;2:9f844d;2:af8f55;2:b8945f;2:19140c;2:7e6237;2:967441;1:7e6237;1:67502c;2:1b160d;1:7e6237;1:67502c;1:7e6237;2:67502c;1:7e6237;2:19140c;1:c29d62;1:9f844d;4:c29d62;2:4b2b18;2:c29d62;1:b8945f;2:af8f55;1:9f844d;2:19140c;2:b8945f;1:41230e;1:9f844d;1:41230e;1:9f844d;2:382116;2:af8f55;4:b8945f;2:19140c;1:9f844d;1:af8f55;1:281e0b;1:af8f55;1:281e0b;1:af8f55;2:382116;2:b8945f;2:af8f55;2:9f844d;2:19140c;1:67502c;2:7e6237;1:d8d8d8;1:7e6237;1:67502c;2:1b160d;1:67502c;3:7e6237;1:967441;1:7e6237;2:19140c;2:c29d62;1:d8d8d8;1:af8f55;1:d8d8d8;1:c29d62;2:4b2b18;5:c29d62;1:b8945f;2:19140c;1:af8f55;1:b8945f;1:b5b5b5;1:b8945f;1:b5b5b5;1:af8f55;2:382116;1:9f844d;1:af8f55;1:9f844d;1:af8f55;2:9f844d;2:19140c;1:b8945f;2:af8f55;3:9f844d;2:382116;3:af8f55;2:9f844d;1:b8945f;2:19140c;1:67502c;1:7e6237;2:967441;1:7e6237;1:67502c;2:110e08;1:7e6237;1:967441;2:7e6237;2:67502c;2:19140c;1:9f844d;1:b8945f;2:c29d62;2:b8945f;2:4b2b18;2:c29d62;1:9f844d;1:c29d62;1:b8945f;1:c29d62;2:19140c;1:af8f55;2:b8945f;2:9f844d;1:af8f55;2:382116;2:b8945f;1:af8f55;1:b8945f;2:af8f55;2:19140c;2:9f844d;1:af8f55;1:b8945f;1:af8f55;1:9f844d;2:382116;1:b8945f;1:af8f55;4:9f844d;1:19140c;1:1b160d;2:7e6237;2:67502c;1:7e6237;1:967441;1:19140c;1:1b160d;1:7e6237;1:67502c;1:7e6237;3:67502c;1:1b160d"},
}
local PALETTE = {
A = Color3.fromRGB(43, 30, 13),
B = Color3.fromRGB(51, 36, 17),
C = Color3.fromRGB(129, 83, 57),
D = Color3.fromRGB(63, 42, 21),
E = Color3.fromRGB(118, 75, 51),
F = Color3.fromRGB(144, 89, 63),
G = Color3.fromRGB(143, 94, 62),
H = Color3.fromRGB(73, 37, 16),
I = Color3.fromRGB(36, 24, 8),
J = Color3.fromRGB(155, 99, 73),
K = Color3.fromRGB(179, 121, 94),
L = Color3.fromRGB(183, 131, 107),
M = Color3.fromRGB(170, 114, 89),
N = Color3.fromRGB(52, 37, 18),
O = Color3.fromRGB(255, 255, 255),
P = Color3.fromRGB(82, 61, 137),
Q = Color3.fromRGB(106, 64, 48),
R = Color3.fromRGB(148, 96, 62),
S = Color3.fromRGB(119, 66, 53),
T = Color3.fromRGB(66, 29, 10),
U = Color3.fromRGB(38, 26, 10),
V = Color3.fromRGB(58, 49, 137),
W = Color3.fromRGB(55, 55, 55),
X = Color3.fromRGB(40, 40, 40),
Y = Color3.fromRGB(0, 204, 204),
Z = Color3.fromRGB(0, 175, 175),
a = Color3.fromRGB(0, 164, 164),
b = Color3.fromRGB(10, 188, 188),
c = Color3.fromRGB(65, 53, 155),
d = Color3.fromRGB(70, 58, 165),
e = Color3.fromRGB(4, 149, 149),
f = Color3.fromRGB(0, 127, 127),
g = Color3.fromRGB(5, 136, 136),
h = Color3.fromRGB(0, 104, 104),
i = Color3.fromRGB(3, 122, 122),
j = Color3.fromRGB(74, 74, 74),
k = Color3.fromRGB(63, 63, 63),
l = Color3.fromRGB(85, 85, 85)
}
local SKIN = {
"........AABAABBACCCCCCCC........................................",
"........ABDABDBACCEEEECC........................................",
"........ADBABABAFEEEEEEF........................................",
"........ABABBBABFEEEEEEF........................................",
"........AAABDABDFCEEEECF........................................",
"........BBAABADDCFCCCCFG........................................",
"........BDBABBBBGCGCGCGC........................................",
"........ABBADBAACGHHHHCG........................................",
"AABBAIAABBDDDDBAAAIABBAAABAAIABA................................",
"ABAAIIBBIBBDDBDBDBIIAABAABDAIIBD................................",
"BDBAABDBAJKLKMJNBDBAADBBABBAAIBB................................",
"AIABBIAAJMKKMMMJAAIBBAIABBABAAAB................................",
"ABABAFJIMOPMJPOMIJFABABABIIBBAIB................................",
"BBABIJJJJMMQQMMJJJJIBABBAIIABIIA................................",
"IAIFJGCRFGHSSTGCRCGJFIAIAIIAAIIA................................",
"CFFJGJGCRCTHTHCGFGJGJFFCCCUUUUCC................................",
"....VVVVWWXX........YMJFFJMYVVVVVVVV........ZZZaJMMM............",
"....VVVVXXWW........YJFFFFJYVVVVVVVV........ZZZaMMJF............",
"....VVVVWWXX........YJFFFFJYVVVVVVVV........ZbZaMMMM............",
"....VVVVXXWW........YMJFFJMYVVVVVVVV........aZZaJMJF............",
"ccVcdddVcVcccddVeeeeZaMJJMaZeeeeZaaeeeaZZZZaaaZZffffZZZZ........",
"cVVcdddVcVccddddeggeZZeMMeZZeggeZZZZaZZZZZaaaZZZfhhfZaaZ........",
"cVccdddccVccddddgiigaZaZgaZagiigeZZZeZZeZaaZZZaefhhfZZaa........",
"cVccdddccVccdccdiiiieZZZeZZeiiiiaZZaeZZaffffffffhhhhffff........",
"cVcccVVcccVcVVVViiiigaZZeZZgiiiiaZZeaZZaJJJFJFJFFFFFFJJJ........",
"cVccdccdcVVccVVcgiiggaaZeZZggiigeZZeZZZeMMMJMJMMJFJJMMMM........",
"cVccddddcVccddddggggeZZaeaZgggggeZZaZZaeJMMMMJMJJFJJMJJM........",
"ccccddddcVccddddeggegZZeaaaeeggeeZZaZaaeJMMMMMMJJFJFMMMM........",
"VVccddccccVVccccegeegeaeZZaeeegeaZZaaaegJMJMMMMJJJJFMMMM........",
"jjVVVVVVVVjjjjjjeeeegeegaZZeeeeeaaaeaeggMMJMMMMMJJJJMMMM........",
"WkjjjljjjjkWkjjkcVcVVVccVgaegVVccgegegVdMMJMMMJMJJJJMJMM........",
"WWWkkjjkkWWWWkkWcVcccddcdcggcVccddcVgcddJMMJJMJJFJFJJJMJ........",
"................................................................",
"................................................................",
"................................................................",
"................................................................",
"................................................................",
"................................................................",
"................................................................",
"........................................bbbbbbbZaaaaZbbb........",
"................................................................",
"................................................................",
"................................................................",
"................................................................",
"................................................................",
"................................................................",
"................................................................",
"................................................................",
"....................VVVVXXWW........aZZZMMMJ....................",
"....................VVVVWWXX........aZZZFJMM....................",
"....................VVVVXXWW........aZbZMMMM....................",
"....................VVVVWWXX........aZZaFJMJ....................",
"................ccVcddcccVccdddcffffZZaaaZZZZZZZ................",
"................ccVccdddcVVcddddfhhfZZZaaaZZZaaZ................",
"................ccVcVdddccVcddddfhhfeaZZZaaZaaZZ................",
"................ccVccdddccVcdccdhhhhffffffffffffaaaaZbbbbbbbbbbZ",
"................cVcccVVcccVcVVVVFFFFFJFJFJJJJJJF................",
"................cVVccccdccVccVVcJJFJMMJMJMMMMMMM................",
"................ccVccdddccVcddddJJFJJMJMMMMJMJJM................",
"................ccVcVdddccccddddFJFJJMMMMMMJMMMM................",
"................VVccVcddccVVccccFJJJJMMMMJMJMMMM................",
"................jjVVVVVVVVjjjjjjJJJJMMMMMJMMMMMM................",
"................WkjjjljjjjkWkjjkJJJJMJMMMJMMMMJM................",
"................WWWkkjjkkWWWWkkWJFJFJJMJJMMJJMJJ................"
}
F.decodeRLE = function(s)
local px, i = {}, 0
for count, hex in s:gmatch("(%d+):([%x%-]+)") do
local c = false
if hex ~= "-" then
c = Color3.fromRGB(tonumber(hex:sub(1, 2), 16), tonumber(hex:sub(3, 4), 16), tonumber(hex:sub(5, 6), 16))
end
for _ = 1, tonumber(count) do i += 1 px[i] = c end
end
return px
end
F.buildImage = function(img, s)
if not img.px then img.px = F.decodeRLE(img.d) end
local px, w, h = img.px, img.w, img.h
local f = Instance.new("Frame")
f.Size = UDim2.fromOffset(w * s, h * s)
f.BackgroundTransparency = 1
f.BorderSizePixel = 0
for y = 0, h - 1 do
local x = 0
while x < w do
local c = px[y * w + x + 1]
local run = 1
while x + run < w and px[y * w + x + run + 1] == c do run += 1 end
if c then
local p = Instance.new("Frame")
p.BorderSizePixel = 0
p.BackgroundColor3 = c
p.Position = UDim2.fromOffset(x * s, y * s)
p.Size = UDim2.fromOffset(run * s, s)
p.Parent = f
end
x += run
end
end
return f
end
local vp = camera.ViewportSize
local GS = math.clamp(math.floor(math.min(vp.X / 200, vp.Y / 180)), 1, 4)
F.getPixel = function(x, y)
return PALETTE[SKIN[y + 1]:sub(x + 1, x + 1)]
end
local model = Instance.new("Model")
model.Name = "MinecraftSteve"
F.paintFace = function(part, face, u, v, w, h, flipX, flipY)
local g = Instance.new("SurfaceGui")
g.Face = face
g.SizingMode = Enum.SurfaceGuiSizingMode.FixedSize
g.CanvasSize = Vector2.new(w * 16, h * 16)
g.LightInfluence = 0.7
g.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
g.Parent = part
for row = 0, h - 1 do
local ty = v + (flipY and (h - 1 - row) or row)
local col = 0
while col < w do
local function tx(c) return u + (flipX and (w - 1 - c) or c) end
local c = F.getPixel(tx(col), ty)
local run = 1
while col + run 0 then
bodySwingYaw = math.sin(math.sqrt(swingProgress) * pi * 2) * 0.2
local eased = 1 - swingProgress
eased = 1 - eased * eased * eased * eased
local f2 = math.sin(eased * pi)
local f3 = math.sin(swingProgress * pi) * -(pitch - 0.7) * 0.75
rArmX -= f2 * 1.2 + f3
-- Main-hand arm receives body yaw plus the extra 2x ModelBiped swing term.
rArmY += bodySwingYaw * 3
lArmY += bodySwingYaw
lArmX += bodySwingYaw
rArmSwingZ = math.sin(swingProgress * pi) * -0.4
end
-- Keep eating as a held-input action, with the arm easing toward the mouth
-- during the same 32-tick use window as Java 1.12.x, not really accurate tho.
if eatBlend > 0.001 then
rArmX -= eatBlend * eatPull * 0.48
end
local rLegX = math.cos(walkPos * 0.6662) * 1.4 * walkSpeed
local lLegX = math.cos(walkPos * 0.6662 + pi) * 1.4 * walkSpeed
local headP, bodyP = Vector3.new(0, 0, 0), Vector3.new(0, 0, 0)
local rArmP = Vector3.new(-math.cos(bodySwingYaw) * 5, 2, math.sin(bodySwingYaw) * 5)
local lArmP = Vector3.new(math.cos(bodySwingYaw) * 5, 2, -math.sin(bodySwingYaw) * 5)
local rLegP, lLegP = Vector3.new(-1.9, 12, 0), Vector3.new(1.9, 12, 0)
local bodyX = 0
if crouch then
bodyX = 0.5
rArmX += 0.4 lArmX += 0.4
rLegP += Vector3.new(0, 0, 4) lLegP += Vector3.new(0, 0, 4)
headP += Vector3.new(0, 4.2, 0)
bodyP += Vector3.new(0, 3.2, 0)
rArmP += Vector3.new(0, 3.2, 0) lArmP += Vector3.new(0, 3.2, 0)
end
local rBobZ = math.cos(age * 0.09) * 0.05 + 0.05
local lBobZ = -rBobZ
rArmX += math.sin(age * 0.067) * 0.05
lArmX -= math.sin(age * 0.067) * 0.05
F.placeHead(root, headP, pitch, relYaw)
F.placeLimb(limbs.body, root, bodyP, bodyX, bodySwingYaw, 0)
F.placeLimb(limbs.rightArm, root, rArmP, rArmX, rArmY, rBobZ + rArmSwingZ)
F.placeLimb(limbs.leftArm, root, lArmP, lArmX, lArmY, lBobZ)
F.placeLimb(limbs.rightLeg, root, rLegP, rLegX, 0.005, 0.005)
F.placeLimb(limbs.leftLeg, root, lLegP, lLegX, -0.005, -0.005)
return rArmP, rArmX, rBobZ, rArmY, rArmSwingZ
end
local ITEMS = {
diamond_sword = { name = "Diamond Sword", max = 1 },
diamond_pickaxe = { name = "Diamond Pickaxe", max = 1 },
diamond_axe = { name = "Diamond Axe", max = 1 },
diamond_shovel = { name = "Diamond Shovel", max = 1 },
cooked_beef = { name = "Steak" },
bread = { name = "Bread" },
apple = { name = "Apple" },
torch = { name = "Torch" },
stick = { name = "Stick" },
coal = { name = "Coal" },
iron_ingot = { name = "Iron Ingot" },
diamond = { name = "Diamond" },
bucket = { name = "Bucket", max = 16 },
stone = { name = "Stone", placeable = true, hardness = 1.5 },
dirt = { name = "Dirt", placeable = true, hardness = 0.5 },
cobblestone = { name = "Cobblestone", placeable = true, hardness = 2.0 },
oak_planks = { name = "Oak Planks", placeable = true, hardness = 2.0 },
oak_log = { name = "Oak Log", placeable = true, hardness = 2.0 },
grass_block = { name = "Grass Block", placeable = true, hardness = 0.6 },
crafting_table = { name = "Crafting Table", placeable = true, hardness = 2.5 },
ladder = { name = "Ladder", placeable = true, hardness = 0.4 },
}
local slots = {}
local carried = nil
F.maxOf = function(id) return ITEMS[id].max or 64 end
F.canPlace = function(idx, st)
if idx == 0 or st == nil or ITEMS[st.id] == nil then return false end
if idx >= 5 and idx 1 then
for i = a, b do
local s = slots[i]
if s and s.id == st.id and s.n < F.maxOf(s.id) then
local mv = math.min(F.maxOf(s.id) - s.n, st.n)
s.n += mv st.n -= mv
if st.n <= 0 then return true end
end
end
end
for i = a, b do
if not slots[i] and F.canPlace(i, st) then
slots[i] = { id = st.id, n = st.n }
st.n = 0
return true
end
end
return st.n = n
end
F.give = function(id, n, a, b)
local st = { id = id, n = n }
F.insertStack(st, a or 9, b or 44)
end
F.updateCraft = function()
local g = {}
local count = 0
for i = 1, 4 do g[i] = slots[i] and slots[i].id or nil if g[i] then count += 1 end end
local r = nil
if count == 1 then
for i = 1, 4 do if g[i] == "oak_log" then r = { id = "oak_planks", n = 4 } end end
elseif count == 2 then
if (g[1] == "oak_planks" and g[3] == "oak_planks") or (g[2] == "oak_planks" and g[4] == "oak_planks") then
r = { id = "stick", n = 4 }
elseif (g[1] == "coal" and g[3] == "stick") or (g[2] == "coal" and g[4] == "stick") then
r = { id = "torch", n = 4 }
end
elseif count == 4 then
if g[1] == "oak_planks" and g[2] == "oak_planks" and g[3] == "oak_planks" and g[4] == "oak_planks" then
r = { id = "crafting_table", n = 1 }
end
end
slots[0] = r
end
F.consumeCraft = function()
for i = 1, 4 do
local s = slots[i]
if s then s.n -= 1 if s.n <= 0 then slots[i] = nil end end
end
F.updateCraft()
end
slots[36] = { id = "diamond_sword", n = 1 }
slots[37] = { id = "diamond_pickaxe", n = 1 }
slots[38] = { id = "diamond_axe", n = 1 }
slots[39] = { id = "diamond_shovel", n = 1 }
slots[40] = { id = "cooked_beef", n = 64 }
slots[41] = { id = "oak_planks", n = 64 }
slots[42] = { id = "cobblestone", n = 64 }
slots[43] = { id = "grass_block", n = 64 }
slots[44] = { id = "dirt", n = 64 }
F.give("stone", 64) F.give("dirt", 64) F.give("oak_log", 64)
F.give("stick", 64) F.give("coal", 64) F.give("iron_ingot", 64) F.give("diamond", 32)
F.give("apple", 64) F.give("bread", 64) F.give("bucket", 1)
F.give("ladder", 64) -- Crafting table and torch remain available through crafting recipes.
local abilities = {
invulnerable = true,
flying = false,
mayfly = true,
instabuild = true,
mayBuild = true,
flyingSpeed = 0.05,
walkingSpeed = 0.1,
}
local creative = true
local jumpTriggerTime = 0
local pos, eyeH, selected, refresh, touchJumpHeld, yaw, pitch, rp
local invOpen = false
local inventoryPage = "creative"
local hudVisible = true
local creativePlaceholder = nil
local creativePlaceholderOpen = false
local creativeTabButton = nil
local panel
local debugPanel, debugText
local chatPanel, chatInput, chatHistoryLabel, chatRowsFrame
local chatOpen = false
local mobileDpad = nil
local mobileMoveVector = Vector3.zero
local mobileHeldDirections = { Forward = false, Back = false, Left = false, Right = false }
local lastMobileForwardTap = -math.huge
local sprintLatch = false
local prevPos, vel
local recalcTouchMove
pos = Vector3.new(0, 10, 0)
eyeH = 1.62
selected = 0
touchJumpHeld = false
yaw, pitch = 0, 0
rp = RaycastParams.new()
rp.FilterType = Enum.RaycastFilterType.Exclude
rp.RespectCanCollide = true
local entityRayParams = RaycastParams.new()
entityRayParams.FilterType = Enum.RaycastFilterType.Exclude
entityRayParams.RespectCanCollide = false
F.setGameMode = function(isCreative)
creative = isCreative
if isCreative then
abilities.mayfly = true
abilities.instabuild = true
abilities.invulnerable = true
abilities.mayBuild = true
else
abilities.mayfly = false
abilities.instabuild = false
abilities.invulnerable = false
abilities.flying = false
abilities.mayBuild = true
end
if not invOpen then
inventoryPage = isCreative and "creative" or "survival"
else
inventoryPage = isCreative and "creative" or "survival"
end
if F.updateInventoryPage then F.updateInventoryPage() end
end
F.setGameMode(true)
local REACH_SURVIVAL = 4.5
local REACH_CREATIVE = 5.0
local DESTROY_DELAY_CREATIVE = 5
local isDestroying = false
local destroyBlockPos = nil
local destroyPart = nil
local destroyingItemId = nil
local destroyProgress = 0
local destroyTicks = 0
local destroyDelay = 0
local rightClickDelay = 0
local missTime = 0
do
local old = workspace:FindFirstChild("MCBlocks")
if old then old:Destroy() end
end
local char, hum, hrp
local blockFolder = Instance.new("Folder")
blockFolder.Name = "MCBlocks"
blockFolder.Parent = workspace
local existingDropFolder = workspace:FindFirstChild("MCDroppedItems")
if existingDropFolder then existingDropFolder:Destroy() end
local dropFolder = Instance.new("Folder")
dropFolder.Name = "MCDroppedItems"
dropFolder.Parent = workspace
F.baseplateOriginals = {} -- retained empty for cleanup compatibility
F.voxelOriginals = {} -- no voxel conversions are performed
F.snapToGrid = function(v)
return Vector3.new(
math.floor(v.X / BLOCK + 0.5) * BLOCK,
math.floor(v.Y / BLOCK + 0.5) * BLOCK,
math.floor(v.Z / BLOCK + 0.5) * BLOCK
)
end
local BLOCK_COLORS = {
stone = Color3.fromRGB(125, 125, 125),
dirt = Color3.fromRGB(134, 96, 67),
cobblestone = Color3.fromRGB(110, 110, 110),
oak_planks = Color3.fromRGB(162, 130, 78),
oak_log = Color3.fromRGB(102, 81, 50),
grass_block = Color3.fromRGB(91, 138, 54),
crafting_table = Color3.fromRGB(120, 90, 50),
}
F.isMCBlock = function(part)
return part and part:IsA("BasePart") and part:GetAttribute("MCBlockId") ~= nil
end
-- Any raycastable world BasePart can be selected and broken. Generated dropped items
-- are excluded so aiming at an item does not accidentally destroy the pickup.
F.isBreakableTarget = function(part)
if not (part ~= nil and part:IsA("BasePart") and part.Parent ~= nil) then return false end
if dropFolder and part:IsDescendantOf(dropFolder) then return false end
-- A part beneath a Model with a Humanoid is an entity, not a block/CSG target.
if F.getEntityTarget and F.getEntityTarget(part) then return false end
return true
end
local MCB = (function()
local blocks = {}
local bulkBuild = false
local painted = setmetatable({}, { __mode = "k" })
local function cellKey(center)
return math.floor(center.X / BLOCK + 0.5) .. ":" .. math.floor(center.Y / BLOCK + 0.5) .. ":" .. math.floor(center.Z / BLOCK + 0.5)
end
local function getBlockAt(center) return blocks[cellKey(center)] end
local BLOCKFACES = {
stone = { all = "stone" },
dirt = { all = "dirt" },
cobblestone = { all = "cobble" },
oak_planks = { all = "planks" },
oak_log = { top = "log_top", bottom = "log_top", side = "log" },
grass_block = { top = "grass_top", bottom = "dirt", side = "grass_side" },
crafting_table = { top = "ct_top", bottom = "planks", front = "ct_front", side = "ct_side" },
}
local FACES = {
{ Enum.NormalId.Top, Vector3.yAxis }, { Enum.NormalId.Bottom, -Vector3.yAxis },
{ Enum.NormalId.Front, -Vector3.zAxis }, { Enum.NormalId.Back, Vector3.zAxis },
{ Enum.NormalId.Right, Vector3.xAxis }, { Enum.NormalId.Left, -Vector3.xAxis },
}
local function faceTexKey(id, nid)
local F = BLOCKFACES[id]
if not F then return nil end
if F.all then return F.all end
if nid == Enum.NormalId.Top then return F.top end
if nid == Enum.NormalId.Bottom then return F.bottom or F.top end
if F.front and (nid == Enum.NormalId.Front or nid == Enum.NormalId.Left) then return F.front end
return F.side
end
local function rectsOf(px, w, h)
local used, out = {}, {}
for y = 0, h - 1 do
for x = 0, w - 1 do
local i = y * w + x + 1
local c = px[i]
if c and not used[i] then
local rw = 1
while x + rw < w and px[i + rw] == c and not used[i + rw] do rw += 1 end
local rh, ok = 1, true
while ok and y + rh < h do
for dx = 0, rw - 1 do
local j = (y + rh) * w + x + dx + 1
if px[j] ~= c or used[j] then ok = false break end
end
if ok then rh += 1 end
end
for dy = 0, rh - 1 do for dx = 0, rw - 1 do used[(y + dy) * w + x + dx + 1] = true end end
out[#out + 1] = { x = x, y = y, w = rw, h = rh, c = c }
end
end
end
return out
end
local faceTpl = {}
local function faceTemplate(texKey, nid)
local ck = texKey .. nid.Name
local g = faceTpl[ck]
if g then return g end
local tex = BTEX[texKey]
if not tex then return nil end
if not tex.px then tex.px = F.decodeRLE(tex.d) end
g = Instance.new("SurfaceGui")
g.Face = nid
g.SizingMode = Enum.SurfaceGuiSizingMode.FixedSize
g.CanvasSize = Vector2.new(64, 64)
g.LightInfluence = 0.5
g.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
for _, r in ipairs(rectsOf(tex.px, 16, 16)) do
local f = Instance.new("Frame")
f.BorderSizePixel = 0
f.BackgroundColor3 = r.c
f.Position = UDim2.fromOffset(r.x * 4, r.y * 4)
f.Size = UDim2.fromOffset(r.w * 4, r.h * 4)
f.Parent = g
end
faceTpl[ck] = g
return g
end
local function paintFaceOf(part, nid, id)
local key = faceTexKey(id, nid)
local tpl = key and faceTemplate(key, nid)
if tpl then tpl:Clone().Parent = part end
end
local function refreshFaces(part)
if bulkBuild or not part.Parent then return end
local id = part:GetAttribute("MCBlockId")
if not id or id == "ladder" then return end
local cell = part:GetAttribute("MCCell") or part.Position
local p = painted[part]
if not p then p = {} painted[part] = p end
for _, f in ipairs(FACES) do
if not p[f[1]] then
local nb = getBlockAt(cell + f[2] * BLOCK)
if not nb or nb:GetAttribute("MCClimb") then
p[f[1]] = true
paintFaceOf(part, f[1], id)
end
end
end
end
local function buildLadderVisual(part, center, n)
local tex = ICON.ladder
if not tex.px then tex.px = F.decodeRLE(tex.d) end
local right = (-n):Cross(Vector3.yAxis)
for _, r in ipairs(rectsOf(tex.px, 16, 16)) do
local v = Instance.new("Part")
v.Size = Vector3.new(r.w, r.h, 1) * PX
v.Color = r.c
v.Material = Enum.Material.SmoothPlastic
v.Anchored, v.CanCollide, v.CanQuery, v.CanTouch, v.CastShadow = true, false, false, false, false
local p = center - n * (BLOCK / 2) + n * (1.3 * PX) + right * ((r.x + r.w / 2 - 8) * PX) + Vector3.yAxis * ((8 - r.y - r.h / 2) * PX)
v.CFrame = CFrame.fromMatrix(p, right, Vector3.yAxis, n)
v.Parent = part
end
end
local function createBlock(id, center, face)
center = F.snapToGrid(center)
if getBlockAt(center) then return nil end
local part = Instance.new("Part")
part.Name = id
part.Anchored = true
part.CanTouch = false
part.TopSurface = Enum.SurfaceType.Smooth
part.BottomSurface = Enum.SurfaceType.Smooth
part.Material = Enum.Material.SmoothPlastic
part:SetAttribute("MCBlockId", id)
part:SetAttribute("MCCell", center)
if id == "ladder" then
local n = (face and math.abs(face.Y) 0.5
part.Size = alongX and Vector3.new(t, BLOCK, BLOCK) or Vector3.new(BLOCK, BLOCK, t)
part.CFrame = CFrame.new(center - n * (BLOCK / 2 - t / 2))
part.Transparency = 1
part.CanCollide = false
part.CanQuery = true
part.CastShadow = false
part:SetAttribute("MCClimb", true)
buildLadderVisual(part, center, n)
else
part.Size = Vector3.new(BLOCK, BLOCK, BLOCK)
part.CFrame = CFrame.new(center)
part.CanCollide = true
part.CanQuery = true
part.CastShadow = true
part.Color = BLOCK_COLORS[id] or Color3.fromRGB(150, 150, 150)
end
blocks[cellKey(center)] = part
part.Parent = blockFolder
refreshFaces(part)
return part
end
local function removeBlock(part)
local cell = part:GetAttribute("MCCell") or part.Position
blocks[cellKey(cell)] = nil
painted[part] = nil
part:Destroy()
for _, f in ipairs(FACES) do
local nb = getBlockAt(cell + f[2] * BLOCK)
if nb then refreshFaces(nb) end
end
end
return {
get = getBlockAt, create = createBlock, remove = removeBlock, refresh = refreshFaces,
paintFace = paintFaceOf, rects = rectsOf, FACES = FACES, BLOCKFACES = BLOCKFACES, blocks = blocks,
setBulk = function(v) bulkBuild = v end,
}
end)()
local getBlockAt, createBlock, removeBlock = MCB.get, MCB.create, MCB.remove
-- All world geometry stays as its existing geometry. No baseplate chunking,
-- voxelization, or replacement with generated block Parts is performed.
-- A target cell is identified on the same world grid used by placed MC blocks.
F.getGridCellCenter = function(part, hitPos, hitNormal)
if F.isMCBlock(part) then
return part:GetAttribute("MCCell") or F.snapToGrid(part.Position)
end
if not hitPos then
return F.snapToGrid(part and part.Position or Vector3.zero)
end
local n = hitNormal or Vector3.yAxis
local ax, ay, az = math.abs(n.X), math.abs(n.Y), math.abs(n.Z)
local face
if ay >= ax and ay >= az then
face = Vector3.new(0, n.Y >= 0 and 1 or -1, 0)
elseif ax >= az then
face = Vector3.new(n.X >= 0 and 1 or -1, 0, 0)
else
face = Vector3.new(0, 0, n.Z >= 0 and 1 or -1)
end
return F.snapToGrid(hitPos - face * (BLOCK * 0.5))
end
-- Cut exactly one grid-sized cube from the existing geometry. Roblox's CSG
-- result is a UnionOperation; it is not expanded into a collection of Parts.
-- If the selected cube contains the entire target, removing that target is the
-- equivalent of breaking its only occupied cell. If CSG fails, leave it intact.
F.cutGridCellWithUnion = function(source, cellCenter)
if not (source and source.Parent and source:IsA("BasePart") and cellCenter) then
return false
end
if source:IsDescendantOf(dropFolder) or source.Name == "MCSelectionGridProxy" then
return false
end
if F.isMCBlock(source) then
removeBlock(source)
return true
end
local GeometryService = game:GetService("GeometryService")
local half = BLOCK * 0.5
local cellCFrame = CFrame.new(cellCenter)
local sourceParent = source.Parent
local sourceCFrame = source.CFrame
local sourceName = source.Name
local sourceAttributes = source:GetAttributes()
-- The selection cube is the target, not just the one BasePart that happened
-- to be first in the raycast. Collect every eligible world part whose bounds
-- intersect the selected Minecraft cell, including decorative Parts and unions.
local excluded = { dropFolder, blockFolder, model }
if char then table.insert(excluded, char) end
local overlap = OverlapParams.new()
overlap.FilterType = Enum.RaycastFilterType.Exclude
overlap.FilterDescendantsInstances = excluded
overlap.RespectCanCollide = false
overlap.MaxParts = 0
local targets, seen = {}, {}
local function addTarget(part)
if not (part and part.Parent and part:IsA("BasePart")) then return end
if seen[part] or part:IsDescendantOf(dropFolder) or part:IsDescendantOf(blockFolder) then return end
if part.Name == "MCSelectionGridProxy" then return end
if F.getEntityTarget and F.getEntityTarget(part) then return end
local playerModel = part:FindFirstAncestorOfClass("Model")
if playerModel and Players:GetPlayerFromCharacter(playerModel) then return end
seen[part] = true
table.insert(targets, part)
end
addTarget(source)
local overlapOK, overlapping = pcall(function()
return workspace:GetPartBoundsInBox(cellCFrame, Vector3.one * BLOCK, overlap)
end)
if overlapOK and type(overlapping) == "table" then
for _, part in ipairs(overlapping) do addTarget(part) end
end
if #targets == 0 then return false end
local function allTargetsInsideCell(parts)
for _, part in ipairs(parts) do
if not (part and part.Parent and part:IsA("BasePart")) then return false end
for sx = -1, 1, 2 do
for sy = -1, 1, 2 do
for sz = -1, 1, 2 do
local corner = part.CFrame:PointToWorldSpace(Vector3.new(
part.Size.X * 0.5 * sx,
part.Size.Y * 0.5 * sy,
part.Size.Z * 0.5 * sz
))
local localCorner = cellCFrame:PointToObjectSpace(corner)
if math.abs(localCorner.X) > half + 0.01
or math.abs(localCorner.Y) > half + 0.01
or math.abs(localCorner.Z) > half + 0.01 then
return false
end
end
end
end
end
return #parts > 0
end
local function destroyAllCellTargets(parts)
for _, part in ipairs(parts) do
if part and part.Parent then pcall(function() part:Destroy() end) end
end
end
local options = {
CollisionFidelity = Enum.CollisionFidelity.Default,
RenderFidelity = Enum.RenderFidelity.Automatic,
SplitApart = false,
}
local intermediate = {}
local csgBase = source
-- Multiple objects in the same highlighted cell first become one CSG Union.
-- This keeps geometry from Parts A/B/C together so the same cell cut removes
-- all of them, rather than only whichever one the raycast returned.
if #targets > 1 then
local others = {}
for _, part in ipairs(targets) do
if part ~= source then table.insert(others, part) end
end
local unionOK, unionRaw = pcall(function()
return GeometryService:UnionAsync(source, others, options)
end)
if not unionOK or type(unionRaw) ~= "table" or #unionRaw == 0 then
if allTargetsInsideCell(targets) then
destroyAllCellTargets(targets)
return true
end
warn("[Minecraft 1.12.1] Could not union every part in the selected cell; originals left unchanged.")
return false
end
for _, item in ipairs(unionRaw) do
if typeof(item) == "Instance" then table.insert(intermediate, item) end
end
if #intermediate == 0 then return false end
csgBase = intermediate[1]
end
local cutter = Instance.new("Part")
cutter.Name = "MCUnionCutCutter"
cutter.Size = Vector3.one * BLOCK
cutter.CFrame = cellCFrame
cutter.Anchored = true
cutter.CanCollide = false
cutter.CanTouch = false
cutter.CanQuery = false
cutter.CastShadow = false
cutter.Transparency = 1
local cutOK, cutRaw = pcall(function()
return GeometryService:SubtractAsync(csgBase, { cutter }, options)
end)
cutter:Destroy()
local results = {}
if cutOK and type(cutRaw) == "table" then
for _, item in ipairs(cutRaw) do
if typeof(item) == "Instance" then table.insert(results, item) end
end
end
local function destroyIntermediate()
for _, item in ipairs(intermediate) do
if item then pcall(function() item:Destroy() end) end
end
end
local function destroyResults()
for _, item in ipairs(results) do
if item then pcall(function() item:Destroy() end) end
end
end
if not cutOK or type(cutRaw) ~= "table" then
destroyResults()
destroyIntermediate()
if allTargetsInsideCell(targets) then
destroyAllCellTargets(targets)
return true
end
warn("[Minecraft 1.12.1] Union cell cut failed; all original parts were left unchanged.")
return false
end
-- An empty successful result means every solid in the combined target was
-- inside the selected cell and was removed by the cut.
if #results == 0 then
destroyIntermediate()
for _, part in ipairs(targets) do
if part and part.Parent then pcall(function() part:Destroy() end) end
end
return true
end
local firstResult = results[1]
if not (firstResult and firstResult:IsA("BasePart")) then
destroyResults()
destroyIntermediate()
return false
end
local function copySourceProperties(result, index)
pcall(function() result.CFrame = sourceCFrame end)
result.Name = index == 1 and sourceName or (sourceName .. "_CutPart" .. tostring(index))
pcall(function() result.Color = source.Color end)
pcall(function() result.Material = source.Material end)
pcall(function() result.MaterialVariant = source.MaterialVariant end)
pcall(function() result.Reflectance = source.Reflectance end)
pcall(function() result.Transparency = source.Transparency end)
pcall(function() result.LocalTransparencyModifier = source.LocalTransparencyModifier end)
pcall(function() result.Anchored = source.Anchored end)
pcall(function() result.CanCollide = source.CanCollide end)
pcall(function() result.CanQuery = source.CanQuery end)
pcall(function() result.CanTouch = source.CanTouch end)
pcall(function() result.CastShadow = source.CastShadow end)
pcall(function() result.CollisionGroup = source.CollisionGroup end)
pcall(function() result.CustomPhysicalProperties = source.CustomPhysicalProperties end)
pcall(function()
if result:IsA("PartOperation") and source:IsA("PartOperation") then
result.UsePartColor = source.UsePartColor
end
end)
for name, value in pairs(sourceAttributes) do
pcall(function() result:SetAttribute(name, value) end)
end
result:SetAttribute("MCClientUnionReplacement", true)
result.Parent = sourceParent
end
for index, result in ipairs(results) do
if result and result:IsA("BasePart") then copySourceProperties(result, index) end
end
-- Preserve relevant children (textures, decals, surface GUIs and attachments)
-- from each original on the resulting union instead of orphaning them.
for _, oldPart in ipairs(targets) do
for _, child in ipairs(oldPart:GetChildren()) do
if not child:IsA("BasePart") and not child:IsA("Model") and child.Parent == oldPart then
pcall(function() child.Parent = firstResult end)
end
end
end
-- The new union/cut geometry is ready before originals are removed.
-- Roblox CSG returns new result instances, so this is a successful local
-- replacement, not a hidden source or a temporary visual clone.
for _, oldPart in ipairs(targets) do
if oldPart and oldPart.Parent then pcall(function() oldPart:Destroy() end) end
end
destroyIntermediate()
for index = 2, #results do
local extra = results[index]
if extra and not extra.Parent then pcall(function() extra.Parent = sourceParent end) end
end
return true
end
-- Resolving a target is deliberately read-only. The same hit cell is used for
-- highlighting, breaking, and placement; no world geometry is changed here.
F.resolveBreakTarget = function(part, hitPos, hitNormal)
return part, hitPos, hitNormal
end
local selectBox = Instance.new("SelectionBox")
selectBox.Color3 = Color3.new(0, 0, 0)
selectBox.LineThickness = 0.012
selectBox.Transparency = 0.3
selectBox.Name = "MCSelectBox"
local selectionProxy = Instance.new("Part")
selectionProxy.Name = "MCSelectionGridProxy"
selectionProxy.Size = Vector3.new(BLOCK, BLOCK, BLOCK)
selectionProxy.Anchored = true
selectionProxy.CanCollide = false
selectionProxy.CanTouch = false
selectionProxy.CanQuery = false
selectionProxy.CastShadow = false
selectionProxy.Transparency = 1
selectionProxy.Parent = workspace
local crackOverlay = Instance.new("SelectionBox")
crackOverlay.Color3 = Color3.new(1, 1, 1)
crackOverlay.LineThickness = 0.025
crackOverlay.Transparency = 1
crackOverlay.Name = "MCCrackOverlay"
F.setDestroyStage = function(stage)
if stage 0 and math.floor(destroyProgress * 10) or -1
end
F.getDestroyProgressFor = function(id)
local h = (id == "baseplate") and 0.6 or ((ITEMS[id] and ITEMS[id].hardness) or 1.0)
if h = 1 then
F.destroyBlock(part, cellCenter)
else
isDestroying = true
destroyPart = part
destroyBlockPos = cellCenter
local held = slots[36 + selected]
destroyingItemId = held and held.id or nil
destroyProgress = 0
destroyTicks = 0
F.setDestroyStage(0)
end
end
return true
end
F.continueDestroyBlock = function(part, _direction, hitPos, hitNormal)
if destroyDelay > 0 then
destroyDelay -= 1
return true
end
if not F.isBreakableTarget(part) then return false end
local cellCenter = F.getGridCellCenter(part, hitPos, hitNormal)
if abilities.instabuild then
destroyDelay = DESTROY_DELAY_CREATIVE
F.destroyBlock(part, cellCenter)
return true
end
if F.sameDestroyTarget(part, cellCenter) then
if not part.Parent then
isDestroying = false
return false
end
local id = part:GetAttribute("MCBlockId")
destroyProgress += F.getDestroyProgressFor(id)
destroyTicks += 1
F.setDestroyStage(F.getDestroyStage())
if destroyProgress >= 1 then
isDestroying = false
F.destroyBlock(part, cellCenter)
destroyProgress = 0
destroyTicks = 0
destroyDelay = DESTROY_DELAY_CREATIVE
F.setDestroyStage(-1)
destroyPart = nil
end
return true
else
return F.startDestroyBlock(part, _direction, hitPos, hitNormal)
end
end
F.pickBlock = function()
local reach = (abilities and abilities.instabuild) and REACH_CREATIVE or REACH_SURVIVAL
local p = pos or Vector3.zero
local eh = eyeH or 1.62
local y = yaw or 0
local pi = pitch or 0
local eye = p + Vector3.new(0, eh * BLOCK, 0)
local look = (CFrame.Angles(0, y, 0) * CFrame.Angles(pi, 0, 0)).LookVector
local dir = look * (reach * BLOCK)
if not rp then return nil, nil, nil end
local r = workspace:Raycast(eye, dir, rp)
-- If the normal ray already hit a collidable limb, return it without extra work.
if r and F.getEntityTarget then
local alreadyEntity = F.getEntityTarget(r.Instance)
if alreadyEntity then return r.Instance, r.Position, r.Normal end
end
-- Standard block targeting intentionally ignores non-collidable BaseParts. This
-- second ray lets Humanoid limbs/accessories count as entities without changing
-- which ordinary world parts are eligible for union-cut block breaking.
local excluded = {}
for _, item in ipairs(rp.FilterDescendantsInstances or {}) do excluded[#excluded + 1] = item end
if dropFolder then excluded[#excluded + 1] = dropFolder end
entityRayParams.FilterDescendantsInstances = excluded
local blockDistance = r and (r.Position - eye).Magnitude or math.huge
for _ = 1, 16 do
local candidate = workspace:Raycast(eye, dir, entityRayParams)
if not candidate then break end
local entity, entityHumanoid
if F.getEntityTarget then entity, entityHumanoid = F.getEntityTarget(candidate.Instance) end
if entity and entityHumanoid then
local entityDistance = (candidate.Position - eye).Magnitude
if entityDistance < blockDistance then
return candidate.Instance, candidate.Position, candidate.Normal
end
break
end
-- Skip non-collidable decorative parts only. A collidable obstacle blocks the
-- entity ray here, matching the normal block ray's line-of-sight behavior.
if candidate.Instance.CanCollide then break end
excluded[#excluded + 1] = candidate.Instance
entityRayParams.FilterDescendantsInstances = excluded
end
if not r then return nil, nil, nil end
return r.Instance, r.Position, r.Normal
end
F.faceFromNormal = function(n)
if typeof(n) ~= "Vector3" or n.Magnitude = ax and ay >= az then
return n.Y > 0 and Vector3.yAxis or -Vector3.yAxis
elseif ax >= az then
return n.X > 0 and Vector3.xAxis or -Vector3.xAxis
else
return n.Z > 0 and Vector3.zAxis or -Vector3.zAxis
end
end
F.placeBlock = function(handId, hitPart, hitPos, hitNormal)
if not abilities.mayBuild then return false end
if not handId or not ITEMS[handId] or not ITEMS[handId].placeable then return false end
if not hitPos or not hitNormal then return false end
local face = F.faceFromNormal(hitNormal)
local base
if F.isMCBlock(hitPart) then
base = hitPart:GetAttribute("MCCell") or hitPart.Position
else
base = F.snapToGrid(hitPos - face * (BLOCK * 0.5))
end
local center = F.snapToGrid(base + face * BLOCK)
if handId == "ladder" and math.abs(face.Y) > 0.5 then return false end
local halfW = 0.6 * BLOCK / 2 * 0.9
local feet = pos
local playerMin = feet - Vector3.new(halfW, 0.05, halfW)
local playerMax = feet + Vector3.new(halfW, 1.8 * BLOCK - 0.05, halfW)
local bmin = center - Vector3.new(BLOCK, BLOCK, BLOCK) * 0.5
local bmax = center + Vector3.new(BLOCK, BLOCK, BLOCK) * 0.5
if handId ~= "ladder" and playerMin.X bmin.X
and playerMin.Y bmin.Y
and playerMin.Z bmin.Z then
return false
end
local part = createBlock(handId, center, face)
if not part then return false end
if not abilities.instabuild then
local s = slots[36 + selected]
if s and s.id == handId then
s.n -= 1
if s.n = 4 then
-- Queue a follow-up swing rather than resetting the current one mid-arc.
swingQueued = true
end
end
F.startAttack = function()
if invOpen or F.playerDead then return false end
F.startSwing()
if missTime > 0 then return false end
local part, hitPos, normal = F.pickBlock()
local entity, entityHumanoid
if F.getEntityTarget then entity, entityHumanoid = F.getEntityTarget(part) end
if entity and entityHumanoid then
F.stopDestroyBlock()
F.attackEntity(entity, entityHumanoid)
return true
end
part, hitPos, normal = F.resolveBreakTarget(part, hitPos, normal)
if F.isBreakableTarget(part) then
F.startDestroyBlock(part, normal, hitPos, normal)
F.startSwing()
return true
end
F.stopDestroyBlock()
if abilities.instabuild then
missTime = 0
else
missTime = 10
end
return false
end
F.continueAttack = function(down)
if F.playerDead then return end
if not down then
missTime = 0
F.stopDestroyBlock()
return
end
if missTime > 0 or invOpen then return end
local part, hitPos, normal = F.pickBlock()
local entity, entityHumanoid
if F.getEntityTarget then entity, entityHumanoid = F.getEntityTarget(part) end
if entity and entityHumanoid then
F.stopDestroyBlock()
if F.attackEntity(entity, entityHumanoid) then F.startSwing() end
return
end
part, hitPos, normal = F.resolveBreakTarget(part, hitPos, normal)
if F.isBreakableTarget(part) then
if F.continueDestroyBlock(part, normal, hitPos, normal) then F.startSwing() end
else
F.stopDestroyBlock()
end
end
F.startUseItem = function()
if F.playerDead or invOpen or F.eating then return end
if rightClickDelay > 0 then return end
local held = slots[36 + selected]
local id = held and held.id or nil
if id == "cooked_beef" or id == "bread" or id == "apple" then
F.eating = true
F.eatTime = 0
F.eatTimePrev = 0
F.eatItemId = id
rightClickDelay = 32
return
end
rightClickDelay = 4
local part, hitPos, normal = F.pickBlock()
-- Placement uses the hit face and shared grid directly; it must not replace
-- the target part with voxel chunks as a side effect of placing a block.
if not normal then return end
if id and ITEMS[id] and ITEMS[id].placeable then
F.placeBlock(id, part, hitPos, normal)
F.startSwing()
end
end
F.stopUseItem = function()
useHeld = false
if F.eating then
-- Freeze the elapsed phase and let the render-smoothed blend fade out.
-- Resetting eatTime here made the item/arm jump back to frame zero.
F.eating = false
F.eatItemId = nil
rightClickDelay = 0
end
end
local gui = Instance.new("ScreenGui")
gui.Name = "MinecraftGui"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
gui.DisplayOrder = 50
gui.Parent = playerGui
-- Separate ScreenGui for the control UI so it always renders above every other UI layer.
local controlsGui = Instance.new("ScreenGui")
controlsGui.Name = "MinecraftControlsGui"
controlsGui.ResetOnSpawn = false
controlsGui.IgnoreGuiInset = true
controlsGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
controlsGui.DisplayOrder = 4000
controlsGui.Parent = playerGui
selectBox.Parent = gui
crackOverlay.Parent = gui
local iconTpl = {}
F.cloneIcon = function(id)
if not iconTpl[id] then iconTpl[id] = F.buildImage(ICON[id], GS) end
return iconTpl[id]:Clone()
end
F.textLabel = function(parent, size, z)
local t = Instance.new("TextLabel")
t.BackgroundTransparency = 1
t.Font = Enum.Font.Arcade
t.TextSize = size
t.TextXAlignment = Enum.TextXAlignment.Right
t.TextYAlignment = Enum.TextYAlignment.Bottom
t.ZIndex = z
t.Text = ""
t.Parent = parent
return t
end
F.newView = function(parent, x, y, z)
local v = {}
v.holder = Instance.new("Frame")
v.holder.BackgroundTransparency = 1
v.holder.Size = UDim2.fromOffset(16 * GS, 16 * GS)
v.holder.Position = UDim2.fromOffset(x * GS, y * GS)
v.holder.ZIndex = z
v.holder.Parent = parent
v.shadow = F.textLabel(v.holder, 8 * GS, z + 2)
v.shadow.TextColor3 = Color3.fromRGB(62, 62, 62)
v.shadow.Size = UDim2.fromOffset(17 * GS, 17 * GS)
v.shadow.Position = UDim2.fromOffset(GS, GS)
v.count = F.textLabel(v.holder, 8 * GS, z + 3)
v.count.TextColor3 = Color3.new(1, 1, 1)
v.count.Size = UDim2.fromOffset(17 * GS, 17 * GS)
return v
end
F.setView = function(v, st)
if st then
if v.id ~= st.id then
if v.icon then v.icon:Destroy() end
v.icon = F.cloneIcon(st.id)
v.icon.ZIndex = v.holder.ZIndex + 1
v.icon.Parent = v.holder
v.id = st.id
end
local t = st.n > 1 and tostring(st.n) or ""
v.count.Text = t
v.shadow.Text = t
else
if v.icon then v.icon:Destroy() v.icon = nil end
v.id = nil
v.count.Text = ""
v.shadow.Text = ""
end
end
local hud = Instance.new("Frame")
hud.Name = "MinecraftHUD"
hud.BackgroundTransparency = 1
hud.Size = UDim2.fromScale(1, 1)
hud.Parent = gui
-- Restore the attachment's original hotbar. The previous merge accidentally
-- removed this block while leaving refresh(), selectHotbar(), and the render loop
-- referring to hudViews and selFrame. That nil reference stopped initialization
-- before the GUI and player interactions could finish initializing.
local MAIN_HOTBAR_SCALE = 0.78 -- Shrinks only the main HUD row that holds the grass block and tools.
local hotbar = F.buildImage(IMG.hotbar, GS)
hotbar.Name = "HotbarBackground"
hotbar.Position = UDim2.new(0.5, -91 * GS * MAIN_HOTBAR_SCALE, 1, -23 * GS * MAIN_HOTBAR_SCALE)
hotbar.ZIndex = 1
hotbar.Parent = hud
local mainHotbarScale = Instance.new("UIScale")
mainHotbarScale.Name = "MainHotbarScale"
mainHotbarScale.Scale = MAIN_HOTBAR_SCALE
mainHotbarScale.Parent = hotbar
local selFrame = F.buildImage(IMG.hotbar_sel, GS)
selFrame.Name = "HotbarSelection"
selFrame.ZIndex = 2
selFrame.Parent = hotbar
local hudViews = {}
F.selectHotbar = function(i)
i = math.clamp(math.floor(i), 0, 8)
selected = i
end
for i = 0, 8 do
hudViews[i] = F.newView(hotbar, 3 + i * 20, 3, 3)
local button = Instance.new("TextButton")
button.Name = "HotbarSlot" .. i
button.BackgroundTransparency = 1
button.Text = ""
button.AutoButtonColor = false
button.Active = true
button.Size = UDim2.fromOffset(20 * GS, 22 * GS)
button.Position = UDim2.fromOffset(i * 20 * GS, 0)
button.ZIndex = 20
button.Parent = hotbar
local slotIndex = i
F.track(button.Activated:Connect(function()
F.selectHotbar(slotIndex)
end))
F.track(button.InputBegan:Connect(function(input)
local inputType = input.UserInputType
if inputType == Enum.UserInputType.MouseButton1 or inputType == Enum.UserInputType.Touch then
F.selectHotbar(slotIndex)
end
end))
end
F.selectHotbar(8)
-- Creative HUD keeps the hotbar and crosshair but has no XP bar.
local crosshair = F.buildImage(IMG.crosshair, GS)
crosshair.AnchorPoint = Vector2.new(0.5, 0.5)
crosshair.Position = UDim2.fromScale(0.5, 0.5)
crosshair.Parent = hud
local nameLabel = Instance.new("TextLabel")
nameLabel.BackgroundTransparency = 1
nameLabel.Font = Enum.Font.Arcade
nameLabel.TextSize = 8 * GS
nameLabel.TextColor3 = Color3.new(1, 1, 1)
nameLabel.TextStrokeTransparency = 0.3
nameLabel.AnchorPoint = Vector2.new(0.5, 1)
nameLabel.Position = UDim2.new(0.5, 0, 1, -(23 + 22) * GS * MAIN_HOTBAR_SCALE)
nameLabel.Size = UDim2.fromOffset(200 * GS, 10 * GS)
nameLabel.Text = ""
nameLabel.Parent = hud
local nameUntil, lastSel = 0, -1
invOpen = false
local invDim = Instance.new("TextButton")
invDim.Text = ""
invDim.AutoButtonColor = false
invDim.BackgroundColor3 = Color3.new(0, 0, 0)
invDim.BackgroundTransparency = 0.55
invDim.BorderSizePixel = 0
invDim.Size = UDim2.fromScale(1, 1)
invDim.Visible = false
invDim.Parent = gui
-- Keep the original inventory texture intact: the black player-preview rectangle,
-- armor-slot art, crafting grid, arrow, and result slot all remain visible. No 2D Steve
-- sprite is drawn over the preview area.
panel = F.buildImage(IMG.inventory, GS)
panel.Name = "SecondaryInventoryPanel"
panel.AnchorPoint = Vector2.new(0.5, 0.5)
panel.Position = UDim2.fromScale(0.5, 0.5)
panel.Active = true
panel.ZIndex = 30
panel.Parent = invDim
for _, child in ipairs(panel:GetDescendants()) do
if child:IsA("GuiObject") then child.ZIndex = 31 end
end
local inventoryScale = Instance.new("UIScale")
inventoryScale.Scale = 0.55
inventoryScale.Parent = panel
local layout = {}
-- Vanilla 1.12.1 player-container positions on the unmodified 176x166 background.
layout[0] = { 152, 28 } -- crafting output
layout[1] = { 96, 17 }
layout[2] = { 114, 17 }
layout[3] = { 96, 35 }
layout[4] = { 114, 35 }
-- Armor slots are drawn by the original background; no 2D player preview is drawn.
layout[5] = { 8, 8 } -- head
layout[6] = { 8, 26 } -- chest
layout[7] = { 8, 44 } -- legs
layout[8] = { 8, 62 } -- feet
for r = 0, 2 do for c = 0, 8 do layout[9 + c + r * 9] = { 8 + c * 18, 84 + r * 18 } end end
for c = 0, 8 do layout[36 + c] = { 8 + c * 18, 142 } end
layout[45] = { 77, 62 }
local views = {}
local slotButtons = {}
local hover = nil
local highlight = Instance.new("Frame")
highlight.BackgroundColor3 = Color3.new(1, 1, 1)
highlight.BackgroundTransparency = 0.5
highlight.BorderSizePixel = 0
highlight.Size = UDim2.fromOffset(16 * GS, 16 * GS)
highlight.ZIndex = 38
highlight.Visible = false
highlight.Parent = panel
local carriedView = F.newView(gui, 0, 0, 30)
carriedView.holder.Visible = false
local tooltip = Instance.new("TextLabel")
tooltip.BackgroundColor3 = Color3.fromRGB(16, 0, 16)
tooltip.BackgroundTransparency = 0.06
tooltip.BorderSizePixel = 0
tooltip.Font = Enum.Font.Arcade
tooltip.TextSize = 8 * GS
tooltip.TextColor3 = Color3.new(1, 1, 1)
tooltip.ZIndex = 40
tooltip.Visible = false
tooltip.Size = UDim2.fromOffset(100 * GS, 12 * GS)
tooltip.Parent = gui
local stroke = Instance.new("UIStroke")
stroke.Color = Color3.fromRGB(40, 0, 77)
stroke.Thickness = GS
stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
stroke.Parent = tooltip
refresh = function()
for i = 0, 45 do
if views[i] then F.setView(views[i], slots[i]) end
end
for i = 0, 8 do
if hudViews[i] then F.setView(hudViews[i], slots[36 + i]) end
end
F.setView(carriedView, carried)
carriedView.holder.Visible = invOpen and carried ~= nil
if hover ~= nil and slots[hover] and not carried then
tooltip.Text = ITEMS[slots[hover].id].name
tooltip.Size = UDim2.fromOffset((#tooltip.Text * 6 + 8) * GS, 12 * GS)
tooltip.Visible = invOpen
else
tooltip.Visible = false
end
end
F.quickMove = function(idx)
local s = slots[idx]
if not s then return end
if (idx >= 1 and idx = 9 and idx = 36 and idx <= 44 then
F.insertStack(s, 9, 35)
end
if s and s.n <= 0 then slots[idx] = nil end
F.updateCraft()
end
F.resultClick = function(shift)
local r = slots[0]
if not r then return end
if shift then
for _ = 1, 64 do
r = slots[0]
if not r then break end
if not F.canFit(r.id, r.n, 9, 44) then break end
F.insertStack({ id = r.id, n = r.n }, 9, 44)
F.consumeCraft()
end
else
if carried == nil then
carried = { id = r.id, n = r.n }
F.consumeCraft()
elseif carried.id == r.id and carried.n + r.n 1 then
local mv = math.min(F.maxOf(s.id) - s.n, carried.n)
s.n += mv carried.n -= mv
if carried.n <= 0 then carried = nil end
elseif F.canPlace(idx, carried) then
slots[idx], carried = carried, s
end
else
if carried == nil then
if s then
local take = math.ceil(s.n / 2)
carried = { id = s.id, n = take }
s.n -= take
if s.n <= 0 then slots[idx] = nil end
end
elseif s == nil then
if F.canPlace(idx, carried) then
slots[idx] = { id = carried.id, n = 1 }
carried.n -= 1
end
elseif s.id == carried.id and s.n < F.maxOf(s.id) then
s.n += 1 carried.n -= 1
elseif F.canPlace(idx, carried) then
slots[idx], carried = carried, s
end
if carried and carried.n 0 then
local long = os.clock() - touchStart > 0.35
local endPos = Vector2.new(input.Position.X, input.Position.Y)
if F.touchDragging then
local hitDelete = false
local deleteButton = F.deleteButton
if deleteButton and deleteButton.Visible then
local ap, as = deleteButton.AbsolutePosition, deleteButton.AbsoluteSize
hitDelete = endPos.X >= ap.X and endPos.X = ap.Y and endPos.Y = ap.X and endPos.X = ap.Y and endPos.Y <= ap.Y + as.Y then
targetSlot = targetIdx
break
end
end
end
if targetSlot ~= nil then F.clickSlot(targetSlot, 1, false) end
end
else
F.clickSlot(idx, long and 2 or 1, false)
end
touchStart = 0
F.activeTouchSlot = nil
F.touchDragStartPos = nil
F.touchDragCanPick = false
F.touchDragging = false
hover = nil
highlight.Visible = false
refresh()
end
end))
end
F.track(invDim.InputBegan:Connect(function(input)
if not invOpen or carried == nil then return end
local t = input.UserInputType
if t == Enum.UserInputType.MouseButton1 or t == Enum.UserInputType.Touch then
carried = nil refresh()
elseif t == Enum.UserInputType.MouseButton2 then
carried.n -= 1
if carried.n "
cpClose.ZIndex = 22
cpClose.Visible = true
cpClose.Parent = creativePlaceholder
local inventoryPageToggle = nil
creativeTabButton = Instance.new("TextButton")
creativeTabButton.Name = "SwitchToCreativeInventory"
creativeTabButton.Position = UDim2.fromOffset(112 * GS, 5 * GS)
creativeTabButton.Size = UDim2.fromOffset(59 * GS, 12 * GS)
creativeTabButton.BackgroundColor3 = Color3.fromRGB(80, 110, 80)
creativeTabButton.BorderSizePixel = 1
creativeTabButton.BorderColor3 = Color3.fromRGB(45, 45, 45)
creativeTabButton.Font = Enum.Font.Code
creativeTabButton.TextSize = 6 * GS
creativeTabButton.TextColor3 = Color3.new(1, 1, 1)
creativeTabButton.Text = "CREATIVE >"
creativeTabButton.ZIndex = 25
creativeTabButton.Visible = false
creativeTabButton.Parent = panel
F.track(cpClose.Activated:Connect(function()
if invOpen then F.setInventoryPage("survival") end
end))
F.track(creativeTabButton.Activated:Connect(function()
if invOpen and creative then F.setInventoryPage("creative") end
end))
F.updateInventoryPage = function()
local page = inventoryPage
local showCreative = invOpen and creative and page == "creative"
local showSurvival = invOpen and page == "survival"
creativePlaceholderOpen = showCreative
creativePlaceholder.Visible = showCreative
panel.Visible = showSurvival
if F.deleteButton then F.deleteButton.Visible = showSurvival end
cpClose.Visible = false
creativeTabButton.Visible = false
if inventoryPageToggle then
inventoryPageToggle.Visible = invOpen and creative
inventoryPageToggle.Text = ""
end
if showCreative then
creativePlaceholder.ZIndex = 50
else
creativePlaceholder.ZIndex = 20
end
if F.updateHudVisibility then F.updateHudVisibility() end
end
F.setInventoryPage = function(page)
if page ~= "creative" and page ~= "survival" then return end
if page == "creative" and not creative then return end
inventoryPage = page
hover = nil
highlight.Visible = false
if F.updateInventoryPage then F.updateInventoryPage() end
refresh()
end
inventoryPageToggle = Instance.new("TextButton")
inventoryPageToggle.Name = "InventoryPageToggle"
inventoryPageToggle.AnchorPoint = Vector2.new(0, 0)
-- A single toggle outside the panel's lower-right corner, so it does not cover slots.
inventoryPageToggle.Position = UDim2.new(0.5, 46 * GS, 0.5, 45 * GS)
inventoryPageToggle.Size = UDim2.fromOffset(18 * GS, 18 * GS)
inventoryPageToggle.BackgroundColor3 = Color3.fromRGB(198, 198, 198)
inventoryPageToggle.BorderSizePixel = 1
inventoryPageToggle.BorderColor3 = Color3.fromRGB(55, 55, 55)
inventoryPageToggle.Text = ""
inventoryPageToggle.ZIndex = 75
inventoryPageToggle.Visible = false
inventoryPageToggle.Parent = invDim
-- Pixel-painted vanilla-style chest face: no external image or asset dependency.
local chestPixelFolder = Instance.new("Frame")
chestPixelFolder.Name = "PixelChestIcon"
chestPixelFolder.BackgroundTransparency = 1
chestPixelFolder.Position = UDim2.fromOffset(GS, GS)
chestPixelFolder.Size = UDim2.fromOffset(16 * GS, 16 * GS)
chestPixelFolder.Active = false
chestPixelFolder.ZIndex = 76
chestPixelFolder.Parent = inventoryPageToggle
-- A tiny isometric, blocky chest icon, using the vanilla inventory gray behind it.
local chestPalette = {
outline = Color3.fromRGB(52, 31, 17),
deep = Color3.fromRGB(91, 49, 22),
wood = Color3.fromRGB(148, 86, 38),
light = Color3.fromRGB(190, 126, 61),
top = Color3.fromRGB(214, 157, 82),
glint = Color3.fromRGB(235, 190, 119),
latch = Color3.fromRGB(127, 127, 127),
metalLight = Color3.fromRGB(191, 191, 191),
}
local chestPixels = {}
for y = 0, 15 do chestPixels[y] = {} end
local function chestPixel(x, y, color)
if x >= 0 and x = 0 and y = 7 and x <= 9 then color = "glint" end
if y == 4 and x <= 5 then color = "light" end
chestPixel(x, y, color)
end
end
-- Front panel.
for y = 5, 13 do
for x = 2, 12 do
local color
if y == 5 or y == 13 or x == 2 or x == 12 then
color = "outline"
elseif y == 6 then
color = "deep"
elseif y == 7 or y == 8 then
color = (x <= 4) and "light" or "wood"
elseif y == 9 or y == 10 then
color = (x <= 4) and "wood" or "light"
elseif y == 11 or y == 12 then
color = (x <= 4) and "deep" or "wood"
end
chestPixel(x, y, color)
end
end
-- Darker right side gives the chest its Minecraft inventory-item perspective.
for y = 5, 12 do
for x = 12, 14 do
local color
if x == 12 or x == 14 or y == 5 or y == 12 then
color = "outline"
elseif x == 13 then
color = (y <= 8) and "deep" or "wood"
end
chestPixel(x, y, color)
end
end
-- Gold latch and lid seam.
for x = 3, 12 do chestPixel(x, 6, "outline") end
chestPixel(7, 7, "outline")
chestPixel(8, 7, "latch")
chestPixel(7, 8, "latch")
chestPixel(8, 8, "metalLight")
chestPixel(7, 9, "latch")
chestPixel(8, 9, "outline")
for x = 3, 11 do
if x % 3 == 0 then chestPixel(x, 11, "light") end
end
for y = 0, 15 do
for x = 0, 15 do
local shade = chestPixels[y][x]
if shade then
local pixel = Instance.new("Frame")
pixel.BorderSizePixel = 0
pixel.BackgroundColor3 = chestPalette[shade]
pixel.Position = UDim2.fromOffset(x * GS, y * GS)
pixel.Size = UDim2.fromOffset(GS, GS)
pixel.ZIndex = 77
pixel.Parent = chestPixelFolder
end
end
end
F.track(inventoryPageToggle.Activated:Connect(function()
if not invOpen or not creative then return end
F.setInventoryPage(inventoryPage == "creative" and "survival" or "creative")
end))
-- Raise the creative-page controls above the unchanged survival-page panel.
for _, child in ipairs(creativePlaceholder:GetDescendants()) do
if child:IsA("GuiObject") then child.ZIndex = child.ZIndex + 40 end
end
creativePlaceholder.ZIndex = 50
local dropInventoryButton = Instance.new("TextButton")
dropInventoryButton.Name = "DropMainInventoryItem"
dropInventoryButton.AnchorPoint = Vector2.new(0, 1)
-- This button belongs to the main HUD hotbar, not the creative or survival inventory screen.
dropInventoryButton.Position = UDim2.new(0.5, 91 * GS * MAIN_HOTBAR_SCALE + 3 * GS, 1, -1 * GS * MAIN_HOTBAR_SCALE)
dropInventoryButton.Size = UDim2.fromOffset(34 * GS * MAIN_HOTBAR_SCALE, 18 * GS * MAIN_HOTBAR_SCALE)
dropInventoryButton.BackgroundColor3 = Color3.fromRGB(48, 48, 48)
dropInventoryButton.BackgroundTransparency = 0
dropInventoryButton.BorderSizePixel = 0
dropInventoryButton.Font = Enum.Font.Arcade
dropInventoryButton.Text = "DROP"
dropInventoryButton.TextSize = 7 * GS
dropInventoryButton.TextColor3 = Color3.new(1, 1, 1)
dropInventoryButton.AutoButtonColor = true
dropInventoryButton.ZIndex = 25
dropInventoryButton.Parent = controlsGui
F.track(dropInventoryButton.Activated:Connect(function()
if F.dropInventorySelection then
local all = UIS:IsKeyDown(Enum.KeyCode.LeftShift) or UIS:IsKeyDown(Enum.KeyCode.RightShift)
F.dropInventorySelection(all)
end
end))
-- The creative catalog stays visibly unfinished and cannot be interacted with yet.
local comingSoonOverlay = Instance.new("Frame")
comingSoonOverlay.Name = "CreativeComingSoonOverlay"
comingSoonOverlay.BackgroundColor3 = Color3.fromRGB(18, 18, 18)
comingSoonOverlay.BackgroundTransparency = 0.35
comingSoonOverlay.BorderSizePixel = 0
comingSoonOverlay.Position = UDim2.fromScale(0, 0)
comingSoonOverlay.Size = UDim2.fromScale(1, 1)
comingSoonOverlay.Active = true
comingSoonOverlay.ZIndex = 120
comingSoonOverlay.Parent = creativePlaceholder
local comingSoonText = Instance.new("TextLabel")
comingSoonText.Name = "ComingSoonText"
comingSoonText.BackgroundTransparency = 1
comingSoonText.AnchorPoint = Vector2.new(0.5, 0.5)
comingSoonText.Position = UDim2.fromScale(0.5, 0.5)
comingSoonText.Size = UDim2.new(1, -10 * GS, 0, 28 * GS)
comingSoonText.Font = Enum.Font.Arcade
comingSoonText.Text = "Coming soon"
comingSoonText.TextColor3 = Color3.fromRGB(255, 255, 255)
comingSoonText.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
comingSoonText.TextStrokeTransparency = 0.15
comingSoonText.TextScaled = true
comingSoonText.ZIndex = 121
comingSoonText.Parent = comingSoonOverlay
---------------------------------------------------------------------
-- POJAVLAUNCHER-STYLE TOUCH HUD: TOP BAR, D-PAD, CHAT AND DEBUG
---------------------------------------------------------------------
local topToolbar = Instance.new("Frame")
topToolbar.Name = "PojavTouchToolbar"
topToolbar.AnchorPoint = Vector2.new(0.5, 0)
topToolbar.Position = UDim2.new(0.5, 0, 0, 3)
topToolbar.Size = UDim2.fromOffset(304, 31)
topToolbar.BackgroundTransparency = 1
topToolbar.Visible = UIS.TouchEnabled
topToolbar.ZIndex = 10
topToolbar.Parent = controlsGui
local pojavButtons = {}
F.makePojavTopButton = function(label, x, width, callback, alwaysVisible)
local b = Instance.new("TextButton")
b.Name = "Pojav_" .. label:gsub("[^%w]", "")
b.Position = UDim2.fromOffset(x, 1)
b.Size = UDim2.fromOffset(width, 27)
b.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
b.BackgroundTransparency = 0.18
b.BorderSizePixel = 0
b.Text = label
b.TextColor3 = Color3.fromRGB(245, 247, 250)
b.TextSize = 10
b.Font = Enum.Font.Code
b.AutoButtonColor = false
b.ZIndex = 11
b.Parent = topToolbar
F.track(b.Activated:Connect(callback))
pojavButtons[#pojavButtons + 1] = {button = b, always = alwaysVisible == true}
return b
end
local debugEnabled = false
F.updateHudVisibility = function()
hud.Visible = hudVisible
if debugPanel then debugPanel.Visible = hudVisible and debugEnabled end
if topToolbar then
-- Touch controls sit underneath inventory/chat overlays and never cover the inventory window.
topToolbar.Visible = UIS.TouchEnabled
for _, entry in ipairs(pojavButtons) do
entry.button.Visible = (entry.always or hudVisible)
end
end
for _, b in ipairs(touchButtons) do b.Visible = hudVisible end
if mobileDpad then mobileDpad.Visible = hudVisible and UIS.TouchEnabled end
if dropInventoryButton then dropInventoryButton.Visible = hudVisible end
if chatPanel then
chatPanel.Visible = hudVisible
if chatInput then chatInput.Visible = hudVisible and chatOpen end
end
end
F.toggleDebug = function()
debugEnabled = not debugEnabled
if debugPanel then
debugPanel:SetAttribute("MCEnabled", debugEnabled)
debugPanel.Visible = debugEnabled and hudVisible
end
end
-- Debug readout is intentionally small and Pojav-like rather than a new full HUD.
debugPanel = Instance.new("Frame")
debugPanel.Name = "PojavDebugOverlay"
debugPanel.Position = UDim2.new(0, 8, 0, 38)
debugPanel.Size = UDim2.new(1, -16, 0, 112)
debugPanel.BackgroundColor3 = Color3.new(0, 0, 0)
debugPanel.BackgroundTransparency = 0.35
debugPanel.BorderSizePixel = 0
debugPanel.Visible = false
debugPanel.ZIndex = 15
debugPanel.Parent = gui
debugText = Instance.new("TextLabel")
debugText.Name = "DebugText"
debugText.BackgroundTransparency = 1
debugText.Position = UDim2.fromOffset(6, 4)
debugText.Size = UDim2.new(1, -12, 1, -8)
debugText.Font = Enum.Font.Code
debugText.TextSize = 12
debugText.TextColor3 = Color3.new(1, 1, 1)
debugText.TextXAlignment = Enum.TextXAlignment.Left
debugText.TextYAlignment = Enum.TextYAlignment.Top
debugText.TextWrapped = false
debugText.ZIndex = 16
debugText.Parent = debugPanel
chatPanel = Instance.new("Frame")
chatPanel.Name = "JavaLocalChat"
chatPanel.Position = UDim2.new(0, 0, 1, -188)
chatPanel.Size = UDim2.new(1, 0, 0, 160)
chatPanel.BackgroundTransparency = 1
chatPanel.BorderSizePixel = 0
chatPanel.Visible = true
chatPanel.ZIndex = 90
chatPanel.Parent = gui
chatRowsFrame = Instance.new("Frame")
chatRowsFrame.Name = "ChatLines"
chatRowsFrame.Position = UDim2.fromOffset(0, 0)
chatRowsFrame.Size = UDim2.new(1, 0, 1, -30)
chatRowsFrame.BackgroundTransparency = 1
chatRowsFrame.BorderSizePixel = 0
chatRowsFrame.ClipsDescendants = true
chatRowsFrame.ZIndex = 90
chatRowsFrame.Parent = chatPanel
local chatRowsLayout = Instance.new("UIListLayout")
chatRowsLayout.Name = "BottomAlignedChatLayout"
chatRowsLayout.FillDirection = Enum.FillDirection.Vertical
chatRowsLayout.HorizontalAlignment = Enum.HorizontalAlignment.Left
chatRowsLayout.VerticalAlignment = Enum.VerticalAlignment.Bottom
chatRowsLayout.SortOrder = Enum.SortOrder.LayoutOrder
chatRowsLayout.Padding = UDim.new(0, 0)
chatRowsLayout.Parent = chatRowsFrame
-- The row frame replaces the old large opaque chat rectangle. Each line receives
-- its own translucent black background, like Java Edition's HUD chat.
chatHistoryLabel = chatRowsFrame
chatInput = Instance.new("TextBox")
chatInput.Name = "ChatInput"
chatInput.Position = UDim2.new(0, 0, 1, -27)
chatInput.Size = UDim2.new(1, 0, 0, 25)
chatInput.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
chatInput.BackgroundTransparency = 0.56
chatInput.BorderSizePixel = 0
chatInput.BorderColor3 = Color3.fromRGB(80, 80, 80)
chatInput.TextColor3 = Color3.fromRGB(255, 255, 255)
chatInput.PlaceholderColor3 = Color3.fromRGB(190, 190, 190)
chatInput.PlaceholderText = ""
chatInput.Text = ""
chatInput.ClearTextOnFocus = false
chatInput.Font = Enum.Font.Arcade
chatInput.TextSize = 11
chatInput.TextXAlignment = Enum.TextXAlignment.Left
chatInput.Visible = false
chatInput.ZIndex = 92
chatInput.Parent = chatPanel
local chatEntries = {}
local function escapeRichText(value)
return tostring(value):gsub("&", "&"):gsub("", ">"):gsub('"', """):gsub("'", "'")
end
local function renderChatEntries()
for _, child in ipairs(chatRowsFrame:GetChildren()) do
if child:IsA("TextLabel") then child:Destroy() end
end
for index, entry in ipairs(chatEntries) do
local row = Instance.new("TextLabel")
row.Name = "ChatLine" .. tostring(index)
row.LayoutOrder = index
row.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
row.BackgroundTransparency = 0.56
row.BorderSizePixel = 0
row.Size = UDim2.new(1, 0, 0, 14)
row.AutomaticSize = Enum.AutomaticSize.Y
row.Font = Enum.Font.Arcade
row.TextSize = 10
row.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
row.TextStrokeTransparency = 0.60
row:SetAttribute("MCChatCreatedAt", entry.time or os.clock())
row.TextColor3 = Color3.fromRGB(255, 255, 255)
row.TextXAlignment = Enum.TextXAlignment.Left
row.TextYAlignment = Enum.TextYAlignment.Center
row.TextWrapped = true
row.RichText = true
row.Text = entry.color and ('' .. escapeRichText(entry.text) .. '') or escapeRichText(entry.text)
row.ZIndex = 91
row.Parent = chatRowsFrame
end
end
F.appendChatLine = function(line, color)
line = tostring(line or "")
if not color and (line:match(" joined the game$") or line:match(" left the game$")) then
color = "#FFFF55" -- Java formatting code §e (yellow).
end
table.insert(chatEntries, { text = line, color = color, time = os.clock() })
while #chatEntries > 8 do table.remove(chatEntries, 1) end
renderChatEntries()
end
local chatFadeAccumulator = 0
F.track(RunService.Heartbeat:Connect(function(dt)
chatFadeAccumulator += dt
if chatFadeAccumulator < 0.1 then return end
chatFadeAccumulator = 0
if not chatRowsFrame or not chatRowsFrame.Parent then return end
local now = os.clock()
for _, row in ipairs(chatRowsFrame:GetChildren()) do
if row:IsA("TextLabel") then
local createdAt = row:GetAttribute("MCChatCreatedAt") or now
local age = math.max(0, now - createdAt)
if chatOpen then
row.Visible = true
row.TextTransparency = 0
row.BackgroundTransparency = 0.56
else
local fresh = age < 10
row.Visible = fresh
if fresh then
row.AutomaticSize = Enum.AutomaticSize.Y
local fade = age <= 8 and 1 or math.clamp((10 - age) / 2, 0, 1)
row.TextTransparency = 1 - fade
row.BackgroundTransparency = 1 - 0.44 * fade
else
row.AutomaticSize = Enum.AutomaticSize.None
row.Size = UDim2.new(1, 0, 0, 0)
row.TextTransparency = 1
row.BackgroundTransparency = 1
end
end
end
end
end))
-- Announce the players already in this server, then watch future join/leave events.
for _, existingPlayer in ipairs(Players:GetPlayers()) do
if existingPlayer ~= lp then
F.appendChatLine(tostring(existingPlayer.DisplayName or existingPlayer.Name) .. " joined the game")
end
end
F.track(Players.PlayerAdded:Connect(function(joiningPlayer)
if joiningPlayer ~= lp then
F.appendChatLine(tostring(joiningPlayer.DisplayName or joiningPlayer.Name) .. " joined the game")
end
end))
F.track(Players.PlayerRemoving:Connect(function(leavingPlayer)
if leavingPlayer ~= lp then
F.appendChatLine(tostring(leavingPlayer.DisplayName or leavingPlayer.Name) .. " left the game")
end
end))
F.setChatOpen = function(open, focus)
chatOpen = open == true
renderChatEntries()
chatPanel.Visible = hudVisible
chatInput.Visible = hudVisible and chatOpen
if F.applyCameraMode then F.applyCameraMode() end
if open and focus then chatInput:CaptureFocus() else chatInput:ReleaseFocus() end
if open then
attackHeld, useHeld, touchJumpHeld = false, false, false
if F.stopUseItem then F.stopUseItem() end
F.stopDestroyBlock()
end
end
F.executeLocalCommand = function(raw)
local message = tostring(raw or ""):gsub("^%s+", ""):gsub("%s+$", "")
if message == "" then return end
chatInput.Text = ""
if message:sub(1, 1) ~= "/" then F.appendChatLine(" " .. message) return end
local args = {}
for word in message:gmatch("%S+") do args[#args + 1] = word end
local cmd = (args[1] or ""):lower()
if cmd == "/help" then
F.appendChatLine("/help /fly /gamemode creative|survival /tp x y z /time set day|night")
elseif cmd == "/fly" then
if abilities.mayfly then abilities.flying = not abilities.flying F.appendChatLine("Flight: " .. (abilities.flying and "enabled" or "disabled")) else F.appendChatLine("Flight is Creative-only.") end
elseif cmd == "/gamemode" then
local mode = (args[2] or ""):lower()
if mode == "creative" then F.setGameMode(true) elseif mode == "survival" then F.setGameMode(false) else F.appendChatLine("Usage: /gamemode creative|survival") end
if creativeBtn then F.paintToggle(creativeBtn, creative); creativeBtn.Text = creative and "Creative" or "Survival" end
if flyBtn then flyBtn.Visible = creative; F.paintToggle(flyBtn, abilities.flying) end
F.appendChatLine("Gamemode: " .. (creative and "Creative" or "Survival"))
elseif cmd == "/tp" or cmd == "/teleport" then
local x, y, z = tonumber(args[2]), tonumber(args[3]), tonumber(args[4])
if x and y and z then
pos = Vector3.new(x * BLOCK, y * BLOCK, z * BLOCK)
prevPos = pos
vel = Vector3.zero
F.appendChatLine(string.format("Teleported to %.1f %.1f %.1f", x, y, z))
else F.appendChatLine("Usage: /tp x y z") end
elseif cmd == "/time" and (args[2] or ""):lower() == "set" then
local value = (args[3] or ""):lower()
if value == "day" then Lighting.ClockTime = 12; F.appendChatLine("Set local time to day.")
elseif value == "night" then Lighting.ClockTime = 0; F.appendChatLine("Set local time to night.")
else F.appendChatLine("Usage: /time set day|night") end
else
F.appendChatLine("Unknown command. Use /help.")
end
end
F.track(chatInput.FocusLost:Connect(function(enterPressed)
if enterPressed then F.executeLocalCommand(chatInput.Text); F.setChatOpen(false, false) end
end))
F.makePojavTopButton("DEBUG", 0, 52, F.toggleDebug)
F.makePojavTopButton("CHAT", 56, 46, function() local open = not chatOpen; F.setChatOpen(open, open) end)
F.makePojavTopButton("KEYBOARD", 106, 65, function() F.setChatOpen(true, true) end)
F.makePojavTopButton("GUI", 175, 43, function()
hudVisible = not hudVisible
F.updateHudVisibility()
end, true)
cameraViewButton = F.makePojavTopButton("1ST", 221, 81, function()
viewMode = (viewMode + 1) % 3
if F.applyCameraMode then F.applyCameraMode() end
end, true)
-- Place directional buttons at bottom-left; these provide movement while touch
-- camera look remains on the right side of the screen.
if UIS.TouchEnabled then
mobileDpad = Instance.new("Frame")
mobileDpad.Name = "PojavDirectionalPad"
mobileDpad.BackgroundTransparency = 1
mobileDpad.Size = UDim2.fromOffset(114, 114)
mobileDpad.Position = UDim2.new(0, 10, 1, -184)
mobileDpad.ZIndex = 10
mobileDpad.Parent = controlsGui
local function makeDpadButton(name, symbol, x, y, direction)
local b = Instance.new("TextButton")
b.Name = "Move_" .. name
b.Position = UDim2.fromOffset(x, y)
b.Size = UDim2.fromOffset(36, 36)
b.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
b.BackgroundTransparency = 0.18
b.BorderSizePixel = 0
b.AutoButtonColor = false
b.TextColor3 = Color3.fromRGB(248, 249, 252)
b.TextSize = 19
b.Font = Enum.Font.Code
b.Text = symbol
b.ZIndex = 11
b.Parent = mobileDpad
local function begin()
if direction == "Forward" then
local now = os.clock()
if now - lastMobileForwardTap = 1 then break end
RunService.Heartbeat:Wait()
end
-- Remove the dead NPC/player model after its death pose, rather than leaving
-- an invisible humanoid or an empty model behind in this client's world.
if entity and entity.Parent then pcall(function() entity:Destroy() end) end
if deathHighlight and deathHighlight.Parent then pcall(function() deathHighlight:Destroy() end) end
end)
end
F.attackEntity = function(entity, targetHumanoid)
if F.playerDead or not (entity and entity.Parent and targetHumanoid and targetHumanoid.Parent) then return false end
if F.entityAttackCooldown > 0 then return false end
local state = F.getEntityState(entity, targetHumanoid)
if state.dead or targetHumanoid.Health <= 0 or state.health <= 0 then
if not state.dead and state.health <= 0 then F.beginEntityDeath(entity, targetHumanoid, state, nil) end
return false
end
local hitHighlight = F.makeEntityHighlight(entity)
local targetStack = slots[36 + selected]
local heldId = targetStack and targetStack.id or nil
local damageByItem = {
diamond_sword = 7,
diamond_axe = 6,
diamond_pickaxe = 5,
diamond_shovel = 4,
stick = 1,
}
local damage = damageByItem[heldId] or 1
state.health = math.max(0, state.health - damage)
state.lastHitBy = tostring(lp.DisplayName or lp.Name)
state.lastHitAt = os.clock()
F.entityAttackCooldown = 6
-- Mirror the translated Minecraft health back to this client's Humanoid copy.
-- Set nativeHealth first so HealthChanged does not count our own write twice.
state.nativeHealth = math.clamp(state.health * ENTITY_HEALTH_SCALE, 0, targetHumanoid.MaxHealth)
if state.health 1 then mobileMoveVector = mobileMoveVector.Unit end
end
F.getMove = function()
local move = Vector3.zero
if controls then
local ok, v = pcall(function() return controls:GetMoveVector() end)
if ok and typeof(v) == "Vector3" then move = v end
end
if move.Magnitude 1 then move = move.Unit end
return move
end
F.hideOneAvatarObject = function(d)
if d:IsA("BasePart") then d.LocalTransparencyModifier = 1
elseif d:IsA("Decal") then d.Transparency = 1 end
end
F.hideCharacterLocally = function(c)
F.hiddenAvatarObjects = {}
for _, d in ipairs(c:GetDescendants()) do
if d:IsA("BasePart") or d:IsA("Decal") then
F.hiddenAvatarObjects[#F.hiddenAvatarObjects + 1] = d
F.hideOneAvatarObject(d)
end
end
F.track(c.DescendantAdded:Connect(function(d)
if char ~= c then return end
if d:IsA("BasePart") or d:IsA("Decal") then
F.hiddenAvatarObjects[#F.hiddenAvatarObjects + 1] = d
F.hideOneAvatarObject(d)
end
end))
end
F.bind = function(c)
F.hideDeathScreen()
char = c
hum = c:WaitForChild("Humanoid")
F.observeHumanoid(hum)
F.oldCameraOffset = hum.CameraOffset
cameraEyeH = 1.62
eyeH = 1.62
hum.CameraOffset = Vector3.zero
hrp = c:WaitForChild("HumanoidRootPart")
if UIS.TouchEnabled and controls then pcall(function() controls:Disable() end) end
local off = (hum.RigType == Enum.HumanoidRigType.R6) and 3 or (hrp.Size.Y / 2 + hum.HipHeight)
rootVisualOffset = off
pos = hrp.Position - Vector3.new(0, off, 0) + Vector3.new(0, 0.05, 0)
prevPos, spawnPos, vel = pos, pos, Vector3.zero
onGround = false
yaw = math.atan2(-hrp.CFrame.LookVector.X, -hrp.CFrame.LookVector.Z)
bodyYaw, prevBodyYaw = yaw, yaw
hrp.Anchored = false
hum.PlatformStand = true
hum.WalkSpeed = 0
hum.AutoRotate = false
hum.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
rp.FilterDescendantsInstances = { char, model }
F.hideCharacterLocally(c)
if F.applyCameraMode then F.applyCameraMode() end
end
F.applyCameraMode = function()
camera = workspace.CurrentCamera or camera
if not camera then return end
camera.CameraType = Enum.CameraType.Custom
if hum and hum.Parent then camera.CameraSubject = hum end
local uiOpen = invOpen or chatOpen
if uiOpen then
-- Keep the native camera, but unlock the cursor while an interface is open.
lp.CameraMode = Enum.CameraMode.Classic
lp.CameraMinZoomDistance = oldCameraMinZoom
lp.CameraMaxZoomDistance = oldCameraMaxZoom
UIS.MouseBehavior = Enum.MouseBehavior.Default
UIS.MouseIconEnabled = true
elseif viewMode == 0 then
lp.CameraMode = Enum.CameraMode.LockFirstPerson
lp.CameraMinZoomDistance = oldCameraMinZoom
lp.CameraMaxZoomDistance = oldCameraMaxZoom
else
lp.CameraMode = Enum.CameraMode.Classic
-- Keep both third-person views at one fixed native-camera distance.
lp.CameraMinZoomDistance = 12
lp.CameraMaxZoomDistance = 12
end
if cameraViewButton then
cameraViewButton.Text = ({[0] = "1ST", [1] = "3RD BACK", [2] = "3RD FRONT"})[viewMode] or "1ST"
end
end
local W = 0.6 * BLOCK
local STEP_HEIGHT = 0.6 * BLOCK
local COLLISION_SKIN = 0.025
F.cast = function(p, h, d)
local size = Vector3.new(W - 0.02, h * BLOCK - 0.02, W - 0.02)
return workspace:Blockcast(CFrame.new(p + Vector3.new(0, h * BLOCK / 2, 0)), size, d, rp)
end
F.moveAxis = function(p, axis, amount, h)
if math.abs(amount) <= 1e-5 then return p, false end
local d = axis * amount
local hit = F.cast(p, h, d)
if hit then
local travel = math.max(0, hit.Distance - COLLISION_SKIN)
return p + d.Unit * travel, true
end
return p + d, false
end
F.tryStep = function(fromPosition, axis, amount, h)
local upPosition, upHit = F.moveAxis(fromPosition, Vector3.yAxis, STEP_HEIGHT, h)
if upHit then return fromPosition, false end
local acrossPosition, acrossHit = F.moveAxis(upPosition, axis, amount, h)
if acrossHit and (acrossPosition - upPosition).Magnitude 0.001
end
F.moveHorizontalAxis = function(p, axis, amount, h, grounded)
local directPosition, hit = F.moveAxis(p, axis, amount, h)
if not hit or not grounded then return directPosition, hit end
local steppedPosition, stepped = F.tryStep(p, axis, amount, h)
if stepped and (steppedPosition - p).Magnitude > math.abs(amount) * 0.5 then
return steppedPosition, false
end
return directPosition, true
end
F.horizontal = function(p, dx, dz, h, grounded)
local hx, hz = false, false
if math.abs(dx) >= math.abs(dz) then
p, hx = F.moveHorizontalAxis(p, Vector3.xAxis, dx, h, grounded)
p, hz = F.moveHorizontalAxis(p, Vector3.zAxis, dz, h, grounded)
else
p, hz = F.moveHorizontalAxis(p, Vector3.zAxis, dz, h, grounded)
p, hx = F.moveHorizontalAxis(p, Vector3.xAxis, dx, h, grounded)
end
return p, hx, hz
end
F.hasGroundAt = function(p, h)
-- Use the original controller's short ground probe. A distant lower floor must
-- not count as grounding, or the feet can stop above the baseplate.
return F.cast(p, h, Vector3.new(0, -0.16, 0)) ~= nil
end
F.edgeClamp = function(p, dx, dz, h)
local inc = 0.05 * BLOCK
local function shrink(v) if math.abs(v) <= inc then return 0 end return v - math.sign(v) * inc end
for _ = 1, 40 do if dx ~= 0 and not F.hasGroundAt(p + Vector3.new(dx, 0, 0), h) then dx = shrink(dx) else break end end
for _ = 1, 40 do if dz ~= 0 and not F.hasGroundAt(p + Vector3.new(0, 0, dz), h) then dz = shrink(dz) else break end end
for _ = 1, 40 do
if dx ~= 0 and dz ~= 0 and not F.hasGroundAt(p + Vector3.new(dx, 0, dz), h) then dx = shrink(dx) dz = shrink(dz) else break end
end
return dx, dz
end
F.moveEntity = function(dx, dy, dz)
local h = sneaking and 1.5 or 1.8
local startGround = onGround
local p = pos
if sneaking and startGround and dy <= 0 then dx, dz = F.edgeClamp(p, dx, dz, h) end
-- Match the mechanics controller: resolve horizontal movement first, then fall.
-- This lets the player leave an upper platform before ground contact is tested.
local hx, hz
p, hx, hz = F.horizontal(p, dx, dz, h, startGround)
local hitY
p, hitY = F.moveAxis(p, Vector3.yAxis, dy, h)
local landed = hitY and dy 0 then p -= Vector3.yAxis * settle end
return p, true
end
local H = (function()
local rectsOf, paintFaceOf, FACES, BLOCKFACES, getBlockAt = MCB.rects, MCB.paintFace, MCB.FACES, MCB.BLOCKFACES, MCB.get
local climbOP = OverlapParams.new()
climbOP.FilterType = Enum.RaycastFilterType.Exclude
climbOP.RespectCanCollide = false
local handsFolder = Instance.new("Folder")
handsFolder.Name = "MCHands"
handsFolder.Parent = workspace
local function isOnClimbable()
local b = getBlockAt(pos + Vector3.new(0, 0.05, 0))
if b and b:GetAttribute("MCClimb") then return true end
climbOP.FilterDescendantsInstances = { char, model, blockFolder, handsFolder }
local box = workspace:GetPartBoundsInBox(CFrame.new(pos + Vector3.new(0, 0.9 * BLOCK, 0)), Vector3.new(0.6 * BLOCK, 1.8 * BLOCK, 0.6 * BLOCK), climbOP)
for _, p in ipairs(box) do
if p:IsA("TrussPart") then return true end
end
return false
end
local Mcf = CFrame.Angles(0, 0, math.pi)
local rad = math.rad
local HANDHELD = { diamond_sword = true, diamond_pickaxe = true, diamond_axe = true, diamond_shovel = true, stick = true }
local DISPLAY = {
-- Non-block item transforms follow the Java 1.12.x item-model display settings.
-- Generated items (food, ingots, gems, etc.) use generated.json's third-person pose;
-- tools and swords use handheld.json's angled third-person pose. Block transforms
-- are intentionally untouched.
generated = { fp = { r = { 0, -90, 25 }, t = { 1.13, 3.2, 1.13 }, s = 0.60 }, tp = { r = { 0, 0, 0 }, t = { 0, 3, 1 }, s = 0.48 } },
handheld = { fp = { r = { 0, -90, 25 }, t = { 1.13, 3.2, 1.13 }, s = 0.60 }, tp = { r = { 0, -90, 55 }, t = { 0, 4, 0.5 }, s = 0.68 } },
block = { fp = { r = { 0, 45, 0 }, t = { 0, 0, 0 }, s = 0.36 }, tp = { r = { 75, 45, 0 }, t = { 0, 2.5, 0 }, s = 0.375 } },
}
local function itemKind(id)
if BLOCKFACES[id] then return "block" end
return HANDHELD[id] and "handheld" or "generated"
end
local function isBlockItem(id)
return BLOCKFACES[id] ~= nil or (ITEMS[id] ~= nil and ITEMS[id].placeable == true)
end
local function dispCF(d, kind)
local translation = CFrame.new(Vector3.new(d.t[1], d.t[2], d.t[3]) / 16 * BLOCK)
if kind == "block" then
-- Preserve the existing block-item transform path, per the requested scope.
return translation
* CFrame.Angles(0, 0, rad(d.r[3]))
* CFrame.Angles(0, rad(d.r[2]), 0)
* CFrame.Angles(rad(d.r[1]), 0, 0)
end
-- Java 1.12 ItemTransformVec3f JSON display transforms are composed X, Y, Z.
return translation
* CFrame.Angles(rad(d.r[1]), 0, 0)
* CFrame.Angles(0, rad(d.r[2]), 0)
* CFrame.Angles(0, 0, rad(d.r[3]))
end
local function basePart(size, color)
local p = Instance.new("Part")
p.Size = size
p.Color = color
p.Material = Enum.Material.SmoothPlastic
p.Anchored, p.CanCollide, p.CanQuery, p.CanTouch, p.CastShadow = true, false, false, false, false
return p
end
local itemModels = {}
local function getItemModel(id, scale)
local key = id .. "@" .. scale
local m = itemModels[key]
if m then return m end
m = Instance.new("Model")
m.Name = key
if itemKind(id) == "block" then
local cube = basePart(Vector3.new(BLOCK, BLOCK, BLOCK) * scale, BLOCK_COLORS[id] or Color3.fromRGB(150, 150, 150))
cube.Parent = m
m.PrimaryPart = cube
for _, f in ipairs(FACES) do paintFaceOf(cube, f[1], id) end
else
local a = basePart(Vector3.new(0.05, 0.05, 0.05), Color3.new(1, 1, 1))
a.Transparency = 1
a.Parent = m
m.PrimaryPart = a
local tex = ICON[id]
if tex then
if not tex.px then tex.px = F.decodeRLE(tex.d) end
for _, r in ipairs(rectsOf(tex.px, tex.w, tex.h)) do
local v = basePart(Vector3.new(r.w, r.h, 1) * PX * scale, r.c)
v.CFrame = CFrame.new(Vector3.new(r.x + r.w / 2 - 8, 8 - r.y - r.h / 2, 0) * PX * scale)
v.Parent = m
end
end
end
itemModels[key] = m
return m
end
local FIRST_PERSON_ARM_SCALE = 1.0
local fpArm = basePart(Vector3.new(4, 12, 4) * PX * FIRST_PERSON_ARM_SCALE, Color3.fromRGB(176, 125, 96))
fpArm.Name = "FPArm"
F.paintBox(fpArm, 40, 16, 4, 12, 4)
local curModel = nil
local function showModel(m, cf)
if curModel ~= m then
if curModel then curModel.Parent = nil end
curModel = m
m.Parent = handsFolder
end
m:PivotTo(cf)
end
local function hideItem()
if curModel then curModel.Parent = nil curModel = nil end
end
local function hideFP()
fpArm.Parent = nil
hideItem()
end
local attackPrev, attackCur = 0, 0
local handHeight, handHeightPrev = 0, 0
local shownId = nil
local function handTick()
attackPrev = attackCur
if swinging then
swingTime += 1
if swingTime >= 6 then
-- End this six-tick swing at the wrapped zero phase. Render interpolation
-- treats the 5/6 -> 0 boundary as 5/6 -> 1, matching Minecraft's partial-tick
-- swing interpolation without playing the attack curve backward.
swingTime = 0
if swingQueued then
swingQueued = false
swinging = true
else
swinging = false
end
attackCur = 0
else
attackCur = math.clamp(swingTime / 6, 0, 1)
end
else
attackCur = 0
end
F.swingProgress = attackCur
local held = slots[36 + selected]
local id = held and held.id or nil
handHeightPrev = handHeight
handHeight += math.clamp((id == shownId and 1 or 0) - handHeight, -0.4, 0.4)
if handHeight < 0.1 and id ~= shownId then shownId = id end
end
local function attackAnim(alpha)
-- Interpolate like Minecraft's partial-tick swing value. The end transition
-- from a high phase back to zero wraps forward to phase 1, rather than swinging
-- the arm backward or snapping at the final frame.
local d = attackCur - attackPrev
if d < -0.5 then d += 1 end
return math.clamp(attackPrev + d * math.clamp(alpha or 0, 0, 1), 0, 1)
end
local function updateFirstPerson(camCF, alpha)
local atk = attackAnim(alpha)
local inv = 1 - (handHeightPrev + (handHeight - handHeightPrev) * alpha)
local s = math.sqrt(atk)
local id = shownId
if id == nil then
hideItem()
local chain = CFrame.new(Vector3.new(
-0.3 * math.sin(s * math.pi) + 0.64000005,
0.4 * math.sin(s * 2 * math.pi) - 0.6 + inv * -0.6,
-0.4 * math.sin(atk * math.pi) - 0.71999997) * BLOCK)
* CFrame.Angles(0, rad(45), 0)
* CFrame.Angles(0, rad(math.sin(s * math.pi) * 70), 0)
* CFrame.Angles(0, 0, rad(math.sin(atk * atk * math.pi) * -20))
* CFrame.new(Vector3.new(-1, 3.6, 3.5) * BLOCK)
* CFrame.Angles(0, 0, rad(120)) * CFrame.Angles(rad(200), 0, 0) * CFrame.Angles(0, rad(-135), 0)
* CFrame.new(Vector3.new(5.6, 0, 0) * BLOCK)
if slots[36 + selected] == nil then
fpArm.CFrame = camCF * chain * CFrame.new(Vector3.new(-6, 6, 0) / 16 * BLOCK) * Mcf
fpArm.Parent = handsFolder
else
fpArm.Parent = nil
end
else
local kind = itemKind(id)
local d = DISPLAY[kind].fp
local eatBlend = math.clamp(F.eatAnimationBlend or (F.eating and 1 or 0), 0, 1)
local eatElapsed = math.clamp(F.renderEatTime or F.eatTime or 0, 0, 32)
local eatRemaining = 1 - eatElapsed / 32
local eatPull = 1 - eatRemaining ^ 27
local eatBob = 0
if eatRemaining 0.001 then
local amount = eatPull * eatBlend
eatTransform = CFrame.new(Vector3.new(amount * 0.6, amount * -0.5 + eatBob * eatBlend, 0) * BLOCK)
* CFrame.Angles(0, rad(amount * 90), 0)
* CFrame.Angles(rad(amount * 10), 0, 0)
* CFrame.Angles(0, 0, rad(amount * 30))
end
-- Block item rotation intentionally stays on its existing transform path.
fpArm.Parent = nil
showModel(getItemModel(id, d.s), camCF * chain * eatTransform * dispCF(d, kind))
end
end
local function updateThirdPerson(root, armP, armX, bobZ, armY, armSwingZ)
fpArm.Parent = nil
local held = slots[36 + selected]
if not held then hideItem() return end
local kind = itemKind(held.id)
local d = DISPLAY[kind].tp
local cf = root * Mcf
* CFrame.new(armP / 16 * BLOCK)
* CFrame.Angles(armX, armY or 0, bobZ + (armSwingZ or 0))
local handOffset = CFrame.new(Vector3.new(1 / 16, 0.125, -0.625) * BLOCK)
-- The pixel-art models are authored in an XY plane. Align that plane to the
-- third-person hand first, then apply the independent display transform for this
-- item kind. This fixes Item A without sharing its transform with block items.
cf = cf * CFrame.Angles(rad(-90), 0, 0) * CFrame.Angles(0, rad(180), 0) * handOffset
local eatBlend = math.clamp(F.eatAnimationBlend or (F.eating and 1 or 0), 0, 1)
if kind ~= "block" and eatBlend > 0.001 then
local elapsed = math.clamp(F.renderEatTime or F.eatTime or 0, 0, 32)
local remaining = 1 - elapsed / 32
local amount = (1 - remaining ^ 27) * eatBlend
local bob = remaining < 0.8 and math.abs(math.cos((32 - elapsed) / 4 * math.pi) * 0.1) or 0
-- The hand/item moves together, smoothly approaching the mouth while held.
cf = cf * CFrame.new(Vector3.new(amount * 0.13, amount * 0.10 + bob * eatBlend, 0) * BLOCK)
* CFrame.Angles(0, rad(amount * 35), 0)
* CFrame.Angles(rad(amount * 10), 0, 0)
* CFrame.Angles(0, 0, rad(amount * 18))
end
cf = cf * dispCF(d, kind)
showModel(getItemModel(held.id, d.s), cf)
end
local function createDropVisual(id, count, position)
local visual = getItemModel(id, 0.22):Clone()
visual.Name = "DroppedItem_" .. id
for _, node in ipairs(visual:GetDescendants()) do
if node:IsA("BasePart") then
node.Anchored = true
node.CanCollide = false
node.CanTouch = false
node.CanQuery = false
node.CastShadow = true
end
end
visual.Parent = dropFolder
visual:PivotTo(CFrame.new(position))
local primary = visual.PrimaryPart
local visiblePartCount = 0
for _, node in ipairs(visual:GetDescendants()) do
if node:IsA("BasePart") and node ~= primary and node.Transparency 1 and tostring(count) or ""
countLabel.Parent = billboard
end
return visual, countLabel
end
return {
isOnClimbable = isOnClimbable, handsFolder = handsFolder, handTick = handTick,
updateFirstPerson = updateFirstPerson, updateThirdPerson = updateThirdPerson,
swingAt = attackAnim,
createDropVisual = createDropVisual,
}
end)()
local droppedItems = {}
local dropRayParams = RaycastParams.new()
dropRayParams.FilterType = Enum.RaycastFilterType.Exclude
dropRayParams.RespectCanCollide = true
F.spawnItemDrop = function(id, count)
count = math.floor(tonumber(count) or 0)
if not id or count <= 0 or not ITEMS[id] or not H.createDropVisual then return false end
local cam = workspace.CurrentCamera
local look = cam and cam.CFrame.LookVector or Vector3.new(0, 0, -1)
local spawnAt = (pos or Vector3.zero) + Vector3.new(0, 0.85 * BLOCK, 0) + look * (1.5 * BLOCK)
local visual, countLabel = H.createDropVisual(id, count, spawnAt)
local initialVelocity = look * (BLOCK * 1.5) + Vector3.new(0, BLOCK * 0.9, 0)
droppedItems[#droppedItems + 1] = {
id = id, count = count, visual = visual, countLabel = countLabel,
position = spawnAt, velocity = initialVelocity, spin = math.random() * math.pi * 2,
age = 0, grounded = false, pickupDelay = 0.5,
}
return true
end
F.dropInventorySelection = function(dropAll)
local stack, sourceIndex
if carried then
stack = carried
sourceIndex = "carried"
elseif panel and panel.Visible and hover ~= nil and slots[hover] then
stack = slots[hover]
sourceIndex = hover
else
sourceIndex = 36 + selected
stack = slots[sourceIndex]
end
if not stack or not stack.id or stack.n <= 0 then return end
local count = dropAll and stack.n or 1
if not F.spawnItemDrop(stack.id, count) then return end
stack.n -= count
if stack.n 300 then
if item.visual then item.visual:Destroy() end
table.remove(droppedItems, i)
else
if not item.grounded then
item.velocity = item.velocity + Vector3.new(0, -9.8 * BLOCK * dt, 0)
local delta = item.velocity * dt
local hit = workspace:Raycast(item.position, delta, dropRayParams)
if hit then
item.position = hit.Position + hit.Normal * 0.35
if hit.Normal.Y > 0.45 and item.velocity.Y = item.pickupDelay and (item.position - pickupPoint).Magnitude <= BLOCK * 1.25 then
local remaining = item.count
local pending = { id = item.id, n = item.count }
F.insertStack(pending, 9, 44)
if pending.n < remaining then
item.count = pending.n
needsRefresh = true
if item.count 1 and tostring(item.count) or "" end
end
end
end
end
end
if needsRefresh then refresh() end
end
local wasJumping = false
F.tick = function()
if F.playerDead then return end
prevPos, prevBodyYaw, prevWalkSpeed = pos, bodyYaw, walkSpeed
age += 1
H.handTick()
F.eatTimePrev = F.eatTime or 0
if F.eating then
F.eatTime = (F.eatTime or 0) + 1
if F.eatTime >= 32 then
if not creative then
local foodStack = slots[36 + selected]
if foodStack and foodStack.id == F.eatItemId then
foodStack.n -= 1
if foodStack.n 0 then jumpDelay -= 1 end
if jumpTriggerTime > 0 then jumpTriggerTime -= 1 end
if rightClickDelay > 0 then rightClickDelay -= 1 end
if missTime > 0 then missTime -= 1 end
local blockedByUI = invOpen or chatOpen or (chatInput ~= nil and chatInput:IsFocused())
local mv, jumpReq = Vector3.zero, false
if not blockedByUI then
mv = F.getMove()
jumpReq = UIS:IsKeyDown(Enum.KeyCode.Space) or touchJumpHeld or (hum ~= nil and hum.Jump)
if hum and hum.Jump then hum.Jump = false end
end
local inputForward = -mv.Z
-- Sprint uses the original input; camera-relative movement below handles front-view inversion.
sneaking = (not blockedByUI) and (UIS:IsKeyDown(Enum.KeyCode.LeftShift) or UIS:IsKeyDown(Enum.KeyCode.RightShift) or sneakToggle) and not abilities.flying
if inputForward = 0.8 and (
UIS:IsKeyDown(Enum.KeyCode.LeftControl) or UIS:IsKeyDown(Enum.KeyCode.RightControl) or sprintToggle or sprintLatch
)
local justToggledFlight = false
if abilities.mayfly and not blockedByUI then
if jumpReq and not wasJumping then
if jumpTriggerTime == 0 then
jumpTriggerTime = 7
else
abilities.flying = not abilities.flying
if abilities.flying and onGround then vel = Vector3.new(vel.X, 0, vel.Z) end
justToggledFlight = true
jumpTriggerTime = 0
end
end
end
wasJumping = jumpReq
if blockedByUI then
vel = Vector3.zero
walkSpeed += (0 - walkSpeed) * 0.4
walkPos += walkSpeed
F.continueAttack(false)
return
end
local cameraNow = workspace.CurrentCamera or camera
local worldDirection = Vector3.zero
if cameraNow then
local cameraMove = mv
if viewMode == 2 then cameraMove = Vector3.new(-mv.X, 0, -mv.Z) end
local look = cameraNow.CFrame.LookVector
local right = cameraNow.CFrame.RightVector
local forwardFlat = Vector3.new(look.X, 0, look.Z)
local rightFlat = Vector3.new(right.X, 0, right.Z)
if forwardFlat.Magnitude > 1e-5 then forwardFlat = forwardFlat.Unit end
if rightFlat.Magnitude > 1e-5 then rightFlat = rightFlat.Unit end
worldDirection = rightFlat * cameraMove.X + forwardFlat * -cameraMove.Z
if worldDirection.Magnitude > 1 then worldDirection = worldDirection.Unit end
end
local onClimb = (not abilities.flying) and H.isOnClimbable()
local horizontalSpeed
if abilities.flying then
horizontalSpeed = sprinting and FLY_SPRINT_BLOCKS_PER_SECOND or FLY_BLOCKS_PER_SECOND
elseif sneaking then
horizontalSpeed = SNEAK_BLOCKS_PER_SECOND
elseif sprinting then
horizontalSpeed = SPRINT_BLOCKS_PER_SECOND
else
horizontalSpeed = WALK_BLOCKS_PER_SECOND
end
-- Match the companion controller: horizontal velocity is measured in blocks/tick,
-- approaches the target speed using Minecraft's friction factor, and uses the same
-- 20 TPS collision movement below. Default ground slipperiness is 0.6 (0.546 friction).
local slipperiness = GROUND_SLIPPERINESS
if onGround then
local groundRay = workspace:Raycast(pos + Vector3.new(0, 0.04, 0), Vector3.new(0, -0.18, 0), rp)
if groundRay and groundRay.Instance and groundRay.Instance:IsA("BasePart") then
local tagged = groundRay.Instance:GetAttribute("MCSlipperiness")
if typeof(tagged) == "number" then
slipperiness = math.clamp(tagged, 0.1, 1.0)
elseif groundRay.Instance.Material == Enum.Material.Ice then
slipperiness = 0.98
end
end
end
local friction = onGround and math.clamp(slipperiness * 0.91, 0.1, 0.99) or 0.91
local targetPerTick = horizontalSpeed / 20
local accel = (1 - friction) * targetPerTick
local hv = Vector3.new(vel.X, 0, vel.Z) * friction
if worldDirection.Magnitude > 0.001 and not blockedByUI then
hv += worldDirection * accel
end
vel = Vector3.new(hv.X, vel.Y, hv.Z)
if abilities.flying then
local verticalInput = 0
if jumpReq and not justToggledFlight then verticalInput += 1 end
if UIS:IsKeyDown(Enum.KeyCode.LeftShift) or UIS:IsKeyDown(Enum.KeyCode.RightShift) or sneakToggle then verticalInput -= 1 end
local targetVertical = verticalInput * 0.12
vel = Vector3.new(vel.X, vel.Y * 0.55 + targetVertical * 0.45, vel.Z)
F.moveEntity(vel.X * BLOCK, vel.Y * BLOCK, vel.Z * BLOCK)
if onGround and vel.Y < 0 then vel = Vector3.new(vel.X, 0, vel.Z) end
else
if jumpReq then
if onGround and jumpDelay == 0 and not blockedByUI then
local newY = 0.42
-- Keep sprint-jumping at normal ground sprint speed. The previous
-- extra horizontal impulse made a regular jump feel like flight sprint.
vel = Vector3.new(vel.X, newY, vel.Z)
jumpDelay = 10
end
else
jumpDelay = 0
end
if onClimb then
fallDistance = 0
local yd = math.max(vel.Y, -0.15)
if yd < 0 and sneaking then yd = 0 end
vel = Vector3.new(math.clamp(vel.X, -0.15, 0.15), yd, math.clamp(vel.Z, -0.15, 0.15))
end
local hit = F.moveEntity(vel.X * BLOCK, vel.Y * BLOCK, vel.Z * BLOCK)
if hit then sprintLatch = false end
if onClimb and (hit or jumpReq) then vel = Vector3.new(vel.X, 0.2, vel.Z) end
local heightBlocks = sneaking and 1.5 or 1.8
local groundedNow = false
if vel.Y 3 and not abilities.invulnerable then
local dmg = math.floor(fallDistance - 3)
if dmg > 0 and hum then
local nextHealth = math.max(0, hum.Health - dmg * 2)
if nextHealth <= 0 then
F.pendingPlayerDeathMessage = tostring(lp.Name) .. " was killed"
end
hum.Health = nextHealth
if nextHealth <= 0 then
F.beginPlayerDeath(F.pendingPlayerDeathMessage)
return
end
end
end
fallDistance = 0
end
end
end
if math.abs(vel.X) < 0.003 then vel = Vector3.new(0, vel.Y, vel.Z) end
if math.abs(vel.Z) < 0.003 then vel = Vector3.new(vel.X, vel.Y, 0) end
if math.abs(vel.Y) 0.0025 or viewMode == 2 then
local amount = 1 - math.exp(-BODY_MOVE_TURN_RESPONSE * TICK)
bodyYaw = F.wrap(bodyYaw + yawDelta * amount)
if math.abs(yawDelta) 0 then
local catchup = excess - math.min(excess, BODY_TURN_DEADZONE)
local amount = 1 - math.exp(-BODY_TURN_RESPONSE * TICK)
bodyYaw = F.wrap(bodyYaw + math.sign(yawDelta) * catchup * amount)
end
end
if F.entityAttackCooldown > 0 then F.entityAttackCooldown -= 1 end
F.continueAttack(attackHeld and not blockedByUI)
if useHeld and rightClickDelay == 0 and not blockedByUI then F.startUseItem() end
if pos.Y < workspace.FallenPartsDestroyHeight + 50 then pos, prevPos, vel = spawnPos, spawnPos, Vector3.zero end
end
local NUM = {
[Enum.KeyCode.One] = 1, [Enum.KeyCode.Two] = 2, [Enum.KeyCode.Three] = 3, [Enum.KeyCode.Four] = 4,
[Enum.KeyCode.Five] = 5, [Enum.KeyCode.Six] = 6, [Enum.KeyCode.Seven] = 7, [Enum.KeyCode.Eight] = 8,
[Enum.KeyCode.Nine] = 9,
}
local ptr = Vector2.new(vp.X / 2, vp.Y / 2)
F.isOverHotbar = function(pos2d)
local objs = playerGui:GetGuiObjectsAtPosition(pos2d.X, pos2d.Y)
for _, o in ipairs(objs) do
if o:IsDescendantOf(hotbar) or o == dropInventoryButton or o:IsDescendantOf(dropInventoryButton) then return true end
end
return false
end
F.track(UIS.InputBegan:Connect(function(input, gpe)
local t = input.UserInputType
if t == Enum.UserInputType.Touch then
ptr = Vector2.new(input.Position.X, input.Position.Y)
return
end
if t == Enum.UserInputType.MouseButton1 and not invOpen and not chatOpen and not (chatInput and chatInput:IsFocused()) then
local mp = UIS:GetMouseLocation()
if F.isOverHotbar(mp) then return end
if not gpe then
attackHeld = true
F.startAttack()
end
return
end
if t == Enum.UserInputType.MouseButton2 and not invOpen and not chatOpen and not (chatInput and chatInput:IsFocused()) then
local mp = UIS:GetMouseLocation()
if F.isOverHotbar(mp) then return end
if not gpe then
useHeld = true
F.startUseItem()
end
return
end
if t ~= Enum.UserInputType.Keyboard then return end
if F.playerDead then return end
local k = input.KeyCode
if k == Enum.KeyCode.Escape and chatOpen then
F.setChatOpen(false, false)
return
end
if UIS:GetFocusedTextBox() then return end
if k == Enum.KeyCode.F1 then
hudVisible = not hudVisible
F.updateHudVisibility()
return
elseif k == Enum.KeyCode.F3 then
F.toggleDebug()
return
elseif k == Enum.KeyCode.E then
F.setInventory(not invOpen)
elseif k == Enum.KeyCode.W then
if os.clock() - lastW < 0.3 then sprintLatch = true end
lastW = os.clock()
elseif k == Enum.KeyCode.F5 or k == Enum.KeyCode.V then
viewMode = (viewMode + 1) % 3
F.applyCameraMode()
elseif k == Enum.KeyCode.F4 then
F.setGameMode(not creative)
if creativeBtn then creativeBtn.Text = creative and "Creative" or "Survival"; F.paintToggle(creativeBtn, creative) end
if flyBtn then flyBtn.Visible = creative; F.paintToggle(flyBtn, abilities.flying) end
nameLabel.Text = creative and "Creative Mode" or "Survival Mode"
nameUntil = os.clock() + 2
elseif k == Enum.KeyCode.Q and not invOpen then
local all = UIS:IsKeyDown(Enum.KeyCode.LeftControl) or UIS:IsKeyDown(Enum.KeyCode.RightControl)
local s = slots[36 + selected]
if s then
local count = all and s.n or 1
if F.spawnItemDrop(s.id, count) then
s.n -= count
if s.n = 12 then
F.touchDragging = true
F.clickSlot(F.activeTouchSlot, 1, false)
end
end
elseif t == Enum.UserInputType.MouseWheel and not invOpen and not chatOpen and not (chatInput and chatInput:IsFocused()) then
local dir = math.sign(input.Position.Z)
if dir ~= 0 then F.selectHotbar((selected - dir) % 9) end
end
end))
F.track(UIS.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
attackHeld = false
F.stopDestroyBlock()
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
F.stopUseItem()
end
end))
do
local keys = {
Enum.KeyCode.One, Enum.KeyCode.Two, Enum.KeyCode.Three,
Enum.KeyCode.Four, Enum.KeyCode.Five, Enum.KeyCode.Six,
Enum.KeyCode.Seven, Enum.KeyCode.Eight, Enum.KeyCode.Nine,
Enum.KeyCode.KeypadOne, Enum.KeyCode.KeypadTwo, Enum.KeyCode.KeypadThree,
Enum.KeyCode.KeypadFour, Enum.KeyCode.KeypadFive, Enum.KeyCode.KeypadSix,
Enum.KeyCode.KeypadSeven, Enum.KeyCode.KeypadEight, Enum.KeyCode.KeypadNine,
}
for i = 1, 9 do
local slot = i - 1
local name = "MCSteveHotbar" .. i
ContextActionService:BindActionAtPriority(name, function(_, state)
if state == Enum.UserInputState.Begin then
if invOpen and hover ~= nil and hover ~= 0 then
local a, b = slots[hover], slots[35 + i]
if (b == nil or F.canPlace(hover, b)) and (a == nil or F.canPlace(35 + i, a)) then
slots[hover], slots[35 + i] = b, a
F.updateCraft()
refresh()
end
else
F.selectHotbar(slot)
end
end
return Enum.ContextActionResult.Sink
end, false, 3000, keys[i], keys[i + 9])
end
ContextActionService:BindActionAtPriority("MCSteveScrollHotbar", function(_, state, input)
if state == Enum.UserInputState.Change and not invOpen and input then
local dir = math.sign(input.Position.Z)
if dir ~= 0 then F.selectHotbar((selected - dir) % 9) end
end
return Enum.ContextActionResult.Sink
end, false, 3000, Enum.UserInputType.MouseWheel)
end
local accum = 0
local renderState = { alpha = 0, ipos = pos, ibody = bodyYaw }
F.update = function(dt)
camera = workspace.CurrentCamera or camera
if not camera or F.playerDead then return end
if not (char and char.Parent and hrp and hrp.Parent) then return end
accum += dt
local n = 0
while accum >= TICK and n < 5 and not F.playerDead do
accum -= TICK
F.tick()
n += 1
end
if F.playerDead then accum = 0 return end
if n == 5 then accum = 0 end
local alpha = accum / TICK
if debugPanel and debugPanel.Visible and debugText then
local v = vel or Vector3.zero
local mode = creative and "Creative" or "Survival"
local view = ({[0] = "First person", [1] = "Back", [2] = "Front"})[viewMode] or "Unknown"
debugText.Text = string.format(
"Minecraft 1.12.1 (Steve / Luau)nMode: %s View: %s Flying: %snXYZ: %.2f / %.2f / %.2fnVelocity: %.3f / %.3f / %.3f Ground: %snInventory: %s Blocks: %d",
mode, view, tostring(abilities.flying), pos.X / BLOCK, pos.Y / BLOCK, pos.Z / BLOCK,
v.X, v.Y, v.Z, tostring(onGround), tostring(invOpen), blockFolder and #blockFolder:GetChildren() or 0
)
end
local ipos = prevPos:Lerp(pos, alpha)
local ibody = prevBodyYaw + F.wrap(bodyYaw - prevBodyYaw) * alpha
renderState.alpha, renderState.ipos, renderState.ibody = alpha, ipos, ibody
-- Keep the real character root synchronized before Roblox's native camera step.
-- Viewmodel and Steve limbs are rendered separately after the camera updates.
hrp.CFrame = CFrame.new(ipos + Vector3.new(0, rootVisualOffset, 0)) * CFrame.Angles(0, ibody, 0)
hrp.AssemblyLinearVelocity = Vector3.zero
hrp.AssemblyAngularVelocity = Vector3.zero
if not invOpen then
-- Hover/selection is read-only. Outline the shared-grid cell that the
-- union-cut operation would remove; never replace or voxelize the target.
local hitPart, hitPos, hitNormal = F.pickBlock()
if F.isBreakableTarget(hitPart) and hitPos and hitNormal then
local cellCenter = F.getGridCellCenter(hitPart, hitPos, hitNormal)
selectionProxy.CFrame = CFrame.new(cellCenter)
selectBox.Adornee = selectionProxy
else
selectBox.Adornee = nil
end
else
selectBox.Adornee = nil
end
if selFrame and selFrame.Parent then
selected = math.clamp(math.floor(selected or 0), 0, 8)
selFrame.Position = UDim2.fromOffset((-1 + selected * 20) * GS, -1 * GS)
end
crosshair.Visible = (not invOpen) and viewMode ~= 2
if selected ~= lastSel then
lastSel = selected
local s = slots[36 + selected]
nameLabel.Text = s and ITEMS[s.id].name or ""
nameUntil = os.clock() + 2
end
nameLabel.Visible = os.clock() 1e-5 then yaw = math.atan2(-facing.X, -facing.Z) end
pitch = math.asin(math.clamp(-look.Y, -1, 1))
else
yaw = math.atan2(-look.X, -look.Z)
pitch = math.asin(math.clamp(look.Y, -1, 1))
end
if viewMode == 0 then
model.Parent = nil
H.updateFirstPerson(camera.CFrame, alpha)
else
model.Parent = workspace
local root = CFrame.new(ipos) * CFrame.Angles(0, ibody, 0) * CFrame.new(0, 24 * PX, 0)
local ispeed = prevWalkSpeed + (walkSpeed - prevWalkSpeed) * alpha
local targetHeadYaw = math.clamp(F.wrap(yaw - ibody), -math.rad(38), math.rad(38))
local targetHeadPitch = math.clamp(pitch, -math.rad(50), math.rad(50))
local smoothAlpha = 1 - math.exp(-14 * math.clamp(renderDt or (1 / 60), 0, 0.1))
F.smoothedHeadYaw = F.wrap(F.smoothedHeadYaw + F.wrap(targetHeadYaw - F.smoothedHeadYaw) * smoothAlpha)
F.smoothedHeadPitch += (targetHeadPitch - F.smoothedHeadPitch) * smoothAlpha
local interpolatedSwing = H.swingAt(alpha)
local held = slots[36 + selected]
local aP, aX, aZ, aY, aSwingZ = F.poseSteve(root, F.smoothedHeadPitch, F.smoothedHeadYaw,
walkPos - walkSpeed * (1 - alpha), ispeed, age + alpha, sneaking, held ~= nil, interpolatedSwing)
H.updateThirdPerson(root, aP, aX, aZ, aY, aSwingZ)
end
end
shared.__MCSteveStop = function()
pcall(function() RunService:UnbindFromRenderStep("MCSteve") end)
pcall(function() RunService:UnbindFromRenderStep("MCSteve_SmoothSneakCamera") end)
pcall(function() RunService:UnbindFromRenderStep("MCSteve_ResetPreviousCameraTransforms") end)
pcall(function() RunService:UnbindFromRenderStep("MCSteve_ThirdPersonFrontView") end)
pcall(function() RunService:UnbindFromRenderStep("MCSteve_HideLocalAvatar") end)
pcall(function() RunService:UnbindFromRenderStep("MCSteve_CharacterAndHands") end)
pcall(function() RunService:UnbindFromRenderStep("MCSteve_DroppedItems") end)
for i = 1, 9 do pcall(function() ContextActionService:UnbindAction("MCSteveHotbar" .. i) end) end
pcall(function() ContextActionService:UnbindAction("MCSteveScrollHotbar") end)
for _, c in ipairs(conns) do pcall(function() c:Disconnect() end) end
pcall(function() gui:Destroy() end)
pcall(function() controlsGui:Destroy() end)
pcall(function() if selectionProxy then selectionProxy:Destroy() end end)
pcall(function() model:Destroy() end)
pcall(function() if mobileDpad then mobileDpad:Destroy() end end)
pcall(function() if controls and UIS.TouchEnabled then controls:Enable() end end)
pcall(function() if H.handsFolder then H.handsFolder:Destroy() end end)
pcall(function() if dropFolder then dropFolder:Destroy() end end)
pcall(function() if blockFolder then blockFolder:Destroy() end end)
for _, info in ipairs(F.baseplateOriginals or {}) do
pcall(function()
local part = info.part
if part and part.Parent then
part.LocalTransparencyModifier = info.localTransparencyModifier or 0
part.CanCollide = info.canCollide
part.CanQuery = info.canQuery
part.CanTouch = info.canTouch
end
end)
end
for _, info in ipairs(F.voxelOriginals or {}) do
pcall(function()
local part = info.part
if part and part.Parent then
part.LocalTransparencyModifier = info.localTransparencyModifier or 0
part.CanCollide = info.canCollide
part.CanQuery = info.canQuery
part.CanTouch = info.canTouch
end
end)
end
pcall(function()
UIS.MouseBehavior = Enum.MouseBehavior.Default
UIS.MouseIconEnabled = true
camera.CameraType = Enum.CameraType.Custom
lp.CameraMode = oldCameraMode
lp.CameraMinZoomDistance = oldCameraMinZoom
lp.CameraMaxZoomDistance = oldCameraMaxZoom
if hrp then hrp.Anchored = false end
if hum then
hum.WalkSpeed = 16
hum.AutoRotate = true
hum.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.Viewer
hum.CameraOffset = F.oldCameraOffset or Vector3.zero
camera.CameraSubject = hum
end
if char then
for _, d in ipairs(char:GetDescendants()) do
if d:IsA("BasePart") then d.LocalTransparencyModifier = 0
elseif d:IsA("Decal") then d.Transparency = 0 end
end
end
end)
shared.__MCSteveStop = nil
end
F.track(lp.CharacterAdded:Connect(F.bind))
F.bind(lp.Character or lp.CharacterAdded:Wait())
-- No initial terrain is created; manual block placement remains enabled.
RunService:UnbindFromRenderStep("MCSteve_ResetPreviousCameraTransforms")
RunService:UnbindFromRenderStep("MCSteve_ThirdPersonFrontView")
local lastFrontCamera, lastFrontTransform = nil, CFrame.identity
RunService:UnbindFromRenderStep("MCSteve_SmoothSneakCamera")
RunService:BindToRenderStep("MCSteve_SmoothSneakCamera", Enum.RenderPriority.Camera.Value - 2, function(dt)
if not hum or not hum.Parent then return end
local uiBlocking = invOpen or chatOpen
local sneakInput = UIS:IsKeyDown(Enum.KeyCode.LeftShift) or UIS:IsKeyDown(Enum.KeyCode.RightShift) or sneakToggle
local targetEyeH = (sneakInput and not uiBlocking and not abilities.flying) and 1.27 or 1.62
local smoothAlpha = 1 - math.exp(-16 * math.clamp(dt, 0, 0.1))
cameraEyeH += (targetEyeH - cameraEyeH) * smoothAlpha
eyeH = cameraEyeH
hum.CameraOffset = Vector3.new(0, (cameraEyeH - 1.62) * BLOCK, 0)
end)
RunService:BindToRenderStep("MCSteve_ResetPreviousCameraTransforms", Enum.RenderPriority.Camera.Value - 1, function()
local cam = workspace.CurrentCamera
if not cam then lastFrontCamera = nil; lastFrontTransform = CFrame.identity; return end
if lastFrontCamera == cam then cam.CFrame = cam.CFrame * lastFrontTransform:Inverse() end
lastFrontCamera = cam
lastFrontTransform = CFrame.identity
end)
RunService:BindToRenderStep("MCSteve_ThirdPersonFrontView", Enum.RenderPriority.Camera.Value + 1, function()
local cam = workspace.CurrentCamera
if not cam then return end
if viewMode ~= 2 or invOpen or chatOpen then
lastFrontCamera = cam
lastFrontTransform = CFrame.identity
return
end
local base = cam.CFrame
local focus = cam.Focus.Position
if hrp and hrp.Parent and (focus - hrp.Position).Magnitude > BLOCK * 8 then
focus = hrp.Position + Vector3.new(0, rootVisualOffset * 0.1, 0)
end
local relative = base.Position - focus
local frontPosition = focus + Vector3.new(-relative.X, relative.Y, -relative.Z)
local front = CFrame.lookAt(frontPosition, focus)
lastFrontTransform = base:ToObjectSpace(front)
cam.CFrame = front
end)
RunService:UnbindFromRenderStep("MCSteve_HideLocalAvatar")
RunService:BindToRenderStep("MCSteve_HideLocalAvatar", Enum.RenderPriority.Camera.Value + 1, function()
if char and char.Parent then
for _, descendant in ipairs(F.hiddenAvatarObjects or {}) do
if descendant and descendant.Parent then F.hideOneAvatarObject(descendant) end
end
end
end)
RunService:BindToRenderStep("MCSteve_CharacterAndHands", Enum.RenderPriority.Camera.Value + 2, function(dt)
if F.renderVisuals then F.renderVisuals(dt) end
end)
RunService:UnbindFromRenderStep("MCSteve_DroppedItems")
RunService:BindToRenderStep("MCSteve_DroppedItems", Enum.RenderPriority.Camera.Value + 3, function(dt)
if F.updateDroppedItems then F.updateDroppedItems(dt) end
end)
F.updateCameraViewButton = function()
if cameraViewButton then
cameraViewButton.Text = ({[0] = "1ST", [1] = "3RD BACK", [2] = "3RD FRONT"})[viewMode] or "1ST"
end
end
F.track(RunService.Heartbeat:Connect(function(dt) F.update(dt) end))
print("test")
end
__RunMinecraftClient()
How to Use This Script
1
Open Your Executor
Launch a supported executor and attach it to a running Roblox session.
2
Copy the Script
Click the Copy button above. The full loadstring is placed on your clipboard instantly.
3
Paste & Execute
Paste it into the executor and hit Execute. The hub window opens inside the game.
Features
Compatible Executors
Similar Scripts
3
1 day ago
Key System
Tower Buyer Script – Gnome Code, Tower Shop & Hidden Towers
Universal
1
6 days ago
Key System
Xeno Hub Universal Script – 3,700+ Scripts, Multi-Game Support
Universal
3
1 week ago
Key System
Arcane Hub Script – 100+ Games, 2000+ Features & Universal Script Hub
Universal
13
1 week ago
No Key
Universal – Samui Script Aimlock, Camlock & FPS Boost, Keyless
Universal
5
1 week ago
No Key
rsHub Script Hub – Free, Keyless, 16 Roblox Games & Auto Farm
Universal
5
1 week ago
No Key
Zytra Universal Script – Keyless Silent Aim, Custom Configs & PC Executors
Universal
Comments
0Join the discussion about this script.
No comments yet. Be the first to comment!