summaryrefslogtreecommitdiffstats
path: root/resource/extract.py
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2018-07-22 16:54:00 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2018-07-22 16:54:00 +0200
commit73a072c2ca7de4eed499e0642cab037b3f237bd9 (patch)
treecead1f749f57696d6eea1d55f8d511e515889990 /resource/extract.py
parentf3d65febf3fbdf22966e90424c7c2e063d694d7e (diff)
downloadMinedMap-73a072c2ca7de4eed499e0642cab037b3f237bd9.tar
MinedMap-73a072c2ca7de4eed499e0642cab037b3f237bd9.zip
Add block color generation tools for Minecraft 1.13
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)