Skip to main content

Use block features instead of block IDs! (for Minecraft shaderpacks)

Project description

Block Wrangler

A Python library to help Minecraft shader developers deal with block IDs.

It allows shader developers to define "flags" that block states can have, and the script will generate both a block.properties file and corresponding GLSL functions to allow those flags to be used directly in shaders.

It includes all Vanilla blocks and tags, as well as a few custom categories that are commonly used in shaders, and automatically enforces that numerical block IDs are both complete and mutually exclusive.

Installation

pip install block-wrangler

Usage

Below is a simple example of how to use the library. More complete documentation is coming soon.

from block_wrangler import *
from pathlib import Path


shaderpack_root = Path(__file__).parent

def main():
	tags = load_tags()

	mapping = BlockMapping.solve({
		'sway': EnumFlag({
			'upper': tags['sway/upper'],
			'lower': tags['sway/lower'],
			'hanging': tags['sway/hanging'],
			'floating': tags['sway/floating'],
			'full': tags['sway/full']
		}),
		'sway_slow': Flag(tags['sway/slow']),
		'crops': Flag(tags['minecraft:crops']), # Vanilla tags are included
		'water': Flag(blocks('minecraft:water')) # Individual blocks can also be referenced by name
	})

	with shaderpack_root.joinpath('shaders/block.properties').open('w') as f:
		f.write(mapping.render_encoder())
	with shaderpack_root.joinpath('shaders/util/block_properties.glsl').open('w') as f:
		f.write(mapping.render_decoder())
	
	print('Done!')

if __name__ == '__main__':
	main()

Core Concepts

The block_wrangler library uses a few main concepts:

Block Types

These represent the different types of blocks that can be found in Minecraft, and all of their properties.

Tags

Tags generate a semantically meaningful group of block states that can be used to define flags.
The library comes with all Vanilla tags, and a few more that are commonly used in shaders.

They can use other tags in their definitions, and their actual contents are calculated on demand.

Block Collections

These are a more concrete representation of a group of block states. Tags can create them, or you can define them manually.

Mappings

Mappings store the actual numeric IDs that go into your block.properties file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

block_wrangler-0.0.8.tar.gz (107.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

block_wrangler-0.0.8-py2.py3-none-any.whl (157.5 kB view details)

Uploaded Python 2Python 3

File details

Details for the file block_wrangler-0.0.8.tar.gz.

File metadata

  • Download URL: block_wrangler-0.0.8.tar.gz
  • Upload date:
  • Size: 107.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for block_wrangler-0.0.8.tar.gz
Algorithm Hash digest
SHA256 29936b3688f3f54d8f4ef8421d85e1517a862599401293bf01be1b8bd4cbfc60
MD5 fc9ac5c4ad302b824680cab51fa07228
BLAKE2b-256 afc01a7b029c01f54ed7d81d14a7e1709182592ec863dd418ce3c36b41366a2d

See more details on using hashes here.

File details

Details for the file block_wrangler-0.0.8-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for block_wrangler-0.0.8-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 ce1147fcf2c5ff9d228e103072c806bf2444d2d5c2081e64f1b5427f0efb270b
MD5 cc5293989abedcfe57437cd72749ab4b
BLAKE2b-256 d58984fdeb60171a380a66b040e74ccbdac8946597b9e97b5eb45a588ac28f30

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page