Skip to content

Instantly share code, notes, and snippets.

View exaskye's full-sized avatar
💠

Exa Skye exaskye

💠
View GitHub Profile
@exaskye
exaskye / randomUUID.js
Last active May 11, 2026 11:26
A simple and readable way to generate valid v4 UUIDs in JavaScript. CC0 https://creativecommons.org/publicdomain/zero/1.0/
function randomUUID() {
return randhex(8) + "-" + randhex(4) + "-4" + randhex(3) + "-" + choice(["8", "9", "a", "b"]) + randhex(3) + "-" + randhex(12);
}
let scratchTarr = new Uint32Array(1);
function choice(arr) {
crypto.getRandomValues(scratchTarr);
return arr[Math.floor(scratchTarr[0]%arr.length)]
}
function randhex(count) {
crypto.getRandomValues(scratchTarr);
@exaskye
exaskye / BrokenHash.java
Last active December 28, 2025 11:13
How to generate a (correct) Minecraft-style hex digest. Tested.
package com.unascribed.brokenhash;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.nio.charset.StandardCharsets;
/**
* Generates a broken Minecraft-style twos-complement signed
@exaskye
exaskye / mcpbot archive.md
Last active December 9, 2025 06:57
Fixing "Etag download for http://export.mcpbot.bspk.rs/versions.json failed with code 522" in old ForgeGradle

MCPBot is finally dead, and so goes with it every old version of ForgeGradle. Hope you're not maintaining any 1.7-1.12 mods anymore (or, god forbid, 1.6)! Because if you do, nobody will help you, and if you ask you will be banned from all official Forge channels. Fun fun fun. Game over.

...Or not. Someone asked ArchiveBot to rescue the MCPBot exports, and a WARC file containing a seemingly complete archive is available for download. And, these old ForgeGradle versions download mappings over plain HTTP, not HTTPS!

Some context

I maintain Ears, a mod available for too many versions of Minecraft, and it uses old versions of ForgeGradle to build the 1.6, 1.7, 1.8, 1.9-1.11, and 1.12 ports. Because reengineering these old versions of ForgeGradle is a huge goddamn wa

/*
* To the extent possible under law, the author has dedicated all copyright
* and related and neighboring rights to this software to the public domain
* worldwide. This software is distributed without any warranty.
*
* See <http://creativecommons.org/publicdomain/zero/1.0/>
*/
package com.unascribed.random;
@exaskye
exaskye / org.dimdev.rift.json
Last active February 7, 2025 01:21
MultiMC Rift 1.13.2 JSON that works in 2025
{
"+tweakers": [
"org.dimdev.riftloader.launch.RiftLoaderClientTweaker"
],
"formatVersion": 1,
"+libraries": [
{
"name": "com.github.unascribed:Rift:FINAL",
"url": "https://jitpack.io/"
},
@exaskye
exaskye / BOTS.md
Last active January 25, 2024 14:25

Sleeping Town Bot Policy

Bot accounts are welcmoe, provided they follow these rules:

  1. All Markov bots or other generative bots that may output nonsense must always post unlisted, or with a CW.
  2. If a bot will post public posts, it must not post any more frequently than once an hour and must be clearly marked as a bot in its display name.
  3. Bots must never mention other users unless the mentioned user has initiated it. For such user-initiated posts, any rate limits may be ignored.
  4. The bot's operator must be included in its description or a pinned post.
  5. Top-level unlisted or followers-only posts must not be made any more frequently than every 15 minutes.
    • Exception: Now-playing or scrobble bots may post as frequently as once a minute.
  6. If a bot incorporates data from posts made by another user that are not directed at the bot, the bot must be following that user.
/*
* To the extent possible under law, the author has dedicated all copyright
* and related and neighboring rights to this software to the public domain
* worldwide. This software is distributed without any warranty.
*
* See <http://creativecommons.org/publicdomain/zero/1.0/>
*/
package com.unascribed;
#!/bin/bash
if [[ "$1" == "-h" || "$1" == "-?" || "$1" == "--help" ]]; then
(
echo 'copycat: copy stdin or files specified on command line to Wayland and/or X clipboard'
echo 'performs automatic mimetype detection like wl-copy via file under X'
echo 'usage:'
echo ' copycat: copy stdin to clipboard'
echo ' copycat <-h|--help|-?>: display usage help'
echo ' copycat <files...>: concatenate each file, then copy to clipboard'
echo
package com.unascribed.chipper;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL43.*;
import static org.lwjgl.system.MemoryUtil.*;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;