next release (#145)

This commit is contained in:
Vitaly 2024-06-15 04:53:05 +03:00 committed by GitHub
commit 7220e3921f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
135 changed files with 3487 additions and 356 deletions

View file

@ -96,5 +96,22 @@
"unicorn/filename-case": "off",
"max-depth": "off"
},
"overrides": [
{
"files": [
"*.js"
],
"rules": {
"space-before-function-paren": [
"error",
{
"anonymous": "always",
"named": "never",
"asyncArrow": "always"
}
]
}
}
],
"root": true
}

View file

@ -8,6 +8,11 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@master
- name: Setup Java JDK
uses: actions/setup-java@v1.4.3
with:
java-version: 17
java-package: jre
- name: Install pnpm
run: npm i -g pnpm@9.0.4
- uses: actions/setup-node@v4

1
.gitignore vendored
View file

@ -17,5 +17,6 @@ out
.vercel
generated
storybook-static
server-jar
src/react/npmReactComponents.ts

View file

@ -24,7 +24,7 @@ const App = () => {
}
```
See [Storybook](https://mcraft.fun/storybook/) or [Storybook (Mirror link)](https://mcon.vercel.app/storybook/) for more examples and full components list. Also take a look at the full [standalone example](https://github.com/zardoy/prismarine-web-client/tree/experiments/UiStandaloneExample.tsx).
See [Storybook](https://mcraft.fun/storybook/) or [Storybook (Mirror link)](https://mcon.vercel.app/storybook/) for more examples and full components list. Also take a look at the full [standalone example](https://github.com/zardoy/minecraft-web-client/tree/experiments/UiStandaloneExample.tsx).
There are two types of components:

View file

@ -15,9 +15,9 @@
"description": "One of the best servers here. Join now!"
},
{
"ip": "play.minemalia.com",
"ip": "sus.shhnowisnottheti.me",
"version": "1.18.2",
"description": "Only login with existing accounts."
"description": "Creative, your own 'boxes' (islands)"
}
]
}

View file

@ -1,4 +1,6 @@
/* eslint-disable max-nested-callbacks */
/// <reference types="cypress" />
import supportedVersions from '../../src/supportedVersions.mjs'
import { setOptions, cleanVisit, visit } from './shared'
// todo use ssl
@ -12,7 +14,7 @@ const compareRenderedFlatWorld = () => {
}
const testWorldLoad = () => {
cy.document().then({ timeout: 20_000 }, doc => {
return cy.document().then({ timeout: 20_000 }, doc => {
return new Cypress.Promise(resolve => {
doc.addEventListener('cypress-world-ready', resolve)
})
@ -36,7 +38,7 @@ it('Loads & renders singleplayer', () => {
testWorldLoad()
})
it('Joins to server', () => {
it('Joins to local flying-squid server', () => {
visit('/?ip=localhost&version=1.16.1')
window.localStorage.version = ''
// todo replace with data-test
@ -47,9 +49,60 @@ it('Joins to server', () => {
testWorldLoad()
})
it('Joins to local latest Java vanilla server', () => {
const version = supportedVersions.at(-1)!
cy.task('startServer', [version, 25_590]).then(() => {
visit('/?ip=localhost:25590&username=bot')
cy.get('[data-test-id="connect-qs"]').click()
testWorldLoad().then(() => {
let x = 0
let z = 0
cy.window().then((win) => {
x = win.bot.entity.position.x
z = win.bot.entity.position.z
})
cy.document().trigger('keydown', { code: 'KeyW' })
cy.wait(1500).then(() => {
cy.document().trigger('keyup', { code: 'KeyW' })
cy.window().then(async (win) => {
// eslint-disable-next-line prefer-destructuring
const bot: typeof __type_bot = win.bot
// todo use f3 stats instead
if (bot.entity.position.x === x && bot.entity.position.z === z) {
throw new Error('Player not moved')
}
bot.chat('Hello') // todo assert
bot.chat('/gamemode creative')
// bot.on('message', () => {
void bot.creative.setInventorySlot(bot.inventory.hotbarStart, new win.PrismarineItem(1, 1, 0))
// })
await bot.lookAt(bot.entity.position.offset(1, 0, 1))
}).then(() => {
cy.document().trigger('mousedown', { button: 2, isTrusted: true, force: true }) // right click
cy.document().trigger('mouseup', { button: 2, isTrusted: true, force: true })
cy.wait(1000)
})
})
})
})
})
it('Loads & renders zip world', () => {
cleanVisit()
cy.get('[data-test-id="select-file-folder"]').click({ shiftKey: true })
cy.get('input[type="file"]').selectFile('cypress/superflat.zip', { force: true })
testWorldLoad()
})
it.skip('Loads & renders world from folder', () => {
cleanVisit()
// dragndrop folder
cy.get('[data-test-id="select-file-folder"]').click()
cy.get('input[type="file"]').selectFile('server-jar/world', {
force: true,
// action: 'drag-drop',
})
testWorldLoad()
})

View file

@ -3,6 +3,9 @@ import { AppOptions } from '../../src/optionsStorage'
export const cleanVisit = (url?) => {
cy.clearLocalStorage()
visit(url)
window.localStorage.options = {
chatOpacity: 0
}
}
export const visit = (url = '/') => {
window.localStorage.cypress = 'true'

View file

@ -2,11 +2,13 @@
const { cypressEsbuildPreprocessor } = require('cypress-esbuild-preprocessor')
const { initPlugin } = require('cypress-plugin-snapshots/plugin')
const polyfill = require('esbuild-plugin-polyfill-node')
const { startMinecraftServer } = require('./startServer')
module.exports = (on, config) => {
initPlugin(on, config)
on('file:preprocessor', cypressEsbuildPreprocessor({
esbuildOptions: {
sourcemap: true,
plugins: [
polyfill.polyfillNode({
polyfills: {
@ -17,10 +19,15 @@ module.exports = (on, config) => {
},
}))
on('task', {
log (message) {
log(message) {
console.log(message)
return null
},
})
on('task', {
async startServer([version, port]) {
return startMinecraftServer(version, port)
}
})
return config
}

8
cypress/plugins/ops.json Normal file
View file

@ -0,0 +1,8 @@
[
{
"uuid": "67128b5b-2e6b-3ad1-baa0-1b937b03e5c5",
"name": "bot",
"level": 4,
"bypassesPlayerLimit": false
}
]

View file

@ -0,0 +1,61 @@
#Minecraft server properties
allow-flight=false
allow-nether=true
broadcast-console-to-ops=true
broadcast-rcon-to-ops=true
difficulty=peaceful
enable-command-block=false
enable-jmx-monitoring=false
enable-query=false
enable-rcon=false
enable-status=true
enforce-secure-profile=true
enforce-whitelist=false
entity-broadcast-range-percentage=100
force-gamemode=false
function-permission-level=2
gamemode=survival
generate-structures=true
generator-settings={}
hardcore=false
hide-online-players=false
initial-disabled-packs=
initial-enabled-packs=vanilla
level-name=world
level-seed=
level-type=flat
log-ips=true
max-build-height=256
max-chained-neighbor-updates=1000000
max-players=20
max-tick-time=60000
max-world-size=29999984
motd=A Minecraft Server
network-compression-threshold=256
online-mode=false
op-permission-level=4
player-idle-timeout=0
prevent-proxy-connections=false
pvp=true
query.port=25565
rate-limit=0
rcon.password=
rcon.port=25575
require-resource-pack=false
resource-pack=
resource-pack-id=
resource-pack-prompt=
resource-pack-sha1=
server-ip=
server-port=25565
simulation-distance=10
snooper-enabled=true
spawn-animals=true
spawn-monsters=true
spawn-npcs=true
spawn-protection=16
sync-chunk-writes=true
text-filtering-config=
use-native-transport=true
view-distance=10
white-list=false

View file

@ -0,0 +1,45 @@
import { ChildProcess, spawn } from 'child_process'
import * as fs from 'fs'
import * as path from 'path'
import { promisify } from 'util'
import { downloadServer } from 'minecraft-wrap'
import * as waitOn from 'wait-on'
let prevProcess: ChildProcess | null = null
export const startMinecraftServer = async (version: string, port: number) => {
if (prevProcess) return null
const jar = `./server-jar/${version}.jar`
const start = () => {
// if (prevProcess) {
// prevProcess.kill()
// }
prevProcess = spawn('java', ['-jar', path.basename(jar), 'nogui', '--port', `${port}`], {
stdio: 'inherit',
cwd: path.dirname(jar),
})
}
let coldStart = false
if (fs.existsSync(jar)) {
start()
} else {
coldStart = true
promisify(downloadServer)(version, jar).then(() => {
// add eula.txt
fs.writeFileSync(path.join(path.dirname(jar), 'eula.txt'), 'eula=true')
// copy cypress/plugins/server.properties
fs.copyFileSync(path.join(__dirname, 'server.properties'), path.join(path.dirname(jar), 'server.properties'))
// copy ops.json
fs.copyFileSync(path.join(__dirname, 'ops.json'), path.join(path.dirname(jar), 'ops.json'))
start()
})
}
return new Promise<null>((res) => {
waitOn({ resources: [`tcp:localhost:${port}`] }, () => {
setTimeout(() => res(null), coldStart ? 6500 : 2000) // todo retry instead of timeout
})
})
}

View file

@ -14,7 +14,7 @@
</div>
<div>
<div style="font-size: calc(var(--font-size) * 1.8);color: lightgray;" class="title">Loading...</div>
<div style="font-size: var(--font-size);color: rgb(176, 176, 176);" class="subtitle">A true Minecraft client in your browser!</div>
<div style="font-size: var(--font-size);color: rgb(176, 176, 176);margin-top: 3px;text-align: center" class="subtitle">A true Minecraft client in your browser!</div>
</div>
</div>
`

View file

