Fentify

Most Advanced Cheat Client for Vectaria.io

当前为 2025-03-24 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Fentify
// @namespace    fentify
// @version      0.0.1
// @description  Most Advanced Cheat Client for Vectaria.io
// @author       You
// @match        https://vectaria.io/*
// @license      MIT
// ==/UserScript==

(() => {
	"use strict";
	var __webpack_modules__ = {
			679: (e, t, n) => {
				n.d(t, {
					A: () => r
				});
				var o = n(601),
					i = n.n(o),
					a = n(314),
					s = n.n(a)()(i());
				s.push([e.id, "@font-face {\n    font-family: \"Product Sans\";\n    src: url(https://fonts.gstatic.com/s/productsans/v19/pxiDypQkot1TnFhsFMOfGShVF9eO.woff2);\n}\n\n:root {\n    --Fentify-accent-color: linear-gradient(90deg, rgb(64, 190, 255) 0%, rgb(129, 225, 255) 100%);\n    --button-color: rgb(40, 40, 40, 0.9);\n    --hover-color: rgb(50, 50, 50, 0.9);\n    --panel-bg: rgb(34, 34, 34, 0.85);\n    --panel-bg: rgb(10, 10, 10, 0.85);\n    --text-color: #ffffff;\n    --header-text-size: 25px;\n    --button-text-size: 20px;\n    --setting-text-size: 15px;\n}\n\n.gui-panel {\n    position: fixed;\n    z-index: 1000;\n    width: 200px;\n    border-radius: 8px;\n    background-color: var(--panel-bg);\n    box-shadow: 0 4px 8px rgba(0,0,0,0.3);\n    font-family: 'Product Sans', sans-serif;\n    color: var(--text-color);\n    overflow: hidden;\n}\n\n.gui-header {\n    background-color: var(--header-bg);\n    height: 40px;\n    font-weight: 900;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: var(--header-text-size);\n    cursor: grab;\n}\n\n.gui-header:active {\n    cursor: grabbing;\n}\n\n.gui-button {\n    height: 35px;\n    display: flex;\n    align-items: center;\n    padding-left: 10px;\n    box-sizing: border-box;\n    cursor: pointer;\n    border-radius: 0;\n    transition: all 0.3s;\n    font-size: var(--button-text-size);\n    font-weight: 200;\n    outline: none;\n    background: var(--button-color);\n    color: var(--text-color);\n}\n\n.gui-button.enabled {\n    background: var(--Fentify-accent-color);\n}\n\n.gui-button:not(.enabled):hover {\n    background: var(--hover-color);\n}\n\n.gui-background {\n    position: absolute;\n    left: 0;\n    top: 0;\n    z-index: 999;\n    height: 100%;\n    width: 100%;\n    backdrop-filter: blur(15px);\n    background: rgba(0, 0, 0, 0.3);\n}\n\n.gui-setting-container {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    background-color: var(--panel-bg);\n    padding: 2px;\n}\n\n.gui-setting-label {\n    font-size: var(--setting-text-size);\n    margin-left: 10px;\n    font-weight: 300;\n    color: var(--text-color);\n}\n\n.gui-checkbox {\n    width: 15px;\n    height: 15px;\n    border-radius: 4px;\n    background: var(--button-color);\n    position: relative;\n    margin: 8px;\n    cursor: pointer;\n    transition: background 0.3s;\n}\n\n.gui-checkbox.enabled {\n    background: var(--Fentify-accent-color);\n}\n\n.gui-color-picker {\n    width: 15px;\n    height: 15px;\n    border-radius: 4px;\n    position: relative;\n    margin: 8px;\n    cursor: pointer;\n}\n\n.gui-color-input {\n    width: 20px;\n    height: 20px;\n    opacity: 0;\n    cursor: pointer;\n}\n\n.gui-button-container {\n    background-color: var(--panel-bg);\n    display: flex;\n    flex-direction: column;\n}\n\n.gui-text-input {\n    background: var(--button-color);\n    border: none;\n    color: var(--text-color);\n    font-family: 'Product Sans', sans-serif;\n    font-size: var(--setting-text-size);\n    width: 40px;\n    border-radius: 4px;\n    outline: none;\n    transition: background 0.3s;\n    text-align: center;\n    margin: 5px;\n    margin-right: 10px;\n}\n\n.gui-text-input:hover {\n    background: var(--hover-color);\n}\n\n.gui-text-input:focus {\n    background: var(--hover-color);\n}\n\n.with-animations .gui-panel {\n    animation: fadeInScale 0.3s ease-out;\n}\n\n@keyframes fadeInScale {\n    from {\n        opacity: 0;\n        transform: scale(0.9);\n    }\n    to {\n        opacity: 1;\n        transform: scale(1);\n    }\n}\n\n.with-animations .gui-background {\n    animation: fadeIn 0.3s ease-out;\n}\n\n@keyframes fadeIn {\n    from { opacity: 0; }\n    to { opacity: 1; }\n}\n\n.with-animations .gui-button {\n    transition: transform 0.2s ease, background 0.2s ease;\n}\n\n.with-animations .gui-button:hover {\n    transform: scale(1.01);\n}\n\n.with-animations .gui-setting-container {\n    will-change: transform, opacity;\n    transform-origin: top;\n    animation: slideDown 0.25s ease-out forwards;\n}\n\n@keyframes slideDown {\n    from {\n        opacity: 0;\n        transform: scaleY(0.8);\n    }\n    to {\n        opacity: 1;\n        transform: scaleY(1);\n    }\n}\n\n.blockSelector {\n    position: fixed;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    width: 500px;\n    height: 500px;\n    overflow-y: auto;\n    background-color: rgba(40, 40, 40);\n    border-radius: 10px;\n    padding: 20px;\n    z-index: 9999;\n}\n\n.blockSelector::-webkit-scrollbar {\n    display: none;\n}", ""]);
				const r = s
			},
			314: e => {
				e.exports = function(e) {
					var t = [];
					return t.toString = function() {
						return this.map((function(t) {
							var n = "",
								o = void 0 !== t[5];
							return t[4] && (n += "@supports (".concat(t[4], ") {")), t[2] && (n += "@media ".concat(t[2], " {")), o && (n += "@layer".concat(t[5].length > 0 ? " ".concat(t[5]) : "", " {")), n += e(t), o && (n += "}"), t[2] && (n += "}"), t[4] && (n += "}"), n
						})).join("")
					}, t.i = function(e, n, o, i, a) {
						"string" == typeof e && (e = [
							[null, e, void 0]
						]);
						var s = {};
						if (o)
							for (var r = 0; r < this.length; r++) {
								var l = this[r][0];
								null != l && (s[l] = !0)
							}
						for (var d = 0; d < e.length; d++) {
							var c = [].concat(e[d]);
							o && s[c[0]] || (void 0 !== a && (void 0 === c[5] || (c[1] = "@layer".concat(c[5].length > 0 ? " ".concat(c[5]) : "", " {").concat(c[1], "}")), c[5] = a), n && (c[2] ? (c[1] = "@media ".concat(c[2], " {").concat(c[1], "}"), c[2] = n) : c[2] = n), i && (c[4] ? (c[1] = "@supports (".concat(c[4], ") {").concat(c[1], "}"), c[4] = i) : c[4] = "".concat(i)), t.push(c))
						}
					}, t
				}
			},
			601: e => {
				e.exports = function(e) {
					return e[1]
				}
			},
			72: e => {
				var t = [];

				function n(e) {
					for (var n = -1, o = 0; o < t.length; o++)
						if (t[o].identifier === e) {
							n = o;
							break
						} return n
				}

				function o(e, o) {
					for (var a = {}, s = [], r = 0; r < e.length; r++) {
						var l = e[r],
							d = o.base ? l[0] + o.base : l[0],
							c = a[d] || 0,
							m = "".concat(d, " ").concat(c);
						a[d] = c + 1;
						var u = n(m),
							p = {
								css: l[1],
								media: l[2],
								sourceMap: l[3],
								supports: l[4],
								layer: l[5]
							};
						if (-1 !== u) t[u].references++, t[u].updater(p);
						else {
							var h = i(p, o);
							o.byIndex = r, t.splice(r, 0, {
								identifier: m,
								updater: h,
								references: 1
							})
						}
						s.push(m)
					}
					return s
				}

				function i(e, t) {
					var n = t.domAPI(t);
					return n.update(e),
						function(t) {
							if (t) {
								if (t.css === e.css && t.media === e.media && t.sourceMap === e.sourceMap && t.supports === e.supports && t.layer === e.layer) return;
								n.update(e = t)
							} else n.remove()
						}
				}
				e.exports = function(e, i) {
					var a = o(e = e || [], i = i || {});
					return function(e) {
						e = e || [];
						for (var s = 0; s < a.length; s++) {
							var r = n(a[s]);
							t[r].references--
						}
						for (var l = o(e, i), d = 0; d < a.length; d++) {
							var c = n(a[d]);
							0 === t[c].references && (t[c].updater(), t.splice(c, 1))
						}
						a = l
					}
				}
			},
			659: e => {
				var t = {};
				e.exports = function(e, n) {
					var o = function(e) {
						if (void 0 === t[e]) {
							var n = document.querySelector(e);
							if (window.HTMLIFrameElement && n instanceof window.HTMLIFrameElement) try {
								n = n.contentDocument.head
							} catch (e) {
								n = null
							}
							t[e] = n
						}
						return t[e]
					}(e);
					if (!o) throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
					o.appendChild(n)
				}
			},
			540: e => {
				e.exports = function(e) {
					var t = document.createElement("style");
					return e.setAttributes(t, e.attributes), e.insert(t, e.options), t
				}
			},
			56: (e, t, n) => {
				e.exports = function(e) {
					var t = n.nc;
					t && e.setAttribute("nonce", t)
				}
			},
			825: e => {
				e.exports = function(e) {
					if ("undefined" == typeof document) return {
						update: function() {},
						remove: function() {}
					};
					var t = e.insertStyleElement(e);
					return {
						update: function(n) {
							! function(e, t, n) {
								var o = "";
								n.supports && (o += "@supports (".concat(n.supports, ") {")), n.media && (o += "@media ".concat(n.media, " {"));
								var i = void 0 !== n.layer;
								i && (o += "@layer".concat(n.layer.length > 0 ? " ".concat(n.layer) : "", " {")), o += n.css, i && (o += "}"), n.media && (o += "}"), n.supports && (o += "}");
								var a = n.sourceMap;
								a && "undefined" != typeof btoa && (o += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))), " */")), t.styleTagTransform(o, e, t.options)
							}(t, e, n)
						},
						remove: function() {
							! function(e) {
								if (null === e.parentNode) return !1;
								e.parentNode.removeChild(e)
							}(t)
						}
					}
				}
			},
			113: e => {
				e.exports = function(e, t) {
					if (t.styleSheet) t.styleSheet.cssText = e;
					else {
						for (; t.firstChild;) t.removeChild(t.firstChild);
						t.appendChild(document.createTextNode(e))
					}
				}
			},
			399: (e, t, n) => {
				n.d(t, {
					A: () => o
				});
				const o = {
					listeners: {},
					activeKeys: new Set,
					on: function(e, t) {
						this.listeners[e] || (this.listeners[e] = []), this.listeners[e].push(t)
					},
					remove: function(e, t) {
						this.listeners[e] && (this.listeners[e] = this.listeners[e].filter((e => e !== t)))
					},
					emit: function(e, t) {
						this.listeners[e] && this.listeners[e].forEach((e => e(t)))
					},
					trackKey: function(e, t, n) {
						"keydown" === e && moduleManager.handleKeyPress(n), "keydown" !== e || this.activeKeys.has(t) || (this.activeKeys.add(t), this.emit("keyPress", {
							key: t,
							code: n
						})), "keyup" === e && this.activeKeys.has(t) && (this.activeKeys.delete(t), this.emit("keyRelease", {
							key: t,
							code: n
						}))
					}
				}
			},
			548: (__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
				__webpack_require__.d(__webpack_exports__, {
					A: () => __WEBPACK_DEFAULT_EXPORT__
				});
				var _events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(399);
				const __WEBPACK_DEFAULT_EXPORT__ = {
					init() {
						this.appendHook = (e, t) => this[e] = t;
						let fnString = document.querySelector("#app").__vue_app__._context.config.globalProperties.$router.options.routes[0].children[0].component.toString();
						this.chunks = eval("[" + fnString.split("[")[1].replace(")", "").split(",")).filter((e => e.includes(".js")));
						let userImport = Object.values(document.scripts).find((e => e?.src?.includes("index"))).src.replace("https://vectaria.io/", "");
						this.importedModules = [], this.chunks.push(userImport), Function('\n            async function initHooks() {\n                await Promise.all(this.chunks.map(async (src) => {\n                    const module = await import("https://vectaria.io/" + src);\n                    Object.values(module).forEach((mod) => {\n                        this.importedModules.push(mod);\n                    });\n                }));\n                let targetClass = this.importedModules.find(m => m?.prototype?.execute);\n                let _execute = targetClass.prototype.execute;\n                let appendHook = this.appendHook;\n                targetClass.prototype.execute = function () {\n                    appendHook("gameWorld", this.gameWorld);\n                    return _execute.apply(this, arguments);\n                };\n            }\n            initHooks.appendHook = this.appendHook;\n            initHooks.chunks = this.chunks;\n            initHooks.importedModules = this.importedModules;\n            return initHooks;\n        ')().bind(this)()
					}
				}
			}
		},
		__webpack_module_cache__ = {};

	function __webpack_require__(e) {
		var t = __webpack_module_cache__[e];
		if (void 0 !== t) return t.exports;
		var n = __webpack_module_cache__[e] = {
			id: e,
			exports: {}
		};
		return __webpack_modules__[e](n, n.exports, __webpack_require__), n.exports
	}
	__webpack_require__.n = e => {
		var t = e && e.__esModule ? () => e.default : () => e;
		return __webpack_require__.d(t, {
			a: t
		}), t
	}, __webpack_require__.d = (e, t) => {
		for (var n in t) __webpack_require__.o(t, n) && !__webpack_require__.o(e, n) && Object.defineProperty(e, n, {
			enumerable: !0,
			get: t[n]
		})
	}, __webpack_require__.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t), __webpack_require__.nc = void 0;
	var __webpack_exports__ = {},
		main_events = __webpack_require__(399);
	class main_Module {
		constructor(e, t, n, o) {
			this.name = e, this.category = t, this.options = n, this.keybind = o, this.waitingForBind = !1, this.isEnabled = !1, this.toggle = this.toggle.bind(this)
		}
		onEnable() {}
		onDisable() {}
		onRender() {}
		onSettingUpdate() {}
		enable() {
			this.isEnabled = !0, main_events.A.emit("module.update", this), this.onEnable()
		}
		disable() {
			this.isEnabled = !1, main_events.A.emit("module.update", this), this.onDisable()
		}
		toggle() {
			this.isEnabled ? this.disable() : this.enable()
		}
	}
	class main_ArrayList extends main_Module {
		constructor() {
			super("Arraylist", "Visual"), this.namesMap = {}, this.arraylistContainer = null, this.initialized = !1
		}
		update(e, t) {
			if (t) {
				if (!this.namesMap[e]) {
					let t = document.createElement("div");
					t.style.backgroundColor = "rgba(10, 10, 10, 0.7)", t.style.color = "white", t.style.padding = "2px 10px 2px 10px", t.style.display = "flex", t.style.alignItems = "center", t.style.boxSizing = "border-box", t.style.margin = "0", t.style.fontFamily = "'Product Sans', sans-serif", t.style.boxShadow = "rgb(0, 0, 0, 0.05) -5px 1px", t.style.transition = "max-height 0.2s ease-in-out, opacity 0.2s ease-in-out", t.style.overflow = "hidden", t.style.maxHeight = "0", t.style.opacity = "0";
					let n = document.createElement("span");
					n.style.fontWeight = "800", n.style.fontSize = "16px", n.style.backgroundImage = "var(--Fentify-accent-color)", n.style.color = "transparent", n.style.backgroundClip = "text", n.innerHTML = e, t.appendChild(n), this.arraylistContainer.appendChild(t), setTimeout((() => {
						t.style.maxHeight = "50px", t.style.opacity = "1"
					}), 1), this.namesMap[e] = t
				}
			} else if (this.namesMap[e]) {
				const t = this.namesMap[e];
				t.style.maxHeight = "0", t.style.opacity = "0", setTimeout((() => {
					this.arraylistContainer.removeChild(t), delete this.namesMap[e]
				}), 5)
			}
			const n = Object.values(this.namesMap).sort(((e, t) => this.measureElementWidth(t) - this.measureElementWidth(e)));
			this.arraylistContainer.innerHTML = "", n.forEach((e => {
				this.arraylistContainer.appendChild(e)
			}))
		}
		onEnable() {
			this.initialized ? this.arraylistContainer.style.opacity = "1" : (this.arraylistContainer = document.createElement("div"), this.arraylistContainer.style.flexDirection = "column", this.arraylistContainer.style.position = "absolute", this.arraylistContainer.style.zIndex = "1000", this.arraylistContainer.style.display = "flex", this.arraylistContainer.style.right = "5px", this.arraylistContainer.style.top = "5px", this.arraylistContainer.style.alignItems = "flex-end", this.arraylistContainer.style.pointerEvents = "none", this.arraylistContainer.style.textTransform = "lowercase", this.arraylistContainer.style.border = "2px solid transparent", this.arraylistContainer.style.borderImage = "var(--Fentify-accent-color)", this.arraylistContainer.style.borderImageSlice = "1", this.arraylistContainer.style.borderBottom = "0", this.arraylistContainer.style.borderLeft = "0", document.body.appendChild(this.arraylistContainer), main_events.A.on("module.update", (e => {
				this.update(e.name, e.isEnabled)
			})), this.initialized = !0)
		}
		measureElementWidth(e) {
			return e.getBoundingClientRect().width
		}
		onDisable() {
			this.arraylistContainer.style.opacity = "0"
		}
	}
	var main_hooks = __webpack_require__(548);
	class main_Watermark extends main_Module {
		constructor() {
			super("Watermark", "Visual", {
				Text: "Fentify"
			})
		}
		onSettingUpdate() {
			let e = document.querySelector(".Fentify-overlay-title");
			e && (e.textContent = this.options.Text)
		}
		onEnable() {
			let e = document.querySelector(".Fentify-overlay-title");
			e || (e = document.createElement("div"), e.className = "Fentify-overlay-title", e.textContent = this.options.Text, e.style.position = "absolute", e.style.top = "0", e.style.left = "0", e.style.padding = "0.5em", e.style.userSelect = "none", e.style.display = "none", e.style.zIndex = "1000", e.style.textShadow = "var(--Fentify-accent-color) 0px 0px 10px", e.style.fontFamily = "'Product Sans', sans-serif", e.style.fontSize = "24px", e.style.background = "var(--Fentify-accent-color)", e.style.backgroundClip = "text", e.style.webkitFontSmoothing = "antialiased", e.style.webkitTextFillColor = "transparent", document.body.appendChild(e)), document.querySelector(".Fentify-overlay-title").style.display = "flex"
		}
		onDisable() {
			document.querySelector(".Fentify-overlay-title").style.display = "none"
		}
	}
	class main_ModuleSettings {
		constructor(e, t) {
			this.module = e, this.container = t, this.components = [], this.initialized = !1, this.isOpen = !1
		}
		initialize() {
			!this.initialized && this.module?.options && (Object.keys(this.module.options).forEach((e => {
				const t = this.module.options[e],
					n = typeof t;
				e.toLowerCase().includes("color") ? this.addColorPicker(e) : "boolean" === n || "true" === t || "false" === t ? this.addCheckbox(e) : "string" === n ? this.addStringInput(e) : this.addNumberInput(e)
			})), this.components.forEach((e => e.style.display = "none")), this.initialized = !0)
		}
		toggle() {
			this.isOpen = !this.isOpen, this.components.forEach((e => {
				e.style.display = this.isOpen ? "flex" : "none", this.isOpen ? this.container.style.marginBottom = "5px" : this.container.style.marginBottom = "0px"
			}))
		}
		addNumberInput(e) {
			const t = document.createElement("div");
			t.className = "gui-setting-container";
			const n = document.createElement("span");
			n.className = "gui-setting-label", n.textContent = e;
			const o = document.createElement("input");
			o.type = "text", o.className = "gui-text-input", o.value = this.module.options[e];
			let i = o.value;
			o.addEventListener("input", (() => {
				const t = o.value.trim();
				isNaN(t) || "" === t || (i = t, this.module.options[e] = t, main_events.A.emit("setting.update", this.module))
			})), o.addEventListener("blur", (() => {
				(isNaN(o.value) || "" === o.value.trim()) && (o.value = i)
			})), o.addEventListener("keydown", (e => {
				"Enter" === e.key && o.blur()
			})), t.appendChild(n), t.appendChild(o), this.container.appendChild(t), this.components.push(t)
		}
		addStringInput(e) {
			const t = document.createElement("div");
			t.className = "gui-setting-container";
			const n = document.createElement("span");
			n.className = "gui-setting-label", n.textContent = e;
			const o = document.createElement("input");
			o.type = "text", o.className = "gui-text-input", o.value = this.module.options[e], o.addEventListener("input", (() => {
				const t = o.value.trim();
				this.module.options[e] = t, main_events.A.emit("setting.update", this.module)
			})), t.appendChild(n), t.appendChild(o), this.container.appendChild(t), this.components.push(t)
		}
		addCheckbox(e) {
			const t = document.createElement("div");
			t.className = "gui-setting-container";
			const n = document.createElement("span");
			n.className = "gui-setting-label", n.textContent = e;
			const o = document.createElement("div");
			o.className = "gui-checkbox", o.classList.toggle("enabled", !0 === this.module.options[e] || "true" === this.module.options[e]), o.addEventListener("click", (() => {
				const t = o.classList.contains("enabled");
				o.classList.toggle("enabled"), this.module.options[e] = (!t).toString(), main_events.A.emit("setting.update", this.module)
			})), t.appendChild(n), t.appendChild(o), this.container.appendChild(t), this.components.push(t)
		}
		addColorPicker(e) {
			const t = document.createElement("div");
			t.className = "gui-setting-container";
			const n = document.createElement("span");
			n.className = "gui-setting-label", n.textContent = e;
			const o = document.createElement("div");
			o.className = "gui-color-picker", o.style.background = this.module.options[e];
			const i = document.createElement("input");
			i.type = "color", i.className = "gui-color-input", o.appendChild(i), i.addEventListener("input", (t => {
				o.style.background = t.target.value, this.module.options[e] = t.target.value, main_events.A.emit("setting.update", this.module)
			})), t.appendChild(n), t.appendChild(o), this.container.appendChild(t), this.components.push(t)
		}
	}
	class main_Panel {
		constructor(e, t = {
			top: "200px",
			left: "200px"
		}) {
			this.panel = document.createElement("div"), this.panel.className = "gui-panel", this.panel.style.top = t.top, this.panel.style.left = t.left, this.header = document.createElement("div"), this.header.className = "gui-header", this.header.textContent = e, this.panel.appendChild(this.header), document.body.appendChild(this.panel), this.buttons = [], this.setupDragHandling()
		}
		setupDragHandling() {
			let e = !1,
				t = {
					x: 0,
					y: 0
				};
			this.header.addEventListener("mousedown", (n => {
				e = !0, t.x = n.clientX - this.panel.offsetLeft, t.y = n.clientY - this.panel.offsetTop
			})), document.addEventListener("mousemove", (n => {
				e && (this.panel.style.left = n.clientX - t.x + "px", this.panel.style.top = n.clientY - t.y + "px")
			})), document.addEventListener("mouseup", (() => e = !1))
		}
		addButton(e) {
			const t = document.createElement("div");
			t.className = "gui-button-container";
			const n = document.createElement("div");
			n.className = "gui-button " + (e.isEnabled ? "enabled" : ""), n.textContent = e.name;
			const o = new main_ModuleSettings(e, t);
			return n.addEventListener("mousedown", (t => {
				0 === t.button && (e.toggle(), n.classList.toggle("enabled", e.isEnabled)), 1 === t.button && (n.textContent = "waiting for bind..", e.waitingForBind = !0)
			})), n.addEventListener("contextmenu", (e => {
				e.preventDefault(), o.initialize(), o.toggle()
			})), n.setAttribute("tabindex", -1), n.addEventListener("keydown", (t => {
				n.textContent = e.name, e.waitingForBind && (t.preventDefault(), t.stopPropagation(), t.stopImmediatePropagation(), "Escape" === t.key ? e.keybind = null : e.keybind = String(t.code), e.waitingForBind = !1)
			})), t.appendChild(n), this.panel.appendChild(t), this.buttons.push(n), n
		}
		show() {
			this.panel.style.display = "block"
		}
		hide() {
			this.panel.style.display = "none"
		}
	}
	var main_injectStylesIntoStyleTag = __webpack_require__(72),
		main_injectStylesIntoStyleTag_default = __webpack_require__.n(main_injectStylesIntoStyleTag),
		main_styleDomAPI = __webpack_require__(825),
		main_styleDomAPI_default = __webpack_require__.n(main_styleDomAPI),
		main_insertBySelector = __webpack_require__(659),
		main_insertBySelector_default = __webpack_require__.n(main_insertBySelector),
		main_setAttributesWithoutAttributes = __webpack_require__(56),
		main_setAttributesWithoutAttributes_default = __webpack_require__.n(main_setAttributesWithoutAttributes),
		main_insertStyleElement = __webpack_require__(540),
		main_insertStyleElement_default = __webpack_require__.n(main_insertStyleElement),
		main_styleTagTransform = __webpack_require__(113),
		main_styleTagTransform_default = __webpack_require__.n(main_styleTagTransform),
		main_clickgui = __webpack_require__(679),
		main_options = {};
	main_options.styleTagTransform = main_styleTagTransform_default(), main_options.setAttributes = main_setAttributesWithoutAttributes_default(), main_options.insert = main_insertBySelector_default().bind(null, "head"), main_options.domAPI = main_styleDomAPI_default(), main_options.insertStyleElement = main_insertStyleElement_default();
	var main_update = main_injectStylesIntoStyleTag_default()(main_clickgui.A, main_options);
	const main_styles_clickgui = main_clickgui.A && main_clickgui.A.locals ? main_clickgui.A.locals : void 0;
	class main_ClickGUI extends main_Module {
		constructor() {
			super("ClickGUI", "Visual", {
				"Accent Color 1": "rgb(64, 190, 255)",
				"Accent Color 2": "rgb(129, 225, 255)",
				"Button Color": "rgb(40, 40, 40, 0.9)",
				"Hover Color": "rgb(50, 50, 50, 0.9)",
				"Header Color": "rgb(0, 0, 0, 0.85)",
				"Panel Color": "rgb(18 18 18)",
				"Text Color": "#ffffff",
				"Enable Animations": !0
			}, "ShiftRight"), this.GUILoaded = !1, this.panels = [], this.blurredBackground = null, this.updateColors()
		}
		updateAnimations() {
			this.options["Enable Animations"] ? document.body.classList.add("with-animations") : document.body.classList.remove("with-animations")
		}
		updateColors() {
			document.body.style.setProperty("--Fentify-accent-color", `linear-gradient(90deg, ${this.options["Accent Color 1"]} 0%, ${this.options["Accent Color 2"]} 100%)`), document.body.style.setProperty("--button-color", this.options["Button Color"]), document.body.style.setProperty("--hover-color", this.options["Hover Color"]), document.body.style.setProperty("--header-bg", this.options["Header Color"]), document.body.style.setProperty("--panel-bg", this.options["Panel Color"]), document.body.style.setProperty("--text-color", this.options["Text Color"])
		}
		onEnable() {
			document.pointerLockElement && document.exitPointerLock(), this.GUILoaded ? (this.showGUI(), this.updateAnimations()) : (this.setupBackground(), this.createPanels(), this.setupEventListeners(), this.GUILoaded = !0, this.updateAnimations())
		}
		setupBackground() {
			this.blurredBackground = document.createElement("div"), this.blurredBackground.className = "gui-background", document.body.appendChild(this.blurredBackground)
		}
		createPanels() {
			this.panels.forEach((e => {
				e.panel && e.panel.parentNode && e.panel.parentNode.removeChild(e.panel)
			})), this.panels = [], [{
				title: "Combat",
				position: {
					top: "100px",
					left: "100px"
				}
			}, {
				title: "Movement",
				position: {
					top: "100px",
					left: "320px"
				}
			}, {
				title: "Visual",
				position: {
					top: "100px",
					left: "540px"
				}
			}, {
				title: "Misc",
				position: {
					top: "100px",
					left: "760px"
				}
			}].forEach((e => {
				const t = new main_Panel(e.title, e.position);
				this.panels.push(t)
			}));
			const e = {};
			Object.values(main_moduleManager.modules).forEach((t => {
				e[t.category] || (e[t.category] = []), e[t.category].push(t)
			})), Object.entries(e).forEach((([e, t]) => {
				const n = this.panels.find((t => t.header.textContent === e));
				n && (t.sort(((e, t) => t.name.length - e.name.length)), t.forEach((e => n.addButton(e))))
			}))
		}
		setupEventListeners() {
			main_events.A.on("module.update", (e => {
				const t = this.panels.find((t => t.header.textContent === e.category));
				if (!t) return;
				const n = t.buttons.find((t => t.textContent === e.name));
				n && n.classList.toggle("enabled", e.isEnabled)
			}))
		}
		showGUI() {
			this.panels.forEach((e => e.show())), this.blurredBackground.style.display = "block"
		}
		onDisable() {
			this.panels.forEach((e => e.hide())), this.blurredBackground.style.display = "none"
		}
		onSettingUpdate() {
			this.updateColors(), this.updateAnimations()
		}
	}
	class main_Airjump extends main_Module {
		constructor() {
			super("Airjump", "Movement", null)
		}
		onEnable() {
			main_hooks.A.gameWorld.player.collision.__defineGetter__("isGrounded", (() => !0)), main_hooks.A.gameWorld.player.collision.__defineSetter__("isGrounded", (() => !0))
		}
		onDisable() {
			delete main_hooks.A.gameWorld.player.collision.isGrounded, main_hooks.A.gameWorld.player.collision.isGrounded = !0
		}
	}
	class main_Instabreak extends main_Module {
		constructor() {
			super("Instabreak", "Misc", null), this.originalHardness = new Map
		}
		onEnable() {
			Object.values(main_hooks.A.gameWorld.allItems).forEach((e => {
				e?.destruction && (this.originalHardness.has(e) || this.originalHardness.set(e, e.destruction.durability), e.destruction.durability = 0)
			}))
		}
		onDisable() {
			Object.values(main_hooks.A.gameWorld.allItems).forEach((e => {
				e?.destruction && this.originalHardness.has(e) && (e.destruction.durability = this.originalHardness.get(e))
			}))
		}
	}
	const main_stores = {
		get userStore() {
			return main_hooks.A.importedModules.find((e => "user" == e?.$id))()
		},
		get itemMgrStore() {
			return main_hooks.A.importedModules.find((e => "itemsManager" == e?.$id))()
		},
		get roomMgrStore() {
			return main_hooks.A.importedModules.find((e => "roomManager" == e?.$id))()
		}
	};
	class main_SpoofBlock extends main_Module {
		constructor() {
			super("SpoofBlock", "Misc"), this.blockID = 0
		}
		onRender() {
			main_stores.itemMgrStore[1][main_stores.itemMgrStore.selectedItem][0] = this.blockID, main_hooks.A.gameWorld.player.currentHandItemId = this.blockID
		}
		onEnable() {
			let e = this,
				t = document.createElement("div");
			t.className = "blockSelector", document.body.appendChild(t);
			let n = document.createElement("div");
			Object.assign(n.style, {
				display: "flex",
				flexWrap: "wrap",
				justifyContent: "center"
			}), t.appendChild(n), Object.keys(main_hooks.A.gameWorld.allItems).forEach((o => function(o) {
				let i = document.createElement("button");
				Object.assign(i.style, {
					border: "none",
					background: "none",
					margin: "10px"
				});
				let a = document.createElement("img");
				Object.assign(a.style, {
					width: "40px",
					height: "40px",
					objectFit: "cover"
				}), a.src = $assetsUrls["defaultSurvival/renderItems/" + o + ".png"], i.appendChild(a), i.addEventListener("click", (() => {
					main_stores.itemMgrStore[1][main_stores.itemMgrStore.selectedItem][0] = o, main_hooks.A.gameWorld.player.currentHandItemId = o, e.blockID = o, t.remove()
				})), n.appendChild(i)
			}(o)))
		}
	}
	class main_Nuker extends main_Module {
		constructor() {
			super("Nuker", "Misc", {
				Radius: 4,
				Delay: 120,
				"Target Selected Block": !1,
				"Auto Disable": !1
			}), this.blockIndex = 0
		}
		get selectedBlock() {
			return main_hooks.A.gameWorld?.systemsManager.activeExecuteSystems.find((e => void 0 !== e?.currBlockPos)) || void 0
		}
		onEnable() {
			this.blockIndex = 0;
			let e = this.options.Radius,
				t = Object.values(main_hooks.A.gameWorld.player.position).map(Math.floor);
			t[1]--, this.options["Target Selected Block"] && (t = [...this.selectedBlock.currBlockPos]);
			let n = -e,
				o = -e,
				i = -e,
				a = [];
			for (; n <= e;) {
				for (; o <= e;) {
					for (; i <= e;) {
						if (Math.sqrt(n * n + o * o + i * i) <= e) {
							let e = [t[0] + n, t[1] + o, t[2] + i];
							0 !== main_hooks.A.gameWorld.chunkManager.getBlock(...e) && a.push(e)
						}
						i++
					}
					i = -e, o++
				}
				o = -e, n++
			}
			let s = this,
				r = this.options;
			! function e() {
				if (s.blockIndex < a.length) {
					const [t, n, o] = a[s.blockIndex];
					setTimeout((() => {
						main_hooks.A.gameWorld.chunkManager.placeBlockWithMsgSending(t, n, o, 0), s.blockIndex++, e()
					}), r.Delay)
				} else s.blockIndex = 0, r["Auto Disable"] ? main_moduleManager.modules.Nuker.disable() : s.onEnable()
			}()
		}
	}
	class main_SpoofLevel extends main_Module {
		constructor() {
			super("SpoofLevel", "Misc", {
				Level: 999
			}), this.ogLevel
		}
		onEnable() {
			main_stores.userStore?.user?.lvl && (this.ogLevel = main_stores.userStore.user.lvl), main_stores.userStore.user = main_stores.userStore.user || {}, main_stores.userStore.user.lvl = this.options.Level
		}
		onDisable() {
			main_stores.userStore.user = main_stores.userStore.user || {}, main_stores.userStore.user.lvl = this.ogLevel
		}
	}
	class main_Emote extends main_Module {
		constructor() {
			super("Emote", "Misc", {
				"Emote name": "No",
				Infinity: !1
			})
		}
		onEnable() {
			main_stores.roomMgrStore.ws.sendData(77, {
				name: this.options["Emote name"],
				infinity: this.options[1 / 0]
			})
		}
	}
	class main_AdBypass extends main_Module {
		constructor() {
			super("AdBypass", "Misc")
		}
		onEnable() {
			this._reward = this._reward || main_stores.userStore.rewardCommercialVideoWrapper, main_stores.userStore.rewardCommercialVideoWrapper = () => !0
		}
		onDisable() {
			main_stores.userStore.rewardCommercialVideoWrapper = () => this._reward
		}
	}
	class main_Velocity extends main_Module {
		constructor() {
			super("Velocity", "Movement", null)
		}
		get serverPacketHandlers() {
			return main_hooks.A.gameWorld.server.msgsListeners
		}
		get velocityPacket() {
			return Object.keys(this.serverPacketHandlers).find((e => this.serverPacketHandlers[e].toString().includes("velocity")))
		}
		onEnable() {
			this.velocityHandler = this.velocityHandler || this.serverPacketHandlers[this.velocityPacket], this.serverPacketHandlers[this.velocityPacket] = () => {}
		}
		onDisable() {
			this.serverPacketHandlers[this.velocityPacket] = this.velocityHandler
		}
	}
	class main_NoHitDelay extends main_Module {
		constructor() {
			super("NoHitDelay", "Combat")
		}
		get hitSystem() {
			return main_hooks.A.gameWorld.systemsManager.activeExecuteSystems.find((e => void 0 !== e?.lastAttackTimeMs))
		}
		onEnable() {
			this.hitSystem.__defineGetter__("attackTimeDelayMs", (() => 0)), this.hitSystem.__defineSetter__("attackTimeDelayMs", (() => 0))
		}
		onDisable() {
			delete this.hitSystem.attackTimeDelayMs, this.hitSystem.attackTimeDelayMs = 750
		}
	}
	class main_Fly extends main_Module {
		constructor() {
			super("Fly", "Movement", {
				"Vertical Speed": 5
			})
		}
		onEnable() {
			main_hooks.A.gameWorld.player.velocity.gravity = 0
		}
		onRender() {
			main_hooks.A.gameWorld.player.inputs.jump ? main_hooks.A.gameWorld.player.velocity.velVec3.y = this.options["Vertical Speed"] : main_hooks.A.gameWorld.player.inputs.crouch ? main_hooks.A.gameWorld.player.velocity.velVec3.y = -this.options["Vertical Speed"] : main_hooks.A.gameWorld.player.velocity.velVec3.y = 0
		}
		onDisable() {
			main_hooks.A.gameWorld.player.velocity.gravity = 23
		}
	}
	class main_NoFall extends main_Module {
		constructor() {
			super("NoFall", "Movement")
		}
		onRender() {
			let e = main_hooks.A.gameWorld.player.position.clone().floor();
			e.y--;
			let t = !!main_hooks.A.gameWorld.chunkManager.getBlock(...e);
			e.y -= 2, main_hooks.A.gameWorld.chunkManager.getBlock(...e) && main_hooks.A.gameWorld.player.velocity.velVec3.y < -6 && !t && (main_hooks.A.gameWorld.player.position.y = e.y + 1.5, main_hooks.A.gameWorld.player.velocity.velVec3.y = .1)
		}
	}
	class main_Speed extends main_Module {
		constructor() {
			super("Speed", "Movement", {
				Speed: 15
			})
		}
		onEnable() {
			main_hooks.A.gameWorld.player.velocity.__defineGetter__("moveSpeed", (() => this.options.Speed)), main_hooks.A.gameWorld.player.velocity.__defineSetter__("moveSpeed", (() => this.options.Speed)), main_hooks.A.gameWorld.player.velocity.__defineGetter__("fastMoveSpeed", (() => this.options.Speed)), main_hooks.A.gameWorld.player.velocity.__defineSetter__("fastMoveSpeed", (() => this.options.Speed))
		}
		onDisable() {
			delete main_hooks.A.gameWorld.player.velocity.moveSpeed, delete main_hooks.A.gameWorld.player.velocity.fastMoveSpeed, main_hooks.A.gameWorld.player.velocity.moveSpeed = 4.5, main_hooks.A.gameWorld.player.velocity.fastMoveSpeed = 6.4
		}
	}
	class main_FreeCoupons extends main_Module {
		constructor() {
			super("FreeCoupons", "Misc")
		}
		onEnable() {
			fetch("https://api.vectaria.io/v2/users/getAdCoupons", {
				credentials: "include"
			}).then((e => {
				e.ok ? main_stores.userStore.user.coupons += 10 : alert("Reached Daily limit")
			})), main_moduleManager.modules.FreeCoupons.disable()
		}
	}
	class main_Chams extends main_Module {
		constructor() {
			super("Chams", "Visual", null)
		}
		onRender() {
			main_hooks.A.gameWorld.server.playerIdToData.forEach((e => {
				e.headObj3D.material.depthTest = !1, e.headObj3D.material.wireframe = !0
			}))
		}
		onDisable() {
			main_hooks.A.gameWorld.server.playerIdToData.forEach((e => {
				e.headObj3D.material.depthTest = !0, e.headObj3D.material.wireframe = !1
			}))
		}
	}
	class main_Triggerbot extends main_Module {
		constructor() {
			super("Triggerbot", "Combat", {
				Interval: 50
			}), this.lastExecutionTime = 0
		}
		get hitSystem() {
			return main_hooks.A.gameWorld.systemsManager.activeExecuteSystems.find((e => void 0 !== e?.lastAttackTimeMs))
		}
		onRender() {
			const e = Date.now();
			e - this.lastExecutionTime >= this.options.Interval && this.hitSystem?.hitPlayers && (this.lastExecutionTime = e, this.hitSystem.hitPlayers())
		}
	}
	class main_Scaffold extends main_Module {
		constructor() {
			super("Scaffold", "Movement", null)
		}
		onRender() {
			let e = Object.values(main_hooks.A.gameWorld.player.position).splice(0, 3).map(Math.floor);
			e[1]--;
			let t = main_hooks.A.gameWorld.player.currentHandItemId,
				n = main_hooks.A.gameWorld.chunkManager.getBlock(...e),
				o = main_hooks.A.gameWorld.allItems[n]?.replaceable || !1;
			(0 == n || o) && t && main_hooks.A.gameWorld.chunkManager.placeBlockWithMsgSending(...e, t)
		}
	}
	class main_Fill extends main_Module {
		constructor() {
			super("Fill", "Misc", {
				Radius: 4,
				Delay: 120
			}), this.blockIndex = 0
		}
		onEnable() {
			this.blockIndex = 0;
			let e = this.options.Radius,
				t = Object.values(main_hooks.A.gameWorld.player.position).map(Math.floor);
			t[1]--;
			let n = -e,
				o = -e,
				i = -e,
				a = [];
			for (; n <= e;) {
				for (; o <= e;) {
					for (; i <= e;) {
						if (Math.sqrt(n * n + o * o + i * i) <= e) {
							let e = [t[0] + n, t[1] + o, t[2] + i],
								s = main_hooks.A.gameWorld.chunkManager.getBlock(...e);
							(main_hooks.A.gameWorld.allItems[s]?.replaceable || 0 == s) && a.push(e)
						}
						i++
					}
					i = -e, o++
				}
				o = -e, n++
			}
			let s = this,
				r = this.options.Delay;
			! function e() {
				let t = main_hooks.A.gameWorld.player.currentHandItemId;
				if (s.blockIndex < a.length) {
					const [n, o, i] = a[s.blockIndex];
					setTimeout((() => {
						main_hooks.A.gameWorld.chunkManager.placeBlockWithMsgSending(n, o, i, t), s.blockIndex++, e()
					}), r)
				} else s.blockIndex = 0, main_moduleManager.modules.Fill.disable()
			}()
		}
	}
	class main_NoClip extends main_Module {
		constructor() {
			super("NoClip", "Movement"), this.realGameMode = 0
		}
		onEnable() {
			this.realGameMode = main_hooks.A.gameWorld.player.gameMode, main_hooks.A.gameWorld.server.switchGameMode(3)
		}
		onDisable() {
			main_hooks.A.gameWorld.server.switchGameMode(this.realGameMode)
		}
	}
	const main_mathUtils = {
			normalizeVector(e) {
				const t = e.x * e.x + e.y * e.y + e.z * e.z;
				if (t > 0) {
					const n = 1 / Math.sqrt(t);
					return [e.x * n, e.y * n, e.z * n]
				}
				return e
			},
			distanceBetween(e, t) {
				const n = t.x - e.x,
					o = t.y - e.y,
					i = t.z - e.z;
				return n * n + o * o + i * i
			},
			distanceBetweenSqrt(e, t) {
				return Math.sqrt(this.distanceBetween(e, t))
			}
		},
		main_gameUtils = {
			getClosestPlayer() {
				let e = main_hooks.A.gameWorld.player.position,
					t = main_hooks.A.gameWorld.server.playerIdToData,
					n = [];
				return t.forEach((function(t, o) {
					let i = main_mathUtils.distanceBetween(e, {
						x: t.position.x,
						y: t.position.y,
						z: t.position.z
					});
					t.id = o, n.push({
						player: t,
						distance: i
					})
				})), n.sort(((e, t) => e.distance - t.distance)), n.map((e => e.player))[0]
			},
			hexToRgb(e) {
				var t = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);
				return t ? {
					r: parseInt(t[1], 16),
					g: parseInt(t[2], 16),
					b: parseInt(t[3], 16)
				} : null
			}
		};
	class main_Killaura extends main_Module {
		constructor() {
			super("Killaura", "Combat", {
				"Y Offset": 1.62,
				Reach: 5,
				Delay: 100
			}), this.lastExecutionTime = null
		}
		onRender() {
			const e = Date.now();
			e - this.lastExecutionTime >= this.options.Delay && (this.lastExecutionTime = e, this.tryKill())
		}
		tryKill() {
			let e = this.options.Reach,
				t = this.options["Y Offset"],
				n = main_gameUtils.getClosestPlayer();
			var o = {
					x: main_hooks.A.gameWorld.player.position.x,
					y: main_hooks.A.gameWorld.player.position.y + t,
					z: main_hooks.A.gameWorld.player.position.z
				},
				i = n.position,
				a = {
					x: o.x - i.x,
					y: o.y - i.y,
					z: o.z - i.z
				},
				s = Math.sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
			0 !== s && (a.x /= s, a.y /= s, a.z /= s), a.x = -a.x, a.y = -a.y, a.z = -a.z, Math.sqrt(Math.pow(o.x - i.x, 2) + Math.pow(o.y - i.y, 2) + Math.pow(o.z - i.z, 2)) < e && main_hooks.A.gameWorld.server.sendData(61, [o.x, o.y, o.z, a.x, a.y, a.z, main_hooks.A.gameWorld.time.localServerTimeMs, n.id])
		}
	}
	class main_BlockOutline extends main_Module {
		constructor() {
			super("Block Outline", "Movement", {
				"Outline Color": "#81e1ff"
			})
		}
		get selectedBlock() {
			return main_hooks.A.gameWorld?.systemsManager.activeExecuteSystems.find((e => void 0 !== e?.currBlockPos)) || void 0
		}
		onRender() {
			if (this?.selectedBlock?.mesh) {
				let e = main_gameUtils.hexToRgb(this.options["Outline Color"]);
				this.selectedBlock.mesh.material.color.r !== e.r && this.onEnable()
			}
		}
		onEnable() {
			let e = main_gameUtils.hexToRgb(this.options["Outline Color"]),
				t = this.selectedBlock.mesh;
			Object.keys(e).forEach((function(n) {
				t.material.color[n] = e[n]
			}))
		}
		onDisable() {
			this.selectedBlock.mesh.material.color.r = 1, this.selectedBlock.mesh.material.color.g = 1, this.selectedBlock.mesh.material.color.b = 1
		}
	}
	class main_TPAura extends main_Module {
		constructor() {
			super("TPAura", "Combat", {
				"Y Offset": 1.62,
				Radius: 1,
				Delay: 100
			}), this.lastExecutionTime = null
		}
		onRender() {
			const e = Date.now();
			e - this.lastExecutionTime >= this.options.Delay && (this.lastExecutionTime = e, this.tryKill())
		}
		tryKill() {
			let e = this.options.Radius,
				t = this.options["Y Offset"],
				n = main_gameUtils.getClosestPlayer();
			if (n?.position) {
				var o = {
						x: main_hooks.A.gameWorld.player.position.x,
						y: main_hooks.A.gameWorld.player.position.y + t,
						z: main_hooks.A.gameWorld.player.position.z
					},
					i = n.position,
					a = {
						x: o.x - i.x,
						y: o.y - i.y,
						z: o.z - i.z
					},
					s = Math.sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
				0 !== s && (a.x /= s, a.y /= s, a.z /= s), a.x = -a.x, a.y = -a.y, a.z = -a.z, Math.sqrt(Math.pow(o.x - i.x, 2) + Math.pow(o.y - i.y, 2) + Math.pow(o.z - i.z, 2)) > e && (main_hooks.A.gameWorld.player.position = n.position.clone()), main_hooks.A.gameWorld.server.sendData(61, [o.x, o.y, o.z, a.x, a.y, a.z, main_hooks.A.gameWorld.time.localServerTimeMs, n.id])
			}
		}
	}
	const main_moduleManager = {
		modules: {},
		addModules: function(...e) {
			for (const t of e) this.modules[t.name] = t
		},
		addModule: function(e) {
			this.modules[e.name] = e
		},
		handleKeyPress: function(e) {
			for (let t in this.modules) {
				let n = this.modules[t];
				n.waitingForBind ? (n.keybind = e, n.waitingForBind = !1) : n.keybind == e && n.toggle()
			}
		},
		init() {
			this.addModules(new main_ArrayList, new main_Watermark, new main_ClickGUI, new main_Airjump, new main_Instabreak, new main_SpoofBlock, new main_Nuker, new main_SpoofLevel, new main_Emote, new main_AdBypass, new main_Velocity, new main_NoHitDelay, new main_Fly, new main_NoFall, new main_Speed, new main_FreeCoupons, new main_Chams, new main_Triggerbot, new main_Scaffold, new main_Fill, new main_NoClip, new main_Killaura, new main_BlockOutline, new main_TPAura), main_events.A.on("render", (() => {
				for (let e in this.modules) this.modules[e].isEnabled && this.modules[e].onRender()
			})), main_events.A.on("keydown", this.handleKeyPress.bind(this)), main_events.A.on("setting.update", (() => {
				for (let e in this.modules) this.modules[e].isEnabled && this.modules[e].onSettingUpdate()
			})), this.modules.Arraylist.enable(), this.modules.Watermark.enable()
		}
	};
	class main_Fentify {
		constructor() {
			this.version = "1.0.0", this.init()
		}
		init() {
			setInterval((() => {
				main_events.A.emit("render")
			}), 1e3 / 60), document.addEventListener("keydown", (e => {
				main_events.A.emit("keydown", e.code)
			})), main_hooks.A.init(), main_moduleManager.init(), window.hooks = main_hooks.A, window.stores = main_stores, window.gameUtils = main_gameUtils
		}
		disable() {}
	}
	const main_main = new main_Fentify
})();