09:11 < ackpacket> What reason would a 1.7.x server have to use it anyway? 09:14 <+sadimusi> construct looks a lot nicer than I remembered it 09:17 <+sadimusi> SpaceManiac: how's glowstone coming along btw? do you think it will ever be a viable replacement for the vanilla server? 09:18 < ackpacket> I don't suppose there's a way to ignore encryption altogether if the client chooses to do so? 09:18 <+SpaceManiac> Pretty decent. I've been a little slow working on it because almost all the easy problems are solved 09:18 <+sadimusi> ackpacket: no, but the server can 09:19 < ackpacket> right, in offline mode 09:19 < ackpacket> I think it also happens with local servers 09:19 < ackpacket> should be up to the client haha 09:23 < ackpacket> Yeah something looks fishy about this packet 09:25 <+SpaceManiac> sadimusi: there's a lot of situations (like PvP, mobs, and the stupidly obscure adventure world features) where Vanilla will always be stronger, but I'd say it's possible 09:26 <+sadimusi> SpaceManiac: "Somewhat-complete inventory support." doesn't exactly sound confident ;) 09:28 <+SpaceManiac> the click handler logic is complicated! :P 09:28 < ackpacket> hmm 09:33 < ackpacket> Can anyone see this? 09:34 <+SpaceManiac> Yes. 12:10 < ni291187> hello 12:11 < ni291187> i want to write a custom client and I am gathering information 12:11 < ni291187> http://wiki.vg/Protocol_FAQ 12:12 < ni291187> but, Sends a position + look packet to confirm the spawn position 12:12 < ni291187> how do I know the player' ss pawn position? 22:31 < benbaptist> Did the Minecraft server query change somehow in the most recent snapshots? My server script works just fine when querying on a 1.7.2 client, but fails on any recent snapshot. 22:31 < benbaptist> such as 14w25b 23:24 < benbaptist> Alright, nevermind. I went and extracted a real response from a 14w25b server, and it worked fine when I printed that out. Apparently the example response on http://wiki.vg/Server_List_Ping#Client_-.3E_Server is not enjoyed by 14w25b. I was just using that as a test. 23:24 < benbaptist> so that was the issue. 23:25 <+SpaceManiac> benbaptist: that's the old, pre-1.7 response format. It's possible the snapshots have stopped understanding it 23:25 < benbaptist> SpaceManiac, No, there's 1.7 packets at the beginning. 23:26 < benbaptist> you scrolled down too far, to the 1.6 and before area. 23:26 <+SpaceManiac> You linked to that section 23:26 < benbaptist> oh, whoops. 23:26 < benbaptist> That wasn't what I intended to link to - odd. 23:26 < benbaptist> I was working with the 1.7 selection, though. 23:27 <+SpaceManiac> Oh, it's possible something was crazy with the favicon, I suppose, since it's not real data in thst example 23:27 < benbaptist> yeah. I tried removing it, but I actually had other issues to fix before that, and so maybe removing the favicon would've helped. 23:27 < Thinkofdeath> benbaptist: fixed the example, the uuid used didn't have the '-' which causes issues with newer clients 23:28 < benbaptist> Thinkofdeath, Ahh, nice! 23:28 < Thinkofdeath> 1.7.5< had no '-', 1.7.9 added them back --- Day changed mer. juin 25 2014 00:12 < benbaptist> are there any Python-based SMP projects around that I could take a peek at the code for the encryption? 00:12 < benbaptist> I'm a bit stumped with how to do protocol encryption. :P 00:19 < dx> there's a few in http://wiki.vg/Client_List and http://wiki.vg/Library_List and one server https://github.com/bravoserver/bravo/ 00:20 < dx> the encryption code hasn't changed a lot since 1.3 afaik 00:20 < dx> so even if they are marked as outdated it's going to be useful 00:22 < dx> and this is probably the only python 1.7 implementation https://github.com/nickelpro/spock 00:26 < benbaptist> yeah 00:26 < benbaptist> thanks man! 02:00 < benbaptist> Okay, ASN.1 scares me. Am I forced to use encryption as the server, or can I somehow bypass it, but still use authorization? 02:02 < dx> benbaptist: nope 02:03 < dx> benbaptist: but nobody's forcing you to rewrite all the code from scratch either 02:03 < benbaptist> dang. I'm going to need to search further in the code I've looked at, to find the encryption stuff. 05:47 <+sadimusi> benbaptist: everything you need should be in here https://github.com/sadimusi/mc4p/blob/master/mc4p/encryption.py 06:05 <+sadimusi> benbaptist: although I'd suggest you use tlslite instead of pycrypto 06:06 < benbaptist> sadimusi, Ah, okay. Thanks man! Is tlslite a non-standard module? 06:06 <+sadimusi> yes, but unlike pycrypto it's pure python 06:06 < benbaptist> Ah, awesome! 06:06 <+sadimusi> and it will use pycrypto if it's available to speed things up 06:09 < benbaptist> sadimusi, should I just utilize the whole encryption.py file, since it's under the wtfpl? 06:10 <+sadimusi> sure, if you want to 06:10 < benbaptist> Thanks so much man, you're a life saver! 06:11 < benbaptist> I've been so stumped on this for weeks. :P 06:11 <+sadimusi> just be warned that installing pycrypto on windows is a major PITA 06:12 < benbaptist> yeah, I'm okay with that. My project, Wrapper.py, doesn't even work on Windows anyways thanks to the standard Python bundle for windows not having pkg_resources which I use for reading HTML files out of the package for the web server aspect. 06:23 < benbaptist> What's the "Verify Token" field on the Encryption Request packet? 06:23 < benbaptist> this page partially confuses me, as it seems to be written from the client's POV as opposed to a neutral POV. http://wiki.vg/Protocol_Encryption 06:24 <+sadimusi> what makes you think so? 06:27 < benbaptist> I might just be overlooking something, but it seems like it skips over important information about how the server does tasks. I don't get where the Verify token field comes from. 06:27 <+sadimusi> it's random 06:28 < benbaptist> ah, okay. I can just throw random characters at it? 06:28 <+sadimusi> but you're right, that isn't explained anywhere 06:29 <+sadimusi> random bytes even 06:29 <+sadimusi> the vanilla server uses 4 iirc 06:29 < benbaptist> okay 06:29 <+sadimusi> it's just to prevent replay attacks 07:34 < benbaptist> wait, so since the server ID string is empty, do I even need to worry with doing anything with sha1.update()? 07:35 <+SpaceManiac> You need to update with the server ID string, since some servers do use it 07:35 < benbaptist> I'm the server though, so do I really need to do anything? 07:36 <+SpaceManiac> Oh, in that case I imagine it's fine 17:06 < shoghicp> hmm, what is the difference between UUIDv2 and UUIDv3? 17:07 < humerusj> shoghicp: already have your test? 17:07 < shoghicp> yeah :) 17:13 < Not-cdc9> [mcprotocol] thinkofdeath pushed 2 commits to master [+0/-0/±107] http://git.io/xKcVgg 17:13 < Not-cdc9> [mcprotocol] thinkofdeath bcc948b - 14w26a 17:13 < Not-cdc9> [mcprotocol] thinkofdeath 922cc39 - 14w26b 19:42 < benbaptist> Where does the private key in protocol encryption even come from? This doc seems to breeze over that. http://wiki.vg/Protocol_Encryption#Server 19:44 < shoghicp> benbaptist: it's generated by the server 19:52 < benbaptist> Apologies. My system just had a freak out. 19:53 < benbaptist> Screen went black and when it came back, there were visual glitches and no internet connection was available. :P 19:54 < shoghicp> did you get my reply? 20:27 < mbaxter> In case you missed it, shoghicp replied that it's generated by the server, benbaptist 20:27 < benbaptist> Oh! 20:28 < benbaptist> I'm writing the server-side portion, so what precisely do I generate? Just random bytes? 20:29 < shoghicp> benbaptist: a 1024-bit RSA private key 20:29 < shoghicp> and the public key :) 20:32 < benbaptist> ah, okay. I have the public key already 23:25 < mpa1212> Does anyone happen to have a lua version of the examples seen on http://wiki.vg/Server_List_Ping ? --- Day changed jeu. juin 26 2014 03:15 < benbaptist> Hmm, I don't mpa1212. I might try to figure it out later though if you're still here. :P 03:26 < mpa1212> benbaptist: :P I'd love it if you would try! I threw my novice programmer self at it for a while earlier today, but got in trouble with lua's lack of explicit data types 03:29 < Altenius> Is anyone here good with the network protocol? 03:30 <+SpaceManiac> A lot of people, probably. What's the question? 03:31 < Altenius> I'm having trouble reading the packets. 03:32 < Altenius> I made a listener on port 25565, and I tried to connect to localhost. 03:32 < Altenius> It gets three bytes, but the bytes are "254", "1", "250" 03:33 <+SpaceManiac> Sounds like the status ping for 1.6 and older 03:33 < Altenius> Yeah 03:33 < Altenius> I'm testing on 1.6.4 03:33 < Altenius> It's different on 1.7? 03:33 <+SpaceManiac> That's right 03:33 <+SpaceManiac> 1.7 is actually a massive change in the protocol structure 03:34 < Altenius> So http://wiki.vg/Protocol#Handshaking is all 1.7? 03:35 <+SpaceManiac> Yeah, the whole Protocol page is for the current version 03:35 < Altenius> Alright, thanks. 03:47 < mpa1212> benbaptist: If you want to look at (the terrible) code I've smashed together (if you do attempt it) its here https://gist.github.com/mpa1212/12e31f8c046335406978 03:56 < mpa1212> \ 04:00 < greatman> For a client to show a scoreboard, do I need to create a team with the player in it first? 04:01 < greatman> or just sending objective, score, display does the trick? 04:01 <+SpaceManiac> I don't think a team is needed 04:01 < greatman> hmm 04:05 < greatman> This is basicly what I do, could it be CB overriding my change? 04:05 < greatman> https://www.irccloud.com/pastebin/BaNcop0F 04:06 < greatman> Because if I resend my objective packet, the client crash with a already exist 04:14 <+SpaceManiac> If you're already using Bukkit, why are you sending packets instead of using the scoreboard API features? 04:15 < greatman> I got HealthBars using the main scoreboard so I can't create a unique scoreboard for everybody 04:15 < greatman> or im doing something wrong 05:48 < Azelk> What would a response packet look like? 05:49 <+sadimusi> response to what? 05:49 < Azelk> When pinging a server. 05:49 <+sadimusi> http://wiki.vg/Server_List_Ping#Ping_Process 05:49 < Azelk> It sends something in json but what 05:49 <+sadimusi> there's an example --- Log closed jeu. juin 26 20:48:14 2014 --- Log opened jeu. juin 26 20:48:25 2014 20:48 -!- Irssi: #mcdevs: Total of 137 nicks [1 ops, 0 halfops, 11 voices, 125 normal] --- Log closed ven. juin 27 10:49:03 2014 --- Log opened ven. juin 27 10:49:27 2014 10:49 -!- Irssi: #mcdevs: Total of 135 nicks [1 ops, 0 halfops, 12 voices, 122 normal] 10:55 -!- Irssi: Join to #mcdevs was synced in 344 secs 11:07 < Not-cdc9> [mcprotocol] thinkofdeath pushed 1 commit to master [+0/-0/±77] http://git.io/Wz60pw 11:07 < Not-cdc9> [mcprotocol] thinkofdeath d7370e9 - 14w26c 20:05 < Altenius> In the MC protocol, with the ping, it's supposed to only send a long. 20:05 < Altenius> But it sends 8 bytes instead of 4 20:05 < Altenius> What am I missing? 20:05 < MrARM> Isn't a long 8 bytes? 20:06 < Altenius> Is it? 20:07 < Altenius> I thought it was 4 20:07 < Altenius> Oh, it is! 20:07 < MrARM> in Java it looks like it is 20:15 < merlish> yep long means 64-bits -> 8 bytes 20:15 < merlish> short 16 bits, int 32 bits 21:08 < Drainedsoul> this is why 21:08 < Drainedsoul> the documentation shouldn't use "short", "int", and "long" when it means integers with precise widths 21:13 < dx> while i don't disagree with you, the real problem here is people not reading this damn page http://wiki.vg/Data_types 21:33 < Not-cdc9> [Glowstone] SpaceManiac pushed 3 commits [+11/-0/±6] http://git.io/h2V8Pw 21:33 < Not-cdc9> [Glowstone] SpaceManiac 69fd08d - Changed offline-mode UUID to match Vanilla. 21:33 < Not-cdc9> [Glowstone] warriordog 4c6cd40 - Added drop information for blocks with non-standard drops (see #98). 21:33 < Not-cdc9> [Glowstone] SpaceManiac 22cd9e7 - Properly implemented experience/levelling math (fixes #117). 21:48 < dx> i kinda wish i could get a proper diff before submitting stuff to the wiki 21:48 <+SpaceManiac> "Show changes" button not do it? 21:49 < dx> ehh, well, yes, that's not really a proper diff, i don't want to screenshot it 21:50 < dx> http://wiki.vg/index.php?title=Protocol&diff=prev&oldid=5873 21:50 < dx> http://wiki.vg/Protocol 21:50 < dx> opinions? 22:00 <+SpaceManiac> looks pretty good 22:39 < benbaptist> Does anyone have any clue how Encryption Request is sent on the latest of snapshots? (14w26c and such). I haven't quite been able to figure it out myself. I might do packet dumps of real server activity to figure it out if nobody else knows. 22:41 < Altenius> I'd use wireshark 22:41 < Altenius> That's what I've been using. 22:41 < benbaptist> I suppose I could, I was just going to slightly modify my Wrapper's proxy mode to do nothing but read packets. 22:55 < benbaptist> I think I might've figured it out. The bytearrays are now prefixed with varints as opposed to shorts. 22:55 < benbaptist> Otherwise, the packet structure is the same. 22:55 < benbaptist> *might* be. This is just what I've figured out so far. 23:13 < benbaptist> Hooray! So, during one of the snapshots, the encryption request packet (sent by the server) changed the shorts to varints. Now I need to figure out how to actually encrypt a packet. 23:13 < benbaptist> Are the lengths (prefixing the packet) unencrypted? 23:14 < shoghicp> no 23:14 < shoghicp> everything is encrypted 23:14 <+SpaceManiac> no, the whole TCP stream's encrypted 23:16 < benbaptist> Okay. To be honest, I'm not certain how much data I'm supposed to read to feed it to the decrypter. 23:17 <+sadimusi> generally you can read the length field one byte at a time 23:17 <+sadimusi> in 90% of the cases one byte should be enough 23:18 < benbaptist> Wait, the length field is decrypted? Or I have to decrypt every byte of it as I read it? 23:18 <+sadimusi> you have to decrypt everything, but I'd suggest you put the buffer after the decryption 23:19 <+sadimusi> (obviously there's also a buffer before the encryption, I just mean the one you're actively working with= 23:20 <+sadimusi> you're writing a server, right? 23:20 < benbaptist> Okay, that's where I'm confused then. I don't know how far "everything" is. I'm using your encryption.py from this URL ( https://raw.githubusercontent.com/sadimusi/mc4p/master/mc4p/encryption.py ). But I don't know what to feed the .decrypt() and .encrypt() functions (I'm using the AES128CFB8, unless that's not correct :P ) 23:20 < benbaptist> Yup! 23:20 < benbaptist> all the code I'm working on is server-side 23:22 <+sadimusi> you just have to run all the data you get through the same object's decrpyt method, the way you portion it does not matter 23:23 <+sadimusi> and make sure to use a separate instance for sending 23:24 <+sadimusi> https://github.com/sadimusi/mc4p/blob/master/mc4p/proxy.py#L332 23:24 <+sadimusi> this might help 23:24 <+sadimusi> note that mc4p is meant to run on the client side, so it's not optimized to handle many connections at once 23:25 <+sadimusi> you probably want to use gevent or twisted or something 23:26 <+sadimusi> oh, mc4p already uses gevent. I didn't even remember 23:26 <+sadimusi> but it still does a lot of unnecessary copying 23:30 < dx> just checked the source code of bravo, it does authentication without implementing encryption 23:30 <+sadimusi> o.O 23:30 < shoghicp> how o.O? 23:30 < dx> oh wait 23:30 < dx> nevermind 23:30 < shoghicp> ah 23:30 < dx> "Online authentication was broken and has been disabled." 23:30 < dx> lol. 23:31 <+sadimusi> is bravo even still alive? 23:31 < dx> kinda misleading, there are a bunch of other mentions of authentication but it doesn't work 23:31 < mathuin> I spent some time with encryption in bravo, but it was harder than it looks. 23:31 < dx> sadimusi: last protocol update was 1.4 23:31 < mathuin> It was for 1.4 23:31 < dx> sadimusi: last commit may 15, 2014, so not so bad 23:31 < shoghicp> I played with auth a few days ago for a Minecraft: PC to MCPE bridge 23:32 < shoghicp> and each crypto lib calculated the continous buffers in a different way 23:32 < benbaptist> Sorry, I just netsplitted from the channel. What did I miss while I was gone? :P 23:32 <+sadimusi> dx: the contribution graph doesn't look promising https://github.com/bravoserver/bravo/graphs/contributors 23:32 <+sadimusi> benbaptist: nothing 23:34 < benbaptist> Did my last messages go through or did the netsplit cut them off? 23:34 < benbaptist> this is a screenshot of what I last saw http://s.benbaptist.com/PpV6BA8kz8.jpg :P 23:34 < dx> we missed the last message there 23:34 < shoghicp> I missed all your messages 23:34 < benbaptist> Ah, dang. 23:34 < dx> shoghicp: what 23:35 < shoghicp> dx: yeah, on one I fixed encryption 23:35 <+sadimusi> benbaptist: http://d.pr/i/f2C1 23:35 < shoghicp> well, I'm just bundling mcrypt into the default binaries 23:35 < shoghicp> it seems to calculate them as MC wants 23:35 < dx> shoghicp: i'm watting at "I missed all your messages" 23:36 < shoghicp> dx: yeah, no idea why 23:36 <+sadimusi> shoghicp: they're just earlier than you think 23:37 < benbaptist> ah, okay. 23:37 < dx> yeah, scroll 20 minutes up 23:37 < dx> 17 23:37 < dx> there's no way irc is so broken that you don't see that 23:38 < shoghicp> oh, the line length was lot longer here and it mixed with sadimusi messages 23:57 < benbaptist> Failure for me. http://s.benbaptist.com/c2FsEd6eKv.jpg :P --- Day changed sam. juin 28 2014 00:39 < Altenius> Is every packet encrypted? 00:40 < benbaptist> Yup. After Encryption Response is received, I run everything through the cipher. 00:41 < Altenius> aw 00:41 < Altenius> I'll have to do the same :( 00:42 < benbaptist> I don't really know if I'm parsing anything properly though. I just pack my packet normally, get the length, id, and additional payload, and then run it through the cipher. As for parsing, I read one byte at a time and decipher, which is probably not even remotely close to correct as I'm supposed to probably buffer a lot more before running it through the cipher. I just don't get how much I run through the cipher though, because 00:42 < benbaptist> I don't know the length of hte packe.t 00:42 < benbaptist> Altenius, Are you working on server-side stuff right now? 00:42 < Altenius> I'm making a custom server with a friend. 00:42 < Altenius> With C++ 00:43 < Altenius> Why can't you find the length of the packet? 00:46 < Drainedsoul> benbaptist: Why don't you just run what you have through the cipher, and then proceed with processing the plaintext 00:49 < Altenius> Is everything after the encryption key request encrypted, even the login success packet? 00:49 < benbaptist> Yes, I believe os, Altenius . 00:49 < benbaptist> so* 00:49 < Altenius> or everything after the encryption key response. 00:50 < Drainedsoul> http://wiki.vg/Protocol_Encryption maybe read the wiki? 00:50 < Altenius> Reading that now. 00:50 < benbaptist> Drainedsoul, What I mean, is I don't understand how much I'm supposed to read ahead from the socket, to send to the cipher for decryption. 00:50 < Drainedsoul> sounds like you have some tight coupling going on 00:51 < Drainedsoul> just read from the socket until you get EWOULDBLOCK or EAGAIN and then proceed 00:51 < Drainedsoul> if you decrypt and there's not a whole packet, owell 00:51 < benbaptist> As for sending packets, I believe I have that down. I just pack my length, ID, and payload as I normally would, but at last minute, I run it through the cipher. 00:51 < Drainedsoul> if you decrypt and there's more than a whole packet 00:51 < Drainedsoul> owell 00:51 < benbaptist> Okay. :P 00:51 < Drainedsoul> but your networking code shouldn't know about packet decryption 00:51 < benbaptist> so it's safe because the server doesn't send more than one packet per chunk? 00:51 < Drainedsoul> and your packet decryption code shouldn't know about your networking code 00:51 < Drainedsoul> wut 00:51 < Drainedsoul> TCP/IP is a stream 00:52 < Drainedsoul> you'll always read it in order 00:52 < benbaptist> erm 00:52 < mathuin> Yeah, that's what stream means. 00:52 < benbaptist> that's not what I meant to say. I meant, the vanilla client won't send more than one packet before an EWOULDBLOCK? 00:53 < benbaptist> if so, I guess that's what I'll do. 00:53 < Drainedsoul> why would taht matter? 00:53 < Drainedsoul> the client is the remote end 00:53 < Drainedsoul> it has no control over EWOULDBLOCK/EAGAIN/etc. 00:53 < Drainedsoul> that's between you, the OS, and the networking stack of the OS 00:53 < Drainedsoul> maybe you get 1 packet 00:53 < Drainedsoul> maybe you get 1/2 00:53 < Drainedsoul> maybe you get 14 00:53 < Drainedsoul> why does it matter 01:31 < barneygale_> From a client, how often do I need to send a Position-y packet? Once per tick, so every 50ms? 01:31 <+sadimusi> benbaptist: it doesn't matter how much you read at a time 01:31 <+sadimusi> woops, was scrolled way up 01:31 < Drainedsoul> I was about to say, I thought I just went over that :P 01:32 < benbaptist> sadimusi, Ah, okay. 01:32 < Drainedsoul> so I wasn't believable? 01:33 < benbaptist> Oh, no, I 01:33 < benbaptist> LOL, I didn't mean it in that sense. I just mentioned sadimusi as I read his message last. :P 01:33 < Drainedsoul> ;P 12:27 < mindcat> so I have question, when appear cluster level minecraft server software? 12:27 < mindcat> or why I didn't see that now? 12:29 < mindcat> I mean... 12:30 < mindcat> why I didn't see a server could do 2000+ players in a world? 12:30 < mindcat> if we have 2000+ players 12:30 < mindcat> . 12:31 < mindcat> a server, 2000+ online players in a world without any lag 12:35 <+sadimusi> mindcat: what exactly is your question? 12:40 < mindcat> sadimusi: maybe my "question" isn't question :S 12:40 < mindcat> sadimusi: did you hear EVE? 12:41 < mindcat> EVE Online 12:42 <+sadimusi> I know eve, but you can't really compare it to minecraft 12:43 < mindcat> sadimusi: :S 12:54 < mindcat> wellll 12:55 < mindcat> oh, I still have some jobs need process 15:10 < Altenius> How does the encryption request packet work? 15:11 < Altenius> It says the server generates a keypair on startup, does that mean 3 keys? 15:18 <+Fador> private and public RSA keys derived from two prime numbers 15:35 < barneygale_> Hi all, I'm writing a command-line client. After the login sequence, I wait for a Player Position & Look and send another Player Position & Look back, then send Player packets every 50ms. I don't get kicked by the server, but I do see the server sending Player Position & Look packets to me every second or so, which makes me think it's not accepting my position updates and continually correcting them. Any hints on getting this working? 15:36 < barneygale_> The server sends on_ground=false as well, which seems weird to me 15:36 < barneygale_> I logged off from a vanilla client with my player on the ground 15:37 < barneygale_> If I don't do the 50ms Player packet loop, the server doesn't correct my position, but I do get kicked for not sending anything to the server 15:43 < Altenius> So, you're flying? 15:43 < Thinkofdeath> barneygale_: Are you sending back the position and look exactly as you got it from the server? 15:44 < barneygale_> lemme gisthub code 15:47 < barneygale_> one moment, firefox is being a derp 15:51 < barneygale_> Hm, I may have at least one other issue here. I'm getting nonsensical coordinates :/ 15:51 < Altenius> hmm 15:51 < Altenius> well 15:51 < barneygale_> yeah derp I'm decoding them wrong 15:51 < Altenius> How'd you do the encryption part? 15:51 < barneygale_> Let me see if that fixed it.. 15:51 < barneygale_> Altenius: a lot of trial and error :D 15:52 < barneygale_> But I used PyCrypto 15:52 < Altenius> ah 15:52 < barneygale_> was originally using M2Crypto but it's a bit horrible 15:52 < Altenius> I'm using Crypto++ 15:53 < barneygale_> hah yeah that was pretty bad of me. I was reading the coordinates long longs and sending them as doubles 15:53 < Altenius> lol 15:59 < Altenius> What's the difference between a public and private key? 16:19 < barneygale> Altenius: server has private+public key. It sends the public key to the client, and the client uses it to encrypt a couple of things. It sends back the encrypted data to the server 16:20 < barneygale> The idea of public/private keys is that things encrypted with the public key can only be decrypted by the private key, and vice versa (correct me if I'm wrong) 16:20 < barneygale> The client generates a symmetric key, encrypts it with the server's public key, and sends it back 16:20 < Altenius> oh 16:20 < barneygale> the server then decrypts the encrypted symmetric key with its private key 16:21 < barneygale> now both client + server have the same symmetric key 16:21 < barneygale> so they can move on to using AES or whatever it is 16:21 < barneygale> It's the same as the SSL handshake, kinda 16:22 < barneygale> but on top of the SSL-like handshake you also have the communication with the mojang session server 16:22 < Altenius> hmm 16:22 < Altenius> I might be lazy and use the same key for every client :P 16:22 < barneygale> Keeping the same private/public key between clients is fine 16:23 < barneygale> As long as your private key is not available then you're fine 16:23 < Altenius> oh 16:23 < Altenius> So all the clients can have the same public key? 16:23 < Altenius> and private 16:23 < barneygale> Only the server has a public/private key associated with it 16:23 < barneygale> The client does not have its own keypair 16:23 < barneygale> The client DOES receive the server's public key and then use it to encrypt a message 16:24 < barneygale> the client also generates a symmetric key, which is different to the server's keypair 16:24 < Altenius> okay 16:24 < barneygale> Go look at a youtube video on SSL :D 16:24 < Altenius> What's the point on encrypting this kind of data anyway? 16:25 < barneygale> Altenius: before this, you could run a "rogue server" and social-engineer a victim to connect 16:25 < barneygale> by doing so you get their serverId token and can connect as them to another server 16:25 < Altenius> Yeah 16:25 < Altenius> But why? 16:25 < Altenius> Who would want to do that... 16:26 < barneygale> well 16:26 < barneygale> people did do that 16:26 < barneygale> various servers got hacked iirc 16:26 < Altenius> Pointless imo 16:26 < barneygale> I don't see how you can say that lol 16:26 < Altenius> What's the point in hacking a server? What would you benefit from it? 16:26 < barneygale> It was insecure, it had an obvious security hole that had been solved decades prior 16:27 < barneygale> Altenius: that's like asking why people rob and murder 16:27 < barneygale> just because you wouldn't do it, doesn't mean no-one else would 16:27 < Altenius> I don't do anything not beneficial. 16:27 < barneygale> It's not the most gaping security problem the protocol has had 16:27 < Altenius> Couldn't they still get past this though? 16:28 < barneygale> If they can, no-one has done so afaik 16:29 < Altenius> So people used to set up fake servers that just logged the ID? 16:30 < Altenius> The server send the client the public key. The client encrypts the ID. The server decrypts the ID. 16:30 < barneygale> There's another player in this all: serverId 16:30 < barneygale> Which is different from the keypair and the symmetric key 16:31 <+sadimusi> barneygale: it's no longer used 16:31 < Altenius> The access token is all you need isn't it? 16:31 <+sadimusi> but the public key is enough 16:31 < Altenius> Then you use their access token to log into another server. 16:31 <+sadimusi> you never get the access token 16:31 < barneygale> sadimusi: oh, the server sends a blank one? 16:31 < Altenius> Oh. 16:31 <+sadimusi> barneygale: yes 16:31 < Altenius> Yes barneygale 16:31 < barneygale> and now it's just symmetric + public key? 16:31 < Altenius> As of 1.7.2 16:31 < barneygale> Ah cool 16:31 < barneygale> That makes sense 16:32 < barneygale> It's still called "serverId" in the HTTP request though 16:32 < barneygale> That's what I was referring to, not the thing the minecraft server sends 16:33 <+sadimusi> that one's now just the hash of the public key + shared secret 16:33 < barneygale> yup 16:33 <+sadimusi> well, the client still supports server ids and some servers do still send one 16:36 < barneygale> hoping to get this project released today 16:37 < barneygale> :-) 16:37 < Altenius> So, the server has ONE public key and ONE private key. It sends the same public key to the clients. 16:37 < Altenius> ? 16:38 < barneygale> Yes 16:38 < barneygale> The thing that's unique to each connection encyption-wise is the symmetric key (also called shared secret) 16:39 < barneygale> Altenius: https://www.youtube.com/watch?v=3QnD2c4Xovk 16:45 < barneygale> actually that video might not be very helpful 16:45 < barneygale> it's been a while since I did crypto at uni 16:53 < barneygale> This one's better. It doesn't really cover what to do with the symmetric key, simply how it's exchanged to begin with: https://www.youtube.com/watch?v=wXB-V_Keiu8 --- Day changed dim. juin 29 2014 01:03 < Drainedsoul> When reading entity metadata, can Slots be empty slots? (i.e. just -1) 01:04 < shoghicp> 0xff 01:04 < shoghicp> so yeah 01:04 < shoghicp> or wait, entity metadata? 01:04 <+SpaceManiac> I would expect that a slot in an entity metadata could also be empty 01:04 < shoghicp> I don't know if it will use zero or -1 there 01:11 < Drainedsoul> thanks 09:28 < eddyb> hi 09:28 < eddyb> I'm seeing something odd with the 1.8 snapshots: level.dat doesn't contain the seed (and it's missing other usual data), but the game knows the seed 09:29 < eddyb> it does show up in level.dat_mcr, but I can move that away and it still shows the right value for /seed 10:36 <+sadimusi> eddyb: I just checked one of my saves and the RandomSeed is still in there 10:38 < eddyb> sadimusi: try creating a brand new world 10:38 < eddyb> at least that's what I did 10:38 < eddyb> (in 14w26c) 10:39 <+sadimusi> I created mine in 14w26b, maybe c introduced the issue 10:39 <+sadimusi> let me check 10:39 < eddyb> I don't really understand where the game gets the data 10:40 <+sadimusi> yes, still in there 10:40 <+sadimusi> maybe you are looking at it while the server is running 10:41 < eddyb> sadimusi: the game is closed 10:41 < eddyb> let me try gunzip it again 10:42 <+sadimusi> can you send me your level.dat? 10:42 < eddyb> RandomSeed�Bmy_�3j 10:42 < eddyb> ugh :S 10:42 < eddyb> sadimusi: it's my decoder :( 10:42 < eddyb> is it normal for a List to have TAG_END as its element tag type? 10:43 <+sadimusi> I can't really remember 10:43 <+sadimusi> I used the one I wrote about 4 years ago and it still worked fine :) 10:43 < eddyb> I looked at it in a hex editor and decided that the only meaningful interpretation is an empty List of Compounds 10:43 < eddyb> I guess I was wrong :S 10:44 < eddyb> sadimusi: this was at 5am, mind you :) 10:45 < eddyb> http://www.reddit.com/r/rust/comments/29buxw/spinning_trianglthon_today_at_12pm_pdt_come_to_sf/ 10:45 < eddyb> the other dev was trying (and failing) to render a cube :P https://github.com/PistonDevelopers/hematite 10:46 < eddyb> sadimusi: something else I wanted to ask... do you know where the block ID -> block state mappings are held right now? 10:46 < eddyb> at least the "default" ones. is it Java code, some (JSON?) file in the .jar, or a part of the world data that I didn't stumble upon yet? 10:46 <+sadimusi> I haven't really looked into the snapshots all that much 10:46 < eddyb> aww 10:46 < eddyb> there is a bunch of state data in the assets folder 10:47 <+sadimusi> let me take a look 10:47 < eddyb> if I had the mappings, I could lazy mode my way through rendering most blocks :P 10:51 < eddyb> the Inventory List looks like: 09 00 09 49 6E 76 65 6E 74 6F 72 79 00 00 00 00 10:51 < eddyb> well, there's an 00 before that, sorry 10:52 < eddyb> so TAG_List("Inventory") and then 00 00 00 00 10:53 < eddyb> there should be no TAG_End in there, since the next property is in the same Player Compound (Sleeping) 10:53 <+sadimusi> I don't think item stacks use the new state data 10:54 < eddyb> a normal list has 1 byte of tag type and 4 bytes of length. this one has 4 zero bytes 10:54 <+sadimusi> can you give me that level.dat, I'd like to know if my parser fails as well 10:54 < eddyb> my decision was okay, I guess (I just forgot to skip 3 of those zeroes), but the data still makes no sense 10:54 < eddyb> sadimusi: how do you handle a list like this in your code? 10:55 <+sadimusi> https://github.com/SimpleServer/SimpleServer/blob/master/src/simpleserver/nbt/NBTList.java#L154 10:55 < eddyb> wait, no, there's 5 zero bytes, I forgot the tag is only one byte 10:55 < eddyb> sadimusi: I knew it 10:55 <+sadimusi> so you just have an empty inventory? 10:55 < eddyb> yay non-type-safety 10:56 <+sadimusi> :D that library is ugly 10:56 < eddyb> sadimusi: Java implementations don't distinguish between lists of different element types. I do 10:56 < eddyb> which makes my dynamic storage of a Byte List just as efficient as a Byte_Array 10:57 < eddyb> sadimusi: the perks of a language with ADTs :P 10:57 <+sadimusi> that would certainly be possible in java as well 10:57 <+sadimusi> but efficiency definitely wasn't the focus of my implementation 10:57 <+sadimusi> neither was type safety :D 10:57 < eddyb> it is possible, nobody does it 10:58 < eddyb> (that's why Byte_Array exists in the first place. silly notch :() 11:02 < eddyb> sadimusi: sadly I would have to use "reflection" and transmutation to get from ByteArray to byte vectors without wasting some space 11:02 < eddyb> someone had a serialization redesign in mind that would be less "pull what you need" and more "get a token" that could alleviate this 11:03 < eddyb> sadimusi: in other news, I have an idea about eliding rendering for most chunks 11:03 <+sadimusi> how so? 11:04 < eddyb> using a worst-case ray trace 11:04 < eddyb> first pass: compute chunk sides that are not completely opaque 11:05 < eddyb> second pass: compute minimal visibility angles (in the case of a vertical tunnel, that would be 30° from one corner to the opposite one, I believe) 11:06 <+sadimusi> the mapping from damage value to state data seems to be defined in cea.class 11:06 < eddyb> you can turn that into a simpler constraint on the player's position, relative to the chunk 11:07 < eddyb> the more flexible angle computation is limited to immediately visible chunks 11:08 <+sadimusi> sounds like that might work 11:08 <+sadimusi> the models fore each block state is indeed defined in a json 11:08 < eddyb> and the results should stay fairly constant over the course of a second of movement 11:08 <+sadimusi> but the states themselves are hardcoded 11:08 < eddyb> sadimusi: thanks, I was afraid of that. hopefully that will be alleviated before 1.8 is released 11:09 < eddyb> and propagation should stop fairly early 11:09 < eddyb> think of looking down into a tunnel that curves sideways after one chunk 11:09 <+sadimusi> it seems every possible block state is resolved to a string, the mapping to the different attributes must be happening someplace else 11:10 <+sadimusi> "Fair warning, this format is highly likely to change even more in the future!" 11:10 <+sadimusi> sounds promising 11:10 < eddyb> passing by the surface-facing chunk will toggle the visibility of the second chunk below it 11:10 <+sadimusi> got to go 11:10 < eddyb> but the next chunk in the tunnel won't be visible 11:11 < eddyb> and you don't have to propagate at all, to it 11:11 < eddyb> or if you do, it's just one chunk and not the next, etc. 11:11 < eddyb> and the space requirements are joke, a few bytes per 16x16x16 chunk will handle most of this :D 11:33 < eddyb> sadimusi: okay, I solved that issue, and made the output cleaner: https://gist.github.com/eddyb/61867cc4eabb9f94560c 20:48 < Altenius> What's the format of the encryption request packet? 20:51 < Altenius> ^ 20:53 < Altenius> :/ 21:13 < Altenius> How long are UUIDs? 21:24 < Lucariatias> Altenius: 8-4-4-4-12 21:36 < Altenius> What happens after the login packets? 21:36 < Altenius> Is the client supposed to send a packet? 21:38 <+SpaceManiac> After you send the login response you switch to the PLAY protocol and send stuff like the JoinGameMessage, spawn location, chunks, and other stuff 22:04 < Altenius> Well, my server crashes the client when logging in. --- Day changed lun. juin 30 2014 20:20 < benbaptist> dang, altenius left the server. 20:20 < benbaptist> or left the channel, I mean. 20:21 < benbaptist> If he's on the snapshot, the encryption request/response packets changed to using variable integers instead of shorts. --- Day changed mar. juil. 01 2014 02:29 < Drainedsoul> "The class has an array of strings linked to reason codes 0, 1, 2, and 3 but only the codes for 1 and 2 are null." What's this note on "Change Game Start" (Play/Clientbound) supposed to mean? 02:34 < Drainedsoul> *State 03:39 <+SpaceManiac> Drainedsoul: it's some kind of weird note about the way the client shows messages for codes 0 and 3 05:57 < Drainedsoul> SpaceManiac: So it doesn't mean anything about how the packet is serialized/deserialized? 05:57 <+SpaceManiac> right --- Day changed mer. juil. 02 2014 13:50 < HisShadow> Hello. I've been sniffing some packets between my minecraft client and some server and I have a question: are packets encrypted after the initial login sequence or not? 13:51 < shoghicp> yes, they are 13:51 < shoghicp> except in offline mode 13:52 < HisShadow> what exactly is offline mode? 14:00 < l4mRh4X0r> It's a server setting, it does not check with the session servers whether you are who you're saying 14:01 < HisShadow> ah 14:03 < l4mRh4X0r> And since the encryption needs Mojang's servers as well, you can't use that either when you're offline 14:05 < shoghicp> well, encryption could be done without mojang servers, but it would not be secure because of the public key check 14:12 < l4mRh4X0r> HisShadow: if you're feeling adventurous, you *could* figure out a way for the server to dump its encryption key and use that to decrypt the traffic, but it's more of a hassle than it's worth from own experience 14:12 < shoghicp> or the client 14:12 < shoghicp> the client is the one that generates the key ;D 14:13 < l4mRh4X0r> Right. I'm more of a server-side guy :P 14:13 < shoghicp> you might be able to patch it if needed, setting it to a constant value 14:14 < shoghicp> HisShadow: there is also a way to dump packets fromt the client directly 14:14 < shoghicp> but I don't remember it 14:17 < HisShadow> well, I'm trying to make a simple bot for a server with forge, I've found a nodejs(!) code that works in vanilla, but not with Forge, and I'm trying to figure out what additional packets I need to send 14:28 < l4mRh4X0r> HisShadow: the custom payload packet 14:28 < l4mRh4X0r> You need to let forge know what mods you support. 14:36 < l4mRh4X0r> To find out the format, I suggest running your own forge server with the same mods in offline mode, and then sniffing the packets 14:36 < l4mRh4X0r> Would probably be the easiest way, unless you're really into Java 15:43 < HisShadow> l4mRh4X0r: weird, I've made my own server and online-mode is set to false in properties, yet I still see some random strings instead of the decoded data 15:56 < HisShadow> strange, even though it is in offline mode, my client still sends 0xFC instead of 0xCD 15:57 < shoghicp> hmm... could it be that it uses encryption even when in offline mode? 15:58 < shoghicp> that's strange 16:16 < HisShadow> yes, I guess it uses encryption all the time, independant of authorisation, damn :( 16:17 < shoghicp> HisShadow: you might be able to run a proxy in the middle 16:18 < shoghicp> or check if packets can be dumped by the client itself 16:19 < HisShadow> shoghicp: how would the proxy help? 16:20 < shoghicp> well, it can handle auth and allow dumping packets 16:20 < shoghicp> it needs a session token :( 16:22 < Not-930a> [mcprotocol] thinkofdeath pushed 1 commit to master [+0/-0/±105] http://git.io/gQV4RQ 16:22 < Not-930a> [mcprotocol] thinkofdeath 003e81f - 14w27a 16:31 < HisShadow> so yeah, client generates some random string, then encrypts it with a public key and sends it to the server --- Day changed ven. juil. 04 2014 20:03 < Eloston> I have two questions about the 1.7 protocol. First, do Login packets stop working after a Login Success packet? Secondly, is the Login 0x00 Disconnect packet the same format as the Play 0x40 Disconnect packet? 20:03 < Eloston> wiki.vg/Protocol does not make it very clear 20:04 < Thinkofdeath> Yes and yes 20:04 < Eloston> Thanks 20:09 < Eloston> Does the Login Serverbound 0x00 Login Start packet contain the player's in-game username or UUID? 20:10 < barneygale> Eloston: username 20:11 < Eloston> barneygale: So I would have to ask the Mojang servers for the player's UUID, correct? 20:12 < barneygale> Yeah 20:12 < Eloston> Thanks 20:12 < barneygale> You get it from the "hasJoined" HTTP req 20:12 < barneygale> I have an implementation of the login if you're interested 20:12 < barneygale> https://github.com/barneygale/quarry/blob/master/quarry/net/server.py#L70 20:12 < barneygale> ... and I just spotted a mistake >.> 20:19 < HisShadow> hmm, I've been trying continuosly to make a bot, and I've encountered a weird thing. The server is modded with forge, so I send 0x01 packet and get and send 0xFA stuff, but right after I send mod list from my side, I start to receive gibberish, I can see 0xFA packet starting somewhere in there, but the whole thing starts with 0x02 0x00 0x23 and then 0xFA. Is it valid behaviour or is there some flaw somewher? 20:34 < barneygale> HisShadow: 0xFA? Is this an old server? 20:34 < HisShadow> barneygale: oh, forgot to mention it's 1.6.4 20:35 < barneygale> right 20:39 < barneygale> So the sequence in 1.6.4 starts with 0x02 handshake 20:39 < barneygale> did you mean 0x02 rather than 0x01? 20:39 < HisShadow> barneygale: okay, let me show you what I've sniffed with smproxy 20:40 < barneygale> It also might be that as soon as you send your mod list, the server things you understand some forge-specific protocol 20:41 < barneygale> idk anything about forger 20:41 < barneygale> forge* 20:42 < HisShadow> well from what I could see in the source and in wiki.vg forge uses 0xFA packet to communicate, and forge client also sends out a 0x01 packet in the beginning 20:44 < HisShadow> http://bpaste.net/show/435153/ 20:44 < HisShadow> here's the whole thing 20:52 < barneygale> Pretty strange 20:54 < barneygale> What's important is that smproxy is failing to decode the server-sent packets, and your packets seem reasonable 20:54 < barneygale> and you shouldn't be able to get into a state like that 20:54 < HisShadow> that was default minecraft client too 20:54 < barneygale> The default client? Are you injecting in the plugin messages? 20:55 < HisShadow> err, I meant to say modded client specifically for this server 20:55 < barneygale> Ah 20:55 < barneygale> Well it suggests to me there some forge-specific goodness here somewhere 20:56 < barneygale> double-check you're decoding length fields correctly and whatnot, otherwise go decompile forge 20:56 < barneygale> (is it open-source?) 20:56 < HisShadow> yeah, it is 20:57 < barneygale> Yeah 20:57 < barneygale> So I reckon after the server sends you a 0x01, you need to do something forge-specific to continue reading packets 20:58 < HisShadow> it sends you the list of the mods and you need to respond, but all that happens over packet 0xFA, I dunno why the server is sending me an 0x02 20:58 < barneygale> It's not *really* 0x02 20:59 < barneygale> forge is doing its own encryption or someshit 20:59 < barneygale> idk 21:07 < barneygale> HisShadow: this might be it: https://github.com/MinecraftForge/FML/commit/d0dd05a15c2eca9eabd308319c2ed85cb632922b 21:09 < HisShadow> barneygale: um, how so? 21:11 < barneygale> Oh, sorry I got my packet ids mixed up ;D --- Day changed sam. juil. 05 2014 03:08 < Eloston> Hey guys, I got a little problem here. I designed a custom server so a disconnect packet will be sent and the connection closed right after a Handshake packet with state 2 (login). Sometimes the client will display the disconnect message, and other times it will print "Internal Exception: io.netty.handler.codec.DecoderException: java.io.IOException: Bad packet id 0" 03:08 < Eloston> This is 1.7.10 03:08 < Eloston> Anyone have any ideas why this could be happening? 03:23 < Drainedsoul> You're just sending a disconnect, nothing else? 03:23 < Eloston> Yes 03:24 < Eloston> and then immediately closing the connection 03:24 < Drainedsoul> when are you sending it? 03:24 < Drainedsoul> what do you mean "closing the connection"? 03:24 < Eloston> close the socket 03:24 < Drainedsoul> like close(fd);? 03:24 < Eloston> Well in Python sockets are objects and they have a close() method 03:25 < Eloston> https://docs.python.org/3.4/library/socket.html?highlight=socket#socket.socket.close 03:25 < Drainedsoul> okay you're still calling close(fd); 03:25 < Drainedsoul> yeah it doesn't matter how Python does it, at some level the close or closesocket (depending on the OS) function is getting called 03:26 < Drainedsoul> anyway, when you close a socket I'm p. sure the OS doesn't make guarantees about what has been sent/received and what hasn't 03:26 < Drainedsoul> you should call shutdown first, unless you actually want to brutally close the connection 03:26 < Eloston> I had shutdown originally, but still the same issue 03:26 < Drainedsoul> why'd you change it? 03:26 < Drainedsoul> anyway, when are you sending this packet? 03:27 < Eloston> I'm sending it right after the handshake packet 03:27 < Drainedsoul> so you're pulling the handshake packet off the wire? 03:27 < Eloston> Yeah I parse the handshake packet first 03:27 < Drainedsoul> have you Wiresharked it to see what's actually getting sent? 03:27 < Eloston> Also I'm using sendall() to send my data to the client (if that bit of information is of any use) 03:28 < Eloston> and no I haven't 03:28 < Drainedsoul> why would you use sendall 03:29 < Eloston> It said it would block until all of the data is sent 03:29 < Eloston> https://docs.python.org/3.4/library/socket.html?highlight=socket#socket.socket.sendall 03:29 < Drainedsoul> yeah, why would you want that 03:29 < Drainedsoul> I thought you were writing a server 03:30 < Eloston> Not quite, it's more like an inetd for Minecraft servers than a server 03:31 < Drainedsoul> so you're saying it listens for/accepts client connections, but isn't a server? 03:31 < Eloston> Yes 03:31 < Drainedsoul> http://en.wikipedia.org/wiki/Client%E2%80%93server_model 03:31 < Drainedsoul> you have some reading to do 03:31 < Drainedsoul> if it listens for/accepts client connections, it is by defn a server 03:31 < Eloston> Oh by server I thought you mean Minecraft server 03:32 < Eloston> Then yes it is a server 03:32 < Drainedsoul> blocking is evil, esp. in a server context 03:32 < Drainedsoul> but that's really beside the point atm, you should Wireshark and see what's actually going over the network 03:35 <+SpaceManiac> Uh, sendall is probably preferable. 03:36 < Drainedsoul> Why, so you can sit around waiting? 03:36 <+SpaceManiac> The alternative is manually making sure send() sent all the bytes 03:36 < Drainedsoul> okay, and 03:36 < Drainedsoul> what's your point 03:36 <+SpaceManiac> why manually do it if sendall() is already there 03:36 < Drainedsoul> because send doesn't block 03:36 < Drainedsoul> (at least if the socket is in non-blocking mode) 03:37 <+SpaceManiac> Then neither would sendall? 03:39 < Drainedsoul> Assuming that's true, what happens when the underlying call to send returns EAGAIN or EWOULDBLOCK. sendall's documentation says it throws on error and doesn't notify you of how much data was sent, if any at all 03:39 < Drainedsoul> how do you know where to pick up next time 03:39 < Drainedsoul> besides, if sendall behaves like that, it literally has no advantages over send 03:42 <+SpaceManiac> Okay, so sendall would block if the whole data can't fit into the kernel buffer 03:43 <+SpaceManiac> If it's just a simple thing like it sounds like is the goal here it doesn't matter 03:43 <+SpaceManiac> If you need to do other tasks while trying to stuff your data into the buffer then you need to track stuff manually and at that point you might as well use twisted or whatever 03:44 < Drainedsoul> unless Python exposes epoll/kqueue/iocp somehow, using some kind of library is definitely the best option 04:07 < Eloston> Is it normal to see java.nio.channels.CancelledKeyException error messages? 04:07 < Eloston> It happens sometimes after I connect/disconnect to my test server after a while 04:16 <+SpaceManiac> I don't think that's normal 04:29 < Eloston> SpaceManiac: This warning message shows up: WARNING: Selector.select() returned prematurely 512 times in a row; rebuilding selector. 04:29 < Eloston> (I capture the stdout of the Minecraft process) 04:31 < Eloston> Here's the messages before the CancelledKeyException occurs: 04:31 < Eloston> io.netty.channel.nio.NioEventLoop select 04:31 < Eloston> WARNING: Selector.select() returned prematurely 512 times in a row; rebuilding selector. 04:31 < Eloston> io.netty.channel.nio.NioEventLoop rebuildSelector 04:31 < Eloston> INFO: Migrated 1 channel(s) to the new Selector. 04:31 < Eloston> [Server Connector #41/ERROR]: Couldn't connect to server 04:31 < Eloston> I'm on Debian Jessie on OpenJDK-JRE 7 64-bit if that helps 04:34 <+SpaceManiac> Does this happen on any servers other than the one you're developing? 04:34 < Eloston> Let me try 04:42 < Eloston> SpaceManiac: Yes I get it after a while 04:43 < Eloston> But I think I connected/disconnected too many times because my login session got cancelled 04:51 < Eloston> SpaceManiac: Minecraft 1.7.10 uses netty 4.0.10. I downloaded the latest netty from netty.io (4.0.21) and it seems to fix the issue 04:52 < Eloston> Although I haven't tested to see if anything else broke 04:54 < Eloston> The same messages appear, but I can join a Bukkit server just fine 06:07 <+Amaranthus> Eloston: It seems like every release of netty fixes/breaks that for different groups of people and no one can figure out wtf is going on 06:08 <+Amaranth> I think the netty folks have decided its a bug in openjdk's nio implementation on linux but I'm not sure anyone reported it --- Day changed dim. juil. 06 2014 17:44 < eddyb> sadimusi: hi, I've been meaning to ask you: when you mentioned the .class file for the hardcoded block id -> block state mappings, did you actually get some form of decompiled Java code out of it? 21:06 <+sadimusi> _eddyb_: turns out some blocks define their states in their own class 21:06 <+sadimusi> _eddyb_: for example redstone wire 21:06 <+sadimusi> most of them seem to be aggregated in cea.class though 21:06 <+sadimusi> https://gist.github.com/sadimusi/f56d67b385a5ba5b8da6 21:06 < eddyb> https://i.imgur.com/2wYpRwR.png btw :D 21:07 < eddyb> waait 21:08 < eddyb> how come redstone has more block states than the 16 representing its power? 21:09 < MrARM> when it's on a side of a block? 21:09 < eddyb> sadimusi: thanks a lot, I guess that + aop.class would be enough to automatically create mappings for most blocks :D 21:09 < eddyb> MrARM: yeah, but... I thought only 16 states were stored for redstone 21:10 < shoghicp> it's block render state too 21:16 < Thinkofdeath> eddyb: Nice what are you coding it in? 21:16 < eddyb> Thinkofdeath: Rust 21:17 < Thinkofdeath> nice, I still haven't played around with that yet 21:17 < eddyb> the hacky code used to render that chunk can be found here https://github.com/eddyb/hematite/tree/4844cefc812dfee18f28b077aafcd7c808d806b9 21:18 < eddyb> will most likely force push over it. still wondering how to allow vanilla renders without copyright issues 21:18 < eddyb> requiring the user to unpack the latest snapshot's jar somewhere is likely fine, isn't it? 21:18 < Thinkofdeath> I have mine download the client jar and unpack it for them 21:18 < eddyb> can probably get everything I need automatically from ~/.minecraft/{versions,saves} 21:20 < eddyb> Thinkofdeath: direct AWS links are likely considered "piracy" 21:21 < Thinkofdeath> I guess :/ Although they never see it, I unpack it in memory 21:21 < eddyb> but do you ask for username/password and check it's premium? 21:22 < Thinkofdeath> Nope its just a mapviewer plugins, seemed overkill/asking for issues 21:24 < eddyb> sadimusi: is it just me, or are states supposed to be different from what I see in that file? 21:24 < eddyb> I mean, I remember seeing like 4 different "properties" at once 23:00 <+sadimusi> eddyb: yeah, I'm not sure where that mapping is happening 23:03 <+sadimusi> seems to be in the block classes --- Day changed lun. juil. 07 2014 14:55 < akiba_> hey guys 14:55 < akiba_> does anyone understand what this code does? 14:55 < akiba_> http://pastie.org/9364082 14:59 < rom1504> missing context 15:19 < akiba_> hey rom what context do you need? 15:23 < merlish> which file it's in, other functions in the file to help infer the meaning (especially named functions!), rest of the function if any (missing close bracket on last line) 15:24 < merlish> this said, maybe it's something to do with the hotbar...? it looks for stack ids through 10 items 15:26 < merlish> that's the only 10 long list exposed to the player i can think of 15:26 < merlish> i don't know what the recursing into the same function on another object is about 15:26 < merlish> but it's looking for the first stack that has a non-zero amount that is less than the amount given as an argument 15:27 < merlish> -> one of the crazy inventory sorting things? shift-click functionality in inventory? 15:39 < akiba_> shift-click doesnt do anything 15:39 < akiba_> right click does 15:40 < akiba_> only thing i can think of 15:40 < akiba_> is the client reading packets wrong? 16:25 < Fenhl> merlish: isn't the hotbar only 9 slots? 16:26 < merlish> err it could well be 16:26 < merlish> :p 16:28 < akiba_> merlish: is the client reading packets wrong? 16:28 < merlish> i don't know what you mean :s 16:28 < akiba_> cause thats the only thing i can think of for making stackamounts null above 255 from changing writeint to writelong 16:28 < merlish> i have only seen the function, i don't know of the error 16:28 < akiba_> merlish can i show you? 16:29 < merlish> sorry, i don't think i can help 16:29 < merlish> i'm sure someone here can 16:31 < akiba_> these were all the changes i made to the code http://pastie.org/9359399 16:59 <+sadimusi> akiba_: what exactly are you trying to achieve? 18:14 < Bored> Is there anyway from the raw packets/protocol to tell if a player has hit another player without performing a calculation of distance/look/etc ? 18:18 < akiba_> hey guys 18:18 < akiba_> can you tell me a good reason to use a long instead of an int in a video game 18:19 <+sadimusi> akiba_: one simple example would be the player position in minecraft 18:21 <+sadimusi> Bored: I think the client sends some kind of entity hit packet, the only thing you have to do is to check the distance if you want to prevent cheating 18:22 <+sadimusi> Bored: http://wiki.vg/Protocol#Use_Entity 18:23 < akiba_> anything other than location? 18:23 < akiba_> like cash stack or anything? 18:28 < Bored> Oh sorry, i was looking for a client bound way of doing this. 18:31 <+sadimusi> akiba_: anywhere you need big or precise numbers (or both). 19:45 < TkTech> akiba_: That is an odd question. If your values won't fit inside the bounds of an int, what else would you use (while still using native types)? 19:46 <+sadimusi> oh looks like I mixed up long and double once again *blush* 19:52 < TkTech> sadimusi: Tisk tisk. 19:53 < TobiX> Well, this should make Pocket Minecraft development easier: https://github.com/OculusVR/RakNet ;) 19:54 < MrARM> well, shoghicp's RakLib 19:58 < MrARM> but for people using other languages 20:04 < TkTech> go TkTech 20:04 < TkTech> Whoops 21:00 < Drainedsoul> TobiX: Ugh VS 2005 support, why 21:18 < TobiX> Drainedsoul: Because commercial? Big $$$ in VS support ;) --- Day changed mar. juil. 08 2014 04:05 < akiba_> hey guys 13:48 < bored> I have a MITM proxy script using the Node-Minecraft-Protocol Lib, it has major issues with clientbound 0x0C ( Spawn Player). It seems to be the texture and signature fields. What should the signature contain ? 13:51 < bored> Hmm larger than expected packets... 14:51 < bored> So I'm sending an empty data field for the spawn player packet which stops the client from crashing but creates a lag for when a player spawns.. 14:51 < bored> and the other players don't seem to appear until and entity_teleport packet is received.. --- Day changed mer. juil. 09 2014 06:03 < jflory7> Does anyone know how to pass a command to a Minecraft console via tmux in a bash script? 06:07 <+SpaceManiac> jflory7: not really the best place to ask, but look at "tmux send-keys" 06:09 < jflory7> Oh, oops. Wasn't sure where else to ask about this, sorry. Anyways, SpaceManiac, I have done that, however, my problem is that my startup script seems to be randomly terminated once I run my new script, and THEN it sends the command, e.g. "stop" is run as a Linux command instead of a Minecraft command 06:18 < Not-930a> [fCraft] fragmer * r2340 2 files : Improved compatibility with noncompliant CW map files. 17:59 < Aaron1011> Does anyone know what the Camera packet is used for in the pre-release protocol? 18:07 < Aragas> Maybe new entity? 18:08 < Dinnerbone> Sets the camera of spectator-mode players. 18:17 < dx> dirty-room reverse engineering 18:20 < dx> whoa, the pre-release protocol page is full of Thinkofdeath edits 18:20 < dx> Thinkofdeath: you're awesome. 18:20 < Thinkofdeath> :) 20:15 < Aaron1011> Is there a separate packet for the Guardian attack? 20:22 < Thinkofdeath> Grum: Am I missing something or are you not compressing bulk chunk packets anymore? 20:35 <+Amaranth> Thinkofdeath: Time to readd the hack to only use single chunk packets again :P 20:36 < Thinkofdeath> Amaranth: Looks like those arn't compressed either :) 20:45 < Thinkofdeath> Amaranth: actually they may be compressing everything now 20:45 <+Amaranth> Just compressing the stream? 20:46 <+Amaranth> I suppose that compression happens on the netty threads too? 20:46 < Thinkofdeath> yeah by the looks of it 20:46 <+Amaranth> I hope they're compressing then encrypting and not the other way around :P 20:47 < Thinkofdeath> this.i.pipeline().addBefore("encoder", "compress", new gm(paramInt)); 20:47 < Thinkofdeath> also looks optional, wonder how the client knows if its being using or not 20:51 < Thinkofdeath> ah packets are prefixed 21:02 < Dinnerbone> See www.mojang.com snapshot blog post 21:03 < dx> "Compressed space and time" - sweet! 21:04 < dx> Thinkofdeath: there's your issue, they made chunk compression optional since it's better to compress space and time instead. 21:05 < dx> thanks dinnerbro 21:09 < Dinnerbone> "Servers can now customise network compression in server.properties" 21:09 < Dinnerbone> :p 21:09 < Thinkofdeath> whoops kinda assumed that was just for chunks for some reason 21:15 < barneygale> ooh cool! 21:15 < dx> compressed json! finally! 21:19 < barneygale> wait rly 21:21 < barneygale> oh wow, all the config files are json 21:21 < barneygale> neat! 21:35 < Dinnerbone> As of 1.7.something :p 21:37 < barneygale> oh hah 21:37 < barneygale> i've been out the game :P 21:43 < Dinnerbone> I'd appreciate comments/suggestions about how the compression is handled 21:43 < Dinnerbone> (And the protocol in general, for that matter. You guys never complain anymore. :( ) 21:49 < barneygale> i'm fishing around in jd-gui currently 22:52 < Thinkofdeath> Dinnerbone: Suggestion: remove gzipping from nbt tags now that large packets are gzip'd 22:53 < Dinnerbone> Thanks Thinkofdeath, forgot about nbt gzipping 22:53 < Thinkofdeath> np :) 22:54 < dx> will dinnerbro be able to remove the gzip without feeling tempted to remove nbt too? 22:55 * Dinnerbone removes dx 22:56 < dx> ;_; 22:56 * Dinnerbone readds dx with improved everything 22:57 < dx> :D 23:05 < HisShadow> Is this the real Dinnerbone ? Like, the Dinnerbone? 23:06 < dx> yes and he just implemented me as a minecraft feature. are you jealous? 23:06 < dx> (also, don't say his name, even if he's right here. use "dinnerbro" instead) 23:06 < HisShadow> okay 23:08 < HisShadow> dx: what is your function as a feature? 23:09 < dx> HisShadow: i don't know, but i'm probably better than nbt --- Day changed jeu. juil. 10 2014 00:40 < xthexder> Hey guys, anyone know what the uuid response should look like for the Login Success packet? 00:40 < xthexder> It's supposedly supposed to contain a - now, which I'm a little confused about 00:42 < Thinkofdeath> xthexder: Like 45fb032e-8f20-3512-91d7-f973f6eee980 00:43 < xthexder> Alright, thanks 00:49 < xthexder> The code for going from the http response to that is a little ugly.... =/ Why did they even bother changing that 01:12 < Drainedsoul> So what's happening with compression now? 01:14 < yawkat> AFAIK the entire protocol is compressed now 01:14 < yawkat> not just stuff like chunks 01:15 < xthexder> Oh, I guess that would be why everything is breaking for me... 01:16 < xthexder> Maybe I should just go back to 1.7.9 then 01:23 < xthexder> Is there an in-progress page for the 1.7.10 protocol? 01:24 < xthexder> I could probably contribute a bit 01:24 < yawkat> xthexder: i think .10 protocol is the same as .9 01:25 < shoghicp> ^ 01:25 < xthexder> Whats the deal with compression then? 01:25 < Thinkofdeath> compression is 14w28a snapshot 01:25 < shoghicp> that's for the snapshots 01:26 < xthexder> ah, ok nevermind then 07:33 < Grum> Grum: Am I missing something or are you not compressing bulk chunk packets anymore? <-- depends on your settings now 07:59 <+Amaranth> Grum: Why would you want adjustable compression settings? 09:18 <+md_5> Dinnerbone being sneaky and looking at my timeline :p 09:19 <+md_5> It's probably not that bad, although you did skew my wish a little :p 09:19 <+md_5> Apologies if I was a bit rude 09:23 < Dinnerbone> Because I thought I asked you for feedback about it and wanted to see if you replied, over 12 hours ago = lost in my feed! 09:23 < Dinnerbone> (Though it turns out I didn't explicitly ask for feedback!) 09:24 <+md_5> Anyway, thanks, I guess. We'll make it work. 09:26 < Dinnerbone> I actually do want feedback and suggestions and complaints about the protocol and efficiency, people complain about stuff but never to me so I don't get to fix their worries. 09:28 <+md_5> Dinnerbone no, just to Grum who says protocol is -7 on the priority list :p 09:29 <+md_5> Dinnerbone can you please fix the bloody race condition on sub protocol switch 09:29 < Dinnerbone> Tell me what it is and how to reproduce it! 09:29 <+md_5> Easy 09:29 <+md_5> Switch protocol from handshake to login, then send a kick packet 09:30 <+md_5> You'll get disconnected with XXX cannot be cast to YYY 09:30 <+md_5> where XXX is the Login packet handler and YYY is the handshake packet handler 09:31 <+md_5> I think in 1.7.10 its: bll cannot be cast to fv 09:32 <+md_5> lemme just chec 09:32 < Dinnerbone> Will look into it when I get to the office! 09:32 * Dinnerbone afks for an hour 09:33 <+md_5> sorry, in 1.7.9 its bll cannot be cast to fv 09:33 <+md_5> I have no idea what it is in 1.7.10 09:35 < Grum> md_5: quote me on that then please 09:35 < WizardCM> dem sneaky devs xD 09:35 <+md_5> it really is the last priority 09:36 <+md_5> also not remotely a priority 09:36 < Grum> and now with more contxt 09:36 <+md_5> you guys are only talking about protocol shit 09:36 <+md_5> i can tell you now, we will not fix that any time soon 09:36 <+md_5> it really is the last priority 09:36 < Grum> again more context, 'that' is whaT? 09:37 < Grum> do i really have to search in my own logs? :( 09:37 <+md_5> I believe that was referring to the encoding of 3d coordinates 09:38 < Grum> which channel you getting these logs from? saves me some grepping time 09:38 <+md_5> here 09:38 <+md_5> 26th June last year 09:38 < Grum> ah 09:38 < Grum> lol mcdevs_20130626.log 09:38 <+md_5> grep priority log/freenode_#mcdev* -C 10 09:40 < Grum> and then it was indeed the last priority 09:40 < Grum> meh i cant even remember what we were doing around that time 09:40 < Grum> i think it was even before we used netty 09:40 < Grum> so yes, last on the list of 'stuff to look at' 09:40 <+md_5> making horses is what you were doing 09:40 < Grum> no, jens did that 09:40 < Grum> i just cleaned it up as much as i could without breaking them 09:41 < Grum> i haven't added a single 'fun feature' beyond sheep-breeding mixing their colors 09:41 < Grum> so feel free not to go point that sort of bullshit at me 09:42 < Grum> Also, as Dinnerbone will attest to, i did bring up this 'inconsistency' in our protocol 09:42 < Grum> it was deemed not super important because its impossible to replicate using vanilla and trivial to work around 09:42 < Grum> that said, it's a bug and it should be fixed 09:45 < Grum> and for more context to that discussion 09:45 < Grum> "[09:34:01] SirCmpwn: we're not just doing these mini incremental changes to the protocol" 09:45 <+md_5> Dinnerbone here is one ticket: https://bugs.mojang.com/browse/MC-37203 09:45 < Grum> and this was before we started using netty 09:46 <+SirCmpwn> ? 09:46 < Grum> SirCmpwn: someone (md5) is digging up year+ old logs 09:46 <+SirCmpwn> ah. 09:46 <+SirCmpwn> I was going to say, you haven't uttered my name on freenode in months, what are you quoting 09:46 < WizardCM> would have been long before a plan to change to netty, i'd assume 09:51 <+md_5> Dinnerbone here is some more info about the race condition (12th December 2013): http://paste.md-5.net/qayehaxiqu.xml 09:51 < Grum> no we had it planned we just didn't do it yet 09:51 < Grum> because it was rather major 09:51 < mrapple> Dinnerbone: I know last_username sent you a message about the tab list a week or so ago on skype, did you ever get a chance to look at that? 09:52 < Grum> hehe you want to use it again for 'random information display'? :P 09:53 < mrapple> yes <3 09:53 < mrapple> and it's not random, it's very useful 09:53 < WizardCM> i've always found the vanilla tablist fairly dull, i like seeing servers spice it up 09:54 < WizardCM> i've never been on a server where a modified tablist showed something i didn't want 09:54 < WizardCM> actually, speaking of tablist - what's with the lack of padding on the right of skin icons? (unless that was fixed recently, only just updating my snapshot build) 09:56 < WizardCM> also spacing between name and hearts if they're enabled in the list, should be right aligned tbh 09:57 < mrapple> the tab list is super useful http://i.oc.tc/image/1b360A2O2G2h 09:58 < mrapple> we can show flair, friendship status (italics), match info, team sizes, etc etc all with one button :D 09:59 < WizardCM> see, if i go on a minigame server, and i don't see UI being well used (like that screenshot) it dulls the experience 09:59 < WizardCM> being able to access that data without a command is fantastic 10:00 < WizardCM> "61 unread appeals" 10:00 < WizardCM> phew xD 10:03 < Grum> mrapple: i kinda dislike the abuse of the list just because you have no other way of displaying information :/ 10:03 < Grum> but maybe we should allow the server to set a string that gets displayed above the list orso 10:03 < WizardCM> Grum: that's what the bossbar is for ;) 10:04 < mrapple> my point is that a lot of servers use it to display helpful information since our ways to show information to the client are limited 10:04 < Grum> md_5: btw please experiment with the compression stuffs in the latest snapshot 10:04 <+md_5> We've done spigot, havent done bungee yet 10:04 < mrapple> and removing it will be sad :( just asking for some sort of way for it to be feasible in 1.8 10:04 < WizardCM> a more controllable alternative would be nice ^ 10:05 < mrapple> agreed, but at the very least allowing us to still use the tab list would be very nice 10:05 <+md_5> Grum what exactly did you want me to do.... 10:06 < Grum> md_5: find the right balance for the 'minimum compressed size' and 'cpu-usage' :) 10:06 < Grum> also its hilarious if you compress nothing at all (set it to -1 for example) 10:06 < Grum> mc has LOTS OF DATA :P 10:06 < Thinkofdeath> yeah tried that already :P 10:06 <+md_5> honestly I'll probably default to 1024ish 10:06 * md_5 shrug, Thinkofdeath does all the protocol work these days 10:07 < Grum> smaller might be usefuller, not sure 10:07 < Grum> mrapple: but it would be nice to just have a single textcomponent to display above the list not? I mean stuff like that would be doable-- assuming its multiline ofc 10:07 < mrapple> we already have the bossbar which is great 10:08 < mrapple> I mean any client display you're willing to add for us is awesome 10:08 < mrapple> I think the tab list is perfect because it allows for tables 10:08 < WizardCM> hiding the bar portion would also be nice, if we're throwing ideas out there 10:08 < mrapple> the rows and columns of the tab list make it excellent for display information 10:08 < mrapple> IMHO it's cleaner and nicer than just throwing a text component up there 10:08 < mrapple> also, the user can easily toggle it 10:09 < Grum> my issue is you are trying to ask for the wrong thing 10:09 < Grum> you are asking "for abuse of the tablist" where you actually just want a way to "display extra information" 10:09 < Grum> I'd prefer adding a way to display extra information over abusing the tablist any day 10:10 < mrapple> abuse makes it sound bad :( 10:10 < mrapple> we're doing good things with it 10:10 < Grum> no, it is bad, why? because it breaks when we change something 10:10 < Grum> and then you guys are sad 10:11 < Grum> gotto run, alaedy late >.> 10:11 < WizardCM> stuff breaks all the time 10:11 < mrapple> there are a lot of things that break all the time 10:11 < WizardCM> most of the time there is an alternative fallback 10:11 < mrapple> that's what we're asking for 10:15 < WizardCM> visually though, i do like the improvementds in recent snapshots to the player list. it's just that they'll only affect smaller servers 10:15 < WizardCM> improvements* 10:15 < mrapple> indeed 10:16 < mrapple> the tab list has definitely seen some good improvements for vanilla 10:16 < mrapple> we just need some fallback support for display info :) 10:16 < WizardCM> mhm 10:16 < WizardCM> having a separate UI would also be a good thing 10:16 < mrapple> meh 10:16 < WizardCM> the ping bars can get in the way sometimes xD 10:16 < mrapple> an option to remove the ping bars would be good 10:16 < mrapple> having the tab list at all on a large server is pretty meaningless 10:16 < mrapple> we add so much more useful information 10:16 < WizardCM> mhm 10:18 < WizardCM> then again, you also have to realise 10:18 < WizardCM> a lot of people don't know of the tablist 10:19 < mrapple> really? are you sure about that? 10:19 < WizardCM> yes 10:19 < WizardCM> i've spoken to players and mentioned it 10:19 < WizardCM> and they've gone "oh wow, cool!" 10:19 < mrapple> hm I may have to run a poll 10:20 < WizardCM> whenever i try out a minigame server i've never been on before i always open the tablist to see what interesting thing they're doing with it 10:20 < mrapple> i feel like it's well known, probably just because I use it all the time 10:20 < WizardCM> another strange thing i learned: when players join a server they've never been on before they don't always look at their starting items 10:21 < WizardCM> even if it's a single book in their first slot 10:23 < WizardCM> which is the opposite of what i'd do 10:23 < WizardCM> starting items? especially a book? i'm sure it's important or interesting 10:23 < Grum> Things tend to break more when you depend on things to be used in non intended ways 10:24 < WizardCM> this is true 10:24 < WizardCM> but when there is no alternative, you use what exists to its full potential 10:25 < WizardCM> you push the boundaries to make your server more unique and interesting 10:25 < Grum> So rather than breaking our system to allow random flexibility maybe adding ways to allow you to achieve the real goal is better 10:26 < WizardCM> absolutely 10:26 < Yogu> Did I understand it correctly that eventually, all the different blockstates will have IDs? And that these IDs will be auto-generated, not hard-coded in the code? Will the server then somehow tell the client which ids are which blockstate? 10:27 < Grum> So adding a 'display name' to the tablist would allow custom names/icons etc 10:27 < WizardCM> :O could you imagine server logos in the tablist 10:27 < WizardCM> that'd look pretty cool 10:27 < WizardCM> if done correctly, of course 10:27 < Grum> No because you have no control over how it sorts 10:28 < Grum> And you don't need to either 10:28 < WizardCM> for a basic player list, of course you don't need it 10:28 < Grum> It sorts by teams 10:28 < Grum> Then name 10:29 < Grum> Iirc 10:29 < Dinnerbone> Teams then UUIDs I think 10:30 < WizardCM> uuid? that's a strange thing to sort by 10:30 < WizardCM> i would think by score could be more interesting 10:30 < WizardCM> and if there isn't one, fall back to alphabetical 10:30 < Grum> If there are scores I think it does 10:30 < Dinnerbone> Yeah 10:30 < WizardCM> ah yeah 10:31 < WizardCM> any particular reason for sorting by uuid? 10:31 < Grum> Display name is a nice idea for some flair-like things 10:31 < WizardCM> or rank 10:31 < Grum> Yeah 10:31 < WizardCM> a lot of servers are now using scoreboard prefixes and being able to put admins at the top natively would be pretty cool 10:31 < Grum> Or who has the flag 10:31 < Grum> Or similat 10:31 < WizardCM> mhm 10:31 < Dinnerbone> Sorry my mistake, it's team -> score -> name 10:32 < WizardCM> name is good, uuid would be very strange Dinnerbone :P 10:32 < Grum> Almost at hornstull 10:32 < Grum> Pfft some of these state bugs are horrid to fix and we have tens of them