@ -1,5 +1,5 @@
{
"name": "prismarine-web-client",
"name": "minecraft-web-client",
"version": "0.0.0-dev",
"description": "A minecraft client running in a browser",
"scripts": {
@ -63,7 +63,7 @@
"esbuild-plugin-polyfill-node": "^0.3.0",
"express": "^4.18.2",
"filesize": "^10.0.12",
"flying-squid": "npm:@zardoy/flying-squid@^0.0.24",
"flying-squid": "npm:@zardoy/flying-squid@^0.0.29",
"fs-extra": "^11.1.1",
"google-drive-browserfs": "github:zardoy/browserfs#google-drive",
"iconify-icon": "^1.0.8",
@ -100,6 +100,7 @@
"use-typed-event-listener": "^4.0.2",
"valtio": "^1.11.1",
"vec3": "^0.1.7",
"wait-on": "^7.2.0",
"workbox-build": "^7.0.0"
},
"devDependencies": {
@ -113,6 +114,7 @@
"@types/stats.js": "^0.17.1",
"@types/three": "0.154.0",
"@types/ua-parser-js": "^0.7.39",
"@types/wait-on": "^5.3.4",
"@xmcl/installer": "^5.1.0",
"assert": "^2.0.0",
"browserify-zlib": "^0.2.0",

View file

@ -26,7 +26,7 @@
},
"module": "./dist/react/npmReactComponents.js",
"types": "./dist/react/npmReactComponents.d.ts",
"repository": "zardoy/prismarine-web-client",
"repository": "zardoy/minecraft-web-client",
"version": "0.0.0-dev",
"dependencies": {},
"peerDependencies": {

225
pnpm-lock.yaml generated
View file

@ -104,8 +104,8 @@ importers:
specifier: ^10.0.12
version: 10.0.12
flying-squid:
specifier: npm:@zardoy/flying-squid@^0.0.24
version: '@zardoy/flying-squid@0.0.24(encoding@0.1.13)'
specifier: npm:@zardoy/flying-squid@^0.0.29
version: '@zardoy/flying-squid@0.0.29(encoding@0.1.13)'
fs-extra:
specifier: ^11.1.1
version: 11.1.1
@ -150,7 +150,7 @@ importers:
version: 6.1.1
prismarine-provider-anvil:
specifier: github:zardoy/prismarine-provider-anvil#everything
version: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.65.0)
version: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0228b5252f48a0d6ad7f36d7189851c427fbe8c4(minecraft-data@3.65.0)
prosemirror-example-setup:
specifier: ^1.2.2
version: 1.2.2
@ -214,6 +214,9 @@ importers:
vec3:
specifier: ^0.1.7
version: 0.1.8
wait-on:
specifier: ^7.2.0
version: 7.2.0(debug@4.3.4)
workbox-build:
specifier: ^7.0.0
version: 7.0.0(@types/babel__core@7.20.2)
@ -252,6 +255,9 @@ importers:
'@types/ua-parser-js':
specifier: ^0.7.39
version: 0.7.39
'@types/wait-on':
specifier: ^5.3.4
version: 5.3.4
'@xmcl/installer':
specifier: ^5.1.0
version: 5.1.0
@ -299,10 +305,10 @@ importers:
version: 1.0.0
minecraft-inventory-gui:
specifier: github:zardoy/minecraft-inventory-gui#next
version: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/200902aca941475e7feb610070e662b172a000b5(@types/react@18.2.20)(react@18.2.0)
version: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/b424a566723067d0fb1a4bd70c1fb58a922f2ba4(@types/react@18.2.20)(react@18.2.0)
mineflayer:
specifier: github:zardoy/mineflayer
version: https://codeload.github.com/zardoy/mineflayer/tar.gz/06061e07fe6b9716cb1801d4c1bf232581977192(encoding@0.1.13)
version: https://codeload.github.com/zardoy/mineflayer/tar.gz/a4b1b4ba7f8c972cee9c0a16eb1191ff4d21fe23(encoding@0.1.13)
mineflayer-pathfinder:
specifier: ^2.4.4
version: 2.4.4
@ -383,10 +389,10 @@ importers:
version: 1.3.6
prismarine-block:
specifier: github:zardoy/prismarine-block#next-era
version: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0
version: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8
prismarine-chunk:
specifier: github:zardoy/prismarine-chunk
version: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0)
version: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3(minecraft-data@3.65.0)
prismarine-schematic:
specifier: ^1.2.0
version: 1.2.3
@ -1697,6 +1703,12 @@ packages:
'@gar/promisify@1.1.3':
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
'@hapi/hoek@9.3.0':
resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
'@hapi/topo@5.1.0':
resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==}
'@humanwhocodes/config-array@0.11.11':
resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==}
engines: {node: '>=10.10.0'}
@ -2378,6 +2390,15 @@ packages:
'@rushstack/eslint-patch@1.4.0':
resolution: {integrity: sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==}
'@sideway/address@4.1.5':
resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==}
'@sideway/formula@3.0.1':
resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==}
'@sideway/pinpoint@2.0.0':
resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==}
'@sinclair/typebox@0.27.8':
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
@ -2784,9 +2805,6 @@ packages:
'@types/node@16.18.58':
resolution: {integrity: sha512-YGncyA25/MaVtQkjWW9r0EFBukZ+JulsLcVZBlGUfIb96OBMjkoRWwQo5IEWJ8Fj06Go3GHw+bjYDitv6BaGsA==}
'@types/node@20.11.19':
resolution: {integrity: sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==}
'@types/node@20.12.8':
resolution: {integrity: sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==}
@ -2880,6 +2898,9 @@ packages:
'@types/unist@3.0.2':
resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==}
'@types/wait-on@5.3.4':
resolution: {integrity: sha512-EBsPjFMrFlMbbUFf9D1Fp+PAB2TwmUn7a3YtHyD9RLuTIk1jDd8SxXVAoez2Ciy+8Jsceo2MYEYZzJ/DvorOKw==}
'@types/webxr@0.5.7':
resolution: {integrity: sha512-Rcgs5c2eNFnHp53YOjgtKfl/zWX1Y+uFGUwlSXrWcZWu3yhANRezmph4MninmqybUYT6g9ZE0aQ9QIdPkLR3Kg==}
@ -3054,8 +3075,8 @@ packages:
resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==}
engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
'@zardoy/flying-squid@0.0.24':
resolution: {integrity: sha512-C+VNHyh9yYB7aG9OL6r9NR5bF73fyRQ0rHhkvvz901hLBZI3+5nOPdcA6XwJm9XX9BYStXbLTHp6shmo20JRHQ==}
'@zardoy/flying-squid@0.0.29':
resolution: {integrity: sha512-E5Nk1gMeH+fAHM5aJY8kIxjBS/zuPtPD6QPeZg+laPV5H58Jx3Et17clF1zC9MT2wyFQ5wi5uTnfdGBTpSEqHw==}
engines: {node: '>=8'}
hasBin: true
@ -3342,6 +3363,9 @@ packages:
axios@0.21.4:
resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==}
axios@1.7.2:
resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==}
babel-core@7.0.0-bridge.0:
resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==}
peerDependencies:
@ -4097,8 +4121,8 @@ packages:
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
diamond-square@https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687:
resolution: {tarball: https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687}
diamond-square@https://codeload.github.com/zardoy/diamond-square/tar.gz/4bbe28dcad35403abaa925055e91f601a61b9015:
resolution: {tarball: https://codeload.github.com/zardoy/diamond-square/tar.gz/4bbe28dcad35403abaa925055e91f601a61b9015}
version: 1.3.0
diff-sequences@29.6.3:
@ -5518,6 +5542,9 @@ packages:
jimp@0.10.3:
resolution: {integrity: sha512-meVWmDMtyUG5uYjFkmzu0zBgnCvvxwWNi27c4cg55vWNVC9ES4Lcwb+ogx+uBBQE3Q+dLKjXaLl0JVW+nUNwbQ==}
joi@17.13.1:
resolution: {integrity: sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==}
jose@4.15.5:
resolution: {integrity: sha512-jc7BFxgKPKi94uOvEmzlSWFFe2+vASyXaKUpdQKatWAESU2MWjDfFf0fdfc83CDKcA5QecabZeNLyfhe3yKNkg==}
@ -6035,8 +6062,8 @@ packages:
minecraft-folder-path@1.2.0:
resolution: {integrity: sha512-qaUSbKWoOsH9brn0JQuBhxNAzTDMwrOXorwuRxdJKKKDYvZhtml+6GVCUrY5HRiEsieBEjCUnhVpDuQiKsiFaw==}
minecraft-inventory-gui@https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/200902aca941475e7feb610070e662b172a000b5:
resolution: {tarball: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/200902aca941475e7feb610070e662b172a000b5}
minecraft-inventory-gui@https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/b424a566723067d0fb1a4bd70c1fb58a922f2ba4:
resolution: {tarball: https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/b424a566723067d0fb1a4bd70c1fb58a922f2ba4}
version: 1.0.1
minecraft-protocol@https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc:
@ -6067,8 +6094,8 @@ packages:
resolution: {integrity: sha512-QMMNPx4IyZE7ydAzjvGLQLCnQNUOfkk1qVZKxTTS9q3qPTAewz4GhsVUBtbQ8LSbHthe5RcQ1Sgxs4wlIma/Qw==}
engines: {node: '>=18'}
mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/06061e07fe6b9716cb1801d4c1bf232581977192:
resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/06061e07fe6b9716cb1801d4c1bf232581977192}
mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/a4b1b4ba7f8c972cee9c0a16eb1191ff4d21fe23:
resolution: {tarball: https://codeload.github.com/zardoy/mineflayer/tar.gz/a4b1b4ba7f8c972cee9c0a16eb1191ff4d21fe23}
version: 4.20.1
engines: {node: '>=18'}
@ -6708,23 +6735,15 @@ packages:
minecraft-data: 3.65.0
prismarine-registry: ^1.1.0
prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0:
resolution: {tarball: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0}
prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8:
resolution: {tarball: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8}
version: 1.17.1
prismarine-chat@1.10.1:
resolution: {integrity: sha512-XukYcuueuhDxzEXG7r8BZyt6jOObrPPB4JESCgb+/XenB9nExoSHF8eTQWWj8faKPLqm1dRQaYwFJlNBlJZJUw==}
prismarine-chat@1.9.1:
resolution: {integrity: sha512-x7WWa5MNhiLZSO6tw+YyKpzquFZ+DNISVgiV6K3SU0GsishMXe+nto02WhF/4AuFerKdugm9u1d/r4C4zSkJOg==}
prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16:
resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16}
version: 1.35.0
engines: {node: '>=14'}
prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f:
resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f}
prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3:
resolution: {tarball: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3}
version: 1.35.0
engines: {node: '>=14'}
@ -6743,9 +6762,9 @@ packages:
prismarine-physics@1.8.0:
resolution: {integrity: sha512-gbM+S+bmVtOKVv+Z0WGaHMeEeBHISIDsRDRlv8sr0dex3ZJRhuq8djA02CBreguXtI18ZKh6q3TSj2qDr45NHA==}
prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29:
resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29}
version: 2.7.0
prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0228b5252f48a0d6ad7f36d7189851c427fbe8c4:
resolution: {tarball: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0228b5252f48a0d6ad7f36d7189851c427fbe8c4}
version: 2.8.0
prismarine-realms@1.3.2:
resolution: {integrity: sha512-5apl9Ru8veTj5q2OozRc4GZOuSIcs3yY4UEtALiLKHstBe8bRw8vNlaz4Zla3jsQ8yP/ul1b1IJINTRbocuA6g==}
@ -6764,9 +6783,9 @@ packages:
prismarine-windows@2.9.0:
resolution: {integrity: sha512-fm4kOLjGFPov7TEJRmXHoiPabxIQrG36r2mDjlNxfkcLfMHFb3/1ML6mp4iRQa7wL0GK4DIAyiBqCWoeWDxARg==}
prismarine-world@https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465:
resolution: {tarball: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465}
version: 3.6.2
prismarine-world@https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7:
resolution: {tarball: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7}
version: 3.6.3
engines: {node: '>=8.0.0'}
process-nextick-args@2.0.1:
@ -6868,6 +6887,9 @@ packages:
proxy-from-env@1.0.0:
resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==}
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
psl@1.9.0:
resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
@ -8386,6 +8408,11 @@ packages:
w3c-keyname@2.2.8:
resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==}
wait-on@7.2.0:
resolution: {integrity: sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==}
engines: {node: '>=12.0.0'}
hasBin: true
walker@1.0.8:
resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
@ -9934,6 +9961,12 @@ snapshots:
'@gar/promisify@1.1.3':
optional: true
'@hapi/hoek@9.3.0': {}
'@hapi/topo@5.1.0':
dependencies:
'@hapi/hoek': 9.3.0
'@humanwhocodes/config-array@0.11.11':
dependencies:
'@humanwhocodes/object-schema': 1.2.1
@ -10769,6 +10802,14 @@ snapshots:
'@rushstack/eslint-patch@1.4.0': {}
'@sideway/address@4.1.5':
dependencies:
'@hapi/hoek': 9.3.0
'@sideway/formula@3.0.1': {}
'@sideway/pinpoint@2.0.0': {}
'@sinclair/typebox@0.27.8': {}
'@socket.io/component-emitter@3.1.0': {}
@ -11594,11 +11635,6 @@ snapshots:
'@types/node@16.18.58': {}
'@types/node@20.11.19':
dependencies:
undici-types: 5.26.5
optional: true
'@types/node@20.12.8':
dependencies:
undici-types: 5.26.5
@ -11697,6 +11733,10 @@ snapshots:
'@types/unist@3.0.2': {}
'@types/wait-on@5.3.4':
dependencies:
'@types/node': 20.12.8
'@types/webxr@0.5.7': {}
'@types/wicg-file-system-access@2023.10.2': {}
@ -11713,7 +11753,7 @@ snapshots:
'@types/yauzl@2.10.3':
dependencies:
'@types/node': 20.11.19
'@types/node': 20.12.8
optional: true
'@typescript-eslint/eslint-plugin@6.1.0(@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.5.0-beta))(eslint@8.50.0)(typescript@5.5.0-beta)':
@ -11931,12 +11971,12 @@ snapshots:
'@types/emscripten': 1.39.8
tslib: 1.14.1
'@zardoy/flying-squid@0.0.24(encoding@0.1.13)':
'@zardoy/flying-squid@0.0.29(encoding@0.1.13)':
dependencies:
'@tootallnate/once': 2.0.0
change-case: 4.1.2
colors: 1.4.0
diamond-square: https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687
diamond-square: https://codeload.github.com/zardoy/diamond-square/tar.gz/4bbe28dcad35403abaa925055e91f601a61b9015
emit-then: 2.0.0
exit-hook: 2.2.1
flatmap: 0.0.3
@ -11946,13 +11986,13 @@ snapshots:
mkdirp: 2.1.6
node-gzip: 1.1.2
node-rsa: 1.1.1
prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0)
prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3(minecraft-data@3.65.0)
prismarine-entity: 2.3.1
prismarine-item: 1.14.0
prismarine-nbt: 2.5.0
prismarine-provider-anvil: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.65.0)
prismarine-provider-anvil: https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0228b5252f48a0d6ad7f36d7189851c427fbe8c4(minecraft-data@3.65.0)
prismarine-windows: 2.9.0
prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465
prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7
rambda: 9.2.0
random-seed: 0.3.0
range: 0.0.3
@ -12274,6 +12314,14 @@ snapshots:
transitivePeerDependencies:
- debug
axios@1.7.2(debug@4.3.4):
dependencies:
follow-redirects: 1.15.6(debug@4.3.4)
form-data: 4.0.0
proxy-from-env: 1.1.0
transitivePeerDependencies:
- debug
babel-core@7.0.0-bridge.0(@babel/core@7.22.11):
dependencies:
'@babel/core': 7.22.11
@ -13209,10 +13257,11 @@ snapshots:
dependencies:
dequal: 2.0.3
diamond-square@https://codeload.github.com/zardoy/diamond-square/tar.gz/915fce8e27fe8eb45464d89b9563956afa4f7687:
diamond-square@https://codeload.github.com/zardoy/diamond-square/tar.gz/4bbe28dcad35403abaa925055e91f601a61b9015:
dependencies:
minecraft-data: 3.65.0
prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0)
prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3(minecraft-data@3.65.0)
prismarine-registry: 1.7.0
random-seed: 0.3.0
vec3: 0.1.8
@ -15041,6 +15090,14 @@ snapshots:
core-js: 3.32.1
regenerator-runtime: 0.13.11
joi@17.13.1:
dependencies:
'@hapi/hoek': 9.3.0
'@hapi/topo': 5.1.0
'@sideway/address': 4.1.5
'@sideway/formula': 3.0.1
'@sideway/pinpoint': 2.0.0
jose@4.15.5: {}
jpeg-js@0.3.7: {}
@ -15674,7 +15731,7 @@ snapshots:
minecraft-folder-path@1.2.0: {}
minecraft-inventory-gui@https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/200902aca941475e7feb610070e662b172a000b5(@types/react@18.2.20)(react@18.2.0):
minecraft-inventory-gui@https://codeload.github.com/zardoy/minecraft-inventory-gui/tar.gz/b424a566723067d0fb1a4bd70c1fb58a922f2ba4(@types/react@18.2.20)(react@18.2.0):
dependencies:
valtio: 1.11.2(@types/react@18.2.20)(react@18.2.0)
transitivePeerDependencies:
@ -15765,7 +15822,7 @@ snapshots:
mineflayer-pathfinder@2.4.4:
dependencies:
minecraft-data: 3.65.0
prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0
prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8
prismarine-entity: 2.3.1
prismarine-item: 1.14.0
prismarine-nbt: 2.2.1
@ -15777,9 +15834,9 @@ snapshots:
minecraft-data: 3.65.0
minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13)
prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0)
prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0
prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8
prismarine-chat: 1.10.1
prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0)
prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3(minecraft-data@3.65.0)
prismarine-entity: 2.3.1
prismarine-item: 1.14.0
prismarine-nbt: 2.5.0
@ -15787,7 +15844,7 @@ snapshots:
prismarine-recipe: 1.3.1(prismarine-registry@1.7.0)
prismarine-registry: 1.7.0
prismarine-windows: 2.9.0
prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465
prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7
protodef: 1.15.0
typed-emitter: 1.4.0
vec3: 0.1.8
@ -15795,14 +15852,14 @@ snapshots:
- encoding
- supports-color
mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/06061e07fe6b9716cb1801d4c1bf232581977192(encoding@0.1.13):
mineflayer@https://codeload.github.com/zardoy/mineflayer/tar.gz/a4b1b4ba7f8c972cee9c0a16eb1191ff4d21fe23(encoding@0.1.13):
dependencies:
minecraft-data: 3.65.0
minecraft-protocol: https://codeload.github.com/PrismarineJS/node-minecraft-protocol/tar.gz/495eed56ab230b2615596590064671356d86a2dc(patch_hash=2uxevyasyasdavsxuehfavgkjq)(encoding@0.1.13)
prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0)
prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0
prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8
prismarine-chat: 1.10.1
prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0)
prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3(minecraft-data@3.65.0)
prismarine-entity: 2.3.1
prismarine-item: 1.14.0
prismarine-nbt: 2.5.0
@ -15810,7 +15867,7 @@ snapshots:
prismarine-recipe: 1.3.1(prismarine-registry@1.7.0)
prismarine-registry: 1.7.0
prismarine-windows: 2.9.0
prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465
prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7
protodef: 1.15.0
typed-emitter: 1.4.0
vec3: 0.1.8
@ -16504,11 +16561,11 @@ snapshots:
minecraft-data: 3.65.0
prismarine-registry: 1.7.0
prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0:
prismarine-block@https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8:
dependencies:
minecraft-data: 3.65.0
prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0)
prismarine-chat: 1.9.1
prismarine-chat: 1.10.1
prismarine-item: 1.14.0
prismarine-nbt: 2.5.0
prismarine-registry: 1.7.0
@ -16519,30 +16576,10 @@ snapshots:
prismarine-nbt: 2.5.0
prismarine-registry: 1.7.0
prismarine-chat@1.9.1:
dependencies:
mojangson: 2.0.4
prismarine-item: 1.14.0
prismarine-nbt: 2.5.0
prismarine-registry: 1.7.0
prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/eb39a905761a36f733a456110e6b49d655bf5c16(minecraft-data@3.65.0):
prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3(minecraft-data@3.65.0):
dependencies:
prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0)
prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0
prismarine-nbt: 2.5.0
prismarine-registry: 1.7.0
smart-buffer: 4.2.0
uint4: 0.1.2
vec3: 0.1.8
xxhash-wasm: 0.4.2
transitivePeerDependencies:
- minecraft-data
prismarine-chunk@https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0):
dependencies:
prismarine-biome: 1.3.0(minecraft-data@3.65.0)(prismarine-registry@1.7.0)
prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0
prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8
prismarine-nbt: 2.5.0
prismarine-registry: 1.7.0
smart-buffer: 4.2.0
@ -16578,10 +16615,12 @@ snapshots:
prismarine-nbt: 2.5.0
vec3: 0.1.8
prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/02d81b0eba6ab1c362862970954f9a3c150c9a29(minecraft-data@3.65.0):
prismarine-provider-anvil@https://codeload.github.com/zardoy/prismarine-provider-anvil/tar.gz/0228b5252f48a0d6ad7f36d7189851c427fbe8c4(minecraft-data@3.65.0):
dependencies:
prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/f32234a724a5c2482ffbaf85edc5e91c7ab9b38f(minecraft-data@3.65.0)
prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8
prismarine-chunk: https://codeload.github.com/zardoy/prismarine-chunk/tar.gz/9662306deea57d8d0ba0a2a3f3f7adb95f0131e3(minecraft-data@3.65.0)
prismarine-nbt: 2.5.0
prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7
uint4: 0.1.2
vec3: 0.1.8
transitivePeerDependencies:
@ -16607,9 +16646,9 @@ snapshots:
prismarine-schematic@1.2.3:
dependencies:
minecraft-data: 3.65.0
prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/ada4ec3fdfbbc1cc20ab01d0e23f0718a77cc1a0
prismarine-block: https://codeload.github.com/zardoy/prismarine-block/tar.gz/dd4954fff3b334f8ce063d18e39b2e9414ece5b8
prismarine-nbt: 2.2.1
prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465
prismarine-world: https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7
vec3: 0.1.8
prismarine-windows@2.9.0:
@ -16618,7 +16657,7 @@ snapshots:
prismarine-registry: 1.7.0
typed-emitter: 2.1.0
prismarine-world@https://codeload.github.com/zardoy/prismarine-world/tar.gz/6ae6f009d38460de284f8c226c665f04cbad9465:
prismarine-world@https://codeload.github.com/zardoy/prismarine-world/tar.gz/187a87f6d71cba12881a7bbaa510ed9085bf6da7:
dependencies:
vec3: 0.1.8
@ -16758,6 +16797,8 @@ snapshots:
proxy-from-env@1.0.0: {}
proxy-from-env@1.1.0: {}
psl@1.9.0: {}
public-encrypt@4.0.3:
@ -18527,6 +18568,16 @@ snapshots:
w3c-keyname@2.2.8: {}
wait-on@7.2.0(debug@4.3.4):
dependencies:
axios: 1.7.2(debug@4.3.4)
joi: 17.13.1
lodash: 4.17.21
minimist: 1.2.8
rxjs: 7.8.1
transitivePeerDependencies:
- debug
walker@1.0.8:
dependencies:
makeerror: 1.0.12

