07:33 <+SirCmpwn> I might be, and if they do get done I'll be happy 07:33 < Grum> dx: it is 07:33 <+SirCmpwn> I am happy to hear that you guys are working on this stuff 07:33 < Grum> we just have higher priority things to handle though :( 07:33 < Grum> next high up target is the worldformat 07:33 <+SirCmpwn> remember though that I've been doing this stuff for several years now 07:33 < Grum> SirCmpwn: remember that i've been doing this too 07:33 <+SirCmpwn> my historical view of the cooperation between mojang and our community is not a good one 07:33 <+SirCmpwn> if that's changing, I'm very happy to hear it 07:34 < Grum> SirCmpwn: it's understandably as it is 07:34 <+SirCmpwn> oh, and the debacle around the server list ping that I mentioned in that thread 07:34 < Grum> also the 'development of an api can only happen if you ahve the community do it' .. that obviously is a 100% nogo 07:34 <+SirCmpwn> even the implementation now sucks after you tried to fix it 07:34 <+SirCmpwn> I never said that? 07:34 < Grum> which serverlist ping? :/ 07:34 <+SirCmpwn> err, the status thing 07:34 <+SirCmpwn> whatever you call it 07:34 < Grum> "I would want the API to be open source and built by the community, for one." 07:34 < dx> server list ping was awful because of backwards + forwards compatibility, right? 07:34 <+SirCmpwn> ah 07:34 < Grum> dx: indeed 07:35 <+SirCmpwn> "build by the community" was a bad thing to say 07:35 <+SirCmpwn> I meant that it should be built by Mojang and driven by community feedback (and code where relevant) 07:35 <+SirCmpwn> built* 07:35 < Grum> yes, but that assumes a certain kind of api 07:35 < Grum> the kind that Bukkit is and forge 'partially' provides (forge isn't that much of an api, only on the places of many clashes) 07:35 <+SirCmpwn> dx: the part that pisses me off about it is that each time they thought about changing it, we presented them with completely working, elegant solutions that maintained backwards compatability 07:35 <+SirCmpwn> dx: and they went off and did something else every time 07:36 < Grum> SirCmpwn: last time you had one of those solutions holes were trivially made in the solution 07:36 <+SirCmpwn> Grum: right, I desire this kind of API 07:36 * SirCmpwn does not recall holes being pointed out 07:36 <+SirCmpwn> did you see holes and keep quiet about them? 07:36 < Grum> i'd never do that, you know me :P 07:36 < dx> iirc forwards compat was broken in some version 07:36 < Grum> tbh, the 'ugliness' should simply go 07:36 <+SirCmpwn> you and I have spoken serious implementation talk on like two occasions 07:36 < Grum> and we should stop doing backwards compat 07:36 <+SirCmpwn> seperated by like a year at a time 07:37 <+SirCmpwn> well, not being backwards compatabile is fine 07:37 < Grum> SirCmpwn: 'this kind of api' being whaT? 07:37 <+SirCmpwn> but at least being able to properly tell clients that they're outdated or too recent, and how they can fix it, is desirable 07:37 < Grum> at the time of implementation we couldnt afford not to be backwards compatible to the previous version 07:37 <+SirCmpwn> Grum | yes, but that assumes a certain kind of api 07:37 <+SirCmpwn> Grum | the kind that Bukkit is and forge 'partially' provides (forge isn't that much of an api, only on the places of many clashes) 07:37 < Grum> now we could 07:37 <+SirCmpwn> you could, I know it 07:38 < dx> it was <=1.3 that had the shittiest server list ping protocol, right? i barely remember the details of this, but that one is definitely 'old enough' already 07:38 <+SirCmpwn> dx: yeah, it was pretty shitty in the far past 07:38 < Grum> 1.6 still is shitt 07:38 < Grum> and doesnt mesh at all with 1.7 style 07:38 < Grum> and we hacked it sortof working 07:38 <+SirCmpwn> I would have done the 1.7 style differently 07:38 <+SirCmpwn> I would have done a more involved handshake before entering the different protocol modes 07:38 <+SirCmpwn> which could have easily supported legacy pings 07:38 < Grum> yes, but i do not want to support legacy pings or design the new system to take that in account 07:39 < Grum> that hinders the design of the new system 07:39 <+SirCmpwn> so we fundamentally disagree on this point 07:39 <+SirCmpwn> but that's in the past, nothing to be done about it now 07:39 < Grum> which in itself is quite decent 07:39 <+SirCmpwn> also, varints are a joke 07:39 < dx> SirCmpwn: remember we don't get to modify the server to test those theories with the actual server code 07:39 <+SirCmpwn> but I doubt it's even worth having that discussion because I seriously doubt you'll turn back on them now 07:39 < Grum> why are they a joke? 07:40 <+SirCmpwn> you're trading tiny amounts of bandwidth for orders of magnitude more CPU time on the server and client 07:40 <+SirCmpwn> and in places where it really doesn't matter 07:40 <+SirCmpwn> you can't tell me with a straight face that 65535 packets isn't enough 07:40 < Grum> i can tell you with a straight face that coding such an arbitrary limitation into a system is silly? 07:40 < Drainedsoul> And the encoding of negative numbers as a varint (unless that's been changed) is kind of abominable 07:40 < Grum> 256 blocks is also enough right? 07:41 < Grum> 640k ram too 07:41 < Grum> Drainedsoul: it is, we barely do that though 07:41 < dx> he did say "in places where it really doesn't matter" 07:41 <+SirCmpwn> I will bet you $10,000 that you will never use more than 65535 packet IDs 07:41 < dx> sometimes it matters, sometimes it doesn't 07:41 < Grum> Drainedsoul: when we actually start doing it, we'll zip them properly 07:41 < Drainedsoul> -_- 07:41 < Drainedsoul> will you zip them properly 07:41 < Drainedsoul> or just in certain places 07:41 < Drainedsoul> -_- 07:41 < Grum> SirCmpwn: you do realize i can just add the required packets to 'win' that argument right? 07:41 < dx> hahah 07:41 < dx> will it be worth it? 07:42 <+SirCmpwn> 60,000 packets that all do the keep alive is cheating :P 07:42 < Grum> dx: it would come at no cost 07:42 < Grum> SirCmpwn: not really 07:42 < Grum> it would be proving a point and making me lots of monies 07:42 <+SirCmpwn> but you understand my point 07:42 < Grum> yes, but please undersrtand my point too 07:42 <+SirCmpwn> I do understand your point 07:42 < Grum> we initially did that decision based on that we'd not recycle ids 07:42 < Grum> we then later decided we are going to recycle them 07:42 <+SirCmpwn> (fyi, you still have a maximum varint size and thus still have an arbitrary limit) 07:42 < Grum> in theory we could just make them bytes atm 07:43 < Grum> because we simply do not have enough packets 07:43 < dx> hmm 07:43 < dx> varints do help with forwards compat in case that changes... 07:43 < Grum> and on that note, we do not have enough packets to hit the second var-int-byte 07:43 < Grum> so the cost of reading is literally a single bit-check and that's it 07:43 <+SirCmpwn> true, but still higher than just reading the damn thing 07:43 <+SirCmpwn> and for a stupid reason 07:43 < Grum> no, for forward compatibilty reasons 07:44 < Grum> what if some mod decides to add 123123123 packets? 07:44 <+SirCmpwn> that's like buying a billion burgers because you don't want to run out before you die 07:44 <+SirCmpwn> mods use the plugin message 07:44 <+SirCmpwn> this is the blessed means 07:44 < Grum> maybe those should be indexed packets 07:44 < Grum> at least now they *can* be 07:44 <+SirCmpwn> that sounds pretty cool and might justify varints more 07:44 < Grum> at the cost of checking a single bit in a byte 07:45 < Grum> i realize there is a bit of cost 07:45 < Grum> but the increase flexibility justifies it 07:45 < dx> yeah, in performance, string comparison vs a shitton of varint packet ids... 07:45 <+SirCmpwn> I concede on that particular point 07:45 <+SirCmpwn> (packet IDs) 07:45 < Grum> the one big problem we have in our system right now is that we're 100% statically tied down with lots of arbitratily picked limits 07:45 <+SirCmpwn> but I still think you're using a bit too eagerly 07:45 <+SirCmpwn> "you" being mojang 07:45 < Grum> perhaps 07:45 < Grum> especially for locations 07:45 <+SirCmpwn> all the tiny little performance losses add up 07:46 < Grum> yes, but you've never seen a secondary cpu used by all the reader threads 07:46 < Grum> +fully 07:46 < Grum> so yeah, maybe it moved up from 2 to 2.4% 07:46 < dx> somehow benchmarking the real impact of varints would be cool 07:46 * SirCmpwn shrugs 07:46 <+SirCmpwn> it's a hit 07:46 <+SirCmpwn> and not a justified one in lots of places 07:46 < Grum> its a huuuuge hit 07:46 < Grum> possibly 07:46 <+SirCmpwn> it's not a huge deal, we've spent a lot of time on this one problem 07:46 < dx> it would be huge with thousands of clients 07:46 <+SirCmpwn> let's move on to a bigger one: crypto 07:46 < Grum> dx: which we do not support 07:47 < dx> Grum: :D 07:47 < Grum> maybe we should, but then maybe we should fix other issues first 07:47 < dx> i actually enjoy not giving a fuck about scalability in my personal projects 07:47 <+SirCmpwn> the roll-your-own-crypto in minecraft is stupid for reasons I really shouldn't have to explain 07:47 < Drainedsoul> dx :( 07:47 < Grum> like not spamming a fucking packet 20 times per second just to indicate 'I AM ON TEH FLOOR' 07:47 < dx> Drainedsoul: ? 07:47 < Drainedsoul> idk, I like worrying about that in the same way I like worrying about Unicode :D 07:47 < Grum> SirCmpwn: there is no trivial alternative for a 3-way auth like we're doing 07:48 <+SirCmpwn> I would have just established a TLS connection and did some simple checks afterwards to verify that the user is who they say they are 07:48 < Grum> based on what? 07:48 < Grum> also we basically rolled our own tls setup 07:48 <+SirCmpwn> old auth system would have worked well enough in that situation 07:48 < Grum> 'old auth system' ? 07:48 <+SirCmpwn> like old old 07:49 <+SirCmpwn> not old old old but old odl 07:49 <+SirCmpwn> old old* 07:49 <+SirCmpwn> the one with the shitty HTTP API on mojang.com where you did a super simple juggling things around 07:49 < dx> "rolled our own tls setup" - that's what he's complaining about, mostly because it's not tls 07:49 < Grum> ok, first of all, the encryption is purely against mitm 07:49 <+SirCmpwn> which would have been resolved just by wrapping the old way in TLS 07:49 < Grum> dx: yes because it is not tls, else we would have used it 07:50 < dx> Grum: yes, and that in itself is a problem, unless you manage to get it audited 07:50 < dx> but meh. 07:50 < Grum> SirCmpwn: i have the feeling you are just complaining that you cannot use a library to do something that you think should have been done with a library eventhough a library wouldn't get the job done in this case 07:50 <+SirCmpwn> I have little faith in your TLS implementation, but it's just a game so I guess who cares 07:50 <+SirCmpwn> s/TLS/psuedo-TLS/ 07:50 < Grum> it's rather simple tbh :/ 07:50 < Drainedsoul> s/psuedo/pseudo/ 07:50 <+SirCmpwn> thanks Drainedsoul 07:51 < dx> fucking up crypto is rather simple 07:51 < Grum> yes it is, but what we have is good :/ 07:51 <+SirCmpwn> first rule of crypto is don't roll your own crypto 07:51 <+SirCmpwn> second, third, and fourth rules of crypto are also don't roll your own crypto 07:51 < Grum> SirCmpwn: agreed, until i couldnt find anything that would get the job done 07:51 < dx> first rule of the crypto club 07:51 < Grum> SirCmpwn: i truly didn't like writing it 07:51 <+SirCmpwn> Grum: ...old auth plus TLS would have worked 07:51 < Grum> there is no such thing as 'old auth' 07:51 <+SirCmpwn> meh, whatever 07:51 < Grum> there is no such thing as 3rd-party-tls 07:51 <+SirCmpwn> shall we move on to more greivances 07:52 < dx> fifth rule is just use TLS or PGP or OTR or bcrypt 07:52 < dx> ...that's not a lot of options 07:52 < Grum> and none of them could do what we needed dx 07:52 < dx> i know 07:52 < dx> and ugh i feel so uncomfortable recommending OTR, knowing how awful the implementations are :( 07:52 < dx> but the spec is solid 07:52 < Grum> OTR being? 07:52 < Drainedsoul> given that a lot of crypto is implemented ontop of OpenSSL 07:52 < Drainedsoul> you should feel that way about all crypto 07:52 < Drainedsoul> ;) 07:53 < Grum> yeah ahh imagine us using tls, we'd have heartbleed in all servers too! 07:53 < dx> Grum: completely unrelated, "off-the-record" encryption for instant messaging https://otr.im/ 07:53 <+SirCmpwn> who cares about heartbleed in minecraft 07:53 <+SirCmpwn> Craft.Net generates a new keypair every time the server starts up 07:53 <+SirCmpwn> if it's leaked, boo hoo 07:54 < Drainedsoul> if your server instance is long running, it'd matter 07:54 < Grum> dx: that is what we implemented on the wire actually 07:54 <+SirCmpwn> just tell everyone to restart their minecraft servers 07:54 <+SirCmpwn> boom, mitigated 07:54 <+SirCmpwn> anyway 07:54 < Grum> not at all? 07:54 <+SirCmpwn> more problems: client-side prediction 07:54 < Grum> you still have to fix the libraries used 07:54 < dx> Grum: uhhhh no, this is a very specific protocol with a shitty name, it's nothing like your stuff 07:54 < Grum> SirCmpwn: yeah lol sigh, fuck that 07:54 <+SirCmpwn> well, update and then restart your server 07:54 <+SirCmpwn> no need to revoke things 07:54 < Grum> dx: read the high-level overview https://otr.cypherpunks.ca/Protocol-v3-4.0.0.html 07:54 < Grum> that is exactly what we do 07:55 < Grum> except for the 'lets pick how we communicate the key' 07:55 < Grum> that is always RSA1024 07:55 < Grum> and the cypher after is AES128 07:55 < dx> apples to oranges really 07:56 < Grum> also that doesn't involve 'intention checking' through a 3rd party 07:56 < dx> you may be using the primitives but this is for a completely different purpose 07:56 < dx> *the same primitives 07:56 < Grum> setting up a encrypted stream to the server 07:56 <+SirCmpwn> so, err 07:56 <+SirCmpwn> client-side prediction chat, anyone? 07:56 < dx> SirCmpwn: tab completion? or what? 07:57 <+SirCmpwn> no, things like physics being implemented on the client 07:57 <+SirCmpwn> specifically physics is a HUGE pain in my ass 07:57 < dx> oh 07:57 <+SirCmpwn> because I have to reimplement minecraft physics in a black box to the tick or it looks jumpy and shitty 07:57 < dx> ehh 07:57 <+SirCmpwn> also: window management is handled on both and gets shit fucked up 07:57 <+SirCmpwn> the client can craft things and put them in their inventory and PLACE THEM without the server ever agreeing to it 07:57 < Grum> window management being inventories etc? 07:58 <+SirCmpwn> Grum: yeah 07:58 < dx> the physics stuff sucks but that's how networking in games usually works :/ 07:58 < Grum> SirCmpwn: yes we planned to fix that with the inventory rewrite which didn't quite finish yet :( 07:58 < dx> implement the same shit in both sides and hope they agree 07:58 <+SirCmpwn> well, glad to hear it's coming, Grum 07:58 < Grum> dx: the problem is they will never agree because we 'truncate' the values over the wire 07:58 < Grum> so server and client have a different image of reality 07:59 < dx> Grum: like, say, turning from floating point to fixed point? 07:59 < Grum> yes, truncating it into 1/8000 resolution 07:59 * SirCmpwn notices this on wiki.vg 07:59 <+SirCmpwn> >As of 1.7.6 all UUIDs used in the protocol now contain '-'. The session server still returns them without 08:00 <+SirCmpwn> shall we chat about the session server (and related servers) 08:00 < Drainedsoul> Are UUIDs still sent as strings in the protocol? 08:00 < Grum> ugh i hate the text representation of uuids 08:00 < Grum> it should just be two longs 08:01 <+SirCmpwn> the biggest problem with the new auth system is that I don't know how to pronouce it or spell it 08:01 < Drainedsoul> more like unsigned __int128 08:01 <+SirCmpwn> other than that, it's a huge improvement, thanks 08:01 < Grum> igg-drassil 08:01 < Grum> Drainedsoul: same difference 08:02 < Grum> SirCmpwn: java is a bit whiny on the textual representation of uuids 08:02 <+SirCmpwn> from my perspective, I don't really care 08:03 <+SirCmpwn> the implementation is your problem, I just criticise the spec ;) 08:03 <+SirCmpwn> java was a bad choice for minecraft anyway 08:03 < Drainedsoul> I'd cry if I didn't have unsigned integers myself :( 08:03 < dx> SirCmpwn: spec? what spec? 08:04 <+SirCmpwn> you know what I mean, dx. 08:04 < SinZ> protocol 08:04 < dx> :P 08:04 < dx> implementation is our problem too, unfortunately 08:04 <+SirCmpwn> also, Grum, I don't know much about your upcoming changes to block IDs and such, but I'm a bit worried 08:04 < Grum> most of that is in 1.8 08:04 < Grum> though not reflected in the saved format L( 08:04 <+SirCmpwn> are blocks going to have consistent IDs? 08:04 <+SirCmpwn> into the foreseeable future? 08:04 < Grum> 'consistent ids' ? 08:05 <+SirCmpwn> as in the same series of bits will always refer to the same block type 08:05 <+SirCmpwn> like "stone" 08:05 <+SirCmpwn> I like that you threw out metadata, by the way 08:06 <+SirCmpwn> dislike that I still have to think about it cause it's not in anvil 08:06 < Grum> that will never happen what you just requested 08:06 < Grum> stone can be another id on a different dimension 08:07 <+SirCmpwn> ... 08:07 < Grum> you know why? its a property of the level, not of the stone 08:07 <+SirCmpwn> block IDs are now dictated by the level? 08:07 < Grum> artifact of serialization 08:07 < Grum> not yet 08:07 <+SirCmpwn> let's throw out performance 08:07 <+SirCmpwn> just completely forget about it 08:07 <+SirCmpwn> and code clarity, too, let's forget about that 08:08 < Grum> not sure what you are talking about 08:08 <+SirCmpwn> pairing a block with the logic that defines its behavior will be much worse 08:08 <+SirCmpwn> and reassigning IDs at runtime depending on the level, ewww 08:08 <+SirCmpwn> trying to do a lookup for anything will be dramatically less performant 08:09 < Grum> you do realize there is already a lookup going on right? 08:09 <+SirCmpwn> yeah, an index in an array (at least in Craft.Net) 08:09 <+SirCmpwn> which is super speedy 08:09 <+SirCmpwn> managing several hash tables instead and generating them at runtime sounds like a whole lot of unfun 08:09 < Grum> why would this be different? 08:09 < dx> hmm, the new implementation could also build arrays like that in runtime 08:09 < Grum> yeah, i dont quite see the problem 08:09 < dx> no idea about mod blocks though 08:10 <+SirCmpwn> hmm, I guess you could just build LUTs at runtime 08:10 < dx> harder to assign array indexes to those 08:10 <+SirCmpwn> but again, eww 08:10 < Grum> you ask for 'x,y,z' in world Z and you get back an index, you look up the index in an array ... 08:10 < dexter0> Could you at least assign them at startup time instead of assigning them per-dimenison? 08:10 < Grum> the same as it is now 08:10 < Grum> but the array is dynamically populated 08:10 <+SirCmpwn> and several of them, one per level 08:10 <+SirCmpwn> after thinking about it I can see the value, though 08:10 < Grum> SirCmpwn: why would that matter? 08:10 < dx> dexter0: what's the difference between "startup" and "level load"? 08:10 < Grum> it actually is almost required to do that 08:10 <+SirCmpwn> Grum: it's just uglier 08:10 < Grum> imagine you starting 1 world that is vanilla 08:11 < Grum> and now you load up another world with mods 08:11 <+SirCmpwn> yeah, I know the justification 08:11 < Grum> now you want to have both on the same server 08:11 <+SirCmpwn> it makes sense with more thought 08:11 < Grum> OMG THAT IS IMPOSSIBRU BECAUSE MAPPINGS ARE DIFFERENT 08:11 <+SirCmpwn> are you going to do a level format migration 08:11 < Grum> yes 08:11 < Grum> that is what 1.9 is about 08:11 <+SirCmpwn> can we interject some feedback into it when you settle on a format 08:11 < dexter0> dx: Per level means stone has a different ID in the neather vs Overworld. Unless I misunderstand. 08:11 <+SirCmpwn> that sentence is weird 08:11 < Grum> we're dropping byte+nib+nib 08:11 <+SirCmpwn> just pretend it was well written 08:11 < Grum> SirCmpwn: give me your thoughts on a sane format 08:12 < Grum> i've not made up my mind 08:12 < Grum> but i want it to be 'pluggable' so we can change it later without problems 08:12 <+SirCmpwn> I haven't even spent 2 minutes thinking about it 08:12 <+SirCmpwn> I'll get back to you 08:12 < Grum> unlike the shit we have now 08:12 < Grum> ok 08:12 < Grum> one goal is that we store only 16^3's 08:12 <+SirCmpwn> first suggestion is a format version early in the file and a series of migration scripts that can take you from any one version to any other 08:12 < Grum> well 08:12 <+SirCmpwn> if you want futureproofing 08:12 <+SirCmpwn> second suggestion is fuck NBT 08:13 < Grum> each chunk (16^3) should be stored with a 'version' 08:13 < Grum> as first varint orso 08:13 < Drainedsoul> What's the source of the antipathy towards NBT 08:13 < Grum> and then whatever the fuck comes after will just get handled by a 'reader' for that 'type' 08:13 < Drainedsoul> not saying NBT is good, jw 08:13 < Grum> nbt sucks 08:13 < Grum> there is 0 reason at all to store this as a nbt struct 08:13 < Grum> just flushed binary data works FAR better 08:14 <+SirCmpwn> agreed 100% 08:14 < dx> SirCmpwn: I'd just like to interject for a moment. What you’re referring to as Block IDs, is in fact, Block UUIDs, or as I’ve recently taken to calling it, UUIDs plus Blocks. Blocks are not integers by themselves, but rather another free component of a fully functioning Mod API system made useful by the Mojang corelibs, forge utilities and vital system components comprising a full voxel game as defined by Notch. 08:14 < Grum> downside? you need a custom reader 08:14 < Grum> but why is that a downside O.o 08:14 < Drainedsoul> so was that "fuck NBT" in general, or just in this specific instance 08:14 <+SirCmpwn> dx: diaf 08:14 < dx> SirCmpwn: ♥ 08:14 <+SirCmpwn> Drainedsoul: fuck NBT in generally, but specifically get it out of the level files 08:14 <+SirCmpwn> "in generally" 08:14 < Grum> SirCmpwn: going to happen 08:14 <+SirCmpwn> I am really on top of it tonight 08:14 < Grum> i dislike nbt 08:14 < Grum> its stupid overhead on that level 08:14 < Grum> trivial to corrupt 08:14 < Grum> impossible to recover 08:15 < Drainedsoul> SirCmpwn: Do your reasons mirror those of Grum? 08:15 <+SirCmpwn> more or less 08:15 < Grum> also our code interface into nbt is atrocious 08:15 < Grum> nbt the format itself is not unusasble 08:15 < Grum> but its a non-standard 08:15 <+SirCmpwn> I might suggest having two seperate areas of a chunk in the level format 08:15 < Grum> we might as well pick messagepack 08:15 < dx> or json 08:15 < Grum> anything 08:15 <+SirCmpwn> I would have all the IDs and such 08:15 < Drainedsoul> I was just curious if people hate NBT because reading/writing it is a pain, because interacting with it programmatically is a pain, or because of other, technical reasons 08:15 < Grum> though json sucks at holding binary data 08:16 < dx> ok i need to leave this conversation, i'm not contributing positively anymore 08:16 <+SirCmpwn> and then JSON for the blocks that need it (don't make many blocks need it) 08:16 < Drainedsoul> dude just base64 encode stuff /s 08:16 <+SirCmpwn> and JSON for entities 08:16 <+SirCmpwn> and then gzip the lot 08:16 < Grum> yes, block data and entity data should be stored seperatly 08:16 <+SirCmpwn> I might even go so far as to say seperate files 08:16 < Grum> or 'just world data' vs 'anything that is not world-data' 08:16 < Drainedsoul> is the icon for the multiplayer screen still sent base64 encoded inside JSON? 08:16 <+SirCmpwn> oooh, idea time 08:16 <+SirCmpwn> Grum: you prepared for this? 08:16 < Grum> SirCmpwn: i'd prefer not to do that, in theory we can just have sectors within 1 bigass file 08:17 < Grum> Drainedsoul: ye 08:17 <+SirCmpwn> I have no clue if this is a good idea but it could be cool 08:17 <+SirCmpwn> put extra block data into sqlite 08:17 * SirCmpwn drops the mic 08:17 < Drainedsoul> I was about to ask why they don't use some sort of database for this, but 08:18 <+SirCmpwn> Grum: how radical are you feeling, because I just got more ideas 08:18 < dx> mongodb? 08:18 <+SirCmpwn> hell no 08:18 < Grum> SirCmpwn: i was going to store 'full air chunks' as 2 bytes 08:18 < Grum> or 1 08:18 < Drainedsoul> dx don't make me get my pitchfork out 08:18 <+SirCmpwn> good start but I'm thinking more radical 08:18 <+SirCmpwn> have you ever heard of plan9, Grum 08:18 < Grum> nope 08:18 <+SirCmpwn> okay 08:18 <+SirCmpwn> so what if the world server was seperate from the game server 08:19 <+SirCmpwn> and you had a dedicated server for serving the world and handling changes to it (which could be bundled into the same thing and run transparently) 08:19 < Grum> http://cm.bell-labs.com/plan9/ ? 08:19 <+SirCmpwn> yeah, that's it, but if you're not already familiar with it it'll take too long to catch up 08:19 <+SirCmpwn> anyway, the pros are that you can easily put the world stuff somewhere else 08:20 < Grum> lets assume that having it run as a seperate server doesn't create too much overhead 08:20 < Grum> but i do want to create an interface clean enough to let you do that 08:20 <+SirCmpwn> it'd be easy to have common state on one server and then have a bunch of seperate game servers that don't need to have much state 08:20 <+SirCmpwn> and load balance them for great things 08:20 <+SirCmpwn> that's starting to get into what I'd like to see in a full-blown ground-up redesign of minecraft, though 08:21 < dx> let's reimplement minecraft in rc shell 08:21 < dx> every block is a file 08:21 <+SirCmpwn> hahaha 08:21 < Grum> sir, not at all 08:21 < Grum> just a very well defined boundary to 'where you interact with leveldata' 08:21 <+SirCmpwn> one thing Mojang is really bad at is supporting bigger servers 08:21 <+SirCmpwn> if you were interested in changing that, I'd have lots of things to talk about 08:23 < Grum> the server hasn't had any love at all 08:23 <+SirCmpwn> unfortunately, the server is what needs the love 08:23 <+SirCmpwn> server modding is way more common than client modding 08:24 <+SirCmpwn> and in general, the servers are what needs the most tuning 08:24 < expir3dcowPC> Is server modding easier than client modding? 08:24 <+SirCmpwn> a poorly optimized client only affects the computer it's running on, a poor server will fall under its own weight much more quickly 08:24 <+SirCmpwn> expir3dcowPC: probably 08:24 < dx> expir3dcowPC: welcome to minecraft 08:24 < expir3dcowPC> dx, Hi 08:24 < dx> well actually, now that bukkit is dead, it's not really easier 08:25 * SirCmpwn does not write mods, he just writes Craft.Net 08:25 < expir3dcowPC> I've played minecraft for a year, just got into programming recently 08:25 <+SirCmpwn> oh man, another one 08:26 < expir3dcowPC> If I wantto send a packet to a server do I do Outputstream.writeBytes(packet)? 08:26 <+SirCmpwn> please learn the basics before you bother us, expir3dcowPC 08:26 <+SirCmpwn> minecraft is not somethign to cut your teeth on, if you hadn't been paying attention 08:26 <+SirCmpwn> something* 08:26 < Grum> if you name your variables weirdly with an uppercased first letter and it happens to be connected to a socket connected to the server, yes 08:27 < Grum> maybe, if it gets flushed :P 08:27 < expir3dcowPC> Thanks 08:27 < dx> ok ok here's an idea: every block is a filesystem interface, you can launch applications such as rio (the window manager) and choose to display them on any of the faces of a block. you can also mount another instance of the 9craft filesystem *on the block itself* so you can have something like the microblocks mods but with filesystems instead 08:27 < dx> i'm a genius 08:27 <+SirCmpwn> yes, plan9 has a lot of realyl radical ideas and it's a bit much 08:27 <+SirCmpwn> but some of its ideas are pretty cool in isolation 08:28 <+SirCmpwn> really 08:28 <+SirCmpwn> god dammit SirCmpwn 08:28 < dx> wot 08:28 < dx> oh your typo, i see 08:29 <+SirCmpwn> Grum: so can we talk about command blocks now 08:31 < dx> i'm just waiting for the day in which mojang gives up creating their own programming language in command blocks and switches to lua 08:31 < SinZ> Lua is a pain to type in a one-line textbox though 08:31 < SinZ> <3 08:31 <+SirCmpwn> here's an idea: if you want to mod minecraft, fucking mod it 08:31 < dx> well of course by that point it won't be an one-line textbox 08:32 < dx> i'm half-serious with what i'm saying about lua, btw 08:32 <+SirCmpwn> Grum: I've never felt like you were ruining minecraft, but I feel that way about Dinnerbone 08:32 < dx> it would count as decent client side scripting 08:32 <+SirCmpwn> is he going to be reined in any time soon 08:33 < SinZ> dx: inb4 modding community bitching that Mojang copied computercraft 08:34 < dx> SinZ: hahah i completely forgot about that 08:34 < dx> it's pretty much the same thing i was """suggesting""" 08:34 < dx> absurdly advanced command blocks that can move by themselves 08:35 <+SpaceManiac> command block minecarts 08:35 <+SirCmpwn> do those exist now? 08:35 <+SpaceManiac> that place minecart track as they go in the correct direction 08:35 < SinZ> yes 08:35 <+SirCmpwn> what in god's name could justify those existing 08:35 < SinZ> Welcome back, Sethbling here. 08:35 < SinZ> SirCmpwn: minecarts being able to hold anything, i guess 08:36 * SirCmpwn is working on refactoring sethbling's website at the moment 08:36 < dx> sellout! 08:36 < dx> j/k 08:37 <+SirCmpwn> sethbling I don't mind, it's dbone adding a bunch of shit for him and his friends that pisses me off 08:37 < dx> uhm sorry but sethbling is one of those mapmaker friends 08:37 <+SirCmpwn> ? 08:38 < dx> 03:35 <+SirCmpwn> what in god's name could justify those existing 08:38 < dx> 03:35 < SinZ> Welcome back, Sethbling here. 08:38 <+SirCmpwn> ah, I missed the correlation 08:38 <+SirCmpwn> in any case, it feels like minecraft has lots its way and is driving itself steadily into the ground 08:39 <+SirCmpwn> like right now minecraft is about 35 seconds into this video: https://www.youtube.com/watch?v=Zl12dXYcUTo 08:39 < dx> i think the mapmaker related changes are just a bunch of workarounds to keep at least some part of the community entertained with the game 08:39 <+SirCmpwn> I completely agree 08:40 < Grum> SirCmpwn: commandblock sshould die 08:40 < dx> \o/ 08:40 < Grum> i dislike them, i tolerate them because they fill a need 08:40 <+SirCmpwn> I agree 08:41 <+SirCmpwn> will it die? 08:41 < dx> Grum: ♥ 08:41 < Grum> i only tolerate them because you cannot get them other than through /give 08:41 < Grum> which makes them suited for the purpose they are for, non-standard building 08:41 <+SirCmpwn> I think the very concept they represent is flawed 08:41 <+SirCmpwn> minecraft has limitations 08:41 <+SirCmpwn> this is why minecraft is fun 08:41 <+SirCmpwn> it used to be impressive when you made crazy cool redstone contraptions 08:42 <+SirCmpwn> "you" in the vague sense 08:42 <+SirCmpwn> now minecraft is adding more and more and more and more and appealing to the instant gratification crowd who wants a big flashy game with tons of stuff in it 08:42 < dx> now they are boring, but with better performance! 08:42 < SinZ> thats why commandblocks should've only been done for adventure mode stuff, where you want to do stuff that is impossibru in pure redstone 08:42 <+SirCmpwn> those people grown up and turn into the crowd who makes their own fun from limited tools 08:42 < Grum> commandsblocks are more things like minigames that would require excess abuse of redstone making it slower than needed 08:42 <+SirCmpwn> grow* 08:42 < Grum> but anything a commandblock can do should in the end be a plugin 08:42 < SinZ> not for hurrhurr I have built a full computer in 3 blocks 08:42 < Grum> if at all 08:42 <+SirCmpwn> Grum: the point, I think, is that minigames are not appropriate for minecraft 08:43 < SinZ> Atleast not in pure vannila 08:43 < Grum> SirCmpwn: according to the community they are 08:43 <+SirCmpwn> a rapidly divided community 08:43 <+SirCmpwn> maybe I'm wrong, but I predict that this is the wrong path 08:43 < SinZ> Let that be server plugins like what custom servers have been doing since 2009 08:44 < dx> SirCmpwn: "not appropriate" maybe technically speaking, because they are a bunch of hacks, but whatever, gotta live with it now 08:44 < GauHelldragon> oh ! 08:44 <+SirCmpwn> not in the technical sense, dx 08:44 <+SirCmpwn> I mean that it's driving us away from what makes minecraft special to gamers 08:44 < dx> ehhh, meh 08:45 <+SirCmpwn> modders can mod it to do whatever they want, but that's not minecraft any more 08:45 < dx> there are many ways to play minecraft, i find building boring, and pure survival is okay once every 6 months 08:45 <+SirCmpwn> when it actually _is_ minecraft, things change imo 08:45 <+SirCmpwn> this discussion is getting way into the clearly subjective and intangible classification of feedback, though 08:45 < Grum> the power of minecraft is that you can play it in many ways + community + magic 08:45 < dx> ~magic~ 08:46 < SinZ> Grum: is that why at one point you guys were trying to break mob farms? 08:46 <+SpaceManiac> *arm flailing* 08:46 <+SirCmpwn> there's a limit on how much I can get upset about 08:46 <+SirCmpwn> the actual vision of the game is clearly in Mojang's hands 08:46 <+SirCmpwn> I can only really justify griping about the technical choices they make to arrive at that vision 08:47 <+SirCmpwn> dx tells me I should be angrier 08:47 < dx> hahahha 08:47 <+SirCmpwn> minecraft fucking sucks and it's all Grum's fault 08:48 < dx> i didn't say anything 08:48 * dx hides 08:48 < Grum> at least we could whore it out 08:48 < Grum> seems to be good at that 08:49 <+SirCmpwn> speaking of being whores 08:49 <+SirCmpwn> I still own minecraft.pe 08:49 <+SirCmpwn> you guys still don't want it? 08:49 < dx> didn't .pe cost like 100 bucks? 08:50 < Spurlex> Psssst. Grum. You should get security questions in the launcher if a user logs in from a suspicious ip. 08:50 <+SirCmpwn> I don't want to sell it for a bunch of money, I just noticed it was available and grabbed it before the real squatters showed up 08:50 <+SirCmpwn> dx: something like that 08:50 < dx> Spurlex: define "suspicious ip" 08:50 < Spurlex> Well if i login from my country New Zealand 08:50 < Spurlex> Then suddenly an ip logs in from United States 08:50 < Spurlex> thats suspicous so ask security question 08:51 < dx> ehhh 08:51 < dx> that's kinda annoying but yeah sure whatever man 08:51 < Spurlex> Because people are buying 100’s of alt accounts for like $5. 08:51 < Grum> Spurlex: then you assume that ip's actually have fixed countries attached to it 08:51 < Spurlex> and the reason there are so many alts is because those passwords cant be changed by the people who hacked them. 08:51 < Grum> they can be changed? 08:52 < Spurlex> No the alts usually have security questions on them 08:52 <+SirCmpwn> that's not really Grum's responsiblity, is it? 08:52 <+SirCmpwn> send it to tobias 08:52 <+SirCmpwn> (it's tobias, right?) 08:52 < dx> mollstam? 08:52 <+SirCmpwn> yeah 08:52 < Spurlex> Stops the password changing which means they can be shared without people being stubborn and changing the password 08:52 <+SirCmpwn> we should all demand two factor auth 08:52 <+SirCmpwn> no playing minecraft unless you have your RSA key fob handy 08:52 < Grum> agreed 08:52 < SinZ> mollstam was just website, grum and dinnerbro did the client afaik 08:53 < dx> who's launcher? 08:53 <+SirCmpwn> SinZ: right, but I think mollstam owns the auth API 08:53 < Spurlex> I’d love 2step auth but I don’t think this type of community would use it widely 08:53 < Spurlex> because young 08:53 <+SirCmpwn> Spurlex: that was sarcasm 08:53 <+SirCmpwn> apparently I'm bad at it 08:53 < Spurlex> 2step auth would be nice though 08:53 <+SpaceManiac> 2-factor auth that works with mobile app like everyone sane uses would be neat, though probably not widely-used 08:54 < dx> well it's always optional and doesn't hurt to have it 08:54 <+SirCmpwn> god, it was a joke 08:54 <+SirCmpwn> I'm sorry 08:54 < SinZ> or something similar to steamguard, that new computers need a code from email or something 08:54 < dx> SirCmpwn: :D 08:54 < Spurlex> Steamguard would be great 08:54 < dx> SirCmpwn: but really, there are tinfoilhats out there that will appreciate it 08:54 <+SirCmpwn> I wear a tinfoil hat 24/7 but I only care about when it's valuble 08:54 < SinZ> iirc, Steam is actually getting mobile 2-factor auth soon-ish 08:55 * SirCmpwn types from his full disk encryption Linux system 08:55 < Spurlex> Minecraft just needs to pass some sort of un-changeable machine id to server 08:55 < Spurlex> ;) 08:55 < dx> SirCmpwn: some people have valuable minecraft accounts, like, uh, notch 08:55 < SinZ> that is banned on almost all servers? 08:55 <+SirCmpwn> notch can also go kick mollstam's chair and have him fix it 08:55 < dx> SinZ: what a terrible minecraft account 08:56 < dx> but now seriously, i can see a bunch of famous youtubers needing stronger auth 08:57 < Grum> or they just need stronger passwords 08:57 <+SirCmpwn> ^ 08:57 < Grum> just pick something 32+ chars long and no-one will ever guess it 08:58 < Grum> *EVER* 08:58 < Grum> well not true 08:58 < Grum> ever is a long time, with enough monkeys it will happen 08:58 <+SirCmpwn> the auth servers should have rate limiting and such 08:58 < SinZ> I still hate that windows has a limit on the length on passwords 08:58 < dx> your bank account password must be between 4 and 6 digits 08:59 * dx has gone full offtopic 08:59 < GauHelldragon> security question: what is your last name 08:59 < SinZ> security question: what is your password 08:59 < Grum> GauHelldragon: you cannot actually answer that question 09:00 < Grum> unless you can see the future 09:00 < dx> mind=blown 09:00 < GauHelldragon> i get it 09:05 <+SirCmpwn> security question: can you see the future 09:06 <+SirCmpwn> Grum: after our discussion I added a note to the post on reddit that started this all 09:06 < Expel> SirCmpwn: No. 09:18 < Grum> Has URL SirCmpwn? 09:18 <+SirCmpwn> http://redd.it/2fuhj7 09:19 < Grum> Slightly misrepresented but OK :) 09:19 <+SirCmpwn> oh? 09:19 <+SirCmpwn> meh, whatever 09:20 <+SirCmpwn> thanks for talking about all this seriously, Grum, I'm much more optimistic about the future now 09:20 < Grum> In the process would indicate that my current commits would be touching subjects we talked about. They are not exactly :) 09:20 < Grum> But as said, fine with me 09:21 <+SirCmpwn> eh, tiny detail 09:21 < dx> well it's mostly long term stuff 09:21 <+SirCmpwn> thinking about how the changes should take shape is a part of making them happen 09:21 < Grum> But I've done that 2 yrs ago 09:22 <+SirCmpwn> yes, but not with me providing input :P 09:22 < Grum> Hehe 09:23 <+SirCmpwn> I think I would be happy if Mojang just brought forth the big changes they had in mind for feedback before finalizing them 09:23 <+SirCmpwn> sounds like you're on the right track with the level format 09:23 < Grum> I don't know a lot of how I want to do it 09:24 <+SirCmpwn> that's fine, too - we can help you get the right ideas 09:24 <+SirCmpwn> working in a black box makes everyone sad 09:24 < Grum> In theory using something like a key value store as leveldb would work quite well too 09:25 <+SirCmpwn> if you'd consider much deeper changes, Minecraft could get really good in terms of technical design 09:25 <+SirCmpwn> if you don't see that as in scope right now, then there are still improvements that can be made 09:25 <+SirCmpwn> but it's a bit too late to start this discussion up again, I need to sleep 09:25 < Grum> Many options, first step is making it future compatible and adding clear separations between layers 09:25 <+SpaceManiac> G'night, Cmpwn 09:25 <+SirCmpwn> night, SpaceManiac 09:26 < Grum> Aka adding a y component to region files 09:26 <+SirCmpwn> or knight 09:26 * SirCmpwn cringes 09:26 <+SpaceManiac> :P 09:26 <+SirCmpwn> a long time ago I would say "good knight" on IRC and think I was funny 09:26 < Grum> And introduce readers and writers for chunkformats 09:26 * SirCmpwn isn't even remotely into medival culture 09:27 < Grum> Go play with your sword and nap well 09:29 < dx> ooooh now i get why it's called KnightOS 10:20 < Dinnerbone> Hi SirCmpwn, I don't know why you think that I'm "ruining the game" but I haven't added anything for sethbling in a very, very long time (ever? I can't remember anything. Maybe a bug fix before). If you are referring to lots of mapmaker stuff that was added in the update half dedicated to map maker stuff, that was mostly not me too. Sorry! 10:22 < jast> I think there's some kind of misunderstanding here. the purpose of a scapegoat is to draw flak for everything, whether they were involved or not. ;) 10:25 < SinZ> so we are saying that Jeb is ruining Minecraft now? 10:27 < jast> doesn't matter as long as someone gets blamed for something 10:51 < shoghicp> heh, such a night 10:51 < shoghicp> Most of the conversation overflowed the backlog 10:51 < SinZ> lol 10:56 < shoghicp> about authentication, Minecraft: PE doesn't have it for normal servers 10:57 < shoghicp> only their Realms servers will get nick authentication :( 10:57 < shoghicp> well, that aside 10:58 < shoghicp> I'm sending the Chunk Data 10:58 < shoghicp> but nothing renders on the client side 10:58 < shoghicp> do I have to send an ID mapping? if yes, how? 10:58 < shoghicp> oh, wait 10:59 < shoghicp> little endian... 10:59 < shoghicp> why would you put that there when everything else is big endian... 11:00 < shoghicp> well, at least this is something normal in Minecraft: PE 11:00 < shoghicp> NBT is little endian, but network is big endian 13:16 < UltimateBudgie> http://wiki.vg/Protocol reflects the 1.8 protocol yeah? 13:17 < Thinkofdeath> yep 13:28 < UltimateBudgie> Awesome :D Thanks 13:30 < Grum> md_5: can you prod me when you wake up? cheers! 13:30 <+md_5> Grum hey! 13:30 < Grum> HAI THAR 15:49 <+SirCmpwn> Dinnerbone: I've been led to believe that you're the driving force behind this command nonsense that's getting out of control. If that's not the case, then I apopogise for my comments earlier. 16:15 < TkTech> Note: Opinions are opinions. 16:15 <+SirCmpwn> very insightful 16:53 < bgale_> SirCmpwn, what's the "command nonsense"? 16:53 < jast> opinions are facts! 16:54 < bgale_> opinions are proof of god 16:54 < bgale_> or something 16:59 < Fenhl> opinions are laser beams attached to a shark 17:16 <+SirCmpwn> bgale_: the extentions on commands and command blocks that they have been spending so much of their time on 17:17 < bgale_> didn't you realise command blocks are the mod api? 17:19 * SirCmpwn shudders 17:50 < Grum> SirCmpwn: not much time has been spent on it 17:51 < Grum> just some spare hours here and there by mostly Searge 17:53 < Bibl> back from school 17:53 < Bibl> what have i missed 17:53 <+SirCmpwn> well, this is all super subjective at this point 17:53 < Grum> maybe ~5% of the time is spent on commands from 1 person? if even that 17:54 <+SirCmpwn> that's good to hear 17:54 <+SirCmpwn> my complaint is less about the time and more about just the fact that they exist, but I don't really want to get too into it because it's an opinion I don't feel like I should be pushing for 17:57 < Grum> it's "ok" for now :p 17:57 < Grum> should become a plugin sooner than later 18:13 < Fenhl> is “everything is a plugin” still the ultimate plan? 18:17 <+SirCmpwn> what if the plugin API was a plugin 18:17 <+SirCmpwn> *dramatic music* 18:18 < shoghicp> Bukkit API as a plugin :P 18:18 < Grum> that might work if we were to make a bukkit-like api :p 18:25 < Fenhl> :O 18:25 < Fenhl> the possibilities are endless 18:38 < Aragas> I get disconnected very quickly, i think after SetCompression packet. Do i need to answer to it? or i get disconnected because i don't compress packets? 18:55 <+SpaceManiac> probably because you don't compress packets (you should at least switch to the header form used when compression is enabled) 18:59 < expir3dcowPC> hi 19:01 < Aragas> man, this is soooo lame 19:38 < Aragas> so i need always send packets with headers? Can i fully disable compression? Wanna debug packets, but don't wanna make compression support 19:48 < shoghicp> Aragas: that is decided by the server 19:48 < shoghicp> you can set network-packet-compression to -1 19:48 < shoghicp> that'll disable it 20:00 < Grum> you do not quite want to do that though 20:00 < Grum> chunk packets are HUGE without compression 20:02 <+SpaceManiac> flat world near y=0, 1 view distance? probably still big 20:02 <+SirCmpwn> did you remove the usual compression for chunk packets, Grum? 20:02 < Grum> yes 20:02 <+SirCmpwn> good choice 20:02 < Grum> we do no compression at all anymore in 1.8 20:02 < Grum> except the global one 20:02 <+SirCmpwn> I like that change ^_^ 20:02 < Grum> it also means that any packet under the threshold *HAS* to be compressed 20:03 < Grum> and the server will boot you if you ignore this 20:03 <+SirCmpwn> over 20:03 < Grum> err over yes 20:03 < Grum> this might mean the size will end up bigger than before, but that is ok :) 20:03 <+SirCmpwn> what was the justification for that? 20:03 <+SirCmpwn> I imagine a particularly clever implementation would ditch the compression if it proved ineffective at runtime 20:04 < Grum> and spam the server with data? 20:04 <+SirCmpwn> what does the client send that is so heavy to be of consequence 20:04 < Grum> it's just strict, you make an agreement, you keep that agreement :) 20:05 <+SirCmpwn> it'd be trivial to check the size and discard the compressed packet if larger, though, with a net reduction on bandwidth costs 20:05 < shoghicp> Plugin messages, maybe? but they can be compressed by the plugin itself 20:05 < Thinkofdeath> Grum: And if you ever try to change it the client crashes 20:05 < Thinkofdeath> :) 20:05 < Thinkofdeath> s/crashes/disconnects with an error 20:07 < Grum> that would increase the logic significantly, right now it barely has any logic :p 20:07 <+SirCmpwn> would it really increase the logic significantly? 20:07 <+SpaceManiac> the d/c with error is a copy/paste bug afaik 20:07 <+SirCmpwn> if (compresesd.length > original.length) compressed = original; 20:07 < shoghicp> ^ 20:07 <+SirCmpwn> I haven't seen the code but just imagining how I would implement it is pretty simple 20:08 < Grum> there was some reason 20:08 < Grum> we had that first 20:09 <+SirCmpwn> is it "we have to somehow tell the other side that it's not compressed" 20:09 <+SirCmpwn> cause that would make sense as a reason not to bother 20:09 <+SirCmpwn> but I imagine no one realized that gzip/zlib has magic numbers 20:11 < Grum> oh! i think it was because we wanted people to experiment with the values 20:12 <+SirCmpwn> to find a good threshold? 20:12 < Grum> and if we start to fudge internally numbers are always messed up 20:13 <+SirCmpwn> does anyone know what vanilla uses as the threshold, by the way 20:13 <+SirCmpwn> I would just try to compress every nontrivial packet (like >100 bytes) and see what sticks 20:13 <+SpaceManiac> I think 256 is the default? 20:13 < shoghicp> yep 20:17 < Grum> the thing is, it's hard to see what sticks and what doesn't 20:17 <+SirCmpwn> it's pretty objectively easy to check the lengths and send whichever is smaller 20:18 < TkTech> SirCmpwn: The couple byte difference would hardly make that additional logic worthwhile. 20:18 <+SirCmpwn> you're probably right, this is mostly speculation 20:19 < Grum> also you just wasted time to compress it 20:19 < Grum> might a well send it :P 20:19 < Grum> and if its bigger, well, you picked a stupid threshold 20:19 <+SirCmpwn> I'm thinking of this mostly for research purposes to determine what kinds of packets and data it's worth compressing 20:19 <+SirCmpwn> rather than putting this into actual production 20:20 < Grum> in that case you want to actually be able to see which data is 'bigger' after compression 20:20 < Grum> and for that you need the compressed data 20:20 <+SirCmpwn> ? 20:21 < Grum> (that is bigger) 20:22 <+SirCmpwn> ?? 20:23 < TkTech> SirCmpwn: You need both compressed and uncompressed traffic to compare the two. 20:27 <+SirCmpwn> well, yes 20:27 <+SirCmpwn> that'd be easy to track, though 20:31 < shoghicp> besides that, what would be the max overhead? 20:31 < shoghicp> 11 bytes? 20:32 <+SirCmpwn> there's nontrivial CPU overhead when encoding packets 20:32 < shoghicp> right, but that cannot be guessed before :S 20:33 * SirCmpwn shrugs 20:33 < shoghicp> hmm, this could use the client-server MTU for the threshold 20:34 <+SirCmpwn> that's a good idea 20:34 < shoghicp> Minecraft sets TCP_NODELAY, right? 20:46 < Aragas> shogchip: thanks 20:47 < shoghicp> I should really disconnect the shogchips nick from the bouncer 20:47 <+SirCmpwn> oh, hey shoghicp 20:47 < shoghicp> o/ 20:48 <+SirCmpwn> I was talking about you and how insane you are on reddit the other day 20:48 < Aragas> lol, ops 20:48 < Aragas> sorry 20:48 < shoghicp> oh, where? 20:48 <+SirCmpwn> https://www.reddit.com/r/admincraft/comments/2fuhj7/i_am_a_minecraft_reverse_engineer_here_to_weigh/ckd928d?context=3 20:48 <+SirCmpwn> some idiot wanted to tell me all about why PHP doesn't suck 20:48 < shoghicp> I only read the first comments there :s 20:49 < shoghicp> haha 20:50 < shoghicp> I could quote my works from here, but I'm too lazy to open the logs 20:50 <+AndrewPH> SirCmpwn: I'm confused as per why he thinks doing things that are much more difficult make PHP not shit 20:50 <+SirCmpwn> the sad part is that he names all this stuff that supports his PHP code, none of which is written in PHP 20:50 <+AndrewPH> it's not that you can't scale it, it's that it's a shitty language for that purpose. 20:51 <+SirCmpwn> you have to write similar supporting code if you want to use PHP for a Minecraft server, it's just ridiculous to write that kind of low level stuff in PHP 20:51 <+AndrewPH> also citing facebook as a user of php is about as accurate as calling scala java. 20:52 <+AndrewPH> they have a (public) compiler that compiles the php to like C or something 20:52 <+SirCmpwn> did I mention that facebook hired the best engineers in the world and spend a fuckload of money on making their site work and at scale 20:52 <+AndrewPH> that too 20:52 <+SirCmpwn> and that Minecraft has the intrinsic problem of being very difficult to load balance 20:53 <+SirCmpwn> the typical PHP solution of "just throw more hardware at it" is hard to do in minecraft 20:53 <+AndrewPH> his response basically comes down to "run more servers!!" 20:53 <+SirCmpwn> unfortunately that thread changed the tone of the entire post 20:53 <+SirCmpwn> he's a moderator of that subreddit, he should know better than to derail it like that 20:53 < shoghicp> Thanks for the "It's actually surprisingly polished" part :) 20:54 <+SirCmpwn> shoghicp: sure 20:54 <+AndrewPH> also while I have a general disagreement with many things you say, the downvotes in this case are unwarranted 20:55 < shoghicp> well, I rewrote most of the code, and surprisingly, it has time to spare 20:55 < shoghicp> with all the physics and alike 20:55 <+SirCmpwn> if you rewrote it all, why not take the opportunity to do it in a less obnoxious language 20:56 < shoghicp> hmm, I could say it was for compatibility, but later all the old plugins were outdated 20:57 <+SirCmpwn> you probably just don't have the confidence to build it in something you're less familiar with, right 20:57 < shoghicp> yep, before doing this, I wrote three clients 20:58 < shoghicp> before I could start doing more advanced stuff 20:58 < shoghicp> I started it once in Python 20:58 <+SirCmpwn> python users of #mcdevs, avert your eyes 20:58 <+SirCmpwn> I've been using Python a lot lately and I really like it, but I don't think it's suitable for Minecraft servers 20:59 < shoghicp> I only finished the binary reading part 20:59 < shoghicp> well, there are lots of projects that have started around pocketmine 20:59 < shoghicp> a few done in java 20:59 < shoghicp> that port the code in PHP to Java 20:59 * SirCmpwn sighs 20:59 <+SirCmpwn> why is Java so pervasive in the minecraft community 20:59 <+SirCmpwn> god damn you, notch 21:00 < shoghicp> well, at least I moved world generation to a different thread, same with networking 21:00 < shoghicp> then, I find bugs in the PHP extensions that couldn't be fixed until three days ago >.< 21:01 < shoghicp> oh, and LevelDB 21:01 < shoghicp> Minecraft: PE now uses LevelDB as the format to save worlds 21:02 < shoghicp> and they open-sourced their modifications to that lib to support deflate instead of snappy 21:02 < shoghicp> if anyone is interested, https://github.com/Mojang/leveldb-mcpe 21:03 < shoghicp> SirCmpwn: also, did you hear about BigBrother? 21:03 < shoghicp> more PHP madness, of course. 21:03 <+SirCmpwn> shoghicp: link 21:03 < shoghicp> https://github.com/shoghicp/BigBrother 21:03 <+SirCmpwn> that's pretty cool 21:04 <+SirCmpwn> have you seen RetroCraft? 21:04 < shoghicp> it's a plugin for PocketMine servers, and works as a translator 21:04 <+SirCmpwn> https://github.com/SirCmpwn/RetroCraft 21:04 < shoghicp> I heard about it on the reddit post :) 21:04 <+SirCmpwn> I would show more interest in BigBrother but for obvious reasons I can't seem to muster the enthusiasm 21:05 < shoghicp> I guess 21:06 < shoghicp> but heh, it works better than I expected 21:14 < shoghicp> well, I guess that's enough PHP on #mcdevs for today 21:14 < Aragas> more problems ahead. is there any information about nbt (Slot here) data? In the wiki it isn't full. I mean, i dunno what to read there 21:15 < Aragas> Because old reading don't work, something has changed 21:15 <+SirCmpwn> the NBT data format has changed or the schema of the items it represents has changed 21:15 < shoghicp> in 1.8? 21:15 < Aragas> yep. 1.8 21:16 < Aragas> it doesn't works after Metadata reading 21:17 < Aragas> length reading is now varInt i think, but it doesn't help 21:18 < TkTech> SirCmpwn: NBT on disk or just in a stream? 21:18 < TkTech> Guess I have to update PyNBT if it changed on disk 21:18 <+SirCmpwn> highlighted the wrong person 21:18 <+SirCmpwn> well, I suppose my previous statement could be clearer if I added a ? 21:18 < Aragas> if u mean me, then stream 21:19 < TkTech> SirCmpwn: Turning it into a question does indeed make that clearer. 21:19 <+SpaceManiac> TkTech: as an aside, I think Notifico is kill on Esper again 21:23 < Aragas> Thats not funny, a lot of packets read these nbt 21:24 <+SpaceManiac> Aragas: you said you're trying to read the Slot data type and having troubles in 1.8? 21:25 < Aragas> SpaceManiac: yes 21:26 < Aragas> can't find Slot data structure from 1.8 21:27 <+SpaceManiac> my impl: https://github.com/SpaceManiac/Glowstone/blob/master/src/main/java/net/glowstone/net/GlowBufUtils.java#L141 21:27 <+SpaceManiac> may help you see what's different since 1.7 21:28 <+SirCmpwn> afk for a bit 21:28 < Aragas> totally works for me. Thanks 21:29 < Fenhl> in the slot format, is item ID still the old numeric ID? 21:29 <+SpaceManiac> yes 21:30 < Fenhl> hm. I'm assuming items that have a different block and item ID use the item ID? 21:30 <+SpaceManiac> the id numbers in Slot data are as they were in 1.7 21:31 < Fenhl> okay, that would imply item ID 21:32 < Aragas> SpaceManiac: I think it worked. no more reading errors 21:33 < Aragas> wow. lol. i have no more errors at all 21:34 < TkTech> SpaceManiac: BLARGH 21:34 <+SpaceManiac> TkTech: oh, take me with a grain of salt though. 21:34 <+SpaceManiac> My channels tend to end up on the overflow bot 21:35 < TkTech> SpaceManiac: Bots murdered. 21:35 < TkTech> SpaceManiac: A decent number of contributions, but *no one* wants to touch the IRC protocol bits 21:35 <+SpaceManiac> Hehe. 21:35 < expir3dcowPC> I do 21:35 < TkTech> I'm probably going to say screw performance and switch to Twisted.text 21:36 < TkTech> r, twisted.words 21:36 < TkTech> *Er 22:22 < Not-3b7> [Glowstone] SpaceManiac pushed 2 commits [+0/-0/±4] http://git.io/uUfQfw 22:22 < Not-3b7> [Glowstone] SpaceManiac 3b50ad7 - Load mob spawners and NBT lists more cleanly (fixes #135). 22:22 < Not-3b7> [Glowstone] SpaceManiac 37b40f6 - Recount non-air after chunk generation (fixes #239). 23:12 < Aaron1011> Is there a good way of having the client print out invalid packets it receives? 23:13 < Aaron1011> I'm pretty sure I have everything correct for Block Entity Update, but the client isn't changing the skull 23:14 < dx> Aaron1011: already done the equivalent of this for the client? http://wiki.vg/Debugging 23:15 < Aaron1011> dx: No, I was about to set that up 23:16 < Aaron1011> Do you know of a way I can filter that down? 23:16 < Aaron1011> Actually, I could just do a grep 23:16 < Aaron1011> nvm 23:16 < dx> oh that page also mentions how to do it for the client, neat 23:22 < winny> belak: did you ever figure out what the problem was with mcstat? 23:23 < Aaron1011> dx: Do you how you can actually display the packet data? 23:23 < dx> AndrewPH: like after decryption but before parsing? 23:24 < Aaron1011> dx: Did you mean me? 23:24 < dx> derp 23:24 < dx> yes 23:24 < dx> AndrewPH: sorry 23:24 < Aaron1011> That autocomplete :) 23:24 < Aaron1011> I do it all the time :) 23:24 < Aaron1011> Yeah, that's what I'm looking fo 23:24 < Aaron1011> for^^ 23:24 < Aaron1011> Right now, I'm just seeing two-letter sequences 23:25 < Aaron1011> Not even the data displayed on the example page 23:28 < Aaron1011> dx: Do you have any ideas? 23:29 < dx> NOPE 23:29 < Aaron1011> Okay, thanks :) 23:29 < dx> not showing the arguments definitely sounds like something is very wrong, though 23:30 < dx> Aaron1011: what client version, btw? 23:30 < Aaron1011> 1.8 23:30 < Aaron1011> I'm trying to get Update Block Entity working in Glowstone 23:31 < Aaron1011> I've confirmed that the packet is being sent, but that's about it 23:31 < dx> ah, glowstone, neat 23:31 < Aaron1011> Yeah, I'm implementing skulls 23:32 < Aaron1011> I've done enough server-side (I think) to get different types of heads displaying 23:32 < Aaron1011> So far, I've managed to get them to face properly when placed on the sides of blocks 23:32 < Aaron1011> I haven't tackled placing them on the ground yet, as that also depends on this packet 23:32 < Aaron1011> As do player skins on heads 23:35 < dx> i think i found a tiny bug in the launcher 23:36 < dx> separating JVM arguments with two spaces results in "Error: Could not find or load main class" 23:36 < Aaron1011> Yeah, I was getting that too 23:36 < dx> heh 23:36 * dx searches jira 23:40 < dx> no open issues 23:47 < Aaron1011> Has anyone deobfuscated the 1.8 server yet? 23:47 < Aaron1011> I'd seen Searge tweeting about working on MCP 23:49 < dx> deobfuscation is for the weak 23:49 < Aaron1011> dx: :) 23:50 < dx> also you probably should avoid looking at the mojang code while contributing to glowstone 23:51 < Aaron1011> Yeah, I was worried about that 23:51 < Aaron1011> I'm not copying anything though - just checking to make sure wiki.vg is write 23:51 < Aaron1011> right^^ 23:51 < Aaron1011> I was worried I had the packet format/NBT data for the packet wrong 23:51 < dx> what part of the wiki? link to section? 23:52 < Aaron1011> http://wiki.vg/Protocol#Update_Block_Entity 23:52 < dx> hm 23:55 < dx> ah, barneygale's "quarry" library can work as a proxy 23:55 < dx> could use that to get some meaningful debug --- Day changed mer. sept. 10 2014 00:15 < barneygale> yes 00:15 < barneygale> I should add a logging proxy example 00:15 < dx> already doing it 00:15 < barneygale> :D 00:16 < barneygale> dx: this is in there but not used 00:16 < barneygale> https://github.com/barneygale/quarry/blob/master/quarry/util/dispatch.py#L28 00:16 < barneygale> produces `hexdump -C` style output 00:16 < dx> excellent. 00:20 <+Amaranth> http://online.wsj.com/articles/microsoft-near-deal-to-buy-minecraft-1410300213 00:20 < barneygale> paywalled 00:21 < barneygale> $2bn tho wow 00:21 < dx> i bet it's like those "CONFIRMED" reports of google buying twitch 00:21 < dx> s/bet/hope/ 00:22 <+Amaranth> Pretty sure Google was actually doing that but backed out due to anti-trust concerns 00:22 < Aaron1011> I thought it was Amazon 00:22 < dx> yes, but journalists still claimed it was a confirmed closed done deal 00:22 < dx> Aaron1011: it turned out to be amazon, but before that google was considering it, or at least that's what those "journalists" claimed 00:25 < dx> >As the Journal notes, the move would be surprising given that Mojang founder Markkus "Notch" Persson, is a darling of the indie gaming scene who has avoided taking venture capital. He has also criticized Microsoft's Windows 8 for potentially being "very, very bad for indie games." 00:25 < dx> evidently notch is dead 00:27 < barneygale> I for one welcome our new corporate overlords etc etc 00:27 < dx> yeah! what could possibly go wrong 00:27 < dx> >Twist: It's actually Amazon, not Microsoft 00:28 < barneygale> controversy over open source? disillusioned early adopters? maligned 3rd party developers? sounds like a perfect microsoft asset 00:29 < dx> nah man, i'm telling you, it's amazon 00:29 < dx> it's always amazon 00:29 < dx> amazon actually owns google *and* microsoft 00:30 < Aaron1011> And apple 00:30 < dx> on a serious note, microsoft may be forced to take the whole legal mess of modding more seriously 00:31 < Aaron1011> dx: I'm personally worried about Mojang dropping support for Linux/OS X 00:31 < dx> Aaron1011: meh, unlikely. skype still supports linux 00:32 < Drainedsoul> HyperV supports linux guests 00:32 < dx> lol 00:32 < Aaron1011> That's true 00:32 < Aaron1011> dx: Bizarrely, Skype for linux got *more* updates after Microsoft bought them 00:33 < dx> also, http://www.microsoft.com/openness 00:33 < dx> and https://github.com/microsoft 00:33 < dx> being open source friendly counts as positive PR nowadays 00:34 < Aaron1011> The cynical part of me notes how few repos are there :) But, I'll admit that Microsoft has become a lot more open 00:34 < dx> they only started the move to github recently 00:34 < Drainedsoul> Roslyn isn't on their github? :( 00:34 < dx> they've had their own shitty open source code hosting site for a long time, https://codeplex.com/ 00:47 <+fragmer> I wonder how many Java developers Microsoft has 00:48 < SinZ> Aaron1011: https://github.com/Microsoft/microsoft.github.io/blob/master/README.md 00:48 < jython234[away2]> Lol 00:48 < Aaron1011> I admit my anti-Microsoft bias :) 00:49 < SinZ> running hexchat on linux, I can see that 00:50 < Aaron1011> :) 01:01 < cindy_k> J++ 01:01 * cindy_k runs 01:01 < cindy_k> ohh and I forgot J# 03:13 < jython234> a higher form of spam 03:13 < dx> dammit jython234, not again 03:13 < dx> go do something else instead of telling everyone how ajf has a shitty internet connection 03:15 < humerusj> ^ 03:17 <+SpaceManiac> fun in join-messages-disabled lancd 03:18 < dx> in other news: "The only way this could get more crazy is if SÄPO (Swedish version of FBI) broke down the Mojang AB offices and arrested them all on suspicion of money laundering and cocaine possession." 03:22 < nickelpro> When did Spawn Player change again? We ditched the weird properties structure already? I thought that was for the new skins system, did we ditch that too? 03:23 < Drainedsoul> Don't you get the "weird properties structure" through the Mojang API? 03:24 < nickelpro> It used to be sent through the Spawn Player packet too 03:24 <+SpaceManiac> those have migrated to the user list 03:25 < nickelpro> SpaceManiac: Lovely, thanks 03:25 < Drainedsoul> that massive abortion of a packet 03:25 < nickelpro> Oh fuck 03:26 < nickelpro> Someone had an accident in the MC protocol 03:26 < nickelpro> Becuase that's a piece of shit 03:26 < Drainedsoul> it'd be much easier to swallow if it was an accident 03:26 < Drainedsoul> but World Border is just as bad/worse 03:26 < Drainedsoul> i.e. it wasn't an accident 03:26 < nickelpro> These are laughably terrible 03:26 < Drainedsoul> yupp 03:27 < nickelpro> The "chat" type is your usual varint prefixed string, except that string is JSON chat, right? 03:27 < Drainedsoul> afaik, yes 03:27 < Drainedsoul> I hope so, that's how I've been implementing it :x 03:27 <+SpaceManiac> correct 03:28 < Drainedsoul> std::optional DisplayName; 03:28 < nickelpro> Ha, you and your colons 03:28 < nickelpro> Glorious C doesn't need colons 03:28 < Drainedsoul> "glorious C" doesn't have std::optional either 03:28 < nickelpro> shush 03:29 < Drainedsoul> I implemented that packet using a nice variant type :) 03:29 < Drainedsoul> owait, C doesn't have that either :( 03:29 < nickelpro> int32_t 03:29 < nickelpro> Can barely tell the difference 03:29 < Drainedsoul> wot 03:29 < Drainedsoul> a variant is like, a tagged union 03:30 < nickelpro> Oh I thought you wrote varint