summaryrefslogtreecommitdiffstats
path: root/resource/extract.py
diff options
context:
space:
mode:
Diffstat (limited to 'resource/extract.py')
-rwxr-xr-xresource/extract.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/resource/extract.py b/resource/extract.py
new file mode 100755
index 0000000..e867d10
--- /dev/null
+++ b/resource/extract.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python3
+
+import json
+import os
+import sys
+
+from PIL import Image
+
+
+if len(sys.argv) != 4:
+ sys.exit('Usage: extract.py <blocks.json> <asset directory> <colors.json>')
+
+def mean_color(texture):
+ path = os.path.join(sys.argv[2], texture + '.png')
+ im = Image.open(path)
+
+ data = im.convert('RGBA').getdata()
+ a = sum([a for (r, g, b, a) in data])
+ if a == 0:
+ return None
+
+ r = sum([r * a for (r, g, b, a) in data])
+ g = sum([g * a for (r, g, b, a) in data])
+ b = sum([b * a for (r, g, b, a) in data])
+ return {
+ 'r': r / a,
+ 'g': g / a,
+ 'b': b / a,
+ }
+
+
+with open(sys.argv[1]) as f:
+ blocks = json.load(f)
+
+output = {}
+
+for name, info in blocks.items():
+ id = 'minecraft:' + name
+
+ output[id] = {
+ 'color': {'r': 0, 'g': 0, 'b': 0},
+ 'opaque': False,
+ 'green': False,
+ 'blue': False,
+ }
+
+ if info is None:
+ continue
+
+ color = mean_color(info.get('texture', name))
+ if color:
+ output[id]['color'] = color
+ output[id]['opaque'] = True
+ output[id]['green'] = info.get('green', False)
+ output[id]['blue'] = info.get('blue', False)
+
+with open(sys.argv[3], 'w') as f:
+ json.dump(output, f)