Refactored the entire project

This commit is contained in:
unknown 2024-07-09 16:11:02 +08:00
parent ea71f3fc17
commit 8a5a62f8f9
586 changed files with 2464270 additions and 1778 deletions

292
app.js

File diff suppressed because one or more lines are too long

35
config.json Normal file
View File

@ -0,0 +1,35 @@
{
"serverList": {
"default": {
"host": "localhost",
"port": 0,
"isDefault": true,
"isFallback": true
},
"cloud": {
"host": "cloudegg.cloud",
"port": 25565
},
"hms": {
"host": "hmsj.online",
"port": 25565
},
"error": {
"host": "this_server_not_exist",
"port": 25565
}
},
"proxyOptions": {
"port": 25565,
"version": "1.16.3",
"online-mode": false,
"motd": "Minecraft Proxy in NodeJS"
},
"localServerOptions": {
"online-mode": false,
"encryption": true,
"host": "0.0.0.0",
"port": 25566,
"version": false
}
}

41
meowLog.js Normal file
View File

@ -0,0 +1,41 @@
// 保存原始的console方法
const originalLog = console.log;
const originalInfo = console.info;
const originalWarn = console.warn;
const originalError = console.error;
// 创建日期格式化对象
const dateFormatter = new Intl.DateTimeFormat('en-US', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false // 使用24小时制
});
// 格式化时间函数
function getFormattedTime() {
return `[${dateFormatter.format(new Date())}]`
}
// 重写console.log方法
console.log = function(...args) {
originalLog(`${getFormattedTime()}`, ...args)
}
// 重写console.info方法
console.info = function(...args) {
originalInfo(`${getFormattedTime()}`, ...args)
}
// 重写console.warn方法
console.warn = function(...args) {
originalWarn(`${getFormattedTime()}`, ...args)
}
// 重写console.error方法
console.error = function(...args) {
originalError(`${getFormattedTime()}`, ...args)
}

33
node_modules/.package-lock.json generated vendored
View File

@ -119,6 +119,22 @@
}
]
},
"node_modules/basic-minecraft-proxy": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/basic-minecraft-proxy/-/basic-minecraft-proxy-2.0.1.tgz",
"integrity": "sha512-bo2XkNlD8w8ZWsfXHmLdccl5VWJB52393l6AC3tNSVwYFGzB+s3T3HUKbw1dap5GglAmPL2lFq8Kthe3dJXczw==",
"dependencies": {
"minecraft-data": "^2.26.0",
"minecraft-protocol": "^1.5.1",
"node-rsa": "^0.4.2",
"queuejs": "^0.1.0"
}
},
"node_modules/basic-minecraft-proxy/node_modules/minecraft-data": {
"version": "2.221.0",
"resolved": "https://registry.npmjs.org/minecraft-data/-/minecraft-data-2.221.0.tgz",
"integrity": "sha512-0AhqzbIKb6WqPSF6qBevaPryeWOz545hLxt6q+gfJF8YIQX/YfkyX/nXWhl+pSIS2rTBcQ0RJkRCtTeRzQwHDA=="
},
"node_modules/buffer": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
@ -369,6 +385,18 @@
"resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz",
"integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw=="
},
"node_modules/loglevel": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.1.tgz",
"integrity": "sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==",
"engines": {
"node": ">= 0.6.0"
},
"funding": {
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/loglevel"
}
},
"node_modules/macaddress": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.5.3.tgz",
@ -632,6 +660,11 @@
"node": ">=6"
}
},
"node_modules/queuejs": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/queuejs/-/queuejs-0.1.0.tgz",
"integrity": "sha512-g8mggvO2VM7BwTuAsO4nTQH1yELd2XMt65CIuHCFUKhwJ1j8NG9Qk9jVpkQcbOkKnq+GHgB5MCzYN/T5f2cJIw=="
},
"node_modules/railroad-diagrams": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz",

3
node_modules/basic-minecraft-proxy/.eslintrc.json generated vendored Normal file
View File

@ -0,0 +1,3 @@
{
"extends": "standard"
}

21
node_modules/basic-minecraft-proxy/LICENSE generated vendored Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017 Dario Crosa
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

86
node_modules/basic-minecraft-proxy/README.md generated vendored Normal file
View File

