Coder Social home page Coder Social logo

misode / deepslate Goto Github PK

View Code? Open in Web Editor NEW
119.0 8.0 12.0 6.82 MB

Library for rendering and emulating parts of Minecraft

Home Page: https://misode.github.io/deepslate/

License: MIT License

TypeScript 98.12% JavaScript 0.91% Shell 0.03% CSS 0.09% MDX 0.85%
webgl minecraft nbt

deepslate's Introduction

Deepslate

Library for rendering and emulating parts of Minecraft

Install

npm install deepslate
<script src="https://unpkg.com/[email protected]"></script>

Quick Examples

Reading and writing binary NBT files

import { NbtFile, NbtString } from 'deepslate'

fetch('./example.nbt')
	.then(res => res.arrayBuffer())
	.then(data => {
		const file = NbtFile.read(new Uint8Array(data))
		file.root.set('Hello', new NbtString('World!'))
		const newData = file.write()
		console.log(newData)
	})

Rendering a structure

import { Structure, StructureRenderer } from 'deepslate'
import { mat4 } from 'gl-matrix'

const structure = new Structure([4, 3, 4])
structure.addBlock([0, 0, 3], "minecraft:stone")
structure.addBlock([0, 1, 3], "minecraft:cactus", { "age": "1" })

// Obtain the WebGL context of a canvas element
const gl = canvas.getContext('webgl')

// See the demo on how to create a resources object
const renderer = new StructureRenderer(gl, structure, resources)

const view = mat4.create()
mat4.translate(view, view, [0, 0, -5])

renderer.drawStructure(view)

A collection of examples showcasing the use cases of deepslate.

Rendering a simple structure to a canvas, read from an NBT file. Includes mouse controls and loading of an arbitrary resource pack.

image

image

image

image

image

deepslate's People

Contributors

casu-dev avatar dependabot[bot] avatar jacobsjo avatar jan00bl avatar misode avatar snavesutit avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

deepslate's Issues

Compatibility with blocks added by mods?

If supported at all, what should the workflow generally look like to ensure that most well-behaved blocks from an arbitrary mod can be e.g. rendered via the deepslate web renderer?

CDN import in browser

how do i make use of the api with cdn ? i cant seem to find the entry point, doc seems to be for node.

Culling not working correctly

Expected

When rendering two stone blocks next to each other, the touching side should get culled.

Result

Both stone blocks render all 6 sides.

Test

The structure I render:
grafik
What I see when flying into the bottom block with the camera
grafik

Inaccurate render on translucent blocks

I have a project where I would love to use the ItemRenderer, but when I was testing the rendering result with the Loot Table generator website, I felt that the rendering of translucent blocks is inaccurate.

Screenshot of the items in the game

Screenshot from https://misode.github.io/loot-table/

The Tinted Glass block and the Slime block are the most evident examples of this issue. I think that the render is missing a "shading" on the sides.

Here is a render from Blockbench.

(Left: with Shading | Right: without Shading)

Render partially fails on large amount of blocks

When adding a large number of blocks to a region I've noticed the render occasionally fail to render blocks.

Example here:
missing blocks

You can also see this effect if you just fill a large region (this is 17x26x19) with a single block type (e.g. stone).

missing blocks

It seems to be limited based on sub-regions, as different parts of the structure seem to be affected differently.

Is this an openGL issue, or could it be due due to using a limited size array to store blocks somewhere? (Testing it with different block types gives different results, so I would lean towards a limited number of geometries per region).

Sorry to keep being a pain. I made a very quick demo for loading litematic files based on the deepslate demo if that's of any interest to you, though it's just a quick hack really.

Standalone js?

Sorry if this is a bit of a nonsensical question, but I'm not very familiar with javascript and I don't really know how all the package management (well obviously that's node side, but how it gets translated to a final webpage) systems work.

Is it possible to get some sort of import-once-and-forget standalone js file (either local or remote)? The unpkg import works, but I can't work out how to do relative imports from it (i.e. get the individual sub-modules or whatever).

Sorry again for such a basic question (I should probably just bite the bullet and learn how node works). I was having a look at rollling my own javascript schematic loader/viewer but this looks much more sophisticated! Do you have any particular plans for it?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.