View file

@ -267,11 +267,15 @@ export class Entities extends EventEmitter {
}
displaySimpleText(jsonLike) {
parseEntityLabel(jsonLike) {
if (!jsonLike) return
const parsed = typeof jsonLike === 'string' ? mojangson.simplify(mojangson.parse(jsonLike)) : nbt.simplify(jsonLike)
const text = flat(parsed).map(x => x.text)
return text.join('')
try {
const parsed = typeof jsonLike === 'string' ? mojangson.simplify(mojangson.parse(jsonLike)) : nbt.simplify(jsonLike)
const text = flat(parsed).map(x => x.text)
return text.join('')
} catch (err) {
return jsonLike
}
}
update(/** @type {import('prismarine-entity').Entity & {delete?, pos}} */entity, overrides) {
@ -410,7 +414,7 @@ export class Entities extends EventEmitter {
}
}
// not player
const displayText = entity.metadata?.[3] && this.displaySimpleText(entity.metadata[2])
const displayText = entity.metadata?.[3] && this.parseEntityLabel(entity.metadata[2])
if (entity.name !== 'player' && displayText) {
addNametag({ ...entity, username: displayText }, this.entitiesOptions, this.entities[entity.id].children.find(c => c.name === 'mesh'))
}

View file

@ -520,9 +520,11 @@ export function getSectionGeometry (sx, sy, sz, world: World) {
"west": 1,
"east": 3
}
const isWall = block.name.endsWith('wall_sign') || block.name.endsWith('hanging_sign')
const isWall = block.name.endsWith('wall_sign') || block.name.endsWith('wall_hanging_sign')
const isHanging = block.name.endsWith('hanging_sign')
attr.signs[key] = {
isWall,
isHanging,
rotation: isWall ? facingRotationMap[props.facing] : +props.rotation
}
}