@ -0,0 +1,86 @@
# node-minecraft-proxy
Simple Minecraft proxy written in Node.js using the node-minecraft-protocol library
- [node-minecraft-proxy](#node-minecraft-proxy)
- [Features](#features)
- [Installation](#installation)
- [Examples](#examples)
- [Creating a proxy](#creating-a-proxy)
- [Moving players from a server to another](#moving-players-from-a-server-to-another)
- [Documentation](#documentation)
## Features
- Connect to proxy
- Forward players to servers
- Change server
- Basic plugin support, see `./src/Plugins/ChatCommands.js` for an example
## Installation
`npm install basic-minecraft-proxy`
## Examples
See also `./examples/` for other examples
### Creating a proxy
This example shows how to create a new proxy and how to the options are passed.
```js
const McProxy = require('minecraft-proxy');
let localServerOptions = {
'port': '25578',
'version': '1.12.1',
'online-mode': false,
'motd': 'nodejs minecraft proxy'
}
let serverList = {
hub: {
host: 'localhost',
port: 25565,
isDefault: true,
isFallback: true
},
minigames: {
host: 'localhost',
port: 25566
}
}
// if you leave proxyOptions empty yo may as well not pass it in the arguments, I wrote it anyway to point out that it exist
let proxyOptions = {}
/*
Use the "/server <serverName>" command in chat to move between servers.
<serverName> is the name that you chose for the server inside the serverList
This command is implemented by /src/Plugins/ChatCommands.js and it can be disabled by setting enablePlugin: false inside proxyOptions
*/
let proxy = McProxy.createProxy(localServerOptions, serverList, proxyOptions);
proxy.on('error', console.error);
proxy.on('listening', () => {
console.info('Listening!');
});
```
### Moving players from a server to another
In this example every player will be moved from the `hub` server (default) to the `minigames` server 30 seconds after having logged in.
```js
proxy.on('login', (player) => {
setTimeout(() => {
proxy.setRemoteServer(player.id, "minigames");
}, 30 * 1000);
});
```
## Documentation
See the [wiki](https://github.com/7ixi0/node-minecraft-proxy/wiki).

View File

@ -0,0 +1,75 @@
const McProxy = require('../')
/*
CREATING PROXY
*/
let localServerOptions = {
'port': '25578',
'version': '1.12.1',
'online-mode': false,
'motd': 'nodejs minecraft proxy'
}
let serverList = {
hub: {
host: 'localhost',
port: 25565,
isDefault: true,
isFallback: true
},
minigames: {
host: 'localhost',
port: 25566
}
}
let proxyOptions = {
// enables the plugins stored in the /src/Plugins folder, for now the only plugin is the command handler plugin
enablePlugins: true
}
/*
Use the "/server <serverName>" command in chat to move between servers.
<serverName> is the name that you chose for the server inside the serverList
This command is implemented by /src/Plugins/ChatCommands.js and it can be disabled by setting enablePlugin: false inside proxyOptions
*/
let proxy = McProxy.createProxy(localServerOptions, serverList, proxyOptions)
/*
HANDLING EVENTS
*/
proxy.on('error', console.error)
proxy.on('listening', () => {
console.info('Listening!')
})
proxy.on('login', (player) => {
console.info(`${player.username} connected from ${player.socket.remoteAddress}`)
player.on('end', () => {
console.info(`${player.username} disconnected: ${player.socket.remoteAddress}`)
})
player.on('error', (err) => {
console.error(`${player.username} disconnected with error: ${player.socket.remoteAddress}`, err)
})
})
proxy.on('moveFailed', (err, playerId, oldServerName, newServerName) => {
console.error(`Player ${proxy.clients[playerId].username} failed to move from ${oldServerName} to ${newServerName}`, err)
})
proxy.on('playerMoving', (playerId, oldServerName, newServerName) => {
console.info(`Player ${proxy.clients[playerId].username} is moving from ${oldServerName} to ${newServerName}`)
})
proxy.on('playerMoved', (playerId, oldServerName, newServerName) => {
console.info(`Player ${proxy.clients[playerId].username} has moved from ${oldServerName} to ${newServerName}`)
})
proxy.on('playerFallback', (playerId, oldServerName, newServerName) => {
console.info(`Player ${proxy.clients[playerId].username} is falling back from ${oldServerName} to ${newServerName}`)
})

View File

@ -0,0 +1,55 @@
const McProxy = require('../')
/*
CREATING PROXY
*/
let localServerOptions = {
'port': '25578',
'version': '1.12.1',
'online-mode': false,
'motd': 'nodejs minecraft proxy'
}
let serverList = {
hub: {
host: 'localhost',
port: 25565,
isDefault: true,
isFallback: true
},
minigames: {
host: 'localhost',
port: 25566
}
}
let proxyOptions = {
// the proxy won't automatically connect players to the default server
autoConnect: false,
// the proxy won't automatically move players to the fallback server when they get kicked
autoFallback: false
}
/*
Use the "/server <serverName>" command in chat to move between servers.
<serverName> is the name that you chose for the server inside the serverList
This command is implemented by /src/Plugins/ChatCommands.js and it can be disabled by setting enablePlugin: false inside proxyOptions
*/
let proxy = McProxy.createProxy(localServerOptions, serverList, proxyOptions)
proxy.on('login', (client) => {
console.info('Player joined')
// when player joins connect him to a server manually
proxy.setRemoteServer(client.id, 'hub')
})
proxy.on('playerFallback', (remoteClientId, oldServerName, fallbackServerName) => {
console.info(`Fallback from ${oldServerName}`)
proxy.setRemoteServer(remoteClientId, fallbackServerName)
})
proxy.on('listening', () => {
console.info('listening!')
})

2
node_modules/basic-minecraft-proxy/index.js generated vendored Normal file
View File

@ -0,0 +1,2 @@
module.exports.Proxy = require('./src/Proxy.js')
module.exports.createProxy = require('./src/createProxy.js')

View File

@ -0,0 +1,11 @@
version: 2
updates:
- package-ecosystem: npm
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 10
ignore:
- dependency-name: "@types/node"
versions:
- 15.0.0

View File

@ -0,0 +1,32 @@
name: CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x]
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm test
- name: Upload index.d.ts
if: always()
uses: actions/upload-artifact@v3.0.0
with:
path: index.d.ts

View File

@ -0,0 +1,38 @@
name: Minecraft Data release
on:
repository_dispatch:
types: [mcData-release]
jobs:
update-mcdata:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Update minecraft data
run: 'cd minecraft-data/ && git fetch --all --tags && git checkout ${{ github.event.client_payload.tag }}'
- name: Update package.json
run: >
sed -i -E 's/^ "version": "[0-9]+\.[0-9]+\.[0-9]+"/ "version": "${{ github.event.client_payload.tag }}"/g' package.json
- name: Update doc/history.md
run: echo -e "## ${{ github.event.client_payload.tag }}\n* update mcdata\n\n$(cat doc/history.md)" > doc/history.md
- name: Create commits
run: |
git config user.name 'rom1504bot'
git config user.email 'rom1504bot@users.noreply.github.com'
git add minecraft-data
git commit -m "Update Minecraft Data"
git add package.json doc/history.md
git commit -m "Release ${{ github.event.client_payload.tag }}"
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
token: ${{ secrets.PAT_PASSWORD }}
committer: rom1504bot <rom1504bot@users.noreply.github.com>
author: rom1504bot <rom1504bot@users.noreply.github.com>
signoff: false
branch: release-${{ github.event.client_payload.tag }}
delete-branch: true
title: 'Release ${{ github.event.client_payload.tag }}'
body: |
A new version of minecraft-data was released.

View File

@ -0,0 +1,42 @@
name: npm-publish
on:
push:
branches:
- master # Change this to your default branch
workflow_dispatch:
jobs:
npm-publish:
name: npm-publish
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@master
with:
submodules: true
- name: Set up Node.js
uses: actions/setup-node@master
with:
node-version: 10.0.0
- run: npm install
- name: Publish if version has been updated
if: github.event_name != 'workflow_dispatch'
uses: pascalgn/npm-publish-action@4f4bf159e299f65d21cd1cbd96fc5d53228036df
with: # All of theses inputs are optional
tag_name: "%s"
tag_message: "%s"
commit_pattern: "^Release (\\S+)"
env: # More info about the environment variables in the README
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Leave this as is, it's automatically generated
NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} # You need to set this in your repo settings
- name: Check if version has been updated
if: github.event_name != 'workflow_dispatch'
id: check
uses: EndBug/version-check@v1
- name: "Trigger new GH Page creation in mcData repo"
uses: peter-evans/repository-dispatch@v1
if: steps.check.outputs.changed == 'true' || github.event_name == 'workflow_dispatch'
with:
token: ${{ secrets.PAT_PASSWORD }}
repository: PrismarineJS/minecraft-data
event-type: node-mcData-release

View File

@ -0,0 +1,17 @@
name: 'trigger'
on:
workflow_dispatch:
inputs:
tag:
description: 'Tag of the release'
required: true
default: '2.75.0'
jobs:
tag:
runs-on: ubuntu-latest
steps:
- uses: peter-evans/repository-dispatch@v1
with:
token: ${{ secrets.PAT_PASSWORD }}
event-type: mcData-release
client-payload: '{"tag": "${{ github.event.inputs.tag }}"}'

View File

@ -0,0 +1,3 @@
[submodule "minecraft-data"]
path = minecraft-data
url = https://github.com/PrismarineJS/minecraft-data.git

View File

@ -0,0 +1,2 @@
tasks:
- command: npm install

View File

@ -0,0 +1,34 @@
# node-minecraft-data
[![NPM version](https://badge.fury.io/js/minecraft-data.svg)](http://badge.fury.io/js/minecraft-data)
[![Tonic](https://img.shields.io/badge/tonic-try%20it-blue.svg)](https://tonicdev.com/npm/minecraft-data)
[![Build Status](https://github.com/PrismarineJS/node-minecraft-data/workflows/CI/badge.svg)](https://github.com/PrismarineJS/node-minecraft-data/actions?query=workflow%3A%22CI%22)
[![Try it on gitpod](https://img.shields.io/badge/try-on%20gitpod-brightgreen.svg)](https://gitpod.io/#https://github.com/PrismarineJS/node-minecraft-data)
node-minecraft-data provides easy access to [minecraft-data](https://github.com/PrismarineJS/minecraft-data) in node.js.
The objective of this module is to make easier to look for information in minecraft-data in node.
## Features
For example it's often useful to :
* find blocks by id
* find items by name
* find block or item by name
* find block or item by id
## Example
```js
const mcData=require("minecraft-data")("1.8.8")
console.log(mcData.blocksByName["stone"])
console.log(mcData.windows["minecraft:brewing_stand"])
console.log(mcData.version)
console.log(mcData.effectsByName["Haste"])
```
## Documentation
* See [doc/api.md](doc/api.md)
* See [doc/history.md](doc/history.md)

View File

@ -0,0 +1,35 @@
#!/usr/bin/env node
const dataSource = require('../minecraft-data/data/dataPaths')
const fs = require('fs')
const path = require('path')
const data = 'module.exports =\n{\n' + Object
.keys(dataSource)
.map(k1 =>
" '" + k1 + "': {\n" + Object
.keys(dataSource[k1])
.map(k2 =>
" '" + k2 + "': {" + '\n' + Object
.keys(dataSource[k1][k2])
.map(k3 => {
const loc = `minecraft-data/data/${dataSource[k1][k2][k3]}/`
try {
// Check if the file can be loaded as JSON
require('../' + loc + k3 + '.json')
return ` get ${k3} () { return require("./${loc}${k3}.json") }`
} catch {
// No ? Return it as a URL path so other code can decide how to handle it
const file = fs.readdirSync(path.join(__dirname, '../', loc)).find(f => f.startsWith(k3 + '.'))
if (file) { return ` ${k3}: __dirname + '/${loc}${file}'` } else { throw Error('file not found: ' + loc + k3) }
}
})
.join(',\n') +
'\n }'
)
.join(',\n') +
'\n }'
)
.join(',\n') + '\n}\n'
fs.writeFileSync(path.join(__dirname, '/../data.js'), data)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,364 @@
# API
## Blocks
### minecraft-data.blocks
blocks indexed by id
### minecraft-data.blocksByName
blocks indexed by name
### minecraft-data.blocksArray
unindexed blocks
### minecraft-data.blocksByStateId
blocks indexed by state id
### minecraft-data.blockCollisionShapes
block collision shapes
## Items
### minecraft-data.items
items indexed by id
### minecraft-data.itemsByName
items indexed by name
### minecraft-data.itemsArray
unindexed items
## Foods
### minecraft-data.foods
foods indexed by id
### minecraft-data.foodsByName
foods indexed by name
### minecraft-data.foodsByFoodPoints
foods indexed by food points
### minecraft-data.foodsBySaturation
foods indexed by saturation
### minecraft-data.foodsArray
unindexed foods
## Biomes
### minecraft-data.biomes
biomes indexed by id
### minecraft-data.biomesArray
unindexed biomes
### minecraft-data.biomesByName
biomes object indexed by name
## Recipes
### minecraft-data.recipes
recipes indexed by id
## Instruments
### minecraft-data.instruments
instruments indexed by id
### minecraft-data.instrumentsArray
unindexed instruments
## Materials
### minecraft-data.materials
materials indexed by name
## Entities
### minecraft-data.mobs
mobs indexed by id
### minecraft-data.objects
objects indexed by id
### minecraft-data.entitiesByName
entities indexed by name
### minecraft-data.entitiesArray
unindexed entities
## Enchantments
### minecraft-data.enchantments
enchantments indexed by id
### minecraft-data.enchantmentsByName
enchantments indexed by name
### minecraft-data.enchantmentsArray
unindexed enchantments
### minecraft-data.defaultSkin
(bedrock edition) Skin geometry and texture data for default player skin
## Protocol
### minecraft-data.protocol
the minecraft protocol
### minecraft-data.protocolComments
the minecraft protocol comments
## Windows
### minecraft-data.windows
windows indexed by id
### minecraft-data.windowsByName
windows indexed by name
### minecraft-data.windowsArray
unindexed windows
## Version
### minecraft-data.version.version
the version number (example : 47)
### minecraft-data.version.minecraftVersion
the minecraft number (example : 1.8.3)
### minecraft-data.version.type
the version type, currently 'pc' or 'bedrock'
### minecraft-data.version.majorVersion
the major version (example : 1.8), also the name of the minecraft-data version
### minecraft-data.version.dataVersion
"Data version" for this Minecraft version, used for example when writing chunks to disk
### minecraft-data.version.< (other)
Returns true if the current version is less than than the `other` version's dataVersion
### minecraft-data.version.> (other)
Returns true if the current version is greater than the `other` version's dataVersion
### minecraft-data.version.== (other)
Returns true if the current version is equal to the `other` version's dataVersion
### minecraft-data.version.>=, minecraft-data.version.<=
Same as above but also allows equal dataVersion. The other version must be of the same type, the prefix is always implied.
Example Usage:
```js
const mcd = require('minecraft-data')('1.16.4')
console.log('1.16.4 >= 1.17 ?', mcd.version['>=']('1.17')) // False
const mcd = require('minecraft-data')('bedrock_1.17.0')
console.log('1.17.0 > 1.16.220 ?', mcd.version['>']('1.16.220')) // True
```
## Effects
### minecraft-data.effects
effects indexed by id
### minecraft-data.effectsByName
effects indexed by name
### minecraft-data.effectsArray
unindexed effects
## Attributes
### minecraft-data.attributes
attributes indexed by resource name (generic.movementSpeed || minecraft:generic.movement_speed)
### minecraft-data.attributesByName
attributes indexed by minecraft-data name (movementSpeed)
### minecraft-data.attributesArray
unindexed attributes
## Particles
### minecraft-data.particles
particles indexed by id
### minecraft-data.particlesByName
particles indexed by name
### minecraft-data.particlesArray
unindexed particles
## Commands
### minecraft-data.commands
Command tree
## Loot
### minecraft-data.entityLoot
entity loot indexed by name
### minecraft-data.entityLootArray
unindexed entity loot
### minecraft-data.blockLoot
block loot indexed by name
### minecraft-data.blockLootArray
unindexed block loot
## Map icons
### minecraft-data.mapIcons
mapIcons indexed by id
### minecraft-data.mapIconsByName
mapIcons indexed by name
### minecraft-data.mapIconsArray
unindexed mapIcons
## type
pe or pc
## minecraft-data.language
object from language key to string
## minecraft-data.loginPacket
example of login packet
## Protocol versions
Those are common data and directly available in the `require('minecraft-data')` object.
No need to specify a version before accessing them. They are indexed by pc and pe.
### minecraft-data.versions
unindexed minecraft versions
### minecraft-data.versionsByMinecraftVersion
minecraft versions indexed by minecraft version (example : 1.8.8)
### minecraft-data.preNettyVersionsByProtocolVersion
pre netty minecraft versions indexed by protocol version (example : 47)
### minecraft-data.postNettyVersionsByProtocolVersion
post netty minecraft versions indexed by protocol version (example : 47)
### minecraft-data.supportedVersions.pc
Array of pc supported versions
### minecraft-data.supportedVersions.pe
Array of pe supported versions
### minecraft-data.legacy.pc.blocks
Mapping from 1.12 block:metadata to 1.13 block names
examples 0:0 -> minecraft:air
### minecraft-data.supportFeature(featureName) : Boolean
This can be used to check is a specific feature is available in the current Minecraft version. This is usually only required for handling version-specific functionality.
## Schemas
### minecraft-data.schemas.biomes
### minecraft-data.schemas.blocks
### minecraft-data.schemas.blockLoot
### minecraft-data.schemas.effects
### minecraft-data.schemas.entities
### minecraft-data.schemas.entityLoot
### minecraft-data.schemas.instruments
### minecraft-data.schemas.items
### minecraft-data.schemas.materials
### minecraft-data.schemas.particles
### minecraft-data.schemas.protocol
### minecraft-data.schemas.protocolVersions
### minecraft-data.schemas.recipes
### minecraft-data.schemas.version
### minecraft-data.schemas.windows

View File

@ -0,0 +1,643 @@
## 2.221.0
* update mcdata
## 2.220.0
* update mcdata
## 2.119.1
* Alias versions that end in .0 to a version without the ending .0
## 2.119.0
* update mcdata
## 2.118.0
* update mcdata
## 2.117.1
* Add support for custom supportFeature return type
## 2.117.0
* update mcdata
## 2.116.0
* update mcdata
## 2.115.2
* Add supportFeature support
## 2.115.1
* update mcdata
## 2.114.1
* update mcdata
## 2.114.0
* update mcdata
## 2.113.3
* update mcdata
## 2.113.2
* update mcdata
## 2.113.1
* update mcdata
## 2.113.1
* Add block state IDs to all versions with block data
## 2.113.0
* update mcdata
## 2.112.0
* update mcdata
## 2.111.0
* update mcdata
## 2.110.0
* update mcdata
## 2.109.0
* update mcdata
## 2.108.0
* update mcdata
## 2.107.0
* update mcdata
## 2.106.0
* update mcdata
## 2.105.0
* update mcdata
## 2.104.0
* update mcdata
## 2.103.0
* update mcdata
## 2.102.0
* update mcdata
## 2.101.0
* update mcdata
## 2.100.1
* add attribute support (@U5B)
*
## 2.100.0
* update mcdata
## 2.99.3
* update mcdata
## 2.99.2
* update mcdata
## 2.99.1
* update mcdata
## 2.99.0
* update mcdata
## 2.98.1
* update mcdata
## 2.98.0
* update mcdata
## 2.97.0
* update mcdata
## 2.96.0
* update mcdata
## 2.95.0
* update mcdata
## 2.94.0
* update mcdata
## 2.93.1
* Update bedrock item and version handling (@extremeheat)
## 2.93.0
* update mcdata
## 2.92.1
* fix generate by not using pathToFileURL
## 2.92.0
* update mcdata
* try dynamic require one more time
## 2.91.1
* add back node 12 support (@u9g)
## 2.91.0
* update mcdata
## 2.90.0
* update mcdata
## 2.89.4
* Non-exclusively prefer release versions over snapshots
## 2.89.3
* Do not use snapshots when determining version
## 2.89.2
* update mcdata and bedrock support
## 2.88.0
* update mcdata
## 2.87.0
* update mcdata
## 2.86.0
* update mcdata
## 2.85.3
* update mcdata
## 2.85.2
* update mcdata
## 2.85.1
* update mcdata
## 2.85.0
* update mcdata
## 2.84.0
* update mcdata
* add legacy to API
## 2.83.1
* update mcdata
## 2.83.0
* update mcdata
## 2.82.2
* update mcdata
## 2.82.1
* update mcdata
## 2.81.0
* update mcdata
## 2.80.0
* update mcdata
## 2.79.0
* update mcdata
## 2.78.0
* update mcdata
## 2.77.0
* update mcdata
## 2.76.0
* update mcdata
## 2.75.0
* update mcdata
## 2.74.0
* update mcdata, add biomesByName
## 2.73.1
* update mcdata, add 1.16.5 to datapaths
## 2.73.0
* update mcdata, new enchantment data
## 2.72.0
* update mcdata, fixed recipes
## 2.71.0
* add map icons
## 2.70.2
* fix release
## 2.70.1
* update mcdata, fix states in block.json
## 2.70.0
* mcdata to 2.70.0 1.16.4 support
## 2.69.1
* revert load only necessary data (for now)
## 2.69.0
* expose login packet
## 2.68.1
* load only necessary data (thanks @TheDudeFromCI)
* update mcdata: 1.16.3
* add commands
## 2.67.0
* update to mcdata 2.67.0 : loottable + enchantments fix
## 2.65.0
* update to mcdata 2.65.0 : 1.16.2 protocol support
* add particle support
## 2.63.0
* update to mcdata 2.63.0
## 2.62.1
* food data (thanks @AppDevMichael)
## 2.61.0
* correct block states + default state
## 2.60.0
* full 1.16 support
## 2.59.0
* 1.16.1 protocol support
## 2.58.0
* 1.16 support
## 2.57.0
* fix abilities and recipes packets for 1.16-rc1
## 2.56.0
* 1.16-rc1 protocol support
## 2.55.0
* entity metadata type is a varint since 1.13
## 2.54.0
* update mcdata to 2.54.0 : better items
## 2.53.0
* update mcdata to 2.53.0 : better support for 1.14 and 1.15
## 2.52.0
* update mcdata to 2.52.0 : better block shapes
* expose block shapes
## 2.51.0
* update mcdata to 2.51.0 : more 1.15.2 data
## 2.50.0
* update mcdata to 2.50.0 : protocol fix + more 1.14.4 data
## 2.49.0
* update mcdata to 2.49.0 : 1.14.4 block fix + loading test in nmd
## 2.48.0
* update mcdata to 2.48.0 : fix for bounding boxes and entity categories
## 2.47.0
* mcdata 2.47.0 : add biomes, blocks, entities, items and recipes for 1.14.4
## 2.46.0
* mcdata 2.46.0 : fix entities for 1.13
## 2.45.0
* mcdata 2.45.0 : last 1.16 snapshot support + fix for glass for 1.13
## 2.44.0
* mcdata 2.44.0 : small fix to success packet for 20w13b
## 2.43.0
* mcdata 2.43.0 : 20w13b snapshot support (1.16 major)
## 2.42.0
* mcdata 2.42.0 : 1.15.2 protocol support
## 2.41.0
* mcdata 2.41.0 : 1.15 protocol support
## 2.40.0
* mcdata 2.40.0 : 1.15.1 protocol support
## 2.39.0
* mcdata 2.39.0 : 1.14.4 support
## 2.38.0
* mcdata 2.38.0 : 1.14.3 support
## 2.37.5
* mcdata 2.37.5 : fix intfield -> objectData in spawn_entity in all versions > 1.8
## 2.37.4
* mcdata 2.37.4 : 1.14 protocol
## 2.37.3
* mcdata 2.37.3 : fix stonecutting in declare_recipes 1.14.1 : only one ingredient
## 2.37.2
* mcdata 2.37.2 : u32 -> i32 in 1.14
## 2.37.1
* mcdata 2.37.1 : add missing version file for 1.14.1 and 1.14
## 2.37.0
* mc data 2.37.0 : minecraft 1.14 support
## 2.36.0
* fix teams in 1.13
## 2.35.1
* make standard a devDependencies
## 2.35.0
* update mcdata to 2.35.0 and add blocksByStateId to API
## 2.34.0
* update mcdata to 2.34.0 : bring 1.13.2 support
## 2.33.0
* update to mcdata 2.33.0 : fix version definition for 1.13.2-pre1
## 2.32.0
* update mcdata to 2.32.0 : bring 1.13.2-pre1 support
## 2.31.0
* update mcdata to 2.31.0 : fix 1.13.1 datapath
## 2.30.0
* Update to mcdata 2.30.0 + bring typescript support
## 2.29.0
* Update to mcdata 2.29.0 : bring full 1.13 support
## 2.28.0
* update mcdata to 2.28.0 : support mc protocol 1.13.1
## 2.27.0
* update mcdata to 2.27.0 : bring minecraft 1.13 protocol support
## 2.26.0
* update mcdata to 2.25.0 : fix packet_title
## 2.25.0
* fix brigadier:string parser properties
## 2.24.0
* update mcdata to 2.23.0, some fixes for 17w50a protocol
## 2.23.0
* find the most recent minor version from major version when needed
## 2.22.0
* bump mcdata to 2.22.0, mcpc 17w50a support
## 2.21.0
* bump mcdata to 2.21.0, mcpc 1.12.2 support
## 2.20.0
* bump mcdata to 2.20.0, mcpc 1.12.1 support
## 2.19.0
* add language to api, update mcdata to 2.19.0
## 2.18.0
* update to mcdata 2.18.0, better supports mcpc 1.12
## 2.17.0
* update to mcdata 2.17.0, supports mcpc 1.12
## 2.16.0
* update mcdata to 2.16.0 ,supports 1.12-pre4
## 2.15.0
* update to mcdata 2.15.0, supports pc 17w18b
## 2.14.0
* update to mcdata 2.14.0
* supports mc 17w15a
## 2.13.4
* update mcdata
## 2.13.3
* update mcdata
## 2.13.2
* add npmignore (for data.js)
## 2.13.1
* update mcdata
## 2.13.0
* add protocol comments
q
## 2.12.1
* remove protocol schema (moved to protodef)
## 2.12.0
* use minecraft data 2.10.0, complete 1.11 data
## 2.11.0
* update to mcdate 2.9.0, bring mcpc 1.11.2 support
## 2.10.0
* update mcdata to 2.8.0, add mcpe 1.0
## 2.9.0
* update mcdata to 2.7.0 : add 1.11 support (only the protocol)
## 2.8.0
* classic blocks
* update to mcdata 2.6.0
## 2.7.0
* update mcdata to 2.5.0, add enchantments to api, add 16w35a (first 1.11 snapshot)
## 2.6.0
* update mcdata to 2.4.0, add mcpc 1.10.1 and 1.10.2 support, add mcpe 0.15 support
## 2.5.1
* update mcdata, fix 1.10 version
## 2.5.0
* update mcdata to 2.3.0, add 1.10 support
## 2.4.0
* update to mcdata 2.2.0, add pe protocol
## 2.3.0
* update minecraft-data to 2.1.0, add pc 1.10-pre1 support
## 2.2.0
* add type (pe or pc) to API
## 2.1.0
* use blocks of pc 1.8 for pe 0.14
## 2.0.0
* update to minecraft-data to 2.0.0, adapt to handle both pc and pe
* the api of versionsByMinecraftVersion changed : now indexed by pc and pe : BREAKING CHANGE
## 1.6.0
* update minecraft-data to 1.1.0, add 16w20a support (1.1.0)
## 1.5.0
* update minecraft-data to 1.0.0, add 1.9.4 support
## 1.4.1
* actually add 1.9.2 support
## 1.4.0
* update mcdata : 1.9.2 support
## 1.3.1
* fix release (submodule)
## 1.3.0
* export schemas
## 1.2.6
* update mcdata : add 1.9.1-pre2
## 1.2.5
* update mcdata : fix in 1.9 protocol
## 1.2.4
* i8 not byte
## 1.2.3
* a few fixes in 1.9 protocol
## 1.2.2
* update mcdata : 1.9 release
## 1.2.1
* update minecraft-data : update blocks, items and recipes in 1.9, and fix a small error in 1.9 protocol
## 1.2.0
* update 1.9 protocol to 1.9-pre4
## 1.1.0
* update mcdata : protocol schema change, add classic
## 1.0.3
* update mcdata : 1.9 protocol fix
## 1.0.2
* forgot a short in 1.7 protocol
## 1.0.1
* update mcdata : fix short in 1.7 protocol
## 1.0.0
* update minecraft data, protocol.json has new numerical type names
## 0.20.4
* update minecraft-data : 1.7 plugin channel data buffers are length-prefixed
## 0.20.3
* update mcdata : fix in 1.7 protocol
## 0.20.2
* update minecraft-data : a fix in the key of 1.7 protocol
## 0.20.1
* fix release
## 0.20.0
* 1.9 updated to 16w05b
* 15w40b support kept
* 1.7 support added
* add transparency and light data in blocks
## 0.19.1
* fix release (missing submodule)
## 0.19.0
* move protocol data to top level
* expose preNettyVersionsByProtocolVersion and postNettyVersionsByProtocolVersion
* use it for a better resolution of the "major" version
## 0.18.0
* add protocol versions
## 0.17.0
* some windows fixing
* update entities : now mobs and objects
## 0.16.3
* use require-self to use require('minecraft-data') in example and make tonicdev actually work
## 0.16.2
* Usage -> Example, for tonicdev integration
## 0.16.1
* update mcData : improvement in the protocol for slot, optionalNbt and nbt
## 0.16.0
* add effects
## 0.15.0
* make node-minecraft-data browserify compatible
## 0.14.0
* move to new minecraft-data organization: master branch containing all the versions instead of one branch per version
## 0.13.0
* minecraft-data 1.9 to 15w40b + 76
## 0.12.0
* update minecraft-data : update 1.8 version to 1.8.8, update 1.9 version to 15w39c
## 0.11.0
* update minecraft-data : in protocol.json the context is now implemented with ../ instead of this.
## 0.10.0
* add version to the API
## 0.9.0
* update minecraft-data : windows and protocol updates
## 0.8.1
* actually update protocol.json
## 0.8.0
* update protocol.json
* add windows
## 0.7.0
* update protocol.json : condition becomes switch
## 0.6.0
* update protocol.json in 1.8 and 1.9 : the schema is now better for types (see minecraft-data for more details)
## 0.5.2
* update README and example : the package is now called minecraft-data in npm
## 0.5.1
* fix bug with fs.existsSync
* fix npm badge in readme
## 0.5.0
* bumping a few versions because package now published as minecraft-data
* add multi-version support
* add protocol.json access
## 0.2.0
* add unindexed version of blocks, items, biomes, instruments and entities
## 0.1.2
* fix bug in indexes
## 0.1.1
* fix bug in find functions
## 0.1.0
* provide : id-indexed data, name-indexed data and two functions to find items or blocks

View File

@ -0,0 +1,54 @@
const mcData = require('minecraft-data')('1.8.8')
console.log(mcData.blocksByName.stone)
console.log(mcData.windows['minecraft:brewing_stand'])
console.log(mcData.version)
console.log(mcData.effectsByName.Haste)
console.log(mcData.mobs[62])
console.log(mcData.objects[62])
console.log(require('minecraft-data').versionsByMinecraftVersion.pc['1.8.8'])
console.log(require('minecraft-data').versionsByMinecraftVersion.pc['15w40b'])
console.log(require('minecraft-data').preNettyVersionsByProtocolVersion.pc[47])
console.log(require('minecraft-data').postNettyVersionsByProtocolVersion.pc[47][0])
console.log(require('minecraft-data')(47).version)
console.log(require('minecraft-data')('1.8').version)
console.log(require('minecraft-data')('15w40b').version)
console.log(require('minecraft-data')('0.30c').version)
console.log(require('minecraft-data')('bedrock_0.14').version)
console.log(require('minecraft-data')('pc_1.9').blocksByName.dirt)
console.log(require('minecraft-data')('bedrock_0.14').blocksByName.podzol)
console.log(require('minecraft-data')('bedrock_0.14').type)
console.log(require('minecraft-data')('1.8').enchantments[5])
console.log(require('minecraft-data').supportedVersions.pc)
console.log(require('minecraft-data')('1.12').language['options.sensitivity.max'])
console.log(require('minecraft-data')('1.13.2').blocksByStateId[3381])
console.log(require('minecraft-data')('1.13.2').particles[2])
console.log(require('minecraft-data')('1.16.1').blockLoot.stone)
console.log(require('minecraft-data')('1.16.1').loginPacket)
console.log(require('minecraft-data')('1.16.4').mapIconsByName.player)
console.log(require('minecraft-data').legacy.pc.blocks['0:0'])
console.log(require('minecraft-data')('1.15.2').attributes['generic.movementSpeed'])
console.log(require('minecraft-data')('1.16').attributes['minecraft:generic.movement_speed'])
console.log(require('minecraft-data')('1.15.2').attributesByName.movementSpeed)
console.log(require('minecraft-data')('1.16').attributesByName.movementSpeed)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,133 @@
const mcDataToNode = require('./lib/loader')
const supportFeature = require('./lib/supportsFeature')
const indexer = require('./lib/indexer.js')
const protocolVersions = {
pc: require('./minecraft-data/data/pc/common/protocolVersions.json'),
bedrock: require('./minecraft-data/data/bedrock/common/protocolVersions.json')
}
const versionsByMinecraftVersion = {}
const versionsByMajorVersion = {}
const preNettyVersionsByProtocolVersion = {}
const postNettyVersionsByProtocolVersion = {}
const types = ['pc', 'bedrock']
types.forEach(function (type) {
for (let i = 0; i < protocolVersions[type].length; i++) {
if (!protocolVersions[type][i].dataVersion) {
// We start top to bottom, so the ones at the bottom should be lower
protocolVersions[type][i].dataVersion = -i
}
}
versionsByMinecraftVersion[type] = indexer.buildIndexFromArray(protocolVersions[type], 'minecraftVersion')
versionsByMajorVersion[type] = indexer.buildIndexFromArray(protocolVersions[type].slice().reverse(), 'majorVersion')
preNettyVersionsByProtocolVersion[type] = indexer.buildIndexFromArrayNonUnique(protocolVersions[type].filter(function (e) { return !e.usesNetty }), 'version')
postNettyVersionsByProtocolVersion[type] = indexer.buildIndexFromArrayNonUnique(protocolVersions[type].filter(function (e) { return e.usesNetty }), 'version')
})
function Version (type, version, majorVersion) {
const versions = versionsByMinecraftVersion[type]
// Allows comparisons against majorVersion even if `other` is not present in the versions.json (e.g. 1.17.0 exists but not 1.17)
for (const majorMinorPatchVersion in versions) {
const versionObj = versions[majorMinorPatchVersion]
// 1.17.0 === 1.17, so let's add explicit logic for that
if (versionObj.minecraftVersion.endsWith('.0')) {
versions[versionObj.majorVersion] = versionObj
}
}
this.dataVersion = versions[version]?.dataVersion
// TODO: Data for Minecraft classic is missing in protocolVersions.json, move this to its own type ?
const v1 = this.dataVersion ?? 0
const raise = other => { throw new RangeError(`Version '${other}' not found in [${Object.keys(versions).join(' ; ')}] for ${type}`) }
this['>='] = other => versions[other] ? v1 >= versions[other].dataVersion : raise(other)
this['>'] = other => versions[other] ? v1 > versions[other].dataVersion : raise(other)
this['<'] = other => versions[other] ? v1 < versions[other].dataVersion : raise(other)
this['<='] = other => versions[other] ? v1 <= versions[other].dataVersion : raise(other)
this['=='] = other => versions[other] ? v1 === versions[other].dataVersion : raise(other)
this.type = type
this.majorVersion = majorVersion
return this
}
const cache = {} // prevent reindexing when requiring multiple time the same version
module.exports = function (mcVersion, preNetty) {
preNetty = preNetty || false
mcVersion = String(mcVersion).replace('pe_', 'bedrock_')
const majorVersion = toMajor(mcVersion, preNetty)
if (majorVersion == null) { return null }
const cachedName = `${majorVersion.type}_${majorVersion.majorVersion}_${majorVersion.dataVersion}`
if (cache[cachedName]) { return cache[cachedName] }
const mcData = data[majorVersion.type][majorVersion.majorVersion]
if (mcData == null) { return null }
const nmcData = mcDataToNode(mcData)
nmcData.type = majorVersion.type
nmcData.isNewerOrEqualTo = version => nmcData.version['>='](version)
nmcData.isOlderThan = version => nmcData.version['<'](version)
nmcData.version = Object.assign(majorVersion, nmcData.version)
cache[cachedName] = nmcData
nmcData.supportFeature = feature => supportFeature(feature, nmcData.version)
return nmcData
}
module.exports.Version = Version
// adapt the version, most often doesn't convert to major version, can even convert to minor version when possible
function toMajor (mcVersion, preNetty, typeArg) {
const parts = (mcVersion + '').split('_')
const type = typeArg || (parts.length === 2 ? parts[0] : 'pc')
const version = parts.length === 2 ? parts[1] : mcVersion
let majorVersion
if (data[type][version]) {
majorVersion = version
} else if (versionsByMinecraftVersion[type][version]) {
majorVersion = versionsByMinecraftVersion[type][version].majorVersion
} else if (preNetty && preNettyVersionsByProtocolVersion[type][version]) {
return toMajor(preNettyVersionsByProtocolVersion[type][version][0].minecraftVersion, preNetty, type)
} else if (!preNetty && postNettyVersionsByProtocolVersion[type][version]) {
const versions = postNettyVersionsByProtocolVersion[type][version]
const noSnaps = versions.filter((el) => {
return !/[a-zA-Z]/g.test(el.minecraftVersion)
})
return toMajor(noSnaps[0] ? noSnaps[0].minecraftVersion : versions[0].minecraftVersion, preNetty, type)
} else if (versionsByMajorVersion[type][version]) {
majorVersion = versionsByMajorVersion[type][version].minecraftVersion
}
return new Version(type, version, majorVersion)
}
module.exports.supportedVersions = {
pc: require('./minecraft-data/data/pc/common/versions.json'),
bedrock: require('./minecraft-data/data/bedrock/common/versions.json')
}
module.exports.versions = protocolVersions
module.exports.versionsByMinecraftVersion = versionsByMinecraftVersion
module.exports.preNettyVersionsByProtocolVersion = preNettyVersionsByProtocolVersion
module.exports.postNettyVersionsByProtocolVersion = postNettyVersionsByProtocolVersion
module.exports.legacy = {
pc: require('./minecraft-data/data/pc/common/legacy.json')
}
const schemas = {
biomes: require('./minecraft-data/schemas/biomes_schema.json'),
blocks: require('./minecraft-data/schemas/blocks_schema.json'),
effects: require('./minecraft-data/schemas/effects_schema.json'),
commands: require('./minecraft-data/schemas/commands_schema.json'),
entities: require('./minecraft-data/schemas/entities_schema.json'),
enchantments: require('./minecraft-data/schemas/enchantments_schema.json'),
instruments: require('./minecraft-data/schemas/instruments_schema.json'),
items: require('./minecraft-data/schemas/items_schema.json'),
materials: require('./minecraft-data/schemas/materials_schema.json'),
protocolVersions: require('./minecraft-data/schemas/protocolVersions_schema.json'),
recipes: require('./minecraft-data/schemas/recipes_schema.json'),
version: require('./minecraft-data/schemas/version_schema.json'),
windows: require('./minecraft-data/schemas/windows_schema.json'),
foods: require('./minecraft-data/schemas/foods_schema.json'),
particles: require('./minecraft-data/schemas/particles_schema.json'),
mapIcons: require('./minecraft-data/schemas/mapIcons_schema.json')
}
module.exports.schemas = schemas
const data = require('./data.js')

View File

@ -0,0 +1,37 @@
module.exports = {
buildIndexFromObject:
function (object, fieldToIndex) {
if (object === undefined) { return undefined }
return Object.keys(object).reduce(function (index, key) {
index[object[key][fieldToIndex]] = object[key]
return index
}, {})
},
buildIndexFromArray:
function (array, fieldToIndex) {
if (array === undefined) { return undefined }
return array.reduce(function (index, element) {
index[element[fieldToIndex]] = element
return index
}, {})
},
buildIndexFromArrayNonUnique:
function (array, fieldToIndex) {
if (array === undefined) { return undefined }
return array.reduce(function (index, element) {
if (!index[element[fieldToIndex]]) { index[element[fieldToIndex]] = [] }
index[element[fieldToIndex]].push(element)
return index
}, {})
},
buildIndexFromArrayWithRanges:
function (array, fieldToIndexMin, fieldToIndexMax) {
if (array === undefined) { return undefined }
return array.reduce(function (index, element) {
for (let i = element[fieldToIndexMin]; i <= element[fieldToIndexMax]; i++) {
index[i] = element
}
return index
}, {})
}
}

View File

@ -0,0 +1,62 @@
const indexer = require('./indexer.js')
module.exports = function (mcData) {
if (mcData.blocks?.length) {
if (!('minStateId' in mcData.blocks[0]) || !('defaultState' in mcData.blocks[0])) {
for (const block of mcData.blocks) {
block.minStateId = block.id << 4
block.maxStateId = block.minStateId + 15
block.defaultState = block.minStateId
}
}
}
return {
biomesById: indexer.buildIndexFromArray(mcData.biomes, 'id'),
biomesByName: indexer.buildIndexFromArray(mcData.biomes, 'name'),
blocksById: indexer.buildIndexFromArray(mcData.blocks, 'id'),
blocksByName: indexer.buildIndexFromArray(mcData.blocks, 'name'),
blocksByStateId: indexer.buildIndexFromArrayWithRanges(mcData.blocks, 'minStateId', 'maxStateId'),
enchantmentsById: indexer.buildIndexFromArray(mcData.enchantments, 'id'),
enchantmentsByName: indexer.buildIndexFromArray(mcData.enchantments, 'name'),
entitiesByName: indexer.buildIndexFromArray(mcData.entities, 'name'),
mobsById: mcData.entities === undefined
? undefined
: indexer.buildIndexFromArray(mcData.entities.filter(e => e.type === 'mob'), 'id'),
objectsById: mcData.entities === undefined
? undefined
: indexer.buildIndexFromArray(mcData.entities.filter(e => e.type === 'object'), 'id'),
instrumentsById: indexer.buildIndexFromArray(mcData.instruments, 'id'),
itemsById: indexer.buildIndexFromArray(mcData.items, 'id'),
itemsByName: indexer.buildIndexFromArray(mcData.items, 'name'),
foodsById: indexer.buildIndexFromArray(mcData.foods, 'id'),
foodsByName: indexer.buildIndexFromArray(mcData.foods, 'name'),
foodsByFoodPoints: indexer.buildIndexFromArray(mcData.foods, 'foodPoints'),
foodsBySaturation: indexer.buildIndexFromArray(mcData.foods, 'saturation'),
windowsById: indexer.buildIndexFromArray(mcData.windows, 'id'),
windowsByName: indexer.buildIndexFromArray(mcData.windows, 'name'),
effectsById: indexer.buildIndexFromArray(mcData.effects, 'id'),
effectsByName: indexer.buildIndexFromArray(mcData.effects, 'name'),
particlesById: indexer.buildIndexFromArray(mcData.particles, 'id'),
particlesByName: indexer.buildIndexFromArray(mcData.particles, 'name'),
blockLootByName: indexer.buildIndexFromArray(mcData.blockLoot, 'block'),
entityLootByName: indexer.buildIndexFromArray(mcData.entityLoot, 'entity'),
mapIconsById: indexer.buildIndexFromArray(mcData.mapIcons, 'id'),
mapIconsByName: indexer.buildIndexFromArray(mcData.mapIcons, 'name'),
attributesByName: indexer.buildIndexFromArray(mcData.attributes, 'name'),
attributesByResource: indexer.buildIndexFromArray(mcData.attributes, 'resource')
}
}

View File

@ -0,0 +1,100 @@
module.exports = mcDataToNode
function mcDataToNode (mcData) {
const indexes = require('./indexes.js')(mcData)
return {
blocks: indexes.blocksById,
blocksByName: indexes.blocksByName,
blocksArray: mcData.blocks,
blocksByStateId: indexes.blocksByStateId,
blockStates: mcData.blockStates, // bedrock
blockCollisionShapes: mcData.blockCollisionShapes,
biomes: indexes.biomesById,
biomesByName: indexes.biomesByName,
biomesArray: mcData.biomes,
items: indexes.itemsById,
itemsByName: indexes.itemsByName,
itemsArray: mcData.items,
foods: indexes.foodsById,
foodsByName: indexes.foodsByName,
foodsByFoodPoints: indexes.foodsByFoodPoints,
foodsBySaturation: indexes.foodsBySaturation,
foodsArray: mcData.foods,
recipes: mcData.recipes,
instruments: indexes.instrumentsById,
instrumentsArray: mcData.instruments,
materials: mcData.materials,
enchantments: indexes.enchantmentsById,
enchantmentsByName: indexes.enchantmentsByName,
enchantmentsArray: mcData.enchantments,
mobs: indexes.mobsById,
objects: indexes.objectsById,
entitiesByName: indexes.entitiesByName,
entitiesArray: mcData.entities,
windows: indexes.windowsById,
windowsByName: indexes.windowsByName,
windowsArray: mcData.windows,
protocol: mcData.protocol,
protocolComments: mcData.protocolComments,
protocolYaml: [mcData.proto, mcData.types], // bedrock
defaultSkin: mcData.steve, // bedrock
version: mcData.version,
effects: indexes.effectsById,
effectsByName: indexes.effectsByName,
effectsArray: mcData.effects,
attributes: indexes.attributesByResource,
attributesByName: indexes.attributesByName,
attributesArray: mcData.attributes,
particles: indexes.particlesById,
particlesByName: indexes.particlesByName,
particlesArray: mcData.particles,
language: mcData.language,
blockLoot: indexes.blockLootByName,
blockLootArray: mcData.blockLoot,
entityLoot: indexes.entityLootByName,
entityLootArray: mcData.entityLoot,
commands: mcData.commands,
loginPacket: mcData.loginPacket,
mapIcons: indexes.mapIconsById,
mapIconsByName: indexes.mapIconsByName,
mapIconsArray: mcData.mapIcons,
tints: mcData.tints,
findItemOrBlockById: function (id) {
console.log('{mcData}.findItemOrBlockById() is deprecated, scheduled to be removed on or after April 1 2022')
const item = indexes.itemsById[id]
if (item !== undefined) return item
return indexes.blocksById[id]
},
findItemOrBlockByName: function (name) {
console.log('{mcData}.findItemOrBlockByName() is deprecated, scheduled to be removed on or after April 1 2022')
const item = indexes.itemsByName[name]
if (item !== undefined) return item
return indexes.blocksByName[name]
}
}
}

View File

@ -0,0 +1,63 @@
const features = require('../minecraft-data/data/pc/common/features.json')
const nameToFeature = Object.fromEntries(features.map(feature => [feature.name, feature]))
function isFeatureInRange (featureName, versionObj) {
const feature = nameToFeature[featureName]
if (feature === undefined) {
throw new Error(`Feature ${feature} doesn't exist`)
}
if (feature.values) {
for (const { value, versions, version } of feature.values) { // we're using feature.version
if (version) {
const ver = version.replace('_major', '')
if (!/^\d\.\d+$/.test(ver)) {
throw new Error(`Not a correct major version value, instead the version is: "${version}"`)
}
if (versionObj.majorVersion === ver) {
return value
}
} else { // we're using feature.versions
const [minVer, maxVer] = versions
if (isVersionInRange(minVer, versionObj, maxVer)) {
return value
}
}
}
return null // if we didn't match anything, return null
} else {
const [minVer, maxVer] = feature.versions
return isVersionInRange(minVer, versionObj, maxVer)
}
}
function isVersionInRange (minVer, versionObj, maxVer) {
let inRange = true
const { majorVersion } = versionObj
if (minVer.endsWith('_major')) {
const ver = removeMajorSuffix(minVer)
inRange = inRange && getVersionObj(majorVersion)['>='](ver)
} else {
inRange = inRange && versionObj['>='](minVer)
}
if (maxVer === 'latest') { // no need to check upper bound if upperbound is latest
return inRange
}
if (maxVer.endsWith('_major')) {
const ver = removeMajorSuffix(maxVer)
inRange = inRange && getVersionObj(majorVersion)['<='](ver)
} else {
inRange = inRange && versionObj['<='](maxVer)
}
return inRange
}
function removeMajorSuffix (verStr) {
return verStr.replace('_major', '')
}
function getVersionObj (ver) {
return require('minecraft-data')(ver).version
}
module.exports = isFeatureInRange

View File

@ -0,0 +1,2 @@
# These are supported funding model platforms

View File

@ -0,0 +1,4 @@
---
name: Blank Issue
about: Open a new issue
---

View File

@ -0,0 +1,14 @@
---
name: New Version
about: Add a new minecraft version to MCD
title: 'Add version: '
---
- [ ] Version folder containing "version.json" created
- [ ] "version.json" filled out appropriately
- [ ] Added version to dataPath.json
- [ ] "version" field of dataPath.json points to new version folder
- [ ] Version added to common/versions.json
- [ ] Version added to ReadMe
Additional Requirements For This Update:

View File

@ -0,0 +1,41 @@
name: bedrock-ci
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Use Node.js 14.x
uses: actions/setup-node@v1
with:
node-version: 14.x
- uses: actions/checkout@v2
with:
repository: PrismarineJS/node-minecraft-data
submodules: recursive
path: node-mcdata
- run: rm -rf minecraft-data
- uses: actions/checkout@v2
with:
path: node-mcdata/minecraft-data
- uses: actions/checkout@v2
with:
repository: PrismarineJS/bedrock-protocol
path: bedrock-protocol
- run: ls -R .
- run: |
cd bedrock-protocol
npm uninstall minecraft-data
npm install ../node-mcdata
npm i
cd ../node-mcdata
npm run generate:data
- run: npm test
working-directory: bedrock-protocol

View File

@ -0,0 +1,22 @@
name: Repository Dispatch
on:
repository_dispatch:
types: [node-mcData-release]
jobs:
myEvent:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
ref: web
- name: Use Node.js 14.x
uses: actions/setup-node@v1
with:
node-version: 14.x
- name: Run tool
run: |
npm install
git config user.name 'rom1504bot'
git config user.email 'rom1504bot@users.noreply.github.com'
npm run gh-publish

View File

@ -0,0 +1,29 @@
name: CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- run: npm install
working-directory: tools/js
- run: npm build
working-directory: tools/js
- run: npm test
working-directory: tools/js

View File

@ -0,0 +1,26 @@
name: 'tag'
on:
push:
branches:
- master
jobs:
tag:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions-ecosystem/action-regex-match@v2
id: regex-match
with:
text: ${{ github.event.head_commit.message }}
regex: '^Release ([0-9]+\.[0-9]+\.[0-9]+)'
- uses: actions-ecosystem/action-push-tag@v1
if: ${{ steps.regex-match.outputs.match != '' }}
with:
tag: ${{ steps.regex-match.outputs.group1 }}
- uses: peter-evans/repository-dispatch@v1
if: ${{ steps.regex-match.outputs.match != '' }}
with:
token: ${{ secrets.PAT_PASSWORD }}
repository: PrismarineJS/node-minecraft-data
event-type: mcData-release
client-payload: '{"tag": "${{ steps.regex-match.outputs.group1 }}"}'

View File

@ -0,0 +1,137 @@
# minecraft-data
[![Discord](https://img.shields.io/badge/chat-on%20discord-brightgreen.svg)](https://discord.gg/GsEFRM8)
[![Gitter](https://img.shields.io/badge/chat-on%20gitter-brightgreen.svg)](https://gitter.im/PrismarineJS/general)
[![Irc](https://img.shields.io/badge/chat-on%20irc-brightgreen.svg)](https://irc.gitter.im/)
[![Build Status](https://github.com/PrismarineJS/minecraft-data/workflows/CI/badge.svg)](https://github.com/PrismarineJS/minecraft-data/actions?query=workflow%3A%22CI%22)
Language independent module providing minecraft data for minecraft clients, servers and libraries.
Supports
* Minecraft PC version 0.30c (classic), 1.7.10, 1.8.8, 1.9 (15w40b, 1.9, 1.9.1-pre2, 1.9.2, 1.9.4),
1.10 (16w20a, 1.10-pre1, 1.10, 1.10.1, 1.10.2), 1.11 (16w35a, 1.11, 1.11.2), 1.12 (17w15a, 17w18b, 1.12-pre4, 1.12, 1.12.1, 1.12.2), 1.13 (17w50a, 1.13, 1.13.1, 1.13.2-pre1, 1.13.2-pre2, 1.13.2), 1.14 (1.14, 1.14.1, 1.14.3, 1.14.4), 1.15 (1.15, 1.15.1, 1.15.2), 1.16 (20w13b, 20w14a, 1.16-rc1, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5), 1.17, 1.17.1, 1.18 (1.18, 1.18.1, 1.18.2)
* Minecraft bedrock version 0.14, 0.15, 1.0, 1.16.201, 1.16.210, 1.16.220, 1.17.0, 1.17.10, 1.17.30, 1.17.40, 1.18.0
## Wrappers
Minecraft-data is language independent, you can use it with these language specific modules :
| Wrapper name | Language | Data provided |
| --- | --- | --- |
| [node-minecraft-data](https://github.com/PrismarineJS/node-minecraft-data) | Node.js | everything |
| [python-minecraft-data](https://github.com/SpockBotMC/python-minecraft-data) | python | everything |
| [McData](https://github.com/McEx/McData) | Elixir | protocol |
| [ProtocolGen](https://github.com/Johni0702/ProtocolGen) | java | generated java files from protocol.json to read and write minecraft packets |
| [mcdata](https://github.com/wlwanpan/mcdata) | Go | everything |
| [minecraft-data-rs](https://github.com/Trivernis/minecraft-data-rs) | Rust | everything |
If you want to use minecraft-data in a new language, we advise you to [create a new wrapper](doc/make-a-new-wrapper.md)
## Data
Data provided:
| Data | Description |
| --- | --- |
| Biomes | |
| Blocks | |
| Enchantment | |
| Effect | Status/Potion effects |
| Entities | |
| Language | language code and their english strings |
| Instruments | sounds emitted by blocks |
| Items | |
| Map icons | Provides all available map icons as used by (crafted) maps |
| Materials | to be used with blocks data. Provides tool speed multipliers against material types. |
| Particles | Id and names of minecraft particles |
| Protocol | a complete description of the protocol, can be used to automatically implement the protocol, see [protodef doc](https://github.com/ProtoDef-io/ProtoDef) |
| Protocol Versions | the whole list of minecraft protocol versions |
| Recipes | to be used with blocks and items data |
| Windows | the different kind of windows and their characteristics |
| Version | |
| Versions | all the versions supported in minecraft-data |
| Block collision shapes | |
| Foods | list of foods each with there id, saturation, foodpoints and more |
| Commands | a tree structure for vanilla minecraft server commands, and some info needed to implement sub-parsers.
| Legacy | mappings between legacy (1.12) and post-flattening (1.13+) blocks and items ids
| Skin data | (bedrock edition) Skin geometry and texture data for steve skin
| Features | This can be used to check is a specific feature is available in the current Minecraft version. This is usually only required for handling version-specific functionality.
See more information about this data in the [documentation](http://prismarinejs.github.io/minecraft-data/)
## Documentation
* See [doc/history.md](doc/history.md)
* [Documentation generated using the json schemas and docson](http://prismarinejs.github.io/minecraft-data)
* [Textual documentation of the recipe format](doc/recipes.md)
## Projects using minecraft-data
These are the projects that use minecraft-data:
| Project name | Language | Project type | Data used |
| --- | --- | --- | --- |
| [mineflayer](https://github.com/PrismarineJS/mineflayer) | Node.js | bot library | biomes, blocks, entities, instruments, items, materials, recipes |
| [node-minecraft-protocol](https://github.com/PrismarineJS/node-minecraft-protocol) | Node.js | protocol serialization | protocol |
| [flying-squid](https://github.com/PrismarineJS/flying-squid) | Node.js | server library | biomes, blocks, materials |
| [SpockBot](https://github.com/SpockBotMC/SpockBot) | Python | bot library | biomes, blocks, items, materials, windows, recipes |
| [PhaseBot](https://github.com/phase/PhaseBot) | Java | bot | blocks, items, materials |
| [McEx](https://github.com/hansihe/McEx) | Elixir | server | blocks |
| [VoxelGamesLib](https://github.com/MiniDigger/VoxelGamesLib) | Java | minigames server library | blocks, items |
| [Phpcraft](https://github.com/Phpcraft/core) | PHP | all-around library | blocks, items, entities, protocol |
## Extraction
Projects that provide data:
| Project name | Language | Source | Data provided |
| --- | --- | --- | --- |
| [minecraft-wiki-extractor](https://github.com/PrismarineJS/minecraft-wiki-extractor) | Node.js | [minecraft wiki](http://minecraft.gamepedia.com/Minecraft_Wiki) | blocks, items, entities, recipes |
| [mcdevs-wiki-extractor](https://github.com/PrismarineJS/mcdevs-wiki-extractor) | Node.js | [wiki.vg](http://wiki.vg/Protocol) | a partial protocol, entities |
| [node-minecraft-extractor](https://github.com/PrismarineJS/node-minecraft-extractor) | Node.js | merge between wiki.vg and mcwiki | a complete entities file |
| [minecraft-jar-extractor](https://github.com/PrismarineJS/minecraft-jar-extractor) | Node.js | minecraft server jar | a very partial but completely up to date protocol |
| [minecraft-jar-extractor in python](https://github.com/pangeacake/minecraft-jar-extractor) | Python | minecraft server jar | about the same protocol information as minecraft-jar-extractor in node.js |
| [burger](https://github.com/mcdevs/Burger) with [burger-extractor](https://github.com/PrismarineJS/burger-extractor) | Node.js | minecraft server jar | used to provide items, blocks, biomes and recipes |
| [burger 1.16](https://github.com/Pokechu22/Burger/tree/1.16-dev) | --//-- | --// -- | --//-- |
| [command-generator](https://github.com/Miro-Andrin/mc-data-command-generator) | Python | [Minecraft data generator](https://wiki.vg/Data_Generators) | Data used for parsing all vanilla server commands. |
| [minecraft-data-generator](https://github.com/Archengius/minecraft-data-generator) | Java | minecraft client | biomes, block collision shapes, blocks, effects, enchantments, entities, foods, items, particles, tints. Required Fabric updated to the provided minecraft version. |
Pages interesting to manually update the data if necessary:
| Page | Data |
| ---- | ---- |
| [wiki.vg Inventory page](http://wiki.vg/Inventory) | windows |
| [wiki.vg](http://wiki.vg/Block_Actions) | instruments |
| [a mineflayer PR](https://github.com/PrismarineJS/mineflayer/pull/197) | biomes |
| [mcwiki effects page](http://minecraft.gamepedia.com/Status_effect) | effects |
| [wiki.vg protocol version numbers](http://wiki.vg/Protocol_version_numbers) | protocolVersions |
## Data quality
Minecraft data provides scripts to audit the data, they can be useful to check the data is correct :
* [audit_blocks](tools/js/test/audit_blocks.js)
* [audit_items](tools/js/test/audit_items.js)
* [audit_recipes](tools/js/test/audit_recipes.js)
* [audit_shapes](tools/js/test/audit_shapes.js)
Minecraft data also provides json schemas in enums_schemas/ that are used in
test/test.js to check the json file are valid relative to these schemas.
These schemas can also be used to understand better how the json files are
formatted in order to use it.
## Contribute
Please read https://github.com/PrismarineJS/prismarine-contribute
## License
MIT
Some of the data was extracted manually or automatically from wiki.vg and minecraft.gamepedia.com.
If required by one of the sources the license might change to something more appropriate.
## Related project
[minecraft-assets](https://github.com/rom1504/minecraft-assets) which provide minecraft assets along with json files that help to use them.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
{
"version":70,
"minecraftVersion":"0.14.3",
"majorVersion":"0.14"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
{
"version":82,
"minecraftVersion":"0.15.6",
"majorVersion":"0.15"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
{
"version":100,
"minecraftVersion":"1.0.0",
"majorVersion":"1.0"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,960 @@
# !StartDocs: Types
BehaviourPackInfos: []li16
uuid: string
version: string
size: lu64
content_key: string
sub_pack_name: string
content_identity: string
has_scripts: bool
TexturePackInfos: []li16
uuid: string
version: string
size: lu64
content_key: string
sub_pack_name: string
content_identity: string
has_scripts: bool
rtx_enabled: bool
ResourcePackIdVersions: []varint
# The ID of the resource pack.
uuid: string
# The version of the resource pack.
version: string
# The subpack name of the resource pack.
name: string
ResourcePackIds: string[]li16
Experiment:
name: string
enabled: bool
Experiments: Experiment[]li32
GameMode: zigzag32 =>
0: survival
1: creative
2: adventure
3: survival_spectator
4: creative_spectator
5: fallback
GameRule:
name: string
type: varint =>
1: bool
2: int
3: float
value: type?
if bool: bool
if int: zigzag32
if float: lf32
GameRules: GameRule[]varint
# CacheBlob represents a blob as used in the client side blob cache protocol. It holds a hash of its data and
# the full data of it.
Blob:
# Hash is the hash of the blob. The hash is computed using xxHash, and must be deterministic for the same
# chunk data.
hash: lu64
# Payload is the data of the blob. When sent, the client will associate the Hash of the blob with the
# Payload in it.
payload: ByteArray
BlockPalette: []varint
name: string
state: nbt
Itemstates: []varint
name: string
runtime_id: li16
component_based: bool
Item:
network_id: zigzag32
_: network_id?
if 0: void
default:
auxiliary_value: zigzag32
has_nbt: lu16 =>
0xffff: 'true'
0x0000: 'false'
nbt: has_nbt?
if true:
version: u8
nbt: nbt
default: void
can_place_on: string[]zigzag32
can_destroy: string[]zigzag32
_: network_id?
if 355:
blocking_tick: zigzag64
vec3i:
x: zigzag32
y: zigzag32
z: zigzag32
vec3u:
x: varint
y: varint
z: varint
vec3f:
x: lf32
y: lf32
z: lf32
vec2f:
x: lf32
z: lf32
MetadataDictionary: []varint
# https://github.com/pmmp/PocketMine-MP/blob/stable/src/pocketmine/entity/Entity.php#L101
key: varint =>
0: index
1: health #int (minecart/boat)
2: variant #int
3: color #byte
4: nametag #string
5: owner_eid #long
6: target_eid #long
7: air #short
8: potion_color #int (ARGB!)
9: potion_ambient #byte
10: jump_duration #long
11: hurt_time #int (minecart/boat)
12: hurt_direction #int (minecart/boat)
13: paddle_time_left #float
14: paddle_time_right #float
15: experience_value #int (xp orb)
16: minecart_display_block #int (id | (data << 16))
17: minecart_display_offset #int
18: minecart_has_display #byte (must be 1 for minecart to show block inside)
20: old_swell
21: swell_dir
22: charge_amount
23: enderman_held_runtime_id #short
24: entity_age #short
26: player_flags
27: player_index
28: player_bed_position #block coords
29: fireball_power_x #float
30: fireball_power_y
31: fireball_power_z
32: aux_power
33: fish_x
34: fish_z
35: fish_angle
36: potion_aux_value #short
37: lead_holder_eid #long
38: scale
39: interactive_tag #string
40: npc_skin_id #string
41: url_tag #string
42: max_airdata_max_air
43: mark_variant #int
44: container_type #byte
45: container_base_size #int
46: container_extra_slots_per_strength #int
47: block_target
48: wither_invulnerable_ticks #int
49: wither_target_1 #long
50: wither_target_2 #long
51: wither_target_3 #long
52: aerial_attack
53: boundingbox_width
54: boundingbox_height
55: fuse_length
56: rider_seat_position #vector3f
57: rider_rotation_locked #byte
58: rider_max_rotation #float
59: rider_min_rotation #float
60: area_effect_cloud_radius #float
61: area_effect_cloud_waiting #int
62: area_effect_cloud_particle_id #int
63: shulker_peek_id #int
64: shulker_attach_face #byte
65: shulker_attached #short
66: shulker_attach_pos
67: trading_player_eid #long
68: trading_career
69: has_command_block
70: command_block_command #string
71: command_block_last_output #string
72: command_block_track_output #byte
73: controlling_rider_seat_number #byte
74: strength #int
75: max_strength #int
76: spell_casting_color #int
77: limited_life
78: armor_stand_pose_index # int
79: ender_crystal_time_offset # int
80: always_show_nametag # byte
81: color_2 # byte
82: name_author
83: score_tag #String
84: balloon_attached_entity # long
85: pufferfish_size
86: bubble_time
87: agent
88: sitting_amount
89: sitting_amount_previous
90: eating_counter
91: flags_extended
92: laying_amount
93: laying_amount_previous
94: duration
95: spawn_time
96: change_rate
97: change_on_pickup
98: pickup_count
99: interact_text
100: trade_tier
101: max_trade_tier
102: trade_experience
103: skin_id
104: spawning_frames
105: command_block_tick_delay
106: command_block_execute_on_first_tick
107: ambient_sound_interval
108: ambient_sound_interval_range
109: ambient_sound_event_name
110: fall_damage_multiplier
111: name_raw_text
112: can_ride_target
113: low_tier_cured_discount
114: high_tier_cured_discount
115: nearby_cured_discount
116: nearby_cured_discount_timestamp
117: hitbox
118: is_buoyant
119: buoyancy_data
type: varint =>
0: byte
1: short
2: int
3: float
4: string
5: compound
6: vec3i
7: long
8: vec3f
value: type?
if byte: i8
if short: li16
if int: zigzag32
if float: lf32
if string: string
if compound: nbt
if vec3i: vec3i
if long: zigzag64
if vec3f: vec3f
Link:
ridden_entity_id: zigzag64
rider_entity_id: zigzag64
type: u8
immediate: bool
rider_initiated: bool
Links: Link[]varint
EntityAttributes: []varint
name: string
min: lf32
value: lf32
max: lf32
Rotation:
yaw: byterot
pitch: byterot
head_yaw: byterot
BlockCoordinates: # mojang...
x: zigzag32
y: varint
z: zigzag32
PlayerAttributes: []varint
min: lf32
max: lf32
current: lf32
default: lf32
name: string
Transaction:
# LegacyRequestID is an ID that is only non-zero at times when sent by the client. The server should
# always send 0 for this. When this field is not 0, the LegacySetItemSlots slice below will have values
# in it.
# LegacyRequestID ties in with the ItemStackResponse packet. If this field is non-0, the server should
# respond with an ItemStackResponse packet. Some inventory actions such as dropping an item out of the
# hotbar are still one using this packet, and the ItemStackResponse packet needs to tie in with it.
legacy_request_id: zigzag32
# `legacy_transactions` are only present if the LegacyRequestID is non-zero. These item slots inform the
# server of the slots that were changed during the inventory transaction, and the server should send
# back an ItemStackResponse packet with these slots present in it. (Or false with no slots, if rejected.)
legacy_transactions: legacy_request_id?
if 0: void
default: []varint
container_id: u8
changed_slots: []varint
slot_id: u8
transaction_type: varint =>
0: normal
1: inventory_mismatch
2: item_use
3: item_use_on_entity
4: item_release
network_ids: bool
inventory_actions: []varint
source_type: varint =>
0: container
1: global
2: world_interaction
3: creative
100: craft_slot
99999: craft
_: source_type?
if container or creative:
inventory_id: varint
if world_interaction:
flags: varint
if craft or craft_slot:
action: varint
default: void
slot: varint
old_item: Item
new_item: Item
new_item_stack_id: ../network_ids?
if true: zigzag32
default: void
transaction_data: transaction_type?
if normal or inventory_mismatch: void
# UseItemTransactionData represents an inventory transaction data object sent when the client uses an item on
# a block.
if item_use:
# ActionType is the type of the UseItem inventory transaction. It is one of the action types found above,
# and specifies the way the player interacted with the block.
action_type: varint =>
0: click_block
1: click_air
2: break_block
# BlockPosition is the position of the block that was interacted with. This is only really a correct
# block position if ActionType is not UseItemActionClickAir.
block_position: BlockCoordinates
# BlockFace is the face of the block that was interacted with. When clicking the block, it is the face
# clicked. When breaking the block, it is the face that was last being hit until the block broke.
face: varint
# HotBarSlot is the hot bar slot that the player was holding while clicking the block. It should be used
# to ensure that the hot bar slot and held item are correctly synchronised with the server.
hotbar_slot: varint
# HeldItem is the item that was held to interact with the block. The server should check if this item
# is actually present in the HotBarSlot.
held_item: Item
# Position is the position of the player at the time of interaction. For clicking a block, this is the
# position at that time, whereas for breaking the block it is the position at the time of breaking.
player_pos: vec3f
# ClickedPosition is the position that was clicked relative to the block's base coordinate. It can be
# used to find out exactly where a player clicked the block.
click_pos: vec3f
# BlockRuntimeID is the runtime ID of the block that was clicked. It may be used by the server to verify
# that the player's world client-side is synchronised with the server's.
block_runtime_id: varint
# UseItemOnEntityTransactionData represents an inventory transaction data object sent when the client uses
# an item on an entity.
if item_use_on_entity:
# TargetEntityRuntimeID is the entity runtime ID of the target that was clicked. It is the runtime ID
# that was assigned to it in the AddEntity packet.
entity_runtime_id: varint64
# ActionType is the type of the UseItemOnEntity inventory transaction. It is one of the action types
# found in the constants above, and specifies the way the player interacted with the entity.
action_type: varint =>
0: interact
1: attack
# HotBarSlot is the hot bar slot that the player was holding while clicking the entity. It should be used
# to ensure that the hot bar slot and held item are correctly synchronised with the server.
hotbar_slot: zigzag32
# HeldItem is the item that was held to interact with the entity. The server should check if this item
# is actually present in the HotBarSlot.
held_item: Item
# Position is the position of the player at the time of clicking the entity.
player_pos: vec3f
# ClickedPosition is the position that was clicked relative to the entity's base coordinate. It can be
# used to find out exactly where a player clicked the entity.
click_pos: vec3f
# ReleaseItemTransactionData represents an inventory transaction data object sent when the client releases
# the item it was using, for example when stopping while eating or stopping the charging of a bow.
if item_release:
# ActionType is the type of the ReleaseItem inventory transaction. It is one of the action types found
# in the constants above, and specifies the way the item was released.
# As of 1.13, the ActionType is always 0. This field can be ignored, because releasing food (by consuming
# it) or releasing a bow (to shoot an arrow) is essentially the same.
action_type: varint =>
0: release
1: consume
# HotBarSlot is the hot bar slot that the player was holding while releasing the item. It should be used
# to ensure that the hot bar slot and held item are correctly synchronised with the server.
hotbar_slot: zigzag32
# HeldItem is the item that was released. The server should check if this item is actually present in the
# HotBarSlot.
held_item: Item
# HeadPosition is the position of the player's head at the time of releasing the item. This is used
# mainly for purposes such as spawning eating particles at that position.
head_pos: vec3f
# An "ItemStack" here represents an Item instance. You can think about it like a pointer
# to an item class. The data for the class gets updated with the data in the `item` field
ItemStack:
# StackNetworkID is the network ID of the item stack. If the stack is empty, 0 is always written for this
# field. If not, the field should be set to 1 if the server authoritative inventories are disabled in the
# StartGame packet, or to a unique stack ID if it is enabled.
runtime_id: zigzag32
# Stack is the actual item stack of the item instance.
item: Item
ItemStacks: ItemStack[]varint
RecipeIngredient:
network_id: zigzag32
_: network_id?
if 0: void
default:
network_data: zigzag32
count: zigzag32
PotionTypeRecipes: []varint
input_item_id: zigzag32
input_item_meta: zigzag32
ingredient_id: zigzag32
ingredient_meta: zigzag32
output_item_id: zigzag32
output_item_meta: zigzag32
PotionContainerChangeRecipes: []varint
input_item_id: zigzag32
ingredient_id: zigzag32
output_item_id: zigzag32
Recipes: []varint
type: zigzag32 =>
'0': 'shapeless' #'ENTRY_SHAPELESS',
'1': 'shaped' #'ENTRY_SHAPED',
'2': 'furnace' # 'ENTRY_FURNACE',
# `furnace_with_metadata` is a recipe specifically used for furnace-type crafting stations. It is equal to
# `furnace`, except it has an input item with a specific metadata value, instead of any metadata value.
'3': 'furnace_with_metadata' # 'ENTRY_FURNACE_DATA', // has metadata
'4': 'multi' #'ENTRY_MULTI', //TODO
'5': 'shulker_box' #'ENTRY_SHULKER_BOX', //TODO
'6': 'shapeless_chemistry' #'ENTRY_SHAPELESS_CHEMISTRY', //TODO
'7': 'shaped_chemistry' #'ENTRY_SHAPED_CHEMISTRY', //TODO
recipe: type?
if shapeless or shulker_box or shapeless_chemistry:
recipe_id: string
input: RecipeIngredient[]varint
output: Item[]varint
uuid: uuid
block: string
priority: zigzag32
network_id: zigzag32
if shaped or shaped_chemistry:
recipe_id: string
width: zigzag32
height: zigzag32
# todo: can this become
# RecipeIngredient[$height][$width] or RecipeIngredient[]$height[]$width ?
input: []$width
_: RecipeIngredient[]$height
output: Item[]varint
uuid: uuid
block: string
priority: zigzag32
network_id: zigzag32
if furnace:
input_id: zigzag32
output: Item
block: string
if furnace_with_metadata:
input_id: zigzag32
input_meta: zigzag32
output: Item
block: string
if multi:
uuid: uuid
network_id: zigzag32
SkinImage:
width: li32
height: li32
data: string
Skin:
skin_id: string
skin_resource_pack: string
skin_data: SkinImage
animations: []li32
skin_image: SkinImage
animation_type: li32
animation_frames: lf32
expression_type: lf32
cape_data: SkinImage
geometry_data: string
animation_data: string
premium: string
persona: bool
cape_on_classic: bool
cape_id: string
full_skin_id: string
arm_size: string
skin_color: string
personal_pieces: []li32
piece_id: string
piece_type: string
pack_id: string
is_default_piece: bool
product_id: string
piece_tint_colors: []li32
piece_type: string
colors: string[]li32
PlayerRecords:
type: u8 =>
0: add
1: remove
records_count: varint
records: []$records_count
_: type?
if add:
uuid: uuid
entity_unique_id: zigzag64
username: string
xbox_user_id: string
platform_chat_id: string
build_platform: li32
skin_data: Skin
is_teacher: bool
is_host: bool
if remove:
uuid: uuid
verified: bool[]$records_count
ScoreEntries:
type: u8 =>
0: change
1: remove
entries: []varint
scoreboard_id: zigzag64
objective_name: string
score: li32
_: type?
if remove:
entry_type: i8 =>
1: player
2: entity
3: fake_player
entity_unique_id: entry_type?
if player or entity: zigzag64
custom_name: entry_type?
if fake_player: string
ScoreboardIdentityEntries:
type: i8 =>
0: TYPE_REGISTER_IDENTITY
1: TYPE_CLEAR_IDENTITY
entries: []varint
scoreboard_id: zigzag64
entity_unique_id: type ?
if TYPE_REGISTER_IDENTITY: zigzag64
default: void
Enchant:
id: u8
level: u8
EnchantOptions: []varint
cost: varint
slot_flags: li32
equip_enchants: Enchant[]varint
held_enchants: Enchant[]varint
self_enchants: Enchant[]varint
name: string
option_id: zigzag32
StackRequestSlotInfo:
container_id: u8
slot_id: u8
stack_id: zigzag32
#
ItemStackRequests: []varint
# RequestID is a unique ID for the request. This ID is used by the server to send a response for this
# specific request in the ItemStackResponse packet.
request_id: zigzag32
actions: []varint
type_id: u8 =>
# TakeStackRequestAction is sent by the client to the server to take x amount of items from one slot in a
# container to the cursor.
0: take
# PlaceStackRequestAction is sent by the client to the server to place x amount of items from one slot into
# another slot, such as when shift clicking an item in the inventory to move it around or when moving an item
# in the cursor into a slot.
1: place
# SwapStackRequestAction is sent by the client to swap the item in its cursor with an item present in another
# container. The two item stacks swap places.
2: swap
# DropStackRequestAction is sent by the client when it drops an item out of the inventory when it has its
# inventory opened. This action is not sent when a player drops an item out of the hotbar using the Q button
# (or the equivalent on mobile). The InventoryTransaction packet is still used for that action, regardless of
# whether the item stack network IDs are used or not.
3: drop
# DestroyStackRequestAction is sent by the client when it destroys an item in creative mode by moving it
# back into the creative inventory.
4: destroy
# ConsumeStackRequestAction is sent by the client when it uses an item to craft another item. The original
# item is 'consumed'.
5: consume
# CreateStackRequestAction is sent by the client when an item is created through being used as part of a
# recipe. For example, when milk is used to craft a cake, the buckets are leftover. The buckets are moved to
# the slot sent by the client here.
# Note that before this is sent, an action for consuming all items in the crafting table/grid is sent. Items
# that are not fully consumed when used for a recipe should not be destroyed there, but instead, should be
# turned into their respective resulting items.
6: create
# LabTableCombineStackRequestAction is sent by the client when it uses a lab table to combine item stacks.
7: lab_table_combine
# BeaconPaymentStackRequestAction is sent by the client when it submits an item to enable effects from a
# beacon. These items will have been moved into the beacon item slot in advance.
8: beacon_payment
# CraftRecipeStackRequestAction is sent by the client the moment it begins crafting an item. This is the
# first action sent, before the Consume and Create item stack request actions.
# This action is also sent when an item is enchanted. Enchanting should be treated mostly the same way as
# crafting, where the old item is consumed.
9: craft_recipe
# AutoCraftRecipeStackRequestAction is sent by the client similarly to the CraftRecipeStackRequestAction. The
# only difference is that the recipe is automatically created and crafted by shift clicking the recipe book.
10: craft_recipe_auto #recipe book?
# CraftCreativeStackRequestAction is sent by the client when it takes an item out fo the creative inventory.
# The item is thus not really crafted, but instantly created.
11: craft_creative
# CraftRecipeOptionalStackRequestAction is sent when using an anvil. When this action is sent, the
# CustomNames field in the respective stack request is non-empty and contains the name of the item created
# using the anvil.
12: optional
# CraftNonImplementedStackRequestAction is an action sent for inventory actions that aren't yet implemented
# in the new system. These include, for example, anvils.
13: non_implemented #anvils aren't fully implemented yet
# CraftResultsDeprecatedStackRequestAction is an additional, deprecated packet sent by the client after
# crafting. It holds the final results and the amount of times the recipe was crafted. It shouldn't be used.
# This action is also sent when an item is enchanted. Enchanting should be treated mostly the same way as
# crafting, where the old item is consumed.
14: results_deprecated
_: type_id ?
if take or place:
count: u8
source: StackRequestSlotInfo
destination: StackRequestSlotInfo
if swap:
# Source and Destination point to the source slot from which Count of the item stack were taken and the
# destination slot to which this item was moved.
source: StackRequestSlotInfo
destination: StackRequestSlotInfo
if drop:
# Count is the count of the item in the source slot that was taken towards the destination slot.
count: u8
# Source is the source slot from which items were dropped to the ground.
source: StackRequestSlotInfo
# Randomly seems to be set to false in most cases. I'm not entirely sure what this does, but this is what
# vanilla calls this field.
randomly: bool
if destroy or consume:
# Count is the count of the item in the source slot that was destroyed.
count: u8
# Source is the source slot from which items came that were destroyed by moving them into the creative
# inventory.
source: StackRequestSlotInfo
if create:
# ResultsSlot is the slot in the inventory in which the results of the crafting ingredients are to be
# placed.
result_slot_id: u8
if beacon_payment:
# PrimaryEffect and SecondaryEffect are the effects that were selected from the beacon.
primary_effect: zigzag32
secondary_effect: zigzag32
if craft_recipe or craft_recipe_auto:
# RecipeNetworkID is the network ID of the recipe that is about to be crafted. This network ID matches
# one of the recipes sent in the CraftingData packet, where each of the recipes have a RecipeNetworkID as
# of 1.16.
recipe_network_id: varint
if craft_creative:
# CreativeItemNetworkID is the network ID of the creative item that is being created. This is one of the
# creative item network IDs sent in the CreativeContent packet.
creative_item_network_id: varint
if optional:
# For the cartography table, if a certain MULTI recipe is being called, this points to the network ID that was assigned.
recipe_network_id: varint
# Most likely the index in the request's filter strings that this action is using
filtered_string_index: li32
if non_implemented: void
if results_deprecated:
result_items: Item[]varint
times_crafted: u8
# CustomNames is a list of custom names involved in the request. This is typically filled with one string
# when an anvil is used.
# * Used for the server to determine which strings should be filtered. Used in anvils to verify a renamed item.
custom_names: string[]varint
ItemStackResponses: []varint
result: u8
request_id: varint
containers: []varint
container_id: u8
slots: []varint
slot: u8
hotbar_slot: u8
count: u8
item_stack_id: varint
custom_name: string
ItemComponentList: []varint
# Name is the name of the item, which is a name like 'minecraft:stick'.
name: string
# Data is a map containing the components and properties of the item.
nbt: nbt
CommandOrigin:
# Origin is one of the values above that specifies the origin of the command. The origin may change,
# depending on what part of the client actually called the command. The command may be issued by a
# websocket server, for example.
type: varint =>
0: player
1: block
2: minecart_block
3: dev_console
4: test
5: automation_player
6: client_automation
7: dedicated_server
8: entity
9: virtual
10: game_argument
11: entity_server
# UUID is the UUID of the command called. This UUID is a bit odd as it is not specified by the server. It
# is not clear what exactly this UUID is meant to identify, but it is unique for each command called.
uuid: uuid
# RequestID is an ID that identifies the request of the client. The server should send a CommandOrigin
# with the same request ID to ensure it can be matched with the request by the caller of the command.
# This is especially important for websocket servers and it seems that this field is only non-empty for
# these websocket servers.
request_id: string
# PlayerUniqueID is an ID that identifies the player, the same as the one found in the AdventureSettings
# packet. Filling it out with 0 seems to work.
# PlayerUniqueID is only written if Origin is CommandOriginDevConsole or CommandOriginTest.
player_entity_id: type?
if dev_console or test:
player_entity_id: zigzag64
# Some arbitrary definitions from CBMC, Window IDs are normally
# unique + sequential
WindowID: i8 =>
-100: drop_contents
-24: beacon
-23: trading_output
-22: trading_use_inputs
-21: trading_input_2
-20: trading_input_1
-17: enchant_output
-16: enchant_material
-15: enchant_input
-13: anvil_output
-12: anvil_result
-11: anvil_material
-10: container_input
-5: crafting_use_ingredient
-4: crafting_result
-3: crafting_remove_ingredient
-2: crafting_add_ingredient
-1: none
0: inventory
1: first
100: last
119: offhand
120: armor
121: creative
122: hotbar
123: fixed_inventory
124: ui
WindowIDVarint: varint =>
-100: drop_contents
-24: beacon
-23: trading_output
-22: trading_use_inputs
-21: trading_input_2
-20: trading_input_1
-17: enchant_output
-16: enchant_material
-15: enchant_input
-13: anvil_output
-12: anvil_result
-11: anvil_material
-10: container_input
-5: crafting_use_ingredient
-4: crafting_result
-3: crafting_remove_ingredient
-2: crafting_add_ingredient
-1: none
0: inventory
1: first
100: last
119: offhand
120: armor
121: creative
122: hotbar
123: fixed_inventory
124: ui
WindowType: u8 =>
0: container
1: workbench
2: furnace
3: enchantment
4: brewing_stand
5: anvil
6: dispenser
7: dropper
8: hopper
9: cauldron
10: minecart_chest
11: minecart_hopper
12: horse
13: beacon
14: structure_editor
15: trading
16: command_block
17: jukebox
18: armor
19: hand
20: compound_creator
21: element_constructor
22: material_reducer
23: lab_table
24: loom
25: lectern
26: grindstone
27: blast_furnace
28: smoker
29: stonecutter
30: cartography
31: hud
32: jigsaw_editor
33: smithing_table
# TODO: remove?
LegacyEntityType: li32 =>
10: chicken
11: cow
12: pig
13: sheep
14: wolf
15: villager
16: mooshroom
17: squid
18: rabbit
19: bat
20: iron_golem
21: snow_golem
22: ocelot
23: horse
24: donkey
25: mule
26: skeleton_horse
27: zombie_horse
28: polar_bear
29: llama
30: parrot
31: dolphin
32: zombie
33: creeper
34: skeleton
35: spider
36: zombie_pigman
37: slime
38: enderman
39: silverfish
40: cave_spider
41: ghast
42: magma_cube
43: blaze
44: zombie_villager
45: witch
46: stray
47: husk
48: wither_skeleton
49: guardian
50: elder_guardian
51: npc
52: wither
53: ender_dragon
54: shulker
55: endermite
56: agent # LEARN_TO_CODE_MASCOT
57: vindicator
58: phantom
61: armor_stand
62: tripod_camera
63: player
64: item
65: tnt
66: falling_block
67: moving_block
68: xp_bottle
69: xp_orb
70: eye_of_ender_signal
71: ender_crystal
72: fireworks_rocket
73: thrown_trident
74: turtle
75: cat
76: shulker_bullet
77: fishing_hook
78: chalkboard
79: dragon_fireball
80: arrow
81: snowball
82: egg
83: painting
84: minecart
85: fireball
86: splash_potion
87: ender_pearl
88: leash_knot
89: wither_skull
90: boat
91: wither_skull_dangerous
93: lightning_bolt
94: small_fireball
95: area_effect_cloud
96: hopper_minecart
97: tnt_minecart
98: chest_minecart
100: command_block_minecart
101: lingering_potion
102: llama_spit
103: evocation_fang
104: evocation_illager
105: vex
106: ice_bomb
107: balloon
108: pufferfish
109: salmon
110: drowned
111: tropicalfish
112: cod
113: panda

View File

@ -0,0 +1,6 @@
{
"version": 422,
"minecraftVersion": "1.16.201",
"majorVersion": "1.16",
"releaseType": "release"
}

View File

@ -0,0 +1,177 @@
[
{
"id": "cursor",
"name": "cursor",
"slots": [
{
"name": "cursor",
"index": 0
}
]
},
{
"id": "armor",
"name": "armor",
"slots": [
{
"name": "armor",
"index": 0,
"size": 4
}
]
},
{
"id": "hand",
"name": "hand",
"slots": [
{
"name": "offhand",
"index": 0
}
]
},
{
"id": "container",
"name": "container",
"slots": [
{
"name": "container",
"index": 0,
"size": 28
}
]
},
{
"id": "inventory",
"name": "Inventory",
"slots": [
{
"name": "hotbar_and_inventory",
"index": 0,
"size": 36
},
{
"name": "inventory",
"index": 9,
"size": 36
},
{
"name": "hotbar",
"index": 0,
"size": 9
}
]
},
{
"id": "workbench",
"name": "Crafting Table",
"slots": [
{
"name": "crafting_input",
"index": 0,
"size": 4
}
]
},
{
"id": "furnace",
"name": "furnace",
"slots": [
{
"name": "furnace_fuel",
"index": 1
},
{
"name": "furnace_ingredient",
"index": 0
}
]
},
{
"id": "enchantment",
"name": "enchantment",
"slots": [
{
"name": "enchanting_lapis",
"index": 15
},
{
"name": "enchanting_input",
"index": 14
}
]
},
{
"id": "brewing_stand",
"name": "brewing_stand",
"slots": [
{
"name": "brewing_input",
"index": 1,
"size": 3
},
{
"name": "brewing_fuel",
"index": 4
}
]
},
{
"id": "anvil",
"name": "anvil",
"slots": [
{
"name": "anvil_input",
"index": 1
},
{
"name": "anvil_material",
"index": 2
}
]
},
{
"id": "dispenser",
"name": "dispenser",
"slots": [
{
"name": "container",
"index": 0,
"size": 9
}
]
},
{
"id": "dropper",
"name": "dropper",
"slots": [
{
"name": "container",
"index": 0,
"size": 9
}
]
},
{
"id": "hopper",
"name": "hopper",
"slots": [
{
"name": "container",
"index": 0,
"size": 4
}
]
},
{
"id": "minecart_hopper",
"name": "minecart_hopper",
"slots": [
{
"name": "container",
"index": 0,
"size": 4
}
]
}
]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
{
"version": 428,
"minecraftVersion": "1.16.210",
"majorVersion": "1.16",
"releaseType": "release"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
{
"version": 431,
"minecraftVersion": "1.16.220",
"majorVersion": "1.16",
"releaseType": "release"
}

View File

@ -0,0 +1,968 @@
[
{
"id": 0,
"name": "ocean",
"category": "ocean",
"precipitation": "rain",
"depth": -1,
"dimension": "overworld",
"displayName": "Ocean",
"color": 112,
"rainfall": 0.5,
"temperature": 0.5
},
{
"id": 1,
"name": "plains",
"category": "plains",
"precipitation": "rain",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Plains",
"color": 9286496,
"rainfall": 0.4000000059604645,
"temperature": 0.800000011920929,
"child": 129
},
{
"id": 2,
"name": "desert",
"category": "desert",
"precipitation": "none",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Desert",
"color": 16421912,
"rainfall": 0,
"temperature": 2,
"child": 130
},
{
"id": 3,
"name": "extreme_hills",
"category": "extreme_hills",
"precipitation": "rain",
"depth": 1,
"dimension": "overworld",
"displayName": "Mountains",
"color": 6316128,
"rainfall": 0.30000001192092896,
"temperature": 0.20000000298023224,
"child": 131
},
{
"id": 4,
"name": "forest",
"category": "forest",
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Forest",
"color": 353825,
"rainfall": 0.800000011920929,
"temperature": 0.699999988079071,
"child": 132
},
{
"id": 5,
"name": "taiga",
"category": "taiga",
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Taiga",
"color": 747097,
"rainfall": 0.800000011920929,
"temperature": 0.25,
"child": 133
},
{
"id": 6,
"name": "swampland",
"category": "swamp",
"precipitation": "rain",
"depth": -0.2,
"dimension": "overworld",
"displayName": "Swamp",
"color": 522674,
"rainfall": 0.5,
"temperature": 0.800000011920929,
"child": 134
},
{
"id": 7,
"name": "river",
"category": "river",
"precipitation": "rain",
"depth": -0.5,
"dimension": "overworld",
"displayName": "River",
"color": 255,
"rainfall": 0.5,
"temperature": 0.5
},
{
"id": 8,
"name": "hell",
"category": "",
"precipitation": "rain",
"depth": 0,
"dimension": "overworld",
"displayName": "hell",
"color": 0,
"rainfall": 0,
"temperature": 2
},
{
"id": 9,
"name": "the_end",
"category": "the_end",
"precipitation": "none",
"depth": 0.1,
"dimension": "end",
"displayName": "The End",
"color": 8421631,
"rainfall": 0.5,
"temperature": 0.5
},
{
"id": 11,
"name": "frozen_river",
"category": "river",
"precipitation": "snow",
"depth": -0.5,
"dimension": "overworld",
"displayName": "Frozen River",
"color": 10526975,
"rainfall": 0.5,
"temperature": 0
},
{
"id": 12,
"name": "ice_plains",
"category": "icy",
"precipitation": "snow",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Snowy Tundra",
"color": 16777215,
"rainfall": 0.5,
"temperature": 0,
"child": 140
},
{
"id": 13,
"name": "ice_mountains",
"category": "icy",
"precipitation": "snow",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Snowy Mountains",
"color": 10526880,
"rainfall": 0.5,
"temperature": 0
},
{
"id": 14,
"name": "mushroom_island",
"category": "mushroom",
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Mushroom Fields",
"color": 16711935,
"rainfall": 1,
"temperature": 0.8999999761581421
},
{
"id": 15,
"name": "mushroom_island_shore",
"category": "mushroom",
"precipitation": "rain",
"depth": 0,
"dimension": "overworld",
"displayName": "Mushroom Fields Shore",
"color": 10486015,
"rainfall": 1,
"temperature": 0.8999999761581421
},
{
"id": 16,
"name": "beach",
"category": "beach",
"precipitation": "rain",
"depth": 0,
"dimension": "overworld",
"displayName": "Beach",
"color": 16440917,
"rainfall": 0.4000000059604645,
"temperature": 0.800000011920929
},
{
"id": 17,
"name": "desert_hills",
"category": "desert",
"precipitation": "none",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Desert Hills",
"color": 13786898,
"rainfall": 0,
"temperature": 2
},
{
"id": 18,
"name": "forest_hills",
"category": "forest",
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Wooded Hills",
"color": 2250012,
"rainfall": 0.800000011920929,
"temperature": 0.699999988079071
},
{
"id": 19,
"name": "taiga_hills",
"category": "taiga",
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Taiga Hills",
"color": 1456435,
"rainfall": 0.800000011920929,
"temperature": 0.25
},
{
"id": 20,
"name": "extreme_hills_edge",
"category": "extreme_hills",
"precipitation": "rain",
"depth": 0.8,
"dimension": "overworld",
"displayName": "Mountain Edge",
"color": 7501978,
"rainfall": 0.30000001192092896,
"temperature": 0.20000000298023224
},
{
"id": 21,
"name": "jungle",
"category": "jungle",
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Jungle",
"color": 5470985,
"rainfall": 0.8999999761581421,
"temperature": 0.949999988079071,
"child": 149
},
{
"id": 22,
"name": "jungle_hills",
"category": "jungle",
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Jungle Hills",
"color": 2900485,
"rainfall": 0.8999999761581421,
"temperature": 0.949999988079071
},
{
"id": 23,
"name": "jungle_edge",
"category": "jungle",
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Jungle Edge",
"color": 6458135,
"rainfall": 0.800000011920929,
"temperature": 0.949999988079071,
"child": 151
},
{
"id": 24,
"name": "deep_ocean",
"category": "ocean",
"precipitation": "rain",
"depth": -1.8,
"dimension": "overworld",
"displayName": "Deep Ocean",
"color": 48,
"rainfall": 0.5,
"temperature": 0.5
},
{
"id": 25,
"name": "stone_beach",
"category": "none",
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Stone Shore",
"color": 10658436,
"rainfall": 0.30000001192092896,
"temperature": 0.20000000298023224
},
{
"id": 26,
"name": "cold_beach",
"category": "beach",
"precipitation": "snow",
"depth": 0,
"dimension": "overworld",
"displayName": "Snowy Beach",
"color": 16445632,
"rainfall": 0.30000001192092896,
"temperature": 0.05000000074505806
},
{
"id": 27,
"name": "birch_forest",
"category": "forest",
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Birch Forest",
"color": 3175492,
"rainfall": 0.6000000238418579,
"temperature": 0.6000000238418579,
"child": 155
},
{
"id": 28,
"name": "birch_forest_hills",
"category": "forest",
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Birch Forest Hills",
"color": 2055986,
"rainfall": 0.6000000238418579,
"temperature": 0.6000000238418579,
"child": 156
},
{
"id": 29,
"name": "roofed_forest",
"category": "forest",
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Dark Forest",
"color": 4215066,
"rainfall": 0.800000011920929,
"temperature": 0.699999988079071,
"child": 157
},
{
"id": 30,
"name": "cold_taiga",
"category": "taiga",
"precipitation": "snow",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Snowy Taiga",
"color": 3233098,
"rainfall": 0.4000000059604645,
"temperature": -0.5,
"child": 158
},
{
"id": 31,
"name": "cold_taiga_hills",
"category": "taiga",
"precipitation": "snow",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Snowy Taiga Hills",
"color": 2375478,
"rainfall": 0.4000000059604645,
"temperature": -0.5
},
{
"id": 32,
"name": "mega_taiga",
"category": "taiga",
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Giant Tree Taiga",
"color": 5858897,
"rainfall": 0.800000011920929,
"temperature": 0.30000001192092896,
"child": 160
},
{
"id": 33,
"name": "mega_taiga_hills",
"category": "taiga",
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Giant Tree Taiga Hills",
"color": 4542270,
"rainfall": 0.800000011920929,
"temperature": 0.30000001192092896,
"child": 161
},
{
"id": 34,
"name": "extreme_hills_plus_trees",
"category": "extreme_hills",
"precipitation": "rain",
"depth": 1,
"dimension": "overworld",
"displayName": "Wooded Mountains",
"color": 5271632,
"rainfall": 0.30000001192092896,
"temperature": 0.20000000298023224,
"child": 162
},
{
"id": 35,
"name": "savanna",
"category": "savanna",
"precipitation": "none",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Savanna",
"color": 12431967,
"rainfall": 0,
"temperature": 1.2000000476837158,
"child": 163
},
{
"id": 36,
"name": "savanna_plateau",
"category": "savanna",
"precipitation": "none",
"depth": 1.5,
"dimension": "overworld",
"displayName": "Savanna Plateau",
"color": 10984804,
"rainfall": 0,
"temperature": 1,
"child": 164
},
{
"id": 37,
"name": "mesa",
"category": "mesa",
"precipitation": "none",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Badlands",
"color": 14238997,
"rainfall": 0,
"temperature": 2,
"child": 165
},
{
"id": 38,
"name": "mesa_plateau_stone",
"category": "mesa",
"precipitation": "none",
"depth": 1.5,
"dimension": "overworld",
"displayName": "Wooded Badlands Plateau",
"color": 11573093,
"rainfall": 0,
"temperature": 2,
"child": 166
},
{
"id": 39,
"name": "mesa_plateau",
"category": "mesa",
"precipitation": "none",
"depth": 1.5,
"dimension": "overworld",
"displayName": "Badlands Plateau",
"color": 13274213,
"rainfall": 0,
"temperature": 2,
"child": 167
},
{
"id": 40,
"name": "warm_ocean",
"category": "ocean",
"precipitation": "rain",
"depth": -1,
"dimension": "overworld",
"displayName": "Warm Ocean",
"color": 172,
"rainfall": 0.5,
"temperature": 0.5
},
{
"id": 41,
"name": "deep_warm_ocean",
"category": "ocean",
"precipitation": "rain",
"depth": -1.8,
"dimension": "overworld",
"displayName": "Deep Warm Ocean",
"color": 80,
"rainfall": 0.5,
"temperature": 0.5
},
{
"id": 42,
"name": "lukewarm_ocean",
"category": "ocean",
"precipitation": "rain",
"depth": -1,
"dimension": "overworld",
"displayName": "Lukewarm Ocean",
"color": 144,
"rainfall": 0.5,
"temperature": 0.5
},
{
"id": 43,
"name": "deep_lukewarm_ocean",
"category": "ocean",
"precipitation": "rain",
"depth": -1.8,
"dimension": "overworld",
"displayName": "Deep Lukewarm Ocean",
"color": 64,
"rainfall": 0.5,
"temperature": 0.5
},
{
"id": 44,
"name": "cold_ocean",
"category": "ocean",
"precipitation": "rain",
"depth": -1,
"dimension": "overworld",
"displayName": "Cold Ocean",
"color": 2105456,
"rainfall": 0.5,
"temperature": 0.5
},
{
"id": 45,
"name": "deep_cold_ocean",
"category": "ocean",
"precipitation": "rain",
"depth": -1.8,
"dimension": "overworld",
"displayName": "Deep Cold Ocean",
"color": 2105400,
"rainfall": 0.5,
"temperature": 0.5
},
{
"id": 46,
"name": "frozen_ocean",
"category": "ocean",
"precipitation": "snow",
"depth": -1,
"dimension": "overworld",
"displayName": "Frozen Ocean",
"color": 7368918,
"rainfall": 0.5,
"temperature": 0
},
{
"id": 47,
"name": "deep_frozen_ocean",
"category": "ocean",
"precipitation": "rain",
"depth": -1.8,
"dimension": "overworld",
"displayName": "Deep Frozen Ocean",
"color": 4210832,
"rainfall": 0.5,
"temperature": 0
},
{
"id": 48,
"name": "bamboo_jungle",
"category": "jungle",
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Bamboo Jungle",
"color": 7769620,
"rainfall": 0.8999999761581421,
"temperature": 0.949999988079071
},
{
"id": 49,
"name": "bamboo_jungle_hills",
"category": "jungle",
"precipitation": "rain",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Bamboo Jungle Hills",
"color": 3884810,
"rainfall": 0.8999999761581421,
"temperature": 0.949999988079071
},
{
"id": 129,
"name": "sunflower_plains",
"category": "plains",
"precipitation": "rain",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Sunflower Plains",
"color": 11918216,
"rainfall": 0.4000000059604645,
"temperature": 0.800000011920929,
"parent": "plains"
},
{
"id": 130,
"name": "desert_mutated",
"category": "desert",
"precipitation": "none",
"depth": 0.125,
"dimension": "overworld",
"displayName": "Desert Lakes",
"color": 16759872,
"rainfall": 0,
"temperature": 2,
"parent": "desert"
},
{
"id": 131,
"name": "extreme_hills_mutated",
"category": "extreme_hills",
"precipitation": "rain",
"depth": 1,
"dimension": "overworld",
"displayName": "Gravelly Mountains",
"color": 8947848,
"rainfall": 0.30000001192092896,
"temperature": 0.20000000298023224,
"parent": "mountains"
},
{
"id": 132,
"name": "flower_forest",
"category": "forest",
"precipitation": "rain",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Flower Forest",
"color": 2985545,
"rainfall": 0.800000011920929,
"temperature": 0.699999988079071,
"parent": "forest"
},
{
"id": 133,
"name": "taiga_mutated",
"category": "taiga",
"precipitation": "rain",
"depth": 0.3,
"dimension": "overworld",
"displayName": "Taiga Mountains",
"color": 3378817,
"rainfall": 0.800000011920929,
"temperature": 0.25,
"parent": "taiga"
},
{
"id": 134,
"name": "swampland_mutated",
"category": "swamp",
"precipitation": "rain",
"depth": -0.1,
"dimension": "overworld",
"displayName": "Swamp Hills",
"color": 3145690,
"rainfall": 0.5,
"temperature": 0.800000011920929,
"parent": "swamp"
},
{
"id": 140,
"name": "ice_plains_spikes",
"category": "icy",
"precipitation": "snow",
"depth": 0.425,
"dimension": "overworld",
"displayName": "Ice Spikes",
"color": 11853020,
"rainfall": 1,
"temperature": 0,
"parent": "snowy_tundra"
},
{
"id": 149,
"name": "jungle_mutated",
"category": "jungle",
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Modified Jungle",
"color": 8102705,
"rainfall": 0.8999999761581421,
"temperature": 0.949999988079071,
"parent": "jungle"
},
{
"id": 151,
"name": "jungle_edge_mutated",
"category": "jungle",
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Modified Jungle Edge",
"color": 9089855,
"rainfall": 0.800000011920929,
"temperature": 0.949999988079071,
"parent": "jungle_edge"
},
{
"id": 155,
"name": "birch_forest_mutated",
"category": "forest",
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Tall Birch Forest",
"color": 5807212,
"rainfall": 0.800000011920929,
"temperature": 0.699999988079071,
"parent": "birch_forest"
},
{
"id": 156,
"name": "birch_forest_hills_mutated",
"category": "forest",
"precipitation": "rain",
"depth": 0.55,
"dimension": "overworld",
"displayName": "Tall Birch Hills",
"color": 4687706,
"rainfall": 0.800000011920929,
"temperature": 0.699999988079071,
"parent": "birch_forest_hills"
},
{
"id": 157,
"name": "roofed_forest_mutated",
"category": "forest",
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Dark Forest Hills",
"color": 6846786,
"rainfall": 0.800000011920929,
"temperature": 0.699999988079071,
"parent": "dark_forest"
},
{
"id": 158,
"name": "cold_taiga_mutated",
"category": "taiga",
"precipitation": "snow",
"depth": 0.3,
"dimension": "overworld",
"displayName": "Snowy Taiga Mountains",
"color": 5864818,
"rainfall": 0.4000000059604645,
"temperature": -0.5,
"parent": "snowy_taiga"
},
{
"id": 160,
"name": "redwood_taiga_mutated",
"category": "taiga",
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Giant Spruce Taiga",
"color": 8490617,
"rainfall": 0.800000011920929,
"temperature": 0.25,
"parent": "giant_tree_taiga"
},
{
"id": 161,
"name": "redwood_taiga_hills_mutated",
"category": "taiga",
"precipitation": "rain",
"depth": 0.2,
"dimension": "overworld",
"displayName": "Giant Spruce Taiga Hills",
"color": 7173990,
"rainfall": 0.800000011920929,
"temperature": 0.30000001192092896,
"parent": "giant_tree_taiga_hills"
},
{
"id": 162,
"name": "extreme_hills_plus_trees_mutated",
"category": "extreme_hills",
"precipitation": "rain",
"depth": 1,
"dimension": "overworld",
"displayName": "Gravelly Mountains+",
"color": 7903352,
"rainfall": 0.30000001192092896,
"temperature": 0.20000000298023224,
"parent": "wooded_mountains"
},
{
"id": 163,
"name": "savanna_mutated",
"category": "savanna",
"precipitation": "none",
"depth": 0.3625,
"dimension": "overworld",
"displayName": "Shattered Savanna",
"color": 15063687,
"rainfall": 0.5,
"temperature": 1.100000023841858,
"parent": "savanna"
},
{
"id": 164,
"name": "savanna_plateau_mutated",
"category": "savanna",
"precipitation": "none",
"depth": 1.05,
"dimension": "overworld",
"displayName": "Shattered Savanna Plateau",
"color": 13616524,
"rainfall": 0.5,
"temperature": 1,
"parent": "savanna_plateau"
},
{
"id": 165,
"name": "mesa_bryce",
"category": "mesa",
"precipitation": "none",
"depth": 0.1,
"dimension": "overworld",
"displayName": "Eroded Badlands",
"color": 16739645,
"rainfall": 0,
"temperature": 2,
"parent": "badlands"
},
{
"id": 166,
"name": "mesa_plateau_stone_mutated",
"category": "mesa",
"precipitation": "none",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Modified Wooded Badlands Plateau",
"color": 14204813,
"rainfall": 0,
"temperature": 2,
"parent": "wooded_badlands_plateau"
},
{
"id": 167,
"name": "mesa_plateau_mutated",
"category": "mesa",
"precipitation": "none",
"depth": 0.45,
"dimension": "overworld",
"displayName": "Modified Badlands Plateau",
"color": 15905933,
"rainfall": 0,
"temperature": 2,
"parent": "badlands_plateau"
},
{
"id": 178,
"name": "soulsand_valley",
"category": "nether",
"precipitation": "none",
"depth": 0.1,
"dimension": "nether",
"displayName": "Soul Sand Valley",
"color": 6174768,
"rainfall": 0,
"temperature": 2,
"climates": [
{
"temperature": 0,
"humidity": -0.5,
"altitude": 0,
"weirdness": 0,
"offset": 0
}
]
},
{
"id": 179,
"name": "crimson_forest",
"category": "nether",
"precipitation": "none",
"depth": 0.1,
"dimension": "nether",
"displayName": "Crimson Forest",
"color": 14485512,
"rainfall": 0,
"temperature": 2,
"climates": [
{
"temperature": 0.4,
"humidity": 0,
"altitude": 0,
"weirdness": 0,
"offset": 0
}
]
},
{
"id": 180,
"name": "warped_forest",
"category": "nether",
"precipitation": "none",
"depth": 0.1,
"dimension": "nether",
"displayName": "Warped Forest",
"color": 4821115,
"rainfall": 0,
"temperature": 2,
"climates": [
{
"temperature": 0,
"humidity": 0.5,
"altitude": 0,
"weirdness": 0,
"offset": 0.375
}
]
},
{
"id": 181,
"name": "basalt_deltas",
"category": "nether",
"precipitation": "none",
"depth": 0.1,
"dimension": "nether",
"displayName": "Basalt Deltas",
"color": 4208182,
"rainfall": 0,
"temperature": 2,
"climates": [
{
"temperature": -0.5,
"humidity": 0,
"altitude": 0,
"weirdness": 0,
"offset": 0.175
}
]
}
]

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,82 @@
[
{
"id": 0,
"sound": "note.harp",
"name": "harp"
},
{
"id": 1,
"sound": "note.bd",
"name": "basedrum"
},
{
"id": 2,
"sound": "note.snare",
"name": "snare"
},
{
"id": 3,
"sound": "note.hat",
"name": "hat"
},
{
"id": 4,
"sound": "note.bass",
"name": "bass"
},
{
"id": 5,
"sound": "note.flute",
"name": "flute"
},
{
"id": 6,
"sound": "note.bell",
"name": "bell"
},
{
"id": 7,
"sound": "note.guitar",
"name": "guiter"
},
{
"id": 8,
"sound": "note.chime",
"name": "chime"
},
{
"id": 9,
"sound": "note.xylophone",
"name": "xylophone"
},
{
"id": 10,
"sound": "note.iron_xylophone",
"name": "iron_xylophone"
},
{
"id": 11,
"sound": "note.cow_bell",
"name": "cow_bell"
},
{
"id": 12,
"sound": "note.didgeridoo",
"name": "didgeridoo"
},
{
"id": 13,
"sound": "note.bit",
"name": "bit"
},
{
"id": 14,
"sound": "note.banjo",
"name": "banjo"
},
{
"id": 15,
"sound": "note.pling",
"name": "pling"
}
]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
{
"version": 440,
"minecraftVersion": "1.17.0",
"majorVersion": "1.17",
"releaseType": "release"
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
{
"version": 448,
"minecraftVersion": "1.17.10",
"majorVersion": "1.17",
"releaseType": "release"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
{
"version": 465,
"minecraftVersion": "1.17.30",
"majorVersion": "1.17",
"releaseType": "release"
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
{
"version": 471,
"minecraftVersion": "1.17.40",
"majorVersion": "1.17",
"releaseType": "release"
}

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More