Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Serialization/deserialization errors #865

Open
antithug opened this issue Jun 15, 2021 · 0 comments
Open

Serialization/deserialization errors #865

antithug opened this issue Jun 15, 2021 · 0 comments

Comments

@antithug
Copy link

Versions

  • minecraft-protocol: 1.25.5
  • server: flying-squid
  • node: 14.17.0

Detailed description of a problem

First, my setup is prismarine-web-client ==> flying-squid. In flying-squid, I have several world directories with maps downloaded from internet. Some of the maps I am using are large - Greenfield, Oshode City, ...

I switch maps by stopping the server, changing the settings to point to the new world dir, and set the correct version. I also had to put it a small hack in prismarine-web-client to make sure the version matches, since I'm running in off line mode.

I'm certain that the versions match on the server and client since I've added console msgs to the version dependent chunk processing and the serialization/deserialization processing.

In some cases, there are serialization/deserialization errors when the columns are passed from the client to the server.

Greenfield 0.5.3

With Greenfield 0.5.3 which is 1.14.4, I have to put a fix in the prismarine-provider-anvil to ignore certain sections (I have opened an issue for this, see below). With the fix, it mostly works, except I notice some invisible blocks. I do not think the invisible blocks are related to my fix since I can use the 1.14.4 Java client to connect to my flying-squid server and I can see the blocks.

Without the fix, I get 'attempted to read past the end of the chunk' errors for most chunks, so the error seems to be on the deserialization side since the Java 1.14.4 client seems to be able to deserialize the chunks (there are no invisible blocks).

Oshode City

This is 1.12.2, and it works with no changes!

Context

It's very easy to create the Greenfield setup. I'll include my changes here to make it easy to duplicate.

settings.json for flying-squid

{
"motd": "A MineCraft Server\nRunning minecraft",
"port": 10000,
"max-players": 10,
"logging": true,
"online-mode": false,
"gameMode": 1,
"difficulty": 1,
"worldFolder":"world-greenfield",
"generation": {
"name": "diamond_square",
"options":{
"worldHeight": 80
}
},
"kickTimeout": 10000,
"plugins": {

},
"modpe": false,
"view-distance": 10,
"player-list-text": {
"header":{"text": "MineCraft"},
"footer":{"text": "Test server"}
},
"everybody-op":true,
"max-entities":100,
"version": "1.14.4"
}

config.json for prismarine-web-client

{
"defaultHost": "localhost",
"defaultHostPort": 10000,
"defaultProxy": "",
"defaultProxyPort": 0
}

fix for prismarine-provider-anvil

PrismarineJS/prismarine-provider-anvil#43

Setting version in prismarine-web-client in index.js

const bot = mineflayer.createBot({
host,
port,
username,
password,
==> version: '1.14.4',
viewDistance: 'tiny',
checkTimeoutInterval: 240 * 1000,
noPongTimeout: 240 * 1000,
closeTimeout: 240 * 1000
})

Another fix to bypass the ping which causes a hang most of the time. This is in autoVersion.js. It seems to do the ping to get the version, but the version is hard coded so we don't need it.

module.exports = function (client, options) {
client.wait_connect = true // don't let src/client/setProtocol proceed on socket 'connect' until 'connect_allowed'
debug('pinging', options.host)
// TODO: use 0xfe ping instead for better compatibility/performance? https://github.com/deathcap/node-minecraft-ping
client.version = options.version
client.state = states.HANDSHAKING
client.emit('connect_allowed')
client.wait_connect = false
return;
ping(options, function (err, response) {......

Hope this helps.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant