annotate getskin.py @ 127:fd2ea604dcf2 default tip

hg: clean up stupid subrepo crap
author Paper <paper@tflc.us>
date Tue, 25 Mar 2025 00:26:18 -0400
parents eac6dae753ca
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
44
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
1 # minecraft skin fetcher
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
2 # by Paper, 2021-07-13
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
3 # this only really exists as reference to a possible java implementation
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
4 # (for those beta versions of minecraft that don't support UUIDs)
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
5 # however, i do not have any java experience, like, at all
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
6 # so that'll be fun!
118
eac6dae753ca *: major cleanup
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents: 44
diff changeset
7 #
eac6dae753ca *: major cleanup
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents: 44
diff changeset
8 # update 2023-03-03: it was never written LOL
44
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
9
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
10 import argparse
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
11 import base64
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
12 import cv2
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
13 import json
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
14 import numpy
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
15 import urllib.request
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
16
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
17 def get_status_code(mcign):
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
18 return urllib.request.urlopen(f"https://api.mojang.com/users/profiles/minecraft/{mcign}").getcode()
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
19
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
20 # parse arguments
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
21 parser = argparse.ArgumentParser()
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
22 parser.add_argument('-c', '--crop', help='crops your skin to 64x32, for beta versions', action="store_true")
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
23 parser.add_argument('-u', '--username', help='minecraft in-game name')
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
24 args = parser.parse_args()
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
25
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
26 # parse username, probably unnecessarily long but idc
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
27 if args.username:
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
28 myname = args.username
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
29 try:
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
30 statuscode = get_status_code(myname)
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
31 except:
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
32 myname = input("What is your Minecraft username?: ")
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
33 statuscode = get_status_code(myname)
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
34 finally:
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
35 while statuscode == 204:
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
36 myname = input("What is your Minecraft username?: ")
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
37 statuscode = get_status_code(myname)
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
38
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
39 skinlink = json.loads(base64.b64decode(json.loads(urllib.request.urlopen(f'https://sessionserver.mojang.com/session/minecraft/profile/{json.loads(urllib.request.urlopen("https://api.mojang.com/users/profiles/minecraft/{0}".format(myname)).read().decode("utf-8"))["id"]}').read().decode("utf-8"))["properties"][0]["value"]).decode("utf-8"))["textures"]["SKIN"]["url"] # get your free long lines here!
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
40 skin = numpy.asarray(bytearray(urllib.request.urlopen(skinlink).read()), dtype="uint8")
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
41 skin = cv2.imdecode(skin, cv2.IMREAD_UNCHANGED)
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
42
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
43 # this is worthless if your skin is already 64x32
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
44 if args.crop:
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
45 skin = skin[0:32, 0:64]
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
46
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
47 # write the final skin
190ac0f669c6 Upload getskin.py
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
diff changeset
48 cv2.imwrite("skin.png", skin)