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
1.12.2 Forge: SevTech Ages advancements crashes StringError("stream did not contain valid UTF-8") #148
Comments
Packet 0x4d is Advancements: https://wiki.vg/index.php?title=Protocol&oldid=14204#Advancements last-packet'M\x015\x12triumph:stage0/mat\x01\x16triumph:stage0/leather\x01-{"translate":"advancements.stage0.mat.title"}3{"translate":"advancements.stage0.mat.description"}%\x05\x01\x00\x00\x00\x00\x00\x00\x00\n@\xe0\x00\x00A%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x15triumph:stage0/melter\x01\x19triumph:stage0/melterbase\x010{"translate":"advancements.stage0.melter.title"}6{"translate":"advancements.stage0.melter.description"}!\xa2\x01\x00\x00\x00\x01\x00\x00\x00\nA \x00\x00@\xaa\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x0fcompletedParent\x07hasRock\x08hasRock2\x02\x01\x0fcompletedParent\x02\x07hasRock\x08hasRock2\x1dtriumph:stage0/naturescompass\x01\x18triumph:stage0/workstump\x018{"translate":"advancements.stage0.naturescompass.title"}>{"translate":"advancements.stage0.naturescompass.description"}\x1d|\x01\x00\x00\x00\x00\x00\x00\x00\n@\xa0\x00\x00@4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x19triumph:stage0/abyssalgem\x01\x1btriumph:stage0/abyssalbiome\x014{"translate":"advancements.stage0.abyssalgem.title"}:{"translate":"advancements.stage0.abyssalgem.description"}##\x01\x00\x00\x00\x00\x00\x00\x00\n@\xe0\x00\x00@4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x19triumph:stage0/firstbreak\x01\x18triumph:stage0/firsttool\x014{"translate":"advancements.stage0.firstbreak.title"}:{"translate":"advancements.stage0.firstbreak.description"}\x00\x11\x01\x00\x00\x00\x02\x00\x00\x00\n@\x00\x00\x00@\xa0\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00(\nbrokeLog16\nbrokeLog38\nbrokeLog17\nbrokeLog39\nbrokeLog18\nbrokeLog19\x0fcompletedParent\tbrokeLog1\tbrokeLog2\tbrokeLog9\nbrokeLog30\nbrokeLog31\tbrokeLog7\nbrokeLog10\nbrokeLog32\tbrokeLog8\nbrokeLog11\nbrokeLog33\tbrokeLog5\nbrokeLog12\nbrokeLog34\tbrokeLog6\nbrokeLog13\nbrokeLog35\tbrokeLog3\nbrokeLog14\nbrokeLog36\tbrokeLog4\nbrokeLog15\nbrokeLog37\nbrokeLog27\nbrokeLog28\nbrokeLog29\nbrokeLog40\nbrokeLog20\nbrokeLog21\nbrokeLog22\nbrokeLog23\nbrokeLog25\nbrokeLog26\x02\x01\x0fcompletedParent\'\nbrokeLog16\nbrokeLog38\nbrokeLog17\nbrokeLog39\nbrokeLog18\nbrokeLog19\tbrokeLog1\tbrokeLog2\tbrokeLog9\nbrokeLog30\nbrokeLog31\tbrokeLog7\nbrokeLog10\nbrokeLog32\tbrokeLog8\nbrokeLog11\nbrokeLog33\tbrokeLog5\nbrokeLog12\nbrokeLog34\tbrokeLog6\nbrokeLog13\nbrokeLog35\tbrokeLog3\nbrokeLog14\nbrokeLog36\tbrokeLog4\nbrokeLog15\nbrokeLog37\nbrokeLog27\nbrokeLog28\nbrokeLog29\nbrokeLog40\nbrokeLog20\nbrokeLog21\nbrokeLog22\nbrokeLog23\nbrokeLog25\nbrokeLog26\x15triumph:stage0/saddle\x01\x13triumph:stage0/lead\x010{"translate":"advancements.stage0.saddle.title"}6{"translate":"advancements.stage0.saddle.description"}\x01I\x01\x00\x00\x00\x00\x00\x00\x00\nA\x00\x00\x00@\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x19triumph:stage0/melterbase\x01\x1atriumph:stage0/flamehopper\x014{"translate":"advancements.stage0.melterbase.title"}:{"translate":"advancements.stage0.melterbase.description"}!\xa2\x01\x00\x08\x00\x02\x00\x00\x00\nA\x10\x00\x00@\xaa\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x0fcompletedParent\x07hasRock\x08hasRock2\x02\x01\x0fcompletedParent\x02\x07hasRock\x08hasRock2\x1btriumph:stage0/fluidbladder\x01\x18triumph:stage0/workstump\x016{"translate":"advancements.stage0.fluidbladder.title"}<{"translate":"advancements.stage0.fluidbladder.description"}"\x11\x01\x00\x00\x00\x00\x00\x00\x00\n@\xa0\x00\x00A\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x16triumph:stage0/buffalo\x01\x16triumph:stage0/totemic\x011{"translate":"advancements.stage0.buffalo.title"}7{"translate":"advancements.stage0.buffalo.description"}!\xdd\x01\x00\x00\x00\x00\x00\x00\x00\nA\x00\x00\x00A\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x16triumph:stage0/totemic\x01\x16triumph:stage0/leather\x011{"translate":"advancements.stage0.totemic.title"}7{"translate":"advancements.stage0.totemic.description"}!\xcf\x01\x00\x00\x00\x00\x00\x00\x00\n@\xe0\x00\x00A\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x0fcompletedParent\x07hasRock\x08hasRock2\x08hasRock3\x04\x01\x0fcompletedParent\x01\x07hasRock\x01\x08hasRock2\x01\x08hasRock3\x1atriumph:stage0/flamehopper\x01\x1atriumph:stage0/woodhopper2\x015{"translate":"advancements.stage0.flamehopper.title"};{"translate":"advancements.stage0.flamehopper.description"}"$\x01\x00\x00\x00\x02\x00\x00\x00\nA\x00\x00\x00@\xaa\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x17triumph:stage0/farmland\x01\x18triumph:stage0/workblade\x012{"translate":"advancements.stage0.farmland.title"}8{"translate":"advancements.stage0.farmland.description"}\x00<\x01\x00\x00\x00\x00\x00\x00\x00\n@\x80\x00\x00?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x06traded\x02\x01\x0fcompletedParent\x01\x06traded\x18triumph:stage0/workstump\x01\x1btriumph:stage0/collectplank\x013{"translate":"advancements.stage0.workstump.title"}9{"translate":"advancements.stage0.workstump.description"}"&\x01\x00\x00\x00\x01\x00\x00\x00\n@\x80\x00\x00@\xa0\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07crafted\x02\x01\x0fcompletedParent\x01\x07crafted\x1ftriumph:stage0/lowgradecharcoal\x01\x13triumph:stage0/kiln\x01:{"translate":"advancements.stage0.lowgradecharcoal.title"}@{"translate":"advancements.stage0.lowgradecharcoal.description"}"\x1f\x01\x00\x00\x00\x00\x00\x00\x00\n@\xc0\x00\x00?\xe8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x1atriumph:stage0/woodhopper1\x01\x19triumph:stage0/firstchest\x015{"translate":"advancements.stage0.woodhopper1.title"};{"translate":"advancements.stage0.woodhopper1.description"}\x11\x14\x01\x00\x00\x00\x02\x00\x00\x00\n@\xc0\x00\x00@\xaa\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x1atriumph:stage0/woodhopper2\x01\x1atriumph:stage0/woodhopper1\x015{"translate":"advancements.stage0.woodhopper2.title"};{"translate":"advancements.stage0.woodhopper2.description"}"#\x01\x00\x00\x00\x02\x00\x00\x00\n@\xe0\x00\x00@\xaa\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x13triumph:stage0/lead\x01\x16triumph:stage0/leather\x01.{"translate":"advancements.stage0.lead.title"}4{"translate":"advancements.stage0.lead.description"}\x01\xa4\x01\x00\x00\x00\x00\x00\x00\x00\n@\xe0\x00\x00@\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x18triumph:stage0/firsttool\x01\x13triumph:stage0/root\x013{"translate":"advancements.stage0.firsttool.title"}9{"translate":"advancements.stage0.firsttool.description"}!\x07\x01\x00\x00\x00\x02\x00\x00\x00\n?\x80\x00\x00@\xab\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x13triumph:stage0/fish\x01\x14triumph:stage0/spear\x01.{"translate":"advancements.stage0.fish.title"}4{"translate":"advancements.stage0.fish.description"}\x01]\x01\x00\x00\x00\x00\x00\x00\x00\n@\x80\x00\x00@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x0ckilled_fish3\x0ckilled_fish2\x0bkilled_fish\x0ckilled_fish4\x0fcompletedParent\x02\x01\x0fcompletedParent\x04\x0ckilled_fish3\x0ckilled_fish2\x0bkilled_fish\x0ckilled_fish4\x14triumph:stage0/fiber\x01\x13triumph:stage0/root\x01/{"translate":"advancements.stage0.fiber.title"}5{"translate":"advancements.stage0.fiber.description"} b\x01\x00\x00\x00\x00\x00\x00\x00\n?\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x16triumph:stage0/firepit\x01\x13triumph:stage0/fire\x011{"translate":"advancements.stage0.firepit.title"}7{"translate":"advancements.stage0.firepit.description"}&\xe7\x01\x00\x00\x00\x00\x00\x00\x00\n@@\x00\x00A\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x13triumph:stage0/tipi\x01\x16triumph:stage0/leather\x01.{"translate":"advancements.stage0.tipi.title"}4{"translate":"advancements.stage0.tipi.description"}!\xd1\x01\x00\x00\x00\x00\x00\x00\x00\n@\xe0\x00\x00A\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x1btriumph:stage0/collectplank\x01\x19triumph:stage0/firstbreak\x016{"translate":"advancements.stage0.collectplank.title"}<{"translate":"advancements.stage0.collectplank.description"}\x1b$\x01\x00\x00\x00\x02\x00\x00\x00\n@@\x00\x00@\xa0\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07crafted\x02\x01\x0fcompletedParent\x01\x07crafted\x16triumph:stage0/upgrade\x01\x18triumph:stage0/firsttool\x011{"translate":"advancements.stage0.upgrade.title"}7{"translate":"advancements.stage0.upgrade.description"} \xf1\x01\x00\x00\x00\x00\x00\x00\x00\n@\x00\x00\x00?\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x18triumph:stage0/saltflats\x01\x14triumph:stage0/grill\x013{"translate":"advancements.stage0.saltflats.title"}9{"translate":"advancements.stage0.saltflats.description"} W\x01\x00\x00\x00\x00\x00\x00\x00\n@\xa0\x00\x00A\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x0fcompletedParent\x08hasRock2\x08hasRock1\x08hasRock5\x08hasRock4\x08hasRock3\x02\x01\x0fcompletedParent\x05\x08hasRock2\x08hasRock1\x08hasRock5\x08hasRock4\x08hasRock3\x13triumph:stage0/fire\x01\x18triumph:stage0/firsttool\x01.{"translate":"advancements.stage0.fire.title"}4{"translate":"advancements.stage0.fire.description"}"\x0c\x01\x00\x00\x00\x00\x00\x00\x00\n@\x00\x00\x00A\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x17triumph:stage0/charcoal\x01\x1btriumph:stage0/horsechopper\x012{"translate":"advancements.stage0.charcoal.title"}8{"translate":"advancements.stage0.charcoal.description"}\x1b&\x01\x00\x00\x00\x00\x00\x00\x00\nA \x00\x00@\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x15triumph:stage0/baykok\x01\x16triumph:stage0/buffalo\x010{"translate":"advancements.stage0.baykok.title"}6{"translate":"advancements.stage0.baykok.description"}!\xe0\x01\x00\x00\x00\x00\x00\x00\x00\nA\x10\x00\x00A\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\rkilled_spider\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x02\rkilled_spider\x07hasRock\x19triumph:stage0/horsepower\x01\x13triumph:stage0/lead\x014{"translate":"advancements.stage0.horsepower.title"}:{"translate":"advancements.stage0.horsepower.description"}\x1b#\x01\x00\x00\x00\x00\x00\x00\x00\nA\x00\x00\x00@\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x14triumph:stage0/atlas\x01\x18triumph:stage0/workblade\x01/{"translate":"advancements.stage0.atlas.title"}5{"translate":"advancements.stage0.atlas.description"}\x13>\x01\x00\x00\x00\x00\x00\x00\x00\n@\x80\x00\x00?\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x05book1\x0fcompletedParent\x02\x01\x05book1\x01\x0fcompletedParent\x14triumph:stage0/wheel\x01\x15triumph:stage0/saddle\x01/{"translate":"advancements.stage0.wheel.title"}5{"translate":"advancements.stage0.wheel.description"}\x15\x99\x01\x00\x00\x00\x00\x00\x00\x00\nA\x10\x00\x00@\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x13triumph:stage1/cart\x01\x14triumph:stage0/wheel\x01.{"translate":"advancements.stage1.cart.title"}4{"translate":"advancements.stage1.cart.description"}\x15\x9a\x01\x00\x00\x00\x00\x00\x00\x00\nA \x00\x00@\xea\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x18triumph:stage0/workblade\x01\x16triumph:stage0/upgrade\x013{"translate":"advancements.stage0.workblade.title"}9{"translate":"advancements.stage0.workblade.description"}!\x16\x01\x00\x00\x00\x00\x00\x00\x00\n@@\x00\x00?\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x1btriumph:stage0/abyssalbiome\x01\x1dtriumph:stage0/naturescompass\x016{"translate":"advancements.stage0.abyssalbiome.title"}<{"translate":"advancements.stage0.abyssalbiome.description"}#h\x01\x00\x00\x00\x00\x00\x00\x00\n@\xc0\x00\x00@4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x0fentered_forest3\x0eentered_forest\x0fentered_forest4\x0fcompletedParent\x0fentered_forest2\x0fentered_forest5\x02\x01\x0fcompletedParent\x05\x0fentered_forest3\x0eentered_forest\x0fentered_forest4\x0fentered_forest2\x0fentered_forest5\x18triumph:stage0/fertility\x01\x16triumph:stage0/totemic\x013{"translate":"advancements.stage0.fertility.title"}9{"translate":"advancements.stage0.fertility.description"}\x01(\x01\x00\x00\x00\x00\x00\x00\x00\nA\x00\x00\x00A\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x08ceremony\x02\x01\x0fcompletedParent\x01\x08ceremony\x1btriumph:stage0/chestupgrade\x01\x19triumph:stage0/firstchest\x016{"translate":"advancements.stage0.chestupgrade.title"}<{"translate":"advancements.stage0.chestupgrade.description"}\'Q\x01\x00\x00\x00\x00\x00\x00\x00\n@\xc0\x00\x00@\x8a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x14triumph:stage0/spear\x01\x18triumph:stage0/weaponize\x01/{"translate":"advancements.stage0.spear.title"}5{"translate":"advancements.stage0.spear.description"}&\xe0\x01\x00\x00\x00\x00\x00\x00\x00\n@@\x00\x00@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x1btriumph:stage0/horsechopper\x01\x19triumph:stage0/horsepower\x016{"translate":"advancements.stage0.horsechopper.title"}<{"translate":"advancements.stage0.horsechopper.description"}\x1b%\x01\x00\x00\x00\x00\x00\x00\x00\nA\x10\x00\x00@\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x13triumph:stage0/mill\x01\x13triumph:stage0/gear\x01.{"translate":"advancements.stage0.mill.title"}4{"translate":"advancements.stage0.mill.description"}\x14\xa2\x01\x00\x00\x00\x00\x00\x00\x00\nA0\x00\x00A\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x16triumph:stage0/leather\x01\x1btriumph:stage0/fluidbladder\x011{"translate":"advancements.stage0.leather.title"}7{"translate":"advancements.stage0.leather.description"}\x01N\x01\x00\x00\x00\x00\x00\x00\x00\n@\xc0\x00\x00A\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x18triumph:stage0/handgrind\x01\x18triumph:stage0/workstump\x013{"translate":"advancements.stage0.handgrind.title"}9{"translate":"advancements.stage0.handgrind.description"}\x1b"\x01\x00\x00\x00\x00\x00\x00\x00\n@\xa0\x00\x00@t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x18triumph:stage0/weaponize\x01\x18triumph:stage0/firsttool\x013{"translate":"advancements.stage0.weaponize.title"}c{"translate":"Left-Click a Bone on a block like Cobblestone or Stone to turn it into a Sharp Bone"} \xed\x01\x00\x00\x00\x00\x00\x00\x00\n@\x00\x00\x00@`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x19triumph:stage0/stonetools\x01\x16triumph:stage0/upgrade\x014{"translate":"advancements.stage0.stonetools.title"}:{"translate":"advancements.stage0.stonetools.description"}\x01\x12\x01\x00\x00\x00\x00\x00\x00\x00\n@@\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x13triumph:stage0/gear\x01\x14triumph:stage0/wheel\x01.{"translate":"advancements.stage0.gear.title"}4{"translate":"advancements.stage0.gear.description"}\x14\xe1\x01\x00\x00\x00\x00\x00\x00\x00\nA \x00\x00A\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x19triumph:stage0/flintknapp\x01\x13triumph:stage0/mesh\x014{"translate":"advancements.stage0.flintknapp.title"}:{"translate":"advancements.stage0.flintknapp.description"}\x01>\x01\x00\x00\x00\x00\x00\x00\x00\n@@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x1ctriumph:stage0/waterstrainer\x01\x18triumph:stage0/workstump\x017{"translate":"advancements.stage0.waterstrainer.title"}={"translate":"advancements.stage0.waterstrainer.description"}"\x05\x01\x00\x00\x00\x00\x00\x00\x00\n@\xa0\x00\x00@\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x0fcompletedParent\x08hasRock2\x08hasRock1\x03\x01\x0fcompletedParent\x01\x08hasRock2\x01\x08hasRock1\x14triumph:stage0/grill\x01\x16triumph:stage0/firepit\x01/{"translate":"advancements.stage0.grill.title"}5{"translate":"advancements.stage0.grill.description"}"\'\x01\x00\x00\x00\x00\x00\x00\x00\n@\x80\x00\x00A\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x13triumph:stage0/root\x00\x01.{"translate":"advancements.stage0.root.title"}4{"translate":"advancements.stage0.root.description"}"\x18\x01\x00\x00\x00\x00\x00\x00\x00\t)minecraft:textures/blocks/cobblestone.png\x00\x00\x00\x00@+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x0ekilledByEntity\x0eenterDimension\nkillEntity\x08location\nbreakBlock\tcraftItem\x0finventoryChange\x01\x07\x0ekilledByEntity\x0eenterDimension\nkillEntity\x08location\nbreakBlock\tcraftItem\x0finventoryChange\x13triumph:stage0/kiln\x01\x18triumph:stage0/workstump\x01.{"translate":"advancements.stage0.kiln.title"}4{"translate":"advancements.stage0.kiln.description"}" \x01\x00\x00\x00\x00\x00\x00\x00\n@\xa0\x00\x00?\xe8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x19triumph:stage0/firstchest\x01\x18triumph:stage0/workstump\x014{"translate":"advancements.stage0.firstchest.title"}:{"translate":"advancements.stage0.firstchest.description"}&\xf7\x01\x00\x00\x00\x02\x00\x00\x00\n@\xa0\x00\x00@\x9a\x00\x00\x01\x00\x88\x88\x88\x01\x00dA\xa4\x01\x00\x88\x88\x88\x01\x00dA\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x0fcompletedParent\x07hasRock\x08hasRock2\x08hasRock4\x08hasRock3\x02\x01\x0fcompletedParent\x04\x07hasRock\x08hasRock2\x08hasRock4\x08hasRock3\x17triumph:stage0/tomahawk\x01\x18triumph:stage0/weaponize\x012{"translate":"advancements.stage0.tomahawk.title"}8{"translate":"advancements.stage0.tomahawk.description"}&\xe3\x01\x00\x00\x00\x00\x00\x00\x00\n@@\x00\x00@\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x1btriumph:stage0/woodenbarrel\x01\x1btriumph:stage0/fluidbladder\x016{"translate":"advancements.stage0.woodenbarrel.title"}<{"translate":"advancements.stage0.woodenbarrel.description"}\x1e\xad\x01\x00\x00\x00\x00\x00\x00\x00\n@\xc0\x00\x00@\xf6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x08hasRock9\x08hasRock8\x08hasRock7\x0fcompletedParent\x08hasRock2\x08hasRock1\x08hasRock6\x08hasRock5\thasRock10\x08hasRock4\x08hasRock3\x02\x01\x0fcompletedParent\n\x08hasRock9\x08hasRock8\x08hasRock7\x08hasRock2\x08hasRock1\x08hasRock6\x08hasRock5\thasRock10\x08hasRock4\x08hasRock3\x13triumph:stage0/mesh\x01\x14triumph:stage0/fiber\x01.{"translate":"advancements.stage0.mesh.title"}4{"translate":"advancements.stage0.mesh.description"}\x1d\xf8\x01\x00\x00\x00\x00\x00\x00\x00\n@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompletedParent\x07hasRock\x02\x01\x0fcompletedParent\x01\x07hasRock\x00\x04\x13triumph:stage0/root\x07\x0ekilledByEntity\x00\x0eenterDimension\x00\nkillEntity\x00\x08location\x01\x00\x00\x01j\xadm\x90\xc0\nbreakBlock\x00\tcraftItem\x00\x0finventoryChange\x00\x13triumph:stage1/cart\x02\x0fcompletedParent\x00\x07hasRock\x00\x14triumph:stage0/fiber\x02\x0fcompletedParent\x01\x00\x00\x01j\xadm\x90\xc0\x07hasRock\x00\x18triumph:stage0/firsttool\x02\x0fcompletedParent\x01\x00\x00\x01j\xadm\x90\xc0\x07hasRock\x00' |
See c1692e9 There are two more instances, encountered when debugging #148 > Instead of read_to_string(), use read_to_end() to read into a buffer, > then convert using String::from_utf8() and unwrap it. This gives a > better error message when UTF-8 fails to decode. which includes the offending bytes that can't be converted
Improved the generic "did not contain valid UTF-8" error in 10e5d6f, it's parsing a large number of bytes: about to parse id=4d, dir=Clientbound state=Play decodes to 'etedParent\x01\x07hasRock\x15triumph:stage0/melter\x01\x19triumph:stage0...', which is at offset 211 in last_packet. Before is: 'M\x015\x12triumph:stage0/mat\x01\x16triumph:stage0/leather\x01-{"translate":"advancements.stage0.mat.title"}3{"translate":"advancements.stage0.mat.description"}%\x05\x01\x00\x00\x00\x00\x00\x00\x00\n@\xe0\x00\x00A%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0fcompl supposed to be the string length-prefixed "\x0fcompletedParent". Advancements is new in 1.12.2 (not present in 1.11.2). manually decoding: adding lots of logging: diff --git a/src/protocol/packet.rs b/src/protocol/packet.rs
index 6fb57e9..d35b214 100644
--- a/src/protocol/packet.rs
+++ b/src/protocol/packet.rs
@@ -2046,18 +2046,24 @@ pub struct Advancement {
impl Serializable for Advancement {
fn read_from<R: io::Read>(buf: &mut R) -> Result<Self, Error> {
+ println!("reading Advancement");
let id: String = Serializable::read_from(buf)?;
+ println!("id={}", id);
let parent_id = {
let has_parent: u8 = Serializable::read_from(buf)?;
+ println!("has_parent? {}", has_parent);
if has_parent != 0 {
let parent_id: String = Serializable::read_from(buf)?;
+ println!("parent_id {}",parent_id);
Some(parent_id)
} else {
None
}
};
+ println!("parent_id={:?}", parent_id);
let has_display: u8 = Serializable::read_from(buf)?;
+ println!("has_display {}", has_display);
let display_data = {
if has_display != 0 {
let display_data: AdvancementDisplay = Serializable::read_from(buf)?;
@@ -2066,9 +2072,12 @@ impl Serializable for Advancement {
None
}
};
+ println!("display_data {:?}", display_data);
let criteria: LenPrefixed<VarInt, String> = Serializable::read_from(buf)?;
+ println!("criteria {:?}", criteria);
let requirements: LenPrefixed<VarInt, LenPrefixed<VarInt, String>> = Serializable::read_from(buf)?;
+ println!("requirements {:?}", requirements);
Ok(Advancement {
id,
parent_id,
@@ -2102,18 +2111,27 @@ pub struct AdvancementDisplay {
impl Serializable for AdvancementDisplay {
fn read_from<R: io::Read>(buf: &mut R) -> Result<Self, Error> {
+ println!("reading AdvancementDisplay");
let title: String = Serializable::read_from(buf)?;
+ println!("title {}", title);
let description: String = Serializable::read_from(buf)?;
+ println!("description {}", description);
let icon: Option<crate::item::Stack> = Serializable::read_from(buf)?;
+ println!("icon {:?}", icon);
let frame_type: VarInt = Serializable::read_from(buf)?;
+ println!("frame_type {:?}", frame_type);
let flags: i32 = Serializable::read_from(buf)?;
+ println!("flags {}", flags);
let background_texture: Option<String> = if flags & 1 != 0 {
Serializable::read_from(buf)?
} else {
None
};
+ println!("background_texture {:?}", background_texture);
let x_coord: f32 = Serializable::read_from(buf)?;
+ println!("x_coord {:?}", x_coord);
let y_coord: f32 = Serializable::read_from(buf)?;
+ println!("y_coord {:?}", y_coord);
Ok(AdvancementDisplay {
title,
@@ -2170,13 +2188,17 @@ pub struct CriterionProgress {
impl Serializable for CriterionProgress {
fn read_from<R: io::Read>(buf: &mut R) -> Result<Self, Error> {
+ println!("read CriterionProgress");
let id = Serializable::read_from(buf)?;
+ println!("id {:?}", id);
let achieved: u8 = Serializable::read_from(buf)?;
+ println!("achieved {:?}", achieved);
let date_of_achieving: Option<i64> = if achieved != 0 {
Serializable::read_from(buf)?
} else {
None
};
+ println!("date {:?}", date_of_achieving);
Ok(CriterionProgress {
id, output: about to parse id=18, dir=Clientbound state=Play so far so good...but then lots of empty data: criteria [] reading Advancement reading Advancement reading Advancement reading AdvancementDisplay Not even https://github.com/PrismarineJS/node-minecraft-protocol can parse this: const mc=require('minecraft-protocol');
const d=mc.createDeserializer({version:"1.12.2", state:mc.states.PLAY});
d.on('data',(parsed)=>{
console.log(JSON.stringify(parsed, null, ''));
console.log(parsed.data.params);
});
d.write(require('fs').readFileSync('../../rust/steven/last-packet')); Error: Read error for params.advancements.advancementMapping.3.value.displayData.icon.unknown.default.nbtData.type : 109 is not in the mappings value hmm, there was a recent update 17 days ago to the advancements packet here: PrismarineJS/minecraft-data@b9e1b29 - but appears unrelated. Icon is decoded as a slot here: https://github.com/PrismarineJS/minecraft-data/blob/8b62c26045a277172bdfafbe3298ae745c46ac58/data/pc/1.12.2/protocol.json#L849 - but it is choking on the 109 NBT data type. node-minecraft-protocol supports these NBT mappings: { '0': 'end',
'1': 'byte',
'2': 'short',
'3': 'int',
'4': 'long',
'5': 'float',
'6': 'double',
'7': 'byteArray',
'8': 'string',
'9': 'list',
'10': 'compound',
'11': 'intArray',
'12': 'longArray' } Steven decodes tags in: Line 185 in 10e5d6f
Maybe a mod changed the advancement structure? |
This Forge change looks suspect: MinecraftForge/MinecraftForge#4114 Allow advancement icons to have nbt, but the discussion claims standard deserialization will read/write it:
and indeed the icon is an There is support in Forge for loading mod enhancements: MinecraftForge/MinecraftForge@a4fb33d Add support for loading mod advancements from the mod jar files. And another change to support oredict item predicates in advancements: MinecraftForge/MinecraftForge#4188 Add support for oredict item predicates in advancements, and add a registry for item predicates - it changes the critereon[sic] criterion, but maybe not the packet? But there is also added resilience in Forge, an option to continue on errors: MinecraftForge/MinecraftForge#4277 [1.12] Continue loading mod recipes and advancements after encountering an error . A big change is allowing pagination on advancements: MinecraftForge/MinecraftForge#4183 - client-side only apparently. Finally, another robustness change: MinecraftForge/MinecraftForge@6d35b1b Fixed invalid erroring case during loading Advancements form mods that don't have advancements. Worst case, could just ignore the Advancements packet, avoiding parsing it, skipping over the byte length... this would allow connecting, and the packets aren't supported anyways yet here. |
Filed to node-minecraft-protocol since they also can't parse this packet, if they are interested in adding support too: PrismarineJS/node-minecraft-protocol#627 but for now, may be the most expedient to just skip parsing this packet: #149. It is a big hairy packet, could cause a lot of problems and I'm not even using it... |
See c1692e9 There are two more instances, encountered when debugging #148 > Instead of read_to_string(), use read_to_end() to read into a buffer, > then convert using String::from_utf8() and unwrap it. This gives a > better error message when UTF-8 fails to decode. which includes the offending bytes that can't be converted
See c1692e9 There are two more instances, encountered when debugging #148 > Instead of read_to_string(), use read_to_end() to read into a buffer, > then convert using String::from_utf8() and unwrap it. This gives a > better error message when UTF-8 fails to decode. which includes the offending bytes that can't be converted
See c1692e9 There are two more instances, encountered when debugging #148 > Instead of read_to_string(), use read_to_end() to read into a buffer, > then convert using String::from_utf8() and unwrap it. This gives a > better error message when UTF-8 fails to decode. which includes the offending bytes that can't be converted
See c1692e9 There are two more instances, encountered when debugging #148 > Instead of read_to_string(), use read_to_end() to read into a buffer, > then convert using String::from_utf8() and unwrap it. This gives a > better error message when UTF-8 fails to decode. which includes the offending bytes that can't be converted
See c1692e9 There are two more instances, encountered when debugging #148 > Instead of read_to_string(), use read_to_end() to read into a buffer, > then convert using String::from_utf8() and unwrap it. This gives a > better error message when UTF-8 fails to decode. which includes the offending bytes that can't be converted
SevTech_Ages_Server_3.1.1 (1.12.2, top 3 on Curseforge)
crashes on login:
packet = Some(PluginMessageClientbound(PluginMessageClientbound { channel: "thebetweenlands", data: [17, 0, 0, 0, 18, 0, 0, 0, 16, 10, 0, 0, 0] }))
Decompressed threshold=256 len=2352 uncompressed_size=14939 to 14939 bytes
about to parse id=4d, dir=Clientbound state=Play
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 14, 0, 0, 0, 11, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 16, 0, 0, 0, 12, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 15, 0, 0, 0, 20, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 17, 0, 0, 0, 13, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 8, 0, 0, 0, 16, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 8, 0, 0, 0, 15, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 11, 0, 0, 0, 11, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 8, 0, 0, 0, 17, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 15, 0, 0, 0, 11, 10, 0, 0, 0]
Received plugin message: channel=thebetweenlands, data=[17, 0, 0, 0, 18, 0, 0, 0, 16, 10, 0, 0, 0]
thread 'main' panicked at 'Err: IOError(Custom { kind: InvalidData, error: StringError("stream did not contain valid UTF-8") })', src/server/mod.rs:449:33
Found in #146 1.12.2/1.10.2 Forge: Beyond/Skyfactory3/SevTech Ages crashes: error: StringError("failed to fill whole buffer") / java.util.zip.DataFormatException: incorrect header check, which extends #144 Forge 1.8.9-1.12.2 handshake protocol support. 1.12.2 protocol: https://wiki.vg/index.php?title=Protocol&oldid=14204
Full backtrace:
The text was updated successfully, but these errors were encountered: