23:02 <+md_5> actually thats 46a 23:02 < dx> Thinkofname: also what happened with your name? 23:02 <+Thinkofname> dx: they didn't add the debug strings for all packets 23:02 <+Thinkofname> and things happened 23:02 < dx> RIP 23:02 <+md_5> 46a, protocol 86 23:03 < unascribed> that worked :D 23:03 < unascribed> what did they do to the IDs anyway? they never used to change but they got shuffled or something in the snapshots... 23:03 <+md_5> unascribed they're alphabetised based on mojang names 23:03 <+md_5> soa dding / removing one packet changes a whole bunch 23:04 < unascribed> ... 23:04 <+md_5> pretty sure G_rum said that anyway 23:04 <+md_5> either way there are no ids in the code, its just a list 23:05 < dx> yeah there hasn't been any guarantee of stability of packet IDs since 1.7 23:05 < dx> they've been quite explicit about that imo 23:06 < rom1504> that makes it more difficult to figure out the protocol though 23:06 < rom1504> well a bit I guess 23:06 < unascribed> md_5, do you have a 1.8 dump as well, so I'm sure I update the page correctly? 23:06 <+md_5> gimme a few minutes 23:06 < unascribed> alright, thanks 23:06 < rom1504> anyway, are there any guarantee of stability at all about internal minecraft stuff ? 23:07 <+md_5> no 23:07 < rom1504> so that's that 23:07 <+md_5> unascribed paste.md-5.net/newudiqova.txt 23:07 < dx> Thinkofname: do you think i should just keep that issue closed? as in not worth bothering mojang about it 23:07 <+md_5> dx probably, no reason for them to add that, doesnt help them debugging, just makes their code easier to reverse engineer 23:08 <+Thinkofname> ^^ 23:08 < redstonehelper> if you want it fixed go and have it reopened 23:08 < redstonehelper> mojang can still say "won't fix because X" 23:08 < dx> well i certainly don't care anymore, personally 23:08 < unascribed> come to think of it actually, I'd only be able to update the packet id list; would it even be worth changing the page, since it's supposed to document all the changes? 23:08 <+Thinkofname> given it was hidden behind a flag it was never really a feature anyway 23:08 < unascribed> I could just put a warning in that only the IDs had been updated 23:09 <+md_5> "399d 13h 33m " 23:09 <+md_5> dx nearly 400 day bug :p 23:09 < dx> :D 23:10 < rom1504> unascribed: yeah that's still useful 23:10 < unascribed> alright 23:10 < unascribed> I'll put in the notice, and someone with more time and the proper tools can fix the other differences 23:11 < unascribed> gah, I'll have to do this a bit later; thanksgiving 23:16 < dx> oh dammit some bot reopened the ticket when i replied saying that they can keep it closed 23:19 <+Thinkofname> ha 23:19 < ScruffyRules> Lol 23:27 < rom1504> :d 23:28 < dx> oh dammit some redstonehelper didn't close it 23:28 < redstonehelper> dx: and now some stupid mod... 23:28 < redstonehelper> god damnit 23:28 < dx> hahaha --- Day changed ven. nov. 27 2015 06:42 <+Grum> closed that ticket. 08:41 < morfin> is there anywhere description of all quirks including redstone 08:44 < morfin> as i know redstone is incredibly hard to implement 09:25 < Fenhl> Minecraft Wiki? --- Log closed ven. nov. 27 13:24:31 2015 --- Log opened ven. nov. 27 13:42:48 2015 13:42 -!- Irssi: #mcdevs: Total of 122 nicks [1 ops, 0 halfops, 15 voices, 106 normal] 13:49 -!- Irssi: Join to #mcdevs was synced in 399 secs 15:12 < morfin> hm --- Day changed sam. nov. 28 2015 01:20 < Not-e2ae> [mineflayer] rom1504 pushed 4 commits to master [+0/-0/±4] http://git.io/vBKo2 01:20 < Not-e2ae> [mineflayer] Minecheesecraft ca4ae7c - Added a project of mine to the list. 01:20 < Not-e2ae> [mineflayer] Minecheesecraft 1c951f8 - Update README.md 01:20 < Not-e2ae> [mineflayer] Minecheesecraft 71b2100 - Update README.md 01:20 < Not-e2ae> [mineflayer] rom1504 0eb8492 - Merge pull request #343 from Minecheesecraft/patch-1 Added a project of mine to the list. 01:50 < Not-4e28> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vBKXf 01:50 < Not-4e28> [flying-squid] rom1504 af3cfed - fix place lime wool bug (use Item.fromNotch) 01:54 < Not-4e28> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vBKX1 01:54 < Not-4e28> [flying-squid] rom1504 23094fd - try/catch acceptClick until everything is implemented 02:16 < Not-4e28> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±3] http://git.io/vBKNz 02:16 < Not-4e28> [flying-squid] rom1504 f2889dd - fix /command help message 13:27 < Not-4e28> [flying-squid] mhsjlw pushed 1 commit to master [+0/-0/±1] http://git.io/vBi10 13:27 < Not-4e28> [flying-squid] mhsjlw 96ef26a - Update README.md 13:30 < Not-4e28> [flying-squid] mhsjlw pushed 1 commit to master [+0/-0/±1] http://git.io/vBiMl 13:30 < Not-4e28> [flying-squid] mhsjlw 74ecfcd - Update README.md 13:36 < Not-4e28> [flying-squid] mhsjlw pushed 1 commit to master [+1/-1/±0] http://git.io/vBiDa 13:36 < Not-4e28> [flying-squid] mhsjlw 4b2915b - Rename api.md to API.md 13:36 < Not-4e28> [flying-squid] mhsjlw pushed 1 commit to master [+1/-1/±0] http://git.io/vBiDr 13:36 < Not-4e28> [flying-squid] mhsjlw 7c314a5 - Rename contribute.md to CONTRIBUTE.md 13:38 < Not-4e28> [flying-squid] mhsjlw pushed 1 commit to master [+1/-1/±0] http://git.io/vBiDd 13:38 < Not-4e28> [flying-squid] mhsjlw 5f02899 - Update and rename history.md to HISTORY.md 13:49 < Not-4e28> [flying-squid] mhsjlw pushed 1 commit to master [+0/-0/±1] http://git.io/vBi98 13:49 < Not-4e28> [flying-squid] mhsjlw 1c4611c - Various updates to MCServer 13:56 < Not-4e28> [flying-squid] mhsjlw pushed 1 commit to master [+0/-0/±1] http://git.io/vBiHM 13:56 < Not-4e28> [flying-squid] mhsjlw 8f71857 - API fixes 14:13 < Not-4e28> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vBi5A 14:13 < Not-4e28> [flying-squid] rom1504 a4c208e - fix createMCServer doc 18:24 < Not-4e28> [flying-squid] rom1504 pushed 1 commit to master [+1/-0/±29] http://git.io/vBPSN 18:24 < Not-4e28> [flying-squid] rom1504 b5d22e5 - improve code with webstorm suggestion + split entities.js into spawn.js and other files 18:42 < SopaXT> I have implemented proper commands in my classic-server 18:48 < redleader> With Minecraft 1.8, I'm having trouble accessing arrpw xTile, yTile, amd zTile. F.e. /testfor @e[type=Arrow] {xTile:235} inTile and inData are both working as expected. Any ideas? 18:58 < rom1504> does minecraft support ipv6 ? 20:27 < SopaXT-phone> please look at my hobby project for Classic: https://github.com/SopaXorzTaker/classic-server 20:27 < SopaXT-phone> each star gives one hour of my time spent! :) 21:40 < Not-4e28> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±2] http://git.io/vBX6X 21:40 < Not-4e28> [flying-squid] rom1504 c8ce897 - start fixing inventory equipments 21:55 < Not-4e28> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±3] http://git.io/vBX1j 21:55 < Not-4e28> [flying-squid] rom1504 e7952f3 - send equipment during spawn and fix some code style issues 22:38 < Not-4e28> [flying-squid] rom1504 pushed 1 commit to master [+0/-1/±2] http://git.io/vBXbI 22:38 < Not-4e28> [flying-squid] rom1504 959100e - stop extending prismarine-entity and add license field --- Day changed dim. nov. 29 2015 00:23 < Fenhl> rom1504: 15w47c does, 1.8.8 does not 00:24 < redstonehelper> launcher doesn't either iirc 00:24 < redstonehelper> something else still remains broken 00:25 < redstonehelper> https://bugs.mojang.com/browse/MCL-2627 https://bugs.mojang.com/browse/WEB-197 https://bugs.mojang.com/browse/MC-92923 00:25 < redstonehelper> launcher, auth server and open to lan 00:33 < rom1504> okay 12:32 < tre> what are some ways to avoid hacker detection by servers? 12:35 <+SinZ> don't hack? 12:35 <+SinZ> don't need to worry about hacker detection anymore 12:37 < tre> can python be used for minecraft programming? 12:37 <+SinZ> any language with a network API can be if you are determined enough 12:38 < tre> any reasons why minecraft was programmed in Java and not a simpler scripting language like python or javascript? 12:39 <+SinZ> its what notch preferred 12:39 < tre> could it be only Java is fast enough? Those 3D stuff needs to be fast 12:40 <+SinZ> if it was actually about speed, it would be C/C++ for better hardware access and less overhead 12:41 < tre> maybe C++ is too hard compared to Java. Perhaps Java had better libraries? 16:10 < SopaXT> Check out my tiny project https://github.com/SopaXorzTaker/classic-server 16:32 < GargajCNS> 'ullo 16:33 < GargajCNS> quick question, does anyone know how to "reset" an entity state in the protocol? i'm trying to get my mobs to stop being in love mode 16:38 < rom1504> GargajCNS: I bet "in love" is a metadata thing 16:39 < rom1504> so http://wiki.vg/Protocol#Entity_Metadata + something in http://wiki.vg/Entities#Entity_Metadata_Format 16:39 < GargajCNS> http://wiki.vg/Protocol#Entity_Status 16:39 < GargajCNS> 18 Animal in love (ready to mate) — Spawn “heart” particles 16:39 < GargajCNS> innit? 16:40 < rom1504> ah yes indeed 16:40 < GargajCNS> putting them IN love mode works fine 16:40 < GargajCNS> they just dont stop once i spawn the baby 16:40 < rom1504> so I guess sending 0 should do ? 16:40 < GargajCNS> tried, didnt seem to 16:41 < rom1504> ah, sounds fun, let me try with my server :d 16:43 < rom1504> let's see if ender dragons can be in love 16:44 < GargajCNS> :D 16:44 < GargajCNS> hawt 16:45 < rom1504> sadly they can't ^^ 16:45 < rom1504> it works with horses hmm 16:45 < rom1504> but I only see a few heart then it goes away 16:45 < rom1504> do you keep sending that packet ? 16:45 < GargajCNS> you're sending 0 as status? 16:45 < rom1504> I'm just sending 18 16:45 < rom1504> it displays heart for like 1 sec then go away 16:46 < GargajCNS> no i just sent 18 once when the loving was started and then 0 when it finished 16:46 < GargajCNS> and the start works fine, and it goes away after like 30 sec if i dont pair the mob up with another 16:46 < GargajCNS> but if they do end up producing a baby i cant abort the love mode to go into cooldown 16:47 < rom1504> hmm during "love mode" it should keep displaying hearts right ? 16:47 < GargajCNS> yea 16:48 < GargajCNS> but i think it's more like, the client gets the status change then it displays them for 30 seconds and then shuts it back off 16:48 < GargajCNS> i'm just wondering how to shut it off earlier 16:48 < rom1504> well if I send just one entity_status packet with 18, the client display it for 1 sec 16:49 < GargajCNS> huh 16:49 < GargajCNS> i only send it once (in theory) and it lasts half a minute or so 16:50 < rom1504> if I send it every 500ms, heart do continue to appear 16:51 < rom1504> it makes sense really since other stuff in entity_status last a few seconds only too 16:51 < rom1504> (like entity hurt for example) 16:51 < GargajCNS> here i send it once and it keeps emitting particles 16:51 < GargajCNS> for a longer period 16:53 < GargajCNS> i'm on 1.8.8 client 16:53 < GargajCNS> and i'm using the cuberite server 16:53 < rom1504> 1.8 client too 16:53 < rom1504> my own server (flying-squid) 16:54 < rom1504> is it not possible cuberite would already send entity_status packet ? 16:54 < GargajCNS> i'm looking 16:54 < rom1504> is there not a debug mode that display all packets sent in cuberite ? 16:58 < GargajCNS> i added some logging, but nothing interesting 16:58 < GargajCNS> and i only send 18 once 17:00 < rom1504> GargajCNS: what happens if you send something else than 18 ? 17:00 < rom1504> for example 2 17:01 < GargajCNS> when? 17:01 < GargajCNS> at the start or at the end? 17:01 < rom1504> start 17:01 < rom1504> it should display the horse hurting one time 17:01 < GargajCNS> i'm testing with cows 17:01 < GargajCNS> doubt that matters tho 17:02 < GargajCNS> yea it just blinked red once 17:02 < rom1504> it doesn't matter, I have the same behavior with cows 17:03 < rom1504> weird 17:03 < GargajCNS> but when i send 18 the hearts keep being there for ~30ish seconds 17:03 < GargajCNS> are you sure it isnt your server sending the packet over and over? 17:03 < rom1504> yes I'm sure 17:03 < GargajCNS> or resetting or something 17:03 < GargajCNS> weird 17:03 < rom1504> I only send entity_state one time 17:03 < rom1504> *status 17:04 < GargajCNS> i put a log into whenever the 0x1a packet it sent and it's only sent once, when i shove the wheat into the cow 17:05 < GargajCNS> and i still get a half-a-minute heart shower 17:05 < rom1504> GargajCNS: what about status 12 on a villager ? 17:05 < GargajCNS> uh 17:05 < GargajCNS> holdup that might be a bit trickier to produce 17:06 < rom1504> I just send the packet directly, I don't do the wheat thing and all 17:06 < rom1504> (I just send the packet 500ms after spawn) 17:06 < GargajCNS> for me it's a response to rightclick 17:07 < rom1504> if you don't send the packet it doesn't display heart right ? 17:07 < GargajCNS> huh, wait 17:07 < GargajCNS> it does 17:08 < GargajCNS> i'm guessing it's clientside prediction? 17:10 < rom1504> I guess, "love mode" happens when food is high enough right ? 17:10 < GargajCNS> uh, i dont think it's related? 17:10 < rom1504> hmm 17:10 < rom1504> yeah 17:12 < rom1504> got to figure out when the client decides it should go in "love mode" though 17:15 < GargajCNS> as i noted i think it's client side prediction 17:15 < GargajCNS> mob + food mob likes = love mode 17:15 < GargajCNS> even if the server doesnt send the packet 17:16 < GargajCNS> oh hm 17:16 < GargajCNS> are you in creative mode or survival 17:16 < GargajCNS> when testing 17:17 < rom1504> oh I'm in creative 17:17 < rom1504> let's see if survival changes anything 17:18 < rom1504> nope, same thing 17:18 < GargajCNS> yea same thing here too 17:18 < GargajCNS> soconfusiiiing 17:18 < GargajCNS> are you on 1.8.8 client? 17:19 < rom1504> yes 1.8.8 17:19 < GargajCNS> gnyeh 17:19 < GargajCNS> i wonder if i send it again... 17:19 < GargajCNS> maybe it's a toggle thing 17:20 < GargajCNS> one on, one off, that sort? 17:20 < rom1504> doesn't seem to work like that here 17:21 < rom1504> but I'm not doing the "use food item on mob" 17:21 < rom1504> maybe that's the thing 17:21 < GargajCNS> can you try? 17:23 < rom1504> well doing right click with wheat on a horse does nothing (we didn't implement that yet) 17:23 < rom1504> so the client doesn't do everything itself 17:24 < rom1504> come see on 82.231.160.35:25567 if you want 17:24 < GargajCNS> try a cow 17:24 < rom1504> ohh 17:24 < rom1504> it does it indeed 17:25 < rom1504> with a cow 17:25 < GargajCNS> cos like 17:25 < GargajCNS> horses dont eat wheat 17:25 < GargajCNS> they eat golden apple/carrots 17:25 < rom1504> right okay ^^ 17:25 < rom1504> so it's indeed 100% client side, weird 17:25 < rom1504> ah 17:25 < rom1504> I bet only the player that right clicked sees it 17:26 < GargajCNS> probably 17:26 < rom1504> yes indeed 17:26 < rom1504> tried it 17:26 < rom1504> so anyway, let's see if I can make it stop 17:26 < GargajCNS> MAKE IT STOP 17:27 < GargajCNS> PLEASE 17:27 < GargajCNS> FOR THE LOVE OF GOD 17:27 < GargajCNS> etc 17:29 < rom1504> well 17:29 < rom1504> maybe the server can't force it 17:29 < rom1504> when does it stop on a vanilla server ? 17:29 < GargajCNS> not sure, didnt try yet 17:30 < rom1504> maybe it just doesn't 17:30 < rom1504> (the client side animation anyway) 17:30 < rom1504> ah I found a stupid way to make it stop 17:31 < rom1504> send status = 2 17:31 < GargajCNS> haha 17:31 < GargajCNS> "stop loving! *slap*" 17:38 < rom1504> hmm 17:38 < rom1504> I bet the server send some other property of an entity to stop it 17:46 < rom1504> there's something that prevent you to make an entity go in to "love mode" too soon, so I guess that's this same thing that cancel love mode 17:46 < rom1504> maybe age ? 17:50 < GargajCNS> no idea 17:50 < GargajCNS> i'm trying http://wiki.vg/Debugging but it's not very helpful 17:59 < rom1504> {"entityId":2530,"metadata":[{"type":0,"key":12,"value":1}]} 17:59 < rom1504> I believe that's that 17:59 < rom1504> age = 1 17:59 < rom1504> that seems to happen after mating 18:00 < rom1504> (I'm using https://github.com/PrismarineJS/node-minecraft-protocol/blob/master/examples/proxy/proxy.js ) 18:00 < GargajCNS> let's see 18:01 < GargajCNS> didnt seem to change much 18:02 < rom1504> yeah indeed 18:02 < Gjum> are these sent via the protocol, or only stored in the save file? http://minecraft.gamepedia.com/Chunk_format#Mobs 18:03 < GargajCNS> some of them are 18:03 < GargajCNS> at least according to the wiki 18:04 < Gjum> because then I would look at "Additional fields for mobs that can breed" 18:05 < GargajCNS> rom1504: can you do a full dump of the protocol? 18:05 < rom1504> yes 18:05 < GargajCNS> of what the proxy shows 18:06 < GargajCNS> maybe i can spot something 18:06 < rom1504> hmm ok 1 sec 18:07 < rom1504> oh damn, I have ender dragons in this world and they keep killing my cows 18:07 < GargajCNS> haha 18:07 < GargajCNS> /kill @e 18:07 < GargajCNS> :D 18:09 < rom1504> oh indeed 18:09 < rom1504> that's cleaner 18:10 < rom1504> 96M dump.out 18:11 < rom1504> yeah right, that's why I always filter packets 18:11 < GargajCNS> what i usually do is 18:11 < GargajCNS> spawn in what i need 18:11 < GargajCNS> do a console command like "/" that appears in the log 18:12 < GargajCNS> then do what i need to test (i.e. feed the cows) 18:12 < GargajCNS> and then do a "/" again 18:12 < GargajCNS> and then i cut out everything from the log that's between the two "/"-s 18:13 < rom1504> http://sprunge.us/NGVN 18:14 < rom1504> I just removed chunk packets 18:14 < rom1504> you can ctrl+f /summon Cow 18:15 < Gjum> time stamps would have been useful 18:16 < GargajCNS> probably not :) 18:16 < GargajCNS> so 18:16 < GargajCNS> client<-server: play.entity_status :{"entityId":4354,"entityStatus":18} 18:17 < GargajCNS> here's where they fall in love 18:17 < rom1504> what I did in the game was : 1) spawn 2 cows 2) give them wheat 3) they mate and make a child 4) try to give them wheat again 18:18 < rom1504> (and it doesn't put them in "love mode" at 4) 18:18 < rom1504> "give them meat" is use_entity packet 18:18 < GargajCNS> i'm trying to find the spawn 18:18 < GargajCNS> of the baby 18:19 < rom1504> third spawn_entity_living 18:19 < Gjum> GargajCNS, play.spawn_entity_living 18:19 < Gjum> ^^ 18:19 < Gjum> look at the eids 18:19 < GargajCNS> ah 18:19 < GargajCNS> "entityId":4419 18:19 < GargajCNS> that's the baby 18:20 < Gjum> the parents both get [{"type":0,"key":12,"value":1}] right after breeding, what's that? 18:20 < rom1504> "entityId":4353 is the first cow 18:20 < rom1504> that's age =1 18:20 < GargajCNS> gjum: yea, but it it doesnt seem to do much 18:20 < rom1504> http://wiki.vg/Entities#Ageable 18:20 < GargajCNS> oor 18:20 < Gjum> well, nothing else happens 18:21 < Gjum> age: "When above 0, represents the number of ticks before this mob can breed again." 18:21 < GargajCNS> i'm as confused as you are 18:22 < GargajCNS> yea but it's 1 18:22 < Gjum> maybe it counts up, mcwiki is usually a bit ambiguous on these things 18:23 < GargajCNS> oh wait holdup 18:23 < GargajCNS> a_Pkt.WriteBEInt8(Cow.IsBaby() ? -1 : 0); 18:23 < GargajCNS> oooooookay 18:23 < GargajCNS> so it has to be 1, not 0 18:23 < GargajCNS> gnyehh :D 18:24 < GargajCNS> (maybe) 18:24 < GargajCNS> so 18:24 < GargajCNS> age == -1 -> baby, cannot mate 18:25 < GargajCNS> age == 0 -> adult, can mate 18:25 < GargajCNS> age == 1 -> adult, in cooldown 18:26 < GargajCNS> (in theory) 18:26 < rom1504> ah 18:26 < rom1504> it works actually 18:26 < rom1504> I didn't write it correctly first time 18:26 < GargajCNS> hm? 18:26 < rom1504> but sending that metadata value prevent it from getting into "love mode" 18:28 < rom1504> it also stops it 18:32 < GargajCNS> yup! 18:32 < GargajCNS> baller :D 18:47 < GargajCNS> so who can edit the wiki to add that? :D 19:01 < rom1504> everybody can edit the wiki 19:01 < GargajCNS> oh i'd need an account 19:01 < GargajCNS> hurr 20:09 < Not-4e28> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±3] http://git.io/vByW2 20:09 < Not-4e28> [flying-squid] rom1504 c34ebb1 - fix entity dying, add /killall commands, add entity.takeDamage method, remove despawnPlayers (same as despawnEntities) 20:14 < rom1504> anyone know how many entity ids does the ender dragon take ? 20:14 < rom1504> it seems to be taking at least 8 20:14 < rom1504> I don't quite understand what this is about 20:17 < SopaXT> check it out: https://github.com/SopaXorzTaker/classic-server 20:18 < SopaXT> I hope someone helps me with #1 as I don't have enough time 20:36 < Not-4e28> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vBy01 20:36 < Not-4e28> [flying-squid] rom1504 64c1a59 - entity should despawn even if animation=false 20:46 <+Thinkofname> rom1504: its made up of smaller parts, though I don't think they ever are sync'd to the client 20:47 < rom1504> they seem to be, I'm getting these 8 (at least, I might have missed some parts) ids when hitting the dragon 20:48 <+Thinkofname> 7 parts + dragon itself 20:48 <+Thinkofname> this.children = new EntityComplexPart[] { this.bn = new EntityComplexPart(this, "head", 6.0F, 6.0F), this.bo = new EntityComplexPart(this, "body", 8.0F, 8.0F), this.bp = new EntityComplexPart(this, "tail", 4.0F, 4.0F), this.bq = new EntityComplexPart(this, "tail", 4.0F, 4.0F), this.br = new EntityComplexPart(this, "tail", 4.0F, 4.0F), this.bs = new EntityComplexPart(this, "wing", 4.0F, 4.0F), this.bt = new EntityComplexPart(th 20:48 <+Thinkofname> is, "wing", 4.0F, 4.0F)}; 20:48 <+Thinkofname> .. that was slightly longer than I thought 20:49 < rom1504> okay I see 20:49 < rom1504> is there any other entity with multiple parts ? 20:49 <+Thinkofname> not that I know of 20:50 <+Thinkofname> this seems purely for the hitbox to have the right shape 20:50 <+Thinkofname> damage is just redirected to the main dragon 20:51 < rom1504> okay thanks 22:04 < Not-4e28> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vBy9G 22:04 < Not-4e28> [flying-squid] rom1504 57ff06a - map 7 dragon parts to dragon when attacking the dragon, fix #109 22:25 < Fenhl> client-side love mode prediction? 22:25 < Fenhl> what is this madness 22:26 < GargajCNS> honestly i'm not surprised 22:26 < GargajCNS> there's a ton of client side predictive stuff which makes debugging a bit of a challenge 22:26 < GargajCNS> e.g. rightclicking with a bottle on water automatically creates the waterbottle clientside without waiting for the server 22:27 < GargajCNS> so if that's not implemented (like in cuberite), the next inventory sync makes it disapear 22:28 < Fenhl> actually it's probably a leftover from before the client/server split 22:28 < Fenhl> would explain why it doesn't happen with horses 22:31 < rom1504> the client does a lot of work anyway 22:31 < rom1504> like lot of physics stuff 22:35 < rom1504> GargajCNS: btw, you know you have to tell other players every n ms that the entity are in love mode ? 22:35 < rom1504> not sure if your code do that (did you try it with *2* clients) ? 22:36 < rom1504> (no idea what n should be but if you only do it one time, then other players won't see the heart for 30s) 22:56 < GargajCNS> rom1504: i do now 22:58 < rom1504> GargajCNS: see my edit at https://github.com/cuberite/cuberite/pull/2696#issuecomment-160474610 22:59 < rom1504> it sounds like a vanilla server bug to me 22:59 < rom1504> but then doesn't bug = feature in this case :p --- Log closed dim. nov. 29 23:24:35 2015 --- Log opened dim. nov. 29 23:24:43 2015 23:24 -!- Irssi: #mcdevs: Total of 108 nicks [1 ops, 0 halfops, 10 voices, 97 normal] 23:31 -!- Irssi: Join to #mcdevs was synced in 433 secs --- Day changed lun. nov. 30 2015 02:52 < Not-d54a> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vBS2a 02:52 < Not-d54a> [flying-squid] rom1504 04ab50b - add /attach to attach an entity on an other one will be used to make a attach function and in vanilla uses later --- Log closed lun. nov. 30 04:21:02 2015 --- Log opened lun. nov. 30 04:33:18 2015 04:33 -!- Irssi: #mcdevs: Total of 135 nicks [1 ops, 0 halfops, 14 voices, 120 normal] 04:39 -!- Irssi: Join to #mcdevs was synced in 353 secs --- Log closed lun. nov. 30 06:15:06 2015 --- Log opened lun. nov. 30 06:21:24 2015 06:21 -!- Irssi: #mcdevs: Total of 134 nicks [1 ops, 0 halfops, 14 voices, 119 normal] 06:26 -!- Irssi: Join to #mcdevs was synced in 330 secs --- Log closed lun. nov. 30 06:56:13 2015 --- Log opened lun. nov. 30 09:26:25 2015 09:26 -!- Irssi: #mcdevs: Total of 134 nicks [1 ops, 0 halfops, 14 voices, 119 normal] 09:32 -!- Irssi: Join to #mcdevs was synced in 383 secs 15:03 < Not-5d64> [mineflayer] rom1504 pushed 2 commits to master [+0/-0/±24] http://git.io/vBQ3j 15:03 < Not-5d64> [mineflayer] rom1504 2a910d2 - Merge pull request #345 from andrewrk/use_require_self use require-self to be able to do require('mineflayer') in the examples 15:03 < Not-5d64> [mineflayer] rom1504 deleted branch use_require_self 20:26 < AcePlugins> Hello there, I am trying to make a server handler but have the problem with there being squars meaning that the charset is wrong. Heres the code: http://hastebin.com/hogisiwodo.axapta Heres the output: http://prntscr.com/98svk8 20:28 < rom1504> AcePlugins: minecraft has a binary protocol, you can't ready everything as text 20:28 < rom1504> *read 20:29 < rom1504> (see http://wiki.vg/Protocol ) 20:29 < AcePlugins> rom1504, how should I read it in then? 20:29 < AcePlugins> rom1504, I have that link open, is there anyway I can read it in? 20:30 < rom1504> like http://wiki.vg/Protocol#Packet_format , so you need to read the length as a varint, the packet id as a varint, and then read each field with the right type reader 20:30 < rom1504> you might want to use an already existing lib for the mc protocol in java though 20:31 < rom1504> https://github.com/Steveice10/MCProtocolLib for example 20:31 < AcePlugins> Any suggestions? 20:31 < AcePlugins> ty 20:31 < AcePlugins> Sorry, messages come through late on my client 20:34 < rom1504> do look at http://wiki.vg/Library_List and http://wiki.vg/Server_List though, there might be an other project you want to use / contribute to 20:36 < AcePlugins> ok, thank you 20:37 < AcePlugins> rom1504, dumb question but how do I get the MCProtocolLib as a .jar? 20:37 < AcePlugins> Sorry, found it --- Day changed mar. déc. 01 2015 02:19 < oldmanmike> So, I'm trying to get my custom server to handle the encryption response packet that the client sends during the login process and the wiki says the packet ID is 1, but the packet I'm getting in Wireshark has a packet ID of 2 02:19 < oldmanmike> And it's the packet that follows my encryption request 02:21 < oldmanmike> When I log into a Mojang server, I get a packet that looks pretty much the exact same way with the same packet ID and length. 02:53 < rom15042> It's definitely 0x01 03:08 < oldmanmike> And it's the second byte in? 03:12 < oldmanmike> The packet itself doesn't need to be decrypted first, right? That's just for the shared secret and token field? 10:30 < rom15042> It's the second varint 10:30 < rom15042> No, encryption happens after this packet 17:51 < Not-d54a> [flying-squid] rom1504 pushed 2 commits to master [+0/-0/±2] http://git.io/vBjUg 17:51 < Not-d54a> [flying-squid] 109C 46f1000 - Fixed friction bug 17:51 < Not-d54a> [flying-squid] rom1504 843fdfb - Merge pull request #140 from 109C/master Fixed friction bug 21:45 < Not-5d64> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vReNY 21:45 < Not-5d64> [mineflayer] rom1504 a5f1844 - add cheese bot github repo --- Day changed mer. déc. 02 2015 14:58 < rom1504> anybody knows what happen in http://wiki.vg/Protocol#Chunk_Data packet when the y limit is 512 and not 256 ? something about setting "Ground-Up Continuous" to false ? 14:58 < rom1504> (the bitmap can only account for 16 sections with a size of 2 bytes) 15:42 <+Thinkofname> you can't go bigger than 256 15:48 < rom1504> so server property max-build-height does nothing ? 15:50 < Fenhl> it does nothing when you set it above 256, yes 15:50 < rom1504> ok 15:52 <+Thinkofname> does nothing protocol wise when its lower too 15:52 < Fenhl> for some reason this is not documented on http://minecraft.gamepedia.com/Server.properties#max-build-height 15:52 <+Thinkofname> its just a message on the block place packet 16:54 < Fenhl> redstonehelper: I found a bug in the bug reporter 16:54 < redstonehelper> Fenhl: what? 16:54 < redstonehelper> the tracker? 16:55 < Fenhl> trying to view a private ticket (e.g. https://bugs.mojang.com/browse/MC-15019 ) gives me a page containing a link to https://bugs.mojang.com/secure/ContactAdministrators!default.jspa 16:55 < redstonehelper> you want the contact form configured? 18:29 < Fenhl> I mostly want access to the ticket :P --- Day changed ven. déc. 04 2015 23:39 < redstonehelper> md_5: you want this reopened because the warning message bothers you or because of the core issue behind it? https://bugs.mojang.com/browse/MC-93093 23:39 < redstonehelper> because I think only the message is intended 23:40 <+md_5> redstonehelper reopened because the warning is wrong and spammy 23:40 <+md_5> multiply that message by 300 players on a server 23:40 <+md_5> being triggered during normal & legitimate gameplay 23:40 < redstonehelper> edit your comment with those reasons and I'll add it to our list 23:41 <+md_5> just copy pasted that in 23:41 < redstonehelper> close enough --- Day changed sam. déc. 05 2015 22:20 < pokechu22> I'm trying to upload some new inventory images to wiki.vg, but whenever I try to submit I get "Could not create directory "mwstore://local-backend/local-public/4/42".", and it doesn't save it. 22:20 < pokechu22> Any advice? 22:53 < richardll> I tried to signup with "mcdevs" code but I got this error: 22:53 < richardll> Login error There seems to be a problem with your login session; this action has been canceled as a precaution against session hijacking. Go back to the previous page, reload that page and then try again 22:55 < pokechu22> On wiki.vg? 22:56 < pokechu22> Hm. A quick search for that error suggests that it means something's full. 22:56 < pokechu22> That would seem similar to the error I got while uploading images. 23:41 < richardll> yes wiki.vg --- Day changed dim. déc. 06 2015 00:28 < jo_mo> richardll: have you tried clearing your cookies? 00:34 < richardll> did that and got 00:35 < richardll> [184723eb] 2015-12-05 23:34:28: Fatal exception of type MWExceptio 01:34 < richardll> did i timeout? 03:01 < Gjum> ^ I suppose tktech could know what's wrong 03:14 < richardll> can Someone check out my edit? http://wiki.vg/SMP_Map_Format#Data 03:17 < richardll> I could barely understand it before, so I tried to make it clear, But I'm not sure if its accurate 03:17 < richardll> can Someone check out my edit? http://wiki.vg/SMP_Map_Format#Data 03:25 < rom1504> I think it's correct 03:26 < rom1504> "1 - 15 light level" , is it not 0 - 15 though ? 03:30 < richardll> woops, yep typo 04:40 < Not-d54a> [flying-squid] rom1504 pushed 8 commits to master [+1/-0/±8] http://git.io/vRgvM 04:40 < Not-d54a> [flying-squid] azastrael 01e0162 - Add teleport ( aka. tp ) command. 04:40 < Not-d54a> [flying-squid] azastrael b850d23 - Fix a very bad bug. 04:40 < Not-d54a> [flying-squid] azastrael 844558d - The magic of 32. 04:41 < Not-d54a> [flying-squid] ... and 5 more commits. 05:51 < Videogamer555> Need some help with Minecraft 1.0.0 server protocol. 05:51 < Videogamer555> Because it uses uncompressed packets (or at least the documentation here http://wiki.vg/index.php?title=Protocol&oldid=689 doesn't say that it uses compression), it seems that this is the simplest protocol to implement, for a noob like me trying to write MC server software. 05:52 < Videogamer555> So the simplest thing to do is to place a single block at a single location, or at least it should be. 05:53 < Videogamer555> This is packetID 0x35 05:54 < Videogamer555> So I use the MC Launcher to specify an older version of MC (version 1.0.0) and am lucky enough to find a copy of the old server JAR file for this version on Mediafire. And then I set to work creating a proxy program that gets connected to by MC, and then this proxy connects to the actual server. 05:57 < Videogamer555> My first version of the program simply passively relays the packets from the server to the client, and from the client to the server. The next step is to modify the game's behavior with packet injection. In other words, the next step is to cause my program to send the client information about new blocks via the BlockChange packets. 06:00 < Videogamer555> Ok, so now my program can inject this packet, but it's having a problem. I use F3 to see coordinates I'm at, and then I use my program to try to change a variety of blocks near my position by sending these packets to the client (it's a server-to-client type packet). I expected to see the block instantly change, but in fact nothing happened. I even tried F3+A to force the reloading of the... 06:00 < Videogamer555> ...chunks, but this didn't work either. It seems as if the client is IGNORING these BlockChange packets. 06:01 < Videogamer555> Please help me fix this. Thanks in advance. 06:05 < Videogamer555> @Pangea can you help me with my Minecraft network protocol problem? 06:06 < Videogamer555> Is anybody even on this channel? 06:06 < rom1504> yes but you'll have to wait with such an exotic request 06:07 < Videogamer555> Exotic? I thought that you guys did low-level programming and other such Minecraft work all the time. I thought that's what you guys did. 06:07 < rom1504> do you even send packets correctly at all ? 06:07 < rom1504> yes 06:07 < rom1504> the exotic part is "minecraft 1.0.0" 06:08 < Videogamer555> Well, it's documented at http://wiki.vg/index.php?title=Protocol&oldid=689 06:08 < Videogamer555> But it didn't work as documented. 06:08 < Videogamer555> I'm wondering if there's some error in that documentation. 06:08 < Videogamer555> And yes, I did send packets correctly. 06:09 < rom1504> how do you know ? 06:09 < rom1504> how does your buffer look like ? 06:09 < rom1504> (bytearray if that's the name in your language) 06:10 < Videogamer555> From my understanding, each packet starts with a single byte of data which is the PacketID, and then has the specific fields required for that particular packet. 06:10 < Videogamer555> I made sure to reverse the byte order from Little Endian to Big Endian, prior to sending. 06:11 < Videogamer555> In the case of BlockChange packet, the PacketID is 0x35, so that's the first byte in the packet. After that there's the X, Y, and Z coordinates, then the BlockType, and the BlockMetadata. 06:12 < Videogamer555> The coordinates are absolute coordinates (with x,y,z=0,0,0 being the origin). 06:13 < Videogamer555> The X and Z coordinates are ints (4byte integers), and the Y coordinate is a byte (a 1byte integer). I thought this seemed a bit unusual, since other similar packets have Y being an int as well, but I followed the exact specs and made it a byte instead. 06:14 < Videogamer555> I only wish there was some way to test the validity of the packets, and then display what was actually sent (from the client's point of view) to see if it's what I was THINKING I was sending. 06:15 < Videogamer555> I wish there was some MC 1.0.0 packet debugger I could use to check the validity of what I was sending. 06:15 <+SinZ> its notchprotocol 06:15 <+SinZ> no consistancy at all for y 06:15 < Videogamer555> What's "notchprotocol" mean? 06:15 <+SinZ> notch being the developer 06:16 < Videogamer555> Can you give me some help fixing with my problem? 06:17 < Videogamer555> *with fixing my problem? 06:19 < Videogamer555> Is there anybody on here who could help me with that? 06:29 < Videogamer555_> I lost my connection there for a second. Did anybody say anything important while I was disconnected? 06:30 < Videogamer555_> Anything relating to the problem I'm having with the MC 1.0.0 network protocol? 06:32 < rom1504> if you find something consistent with minecraft, then you're probably wrong 06:33 < rom1504> but that specific thing actually make sense ^^ 06:33 < rom1504> because 0<=y<=256 06:33 < rom1504> so you only need a byte 06:34 < rom1504> Videogamer555: you could try printing the buffer the vanilla server send 06:34 < rom1504> make sure it's correct 06:34 < rom1504> if it's correct 06:34 < Videogamer555> How do I do that? 06:35 < rom1504> then make sure your setup with your proxy and whatever is correct 06:35 < rom1504> maybe you can't even send a single packet 06:35 < rom1504> "My first version of the program simply passively relays the packets from the server to the client, and from the client to the server. 06:35 < rom1504> " 06:35 < rom1504> print everything ? 06:36 < Videogamer555> I tried that, but I'm not sure how to make heads or tails of what the server is sending. I need to have a way of being able to check for specific packets in my program, and reject one's I'm not interested in. 06:37 < Videogamer555> It would seem you could just skip a packet if it had it's length specified, and it had a PacketID you were not interested in, and log only the one you wanted, but the problem is on MC 1.0.0, there is no length field (or at least it's not documented at http://wiki.vg/index.php?title=Protocol&oldid=689). 06:38 < Videogamer555> As such, there's no way to know the length of a given packet without knowing the length of each possible packet by PacketID, and parsing any packet that has variable length data (such as a string). 06:38 < rom1504> yes 06:38 < rom1504> you need to parse everything 06:38 < rom1504> so hmm I guess that doesn't do it 06:39 < rom1504> ah I know your problem 06:39 < rom1504> you are relaying every packet right ? 06:39 < Videogamer555> I am relaying every packet. 06:39 < rom1504> then you're not filtering block changes from the vanilla server 06:39 < Videogamer555> What does that mean? 06:39 < rom1504> so it's very possible it's sending a block change just after yours 06:40 < Videogamer555> Chances are very low though that the server would ALWAYS cancel out my changes. 06:40 < rom1504> oh 06:40 < rom1504> but wait 06:40 < rom1504> how can you even send a packet ? 06:40 < Videogamer555> I mean I keep hitting the button to send a block change packet, so I should see SOMETHING flash on the screen of the minecraft client, before it gets removed. 06:40 < rom1504> I mean, where do you inject it ? 06:40 < rom1504> how can you know that you're not injecting it in the middle of an other packet ? 06:41 < Videogamer555> I keep hitting the button, that causes my proxy to inject a packet, and just hope that it doesn't overrun something that the server is sending. 06:41 < rom1504> hmm 06:41 < Videogamer555> I figure at least ONE TIME my packet will get through, without conflicting with the server's packet. 06:41 < Videogamer555> I mean the server is NOT sending a continuous stream of packets non-stop. 06:41 < rom1504> it's not ? 06:42 < Videogamer555> It is only required to send a keep-alive packet once every second. 06:42 < rom1504> maybe try to stop relaying packets like 500ms before you send your block change packet 06:43 < rom1504> but really, I'm not sure if it's possible to implement just one packet with that protocol 06:43 < rom1504> I think you have to implement it all 06:43 < rom1504> or at least, you have to not send thing you can't parse 06:43 < Videogamer555> And if I set my view distance to be very short, so that the server doesn't send any more chunks after the client has them all (unless I start moving around in the game of course). 06:44 < Videogamer555> Basically, I get it going, and then wait a couple minutes for EVERYTHING to load, so that the server doesn't need to send anything other than keep-alive packets. 06:44 < Fenhl> btw, compression is always optional in the current protocol 06:45 < Videogamer555> But encryption is NOT optional. Once the game has started, EVERYTHING is encrypted. 06:45 < Fenhl> you can just set Data Length to 0 and send your packet uncompressed 06:45 < Videogamer555> I do NOT want to have to worry about encrypting my packets. 06:45 < Fenhl> encryption only happens in online-mode 06:46 < Videogamer555> Are you sure? I set it to offline mode, in the server server.properties file, and also disabled the compression (set it to -1). 06:47 < Fenhl> … 06:47 < Videogamer555> Connection to freenode reset? 06:47 < Videogamer555> What just happened? 06:47 < Fenhl> actually, no I'm not sure, people keep saying this but it's not documented on the wiki 06:47 < Fenhl> Videogamer555: your internet had a hiccup 06:48 < Videogamer555> Which part isn't documented on the wiki? 06:48 < Fenhl> how encryption works in offline mode 06:50 < Fenhl> wait, it's documented here 06:50 < Fenhl> > For unauthenticated and localhost connections (either of the two conditions is enough for an unencrypted connection) there is no encryption. In that case Login Start is directly followed by Login Success. 06:50 < Videogamer555> When I set it to offline mode, in the server server.properties file, and also disabled the compression (set it to -1), and then use my proxy software to log the packets, I see completely random looking data. Now it's bigger without compression, but it still looks random when looking at it in a hex editor, or in a raw-image viewer which allows you to view bytes as pixels. It looks like... 06:50 < Videogamer555> ...white-noise, suggesting that encryption IS IN FACT being used, despite disabling online-mode. 06:50 < Fenhl> http://wiki.vg/Protocol#Login 06:52 < Videogamer555> Disabling online mode does make it more likely to actually establish a connection via my proxy (otherwise it has trouble even getting connected through my proxy) but it appears that all of the data is still completely encrypted (not just the log-in packets, but ALL the packets, including ones that should be for just rendering the level etc). 06:52 < rom1504> Fenhl: he is working on mc 1.0.0 06:52 < rom1504> (idk why) 06:53 < Videogamer555> And the reason I just gave, is why I downgraded to 1.0.0. It appears that in newer versions of MC that ALL of the packets are encrypted, no matter what server options you set. 06:53 < rom1504> encryption is the easiest part of minecraft protocol 06:53 < rom1504> your language usually deal with that for you 06:54 < Fenhl> have you tried to actually read the packets the server sends you? 06:54 < rom1504> but indeed you don't need to encrypt if you're the server 06:54 < Videogamer555> I don't know how to implement AES or RSA decryption and encryption. 06:54 < Videogamer555> So yeah, that IS the hardest part, for me at least. 06:55 < rom1504> don't implement it, use a lib 06:55 < Videogamer555> That would be a project in itself. 06:55 < Videogamer555> What lib? I don't think there are any decent encryption libraries for Visual Basic. 06:55 < rom1504> ah visual basic 06:55 < rom1504> interesting 06:55 < rom1504> :D 06:55 < Videogamer555> I can use CAPICOM for encryption and decryption, but it uses its own container format for holding the encrypted data. 06:56 < Videogamer555> So that would be useless. CAPICOM is the Crypto API that comes with Windows, and can be directly used in Visual Basic. 06:57 < Videogamer555> I'm trying to find an old enough version of Minecraft, that it doesn't use any encryption or compression, and I believe version 1.0.0 may fit this requirement. 06:57 < Fenhl> 1.0.0 uses encryption though, doesn't it? 06:57 < Videogamer555> Nope. From what I can tell, the data is not encrypted. It does not just appear as white noise when the packet logs are viewed in a raw-image viewer. 06:58 < Videogamer555> Now maybe the authentication packets are encrypted, but the rest of it is sent "in the clear'. 06:59 < Videogamer555> And I also don't think it uses any compression either. 06:59 < rom1504> just do mc classic 06:59 < Fenhl> ah, you're right, apparently encryption was added in 1.3.1 (pre-Netty protocol version 39) 06:59 < rom1504> http://wiki.vg/Classic_Protocol 07:00 < rom1504> https://www.classicube.net/ 07:00 < rom1504> 'Now maybe the authentication packets are encrypted, but the rest of it is sent "in the clear'.' it's the other way round 07:00 < Videogamer555> Unfortunately it appears that the 1.0.0 protocol may not be properly documented on your wiki, as the behavior of the packets I sent using the specs listed there do not produce the desired results, and from what I can tell have in fact no effect on the game at all. 07:01 < rom1504> I already told you why Videogamer555 07:01 < rom1504> you can't send packets in the middle of the stream if you can't parse the stream 07:02 < Videogamer555> If it wasn't working, I'd think that MC would crash because the stream got corrupted. I think something is getting through, and MC is parsing it, but it's not having the desired effect. Is there any way to "hook" the internal workings of MC client, and see what the internal "guts" of the client are doing when they are processing my packets? 07:03 < Videogamer555> Maybe some kind of super-secret debug mode (not F3) that dumps to a file EVERYTHING that the MC client is doing internally, so you can debug how it's actually handling your packets? 07:04 < Videogamer555> Is there any secret code hidden away by Notch, that gives you much more powerful debugging functions (including debugging the handling of network packets)? 07:04 < Fenhl> we no longer maintain the documentation for older versions of the Minecraft modern protocol (e.g. 1.0.0) 07:05 < Videogamer555> So then it IS possible that some of that documentation is in fact inaccurate. 07:05 < Fenhl> yes 07:06 < Videogamer555> How will I ever implement this feature, if I can't be sure that my specs are even correct? 07:06 < Fenhl> my recommendation would be to try to implement it for Minecraft 1.8.8, you will get much more support that way 07:07 < Fenhl> > my recommendation would be to try to implement it for Minecraft 1.8.8, you will get much more support that way 07:07 < Fenhl> (in case that didn't go through) 07:07 < Videogamer555_> Are you sure there's a way to disable encryption in MC 1.8.8? 07:08 < Videogamer555_> Looks like my connection glitched to the IRC, and now I have a _ after my name. Why is that? 07:09 < Fenhl> because freenode hasn't disconnected your old connection yet 07:09 < Videogamer555_> Can you test out the connection with MC 1.8.8 in offline mode, and let me know if encryption is actually disabled? Maybe I just did something wrong on my end. 07:10 < Fenhl> I haven't implemented it myself but someone on the hematite_server team claims to have a working server, no encryption needed 07:11 < rom1504> offline mode means no encryption 07:11 < rom1504> for the simple reason it wouldn't have a key to encrypt with 07:12 < Videogamer555> I thought I tried that before, and the data still looked encrypted. I thought that the server still generates its own key for using to encrypt the data, rather than depending on a key from minecraft.net 07:12 < rom1504> it is compressed though 07:14 < Fenhl> what do you mean by “looked encrypted”? Have you actually tried to read it, or just looked at it in a hex editor? 07:15 < Fenhl> if it's the latter, that doesn't really mean much, because Minecraft uses a binary protocol, so you won't see any readable strings for the most part 07:15 < Videogamer555> I think I can disable compression though, if I set network-compression-threshold to -1 in the server.properties file. I have tested that, and that does indeed appear to disable compression. 07:15 < Fenhl> it should, yes 07:17 < rom1504> yeah 07:17 < Videogamer555> And I think it is encrypted, because while it is huge (no compression) it still looks scrambled, when viewed in a raw image viewer (to show the bytes as pixels). The human eye is keen on pickout out patters in an image. If there was ANY structure at all, you'd see it. But it looked like 100% random white noise, suggesting strong encryption was in use. 07:17 < rom1504> pretty sure that method doesn't work 07:18 < Videogamer555> The software Gimp has a very nice raw image loader plugin, where you can set the pixel format, and image width and height, and offset in the file to the image data. It's a GREAT way of determining of there's some kind of encryption being used on data. 07:18 < rom1504> and it's pretty easy to read the first packet and notice it's not encrypted nor compressed 07:20 < Videogamer555> Only the first packet is unencrypted (as can be seen in a hex editor). After that, it's all binary so you need to switch to a raw image viewer and let your eyes pattern-finding ability tell you if there's any hint of a pattern, and if there isn't then it's probably encrypted. 07:22 < rom1504> no, you can also read it manually 07:22 < rom1504> read the spec, read the hex 07:22 < rom1504> anyway, I'm 100% node-minecraft-protocol doesn't use encryption for offline-mode 07:23 < rom1504> and it works in offline-mode 07:23 < rom1504> both client and server 07:23 < rom1504> so there's no encryption in offline mode 07:23 < Videogamer555> So I've set the server properties involved like this 07:23 < Videogamer555> network-compression-threshold=-1 07:24 < Videogamer555> online-mode=false 07:24 < Videogamer555> This should disable both compression and encryption. 07:24 < rom1504> okay 07:25 < rom1504> pastebin the beginning of your hexes 07:25 < Videogamer555> Next I'll log the packets and get back to you with what I've found. 07:36 < Videogamer555> Ok I've got my logs now and pasted them to pastebin. 07:37 < Videogamer555> For the server-to-client log http://pastebin.com/QhjXhsGf 07:37 < Fenhl> here's the code I'm using to test (wurstmineberg.de:25563 is an offline mode server) https://www.irccloud.com/pastebin/sKd9LSMy/hematite-test.rs 07:37 < Videogamer555> For the client-to-server log http://pastebin.com/Ses9QvmY 07:37 < Fenhl> and the output is Set Compression: SetCompression { threshold: 256 } 07:42 < Videogamer555> I also noticed that it no longer has random data in the packets. I think I must have set something wrong before when I did it. 07:43 < Videogamer555_> There's another problem with the new protocol though, it uses variable length integer fields called VarInt, and those will be a PAIN to encode properly. 07:44 < rom15042> Not the most painful thing 07:45 < Videogamer555_> They depend on bit-wise data processing (a bit stream, not a byte stream) and yet there is no way to access individual bits in most programming languages. Your smallest array-cell-size is usually the byte. You don't usually get access to individual bits. 07:46 < Videogamer555_> Now I remember why I tried looking for an older protocol, that VarInt thing is going to be a really tricky to program for, especially considering you already are going to be doing byte swaps on any multi-byte values, due to the endian difference between MC and most other programming languages. 07:46 < rom15042> You need to use bitwise operators yes 07:48 < Fenhl> it's pretty straightforward actually https://github.com/PistonDevelopers/hematite_server/blob/master/src/types/varnum.rs#L28-L40 07:48 < Videogamer555> I wish the makers of Minecraft would just create a very simple protocol that was easy to code for, and didn't have elaborate variable types and structures. It would make 3rd party servers a LOT easier to write. 07:48 < rom15042> Entity metadata, and nbt and all are what's more annoying 07:49 < Videogamer555> I thought NBT was how the data was stored in files, not the way it got sent over the network. 07:49 < nickelpro> Holy hell what is going on I. This channel 07:49 < nickelpro> in this* 07:49 < Videogamer555> What's wrong? 07:49 < Fenhl> the protocol has an NBT type as well 07:50 < nickelpro> mcdevs and related channels are very quiet normally 07:51 < Videogamer555> I had a big project I wanted to do involving sending custom levels to the MC client by injecting them in the network stream. That's why there's a lot of talking going on. 07:51 < nickelpro> Anyway I skimmed everything and I can tell you right off if you aren't correctly parsing every packet than you can't write a server wrapper. The old protocol required every packet be parsed in order to do anything intelligent with it, because we didn't have packet prefixing 07:52 < Videogamer555> Did this also apply to the Classic protocol? Or could you skip packets with the Classic protocol? 07:52 < nickelpro> So you're just injecting garbage into the TCP stream and its kinda intriguing the client isn't crashing which tells me you're network code is probably flawed at a deeper level 07:52 < nickelpro> Nope, everything before 1.7.6 I think 07:52 < nickelpro> (Someone with a better memory than me can confirm when the switch happened) 07:53 < nickelpro> Notch had a very... Optimistic, view of networking 07:53 < Videogamer555> Not garbage. I'm wanting to inject data that will place blocks, allowing me to send my own custom worlds to the MC client, without having to write a server from scratch. 07:54 < Videogamer555> Writing a complete server from scratch would be a REAL pain. 07:54 < nickelpro> If it's not in the correct spot in the packet stream its garbage 07:54 < nickelpro> Also 1.0.0 did have AES encryption as well 07:54 < nickelpro> And the current protocol doesn't have encryption in offline mode 07:55 < Videogamer555> Would this be true even for MC 1.8.8, which does have a packet size field? 07:55 < rom15042> Videogamer555: I have to ask, is there any reason you're reimplementing only a little bit of the protocol, not using a lib that already implement the protocol, and in top of that using visual basic ? 07:56 < nickelpro> Nope, you can just read the packet length, and forward all the data. BarneyGale has a wrapper called Quarry that does exactly that 07:56 < Videogamer555> Visual Basic is the one programing language I know thoroughly inside and out. I know a touch of VC++, and am also learning assembly, but VB6 I know well enough to be able make almost ANYTHING. And its capabilities can be expanded when using external DLL files to access additional functions. 07:57 < nickelpro> New MC protocol is significantly more forgiving than the old one. Which is also why there are like 3000 libraries written for it. Use one of them 07:57 < nickelpro> Not for VB though, bit obscure that :-/ 07:58 < Videogamer555> If the libraries are all intended for C++ and not VB, then they are 100% useless to me. If any of them is compatible with VB6 let me know, but my hunch is that all 3000 of them are 100% NOT compatible with VB6. 07:58 < nickelpro> Ya, I'm fairly sure none are for VB 07:58 < Videogamer555> Then I'll have to write my functions from scratch. 07:59 < Videogamer555> Fortunately I know VB6 well enough to be able to do this. I just need to know the specs of the protocol, and I should be able to implement it in VB6. 07:59 < nickelpro> Still, skip encryption, most of the entirety of the MC data types you need to getting a working wrapper is ~30 LoC of C 07:59 < Videogamer555> What's !30 LoC of C? 07:59 < nickelpro> 30 lines of code 08:01 < rom15042> To me VB6 is a bit like fortran 08:01 < nickelpro> My overcomplicated python version is 20 lines with generous spacing. Varints aren't scary, Google them and you'll find ample documentation 08:01 < rom15042> Somehow some stuff are still implemented in it 08:02 < nickelpro> rom15042: In that it's still alive? 08:02 < nickelpro> I learned TI-Basic back in the day 08:03 < rom15042> Some software are implemented in it, but I wouldn't say it's alive 08:03 < nickelpro> I think it took a few months off my lifespan, but I learned it 08:03 < nickelpro> Lol 08:03 < rom15042> Yeah I learn that too 08:04 < Fenhl> okay so I'm manually decoding your network dump right now and this is what I have so far https://www.irccloud.com/pastebin/euQ1jWiN/ 08:04 < nickelpro> Is that a 1.0.0 server? 08:06 < Fenhl> okay so first of all the server port is 15565, is that correct? 08:07 < Fenhl> also Next State is 1 which means status, you're doing Server List Ping instead of logging in 08:08 < nickelpro> Ya, no, there weren't varints back then. Or protocol states for that matter. He's trying to implement an ancient protocol on a new server 08:08 < Videogamer555> Yeah, when I added the server to my server list, it pings it whenever you view the multiplayer server list. 08:08 < Fenhl> oh, you're testing with a Notchian client? 08:09 < Fenhl> well sorry but I'm not going to encode an entire SLP session for you 08:09 < Fenhl> *decode 08:11 < nickelpro> I remember an (unemployed) period of my life where I could decode a lot of MC packets with just a hex dump. Would not recommend 08:11 < Fenhl> heh 08:12 < Videogamer555> Also it appears that connection expects some VERY tight timing requirements. Half of the time when it pings the server through my proxy, the server's reply is not properly received by the client, so the client says it can't detect the server, and as a result it usually shows the server as not available, though if you click on it you can still use it despite it not being supposedly available.... 08:12 < Videogamer555> ...And keep in mind, that's without ANY interference of my program. My program in this state is transparently passing the packets through. But because there must be some timing delay as it goes through the proxy, the ping reply doesn't seem to make it back to the client in a timely manner (from the client's point of view). Not sure about other packet types, but these pings must have some... 08:12 < Videogamer555> ...VERY tight timing requirements. 08:14 < rom15042> Do you lag a lot in game with your proxy ? 08:15 < Fenhl> to be fair, SLP tends to fail a lot even with Notchian client and server, still not sure what that's all about 08:22 < Fenhl> Videogamer555: here we go, I found a malformed packet in the client-to-server dump https://www.irccloud.com/pastebin/fqNMiUoC/ 08:22 < Fenhl> looks like you're trying to send a Handshake packet while in “status” state 08:24 < Videogamer555> What's SLP? 08:25 < Fenhl> Server List Ping http://wiki.vg/Server_List_Ping 08:27 < Videogamer555> Wonder how it's getting corrupted? My proxy (when I'm not clicking the button to inject a packet) simply sends through to the client whatever it receives from the server, and sends through to the server whatever it receives from the client. 08:29 < Fenhl> are you also handling disconnect/reconnect correctly? 08:30 < Fenhl> if you're not, that's what would cause this error. The client is opening a new connection so it expects to be in handshaking state, but since you never closed the connection from your proxy to the server, the server still thinks it's in status state 08:31 < Videogamer555> My proxy has 2 halves. The first half acts like a server, and gets connections from the Minecraft client. When a connection is made in this half of the program, it triggers the other half of the proxy program (which behaves like a client) to connect to the actual Minecraft game server. 08:32 < Fenhl> and if the client disconnects, do you also disconnect from the server, and vice versa? 08:33 < Videogamer555> As for disconnecting, whenever the MC client disconnects from the proxy, the proxy closes both the server and the client modules, forcing the entire connection to close. And the same full closure of the connection happens if the MC server initiates a closure of the connection. 08:33 < Videogamer555> I believe this is the correct operation. 08:33 < Fenhl> okay, that sounds correct, but then why are you not delimiting separate connections in your stream dump? 08:34 < Fenhl> > okay, that sounds correct, but then why are you not delimiting separate connections in your stream dump? 08:35 < Videogamer555_> IRC just dropped the connection again. Did you say anything while I was disconnected? 08:35 < Fenhl> I just repeated my message 08:36 < Fenhl> fix your connection please 08:36 < Videogamer555_> My VB6 program depends on the Winsock control. This gives Visual Basic access to Winsock, which is the part of Windows that handles networking. I'm not sure if there are any bugs in Winsock, but if there are that might account for it. 08:37 < Videogamer555_> I don't know why but my connection keeps dropping. DOH 08:37 < Videogamer555_> I'm using cable internet (Xfinity), not dialup, maybe something's wrong with my PC? 08:37 < Fenhl> you could use a bouncer like IRCCloud to miticate this 08:37 < Fenhl> *mitigate 08:38 < Videogamer555_> Do you think that Winsock could be the problem? 08:38 < Videogamer555> Do you think Winsock could be the problem with my proxy? 08:39 < Fenhl> I don't know 08:40 < Videogamer555> Are there any known bugs in Winsock that would cause it to butcher network packets? 08:40 < Fenhl> I don't have any experience with Windows 08:40 < Videogamer555> You only know Linux? 08:41 < Fenhl> UNIX in general 08:41 < Fenhl> e.g. Linux and OS X 08:42 < Fenhl> most modern programming languages can target any of these platforms, e.g. hematite_server works on windows according to other people working on the project 08:43 < Fenhl> but personally I haven't used a Windows system in years 08:43 < Fenhl> much less written any platform-specific code 08:45 < Videogamer555> Here's the Pastebin of the core VB6 code for my proxy http://pastebin.com/NCFH0qFQ 08:45 < Videogamer555> This by itself will work to get packets from each side and pass them through to the other side. 08:51 < Videogamer555> There are 3 winsock controls in use. One acts as a listener (and is called L), which waits for MC to try to connect to it. The next one acts as a server (and is called S). The connection attempt to L is accepted by S, and then the 3rd Winsock control (which acts like a client and is called C) makes a connection to the actual MC server. The DataArrival event happens for S, whenever the MC... 08:51 < Videogamer555> ...client sends data. The DataArrival event happens for C whenever the MC server sends data. In the event handler code for S_DataArrival, the data is immediately stored in a byte array called Data, and then (if the connection didn't close in the microsecond between the getting of data and the next line of code, and this possibility is checked for before running the next line of code) this... 08:51 < Videogamer555> ...byte array is sent out of C. 08:53 < Videogamer555_> The same happens the other way with the C_DataArrival event handler. It gets its data into a byte array as well, and then sends it out of S. 08:54 < Videogamer555_> So theoretically, no data ever gets lost. But apparently something is messing up the data. 08:54 < Videogamer555_> You still here? 08:54 < Videogamer555_> Hello? 08:56 < Videogamer555> Are you still here? 08:57 < Videogamer555> Fenhl, are you still here? 08:57 < Fenhl> yes 08:58 < Videogamer555> Did you have time to look at my code, or my description of the code? 08:58 < Videogamer555> Do you see anything wrong with it, that might explain the problems my proxy is having? 08:59 < Fenhl> still reading backlog 09:00 < Fenhl> I can't be certain if anything is wrong with the code since both the language and the framework are unfamiliar 09:01 < Videogamer555> If you treated it like pseudocode, and just gathered what it was trying to do, based on the structure of the code, and the names of the functions, would you say it looked correct? 09:02 < Fenhl> yes 09:03 < Fenhl> although I'm not sure what the state = 7 check is supposed to be 09:03 < Fenhl> also, what happens if the client tries to open multiple connections simultaneously? 09:04 < Fenhl> e.g. you're doing a SLP and the connection is still open, then you try to connect to the server 09:04 < Fenhl> maybe you have to close any existing connection when a new one is accepted by L? 09:04 < Videogamer555> State 9 is error. State 7 is connected, State 6 attempting to connect (if I remember correctly), State 2 is listening for connection, State 0 is disconnected. 09:06 < Videogamer555> As far as I know, Minecraft client never attempts to create a connection if it already is connected. Unlike a webbrowser, which can be accessing multiple servers at one time, Minecraft only needs one line of communication between the client and the server to exchange all of the data. 09:07 < Videogamer555> I have a question, when a connection is made normally between a MC client and server, does the server or the client normally initiate the handshaking/logon procedure? 09:09 < Videogamer555> Hello? 09:10 < Videogamer555> Are you still there? 09:12 < Videogamer555> If you are still there, you need to send some "keep-alive packets" so to speak, so that I know you are still reading this, and haven't shut down your IRC client out of boredom. You know, like maybe "I'm still here" or something like that every 15 seconds. Otherwise I get a feeling that I'm talking to myself when I type. 09:15 < Videogamer555> Fenhl, are you still here? 09:22 < Videogamer555> Fenhl, did you leave the chatroom? 09:23 < Fenhl> Videogamer555: I'm still here, as your client should be displaying in the members list 09:23 < Fenhl> I only get notified of new messages if they include my name 09:24 < Videogamer555> So did you see where I posted the definitions of the different connection states for Winsock? 09:24 < Fenhl> yes, I have access to the backlog 09:25 < Fenhl> in general, this is not something you need to ask 09:25 < Videogamer555> And can you tell me, immediately after the MC client connects to the server, which side is supposed to send the first packet? Is the client supposed to send first, or is the server supposed to send first? 09:26 < Fenhl> as is documented on [[Protocol]], the client sends the handshake packet 09:27 < Fenhl> the client should immediately follow up with Login Start 09:28 < Fenhl> and then wait for the server to reply with Encryption Request, Login Success, or Set Compression 09:28 < Fenhl> please read http://wiki.vg/Protocol#Login for details 09:30 < Videogamer555> If the server is being used in offline mode, what should the server send in place of the Encryption Request? If as was previously stated, no encryption is used in offline-mode, then does the server have a different reply packet to send when the client sends the Login Start packet? 09:33 < Fenhl> it just innediately replies with Login Success 09:33 < Fenhl> *immediately 09:33 < Fenhl> again, this was mentioned previously and is noted in the section of the article I linked 09:37 < Videogamer555> If the server is being used in offline mode, what should the server send in place of the Encryption Request? If as was previously stated, no encryption is used in offline-mode, then does the server have a different reply packet to send when the client sends the Login Start packet? 09:47 < Videogamer555> Fenhl, do you know what the server is supposed to send in place of the Encryption Request packet, if the server is using offline-mode? 09:47 < Fenhl> please fix your connection, this conversation isn't going anywhere 09:48 < Fenhl> Videogamer555: https://www.irccloud.com/pastebin/8ki1yAtR/ 09:49 < Videogamer555> Thanks for the info. --- Log closed dim. déc. 06 14:59:11 2015 --- Log opened dim. déc. 06 15:05:29 2015 15:05 -!- Irssi: #mcdevs: Total of 139 nicks [1 ops, 0 halfops, 15 voices, 123 normal] 15:05 !sinisalo.freenode.net [freenode-info] if you're at a conference and other people are having trouble connecting, please mention it to staff: http://freenode.net/faq.shtml#gettinghelp 15:11 -!- Irssi: Join to #mcdevs was synced in 342 secs 18:34 < Not-d54a> [flying-squid] rom1504 pushed 4 commits to master [+0/-0/±20] http://git.io/vRaXC 18:34 < Not-d54a> [flying-squid] demipixel 127ef3c - Add ~ tp /tp, small fixes 18:34 < Not-d54a> [flying-squid] demipixel f17f54f - Adding op 'n stuff 18:34 < Not-d54a> [flying-squid] demipixel b4b90c0 - Add /op and /deop 18:34 < Not-d54a> [flying-squid] rom1504 ae6d988 - fix bug in /tp and add regression tests 18:54 < Not-d54a> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vRaSj 18:54 < Not-d54a> [flying-squid] rom1504 94edf79 - add more tests for /tp and a test for /deop 19:43 < Not-d54a> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±5] http://git.io/vRVff 19:43 < Not-d54a> [flying-squid] rom1504 7efb2da - rewrite tests using async/await much easier to understand that way 20:20 < Not-d54a> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vRVmV 20:20 < Not-d54a> [flying-squid] rom1504 526a9f1 - await the bot is onGround, and add a test for /setblock 22:06 < Not-5d64> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vRVip 22:06 < Not-5d64> [mineflayer] rom1504 b867e33 - fix viewDistance sending 22:10 < Not-5d64> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±2] http://git.io/vRVPX 22:10 < Not-5d64> [mineflayer] rom1504 b6fe4ba - Release 1.5.2 22:10 < Not-5d64> [mineflayer] rom1504 tagged b6fe4ba as 1.5.2 http://git.io/vRVPP 23:20 < Videogamer555> Ok, so I finally decided to try to implement the MC 1.8.8 protocol. 23:21 < Videogamer555> As I mentioned last night, I'm using a proxy to inject packets, so that I can add blocks to the level or produce various other effects in my own program that can't easily be achieved using Vanilla server commands. 23:23 < Videogamer555> And I'm using a proxy rather than writing my own server from scratch, because I don't want to have to implement handling for every possible packet type, and I believe that if I wrote a server I'd have to handle EVERY packet type, not just the ones I want to use for my experiment.every command that the 23:25 < Videogamer555> So now with my proxy I tried to implement just one packet type, the Time Update packet. In the simplest possible time update packet, I just plan to zero out the World Age and the Time Of Day. This should set it to dawn of the first day. 23:28 < Videogamer555> Now a packet has 2 header fields, Size (size of all the rest of the packet including the packet ID) and also PacketID. And while some of these fields are VarInt type fields, if the value is less than 128 (0x80) then it only occupies one byte (as is the case with both the packet size and packet ID for Time Update packet). 23:28 < Videogamer555> So a full reset with the Time Update packet should look like this in hexadecimal: 23:28 < Videogamer555> 09 03 00 00 00 00 00 00 00 00 23:29 < Videogamer555> And that's exactly what my proxy injects into the Server-to-Client TCP stream, when I click the button on it. 23:30 < Videogamer555> Yet it causes an error. The error it gives me is: 23:32 < Videogamer555> Internal Exception: io.netty.handler.codec.DecoderException: java.lang.IndexOutOfBoundsException: readerIndex(9) + length(8) exceeds writerIndex(9): UnpooledHeapByteBuf(ridx: 9, widx: 9, cap: 9) 23:33 < Videogamer555> Can somebody here tell me what's wrong? Why the packet injection technique used by my proxy causing the game to crash with this specific error? 23:43 < rom1504> Videogamer555: you are now parsing every packet (not the fields, just size + [packet content]), right ? 23:44 < rom1504> if you don't do that, you can't inject packets 23:44 < Videogamer555> No, not yet. 23:45 < Videogamer555> And it always gives that one specific error. 23:45 < rom1504> yes, I just gave you the reason 23:46 < Videogamer555> I'd think it would give different errors, based on what packet got corrupted, if in fact my injected packet caused corruption of one of the actual server's packets, but it's always the exact same error. 23:46 < rom1504> ah 23:46 < Videogamer555> So it seems that it systematically is producing one specific error. I gave you the error message above. 23:46 < rom1504> long is 8 bytes 23:46 < rom1504> hmm 23:47 < rom1504> okay 23:47 < Videogamer555> I was thinking Long is 4 bytes 23:47 < rom1504> and the packet id is a varint 23:47 < Videogamer555> Because in visual basic a Long is 4 bytes, and an Integer is 2 bytes 23:47 < rom1504> there's no need to guess 23:47 < rom1504> read that http://wiki.vg/Protocol#Data_types 23:47 < Videogamer555> And a Currency is 8 bytes 23:47 < Videogamer555> I guess I was getting confused with my data types. 23:49 < rom1504> oh and when do you send this packet ? 23:50 < Videogamer555> Wait a sec, I'm gonna try something. 23:52 < Videogamer555> IT WORKED! 23:52 < Videogamer555> It now set the time of day. 23:53 < oldmanmike> Can build height be extended just with a custom server, what would a vanilla client do if it got a y coord larger than 256? Are the size of chunks regulated purely server-side? 23:53 < oldmanmike> Does the Minecraft client know how to render past 256 blocks? 23:54 < Videogamer555> It seems that Winsock (the Windows component handling networking, and which enables easy use of TCP in VB6) actually handles hardware-level packets and it can tell when the program sending the packets has stopped sending them, so it doesn't try to send my packet until there's a stopping of the MC server's sending of packets. 23:55 < Videogamer555> This means that my program is automatically synchronized by Window's own internal handling of network communications, so my packets don't corrupt the communications of the MC server. 23:55 < Videogamer555> So it looks like I may never need to parse the packets from the MC server, which makes this project a LOT easier. 23:55 < rom1504> oldmanmike: apparently you can't 23:55 < rom1504> the property in the vanilla server config file doesn't do anything past 256 23:56 < Videogamer555> rom1504 did you see that? It actually worked as I had hoped! 23:57 < Videogamer555> I thank you for your mentioning about the size of a long being 8 bytes instead of 4. 23:59 < oldmanmike> rom1504: I mean if the server wasn't Mojangs and could have its own world format. --- Day changed lun. déc. 07 2015 00:00 < rom1504> oldmanmike: I doubt it because the chunk packet has a bitmap of size 2 byte, which means 16bit, so it can only consider 16 sections 00:00 < Videogamer555> Unfortunately though, it seems that the server keeps track of time, so less than a second later, it corrects the change in time that my proxy created, by sending its own Time Update packet, meaning that my time-override technique ends up being overridden by the server. 00:01 < rom1504> Videogamer555: yes, you do need to intercept packet if you want your proxy to be useful 00:02 < oldmanmike> rom1504: :( 00:06 < Videogamer555> I have added a check box, which causes my proxy to "eat" all the packets from the MC server. This way, after the game is going (via the handshaking and stuff established between official MC client and MC server) I can click the checkbox and my proxy will get and destroy (instead of the normal "get and relay to client") all of the packets coming from the server. This way, the server has no... 00:06 < Videogamer555> ...more control of the client after I click the check box in my proxy. Only problem is that the client then crashes after a period of time during which it doesn't receive a keep-alive packet from the server I'll need to have my proxy send keep alive packets it seems. 00:07 < Videogamer555> Doesn't actually crash, but it does close the connection and give a "timed out" error. 00:07 < Not-d54a> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±2] http://git.io/vRVhn 00:07 < Not-d54a> [flying-squid] rom1504 974fcaf - add a digging and placing test the placing test is currently skipped because it doesn't always work (might be better to restart the server and bots at each test) 00:09 < Not-d54a> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vRVhM 00:09 < Not-d54a> [flying-squid] rom1504 c5fd043 - increase test time 00:11 < rom1504> Videogamer555: well don't filter all packets 00:11 < rom1504> just some, for example the time packet in your case 00:12 < rom1504> (that means you have to read the packet id though ;)) 00:13 < Not-d54a> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vRVjo 00:13 < Not-d54a> [flying-squid] rom1504 85b1160 - arrow function don't have this 00:13 < Videogamer555> But that means I will need to be able to PARSE VarInts. It was a major PAIN just CREATING VarInts. 00:14 < rom1504> take some code to parse varint in an other language 00:14 < Videogamer555> The code for creating them is enormous (almost as big as all of the rest of my program). 00:14 < rom1504> then adapt it 00:14 < Videogamer555> Now to parse them I'd have to write just as much code on the parsing side as I did on the creating side. 00:15 < rom1504> https://github.com/roblabla/ProtoDef/blob/master/src/datatypes/utils.js#L55 00:22 < Videogamer555> Just to create a VarInt, you have to split a 4byte Int into a byte array of 32-bytes (a sort of pseudo-bit-array, as this is the ONLY way to access bits individually), and put one bit in the first bit of each byte. Then you use some For Next loops to move the bits from the 32-byte array into a 40-byte array (where each byte represents a single bit in the VarInt). Then use some more For Next... 00:22 < Videogamer555> ...loops to move these bits from this pseudo-bit-array into lower 7 bits of each byte ina 5-byte array, in order to get a max-size VarInt. Then use some more code to get rid of the unneeded bytes to make the VarInt smaller than 5 bytes if possible, and the last step is to use a For Next loop to set the high-bit of each byte in the VarInt (which is actually a byte-array) for every byte except... 00:22 < Videogamer555> ...the last. 00:24 < Videogamer555> Now hopefully you will be able to see just how much painful coding it is just to CREATE a VarInt. However, parsing them requires READING the high bit of each byte, and deciding whether or not to even look at the next byte, based on this, and then doing the reverse of what I did to create a VarInt. That is the kind of MASSIVE ammount of code, that deserves to be its own project, not part of... 00:24 < Videogamer555> ...another project. 00:25 < Videogamer555> I wish Mojang coded the Minecraft protocol to be as simple as possible for 3rd party developers to implement, which means fixed sized fields, no VarInts or other such crap. 00:28 < Videogamer555> Or if he DID do a variable sized integer, it should have the first byte being the number of bytes in the integer, followed by that many bytes of numerical data. So using my idea, a VarByte would occupy 2 bytes. a VarShort would occupy 3 bytes, and a VarInt would occupy 5 bytes. The first byte always being the size-byte, and the bytes after that being the data bytes. That would make it MUCH... 00:28 < Videogamer555> ...easier for me (or other 3rd party developers) to actually implement the protocol. 00:32 < rom1504> you know 00:32 < rom1504> if you spend the time writing these messages writing the varint implementation 00:32 < rom1504> it would already be done 01:03 < Not-d54a> [flying-squid] rom1504 pushed 3 commits to master [+2/-0/±2] http://git.io/vRwIT 01:03 < Not-d54a> [flying-squid] demipixel 05be3c4 - Basic XP implementation 01:03 < Not-d54a> [flying-squid] rom1504 3806c3f - add a test to check /xp works 01:03 < Not-d54a> [flying-squid] rom1504 3becd22 - Merge #145 01:05 < Not-d54a> [flying-squid] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vRwIc 01:05 < Not-d54a> [flying-squid] demipixel d2a62e5 - Update docs on XP 01:44 < nickelpro> Videogamer555: lol wtf, varints are trivial to implement. Go read Google's ridiculously comprehensive C implementation then adapt it to MC Varints. MC uses 32-bit signed ints packed into varints, so you can just uses a 32-bit signed int to read into. Read the TCP stream one byte at a time, mask the highest bit, and bit shift seven bits into your destination int 01:46 < Videogamer555> How do I re-sync though? If I do it one byte at a time, how do I know that the byte I'm reading is actually part of the VarInt, or if it somehow skipped a couple bytes and ended up reading the PacketID instead. How do I cause my program to recognize it's no longer in a VarInt, and has lost sync with where it should be? 01:48 < nickelpro> If the highest bit is 0, you're reading the last byte of the varint. 01:50 < Videogamer555> Unfortunately there's no resync packet (or at least the protocol documentation doesn't list one). If there was one, it would be trivial to resync. If it was getting data it didn't expect, it could just kick itself into a "wait for resync" mode, and then only respond when the resync packet (a packet of a specific length and holding a very specific pattern of bytes) was detected. This would... 01:50 < Videogamer555> ...allow it to recover if my program was for example too slow to respond to the TCP stream in real-time, and lost its place in the TCP stream. 01:50 < nickelpro> Resync is irrelevant, this is TCP. Resync is for UDP lockstep RTS 01:51 < nickelpro> And too slow to respond? Basically impossible, MC sends barely any traffic 01:52 < nickelpro> The only packet you're obligated to respond to is keepalive and you just reflect it 01:55 < nickelpro> Here is C I wrote to decode minecraft varints from a buffer into an int, its 10 lines long with error checking. Other languages will be simpler https://github.com/nickelpro/cspock/blob/master/src/mcp/datautils.c#L91 01:58 < nickelpro> Videogamer555_: http://pastebin.com/NgMj0Eei 01:58 < nickelpro> Get a bouncer dude 02:24 < barneygale_> Videogamer555, python impl, again without error checking https://github.com/barneygale/quarry/blob/master/quarry/utils/buffer.py#L130-L141 07:53 < Fenhl> Videogamer555: fix your connection please, your constant disconnects and reconnects are spamming the channel 13:07 < Videogamer555> Ok, I've got a lot working including (I think) VarInt encoding and decoding. Based on my undestanding of how VarInts work, I've created what seems to be a working encoder and decoder. The decoder puts out a value that matches the input to the encoder, when the output of the encoder is fed into the decoder. 13:07 < Videogamer555> But I have a problem. 13:08 < Videogamer555> The BlockChange packet only works correctly for some values of Block ID and Block Data. 13:12 < Videogamer555> As you can see in the protocol specs http://wiki.vg/index.php?title=Protocol#Block_Change this packet is supposed to combine the BlockID and BlockData into a single field. According to this specification, you shift the actual BlockID is supposed to be shifted left 4 times and then ORed with the BlockData. And then the result of this is supposed to be fed into a VarInt. Now the combining of... 13:12 < Videogamer555> ...these fields is simple. It's simply DataAndID = BlockID * 16 + BlockData. The result of this is then supposed to be fed into the VarInt encoder, and so far my program does exactly that. 13:16 < Videogamer555> The problem is what happens AFTER this, in the Minecraft client itself. It appears that even though the output of my VarInt encoder is a proper VarInt, Minecraft is not decoding it properly. For example, when the BlockID is in the 0 to 7 range, Minecraft decodes it properly. However for any value 8 or larger, Minecraft doesn't decode it properly. For example BlockID 9 is supposed to be... 13:16 < Videogamer555> ...Water, but instead I'm getting Sandstone Stairs. 13:17 < Videogamer555> Here's the Pastebin link with my Visual Basic code for the VarInt encoder http://pastebin.com/Tw1wnKdm 13:17 < Videogamer555> Please check that out, and let me know where I'm going wrong. 13:21 < Videogamer555> Some things to know about VB6. You don't specify the size of an array when you do Dim MyArray(4) for example. That's not a 4-cell array. That's an array with lowerbound of 0 and upperbound of 4, which means it's a 5-cell array. Also in Visual Basic, data types are not the C++ standard. Integer is a 2-byte (not 4-byte) signed value, and Long is a 4-byte (not 8-byte) signed value. 13:24 < Videogamer555> VB6 does not have an 8-byte integer type. It does have an 8-byte fixedpoint type though, called Currency. Currency is actually equivalent to a C++ Long divided by 10000. For example, in a C++ Long, the value 0x0000000000000001 corresponds to 1. In VB6, if a currency is holding the hexadecimal value 0x0000000000000001 this actually represents the value 0.0001. 13:26 < Videogamer555> I therefore have been using Currency where the Minecraft specs call for a Long. I just need to remember to multiply or divide by 10000 when converting from Currency to other data types or visa versa. 13:28 < Videogamer555> I need some major help getting Minecraft to decode my VarInt, and I fear I may be not implementing the encoder correctly. 13:32 < barneygale> vb 13:32 < barneygale> top kek 13:36 < barneygale> Videogamer555, what does your varint encoder pack this to? 1000000000 13:37 < barneygale> It should be 8094EBDC03 13:38 < Videogamer555> Is the value 1000000000 a HEX or DEC value? 13:38 < barneygale> decimal 13:39 < barneygale> Videogamer555, why are you using VB6, out of interest? 13:40 < Videogamer555> I'm using VB6 because it's the only programming language I know extensively how to use. 13:41 < Videogamer555> And the result I'm getting from your test input is 0x83DCEB9400 13:42 < barneygale> it would probably be quicker to learn a new language than use vb6 :P 13:42 < barneygale> pretty sure your varint packing is wrong then 13:43 < Videogamer555> Looks like I have some swapped bytes or something? The hex digits appear to be there, but in the wrong order. 13:43 < Videogamer555> Looking at my code on Pastebin http://pastebin.com/Tw1wnKdm can you tell me where I'm going wrong? 13:44 < barneygale> not really. i haven't used vb6 in a long long time and it looks pretty incomprehensible 13:44 < barneygale> this is a 7 line function in python 13:44 < rom1504> https://tonicdev.com/rom1504/varint 13:45 < Videogamer555> Interestingly enough, my DECODER actually gets the correct value back out of the VarInt. 13:45 < Videogamer555> So does my decoder have an equivalent bug in it or something that cancels out the bug in my encoder? 13:46 < barneygale> Your first byte should definitely be 0x80, as 1000000000 & 0x7F == 0, and your high bit should be set as there's more data to come 13:47 < Videogamer555> From what you posted regarding python, it appears that Python already has implemented VarInts natively (no need to write your own encoder or decoder, as one would need to do in C or VB). 13:47 < barneygale> really? where? 13:47 < rom1504> https://msdn.microsoft.com/en-us/library/dezyht83.aspx 13:47 < Videogamer555> I'm talking to rom1504 13:48 < Videogamer555> Barneygale, I was replying to rom1504. 13:48 < barneygale> but rom1504 didn't mention python? 13:48 < barneygale> whatever... 13:48 < Videogamer555> But he linked to Python code at https://tonicdev.com/rom1504/varint 13:48 < rom1504> that was node.js, but it's using my 9 line writing function https://github.com/roblabla/ProtoDef/blob/master/src/datatypes/utils.js#L85 13:49 < barneygale> that doesn't look like any python i've ever seen 13:49 < rom1504> protodef is the lib we implemented, it's not native 13:50 < rom1504> the point of https://tonicdev.com/rom1504/varint is you can easily test values to see if your implementation is correct 13:50 < rom1504> (in your browser) 13:50 < Videogamer555> Rom1504, your MSDN article isn't helping much. I'm using VB6 not VB-2015. 13:51 < rom1504> oh, but you have to register in tonicdev to change it, that's annoying hmm 13:51 < rom1504> ah really vb6 doesn't have bit shift operator then ? 13:51 < Videogamer555> VB6 does NOT have a built in >> operator. So I had to code my own functions SHL and SHR. 13:52 < rom1504> ah 13:52 < rom1504> okay, enjoy then 13:53 < barneygale> ಠ_ಠ 13:54 < Videogamer555> What does your emoticon mean? 14:04 < Videogamer555> barneygale, what does your emoticon mean? 14:05 < Videogamer555> Also I have some of my own test numbers I've tried. 14:05 < Videogamer555> 127 turns into 0x7F 14:05 < Videogamer555> 128 turns into 0x8100 14:06 < Videogamer555> 129 turns into 0x8101 14:06 < Videogamer555> These all work as expected. 14:09 < Videogamer555> And of course -1 (which in a normal 4-byte integer is represented as 0xFFFFFFFF) when converted to a VarInt has this hex value 0x8FFFFFFF7F. 14:11 < rom1504> should be "ffffffff0f" 14:12 < Videogamer555> Again, it works as expected. And it is arranged most-significant-byte-first (big endian order), which should be expected, as Minecraft uses big endian values. So of course I coded my VarInt encoder and decoder to use big endian VarInts, and this means taking the input 4 byte Int and converting it to a big endian number before converting it to VarInt format, and this is already implemented in... 14:12 < Videogamer555> ...my VarInt encoder because the encoder calls the FixInt function. 14:12 < rom1504> 128 should be "8001" 14:13 < Videogamer555> The FixInt function is a function I wrote to swap the endianness of a 4-byte integer value. 14:13 < rom1504> your other tests are correct 14:13 < barneygale> looks like your byte order is reversed (kind of) 14:14 < Videogamer555> I think you are talking about encoding a little endian VarInt. My EncodeVarInt function encodes a big endian VarInt, as required by Minecraft. 14:17 < barneygale> i'm talking about encoding the varints minecraft uses... 14:17 < Videogamer555> I thought Minecraft only handled big endian values. 14:17 < barneygale> https://developers.google.com/protocol-buffers/docs/encoding?hl=en#varints 14:17 < Videogamer555> What you are describing is a little endian VarInt.