diff --git a/public/resources/data.json b/public/resources/data.json index 53e3f0d..18b00db 100644 --- a/public/resources/data.json +++ b/public/resources/data.json @@ -224,6 +224,38 @@ "author": "ZXMushroom63", "authorLink": "https://github.com/ZXMushroom63", "source": "https://github.com/EaglerRinth/eaglerrinth.github.io/blob/main/CommunityMods/AutoFish.js" + }, + { + "id": "recipe-mod", + "name": "Recipe Mod", + "description": "This is a recipe mod for eaglerforge, a bit like JEI.", + "author": "Oeil-de-Lynx", + "authorLink": "https://github.com/OeildeLynx31", + "source": "https://github.com/OeildeLynx31/eaglerforge-mods/blob/main/eagler_recipe.js" + }, + { + "id": "auto-respawn", + "name": "Auto Respawn", + "description": "auto respawn mod", + "author": "Oeil-de-Lynx", + "authorLink": "https://github.com/OeildeLynx31", + "source": "https://github.com/OeildeLynx31/eaglerforge-mods/blob/main/auto_respawn.js" + }, + { + "id": "jump-boost", + "name": "Jump Boost", + "description": "jump boost mod", + "author": "Oeil-de-Lynx", + "authorLink": "https://github.com/OeildeLynx31", + "source": "https://github.com/OeildeLynx31/eaglerforge-mods/blob/main/jump_boost.js" + }, + { + "id": "player-vision", + "name": "Player Vision", + "description": "player vision mod", + "author": "Oeil-de-Lynx", + "authorLink": "https://github.com/OeildeLynx31", + "source": "https://github.com/OeildeLynx31/eaglerforge-mods/blob/main/player_vision.js" } ], "resourcepacks": [ diff --git a/public/resources/mods/downloads/auto-respawn.js b/public/resources/mods/downloads/auto-respawn.js new file mode 100644 index 0000000..917856f --- /dev/null +++ b/public/resources/mods/downloads/auto-respawn.js @@ -0,0 +1,8 @@ +ModAPI.require('player'); +ModAPI.addEventListener("update", () => { + if (Boolean(ModAPI.player ? (ModAPI.player.isPlayer() ? true : false) : false)) { + if (ModAPI.player.isEntityAlive() === false) { + ModAPI.player.respawnPlayer(); + }; + }; +}); \ No newline at end of file diff --git a/public/resources/mods/downloads/jump-boost.js b/public/resources/mods/downloads/jump-boost.js new file mode 100644 index 0000000..ccdbc9e --- /dev/null +++ b/public/resources/mods/downloads/jump-boost.js @@ -0,0 +1,12 @@ +let height = 0; +let maxJumpHeight = 3; +document.addEventListener('keydown', function(event) { + if (event.code == 'Space' && ModAPI.mcinstance.$currentScreen === null) { + if (height < maxJumpHeight) { + ModAPI.mcinstance.$thePlayer.$motionY = 1; + height += 1; + } else if (ModAPI.mcinstance.$thePlayer.$isCollidedVertically === 1){ + height = 0; + } + } +}); diff --git a/public/resources/mods/downloads/player-vision.js b/public/resources/mods/downloads/player-vision.js new file mode 100644 index 0000000..2c449fe --- /dev/null +++ b/public/resources/mods/downloads/player-vision.js @@ -0,0 +1,68 @@ +let decoder = new TextDecoder(); +let listPseudos; + +let select = document.createElement('select'); + +select.addEventListener('mousedown', function (e) { + if (Minecraft.$theWorld) { + select.innerHTML = ""; + listPseudos = []; + Minecraft.$theWorld.$playerEntities.$array1.data.forEach(element => { + if (element) { + listPseudos.push(decoder.decode(new Uint8Array(element.$getName().$characters.data))); + } + }); + listPseudos.forEach(element => { + let option = document.createElement('option'); + option.innerText = element + ((listPseudos.indexOf(element) === 0)?" (you)":""); + option.value = element; + select.appendChild(option); + }); + if (document.querySelector(`option[value="${Minecraft.$renderViewEntity.$getName()}"]`)) { + document.querySelector(`option[value="${Minecraft.$renderViewEntity.$getName()}"]`).toggleAttribute('selected'); + } + } +}) + +function keepLoadedPlayer() { + if (profile !== Minecraft.$thePlayer) { + Minecraft.$renderViewEntity = Minecraft.$thePlayer; + setTimeout(function() {Minecraft.$renderViewEntity = profile;}, 0); + } +} + +select.addEventListener('change', function (e) { + window.profile = Minecraft.$theWorld.$playerEntities.$array1.data.find(function (element) { + if (element) { + return element.$getName() == select.value; + } else { + return null; + } + }); + if (profile) { + Minecraft.$renderViewEntity = profile; + if (typeof(keepLoadedPlayerInterval) !== "undefined") { + clearInterval(keepLoadedPlayerInterval); + } + if (profile === Minecraft.$thePlayer) { + Minecraft.$gameSettings.$hideGUI = 0; + } else { + Minecraft.$gameSettings.$hideGUI = 1; + window.keepLoadedPlayerInterval = setInterval(keepLoadedPlayer, 1000); + } + } +}) + +ModAPI.addEventListener("frame", () => { + if (Minecraft.$theWorld && Minecraft.$theWorld.$playerEntities.$array1.data.length > 1) { + select.style.display = "unset"; + } else { + select.style.display = "none"; + } +}) + +select.style.position = "absolute"; +select.style.top = "0px"; +select.style.left = "0px"; + +document.body.appendChild(select); \ No newline at end of file diff --git a/public/resources/mods/downloads/recipe-mod.js b/public/resources/mods/downloads/recipe-mod.js new file mode 100644 index 0000000..5e40cbb --- /dev/null +++ b/public/resources/mods/downloads/recipe-mod.js @@ -0,0 +1,491 @@ +let recipes = {}; + +function displayMessage(msg) { + let advancement = document.createElement('advancement'); + let message = document.createElement('message'); + + if (msg === "success") { + document.querySelector(':root').style.setProperty('--hue-rotate', "0deg"); + message.innerText = "Recipes imported successfully"; + } else if (msg === "error") { + document.querySelector(':root').style.setProperty('--hue-rotate', "250deg"); + message.innerText = "Recipes not imported The mod wont work"; + } + + advancement.appendChild(message); + document.body.appendChild(advancement); +} + +fetch("https://raw.githubusercontent.com/PrismarineJS/minecraft-data/master/data/pc/1.8/recipes.json") +.then(response => response.json()) +.then(json => recipes = json) +.then(() => addAllItems()) +.then(() => displayMessage("success")) +.catch(() => displayMessage("error")); + + +function getRecipe(recipe, index) { + let json = {}; + let craft = Object.values(recipe)[index]; + let grid = []; + + json.result = ModAPI.getItemById(craft.result.id); + json.resultNumber = craft.result.count; + json.grid = []; + + if (craft.inShape) { + while (craft.inShape.length < 3) { + craft.inShape.push([null, null, null]); + } + craft.inShape.forEach(craftLine => { + while (craftLine.length < 3) { + craftLine.push(null); + } + }); + grid = [].concat(craft.inShape[0], craft.inShape[1], craft.inShape[2]); + } else if (craft.outShape) { + grid = [].concat(craft.outShape[0], craft.outShape[1], craft.outShape[2]); + } + + grid.forEach(item => { + if (item) { + if (item.id) { + fixedItem = item.id; + } else { + fixedItem = item; + } + json.grid.push(ModAPI.getItemById(fixedItem)); + } else { + json.grid.push(null); + } + }); + + return json; +} + +function getRecipesForId(id) { + return recipes[id]; +} + +ModAPI.getItemById = function (id) { + return Object.keys(ModAPI.items)[Object.values(ModAPI.items).indexOf(Object.values(ModAPI.items).find(function (item) { + if (item) { + if(item.getID() == id) { + return true; + } else { + return false; + } + } else { + return false; + } + }))]; +} + +ModAPI.getIdforItem = function (item) { + if (ModAPI.items[item]) { + return ModAPI.items[item].getID() + } +} + +function craft(result, index) { + if (!recipes[ModAPI.getIdforItem(result)]) { + return false; + } + let craft = getRecipe(getRecipesForId(ModAPI.getIdforItem(result)), index); + let matrixGrid = []; + let resultItem; + + craft.grid.forEach(item => { + if (item) { + matrixGrid.push(ModAPI.reflect.classes[0].constructors[4].exec({itemIn: ModAPI.items[item].getRef(), amount: 1})); + } else { + matrixGrid.push(null); + } + }); + + resultItem = ModAPI.reflect.classes[0].constructors[4].exec({itemIn: ModAPI.items[craft.result].getRef(), amount: craft.resultNumber}) + + if (matrixGrid.length == 9) { + Minecraft.$currentScreen.$inventorySlots0.$craftMatrix1.$stackList.data = matrixGrid; + Minecraft.$currentScreen.$inventorySlots0.$craftResult0.$stackResult.data[0] = resultItem; + } + + return true; +} + +function currentScreenName() { + return String(Minecraft.$currentScreen).substring(String(Minecraft.$currentScreen).lastIndexOf(".") + 1, String(Minecraft.$currentScreen).lastIndexOf("@")); +} + +// GUI + +let button = document.createElement('button'); +button.setAttribute('id', 'recipesButton') + +document.body.appendChild(button); + +button.style.position = "absolute"; +button.style.display = "none"; +button.style.top = "0px"; +button.style.left = "0px"; +button.style.width = "40px"; +button.style.height = "36px"; +button.style.transformOrigin = "top left"; +button.style.border = "0px"; +button.style.backgroundSize = "100% 100%"; + +function addStyle(styleString) { + const style = document.createElement('style'); + style.textContent = styleString; + document.body.append(style); +} + +let recipeGui = document.createElement('div'); +recipeGui.setAttribute('id', 'recipeGui'); +recipeGui.style.position = "absolute"; +recipeGui.style.backgroundColor = "#c6c6c6"; + +let textInput = document.createElement('div'); +textInput.setAttribute('id', 'textInput'); + +let itemList = document.createElement('div'); +itemList.setAttribute('id', 'itemList'); + +function addItem(url, id) { + let item = document.createElement('item'); + let name = String(id).replaceAll('_', ' '); + item.setAttribute('class', 'item'); + item.setAttribute('itemName', name); + item.style.background = `url('${url}'), url('https://raw.githubusercontent.com/kuronekony4n/mcicons/main/assets/itemBg.png')`; + item.style.backgroundSize = "75% 75%, cover"; + item.style.backgroundPosition = "center"; + item.style.backgroundRepeat = "no-repeat"; + itemList.appendChild(item); + item.onclick = function() { + craft(id, 0); + } +} + +recipeGui.appendChild(textInput); +recipeGui.appendChild(itemList); +document.body.appendChild(recipeGui); + +window.searchFieldValue = ""; +window.recipeGui = false; +window.cursor = ""; + +const exceptions = { + planks: "oak_planks", + noteblock: "note_block", + golden_rail: "powered_rail", + wool: "white_wool", + brick_block: "bricks", + snow_layer: "snow", + snow: "snow_block", + fence: "oak_fence", + lit_pumpkin: "jack_o_lantern", + stained_glass: "white_stained_glass", + trapdoor: "oak_trapdoor", + stonebrick: "stone_bricks", + melon_block: "melon", + fence_gate: "oak_fence_gate", + stained_hardened_clay: "white_terracotta", + stained_glass_pane: "white_stained_glass_pane", + slime: "slime_block", + carpet: "white_carpet", + stone_slab2:"red_sandstone_slab", + sign: "oak_sign", + boat: "oak_boat", + bed: "red_bed", + speckled_melon: "glistering_melon_slice", + netherbrick: "nether_bricks", + banner: "white_banner", + wooden_pressure_plate: "oak_pressure_plate", + wooden_slab: "oak_slab", + wooden_button: "oak_button", + wooden_door: "oak_door", + dye: "white_dye", + fireworks: "firework_rocket", + firework_charge: "firework_star", +} + +button.onclick = function () { + window.recipeGui = !window.recipeGui; + if (window.recipeGui) { + window.intervalCursor = setInterval(() => { + window.cursor = "_"; + textInput.innerText = window.searchFieldValue + window.cursor; + let timeout = setTimeout(() => { + window.cursor = ""; + textInput.innerText = window.searchFieldValue + window.cursor; + }, 1000); + }, 2000); + } else { + clearTimeout(intervalCursor); + } +} + +function addAllItems() { + Object.keys(recipes).forEach(item => { + let name = ModAPI.getItemById(item); + let url = ""; + if (exceptions[name]) { + url = `https://raw.githubusercontent.com/kuronekony4n/mcicons/main/icons-1.21-thumb/${exceptions[name]}.png`; + } else { + if (name != undefined) { + url = `https://raw.githubusercontent.com/kuronekony4n/mcicons/main/icons-1.21-thumb/${name}.png`; + } else { + url = `https://static.wikia.nocookie.net/minecraft_gamepedia/images/b/b5/Missing_Texture_JE4.png`; + } + } + addItem(url, name); + }); +} + + +addStyle(` + #recipesButton { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA2CAYAAACbZ/oUAAACkklEQVRoQ+2aPUsDQRCGjY2tnREhWNikEBFsFEEsrBSCAbFQEMHGykos/AJjCslfSBOwESGQTrAI12g6EYtAmkgaGwv/QYywjK8y4+3qhdzGSbW7N7e3775PhrmPxID8a/9wzIdDCW6R7KAJVME+2AprtHKYXG23/TY4kfiilzrfd0EFe4YxLfcnh1lXa7VaV7VmFmZD568E96ExUkChUKBD5XL5cyM6LRX8sR3q8C/hktCduliiGYfHh6n99vxG7ceDW2q74t0zpFWw8cx7hyUnF67W2D9DvVKn8XQmzcb8Be+uI62CjWfeO+zqJGKJ3D5cPlA3OZmk9ujUKJu98dxg/To0e0eGtAoOQdcbh0eG+GcD+J9EMVg8SDWKJB7PxeyN80iZXMLbGWkVzKDbtw5P7M8RXWMzY2zdi/hJtbGEPW7cy+OLU0GC2X7w6ZXOnV/Jut0eItIq2OydTRKywT7WDiO6iDeOV8+r1F08Wgytk21QR3RxwtJZibrbq8vRI62CGf/6yuHDuUOSmL/Ls7gi6ih+enM6tE7GeJw8t5OjbiqVonar1aL26d5u9EirYMbjvnK4uFEkic1mk8VbKk4wG0voYtZFXCWMj4vHtIauFB4q2OwvJjAvHcYH8XjTj2WmjduNmwabySV0MRgx3jrZYudBjDHAuZZWwWb7/oXDiIor3iyHnUEpA7uiK72CcX7iIb1MU8HGQimBee+wK95BELCasWDAACnrxuLtoQ3eKtjY6aXDNnhLhUdU6Eo5IrIsLV1AwlsFmx3z3mEJb4kI16wrzdMzpFVwiCW9dBiXRh+pZbOfrypccYpDPH5911lP+MelKjgOtjmswdZhFm+H68Qp1OoDcRUcJ8sc18I6/A6Toag65vT7bwAAAABJRU5ErkJggg=='); + outline: none; + } + + #recipesButton:hover { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA2CAYAAACbZ/oUAAACoElEQVRoQ+2aL0hDURTGnUWjzY3BMFgMIsJAWXAYTAYxiEFhCBaTIA7DnILTIIjFuiJYxBWbYJAZhIkgYhAskxWLYVHTFHmcfYNzePfq2+adZ+m+++6/736/dzhv74a6pF/PRE2858KNj+sQt0y28ruhCnbBVlijkcPgau296JjCxuWGepP1ChDfiLQKdtdk2WHB1f2j26aqPVwf8x1/7aDk20ZqUCgU6NZdqT5OCKMxPrcq+Md7zXfsWIclYSP7U7QTfQN9VK6+VKn8sHFJZVu824a0CvY8c95hycnk6Rz7ED+dP1H90MwQ2+Y3eDcdaRXseea8w7ZOIpbI7f3JPV2Gh8NUjoxE2OiNfYvzZ77ROzCkVbAPus443N/D/zeAzySKweRBSsok8dgXozeOI0VyCW9rpFUwg27HOjyYThBd0XiUzXsRPyk3lrDHjXt9eLVKSDDadz++Ud/YeNru9RCRVsHe3pkEIRPs/7TDiC7ijfVXu1d0Obk56Zsnm6CO6OKAxzvHdLk0Ox080iqY8a+jHM4kMiRx72aPxRVRR/Gji6O+eTK2x8Fzy7k6rrEYlSuVCpW3V1eCR1oFMx53lMP5hTxJLJfLLN5ScoLRWEIXoy7iGhMwzuaztIamJB4q2NtfDGBOOoxfHvClH9NME7efL57ZSC6hi40R49RWih0HMW7oa5tLq2Bv+/6Fw4iKLd4sh1+VUgS2RVf6BGP9j4f09VAFexZKAcx5h23xLhb5syKYMOCYUtT9E18PTfBWwZ6dTjpsgreUeASFrhQjAovS0gQS3irY2zHnHZbwloiwjbrSOG1DWgX7WNI+h3FhcCovPuZ/Us4Ws1a2x9N3XSaHS1VwK+0JYC4zhwW8A5i/9UMYHRBXwa03JrAZBYc/AS53y4zphYZNAAAAAElFTkSuQmCC'); + } + + #textInput { + width: 88%; + margin-left: 4%; + padding-left: 2%; + border: 1px solid #111; + border-radius: 0px; + font-family: Minecraftia; + display: flex; + align-items: center; + background-color: #8b8b8b; + color: white; + text-shadow: 3px 3px 0px rgb(55 55 55 / 75%); + border-image-slice: 14 14 14 14; + border-image-outset: 0px 0px 0px 0px; + border-image-repeat: stretch stretch; + border-image-source: url("data:image/png;base64,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"); + border-style: solid; + user-select: none; + pointer-events: all; + } + + #itemList { + width: 95%; + margin-left: 4%; + overflow-y: auto; + display: flex; + align-items: center; + flex-wrap: wrap; + justify-content: flex-start; + align-content: flex-start; + pointer-events: all; + } + + item.item { + height: var(--itemSize); + width: var(--itemSize); + display: block; + } + + #recipeGui { + pointer-events: none; + } + + #itemList::-webkit-scrollbar { + width: var(--sb-size); + } + + #itemList::-webkit-scrollbar-thumb { + background: #adadad; + border-radius: 0px; + border-right: calc(var(--sb-size) / 6) solid #808080; + border-bottom: calc(var(--sb-size) / 6) solid #808080; + } + + #itemList::-webkit-scrollbar-track { + background: #e4e4e4; + border-radius: 0px; + } + + @supports not selector(::-webkit-scrollbar) { + #itemList { + scrollbar-color: #e4e4e4 #c0c0c0; + } + } + ` + ); + +ModAPI.addEventListener("update", () => { + if (currentScreenName() === "GuiCrafting") { + button.style.display = "block"; + window.ScaledResolution = innerHeight/ModAPI.mcinstance.$displayHeight*ModAPI.ScaledResolution.getScaleFactor(); + button.style.scale = ModAPI.ScaledResolution.getScaleFactor()/2; + button.style.top = ScaledResolution * (Minecraft.$currentScreen.$guiTop + 35) + "px"; + button.style.left = ScaledResolution * (Minecraft.$currentScreen.$guiLeft + 6) + "px"; + } else { + button.style.display = "none"; + window.recipeGui = false; + } +}) + +ModAPI.addEventListener("update", () => { + if (window.recipeGui) { + recipeGui.style.display = "block"; + recipeGui.style.left = ScaledResolution * (Minecraft.$currentScreen.$guiLeft + 3) + "px"; + recipeGui.style.top = ScaledResolution * (Minecraft.$currentScreen.$guiTop + 72) + "px"; + recipeGui.style.width = ScaledResolution * (Minecraft.$currentScreen.$xSize - 6) + "px"; + recipeGui.style.height = ScaledResolution * (Minecraft.$currentScreen.$ySize - 75) + "px"; + + textInput.style.height = ScaledResolution * 12 + "px"; + textInput.style.marginTop = ScaledResolution * 5 + "px"; + textInput.style.borderWidth = ModAPI.ScaledResolution.getScaleFactor() + "px"; + textInput.style.fontSize = ModAPI.ScaledResolution.getScaleFactor()/2.5 + "rem"; + textInput.style.paddingBottom = ModAPI.ScaledResolution.getScaleFactor() + "px"; + textInput.style.textShadow = `${ModAPI.ScaledResolution.getScaleFactor()}px ${ModAPI.ScaledResolution.getScaleFactor()}px 0px rgb(55 55 55 / 75%)`; + + itemList.style.height = `calc(100% - ${ScaledResolution * 22}px)`; + itemList.style.marginTop = ScaledResolution * 2 + "px"; + + document.querySelector(':root').style.setProperty('--itemSize', (ModAPI.ScaledResolution.getScaleFactor() * 17.25) + "px"); + document.querySelector(':root').style.setProperty('--sb-size', (ModAPI.ScaledResolution.getScaleFactor() * 5) + "px"); + } else { + recipeGui.style.display = "none"; + } +}) + +document.addEventListener('keydown', function(event) { + if (window.recipeGui && event.key.length == 1 && window.searchFieldValue.length < 30) { + window.searchFieldValue = window.searchFieldValue + event.key; + } else if (window.recipeGui && event.key == "Backspace") { + window.searchFieldValue = window.searchFieldValue.slice(0,-1); + } else if (window.recipeGui && event.key == "Space") { + window.searchFieldValue = window.searchFieldValue + " "; + } + if (window.recipeGui) { + textInput.innerText = window.searchFieldValue + window.cursor; + event.stopPropagation(); + Array.from(document.getElementsByClassName('item')).forEach(itemElement => { + if (window.searchFieldValue.length > 0) { + if (itemElement.getAttribute("itemName").includes(window.searchFieldValue)) { + itemElement.style.display = "block"; + } else { + itemElement.style.display = "none"; + } + } else { + itemElement.style.display = "block"; + } + }); + } +}); + +ModAPI.addEventListener("frame", () => { + document.querySelector(':root').style.setProperty('--scale', "scale("+ ModAPI.ScaledResolution.getScaleFactor()/3 +")"); +}) + +/* Load recipes message css */ +addStyle(` + :root { + --hue-rotate: 0deg; +} +advancement { + border-image-slice: 27 27 27 27 fill; + border-image-width: 20px 20px 20px 20px; + border-image-outset: 0px 0px 0px 0px; + border-image-repeat: stretch stretch; + border-image-source: url("data:image/webp;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAACQCAYAAAAhkFzZAAAABHNCSVQICAgIfAhkiAAAC4xJREFUeJzt3ctuXFW6wPFv7Vu5EoR6gEBCAgkFCZAQEqd5gDwAb9MPQHerdUbnXZhwnoIBEjBhwCiRGBDELTjUvq0elHfFdhzs5Rt2+P0kC7tStWtXYpK/lr9aO8Xp6ojYpJTqM9y3WM75Kg4LAADP00dEFxH/ioh/Hnzen/XB1dWcEwAAvJiaE26rD27PETFHRHutZwQAANdjmbDoDt126kr08YCuI2I6+FiMsY1pAAB4ESxt+9PBfx+XPPhwQC/xfD8iPj44YF1VVfXuu+9WVVXFNE2RUrrg+R512ccDAIBTNKvVKh48ePDxDz/8EBHxt4iY5nmeI+I/sZ3CeP6Dj30+xTae/7Hc2LZtvP/++/Hyyy/HL7/8Ek1z0tTH+QloAACuWX337t0p53z/0aNH95cbU0qRc/7fKAjok5ayu77vY39/vxuHMSIipunwdMfFCWgAAK7TMAwxTVP95MmTKaU05pxTbDfXGOIMo8uHA3op7cPD1F1ExHq9jqqqomma6Psz7/BxJgIaAIDr1HVddF0XdV3X8bR9IyJSnLL6HLEN6OVBbWzfMFjVdb1bab57927knKNpmvj999+jqi535zv7QAMAcJ1SSjGOY1RVFSml44vEbWxXoqt4GtRHojrFNpoX+b333qs++OCDarPZRNd1MQ5j1M22sbuuu/QVaAAAuG5t28b+/v6ud5u2iXEY47P//2wahiFiu53dOuf8SUT8Ow5dbKU5foXBpml2bxTcrmpvV4mrqhLPAADcekvXVmk7opxzjpxztF0bwzAcns6Iqqqq7eYchx5//IDLVnXzPMdms4mmaSKlFJvNJtq2jZTSkY/F8a8BAOAmmud5+/6+tonHj7dbQK9Wq5jn+fCOc897f2B36p50B0vY0bZtDMPw3Ehe4vp4oQMAwE2w2Wyiqqoj78FbwnkYhthsNrvezTnng7Z95mIrl7Kpc0opvvnmm91JAADATTGOY6zX63jllVci4tld4JYNNNq2jQ8//DAeP34cdV03e3t78cMPP3z84MGDiIOLrURcQkBXVRXzPMf3339/6XtEAwDAReWcY71ex2uvvRZ1Xe8mLBZLz1ZVFe+88060bRs557qqqunrr7++//Dhw/uH73/hgE4pxTROsV6vY7PZXPRwAABwqeq6jr7vY+iHmOrpmRXoaZqi67rY39+PnPNui7u9vb368ePHU2x3rds9qHhT52W4epl1HscxqrqKJ0+emH8GAODGyTnvojmlFKvVKnLOu1XnnHMMwxBt2+4uHrho27aOiFUcehNhcUBXVRXDMMQwDNs9og+Kvm1bIxwAANw44zhur2cy9JFSiv3f9mOetgu/8zyfuMPcHyke4ei6Lr799tt4+PBh7O3txWaz2e2+0bZt6eEAAODKpJSirusYxzG++uqrmOc51ut1DMMQr776aty7dy/GcXtdwWV3jmVf6OXjuOKATintNp9eLrqyDF4vK9CXfblvAAA4jyWAl7GMvu9jf39/16vTNJ0YyX+kOKD7vo+qqnb7PkfEbva5ruviEwAAgKuUUtot9C5X2p7nObquO9eFAC0VAwBAAQHNX8QcT6/IeQa52n4AABxzKVcihJuvMIaTLRkhIiLywY82020bzzt8vif9eDY/53aA0wloAJ7v1oXz4rQ4Fs/A+fkZNQAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAECBC+8DnfNt3SMUAIC/gsvuVSvQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAUENAAAFBDQAABQQEADAEABAQ0AAAWaP/sE4DKllI58nXP+k87k/A6/hsPnn3N+5vVd1nPdlt+ni77+017n8359ub2qTl9zmOd5d795nv/wvsePd/z+pz3fRb/fS58PgC0BzR8q/Qe6NBiuW+nruWigXGbwXkVAL54X0qc9320J77O6jNfzZ3+PA3D1/E0Pt4QwA4Cbwb/IAABQwAgHRU77kf5NWyU97XxLRyKuaoTivM932SMU1/37cd0jINf9/Vt6vIs+f+mfx037/xXgtvC3JwAAFBDQAABQQEADAECB4hnolFJsNpvIOccwDFFVVeSco23bU7cw48V33TPCcJn+at+/t22GHeC8jm/X2rZt/PrrrzFN07mOV7wCvTxxXdext7cXERFd10Xf91HX9blOAgAArlJKabfY2/d93L17d9eypYpXoMdxjLfeeiveeOONGMcx2raNzWYTX3755blOAAAArlLOOaZpir//z98jIqKqt2vIdV1Hv+mjbsoWgYsDOs85cs5R13XUdR0557hz505ExLmXwQEA4CpVVRVznqNK1ZERtrqpi6/220REf+jrPM9zU1VVHbEN4qZp4rfffouXXnoppmnaPcmi7/voui6aptnVfemL4eYy4/hiu21/vrftfAG4GeZ5jqqqtou/cz5ye0T5e0KaiOgO39C2bdR1Pa1Wq3q9Xsc4jrFer2MYhmjb9plAzjnHPM/R9/3u5Er4BxEAgKvU9300TRNN00RK6cJTE01K6V8Hn9fzPP/06NGjj7/44ov7wzBM0zTVd+7cibfffjuapolxHJ8p9PV6HXVdx5tvvhnjOBYH9F/tXe8AAFy/eZ5jmqaYp7l45vm4Zp7nfx6+4bvvvotHjx7dn6ZpbJqmXt40WNf1iU+4nMzrr78eXdcZ4QAA4Eap6zr6vo9pmqLtLr718uERji4iHldV9bdxHCMi0uGxjaZpou3aOPi1I+GbUoqUUvT9dpy6ZCzDCjQAAFfpcL+e9IbBlFIM/RBVXUXXdbvrnqxWqxO79vibCCMiliXkannCZWW5qo6+a1H8AgBw2202m6hStRtZjtg28GazOXFa4plb5qdr2kNETCmlaYnnzWazO+iyFA4AALdZ0zTRrZ7uqzHP8+6q23t7e3NEjLFdZJ4iYjppCbk6+MgRMUdEW9f1fs65rus6Ukpx7969+Oijj2IYhiMzJMsStxEOAABuitN68/DK86effhrjOEbOua/rupum6d8R8UlErONgcuOkC6nMBx+LYYnkg4NFVW2XuH/++edYrVa7O54noAEA4M+0BPY8z7vejdhdJPDIdEbE2a5EWMW2ttuDA+TY7t5Rd133hw8EAICbbhlTzjlHznmZUe5ju8nGkfcHRpwtoFNsl6y3X6QUbdvGarWaxnGsm+bpIYxwAABw05zWm23bxmaziWEY4mBsI+LpTnV/Ww6z3P8sAT3nnD+ptm9BrCPipx9//PHjzz///P44jtM8z7uNoQU0AAA3zWm92fd91HUde3t78zRN/4nt1MUU23j+7OBu4+545zyPf6SU/i8iNhGxOu3OAABwC4w55/aE2+t4OspxphXoiBMutnKwymz5GACAF8UyujzEduY5xdMt7HbOGtDPu9gKAAC8SPo4pXWfvbQKAADwXP8FT13puhEpb+wAAAAASUVORK5CYII="); + border-style: solid; + padding: 10px; + color: #fff; + font-family: 'Minecraftia'; + position: absolute; + top: -1px; + right: 0px; + height: 72px; + width: 455px; + image-rendering: pixelated; + transform-origin: top right; + font-size: 1.5em; + user-select: none; + z-index: 10000; + transform-origin: top right; +} + +advancement { + -webkit-animation-name: slideInDown, slideOutUp; + animation-name: slideInDown, slideOutUp; + -webkit-animation-duration: .5s, .5s; + animation-duration: .5s, .5s; + -webkit-animation-delay: 0s, 5s; + animation-delay: 0s, 5s; + -webkit-animation-fill-mode: both, forwards; + animation-fill-mode: both, forwards; +} +@-webkit-keyframes slideInDown { + 0% { + -webkit-transform: translateY(-100%) var(--scale); + transform: translateY(-100%) var(--scale); + visibility: visible; + } + 100% { + -webkit-transform: translateY(0) var(--scale); + transform: translateY(0); + } +} +@keyframes slideInDown { + 0% { + -webkit-transform: translateY(-100%) var(--scale); + transform: translateY(-100%) var(--scale); + visibility: visible; + } + 100% { + -webkit-transform: translateY(0) var(--scale); + transform: translateY(0) var(--scale); + } +} + + @-webkit-keyframes slideOutUp { + 0% { + -webkit-transform: translateY(0) var(--scale); + transform: translateY(0) var(--scale); + } + 100% { + visibility: hidden; + -webkit-transform: translateY(-100%) var(--scale); + transform: translateY(-100%) var(--scale); + } + } + @keyframes slideOutUp { + 0% { + -webkit-transform: translateY(0) var(--scale); + transform: translateY(0) var(--scale); + } + 100% { + visibility: hidden; + -webkit-transform: translateY(-100%) var(--scale); + transform: translateY(-100%) var(--scale); + } +} + +advancement:before { + content: ''; + position: absolute; + width: 70px; + height: 70px; + background-image: url('data:;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAMAAAC8EZcfAAAAKlBMVEUAAABHjkdWrVYbNhswYDCWlpYhFAUVDgU9ej1UVFQcDwC0tLTV1dUMBQA2AfQBAAAAAXRSTlMAQObYZgAAAQhJREFUeF7t17tqBTEMQMHs7n3k+f+/m05qhGJwiiuYUwpjTyf89lpJkvTZBggICAgI+BfmiM4oZ0mdDwQEBAQE3MecRbcoZz11KhAQEBAQcB9zFF1RUpNVoZM6EQgICAgI+IgqTH91T63WX9ZTJwIBAQEBAd+j/uGK1aN7VrUmf6KJQEBAQEDAippdUc9axWRf0Uc0EQgICAgImAd7dFJ7VoW5R8nK2RwgICAgIOAzSsJ3VFH7tdavsJ5VfZpeHQgICAgImOVwlbqKqViJqVgDgYCAgICA69S2/8bMAwICAgICrlPvRTuYWUBAQEBAwH3qDmY+EBAQEBBwn7qMAQQEBAQErJMk6RenVGZExR2o4AAAAABJRU5ErkJggg=='); + background-position: center center; + background-size: cover; + left: 20px; + filter: hue-rotate(var(--hue-rotate)); +} + +message { + margin-left: 100px; + display: block; + margin-top: -2px; +} +`) \ No newline at end of file diff --git a/public/resources/mods/icons/auto-respawn.webp b/public/resources/mods/icons/auto-respawn.webp new file mode 100644 index 0000000..bbac126 Binary files /dev/null and b/public/resources/mods/icons/auto-respawn.webp differ diff --git a/public/resources/mods/icons/jump-boost.webp b/public/resources/mods/icons/jump-boost.webp new file mode 100644 index 0000000..bbac126 Binary files /dev/null and b/public/resources/mods/icons/jump-boost.webp differ diff --git a/public/resources/mods/icons/player-vision.webp b/public/resources/mods/icons/player-vision.webp new file mode 100644 index 0000000..bbac126 Binary files /dev/null and b/public/resources/mods/icons/player-vision.webp differ diff --git a/public/resources/mods/icons/recipe-mod.webp b/public/resources/mods/icons/recipe-mod.webp new file mode 100644 index 0000000..5262648 Binary files /dev/null and b/public/resources/mods/icons/recipe-mod.webp differ