diff options
| author | 2025-12-12 15:39:20 -0500 | |
|---|---|---|
| committer | 2025-12-12 15:39:20 -0500 | |
| commit | e7747d48a2b9d5f172be9e7102c3ac5e9d22f9dd (patch) | |
| tree | e4d31670b001d34ac60b9946b7294344dbc92537 | |
| parent | 4479a8801e3c2aa901cd1499f459272805472222 (diff) | |
| download | modpacks-master.tar.gz modpacks-master.tar.bz2 modpacks-master.zip | |
| -rw-r--r-- | .gitignore | 4 | ||||
| -rw-r--r-- | PROJECT_04/config.txt | 29 | ||||
| -rw-r--r-- | PROJECT_04/mods.txt | 75 | ||||
| -rw-r--r-- | PROJECT_04/tree.txt | 40 | ||||
| -rw-r--r-- | archive/patches/capes_custom.diff | 110 | ||||
| -rwxr-xr-x | scripts/check-tree.py | 11 | ||||
| -rw-r--r-- | website/requirements.txt | 2 | ||||
| -rwxr-xr-x | website/run.sh | 2 | ||||
| -rw-r--r-- | website/site.py | 18 | ||||
| -rw-r--r-- | website/static/index.html | 5 | ||||
| -rw-r--r-- | website/static/index.js | 34 | ||||
| -rw-r--r-- | website/static/style.css | 9 | ||||
| -rw-r--r-- | website/static/template.html | 4 |
13 files changed, 314 insertions, 29 deletions
@@ -1,2 +1,2 @@ -scripts/venv/ -website/venv/ +**/tree/ +**/venv/ diff --git a/PROJECT_04/config.txt b/PROJECT_04/config.txt new file mode 100644 index 0000000..52eebd0 --- /dev/null +++ b/PROJECT_04/config.txt @@ -0,0 +1,29 @@ += Configs + +[options.txt]c +[servers.dat]c + +[shaderpacks/BSL_v10.0.zip.txt]c +[shaderpacks/Mellow%20Shader%20v2.2.zip.txt]c + +[config/sodium-options.json]c + +[config/iris.properties]c + +[config/dynamic_fps.json]c +Invisible 0fps -> 1fps + +[config/capes.json5]c +Custom Cape IP + +[config/notenoughanimations.json]c +Disable Boat Rowing Animation +Disable Leg Smoothing + +[config/sounds/chat.json]c +Typing Pitch 1.6 -> 1.4 +[config/sounds/ui.json]c +[config/sounds/world.json]c +Disable unwanted + +// vim: set syntax=asciidoc: diff --git a/PROJECT_04/mods.txt b/PROJECT_04/mods.txt new file mode 100644 index 0000000..e99e4e6 --- /dev/null +++ b/PROJECT_04/mods.txt @@ -0,0 +1,75 @@ += 1.21.11 PROJECT_04 + +== Resourcepacks +- Motschen's Better Leaves [Better-Leaves-9.4.zip]r + * https://modrinth.com/resourcepack/better-leaves/version/9.4 +- Border Makeover (Style 3) [Border%20Makeover%20%28S3%29.zip]r + * https://modrinth.com/resourcepack/border-makeover/version/LQZHL56m + +== Shaders +- BSL Shaders [BSL_v10.0.zip]sh + * https://modrinth.com/shader/bsl-shaders/version/10.0 +- Mellow [Mellow%20Shader%20v2.2.zip]sh + * https://modrinth.com/shader/mellow/version/2.2 + +== Performance/Graphics +- Sodium [sodium-fabric-0.8.0%2Bmc1.21.11.jar]c + * https://modrinth.com/mod/sodium/version/mc1.21.11-0.8.0-fabric +- Iris [iris-fabric-1.10.2%2Bmc1.21.11.jar]c + * https://modrinth.com/mod/iris/version/1.10.2+1.21.11-fabric +- Entity Culling [entityculling-fabric-1.9.4-mc1.21.11.jar]c + * https://modrinth.com/mod/entityculling/version/P9ZiZM7Q +- ImmediatelyFast [ImmediatelyFast-Fabric-1.14.0%2B1.21.11.jar]c + * https://modrinth.com/mod/immediatelyfast/version/1.14.0+1.21.11-fabric +- Dynamic FPS [dynamic-fps-3.11.0%2Bminecraft-1.21.9-fabric.jar]c + * https://modrinth.com/mod/dynamic-fps/version/WfSXh637 +- Lithium [lithium-fabric-0.21.0%2Bmc1.21.11.jar]c,s + * https://modrinth.com/mod/lithium/version/mc1.21.11-0.21.0-fabric +- FerriteCore [ferritecore-8.0.3-fabric.jar]c,s + * https://modrinth.com/mod/ferrite-core/version/8.0.3-fabric + +== Visual +- Capes [capes-1.5.10+1.21.11-fabric.jar]c + * https://modrinth.com/mod/capes/version/1.5.10+1.21.11 +- Not Enough Animations [notenoughanimations-fabric-1.11.0-mc1.21.11.jar]c + * https://modrinth.com/mod/not-enough-animations/version/o0j7boKi + +== Audio +- Sounds [sounds-2.4.21%2Bedge%2B1.21.11-fabric.jar]c + * https://modrinth.com/mod/sound/version/2.4.21+edge+1.21.11-fabric +- Raise Sound Limit Simplified [rsls-1.1.13.jar]c + * https://modrinth.com/mod/rsls/version/1.1.13 +- x|Sound Physics Remastered [sound-physics-remastered-fabric-1.21.11-1.5.1.jar]c,s + * https://modrinth.com/mod/sound-physics-remastered/version/fabric-1.21.10-1.5.1 +- Simple Voice Chat [voicechat-fabric-1.21.11-2.6.7.jar]c,s + * https://modrinth.com/plugin/simple-voice-chat/version/fabric-1.21.11-2.6.7 + +== Utilities +- Mod Menu [modmenu-17.0.0-alpha.1.jar]c + * https://modrinth.com/mod/modmenu/version/17.0.0-alpha.1 +- WI Zoom [WI-Zoom-1.7-MC1.21.11.jar]c + * https://modrinth.com/mod/wi-zoom/version/1.7-MC1.21.11 + +== Chat +- Longer Chat History [LongerChatHistory-fabric-1.7.jar]c + * https://modrinth.com/mod/longer-chat-history/version/8ZILQQ32 +- Emoji Type [emoji-type-2.3.3-1.21.10-fabric.jar]c + * https://modrinth.com/mod/emoji-type/version/2.3.3-1.21.10-fabric +- Chat Heads [chat_heads-1.1.8-fabric-1.21.11.jar]c + * https://modrinth.com/mod/chat-heads/version/19GmaMFY +- Chat Animation [chatanimation-fabric-1.21.11-1.1.2.jar]c + * https://modrinth.com/mod/chatanimation/version/atsFATtj + +== Dependencies +- Fabric API [fabric-api-0.139.5%2B1.21.11.jar]c,s + * https://modrinth.com/mod/fabric-api/version/0.139.5+1.21.11 +- Fabric Language Kotlin [fabric-language-kotlin-1.13.7%2Bkotlin.2.2.21.jar]c + * https://modrinth.com/mod/fabric-language-kotlin/version/1.13.7+kotlin.2.2.21 +- M.R.U [mru-1.0.25%2Bedge%2B1.21.10-fabric.jar]c + * https://modrinth.com/mod/mru/version/1.0.25+edge+1.21.10-fabric + * Sounds +- YetAnotherConfigLib [yet_another_config_lib_v3-3.8.1%2B1.21.11-fabric.jar]c + * https://modrinth.com/mod/yacl/version/3.8.1+1.21.11-fabric + * Sounds + +// vim: set syntax=asciidoc: diff --git a/PROJECT_04/tree.txt b/PROJECT_04/tree.txt new file mode 100644 index 0000000..a07d708 --- /dev/null +++ b/PROJECT_04/tree.txt @@ -0,0 +1,40 @@ +tree/client-overrides/config/capes.json5 +tree/client-overrides/config/dynamic_fps.json +tree/client-overrides/config/iris.properties +tree/client-overrides/config/notenoughanimations.json +tree/client-overrides/config/sodium-options.json +tree/client-overrides/config/sounds/chat.json +tree/client-overrides/config/sounds/ui.json +tree/client-overrides/config/sounds/world.json +tree/client-overrides/mods/ImmediatelyFast-Fabric-1.14.0%2B1.21.11.jar +tree/client-overrides/mods/LongerChatHistory-fabric-1.7.jar +tree/client-overrides/mods/WI-Zoom-1.7-MC1.21.11.jar +tree/client-overrides/mods/capes-1.5.10+1.21.11-fabric.jar +tree/client-overrides/mods/chat_heads-1.1.8-fabric-1.21.11.jar +tree/client-overrides/mods/chatanimation-fabric-1.21.11-1.1.2.jar +tree/client-overrides/mods/dynamic-fps-3.11.0%2Bminecraft-1.21.9-fabric.jar +tree/client-overrides/mods/emoji-type-2.3.3-1.21.10-fabric.jar +tree/client-overrides/mods/entityculling-fabric-1.9.4-mc1.21.11.jar +tree/client-overrides/mods/fabric-language-kotlin-1.13.7%2Bkotlin.2.2.21.jar +tree/client-overrides/mods/iris-fabric-1.10.2%2Bmc1.21.11.jar +tree/client-overrides/mods/modmenu-17.0.0-alpha.1.jar +tree/client-overrides/mods/mru-1.0.25%2Bedge%2B1.21.10-fabric.jar +tree/client-overrides/mods/notenoughanimations-fabric-1.11.0-mc1.21.11.jar +tree/client-overrides/mods/rsls-1.1.13.jar +tree/client-overrides/mods/sodium-fabric-0.8.0%2Bmc1.21.11.jar +tree/client-overrides/mods/sounds-2.4.21%2Bedge%2B1.21.11-fabric.jar +tree/client-overrides/mods/yet_another_config_lib_v3-3.8.1%2B1.21.11-fabric.jar +tree/client-overrides/options.txt +tree/client-overrides/resourcepacks/Better-Leaves-9.4.zip +tree/client-overrides/resourcepacks/Border%20Makeover%20%28S3%29.zip +tree/client-overrides/servers.dat +tree/client-overrides/shaderpacks/BSL_v10.0.zip +tree/client-overrides/shaderpacks/BSL_v10.0.zip.txt +tree/client-overrides/shaderpacks/Mellow%20Shader%20v2.2.zip +tree/client-overrides/shaderpacks/Mellow%20Shader%20v2.2.zip.txt +tree/modrinth.index.json +tree/overrides/mods/fabric-api-0.139.5%2B1.21.11.jar +tree/overrides/mods/ferritecore-8.0.3-fabric.jar +tree/overrides/mods/lithium-fabric-0.21.0%2Bmc1.21.11.jar +tree/overrides/mods/sound-physics-remastered-fabric-1.21.11-1.5.1.jar.disabled +tree/overrides/mods/voicechat-fabric-1.21.11-2.6.7.jar diff --git a/archive/patches/capes_custom.diff b/archive/patches/capes_custom.diff new file mode 100644 index 0000000..3bcb9e4 --- /dev/null +++ b/archive/patches/capes_custom.diff @@ -0,0 +1,110 @@ +diff --git a/common/src/main/kotlin/me/cael/capes/CapeConfig.kt b/common/src/main/kotlin/me/cael/capes/CapeConfig.kt +index 4d3a40e..f7fcba4 100644 +--- a/common/src/main/kotlin/me/cael/capes/CapeConfig.kt ++++ b/common/src/main/kotlin/me/cael/capes/CapeConfig.kt +@@ -7,12 +7,14 @@ import java.io.PrintWriter + + class CapeConfig { + var clientCapeType = CapeType.MINECRAFT +- var enableOptifine = true ++ var enableOptifine = false + var enableLabyMod = false + var enableMinecraftCapesMod = false + var enableCosmetica = false + var enableCloaksPlus = false +- var enableElytraTexture = true ++ var enableElytraTexture = false ++ var customCapeUrl = ""; ++ var enableCustom = true + + fun save() { + val gson = GsonBuilder().setPrettyPrinting().create() +@@ -21,4 +23,4 @@ class CapeConfig { + PrintWriter(configFile).use { out -> out.println(json) } + } + +-} +\ No newline at end of file ++} +diff --git a/common/src/main/kotlin/me/cael/capes/CapeType.kt b/common/src/main/kotlin/me/cael/capes/CapeType.kt +index f61eb31..678f853 100644 +--- a/common/src/main/kotlin/me/cael/capes/CapeType.kt ++++ b/common/src/main/kotlin/me/cael/capes/CapeType.kt +@@ -5,7 +5,7 @@ import net.minecraft.screen.ScreenTexts + import net.minecraft.text.Text + + enum class CapeType(val stylized: String) { +- MINECRAFT("Minecraft"), OPTIFINE("OptiFine"), LABYMOD("LabyMod"), MINECRAFTCAPES("MinecraftCapes"), COSMETICA("Cosmetica"), CLOAKSPLUS("Cloaks+"); ++ MINECRAFT("Minecraft"), OPTIFINE("OptiFine"), LABYMOD("LabyMod"), MINECRAFTCAPES("MinecraftCapes"), COSMETICA("Cosmetica"), CLOAKSPLUS("Cloaks+"), CUSTOM("Custom"); + + fun cycle() = when(this) { + MINECRAFT -> OPTIFINE +@@ -13,7 +13,8 @@ enum class CapeType(val stylized: String) { + LABYMOD -> COSMETICA + COSMETICA -> MINECRAFTCAPES + MINECRAFTCAPES -> CLOAKSPLUS +- CLOAKSPLUS -> MINECRAFT ++ CLOAKSPLUS -> CUSTOM ++ CUSTOM -> MINECRAFT + } + + fun getURL(profile: GameProfile): String? { +@@ -24,6 +25,7 @@ enum class CapeType(val stylized: String) { + COSMETICA -> if(config.enableCosmetica) "https://api.cosmetica.cc/v2/get/info?uuid=${profile.id}" else null + MINECRAFTCAPES -> if(config.enableMinecraftCapesMod) "https://api.minecraftcapes.net/profile/${profile.id.toString().replace("-", "")}" else null + CLOAKSPLUS -> if(config.enableCloaksPlus) "http://161.35.130.99/capes/${profile.name}.png" else null ++ CUSTOM -> if(config.enableCustom) "http://${config.customCapeUrl}/static/capes/${profile.name}.png" else null + MINECRAFT -> null + } + } +diff --git a/common/src/main/kotlin/me/cael/capes/menu/ToggleMenu.kt b/common/src/main/kotlin/me/cael/capes/menu/ToggleMenu.kt +index 97c5323..25fb0ff 100644 +--- a/common/src/main/kotlin/me/cael/capes/menu/ToggleMenu.kt ++++ b/common/src/main/kotlin/me/cael/capes/menu/ToggleMenu.kt +@@ -4,6 +4,7 @@ import me.cael.capes.CapeType + import me.cael.capes.Capes + import net.minecraft.client.gui.screen.Screen + import net.minecraft.client.gui.widget.ButtonWidget ++import net.minecraft.client.gui.widget.TextFieldWidget + import net.minecraft.client.option.GameOptions + import net.minecraft.screen.ScreenTexts + import net.minecraft.text.Text +@@ -45,6 +46,19 @@ class ToggleMenu(parent: Screen, gameOptions: GameOptions) : MainMenu(parent, ga + it.message = CapeType.CLOAKSPLUS.getToggleText(config.enableCloaksPlus) + }.position(width / 2 - 155, height / 7 + 3 * 24).size(150, 20).build()) + ++ addDrawableChild(ButtonWidget.builder(CapeType.CUSTOM.getToggleText(config.enableCustom)) { ++ config.enableCustom = !config.enableCustom ++ config.save() ++ it.message = CapeType.CUSTOM.getToggleText(config.enableCustom) ++ }.position(width / 2 - 155 + 160, height / 7 + 3 * 24).size(150, 20).build()) ++ ++ val customUrlText = TextFieldWidget(textRenderer, width / 2 - 155 + 160, height / 7 + 4 * 24, 150, 20, Text.literal("Custom Cape URL")); ++ customUrlText.setText(config.customCapeUrl) ++ customUrlText.setChangedListener({ ++ config.customCapeUrl = it.toString() ++ }) ++ addDrawableChild(customUrlText) ++ + // addDrawableChild(ButtonWidget.builder(CapeType.CLOAKSPLUS.getToggleText(config.enableCloaksPlus)) { + // config.enableCloaksPlus = !config.enableCloaksPlus + // config.save() +@@ -55,14 +69,14 @@ class ToggleMenu(parent: Screen, gameOptions: GameOptions) : MainMenu(parent, ga + config.enableElytraTexture = !config.enableElytraTexture + config.save() + it.message = elytraMessage(config.enableElytraTexture) +- }.position((width/2) - (200 / 2), height / 7 + 4 * 24).size(200, 20).build()) ++ }.position((width/2) - (200 / 2), height / 7 + 5 * 24).size(200, 20).build()) + + addDrawableChild(ButtonWidget.builder(ScreenTexts.DONE) { + client!!.setScreen(parent) +- }.position((width/2) - (200 / 2), height / 7 + 5 * 24).size(200, 20).build()) ++ }.position((width/2) - (200 / 2), height / 7 + 6 * 24).size(200, 20).build()) + + } + + private fun elytraMessage(enabled: Boolean) = ScreenTexts.composeToggleText(Text.translatable("options.capes.elytra"), enabled) + +-} +\ No newline at end of file ++} diff --git a/scripts/check-tree.py b/scripts/check-tree.py index e37110a..8a4b010 100755 --- a/scripts/check-tree.py +++ b/scripts/check-tree.py @@ -60,8 +60,8 @@ with open(sys.argv[2], 'r', encoding='utf-8') as f: continue if listed_disabled and side not in ('r', 'd'): filename += '.disabled' - all_files.append(filename) target = f'{tree}/{mod_paths[side]}/{filename}' + all_files.append(target) if not os.path.isfile(target): print(f'err: Mod not found in the specified directory.\n\t{target}') any_error = True @@ -87,18 +87,19 @@ with open(sys.argv[3], 'r', encoding='utf-8') as f: side, path = parse_line(line, config_paths) if not side: continue - all_files.append(path.split('/')[-1]) target = f'{tree}/{config_paths[side]}/{path}' + all_files.append(target) if not os.path.isfile(target): print(f'err: Config file not found in specified directory.\n\t{target}') any_error = True for subdir, dirs, files in os.walk(tree): for file in files: - if not (subdir.endswith('mods') or subdir.endswith('resourcepacks') or subdir.endswith('datapacks')): + path = os.path.join(subdir, file) + if path == 'tree/modrinth.index.json': continue - if file not in all_files: - print(f'err: Erroneous file in tree.\n\t{os.path.join(subdir, file)}') + if path not in all_files: + print(f'err: Erroneous file in tree.\n\t{path}') any_error = True if not any_error: diff --git a/website/requirements.txt b/website/requirements.txt index e4045e2..73f4041 100644 --- a/website/requirements.txt +++ b/website/requirements.txt @@ -1 +1 @@ -web.py +web.py @ git+https://github.com/webpy/webpy@3e05bc6 diff --git a/website/run.sh b/website/run.sh index 851c47c..75d638e 100755 --- a/website/run.sh +++ b/website/run.sh @@ -1,4 +1,4 @@ #! /usr/bin/env sh export PYTHONDONTWRITEBYTECODE=1 export PYTHONOPTIMIZE=2 -python3 site.py +python3 site.py 12444 diff --git a/website/site.py b/website/site.py index 83b34e8..7e9603e 100644 --- a/website/site.py +++ b/website/site.py @@ -1,5 +1,6 @@ import re import web +import struct urls = ( '/capes', 'Capes', @@ -12,13 +13,18 @@ class Capes(): web.seeother('/static/index.html') def POST(self): - username = web.input().username + cape = web.input() + if type(cape.data) != bytes: + return web.notacceptable() + if not cape.data.startswith(bytes.fromhex('89504E470D0A1A0A')): + return web.notacceptable() + ihdr = struct.unpack('>IIBBBBB', cape.data[16:29]) + if ihdr[0] > 1024 or ihdr[1] > 1024: + return web.notacceptable() + username = cape.username username = re.sub(r'[^a-zA-Z0-9_]', '', username) with open(f'static/capes/{username}.png', 'wb+') as f: - if type(web.input().data) == bytes: - f.write(web.input().data) - else: - print('Unsupported type') + f.write(cape.data) -if __name__ == "__main__": +if __name__ == '__main__': app.run() diff --git a/website/static/index.html b/website/static/index.html index 6394fcf..73d5cb9 100644 --- a/website/static/index.html +++ b/website/static/index.html @@ -8,13 +8,14 @@ </head> <body onload="init()"> <div id="main"> - <img id="preview" src=""> + <img id="preview" src="" onload="this.style.display='inherit'" onerror="this.style.display='none'"/> + <p id="status"/></p> <div id="input"> <input id="username" type="text" placeholder="Username"/> <input id="file" type="file"/> </div> <div id="resources"> - <form action="http://<IP>:12444/static/template.html" method="get"> + <form action="/static/template.html" method="get"> <button type="submit">Get Template</button> </form> <form action="https://api.labymod.net/capes/capecreator/" method="get" target="_blank"> diff --git a/website/static/index.js b/website/static/index.js index 22bfc20..869eb0b 100644 --- a/website/static/index.js +++ b/website/static/index.js @@ -1,25 +1,39 @@ -const IP = "http://<IP>:12444"; +function onUsernameChanged(usernameInput) { + var preview = document.getElementById('preview'); + if (!usernameInput.value) { + preview.src = ''; + return false; + } + preview.src = '/static/capes/' + usernameInput.value + '.png?t=' + new Date().getTime(); + return true; +} function init() { - document.getElementById('file').addEventListener('change', handleFileSelect, false); + var filePicker = document.getElementById('file'); + filePicker.addEventListener('change', handleFileSelect, false); + var usernameInput = document.getElementById('username'); + filePicker.disabled = !onUsernameChanged(usernameInput); + usernameInput.addEventListener('input', (event) => { + filePicker.disabled = !onUsernameChanged(event.target); + }); } function handleFileSelect(event) { - var username = document.getElementById('username').value - if (!username) { - return; - } + var username = document.getElementById('username').value; + if (!username) return; const reader = new FileReader(); - const url = IP + '/capes'; var formData = new FormData(); formData.append('username', username); formData.append('data', event.target.files[0]); - fetch(url, { - method : "POST", + fetch('/capes', { + method : 'POST', body: formData }).then((response) => { if (response.ok) { - document.getElementById('preview').src = IP + '/static/capes/' + username + '.png'; + document.getElementById('preview').src = '/static/capes/' + username + '.png?t=' + new Date().getTime(); + document.getElementById('status').innerText = 'Upload success.'; + } else { + document.getElementById('status').innerText = 'Failed to upload cape. Image not a .png? or greater than 1024x1024?'; } }); } diff --git a/website/static/style.css b/website/static/style.css index 242ced7..0bab63f 100644 --- a/website/static/style.css +++ b/website/static/style.css @@ -14,6 +14,15 @@ image-rendering: pixelated; } +#status { + margin: inherit; + padding: 4px; +} + +#status:empty { + display: none; +} + #template { width: 100%; display: flex; diff --git a/website/static/template.html b/website/static/template.html index f7d62de..dade2f9 100644 --- a/website/static/template.html +++ b/website/static/template.html @@ -7,7 +7,7 @@ </head> <body> <div id="template"> - <img id="preview" src="http://<IP>:12444/static/template.png"/> + <img id="preview" src="/static/template.png"/> <ul> <div class="input-color"> <p>Top</p> @@ -48,7 +48,7 @@ </ul> </div> <div id="desc"> - <p>Right click and "Save Image As...", edit, then upload <a href="http://<IP>:12444/capes">here</a>.</p> + <p>Right click and "Save Image As...", edit, then upload <a href="/capes">here</a>.</p> <p>If you don't want to edit the Elytra texture, you can crop it out.</p> <p>Feel free to scale. Only use integer scaling (Multiply width/height by a whole number).</p> </div> |