View file

@ -45,12 +45,6 @@ test('Known blocks are not rendered', () => {
// should be fixed, but to avoid regressions & for visibility
expect(invalidBlocks).toMatchInlineSnapshot(`
{
"acacia_hanging_sign": true,
"acacia_wall_hanging_sign": true,
"bamboo_hanging_sign": true,
"bamboo_wall_hanging_sign": true,
"birch_hanging_sign": true,
"birch_wall_hanging_sign": true,
"black_banner": true,
"black_bed": true,
"black_candle": true,
@ -65,18 +59,12 @@ test('Known blocks are not rendered', () => {
"brown_wall_banner": true,
"bubble_column": true,
"candle": true,
"cherry_hanging_sign": true,
"cherry_wall_hanging_sign": true,
"creeper_head": true,
"creeper_wall_head": true,
"crimson_hanging_sign": true,
"crimson_wall_hanging_sign": true,
"cyan_banner": true,
"cyan_bed": true,
"cyan_candle": true,
"cyan_wall_banner": true,
"dark_oak_hanging_sign": true,
"dark_oak_wall_hanging_sign": true,
"dragon_head": true,
"dragon_wall_head": true,
"end_gateway": true,
@ -89,8 +77,6 @@ test('Known blocks are not rendered', () => {
"green_bed": true,
"green_candle": true,
"green_wall_banner": true,
"jungle_hanging_sign": true,
"jungle_wall_hanging_sign": true,
"light_blue_banner": true,
"light_blue_bed": true,
"light_blue_candle": true,
@ -107,10 +93,6 @@ test('Known blocks are not rendered', () => {
"magenta_bed": true,
"magenta_candle": true,
"magenta_wall_banner": true,
"mangrove_hanging_sign": true,
"mangrove_wall_hanging_sign": true,
"oak_hanging_sign": true,
"oak_wall_hanging_sign": true,
"orange_banner": true,
"orange_bed": true,
"orange_candle": true,
@ -138,12 +120,8 @@ test('Known blocks are not rendered', () => {
"skeleton_skull": true,
"skeleton_wall_skull": true,
"snow": true,
"spruce_hanging_sign": true,
"spruce_wall_hanging_sign": true,
"structure_void": true,
"turtle_egg": true,
"warped_hanging_sign": true,
"warped_wall_hanging_sign": true,
"water_cauldron": true,
"white_banner": true,
"white_bed": true,

View file

@ -83,7 +83,7 @@ export class WorldDataEmitter extends EventEmitter {
get (_target, posKey, receiver) {
if (typeof posKey !== 'string') return
const [x, y, z] = posKey.split(',').map(Number)
return bot.world.getBlock(new Vec3(x, y, z)).entity
return bot.world.getBlock(new Vec3(x, y, z))?.entity
},
}))
this.emitter.emit('renderDistance', this.viewDistance)

View file

@ -22,7 +22,7 @@ export class WorldRendererThree extends WorldRendererCommon {
return Object.values(this.sectionObjects).reduce((acc, obj) => acc + (obj as any).tilesCount, 0)
}
constructor(public scene: THREE.Scene, public renderer: THREE.WebGLRenderer, public config: WorldRendererConfig) {
constructor (public scene: THREE.Scene, public renderer: THREE.WebGLRenderer, public config: WorldRendererConfig) {
super(config)
this.starField = new StarField(scene)
}
@ -112,11 +112,11 @@ export class WorldRendererThree extends WorldRendererCommon {
}
// should not compute it once
if (Object.keys(data.geometry.signs).length) {
for (const [posKey, { isWall, rotation }] of Object.entries(data.geometry.signs)) {
for (const [posKey, { isWall, isHanging, rotation }] of Object.entries(data.geometry.signs)) {
const [x, y, z] = posKey.split(',')
const signBlockEntity = this.blockEntities[posKey]
if (!signBlockEntity) continue
const sign = this.renderSign(new Vec3(+x, +y, +z), rotation, isWall, nbt.simplify(signBlockEntity))
const sign = this.renderSign(new Vec3(+x, +y, +z), rotation, isWall, isHanging, nbt.simplify(signBlockEntity))
if (!sign) continue
object.add(sign)
}
@ -165,7 +165,7 @@ export class WorldRendererThree extends WorldRendererCommon {
this.renderer.render(this.scene, this.camera)
}
renderSign (position: Vec3, rotation: number, isWall: boolean, blockEntity) {
renderSign (position: Vec3, rotation: number, isWall: boolean, isHanging: boolean, blockEntity) {
const tex = this.getSignTexture(position, blockEntity)
if (!tex) return
@ -181,14 +181,16 @@ export class WorldRendererThree extends WorldRendererCommon {
const mesh = new THREE.Mesh(new THREE.PlaneGeometry(1, 1), new THREE.MeshBasicMaterial({ map: tex, transparent: true, }))
mesh.renderOrder = 999
// todo @sa2urami shouldnt all this be done in worker?
mesh.scale.set(1, 7 / 16, 1)
if (isWall) {
mesh.position.set(0, 0, -(8 - 1.5) / 16 + 0.001)
const lineHeight = 7 / 16
const scaleFactor = isHanging ? 1.3 : 1
mesh.scale.set(1 * scaleFactor, lineHeight * scaleFactor, 1 * scaleFactor)
const thickness = (isHanging ? 2 : 1.5) / 16
const wallSpacing = 0.25 / 16
if (isWall && !isHanging) {
mesh.position.set(0, 0, -0.5 + thickness + wallSpacing + 0.0001)
} else {
// standing
const faceEnd = 8.75
mesh.position.set(0, 0, (faceEnd - 16 / 2) / 16 + 0.001)
mesh.position.set(0, 0, thickness / 2 + 0.0001)
}
const group = new THREE.Group()
@ -196,8 +198,10 @@ export class WorldRendererThree extends WorldRendererCommon {
rotation * (isWall ? 90 : 45 / 2)
), 0)
group.add(mesh)
const y = isWall ? 4.5 / 16 + mesh.scale.y / 2 : (1 - (mesh.scale.y / 2))
group.position.set(position.x + 0.5, position.y + y, position.z + 0.5)
const height = (isHanging ? 10 : 8) / 16
const heightOffset = (isHanging ? 0 : isWall ? 4.333 : 9.333) / 16
const textPosition = height / 2 + heightOffset
group.position.set(position.x + 0.5, position.y + textPosition, position.z + 0.5)
return group
}
@ -317,7 +321,7 @@ class StarField {
}
}
constructor(private scene: THREE.Scene) {
constructor (private scene: THREE.Scene) {
}
addToScene () {
@ -381,7 +385,7 @@ class StarField {
const version = parseInt(THREE.REVISION.replace(/\D+/g, ''))
class StarfieldMaterial extends THREE.ShaderMaterial {
constructor() {
constructor () {
super({
uniforms: { time: { value: 0.0 }, fade: { value: 1.0 } },
vertexShader: /* glsl */ `

View file

@ -49,19 +49,18 @@ export const makeTextureAtlas = (input: string[], getInputData: (name) => { cont
const texturesIndex = {}
let skipXY = [] as [x: number, y: number][]
let offset = 0
let nextX = 0
let nextY = 0
let rowMaxY = 0
const goToNextRow = () => {
nextX = 0
nextY += rowMaxY
rowMaxY = 0
}
const suSv = tileSize / imgSize
for (const i in input) {
const pos = +i + offset
const x = (pos % texSize) * tileSize
const y = Math.floor(pos / texSize) * tileSize
if (skipXY.some(([sx, sy]) => sx === x + 1 && sy === y)) {
// todo more offsets
offset++
}
const img = new Image()
const keyValue = input[i]
const inputData = getInputData(keyValue)
@ -76,16 +75,24 @@ export const makeTextureAtlas = (input: string[], getInputData: (name) => { cont
renderHeight = Math.ceil(img.height / tileSize) * tileSize
su = renderWidth / imgSize
sv = renderHeight / imgSize
if (renderWidth > tileSize) {
offset += Math.ceil(renderWidth / tileSize) - 1
}
if (renderHeight > tileSize) {
const skipYs = Math.ceil(renderHeight / tileSize) - 1
for (let i = 1; i <= skipYs; i++) {
skipXY.push([x, y + i])
}
if (renderHeight > imgSize || renderWidth > imgSize) {
throw new Error('Texture ' + keyValue + ' is too big')
}
}
if (nextX + renderWidth > imgSize) {
goToNextRow()
}
const x = nextX
const y = nextY
nextX += renderWidth
rowMaxY = Math.max(rowMaxY, renderHeight)
if (nextX >= imgSize) {
goToNextRow()
}
g.drawImage(img, 0, 0, renderWidth, renderHeight, x, y, renderWidth, renderHeight)
const cleanName = keyValue.split('.').slice(0, -1).join('.') || keyValue
@ -116,7 +123,7 @@ export function makeBlockTextureAtlas (mcAssets: McAssets) {
// const textureFiles = mostEncounteredBlocks.map(x => x + '.png')
textureFiles.unshift(...localTextures)
const { generated: additionalTextures, twoTileTextures, origSizeTextures } = getAdditionalTextures()
const { generated: additionalTextures, origSizeTextures } = getAdditionalTextures()
textureFiles.push(...Object.keys(additionalTextures))
const atlas = makeTextureAtlas(textureFiles, name => {
@ -129,7 +136,7 @@ export function makeBlockTextureAtlas (mcAssets: McAssets) {
return {
contents,
tileWidthMult: twoTileTextures.includes(name) ? 2 : undefined,
// tileWidthMult: twoTileTextures.includes(name) ? 2 : undefined,
origSizeTextures
}
})

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign",
"textures": {
"sign": "entity/sign"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign_wall",
"textures": {
"sign": "entity/sign"
}
}

View file

@ -0,0 +1,140 @@
{
"elements": [
{
"from": [
7.25,
0,
7.25
],
"to": [
8.75,
9.333,
8.75
],
"faces": {
"north": {
"uv": [
1.5,
8,
2,
15
],
"texture": "#sign"
},
"east": {
"uv": [
1,
8,
1.5,
15
],
"texture": "#sign"
},
"south": {
"uv": [
0.5,
8,
1,
15
],
"texture": "#sign"
},
"west": {
"uv": [
0,
8,
0.5,
15
],
"texture": "#sign"
},
"up": {
"uv": [
0.5,
7,
1,
8
],
"texture": "#sign"
},
"down": {
"uv": [
1,
7,
1.5,
8
],
"texture": "#sign"
}
}
},
{
"from": [
0,
9.333,
7.25
],
"to": [
16,
17.333,
8.75
],
"faces": {
"north": {
"uv": [
7,
1,
13,
7
],
"texture": "#sign"
},
"east": {
"uv": [
6.5,
1,
7,
7
],
"texture": "#sign"
},
"south": {
"uv": [
0.5,
1,
6.5,
7
],
"texture": "#sign"
},
"west": {
"uv": [
0,
1,
0.5,
7
],
"texture": "#sign"
},
"up": {
"uv": [
0.5,
0,
6.5,
1
],
"texture": "#sign"
},
"down": {
"uv": [
6.5,
1,
12.5,
0
],
"texture": "#sign"
}
}
}
]
}

View file

@ -0,0 +1,72 @@
{
"elements": [
{
"from": [
0,
4.333,
0.25
],
"to": [
16,
12.333,
1.75
],
"faces": {
"north": {
"uv": [
7,
1,
13,
7
],
"texture": "#sign"
},
"east": {
"uv": [
6.5,
1,
7,
7
],
"texture": "#sign"
},
"south": {
"uv": [
0.5,
1,
6.5,
7
],
"texture": "#sign"
},
"west": {
"uv": [
0,
1,
0.5,
7
],
"texture": "#sign"
},
"up": {
"uv": [
0.5,
0,
6.5,
1
],
"texture": "#sign"
},
"down": {
"uv": [
6.5,
1,
12.5,
0
],
"texture": "#sign"
}
}
}
]
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/oak"
},
"rotation=1": {
"model": "sign/oak",
"y": 22.5
},
"rotation=2": {
"model": "sign/oak",
"y": 45
},
"rotation=3": {
"model": "sign/oak",
"y": 67.5
},
"rotation=4": {
"model": "sign/oak",
"y": 90
},
"rotation=5": {
"model": "sign/oak",
"y": 112.5
},
"rotation=6": {
"model": "sign/oak",
"y": 135
},
"rotation=7": {
"model": "sign/oak",
"y": 157.5
},
"rotation=8": {
"model": "sign/oak",
"y": 180
},
"rotation=9": {
"model": "sign/oak",
"y": 202.5
},
"rotation=10": {
"model": "sign/oak",
"y": 225
},
"rotation=11": {
"model": "sign/oak",
"y": 247.5
},
"rotation=12": {
"model": "sign/oak",
"y": 270
},
"rotation=13": {
"model": "sign/oak",
"y": 292.5
},
"rotation=14": {
"model": "sign/oak",
"y": 315
},
"rotation=15": {
"model": "sign/oak",
"y": 337.5
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=south": {
"model": "sign/oak_wall"
},
"facing=west": {
"model": "sign/oak_wall",
"y": 90
},
"facing=north": {
"model": "sign/oak_wall",
"y": 180
},
"facing=east": {
"model": "sign/oak_wall",
"y": 270
}
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign",
"textures": {
"sign": "entity/signs/acacia"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign_wall",
"textures": {
"sign": "entity/signs/acacia"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign",
"textures": {
"sign": "entity/signs/birch"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign_wall",
"textures": {
"sign": "entity/signs/birch"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign",
"textures": {
"sign": "entity/signs/dark_oak"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign_wall",
"textures": {
"sign": "entity/signs/dark_oak"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign",
"textures": {
"sign": "entity/signs/jungle"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/sign_wall",
"textures": {
"sign": "entity/signs/jungle"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign",
"textures": {
"sign": "entity/signs/spruce"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign_wall",
"textures": {
"sign": "entity/signs/spruce"
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/acacia"
},
"rotation=1": {
"model": "sign/acacia",
"y": 22.5
},
"rotation=2": {
"model": "sign/acacia",
"y": 45
},
"rotation=3": {
"model": "sign/acacia",
"y": 67.5
},
"rotation=4": {
"model": "sign/acacia",
"y": 90
},
"rotation=5": {
"model": "sign/acacia",
"y": 112.5
},
"rotation=6": {
"model": "sign/acacia",
"y": 135
},
"rotation=7": {
"model": "sign/acacia",
"y": 157.5
},
"rotation=8": {
"model": "sign/acacia",
"y": 180
},
"rotation=9": {
"model": "sign/acacia",
"y": 202.5
},
"rotation=10": {
"model": "sign/acacia",
"y": 225
},
"rotation=11": {
"model": "sign/acacia",
"y": 247.5
},
"rotation=12": {
"model": "sign/acacia",
"y": 270
},
"rotation=13": {
"model": "sign/acacia",
"y": 292.5
},
"rotation=14": {
"model": "sign/acacia",
"y": 315
},
"rotation=15": {
"model": "sign/acacia",
"y": 337.5
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=south": {
"model": "sign/acacia_wall"
},
"facing=west": {
"model": "sign/acacia_wall",
"y": 90
},
"facing=north": {
"model": "sign/acacia_wall",
"y": 180
},
"facing=east": {
"model": "sign/acacia_wall",
"y": 270
}
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/birch"
},
"rotation=1": {
"model": "sign/birch",
"y": 22.5
},
"rotation=2": {
"model": "sign/birch",
"y": 45
},
"rotation=3": {
"model": "sign/birch",
"y": 67.5
},
"rotation=4": {
"model": "sign/birch",
"y": 90
},
"rotation=5": {
"model": "sign/birch",
"y": 112.5
},
"rotation=6": {
"model": "sign/birch",
"y": 135
},
"rotation=7": {
"model": "sign/birch",
"y": 157.5
},
"rotation=8": {
"model": "sign/birch",
"y": 180
},
"rotation=9": {
"model": "sign/birch",
"y": 202.5
},
"rotation=10": {
"model": "sign/birch",
"y": 225
},
"rotation=11": {
"model": "sign/birch",
"y": 247.5
},
"rotation=12": {
"model": "sign/birch",
"y": 270
},
"rotation=13": {
"model": "sign/birch",
"y": 292.5
},
"rotation=14": {
"model": "sign/birch",
"y": 315
},
"rotation=15": {
"model": "sign/birch",
"y": 337.5
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=south": {
"model": "sign/birch_wall"
},
"facing=west": {
"model": "sign/birch_wall",
"y": 90
},
"facing=north": {
"model": "sign/birch_wall",
"y": 180
},
"facing=east": {
"model": "sign/birch_wall",
"y": 270
}
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/dark_oak"
},
"rotation=1": {
"model": "sign/dark_oak",
"y": 22.5
},
"rotation=2": {
"model": "sign/dark_oak",
"y": 45
},
"rotation=3": {
"model": "sign/dark_oak",
"y": 67.5
},
"rotation=4": {
"model": "sign/dark_oak",
"y": 90
},
"rotation=5": {
"model": "sign/dark_oak",
"y": 112.5
},
"rotation=6": {
"model": "sign/dark_oak",
"y": 135
},
"rotation=7": {
"model": "sign/dark_oak",
"y": 157.5
},
"rotation=8": {
"model": "sign/dark_oak",
"y": 180
},
"rotation=9": {
"model": "sign/dark_oak",
"y": 202.5
},
"rotation=10": {
"model": "sign/dark_oak",
"y": 225
},
"rotation=11": {
"model": "sign/dark_oak",
"y": 247.5
},
"rotation=12": {
"model": "sign/dark_oak",
"y": 270
},
"rotation=13": {
"model": "sign/dark_oak",
"y": 292.5
},
"rotation=14": {
"model": "sign/dark_oak",
"y": 315
},
"rotation=15": {
"model": "sign/dark_oak",
"y": 337.5
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=south": {
"model": "sign/dark_oak_wall"
},
"facing=west": {
"model": "sign/dark_oak_wall",
"y": 90
},
"facing=north": {
"model": "sign/dark_oak_wall",
"y": 180
},
"facing=east": {
"model": "sign/dark_oak_wall",
"y": 270
}
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/jungle"
},
"rotation=1": {
"model": "sign/jungle",
"y": 22.5
},
"rotation=2": {
"model": "sign/jungle",
"y": 45
},
"rotation=3": {
"model": "sign/jungle",
"y": 67.5
},
"rotation=4": {
"model": "sign/jungle",
"y": 90
},
"rotation=5": {
"model": "sign/jungle",
"y": 112.5
},
"rotation=6": {
"model": "sign/jungle",
"y": 135
},
"rotation=7": {
"model": "sign/jungle",
"y": 157.5
},
"rotation=8": {
"model": "sign/jungle",
"y": 180
},
"rotation=9": {
"model": "sign/jungle",
"y": 202.5
},
"rotation=10": {
"model": "sign/jungle",
"y": 225
},
"rotation=11": {
"model": "sign/jungle",
"y": 247.5
},
"rotation=12": {
"model": "sign/jungle",
"y": 270
},
"rotation=13": {
"model": "sign/jungle",
"y": 292.5
},
"rotation=14": {
"model": "sign/jungle",
"y": 315
},
"rotation=15": {
"model": "sign/jungle",
"y": 337.5
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=south": {
"model": "sign/jungle_wall"
},
"facing=west": {
"model": "sign/jungle_wall",
"y": 90
},
"facing=north": {
"model": "sign/jungle_wall",
"y": 180
},
"facing=east": {
"model": "sign/jungle_wall",
"y": 270
}
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/oak"
},
"rotation=1": {
"model": "sign/oak",
"y": 22.5
},
"rotation=2": {
"model": "sign/oak",
"y": 45
},
"rotation=3": {
"model": "sign/oak",
"y": 67.5
},
"rotation=4": {
"model": "sign/oak",
"y": 90
},
"rotation=5": {
"model": "sign/oak",
"y": 112.5
},
"rotation=6": {
"model": "sign/oak",
"y": 135
},
"rotation=7": {
"model": "sign/oak",
"y": 157.5
},
"rotation=8": {
"model": "sign/oak",
"y": 180
},
"rotation=9": {
"model": "sign/oak",
"y": 202.5
},
"rotation=10": {
"model": "sign/oak",
"y": 225
},
"rotation=11": {
"model": "sign/oak",
"y": 247.5
},
"rotation=12": {
"model": "sign/oak",
"y": 270
},
"rotation=13": {
"model": "sign/oak",
"y": 292.5
},
"rotation=14": {
"model": "sign/oak",
"y": 315
},
"rotation=15": {
"model": "sign/oak",
"y": 337.5
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=south": {
"model": "sign/oak_wall"
},
"facing=west": {
"model": "sign/oak_wall",
"y": 90
},
"facing=north": {
"model": "sign/oak_wall",
"y": 180
},
"facing=east": {
"model": "sign/oak_wall",
"y": 270
}
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/spruce"
},
"rotation=1": {
"model": "sign/spruce",
"y": 22.5
},
"rotation=2": {
"model": "sign/spruce",
"y": 45
},
"rotation=3": {
"model": "sign/spruce",
"y": 67.5
},
"rotation=4": {
"model": "sign/spruce",
"y": 90
},
"rotation=5": {
"model": "sign/spruce",
"y": 112.5
},
"rotation=6": {
"model": "sign/spruce",
"y": 135
},
"rotation=7": {
"model": "sign/spruce",
"y": 157.5
},
"rotation=8": {
"model": "sign/spruce",
"y": 180
},
"rotation=9": {
"model": "sign/spruce",
"y": 202.5
},
"rotation=10": {
"model": "sign/spruce",
"y": 225
},
"rotation=11": {
"model": "sign/spruce",
"y": 247.5
},
"rotation=12": {
"model": "sign/spruce",
"y": 270
},
"rotation=13": {
"model": "sign/spruce",
"y": 292.5
},
"rotation=14": {
"model": "sign/spruce",
"y": 315
},
"rotation=15": {
"model": "sign/spruce",
"y": 337.5
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=south": {
"model": "sign/spruce_wall"
},
"facing=west": {
"model": "sign/spruce_wall",
"y": 90
},
"facing=north": {
"model": "sign/spruce_wall",
"y": 180
},
"facing=east": {
"model": "sign/spruce_wall",
"y": 270
}
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign",
"textures": {
"sign": "entity/signs/crimson"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign_wall",
"textures": {
"sign": "entity/signs/crimson"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign",
"textures": {
"sign": "entity/signs/warped"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign_wall",
"textures": {
"sign": "entity/signs/warped"
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/crimson"
},
"rotation=1": {
"model": "sign/crimson",
"y": 22.5
},
"rotation=2": {
"model": "sign/crimson",
"y": 45
},
"rotation=3": {
"model": "sign/crimson",
"y": 67.5
},
"rotation=4": {
"model": "sign/crimson",
"y": 90
},
"rotation=5": {
"model": "sign/crimson",
"y": 112.5
},
"rotation=6": {
"model": "sign/crimson",
"y": 135
},
"rotation=7": {
"model": "sign/crimson",
"y": 157.5
},
"rotation=8": {
"model": "sign/crimson",
"y": 180
},
"rotation=9": {
"model": "sign/crimson",
"y": 202.5
},
"rotation=10": {
"model": "sign/crimson",
"y": 225
},
"rotation=11": {
"model": "sign/crimson",
"y": 247.5
},
"rotation=12": {
"model": "sign/crimson",
"y": 270
},
"rotation=13": {
"model": "sign/crimson",
"y": 292.5
},
"rotation=14": {
"model": "sign/crimson",
"y": 315
},
"rotation=15": {
"model": "sign/crimson",
"y": 337.5
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=south": {
"model": "sign/crimson_wall"
},
"facing=west": {
"model": "sign/crimson_wall",
"y": 90
},
"facing=north": {
"model": "sign/crimson_wall",
"y": 180
},
"facing=east": {
"model": "sign/crimson_wall",
"y": 270
}
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/warped"
},
"rotation=1": {
"model": "sign/warped",
"y": 22.5
},
"rotation=2": {
"model": "sign/warped",
"y": 45
},
"rotation=3": {
"model": "sign/warped",
"y": 67.5
},
"rotation=4": {
"model": "sign/warped",
"y": 90
},
"rotation=5": {
"model": "sign/warped",
"y": 112.5
},
"rotation=6": {
"model": "sign/warped",
"y": 135
},
"rotation=7": {
"model": "sign/warped",
"y": 157.5
},
"rotation=8": {
"model": "sign/warped",
"y": 180
},
"rotation=9": {
"model": "sign/warped",
"y": 202.5
},
"rotation=10": {
"model": "sign/warped",
"y": 225
},
"rotation=11": {
"model": "sign/warped",
"y": 247.5
},
"rotation=12": {
"model": "sign/warped",
"y": 270
},
"rotation=13": {
"model": "sign/warped",
"y": 292.5
},
"rotation=14": {
"model": "sign/warped",
"y": 315
},
"rotation=15": {
"model": "sign/warped",
"y": 337.5
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=south": {
"model": "sign/warped_wall"
},
"facing=west": {
"model": "sign/warped_wall",
"y": 90
},
"facing=north": {
"model": "sign/warped_wall",
"y": 180
},
"facing=east": {
"model": "sign/warped_wall",
"y": 270
}
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign",
"textures": {
"sign": "entity/signs/mangrove"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign_wall",
"textures": {
"sign": "entity/signs/mangrove"
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/mangrove"
},
"rotation=1": {
"model": "sign/mangrove",
"y": 22.5
},
"rotation=2": {
"model": "sign/mangrove",
"y": 45
},
"rotation=3": {
"model": "sign/mangrove",
"y": 67.5
},
"rotation=4": {
"model": "sign/mangrove",
"y": 90
},
"rotation=5": {
"model": "sign/mangrove",
"y": 112.5
},
"rotation=6": {
"model": "sign/mangrove",
"y": 135
},
"rotation=7": {
"model": "sign/mangrove",
"y": 157.5
},
"rotation=8": {
"model": "sign/mangrove",
"y": 180
},
"rotation=9": {
"model": "sign/mangrove",
"y": 202.5
},
"rotation=10": {
"model": "sign/mangrove",
"y": 225
},
"rotation=11": {
"model": "sign/mangrove",
"y": 247.5
},
"rotation=12": {
"model": "sign/mangrove",
"y": 270
},
"rotation=13": {
"model": "sign/mangrove",
"y": 292.5
},
"rotation=14": {
"model": "sign/mangrove",
"y": 315
},
"rotation=15": {
"model": "sign/mangrove",
"y": 337.5
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=south": {
"model": "sign/mangrove_wall"
},
"facing=west": {
"model": "sign/mangrove_wall",
"y": 90
},
"facing=north": {
"model": "sign/mangrove_wall",
"y": 180
},
"facing=east": {
"model": "sign/mangrove_wall",
"y": 270
}
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/hanging",
"textures": {
"wood": "entity/signs/hanging/acacia"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/wall_hanging",
"textures": {
"wood": "entity/signs/hanging/acacia"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign",
"textures": {
"sign": "entity/signs/bamboo"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/hanging",
"textures": {
"wood": "entity/signs/hanging/bamboo"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign_wall",
"textures": {
"sign": "entity/signs/bamboo"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/wall_hanging",
"textures": {
"wood": "entity/signs/hanging/bamboo"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/hanging",
"textures": {
"wood": "entity/signs/hanging/birch"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/wall_hanging",
"textures": {
"wood": "entity/signs/hanging/birch"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign",
"textures": {
"sign": "entity/signs/cherry"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/hanging",
"textures": {
"wood": "entity/signs/hanging/cherry"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "sign/sign_wall",
"textures": {
"sign": "entity/signs/cherry"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/wall_hanging",
"textures": {
"wood": "entity/signs/hanging/cherry"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/hanging",
"textures": {
"wood": "entity/signs/hanging/crimson"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/wall_hanging",
"textures": {
"wood": "entity/signs/hanging/crimson"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/hanging",
"textures": {
"wood": "entity/signs/hanging/dark_oak"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/wall_hanging",
"textures": {
"wood": "entity/signs/hanging/dark_oak"
}
}

View file

@ -0,0 +1,115 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"ambientocclusion": false,
"texture_size": [
64,
32
],
"textures": {
"wood": "entity/signs/hanging/oak"
},
"elements": [
{
"name": "Sign",
"from": [
1,
0,
7
],
"to": [
15,
10,
9
],
"faces": {
"north": {
"uv": [
4.5,
7,
8,
12
],
"texture": "#wood"
},
"east": {
"uv": [
4,
7,
4.5,
12
],
"texture": "#wood"
},
"south": {
"uv": [
0.5,
7,
4,
12
],
"texture": "#wood"
},
"west": {
"uv": [
0,
7,
0.5,
12
],
"texture": "#wood"
},
"up": {
"uv": [
4,
6,
0.5,
7
],
"rotation": 180,
"texture": "#wood"
},
"down": {
"uv": [
4,
7,
7.5,
6
],
"texture": "#wood"
}
}
},
{
"from": [
2,
10,
8
],
"to": [
14,
16,
8
],
"faces": {
"north": {
"uv": [
3.5,
3,
6.5,
6
],
"texture": "#wood"
},
"south": {
"uv": [
3.5,
3,
6.5,
6
],
"texture": "#wood"
}
}
}
]
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/hanging",
"textures": {
"wood": "entity/signs/hanging/jungle"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/wall_hanging",
"textures": {
"wood": "entity/signs/hanging/jungle"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/hanging",
"textures": {
"wood": "entity/signs/hanging/mangrove"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/wall_hanging",
"textures": {
"wood": "entity/signs/hanging/mangrove"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/hanging",
"textures": {
"wood": "entity/signs/hanging/oak"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/wall_hanging",
"textures": {
"wood": "entity/signs/hanging/oak"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/hanging",
"textures": {
"wood": "entity/signs/hanging/spruce"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/wall_hanging",
"textures": {
"wood": "entity/signs/hanging/spruce"
}
}

View file

@ -0,0 +1,347 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"ambientocclusion": false,
"texture_size": [
64,
32
],
"textures": {
"wood": "entity/signs/hanging/oak"
},
"elements": [
{
"name": "Sign",
"from": [
1,
0,
7
],
"to": [
15,
10,
9
],
"rotation": {
"angle": 0,
"axis": "y",
"origin": [
8,
8,
8
]
},
"faces": {
"north": {
"uv": [
4.5,
7,
8,
12
],
"texture": "#wood"
},
"east": {
"uv": [
4,
7,
4.5,
12
],
"texture": "#wood"
},
"south": {
"uv": [
0.5,
7,
4,
12
],
"texture": "#wood"
},
"west": {
"uv": [
0,
7,
0.5,
12
],
"texture": "#wood"
},
"up": {
"uv": [
4,
6,
0.5,
7
],
"rotation": 180,
"texture": "#wood"
},
"down": {
"uv": [
4,
7,
7.5,
6
],
"texture": "#wood"
}
}
},
{
"name": "Hanger",
"from": [
0,
14,
6
],
"to": [
16,
16,
10
],
"rotation": {
"angle": 0,
"axis": "y",
"origin": [
8,
8,
8
]
},
"faces": {
"north": {
"uv": [
6,
2,
10,
3
],
"texture": "#wood"
},
"east": {
"uv": [
0,
2,
1,
3
],
"texture": "#wood"
},
"south": {
"uv": [
1,
2,
5,
3
],
"texture": "#wood"
},
"west": {
"uv": [
0,
2,
1,
3
],
"texture": "#wood"
},
"up": {
"uv": [
1,
0,
5,
2
],
"rotation": 180,
"texture": "#wood"
},
"down": {
"uv": [
5,
0,
9,
2
],
"texture": "#wood"
}
}
},
{
"name": "ChainA1",
"from": [
4.8,
10,
10.5
],
"to": [
6.2,
14,
10.5
],
"shade": false,
"rotation": {
"angle": -45,
"axis": "y",
"origin": [
8,
8,
8
],
"rescale": true
},
"faces": {
"north": {
"uv": [
1.5,
3,
2.25,
6
],
"texture": "#wood"
},
"south": {
"uv": [
1.5,
3,
2.25,
6
],
"texture": "#wood"
}
}
},
{
"name": "ChainB2",
"from": [
10.5,
10,
4.8
],
"to": [
10.5,
14,
6.2
],
"shade": false,
"rotation": {
"angle": -45,
"axis": "y",
"origin": [
8,
8,
8
],
"rescale": true
},
"faces": {
"east": {
"uv": [
0,
3,
0.75,
6
],
"texture": "#wood"
},
"west": {
"uv": [
0,
3,
0.75,
6
],
"texture": "#wood"
}
}
},
{
"name": "ChainB1",
"from": [
9.8,
10,
5.5
],
"to": [
11.2,
14,
5.5
],
"shade": false,
"rotation": {
"angle": -45,
"axis": "y",
"origin": [
8,
8,
8
],
"rescale": true
},
"faces": {
"north": {
"uv": [
1.5,
3,
2.25,
6
],
"texture": "#wood"
},
"south": {
"uv": [
1.5,
3,
2.25,
6
],
"texture": "#wood"
}
}
},
{
"name": "ChainA2",
"from": [
5.5,
10,
9.8
],
"to": [
5.5,
14,
11.2
],
"shade": false,
"rotation": {
"angle": -45,
"axis": "y",
"origin": [
8,
8,
8
],
"rescale": true
},
"faces": {
"east": {
"uv": [
0,
3,
0.75,
6
],
"texture": "#wood"
},
"west": {
"uv": [
0,
3,
0.75,
6
],
"texture": "#wood"
}
}
}
]
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/hanging",
"textures": {
"wood": "entity/signs/hanging/warped"
}
}

View file

@ -0,0 +1,7 @@
{
"credit": "Made with Blockbench by TyBraniff for Bluemaps support.",
"parent": "sign/wall_hanging",
"textures": {
"wood": "entity/signs/hanging/warped"
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/acacia_hanging",
"y": 180
},
"rotation=1": {
"model": "sign/acacia_hanging",
"y": 202.5
},
"rotation=2": {
"model": "sign/acacia_hanging",
"y": 225
},
"rotation=3": {
"model": "sign/acacia_hanging",
"y": 247.5
},
"rotation=4": {
"model": "sign/acacia_hanging",
"y": 270
},
"rotation=5": {
"model": "sign/acacia_hanging",
"y": 292.5
},
"rotation=6": {
"model": "sign/acacia_hanging",
"y": 315
},
"rotation=7": {
"model": "sign/acacia_hanging",
"y": 337.5
},
"rotation=8": {
"model": "sign/acacia_hanging"
},
"rotation=9": {
"model": "sign/acacia_hanging",
"y": 22.5
},
"rotation=10": {
"model": "sign/acacia_hanging",
"y": 45
},
"rotation=11": {
"model": "sign/acacia_hanging",
"y": 67.5
},
"rotation=12": {
"model": "sign/acacia_hanging",
"y": 90
},
"rotation=13": {
"model": "sign/acacia_hanging",
"y": 112.5
},
"rotation=14": {
"model": "sign/acacia_hanging",
"y": 135
},
"rotation=15": {
"model": "sign/acacia_hanging",
"y": 157.5
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=east": {
"model": "sign/acacia_wall_hanging",
"y": 90
},
"facing=south": {
"model": "sign/acacia_wall_hanging",
"y": 180
},
"facing=west": {
"model": "sign/acacia_wall_hanging",
"y": 270
},
"facing=north": {
"model": "sign/acacia_wall_hanging"
}
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/bamboo_hanging",
"y": 180
},
"rotation=1": {
"model": "sign/bamboo_hanging",
"y": 202.5
},
"rotation=2": {
"model": "sign/bamboo_hanging",
"y": 225
},
"rotation=3": {
"model": "sign/bamboo_hanging",
"y": 247.5
},
"rotation=4": {
"model": "sign/bamboo_hanging",
"y": 270
},
"rotation=5": {
"model": "sign/bamboo_hanging",
"y": 292.5
},
"rotation=6": {
"model": "sign/bamboo_hanging",
"y": 315
},
"rotation=7": {
"model": "sign/bamboo_hanging",
"y": 337.5
},
"rotation=8": {
"model": "sign/bamboo_hanging"
},
"rotation=9": {
"model": "sign/bamboo_hanging",
"y": 22.5
},
"rotation=10": {
"model": "sign/bamboo_hanging",
"y": 45
},
"rotation=11": {
"model": "sign/bamboo_hanging",
"y": 67.5
},
"rotation=12": {
"model": "sign/bamboo_hanging",
"y": 90
},
"rotation=13": {
"model": "sign/bamboo_hanging",
"y": 112.5
},
"rotation=14": {
"model": "sign/bamboo_hanging",
"y": 135
},
"rotation=15": {
"model": "sign/bamboo_hanging",
"y": 157.5
}
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/bamboo"
},
"rotation=1": {
"model": "sign/bamboo",
"y": 22.5
},
"rotation=2": {
"model": "sign/bamboo",
"y": 45
},
"rotation=3": {
"model": "sign/bamboo",
"y": 67.5
},
"rotation=4": {
"model": "sign/bamboo",
"y": 90
},
"rotation=5": {
"model": "sign/bamboo",
"y": 112.5
},
"rotation=6": {
"model": "sign/bamboo",
"y": 135
},
"rotation=7": {
"model": "sign/bamboo",
"y": 157.5
},
"rotation=8": {
"model": "sign/bamboo",
"y": 180
},
"rotation=9": {
"model": "sign/bamboo",
"y": 202.5
},
"rotation=10": {
"model": "sign/bamboo",
"y": 225
},
"rotation=11": {
"model": "sign/bamboo",
"y": 247.5
},
"rotation=12": {
"model": "sign/bamboo",
"y": 270
},
"rotation=13": {
"model": "sign/bamboo",
"y": 292.5
},
"rotation=14": {
"model": "sign/bamboo",
"y": 315
},
"rotation=15": {
"model": "sign/bamboo",
"y": 337.5
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=east": {
"model": "sign/bamboo_wall_hanging",
"y": 90
},
"facing=south": {
"model": "sign/bamboo_wall_hanging",
"y": 180
},
"facing=west": {
"model": "sign/bamboo_wall_hanging",
"y": 270
},
"facing=north": {
"model": "sign/bamboo_wall_hanging"
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=south": {
"model": "sign/bamboo_wall"
},
"facing=west": {
"model": "sign/bamboo_wall",
"y": 90
},
"facing=north": {
"model": "sign/bamboo_wall",
"y": 180
},
"facing=east": {
"model": "sign/bamboo_wall",
"y": 270
}
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/birch_hanging",
"y": 180
},
"rotation=1": {
"model": "sign/birch_hanging",
"y": 202.5
},
"rotation=2": {
"model": "sign/birch_hanging",
"y": 225
},
"rotation=3": {
"model": "sign/birch_hanging",
"y": 247.5
},
"rotation=4": {
"model": "sign/birch_hanging",
"y": 270
},
"rotation=5": {
"model": "sign/birch_hanging",
"y": 292.5
},
"rotation=6": {
"model": "sign/birch_hanging",
"y": 315
},
"rotation=7": {
"model": "sign/birch_hanging",
"y": 337.5
},
"rotation=8": {
"model": "sign/birch_hanging"
},
"rotation=9": {
"model": "sign/birch_hanging",
"y": 22.5
},
"rotation=10": {
"model": "sign/birch_hanging",
"y": 45
},
"rotation=11": {
"model": "sign/birch_hanging",
"y": 67.5
},
"rotation=12": {
"model": "sign/birch_hanging",
"y": 90
},
"rotation=13": {
"model": "sign/birch_hanging",
"y": 112.5
},
"rotation=14": {
"model": "sign/birch_hanging",
"y": 135
},
"rotation=15": {
"model": "sign/birch_hanging",
"y": 157.5
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=east": {
"model": "sign/birch_wall_hanging",
"y": 90
},
"facing=south": {
"model": "sign/birch_wall_hanging",
"y": 180
},
"facing=west": {
"model": "sign/birch_wall_hanging",
"y": 270
},
"facing=north": {
"model": "sign/birch_wall_hanging"
}
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/cherry_hanging",
"y": 180
},
"rotation=1": {
"model": "sign/cherry_hanging",
"y": 202.5
},
"rotation=2": {
"model": "sign/cherry_hanging",
"y": 225
},
"rotation=3": {
"model": "sign/cherry_hanging",
"y": 247.5
},
"rotation=4": {
"model": "sign/cherry_hanging",
"y": 270
},
"rotation=5": {
"model": "sign/cherry_hanging",
"y": 292.5
},
"rotation=6": {
"model": "sign/cherry_hanging",
"y": 315
},
"rotation=7": {
"model": "sign/cherry_hanging",
"y": 337.5
},
"rotation=8": {
"model": "sign/cherry_hanging"
},
"rotation=9": {
"model": "sign/cherry_hanging",
"y": 22.5
},
"rotation=10": {
"model": "sign/cherry_hanging",
"y": 45
},
"rotation=11": {
"model": "sign/cherry_hanging",
"y": 67.5
},
"rotation=12": {
"model": "sign/cherry_hanging",
"y": 90
},
"rotation=13": {
"model": "sign/cherry_hanging",
"y": 112.5
},
"rotation=14": {
"model": "sign/cherry_hanging",
"y": 135
},
"rotation=15": {
"model": "sign/cherry_hanging",
"y": 157.5
}
}
}

View file

@ -0,0 +1,67 @@
{
"variants": {
"rotation=0": {
"model": "sign/cherry"
},
"rotation=1": {
"model": "sign/cherry",
"y": 22.5
},
"rotation=2": {
"model": "sign/cherry",
"y": 45
},
"rotation=3": {
"model": "sign/cherry",
"y": 67.5
},
"rotation=4": {
"model": "sign/cherry",
"y": 90
},
"rotation=5": {
"model": "sign/cherry",
"y": 112.5
},
"rotation=6": {
"model": "sign/cherry",
"y": 135
},
"rotation=7": {
"model": "sign/cherry",
"y": 157.5
},
"rotation=8": {
"model": "sign/cherry",
"y": 180
},
"rotation=9": {
"model": "sign/cherry",
"y": 202.5
},
"rotation=10": {
"model": "sign/cherry",
"y": 225
},
"rotation=11": {
"model": "sign/cherry",
"y": 247.5
},
"rotation=12": {
"model": "sign/cherry",
"y": 270
},
"rotation=13": {
"model": "sign/cherry",
"y": 292.5
},
"rotation=14": {
"model": "sign/cherry",
"y": 315
},
"rotation=15": {
"model": "sign/cherry",
"y": 337.5
}
}
}

View file

@ -0,0 +1,19 @@
{
"variants": {
"facing=east": {
"model": "sign/cherry_wall_hanging",
"y": 90
},
"facing=south": {
"model": "sign/cherry_wall_hanging",
"y": 180
},
"facing=west": {
"model": "sign/cherry_wall_hanging",
"y": 270
},
"facing=north": {
"model": "sign/cherry_wall_hanging"
}
}
}

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