10:24 < Grum> well it tries to; it fails often because of throttling on the server (so it pretends to be down) 10:24 < nyuszika7h> I guess protocol version wouldn't matter for the list detection, even if the old and new versions collide 10:24 < nyuszika7h> as you said it just tries twice 10:24 < nyuszika7h> if you get an error, it falls back 10:25 < nyuszika7h> weird error, or whatever :P 10:25 < Grum> it really isnt this hard 10:25 < Grum> assume the old protocol is incompatible in every single way with the new one 10:25 < nyuszika7h> I'm just curious and not explaining myself clearly, sorry :P 10:26 < Grum> this means that when we 'ping' the server using the new protocol we get some weird reply back from 1.6.4 10:26 < Grum> after that we try the 1.6.4 format ping, the problem now is that the 1.6.4 server often throttles connections 10:26 < nyuszika7h> I see 10:26 < Grum> so you see it as 'offline' 10:27 < Grum> a 1.6.4 server would reply with a 'kick' packet when you talk to it in a broken protocol 10:27 < nyuszika7h> ah 10:27 < Grum> so we could detect 'old stuff' this way 10:27 < Grum> now, on actually connecting 10:27 < Grum> i think that just breaks hard :p 10:27 < nyuszika7h> yeah, I meant to talk about the list, not connecting 10:27 < nyuszika7h> Grum: idea 10:28 < nyuszika7h> would it be possible to ping the server with direct connect, to get MOTD, version and stuff? or would you rather avoid the hassle? :P 10:28 < Grum> ? 10:28 < dav1d> oh god variants 10:28 < Grum> varints :p 10:28 < dav1d> hopefully not notchian like variants 10:28 < Grum> wha? :( 10:29 < Grum> nyuszika7h: 'with direct connect' ? 10:29 < nyuszika7h> Grum: like, show MOTD like in server list when you use direct connect - though either you need to press connect twice or detect when the user stops typing (which might be inaccurate if the user is a slow typer) 10:29 < dav1d> :) 10:29 < dav1d> Grum: thanks for not inventing your own possibly broken stuff 10:29 < Grum> nyuszika7h: euuh not worth it 10:29 < nyuszika7h> probably better to keep it for the server list 10:29 < Grum> dav1d: i never do that kind of shit, i prefer using libraries 10:29 < nyuszika7h> I guessed so after thinking about it, Grum 10:29 < dav1d> Grum: tell that notch :P 10:30 < Grum> we would have used the protobuf library, but we didnt want to add a useless 0.5mb JUST for varints 10:30 < Grum> so i just wrote my own implementation, then verified with how google did it 10:30 < nyuszika7h> nice to see MC using Netty, btw 10:30 < nyuszika7h> Spigot is using it already 10:30 < Grum> nyuszika7h: this just shows you have no idea what you are talking about hehee 10:31 < nyuszika7h> Grum: not much, indeed 10:31 < dav1d> Grum: little thing, why is the port a VarInt? 10:31 < dav1d> Grum: it can never be > than short.max 10:31 < nyuszika7h> yeah port is 1-65535 10:31 < nyuszika7h> or is 0 valid? 10:31 < nyuszika7h> I don't think so 10:32 < nyuszika7h> nyuszika7h@cadoth ~ % socat -d -d - TCP-LISTEN:0 10:32 < nyuszika7h> 2013/10/11 10:32:02 socat[30741] N reading from and writing to stdio 10:32 < nyuszika7h> 2013/10/11 10:32:02 socat[30741] N listening on AF=2 0.0.0.0:45870 10:32 < dav1d> a short can also represent 0 10:32 < nyuszika7h> 0 means random port, at least in socat 10:32 < dav1d> but 0 is a special value iirc 10:33 < Grum> dav1d: yeah, maybe we shouldn't do that 10:33 < Grum> makes little sense, it's almost ALWAYS two bytes long 10:34 < dav1d> Grum: yep 10:34 < dav1d> I didn't look through the protocol, but I guess you cleaned it up? like y coordinate represented as byte, short, int or double?^^ 10:34 < Grum> not really 10:34 < Grum> not yet 10:34 < dav1d> (my fav) 10:34 < dav1d> ah ok 10:34 < Grum> and yeah that is horrid 10:34 < Grum> meh 10:34 < Grum> err hmmmz 10:35 < Grum> writeUnsignedShort i guess :/ 10:35 < Grum> and readShort 10:35 < nyuszika7h> Grum: what type is the Y coordinate in 1.6.4? 10:35 < nyuszika7h> is it some integer type, or a float? 10:35 < Grum> many 10:35 < Grum> depends 10:35 < Grum> double, float, int, short, byte :) 10:35 < nyuszika7h> seems legit 10:37 < nyuszika7h> Grum: btw, can you help with a Bukkit thing? 10:37 < nyuszika7h> I need to get the location of the player's crosshair 10:37 < nyuszika7h> I have some implementation done that works, ish 10:37 < dav1d> gah losing connection all the time 10:37 < nyuszika7h> but it's probably not the best 10:37 < Grum> rot of the head of the player? 10:37 < Grum> oh wait 10:37 < Grum> know, crosshair? that is trivial 10:37 < nyuszika7h> I use line of sight atm 10:37 < Grum> middle of the screen >:) 10:38 < dav1d> can't you reverse the x,y position of the screen to world coordinates? 10:38 < dav1d> reversing the matrices 10:45 < Grum> why? 10:45 < Grum> euuh 10:45 < Grum> hmmm no 10:45 < Grum> you need to do collission stuff 10:45 < Grum> nyuszika7h: i am fixing this for 1.7 btw 10:45 < nyuszika7h> fixing what? 10:45 < Grum> or ... well... might not make 1.7 10:45 < Grum> but i am fixing that ;) 10:46 < Grum> knowing where the client is aiming and clicking :P 10:46 < nyuszika7h> oh 10:46 < Grum> the client will tell the server what it aimed at in the future 10:46 * nyuszika7h will just steal from Essentials :P 10:46 < Grum> you can look at the bucket code 10:46 < Grum> but its rather expensive to do it 10:47 < nyuszika7h> Grum: if you wonder, my plugin is https://github.com/nyuszika7h/LightningKit/ (2.0.0 with refactored code and /strike + /light combined into /lightning [-e] is not pushed to GitHub yet, it's in dev) 10:48 < nyuszika7h> Essentials has that... but mine can make effects, and I do it for fun too :P 10:49 < Grum> it should be pushed to github WHILE in dev 10:49 < Grum> silly ;) 11:33 <+sadimusi> dav1d: I would love to play around with the new snapshot, but unfortunately I have a big deadline coming up tomorrow 11:43 < dav1d> sadimusi: good to hear, it's over tomorrow :). Good Luck! 11:45 <+sadimusi> dav1d: it probably won't just be over. There will be dozens of bugs to fix and I also have to deploy it sometime next week. 11:48 < nyuszika7h> I'm going to see if I can notice anything with the PA OpenAL thing in the snapshots 11:53 < nyuszika7h> Grum: I know, I'm going to push a 2.0.0-dev soon 11:53 < nyuszika7h> I don't push untested stuff though 11:53 < nyuszika7h> the current changes are tested, but was too lazy to push 11:55 < nyuszika7h> also, about untested stuff, as I'll use -dev versions pushing them won't be a problem (though in most cases I'll test before to make sure the code makes sense), I just need to make sure I don't RELEASE untested stuff 11:56 < dav1d> nyuszika7h: normally you make commits after every change 11:56 < dav1d> helps you a shitton out later on 11:56 < nyuszika7h> dav1d: I know 11:56 < dav1d> and push unttested stuff, it's fun :D 11:56 < nyuszika7h> dav1d: I'm just not used to hosting stuff with actual releases on GitHub :P 11:56 < dav1d> I always do and I don't care^^ 11:57 < dav1d> nyuszika7h: use "tags" for releases 11:57 < nyuszika7h> I know, yes, found out about them in meantime 11:57 < dav1d> (internet please come back) 11:57 < dav1d> :( 11:58 < nyuszika7h> dav1d: how are you here if you have no internet? 11:58 < nyuszika7h> 3G or something? 11:58 < dav1d> jap 11:58 < dav1d> tethering 11:58 < Flemmard> *magic* 11:58 < nyuszika7h> ah 11:58 < Flemmard> so you *have* internet :P 11:58 < dav1d> but for how long :/ 11:58 < dav1d> and no yt/streams 11:59 < nyuszika7h> dav1d: is your plan limited, or is it pay for usage? 11:59 < dav1d> 1GiB/month 11:59 < nyuszika7h> 100 MB/month here 11:59 < nyuszika7h> for 1000 HUF, that is... 11:59 < dav1d> ah nvm 11:59 < dav1d> 2GiB/month 11:59 < nyuszika7h> $4.6, and 3.4 EUR 12:00 < dav1d> paying 10€, 1k free minutes, 1k free sms, 1k free minutes into the same net 12:00 < dav1d> and the 2GiB internet 12:00 < nyuszika7h> dav1d: here, it's about 9000-10000 HUF/month for internet, phone and TV combined 12:01 < dav1d> so 50€? 12:01 < nyuszika7h> ADSL2+ 15M/900k (usually around 10M/768k, sometimes goes above that) 12:01 < dav1d> yeah we pay the same @home 12:01 < nyuszika7h> no, 30-34 EUR 12:01 < nyuszika7h> according to Google 12:01 < dav1d> we pay around 40€ 12:02 < nyuszika7h> also we have satellite TV with almost 100 channels 12:02 < dav1d> almost 100?^^ 12:02 < nyuszika7h> I think so 12:02 < dav1d> our satellite has more than 2k 12:02 < dav1d> (we don't use it no more though) 12:02 < nyuszika7h> *sigh* 12:02 < nyuszika7h> restarting i3 doesn't make it source /etc/profile 12:02 < nyuszika7h> time to source it manually 12:03 <+sadimusi> nyuszika7h: how can you survive on 768k up? 12:04 < nyuszika7h> sadimusi: I don't upload that much, for what I upload (rsyncing stuff from/to my server) it's usually enough, except for a few cases 12:04 < Flemmard> whatever bandwidth you have, it's *never* enough :> 12:05 <+sadimusi> I pay around $70 for TV (only around 50 channels) + Phone (don't use it) + Internet (150m/10m) 12:05 <+sadimusi> and for all practical purposes that's fast enough 12:05 < dav1d> switzerland... 12:06 < nyuszika7h> Client> [12:06:08] [MCO Availability Checker #1/ERROR]: Couldn't connect to Realms 12:06 < nyuszika7h> seems legit 12:06 < nyuszika7h> ._. 12:06 < nyuszika7h> why doesn't the launcher pass _JAVA_AWT_WM_NONREPARENTING to MC? 12:07 < nyuszika7h> I'll try wmname 12:07 < nyuszika7h> community/wmname 0.1-2 12:07 < nyuszika7h> An utility to set the name of your window manager 12:07 < nyuszika7h> "an" 12:07 < nyuszika7h> seems legit 12:09 < nyuszika7h> heh 12:09 < nyuszika7h> nyuszika7h@ymlyna ~ % wmname --help 12:09 < nyuszika7h> nyuszika7h@ymlyna ~ % wmname 12:09 < nyuszika7h> --help 12:09 < nyuszika7h> dav1d: what was the wmname trick? 12:09 < dav1d> wmname LG3D 12:09 < nyuszika7h> thanks 12:09 < dav1d> but it has sideeffects 12:09 < dav1d> clicking on links automatically switches to chromium etc. 12:09 < dav1d> I don't like that 12:09 < nyuszika7h> dav1d: doesn't work :/ 12:10 < nyuszika7h> oh 12:10 < dav1d> well, the parenting thing works for me 12:10 < nyuszika7h> toggling floating mode on and off helps 12:12 < nyuszika7h> also 12:12 < nyuszika7h> there really should be an option to log commands in the vanilla server 12:12 < nyuszika7h> and make "Game rule has been updated" messages more meaningful, like CraftBukkit does it 12:13 < nyuszika7h> well 12:13 < nyuszika7h> ok, MC starts fast with just ALSA 12:13 < nyuszika7h> time to install PA 12:13 < nyuszika7h> what I never understood is, why are ALSA volumes so weird without PA? 12:14 < nyuszika7h> you can't have exactly 50% and stuff 12:14 < nyuszika7h> it goes 48, 52, 56 12:15 < nyuszika7h> WTF 12:15 < nyuszika7h> I did "sudo systemctl restart sound.target" 12:16 < nyuszika7h> 'Welcome to emergency mode!" 12:16 < nyuszika7h> back 12:19 < nyuszika7h> ugh, can't get PA to work 12:22 < nyuszika7h> ok, works now 12:31 < nyuszika7h> woo, automatic wireless setup also works now 12:33 < nyuszika7h> weird, I can't reproduce the issue with PA 12:33 < nyuszika7h> 13w41a starts normally 12:34 < nyuszika7h> I wonder why some messages don't have timestamps, btw 14:05 < dav1d> because they are printed rather sent through the logger? 14:09 < nyuszika7h> dav1d: maybe 14:09 < nyuszika7h> s/maybe/I guess/ 14:09 < nyuszika7h> also, can't reproduce the PulseAudio issue even with GNOME 3 14:09 < nyuszika7h> it starts up quite fast 14:10 < nyuszika7h> also, the new look of GNOME 3 is so much better than the earlier look 14:10 < nyuszika7h> the default background is slightly more vivid too 14:10 < nyuszika7h> though I still lack a taskbar or similar 14:47 < nyuszika7h> Dinnerbone: for when you're back - I can't reproduce the OpenAL freeze issue 14:48 < nyuszika7h> Linux ymlyna 3.11.4-1-ARCH #1 SMP PREEMPT Sat Oct 5 21:22:51 CEST 2013 x86_64 GNU/Linux 14:48 < nyuszika7h> pulseaudio 4.0-265-g35fe 14:48 < nyuszika7h> I'll post that on Mojira later... however now I have to go. 15:28 < nyuszika7h> friend reproduced bug on: 15:28 < nyuszika7h> Linux laptop 3.7.10-1.16-desktop #1 SMP PREEMPT Fri May 31 20:21:23 UTC 2013 15:28 < nyuszika7h> pulseaudio 3.0 15:34 < nyuszika7h> can't reproduce on: 15:34 < nyuszika7h> Linux dash 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1+deb7u1 x86_64 GNU/Linux 15:34 < nyuszika7h> pulseaudio 2.0 15:35 < nyuszika7h> first uname: Arch Linux, second uname: openSUSE 12.3, third uname: Debian 7.1 (wheezy) 17:59 < AlphaBlend> how long can the player name be in the TAB window? 17:59 < AlphaBlend> i have a feeling the limit was increased a vew versions back 17:59 < Calinou> don't know but it depends on max players (more max players = more columns) 17:59 < Calinou> else it'll look weird 17:59 < AlphaBlend> no, the actual length of each name 18:00 < AlphaBlend> if it was over 15 in the past it would crash the client with name length too long 18:00 < AlphaBlend> that's why i'm saying i feel as if this was changed recently 18:00 < AlphaBlend> as i went on a server that had custom name lengths over 15 18:02 < Thinkofdeath> AlphaBlend: In the snapshot its 16 18:03 < AlphaBlend> hm 19:14 < redstonehelper> if alphablend comes back someone should remind him the scoreboard prefixes and suffixes are displayed as well 19:15 <+sadimusi> die anybody check how many players are sent with the server list ping? 19:20 < Dinnerbone> Up to 12 random players on the server 20:01 < TkTech> Dinnerbone: What was the reasoning behind 12 random players? 20:01 < Dinnerbone> Arbitrary limit, but more than a dozen doesn't make too much sense 20:01 < Dinnerbone> It's only useful for smaller servers 20:03 < TkTech> Just thinking. Plenty of servers don't have query enabled so there's no way to get the full player list. 20:04 < Dinnerbone> The server status packet is not intended to replace query right now 20:05 < Dinnerbone> For larger servers it would just be a waste to send so much data every ping 20:06 < Dinnerbone> I may be adding some data to the status request to ask for larger queries though, so we'll see 20:11 < TkTech> Yeah, a simple optional byte tools can set (or can be used in the client for a "Server Details" frame) to get all of them. 20:12 < TkTech> Chunk the response and give it lower IO priority for the servers with hundreds of players. 21:28 <+clonejo> Minecraft's varints are always unsigned, aren't they? 22:37 < Not-002> [netherrack] thinkofdeath pushed 1 commit to master [+5/-1/±7] http://git.io/Ng4Obg 22:37 < Not-002> [netherrack] thinkofdeath ae1d49a - all: Update to 13w41a. Some things are still broken 22:47 < Not-002> [netherrack] thinkofdeath pushed 1 commit to master [+0/-0/±4] http://git.io/hPwmcg 22:47 < Not-002> [netherrack] thinkofdeath 6dfbc52 - protocol: Corrected UseBed -> PlayerDigging 22:56 < ellisvlad> Hello World! 22:59 < ellisvlad> I don't suppose anyone knows anything about the huge server protocol changes in the snapshot xD 23:00 < Thinkofdeath> ellisvlad: http://wiki.vg/Pre-release_protocol 23:00 < Thinkofdeath> (Not updated to 13w41b yet) 23:04 < ellisvlad> ooh, thank you :P 23:09 < ellisvlad> Fun weekend ahead of me... attempting to add the new protocol to my C++ Minecraft server ;D 23:12 < Drainedsoul> if your C++ server is well-designed it shouldn't be difficult 23:12 < Drainedsoul> if it's difficult, might be time to pay off design debt. 23:19 < ellisvlad> :P It's not going to be hard, just I see myself missing something obvious and getting really mad in a few hours... 23:27 < Not-002> [bravo] MostAwesomeDude pushed 3 commits to master [+0/-0/±3] http://git.io/bYN-Bw 23:27 < Not-002> [bravo] Corbin Simpson 5f24385 - beta/protocol: Use hex numbers in logs. 23:27 < Not-002> [bravo] Corbin Simpson c724d24 - blocks: Add spawn egg. Refs #402. 23:27 < Not-002> [bravo] Corbin Simpson 402ac3a - blocks: Add nether star and beacon. Refs #413. 23:28 < Not-002> [bravo] MostAwesomeDude pushed 1 commit to master [+0/-0/±1] http://git.io/Nl91Dw 23:28 < Not-002> [bravo] Corbin Simpson 8206e48 - policy/recipes/blueprints: Add recipe for crafting beacons. Refs #413. 23:30 < Drainedsoul> ellisvlad: what C++ are you using? 23:36 < ellisvlad> Drainedsoul: What do you mean? :P C++11, linux? 23:36 < Drainedsoul> yeah, C++84, 98, 11, 11 w/some 14, etc. 23:47 < ellisvlad> mainly 98, with a bit of 11 to make chunk mapping a little easier :P 23:47 < Drainedsoul> :[ 23:47 < Drainedsoul> saddest thing I've heard all day 23:48 < Grum> I don't suppose anyone knows anything about the huge server protocol changes in the snapshot xD <-- i do ;) 23:49 < dav1d> haha 23:49 < dav1d> would be horrible if you wouldn't 23:49 < ellisvlad2> ahaha 23:49 < Grum> not really, jens knows nothing about it for example 23:51 < ellisvlad2> I imagine you've been asked this a lot... But, why are all the strings becoming JSON formatted? :P 23:52 < Thinkofdeath> ellisvlad2: They are removing § and replacing with json 23:54 < Not-002> [netherrack] thinkofdeath pushed 1 commit to master [+0/-0/±6] http://git.io/qA4X6g 23:54 < Not-002> [netherrack] thinkofdeath 4804a47 - protocol: Updated to 13w41b 23:56 < benbaptist> yeah, JSON seems more logical and cleaner than using JSON. 23:56 < benbaptist> erm 23:56 < benbaptist> yeah, JSON seems more logical and cleaner than using the dollar symbol for seperating fields* 23:57 < ellisvlad2> I prefer to use escape characters ;) my server software only converts to JSON right before teh packet is sent :P 23:58 < benbaptist> Ah, heh 23:58 < benbaptist> I do that as well with my server software 23:58 < benbaptist> I should probably consider updating it to the snapshots, or, at least, 1.6.4 23:58 < Drainedsoul> why would your server software use special strings internally 23:58 < Drainedsoul> isn't that what data structures are for? --- Day changed sam. oct. 12 2013 00:00 < benbaptist> woah, the java virtual machine is suddenly crashing every time I open the game. 00:00 < ellisvlad2> :P but I mean in my little string builder class, any text formatting etc. is still done with escape codes :P 00:01 < Drainedsoul> ...isn't that what data structures are for 00:01 < ellisvlad2> xD I suppose, I still like to avoid JSON until the final stages of dealing with an outbound packet though :P 00:03 < ellisvlad2> I'm sure a lot of the code in this project would make many programmers cry :P 00:04 < Drainedsoul> yeah I do that to, but I don't use escape codes internally 00:04 < Drainedsoul> https://github.com/RobertLeahy/MCPP/blob/master/include/chat/chat.hpp#L17 00:04 < Drainedsoul> internally chat messages etc. are just a stream of tokens 00:04 < ellisvlad2> *finds a particularly horribly written piece of code*... 00:05 < benbaptist> heh 00:06 < benbaptist> In Python, I mostly just use parameter='hello'-type variables when passing onto a function when working with any packet, including ones with JSON 00:06 < benbaptist> the JSON is done within the packet's function 00:06 < ellisvlad2> https://gist.github.com/ellisvlad/69368c76c6733f5e4432 00:06 < benbaptist> https://github.com/benbaptist/pymine2/blob/master/packets.py 00:06 < ellisvlad2> It will make you cry! 00:07 * benbaptist cries 00:08 < ellisvlad2> :P 00:10 < Thinkofdeath> http://wiki.vg/Pre-release_protocol Updated 13w41b 00:11 < Drainedsoul> sprintf, what language is this 00:11 <+sadimusi> benbaptist: how do you create a packet? just create the dict manually? 00:12 < benbaptist> sadimusi, You pass parameters to the function like you would normally, although with key variables, you can define them out of order. e.g. login_request(entity_id=5, difficulty=2, level_type='magical') 00:12 < benbaptist> and I don't have to specify every parameter. some can be kept at their defaults 00:12 <+sadimusi> benbaptist: so you define all packets twice? 00:13 < dav1d> clonejo: btw I missed your query, sorry about that, I'll be there tomorrow 00:13 < dav1d> internet issues ate my highlights 00:13 < benbaptist> sadimusi, No, I don't understand what you mean 00:13 <+sadimusi> ellisvlad2: I should totally register a new minecraft account called "';drop table users;--" 00:13 < benbaptist> LOL 00:14 < ellisvlad2> xD 00:14 < benbaptist> the new snapshot's protocol version is 0? 00:14 <+sadimusi> benbaptist: where is this login_request function defined? all I can find is the parsing method which defines every packet 00:14 <+sadimusi> yes 00:14 < ellisvlad2> I run injection checks on the player's username when they join the server xD 00:14 < benbaptist> wpah. weord/ 00:15 < benbaptist> sadimusi, https://github.com/benbaptist/pymine2/blob/master/packets.py line 57 00:15 < Drainedsoul> or you could just use prepared statements 00:15 <+sadimusi> benbaptist: oh, I didn't really read the method names 00:16 <+sadimusi> benbaptist: I thought those were all types 00:16 <+sadimusi> benbaptist: so you do define them twice. once for parsing and once for sending 00:16 < barneygale> you probably want a packet object with .read() and .write()? 00:18 <+sadimusi> benbaptist: maybe take a look at this https://github.com/sadimusi/mc4p/blob/master/mc4p/messages.py#L54 00:18 <+sadimusi> benbaptist: you probably don't want to copy the way packets are constructed from mc4p, but the definitions are pretty good 00:20 < benbaptist> yeah 00:20 < Thinkofdeath> Grum: Any idea what causes this: http://hopper.minecraft.net/crashes/minecraft/MCX-318554/ (Seems to happen sometimes when connecting to my server but not vanilia) 00:21 < benbaptist> That looks pretty cool 00:46 < Grum> Thinkofdeath: you edited the server 00:49 < Grum> Thinkofdeath: 13w41b - Removed 0x08, 0x09, 0x0A, Removed unused fields from Player Position and Look and Join Game <-- we did far more than that 00:50 <+sadimusi> Grum: did you really remap all the packet ids after removing those? 00:50 < Grum> obviously 00:50 < Grum> and that will continue to happen 00:50 <+sadimusi> that would have been my next question 00:50 < Grum> god order will even change when we rename them 00:50 < Grum> (and i sort the classes :D) 00:50 <+sadimusi> this will make it really difficult to memorize packet ids :/ 00:51 <+sadimusi> guess we'll have to refer to them by name in the future 00:51 < dx> well, he wanted packet ids to be varints for a reason 00:51 < Grum> you cannot even name them by their number 00:51 < dx> (i believe that reason is because he hates remembering packet ids) 00:51 <+Amaranth> He expects to have more than 255 of them? 00:51 < Grum> unless you want to conveniently forget the other 4 'packet 0's :D 00:52 <+sadimusi> true 00:52 < Grum> i kinda do not want to have more than 30 :p 00:52 < dx> from what i gathered grum wanted to avoid reusing packet ids 00:52 < Grum> no i said we could if we cared to 00:53 < Grum> i do not care ot 00:53 < Grum> i am actually going to remove the ids 00:53 < Grum> and have it auto-assign 00:53 < dx> poor ids 00:53 < dx> we'll miss them 00:53 * Amaranth tries to think of what packet sends a single bool 00:53 < Drainedsoul> Player? 00:53 <+Amaranth> Err, single byte 00:53 <+sadimusi> that is just one giant fuck you to everyone building any kind of protocol library 00:53 < Grum> sadimusi: why? we can do it 00:53 < dx> yes indeed, you can say "fuck you" 00:54 <+Amaranth> He can build a protocol library :P 00:54 < Grum> we have a protocol library O.o 00:54 <+sadimusi> yes, but yours automatically updates :P 00:54 <+Amaranth> The numbers really aren't that useful 00:54 < Grum> oh, i am considering making all packets default scoped =) 00:54 <+Amaranth> Default scoped... what? 00:54 < Grum> yeah erm 00:54 < Grum> whats it called 00:55 < Grum> not public :P 00:55 < Grum> oh package .... errr fuck lost the name 00:55 < Dinnerbone> Default. But that's still as silly as you suggested it earlier. 00:55 <+Amaranth> Package private 00:55 < dx> i'm so lost with all these changes that i have no idea if they make sense anymore, or if grum and dinnerbro just went insane out of rage for the old protocol 00:55 < Grum> 'no modifier class access level' -- package private 00:55 <+Amaranth> Making things package private makes CraftBukkit a lot harder :P 00:55 <+Amaranth> Have to import things from mc-dev with zero changes just to make the compiler shut up 00:55 < Grum> its packets 00:56 < Grum> no-one does shit with packets 00:56 <+Amaranth> So not a lot harder 00:56 < Grum> and better, no-one SHOULD Do shit with packets >:) 00:56 <+Amaranth> CraftBukkit imports like 5 of them 00:56 < dx> a lot of people do shit with packets from bukkit plugins, but nobody wants to admit it 00:56 < Grum> dx: hehe yeah enjoy doing all that through reflection 00:56 <+Amaranth> dx: No one wants to _support_ it, big difference 00:56 < dx> fun 00:57 <+sadimusi> Grum: pretty much every protocol implementation out there is built on the assumption that the packet ids stay the same between updates 00:57 < Grum> sadimusi: so they are all wrong 00:57 < Grum> i mean, they also assumed they were unique 00:57 < Grum> they were, until they arent 00:57 <+sadimusi> adding protocol state isn't a huge problem 00:57 < Grum> you think this is painful? hehe imagine what happens when player names are not unique anymore (or rather, not the leading identifier for a person) 00:57 < barneygale> yeah, that's fine... 00:58 < barneygale> also, the eventual move to uuids won't really affect /protocol libraries/ will it? 00:58 < Dinnerbone> Not likely 00:58 < barneygale> remapping packet IDs between versions is a rung above that on the ladder 00:58 < Grum> yes it will .. obviously 00:58 < Grum> but not massive 00:59 < Dinnerbone> Nothing talks in names over protocol 00:59 <+sadimusi> Grum: course it's possible to switch everything to packet names, but you're just forcing everything to do a lot of work for virtually no benefit 00:59 < Grum> i mean 1.7 is the bigger change :P 00:59 < dx> oh man 00:59 < Dinnerbone> But you'll get small impact in terms of extra knowledge about player profiles 00:59 < dx> i'm sorry we whined so much about json chat 00:59 < Grum> sadimusi: we're not forcing you to make libraries 00:59 < dx> really really sorry 00:59 < Grum> dx: oh what? lol ... 00:59 < Grum> BUT IT SUCKS HOW COULD HTEY EVER USE JSON 00:59 < Grum> OMG SO BIG SO SUCK 00:59 <+AndrewPH> such suck 01:00 <+sadimusi> I would have expected NBT :) 01:00 <+Amaranth> I actually argued that they should have used NBT 01:00 <+Amaranth> Because doing half of one and half of the other is worse than doing all NBT 01:00 < Dinnerbone> I hear NBT is an awesome format that we and everybody loves 01:00 < Grum> nbt sucks so badly its ....... sigh 01:00 < dx> here we go again? 01:01 < barneygale> I quite enjoyed implementing nbt decoding, but as a format it sucks :P 01:01 * Dinnerbone waddles off 01:01 <+Amaranth> Storing data in NBT is probably more bytes than doing so in JSON 01:01 < Drainedsoul> what kind of data? 01:02 <+Amaranth> Let's just say "in general" 01:02 <+Amaranth> You could make test cases that show it either way 01:02 < Drainedsoul> Storing numbers -- for example -- in JSON is pretty inefficient once you get above 4 digits. 01:02 < Grum> bad/nonexisting api, not tested, just sad 01:02 < dx> Amaranth: but it doesn't even have a binary string data type 01:02 <+Amaranth> And then any overhead on bandwidth JSON would add is fixed with gzip 01:02 < dx> have fun storing chunks in json :P 01:03 <+Amaranth> dx: Nah for that you use msgpack of course :D 01:03 <+Amaranth> Or "bson", that abortion of an encoding 01:03 < Grum> not sure howe we got into chunks 01:04 < Grum> also storing chunks is trivial 01:04 < Grum> its byteblobs. .... 01:04 < Grum> the entities+data is different however 01:04 < Grum> and then mostly data 01:04 <+Amaranth> Actually msgpack wouldn't be a terrible idea if you really are looking to get rid of NBT 01:05 <+Amaranth> It fits your criteria. It's fast, small, can store binary data, and you don't have to write it yourself 01:06 < Drainedsoul> writing metaprograms to write a packet parser 01:06 < Drainedsoul> so much fun 01:08 < Grum> i dont like msgpack .... for the fact it has 'nil' :( 01:09 < dx> definitely a deal breaker 01:14 < Grum> hehe hardly 01:15 < barneygale> Grum: how are you going to assign packet IDs, if you're not doing it by hand anymore? arbitrary (e.g. hash of class)? 01:17 < Grum> id++ 01:18 < barneygale> for some ordering of classes that might change between versions? 01:19 < dx> changing between versions doesn't seem to be an issue 01:19 < Grum> like we do now, we register server and client bound packets by hand, we just do ++ on each registration, done? 01:19 < Grum> i am not sure why changing protocol between versions matters 01:19 < dx> Grum: it matters with the old way of thinking about packet ids 01:19 < Grum> it literally doesn't work otherwise 01:19 < Grum> well, stop the old way of thinking O.o 01:20 < dx> i'm just pointing it out lol 01:20 < Grum> me too lol 01:20 < dx> lol 01:21 < dx> if i keep laughing out loud so often people around me will ask me what's so funny and i won't know how to explain it 01:23 < Grum> just tell them: "You should have been there" 01:44 < TkTech> sadimusi: Happen to enjoy Flask? 01:44 <+sadimusi> TkTech: yes, why? 01:45 <+sadimusi> (I wrote both minecraftskins.net and my bachelor's thesis with flask) 01:54 < dx> flask is <3 01:55 <+sadimusi> oh, and http://face.minecraftservers.org/TkTech runs on flask as well 01:55 <+sadimusi> so does http://stats.minecraftservers.org 01:55 <+sadimusi> so you could say I like flask very much 01:55 < dx> tktech's face runs on flask, the rest of it is php 01:55 <+sadimusi> the main site is php 01:55 <+sadimusi> sadly 01:56 < dx> i guess i wasn't so far off 01:56 <+AndrewPH> flask is gr8 :) 01:56 < dx> sadimusi: got any experience with "plone"? 01:56 <+sadimusi> never heard of it 01:57 < dx> python cms that uses a framework that is probably one decade old 01:58 < dx> ...welp, 15 years old 01:58 < dx> i'm going to have to mess with plone soon and i'd like to know how far it is from the niceness of flask and others 01:59 <+sadimusi> just telling from a few random doc pages I wouldn't use that thing voluntarily 02:00 <+AndrewPH> I've got a flask thing running via uwsgi behind nginx, and it can handle 1.5k concurrent connections without an issue, I got pretty amazed. 02:00 <+AndrewPH> ('course that's on a static template page, but with mysql it hits 250, my current connection limit, and doesn't sweat. mysql doesn't like it though lol) 02:00 <+sadimusi> the face service runs on nginx as well, but I haven't yet seen it under real user load 02:01 < dx> AndrewPH: nice! 02:01 <+AndrewPH> loader.io 02:01 <+sadimusi> looks cool 02:01 <+AndrewPH> ^not my app, I use it for load testing stuff 02:01 < dx> cloud based DoS 02:01 <+AndrewPH> hehe yeah 02:02 <+sadimusi> AndrewPH: I assumed as much 02:02 <+AndrewPH> but you have to confirm your site as your own 02:02 <+AndrewPH> so there's that 02:02 < dx> cool then 02:03 <+sadimusi> AndrewPH: without an option to use random URLs this service is pretty useless 02:03 <+sadimusi> for my purposes 02:03 <+AndrewPH> sadimusi: provide a way for the server to treat one url as random urls? 02:03 < dx> a random redirection url? 02:04 <+AndrewPH> yeah but all internal 02:04 <+AndrewPH> like no redirects are sent to the browser 02:04 <+sadimusi> but that means work for me :P 02:04 <+AndrewPH> true 02:04 < dx> lol 02:04 <+sadimusi> maybe I'll try that later 02:04 <+sadimusi> right now I have to get the main site running properly 02:04 < dx> well that kind of "redirect" is trivial with wsgi 02:06 <+sadimusi> the faces already look pretty great :) http://d.pr/i/qAI1 02:16 < TkTech> sadimusi: Trying a one-night project, going to bug you to try it tomorrow/tonight :) 10:50 < Thinkofdeath> Grum: Well back to looking for changes then 10:55 < Grum> Thinkofdeath: most of them are subtle things where we read stuff properly (signed vs unsigned), we renumbered some of those constants send in the code 10:56 < Grum> some packets only had one constant, so they just turned into a packet of that type 10:57 < Grum> soon we'll be working on the whole x,y,z conendrum 10:57 < Grum> we'll probably for block-coords pack it into a long 10:58 < Grum> for entity-coordinates we'll use that and 3xbyte for 1/256th of a block as resolution 10:58 < Grum> (which at 64+24 is still cheaper and more accurate than 3 floats) 10:59 < Thinkofdeath> Nice 11:00 < Not-002> [netherrack] thinkofdeath pushed 1 commit to master [+0/-0/±2] http://git.io/U6oCBQ 11:00 < Not-002> [netherrack] thinkofdeath 3fb1748 - protocol: minor fix 11:00 < Not-002> [netherrack] thinkofdeath pushed 2 commits to master [+0/-0/±2] http://git.io/E1SNIw 11:00 < Not-002> [netherrack] Cubixmeister 19ceb3e - protocol: Major optimizations in cfb8. Avoids 2 copies for every streamed byte. 11:00 < Not-002> [netherrack] thinkofdeath ed20de4 - Merge pull request #68 from Cubixmeister/master protocol: Major optimizations in cfb8. 11:54 <+md_5> Grum can we do something about 1.7 server replying to 1.6 ping :p 11:54 <+md_5> fix it! 11:55 <+md_5> add a magic header that is the ascii "minecraft" string to the start of each connection 11:57 < ellisvlad> 1.7 server replying to 1.6 ping is fine, I think. You could have a different MotD displayed, like: "We are on Minecraft 1.7! Reconnect in the updated cilent!" 11:58 <+md_5> ellisvlad no, a) vanilla doesnt, b) you cannot reliably detect a 1.6 ping from 1.7 11:59 < ellisvlad> I mean it could be added to vanilla, or left as an option for custom servers. I noticed 1.6 ping uses a different Packet ID, doesn't it? 12:00 < ellisvlad> 1.6 does give the protocol version in 0xFE C->S 12:04 < ellisvlad> Also, just a little thing I love about the kick packet S->C when pinged... Changing the string for the version number :P http://puu.sh/4O4ny.jpg 12:06 < ellisvlad> Ahh, exploring all my old screenshots... Good memories :P 12:35 < Grum> md_5: what? 1.7 server replies to 1.6 pings 13:26 < Thinkofdeath> Grum: Ok so I might of missed a few changes :P http://wiki.vg/Pre-release_protocol#13w41b 13:30 < Grum> Thinkofdeath: told ya! nice job :D 13:31 < Thinkofdeath> Grum: You still have more Entity IDs to change to VarInts :) 13:32 < Dinnerbone> We have only done an initial review on about a third of the packets 13:32 < Grum> took ~3-4hrs :p 13:32 < Dinnerbone> There's lots more to do 13:32 < Thinkofdeath> Ah ok then 13:32 < Grum> lots more to come on mondays ;) 13:32 < Grum> oh that note, i'm going to think of how to store x,y,z in a long! 13:33 < Grum> especially unsure about the whole unpacking and keeping the sign properly 13:35 < Grum> Thinkofdeath: you might want to make a note @ Protocol version; that eventhough it is both 0 its 100% backwards incompatible for the two snapshots 13:35 < Grum> (because of the port varint->short change) 13:36 < Thinkofdeath> Grum: Done 20:51 < Drainedsoul> so arrays in the protocol still aren't prefixed with a consistent type? 20:56 < Thinkofdeath> Drainedsoul: Not yet 20:56 < Thinkofdeath> Drainedsoul: There's lots more to do <- So it may still happen 20:57 < Cubix> Have anyone thought about replacing CFB with more efficient mode? 21:07 <+md_5> md_5: what? 1.7 server replies to 1.6 pings 21:07 <+md_5> did not for me 21:07 <+md_5> conclusion: buggy 21:07 < Drainedsoul> is there any other conclusion wrt Minecraft? 21:09 < Thinkofdeath> md_5: Works fine here (Server:13w41b Client:1.6.4) 21:11 <+md_5> Thinkofdeath I was using 41a 21:11 <+md_5> so mebbe 21:18 < Grum> yeah 41a != ok 21:18 < Grum> b works 21:19 <+md_5> Grum how did you do it? check 0xfe01fa ? 21:20 < Grum> worse 21:32 <+Amaranth> Timing? 21:33 < Grum> nah we read the full packet and check every single little piece of it 21:33 < Grum> if anything doesnt work out we revert to the normal protocol 22:35 < Not-002> [netherrack] thinkofdeath pushed 2 commits to master [+0/-0/±15] http://git.io/NrxvSA 22:35 < Not-002> [netherrack] thinkofdeath 8061749 - protocol: packets now have ids automatically assigned to them 22:35 < Not-002> [netherrack] thinkofdeath 8df8614 - protocol: Updated packets to correctly reflect 13w41b changes. Fixed VarInt encoding and added VarInt length support for arrays 22:36 < Drainedsoul> thinkofdeath: "[...] added VarInt length support for arrays" ? 22:37 < Thinkofdeath> Drainedsoul: http://wiki.vg/Pre-release_protocol#Statistics 22:37 < Drainedsoul> thinkofdeath: ah okay --- Day changed dim. oct. 13 2013 00:28 < frostyfrog> Hmmm, out of curiosity, is it possible to play LAN with a single account? (Doesn't appear to be possible anymore to me) 00:29 <+sadimusi> you just have to spoof the username 00:29 <+sadimusi> or are you talking about the snapshot? 00:29 < frostyfrog> nope, not the snapshots. 00:30 < frostyfrog> My paren't don't really want to give my 5 year old brother an email address, that why I was asking. (Probably should've joined #minecraft and asked there though >_>) 00:30 <+sadimusi> just use a throwaway address if that's the issue 00:31 <+sadimusi> even though it would certainly be possible to spoof the name, we won't help you pirate the game 00:33 < frostyfrog> I always see the issue of using a throwaway email as... I can't change it later when he actually can get an email (as far as I understand anyways) 00:34 <+sadimusi> you never need to receive any emails besides the initial activation 00:34 <+sadimusi> so just use a long and random address and forget about it 00:34 < frostyfrog> but you have to log in with the email, correct? 00:34 <+sadimusi> right 00:34 <+sadimusi> so maybe not long and random 00:35 <+sadimusi> why not just use your parent's address? there probably the ones paying for it anyway 00:36 < frostyfrog> Yeah, but again. the issue there comes down to transfering the game to a different email address later. 00:36 <+sadimusi> why can't you just keep using your parent's address? do they need accounts for themselves as well? 00:41 * frostyfrog sighs, as they relize that this conversation is going nowhere. 00:41 < frostyfrog> Darn typos :/ 00:41 <+sadimusi> it just sounds more like you don't want to pay for it 00:42 <+sadimusi> setting up an email address, disposable or not, really only takes a minute 00:43 < frostyfrog> More like, we already have 3 copies for different people, but doing it your method would, in essence, require us to by 2 more. One for the "family", owned by the parents, and one for each individual (As they are allowed to get an email) 00:46 <+sadimusi> if you already have 3 copies, where is the problem? 00:46 < frostyfrog> if all 3 of those people are playing together, brother number 4 can't join in. 00:46 <+sadimusi> then just buy one more copy 00:47 <+sadimusi> you will be able to change the email address later btw 00:49 < frostyfrog> Oh hey look, it is possible :) Why didn't you say so before? 00:49 <+sadimusi> because I didn't think it way 00:49 <+sadimusi> *was 00:49 < frostyfrog> Sweet! Thank you sadimusi =) 02:19 < Not-002> [bravo] brutal-chaos pushed 1 commit to master [+0/-0/±1] http://git.io/dUGNUA 02:19 < Not-002> [bravo] Justin Noah 81ad3f9 - readme: dropped Windows support 12:06 < Drainedsoul> why is player UUID a string in the new "Spawn Player" packet? 12:09 < SinZ> uuid is slowly replacing player names 12:10 < SinZ> so playername renaming will work more 12:14 < Drainedsoul> but isn't a UUID just a 128-bit integer? 12:47 < ellisvlad> Quick question about the Ping response in the new protocol.. 12:47 < ellisvlad> What are the last four bytes? 12:47 < ellisvlad> http://puu.sh/4OVvO.png 12:52 < ellisvlad> Or in fact the whole last line xD 12:57 < Thinkofdeath> ellisvlad: http://wiki.vg/Pre-release_protocol#Ping 12:58 < ellisvlad> ...wow xD 12:59 < ellisvlad> I swear I do actually read the wiki pages first :P 12:59 < Thinkofdeath> :) 13:00 < ellisvlad> ...that would explaine why when I used the time from my sample ping packet the client showed a ping of a few minutes xD 13:00 < Thinkofdeath> lol 13:08 < ellisvlad> Woo! http://puu.sh/4OW8H.png 13:21 < Thinkofdeath> ellisvlad: Got the icon working yet? 13:50 < Grum> Drainedsoul: depends on implementation 20:10 < LaxWasHere> Haaai 20:11 < pdelvo> hey 20:30 < iBotPeaches> notifico :( 21:48 < Not-002> [netherrack] thinkofdeath pushed 5 commits to master [+1/-1/±18] http://git.io/kgr2WQ 21:48 < Not-002> [netherrack] thinkofdeath 96bb21f - protocol: minor fix 21:49 < Not-002> [netherrack] thinkofdeath 53d6668 - entity: slightly cleaned up entity handling 21:49 < Not-002> [netherrack] thinkofdeath ad27365 - entity: fix ticking 21:49 < Not-002> [netherrack] thinkofdeath adcca4f - all: Change event handling 21:49 < Not-002> [netherrack] thinkofdeath d7c84c4 - world: support time and world unloading. Also fixed some data races 21:49 < Eviltechie> another not bot 21:49 < Eviltechie> :/ 21:51 < dx> Eviltechie: if you look at the name, it's supposed to handle up to 999 instances! 21:51 < Eviltechie> that's dandy 21:52 < dx> but right now it's more like 999 channels per instance 21:52 < Eviltechie> I guess I'll have to /ignore Not-[.*?] then 21:52 < dx> yeah 21:52 < dx> errr 21:52 < dx> your regexp is weird 21:52 < Eviltechie> it might be wrong 21:53 < dx> just do Not-[0-9]+ 21:54 < Eviltechie> meh 21:54 < dx> don't meh me, yours is broken 21:55 < Eviltechie> meh meh meh meh 22:18 < pdelvo> Not-\d{3} 22:34 < Eviltechie> pdelvo: what if it's in base 16? 22:34 < pdelvo> what if its not? :D 22:49 < Drainedsoul> I don't see how you can be on IRC and get irritated by a bot that spits a few lines out 22:50 < Drainedsoul> amidst the sea of people leaving and joining, that's what bothers you? 22:50 < Eviltechie> When people talk, the channel shows up in white. And then I get hopeful that something interesting is going on. 22:50 < Eviltechie> parts/joins are dark blue, and I can safely ignore those 22:51 < Drainedsoul> well something is going on. Someone pushed a commit :D --- Day changed lun. oct. 14 2013 04:39 < TkTech> Eviltechie: Your client so archaic it doesn't support /ignore -regex Not-(.*) 06:14 < Eviltechie> TkTech: Like irssi archaic? 06:23 < TkTech> ./IGNORE -regexp -pattern "Not-..." * ALL 06:23 < TkTech> ThatWasEasy™. 06:24 < Eviltechie> What if the bot suddenly starts doing something besides commit messages 06:24 < Eviltechie> Wouldn't want to miss that 06:27 <+AndrewPH> it won't 06:28 < Drainedsoul> thinkofdeath: You around? 09:24 < Not-002> [MCPP] RobertLeahy pushed 3 commits to master [+4/-0/±1] http://git.io/HZcZKw 09:24 < Not-002> [MCPP] RobertLeahy 5aea36f - Variant 09:24 < Not-002> [MCPP] RobertLeahy eca18d0 - JSON 09:24 < Not-002> [MCPP] RobertLeahy 16b7b00 - Makefile Improvements 10:28 < Not-002> [MCPP] RobertLeahy pushed 1 commit to 1_7_protocol [+0/-0/±3] http://git.io/10dwwA 10:28 < Not-002> [MCPP] RobertLeahy 43eb462 - Start of 1.7 Protocol 12:20 < Thinkofdeath> Drainedsoul: Yep? 12:30 < Drainedsoul> Thinkofdeath: Your gists with JSON in them have too many commas 12:31 < Thinkofdeath> Which ones? 12:31 < Drainedsoul> https://gist.github.com/thinkofdeath/e882ce057ed83bac0a1c there's a comma on line 83 12:32 < Drainedsoul> https://gist.github.com/thinkofdeath/6927216 lines 4, 11, 14 12:33 < Drainedsoul> when pitch etc. are sent as bytes, in steps of 2pi/256, is that sent as an unsigned byte, where the angle is between 0 and 2pi radians, or is it sent as a signed byte, between -pi and pi radians? :| 12:34 < Thinkofdeath> Signed 12:35 < Thinkofdeath> (Fixed the json) 12:35 < Drainedsoul> thanks 12:35 < Drainedsoul> (cool) 15:11 < dividuum> where is this channel publicly logged? 17:00 < Eviltechie> mcblockit has a freenode mask thingy? 18:00 <+Amaranthus> Eviltechie: They hand them out like candy these days 18:42 < dividuum> hm. why is LoginSuccess sent before EncryptionRequest when the server is on onlinemode=false? 18:43 < dividuum> oh. maybe it isn't. strange 18:44 < dividuum> ok. didn't switch into the correct state. sorry for the noise :-) 19:37 < Drainedsoul> so with 0x0E, play, S->C, it either ends with one signed 32-bit integer (which is zero), or a signed 32-bit integer followed by three signed 16-bit integers, just so I'm clear? 19:41 < Thinkofdeath> Drainedsoul: https://gist.github.com/thinkofdeath/75c3e5364745b57589f8 19:53 < Drainedsoul> thinkofdeath: Thanks 20:40 < Drainedsoul> do metadata dictionaries still use UTF-16 internally? 20:44 < Thinkofdeath> Drainedsoul: Looks like they are UTF-8 too 20:45 < Drainedsoul> oh sweet 20:49 < Not-002> [netherrack] thinkofdeath pushed 1 commit to master [+0/-0/±1] http://git.io/vKDM_Q 20:49 < Not-002> [netherrack] thinkofdeath 90be52e - protocol: update metadata to use utf-8 strings 20:55 < Not-002> [netherrack] thinkofdeath pushed 1 commit to master [+0/-0/±2] http://git.io/IOvyUQ 20:55 < Not-002> [netherrack] thinkofdeath 8e5b0b3 - blocks: LockedChest -> StainedGlass 22:09 <+md_5> Thinkofdeath is the B protocol fully updated? 22:09 < Thinkofdeath> md_5: should be 22:10 < Thinkofdeath> http://wiki.vg/Pre-release_protocol#13w41b --- Day changed mar. oct. 15 2013 00:03 < Drainedsoul> does anyone have any canned example of bad NBT? 00:03 < Drainedsoul> *examples 00:58 < dividuum> i really like those unique packet id for searching on the wiki %) 01:00 < dividuum> hm. does Confirm Transaction really use unsigned byte and signed byte for the different directions? 01:17 < Drainedsoul> does it matter? 01:17 < Drainedsoul> if you use one consistently in your implementation, it shouldn't be relevant because the bit representation will be identical 01:20 <+clonejo> unless he uses < or > :P 01:30 < Drainedsoul> well it's an ID, I wouldn't think that you'd numerically compare IDs 01:50 <+Amaranth> That reminds me, I wonder when they'll get rid of integer ids for enchantments 01:51 <+Amaranth> And move potions to the item metadata format instead of data values 01:51 <+Amaranth> Since they're getting rid of magic numbers 01:57 < dx> it would make sense to keep magic numbers for enchantments though 01:57 * dx cough 01:58 < dx> is that item metadata format going to survive, or will it be replaced by json as everything else? 02:00 < Drainedsoul> if IDs are magic numbers, what will you replace them with that's less magic 02:01 < Drainedsoul> how is "wood plank" less magic than 5 02:01 < Drainedsoul> other than the fact that "wood plank" is 10x longer. 02:05 < Eviltechie> why is 5 a wood plank? 02:05 < Eviltechie> Why not 10, or elevendy billion 02:06 < Drainedsoul> why is the exact arrangement of bits "wood plank" a wood plank? 02:06 < Drainedsoul> the protocol isn't written for human consumption, machines can consume fixed-width integers much easier than strings. 02:07 < Eviltechie> I'm not sure where you got the idea it would be sending strings 02:07 < iBotPeaches> change them all to strings prefixed with "minecraft_item_metadata_" 02:07 < Eviltechie> :/ 03:38 < Not-002> [MCPP] RobertLeahy pushed 5 commits to 1_7_protocol [+0/-4/±8] http://git.io/GSdYfQ 03:38 < Not-002> [MCPP] RobertLeahy 59cc7a3 - Variant Documentation 03:38 < Not-002> [MCPP] RobertLeahy 9b7acf1 - Remove Metadata 03:38 < Not-002> [MCPP] RobertLeahy de115f1 - Compression Fix 03:38 < Not-002> [MCPP] RobertLeahy 3ffec25 - NBT Overhaul 03:38 < Not-002> [MCPP] RobertLeahy 7180177 - Packets 03:42 < dividuum> the entity id of the client bound Animation packet (0x0b) has to be a varint 05:20 < Drainedsoul> http://wiki.vg/Slot_Data the last example, libz does not seem to like the last four bytes of that. 06:05 < iBotPeaches> Drainedsoul: lol spells CAFE BABE 06:06 < zml> lol, somebody wanted to start a classfile there 06:52 < Not-002> [MCPP] RobertLeahy pushed 4 commits to 1_7_protocol [+0/-0/±5] http://git.io/tZzadA 06:52 < Not-002> [MCPP] RobertLeahy 2bf6f0c - JSON 06:52 < Not-002> [MCPP] RobertLeahy 9797680 - NBT 06:53 < Not-002> [MCPP] RobertLeahy 8557cc5 - Compression Fix 06:53 < Not-002> [MCPP] RobertLeahy de134a7 - Packets - NBT and Slot 07:25 <+md_5> Thinkofdeath string arrays are varint and byte arrays are short? 10:03 < Thinkofdeath> md_5: Looks like it 10:16 < Thinkofdeath> md_5: ej.class is where they are handled 14:51 < Jckf> Does anyone here have a nice PHP class to interface with the new authserver? 15:56 * frostyfrog might not, does a new one need to be coded? Has the auth server changed recently? 16:03 < Jckf> "New" since the "new" launcher 16:03 < Jckf> Going to use it for SSO on Minecraft.no, since we have a lot of tool with separate user databases today 16:03 < Jckf> *tools 16:54 <+sadimusi> Jckf: so your users have to enter their mojang account credentials? 17:02 < TkTech> sadimusi: If Mojang refuses to add OpenID/OAuth what are else can you do? 17:02 < TkTech> It was painful getting Notch just to add the skins URL. 17:02 <+sadimusi> the usual fake server you have to connect to 17:03 < TkTech> Which is limited in what you can do. Authorization vs authority. 17:04 < TkTech> For the skindex, I wanted you to be able to click a button and bam, skin changed. 17:04 <+sadimusi> that's almost possible 17:05 <+sadimusi> but in Jckf's use case authorization is the only concern if I got this right 17:07 <+sadimusi> TkTech: https://minecraft.net/skin/remote.jsp?url=http://www.minecraftskins.net/static/skin/harveydent.png <- this does exactly what you want, just with the authentication on the other end 17:07 < TkTech> sadimusi: I know. I had him add that URL. 17:09 <+sadimusi> of course I would welcome OpenID as well, but even without it it's still unacceptable to just ask for the password 17:22 < TkTech> sadimusi: (Which I believe he only did because I said I'd start storing passwords.) 17:23 <+sadimusi> TkTech: maybe the same would work for openid 17:23 < TkTech> This was back when the most used sites were minecraft.net -> forum -> wiki -> -> skindex -> 17:23 < TkTech> I would have been storing around a million passwords a month assuming every unique logged in. 17:24 < TkTech> Don't think any one site has that much "push" these days, other than the wiki/forum. 17:26 <+sadimusi> maybe not a single one, but a few combined might have 17:26 <+sadimusi> especially server lists are having problems with fake votes 17:27 <+sadimusi> if the big ones started requiring mojang accounts it would certainly trigger some kind of reaction 17:29 < TkTech> That's true, but it's an empty ultimatum. These days storing passwords would make you an instant cracking target. 17:29 < TkTech> That's a lot of liability that I don't think most lists would go for. 18:03 < edk> TkTech: sadimusi Jckf Kyle made a thing for that http://mcidentify.com/user/session 18:03 < edk> er 18:04 < edk> i'm not sure if that's the correct url, it redirects there and i didn't notice. *shrug* 18:04 < edk> http://demo.mcidentify.com/test 18:05 < Jckf> I do not intend to store passwords. All I need is a valid session, since that indicates the user is real 18:05 < edk> The thing is, anyone who takes your word for it is insane. 18:06 < edk> the trustworthy (and safe) way to not store people's passwords is by not asking for them 18:07 <+sadimusi> Jckf: it's already hard enough to convince people not to give their password to random websites. legitimate websites asking for them only makes it worse 18:15 < Jckf> Would it help if I said the tools aren't for end-user, but administration? 18:15 < Jckf> Most of our users will never be asked for their Minecraft account 18:16 <+sadimusi> that makes it a bit better 18:16 <+sadimusi> but why do you need mojang accounts for the admins? 18:23 < Jckf> Makes it simpler for me to code and manage 18:31 < Kyle> Jckf: by all means, use my site, but it's a similar issue to the password thing 18:31 < Kyle> trust trust and more trust 18:31 < dividuum> is there a way to man-in-the-middle minecraft connections without having the users credentials? 18:31 < Jckf> dividuum: I haven't read up on how the launcher does this, but I appears to me to only require the user's password once. From there on it keeps a token that it validates? 18:32 < dividuum> that's the idea. i had some problems with that 18:32 <+sadimusi> dividuum: there's no way, at least not known to us 18:32 <+sadimusi> dividuum: (I'm counting the access token as credentials) 18:32 < dividuum> https://mojang.atlassian.net/browse/MCL-1513 (sorry for bringing this up again) :} 18:33 <+sadimusi> you could try proxying the auth server and compare your program to the RI 18:33 < dividuum> i guess i'll have to reread the proxy.py in mc4p then. i somehow remembers that there was no authentication needed 18:35 < dividuum> for my current project i have to forward the connection on behalf of the user 18:35 < dividuum> and i really don't want the credentials. i'm currently trying find ways of doing that. or maybe getting close to it 18:36 <+sadimusi> on which site do you run your program 18:36 <+sadimusi> ? 18:36 < dividuum> wait. i can show you (i think. let me see) 18:38 < dividuum> point your minecraft 1.6.4 to miners-movies.com 18:39 < dividuum> i'll let you figure out the way this is supposed to work :) 18:39 < dividuum> the portal to your right allow you to forward your connection to another server for recording purposes 18:40 <+sadimusi> so you just forward the connection between your own servers? 18:40 < dividuum> for that i need a way to authenticate as the user. the only way to do this at the moment is asking for the username/password 18:40 < dividuum> no. i can forward to any other server 18:40 < dividuum> otherwise i'd disable online-mode 18:41 < Jckf> dividuum: Can't you just run your back-end servers in offline mode and have the inaccessible to the world? 18:41 < dividuum> so it's not bungeecord 18:41 < dividuum> the user can forward to any server 18:41 < Jckf> Any? The address is user profided? 18:41 < Jckf> *provided 18:42 < dividuum> yes 18:42 < dividuum> what you can do with that then is this: dividuum.made.miners-movies.com (point your 1.6.4 minecraft there) 18:43 < dividuum> you can record yourself playing on the server and later watch the footage in game 18:43 < Jckf> Oh. You're recording the packets? 18:43 < dividuum> yes 18:43 < Jckf> Haha. Cool 18:45 < dividuum> it would be awesome to have another authentication flow somehow 18:46 < dividuum> i thought about providing a client side mod that responds to signed messages and returns the session id 18:47 < dividuum> but that feels ugly :-) 18:47 <+sadimusi> if you use a client mod at least do it the other way around 18:48 < dividuum> yeah. then i don't have to store anything. that would be nice. now i just have to figure out how to write those mods... 21:29 < Not-002> [netherrack] thinkofdeath pushed 1 commit to master [+0/-0/±1] http://git.io/4DHrjg 21:29 < Not-002> [netherrack] thinkofdeath 15ddddc - protocol: Animation's EntityID type corrected to VarInt 22:06 < Not-002> [fCraft] fragmer * r2232 2 files : Fixed linewrapper occasionally inserting redundant leading color codes, forcing an extra line to be printed (thanks AndrewPH). 22:17 < Not-002> [FemtoCraft] fragmer * r131 2 files : Updated LineWrapper, now based on fCraft 0.900_r2232_dev 22:22 < Not-002> [netherrack] thinkofdeath pushed 3 commits to master [+1/-0/±4] http://git.io/SANEBw 22:22 < Not-002> [netherrack] thinkofdeath 75061e5 - /: Removed unused code 22:22 < Not-002> [netherrack] thinkofdeath 725e002 - /: Support changing the new ping 22:22 < Not-002> [netherrack] thinkofdeath c73c607 - protocol: clean up readVarInt 22:24 < Thinkofdeath> http://wiki.vg/Pre-release_protocol#Multi_Block_Change <- If Chunk X (or Z) is negative wont the VarInt always be 5 bytes? 22:24 < Not-002> [fCraft] fragmer * r2233 2 files : Fixed linewrapper occasionally inserting redundant leading color codes, forcing an extra line to be printed (thanks AndrewPH) (backport from 0.90x) 22:49 <+clonejo> Thinkofdeath: doesn't MC's implementation of varints differ between signed and unsigned types? (http://en.wikipedia.org/wiki/LEB128#Signed_LEB128) 22:50 < Thinkofdeath> clonejo: Nope always unsigned as far as I can tell 22:51 <+clonejo> okay 23:24 < Not-002> [fCraft] fragmer * r2234 2 files : 0.643 final 23:24 < Not-002> [fCraft] fragmer * r2235 2 files : 0.643 tag --- Day changed mer. oct. 16 2013 03:42 < Not-002> [MCPP] RobertLeahy pushed 3 commits to 1_7_protocol [+0/-0/±8] http://git.io/t-nG-w 03:42 < Not-002> [MCPP] RobertLeahy 34e3ed4 - No Static Linking 03:42 < Not-002> [MCPP] RobertLeahy 2114837 - GCC 4.8.1 03:42 < Not-002> [MCPP] RobertLeahy 7946b3b - Packet Serialization Performance Improvement 03:54 < iBotPeaches> gcc 4.8??? 03:54 < iBotPeaches> how did I miss this 03:57 < Drainedsoul> it's been around a while o_o 03:57 < Drainedsoul> I've been using GCC 4.8 for almost a year. 03:57 < Drainedsoul> just downloaded MinGW GCC 4.8.1 today 05:26 < Not-002> [MCPP] RobertLeahy pushed 2 commits to 1_7_protocol [+0/-0/±2] http://git.io/wocMAQ 05:26 < Not-002> [MCPP] RobertLeahy 05ccd02 - Packet Documentation 05:26 < Not-002> [MCPP] RobertLeahy e93dc30 - Serialize Fix 06:23 < Drainedsoul> Thinkofdeath: So how is a negative chunk encoded? 09:24 < Thinkofdeath> Drainedsoul: The int is treated as unsigned (-1 as 0xFFFFFFFF for example) 09:29 < SinZ> varints do a zigzag encoding for signed numbers 09:29 < SinZ> unless MC reinvented varints 09:30 < Thinkofdeath> SinZ: zigzag encoding isn't used in MC 09:31 < Thinkofdeath> https://gist.github.com/thinkofdeath/e975ddee04e9c87faf22 09:31 < SinZ> zigzag seems like a good way to do it for varints, so you don't waste bytes 13:22 <+clonejo> SinZ: you don't need zigzag for small signed varints, you can just add or remove leading 1 bytes for negative numbers 18:13 < Cubix> Does anyone know nice library for anvil world editing? 19:03 < TkTech> Might help if you specify a language. 19:04 < Cubix> it doesn't really matter, i just needed to spawn world for few things 19:04 < Cubix> pymclevel from mcedit is nice ;) 19:04 < Cubix> scan world* 23:36 < Drainedsoul> SinZ: "good way" + Mojang product, lol 23:38 < SinZ> Drainedsoul: heh 23:38 < Drainedsoul> I'll have to update my varint decoder/encoder, since I wrote it the right way 23:38 < Drainedsoul> with zig zag 23:38 < Drainedsoul> shucks --- Day changed jeu. oct. 17 2013 01:15 < Drainedsoul> cppreference.com's verification questions as the output of CPP code, cool 01:15 < Drainedsoul> *ask 06:38 < Grum> I'll have to update my varint decoder/encoder, since I wrote it the right way <-- so which 'way' is that? 06:38 < Drainedsoul> zig-zag encoded 06:39 < Grum> we're staying compatible with what google uses in their protobuf spec 06:39 < Grum> for obvious raisins 06:40 < Grum> i mean, i know you love incompatibility and all, sometimes its good not to care for the things you do not use to remain compatible with something else >.> 06:40 < Drainedsoul> https://developers.google.com/protocol-buffers/docs/encoding#types Google specifies ZigZagged types 06:41 < Grum> yeah, so we just used 'int32' 06:41 < Grum> i don't see the problem 06:43 < Drainedsoul> I just don't understand the rationale behind using VarInts and then expending the same number of bytes -- or one extra byte -- to encode negative values. 06:44 < Grum> i dont understand the rational of increasing the size of all the things we send because we do not use it for negative numbers anywhere? 06:46 < Drainedsoul> Thinkofdeath seems under the impression that 0x22, S->C, Play uses VarInts for the X/Z coordinates of the chunks in a multi block change. I, personally, have not tested or verified this 06:47 < Grum> meh there you lot go away when your numbers 06:48 < Grum> and he's right, so it seems 06:48 < Grum> we have other plans for the chunk-coordinates however 06:51 < Drainedsoul> are arrays going to get a standard type as a length prefix? D: 06:51 < Drainedsoul> *:D 06:53 < Grum> ? 06:55 < Drainedsoul> at least as of my current understanding, collections of items in the protocol are prefixed with their length in -- variously -- bytes, shorts, and ints 07:05 < Grum> we have quite some irregularities to get rid off 07:05 < Grum> but we havent actually done any work on that 07:06 < Grum> we did a short look over what we had and decided we needed to ponder some things a bit more 07:06 < Grum> i prefer to make 'chunkpos' a 'readable type', same for blockxyz, entity.xyz etc 07:07 < Grum> we have about 10 ways to indicate 'xyz' in the code 07:07 < Grum> s/ code/ protocol/ 07:10 < Drainedsoul> that'd probably be for the best. Glad that you're holding off on changes until you're sure about them. 07:10 < Grum> well we have some concepts right now 07:10 < Grum> but other shit came up hehe 07:10 < Grum> x,y,z is storable in an long 07:10 < Grum> downside; resolution of y becomes 12bits 07:11 < Grum> as it is legal to have positions under 0 (not for blocks, but for entities, think of hanging of a ladder), we just have 11 bits of resolution 07:11 < Grum> putting a virtual roof on the world at 2047 07:12 < Grum> beyond that we're sending entity coordinates over the wire in many formats 07:13 < Grum> and one of the main issues we're having in general is the compounding of float/double inaccuracies over time 07:13 < Drainedsoul> yeah I always thought it was odd that floating point and fixed point were used for positions 07:14 < Grum> you know the bug where an item falls, jumps up, falls again etc? 07:14 < Drainedsoul> I've seen it once or twice 07:14 < Grum> that is because on the server its *on* the ledge, on the client its off 07:14 < Grum> because we crop the resolution while sending it over the wire to 1/8000 07:14 < Grum> now, you might wonder, where does the 8000 come from, no idea 07:15 < Drainedsoul> haha 07:15 < Grum> i'm guessing because it was easier to type than 8192 07:15 < Grum> (its send in a short iirc) 07:15 < Grum> -8000 to 8000 'fits' nicely 07:15 < Grum> anyhow! 07:15 < Drainedsoul> well, at least if you truncate the range to that, you don't have weird problems like x<0 && abs(x)==x 07:15 < Grum> that made me wonder, we would't have any errors if we'd use an integer type 07:16 < Grum> and then we figured, what would be a sane resolution 07:16 < Grum> initially we thought 1/256th of a block is ok! 07:16 < Grum> because then an entityposition would be long+bytebytebyte 07:16 < Grum> (the long containing the block xyz) 07:16 < Grum> and then we realized that might be saner to be able to represent a full axis in a single integer 07:17 < Grum> and as we need 26 bits for x/z, +8 ... obviously doesnt fit in an int =) 07:17 < Grum> so right now our idea is at 26+6, giving an 'inblock resolution' of 1/64 07:17 < Grum> which should be more than plenty 07:17 < Drainedsoul> if you have the option of ZigZag you could save bytes in most cases, and not lose resolution by sending X/Y/Z as VarInts 07:18 < Grum> yes but you do not save anything significant 07:18 < Grum> to represent 26 bits you need at least 27 bits when zigzagging 07:18 < Grum> so that is 4 bytes 07:19 < Grum> with the growing point to 3 bytes at 8k 07:19 < Grum> and you barely ever will use 4 bytes 07:20 < Grum> as that is 1-32million 07:20 < Drainedsoul> yeah. Doesn't the MC world break down thanks to the limit of floats long before +/- 2*10^9? 07:20 < Grum> no that is because of other stupidness 07:20 < Grum> rather than doing a gltranslate when we draw the vertices of the chunk to the 'high number' 07:20 < Drainedsoul> oh, someone told me it was because of single-precision floats, and that seemed plausible 07:20 < Grum> we incur the wrath of float-errors 07:21 < Grum> and add the chunk x,y,z to each vertexes x,y,z 07:21 < Grum> which obviously ....... is stupid :P 07:21 < Drainedsoul> yeah that's the issue with floats. They have all sorts of weird gotchas 07:21 < Grum> you should *NEVER EVER* draw a vertex with a x/z > 16*chunk-render-distance 07:22 < Grum> and using gltranslate it'll never have a bigger value than 16 ;) 07:22 < Grum> ogl internally works with floats, no matter what you do 07:22 < Grum> you can give it ints, it translates it to floats at the first chance 07:23 < Drainedsoul> do you mean single-precision or just floating point math in general? 07:23 < Drainedsoul> never worked with OGL 07:23 < Grum> internally ogl just uses floats 07:23 < Grum> so minecaft would lend itself really well for a pure integer-based-system 07:23 < Grum> for the world at least 07:23 < Grum> so snap everything to a 1/64 grid 07:23 < Grum> and send pure ints to the videocard 07:24 < Drainedsoul> yeah most of Minecraft is very discrete 07:24 < Grum> anyhow, that is not really the way to solve the issues 07:24 < Grum> we can solve some of the 'tearing' in the world by using indexed buffers 07:25 < Grum> (so we give all the locations of the vertices and then give the list of indices to draw the actual faces) 07:25 < Grum> rather than repeating the vertice x,y,z all the time, and then getting problems because you 'offset them' :p 07:26 < Drainedsoul> what -- if I may ask -- put you guys on such a technical crusade? 07:27 < Grum> its needed? 07:27 < Grum> this has been going on in the background for a long long time 07:27 < Drainedsoul> ah okay. I can't argue with that. Just that from the outside looking in MC development looks very feature-driven 07:27 < Grum> this change will be one that wont happen soon 07:27 < Grum> maybe for jens 07:27 < Grum> not for me 07:28 < Drainedsoul> well that's good. Most people sweep it under the rug, but some people notice that MC is crumbling under the weight of technical debt, and appreciate efforts to pay it off :P 07:30 < Grum> i dont actually care for features 07:30 < Grum> i just see a huge pile of ... things that need fixing 07:30 < dx> i like this guy 07:30 < Drainedsoul> that's a perspective I can definitely appreciate. 07:33 < Grum> i like technical debt 07:33 < Grum> but its not trivial to get rid of :) 07:33 < Drainedsoul> it definitely isn't. And it's hard to convince some people that it does need getting rid of. That's the problem I run into a lot. 07:36 <+AndrewPH> pls rewrite minecraft in asm in 3 hours it's not that hard it's just writing code 07:48 < Grum> Drainedsoul: there is multiple ways to do it 07:49 < Grum> we're picking the hard one 07:49 < Grum> but the one with the guaranteed result 07:49 < Grum> you can do the 'big bang' implementation 07:49 < Grum> basically put us in a room for 2 years and we'll have a brand new spanking piece of code that probably doesnt do what we want 07:49 < Grum> or do it on 'live' code, like we're doing now 07:52 < Drainedsoul> yeah total rewrites are for pretty dire situations. You throw the baby out with the bathwater as it were. 07:53 < Grum> it would have been totally justified 07:53 < Grum> minecraft is not 'one of those games' however 07:54 < Drainedsoul> I wouldn't know anything about how justified it is or not. I've never looked at the decompiled source etc.. I wouldn't want to have to work on it, though, from what I've heard :P 07:55 < Grum> working on it is a love/hate relationship 07:57 < Drainedsoul> better than hate/hate 07:58 < Grum> hehe 07:58 < Grum> i love fixing broken shit like this :) 07:58 < Drainedsoul> I'm glad. I just get really angry. We had "broken shit" made up by a contractor at work earlier this year, I was so furious to have to work on it. 07:58 < Grum> oh me too ;) 07:58 < Grum> and then i fix it ;) 07:58 < Drainedsoul> I guess that's where the "hate" component comes from. 07:59 < Grum> its not always fun fixing 07:59 < Grum> and the fix is not always fun 07:59 < Grum> or good, or even better than how it was 08:00 < Drainedsoul> yeah a lot of fixing is making something awful into something you're proud of, and a lot of it is making something awful into something just as awful, but which actually works 08:01 < Grum> problem is most of this actually works 08:01 < Grum> but its awful 08:01 < Grum> or shouldnt work ;) 08:01 < Grum> so in order make it 'sane' you have to break it 08:01 < Grum> and then bend your nice code to 'do what it roughly did before' 08:01 < Drainedsoul> yeah this project back at the beginning of the year, there was a lot of that. Total insanity that "worked", but it had to be broken and then fixed. 08:02 < Drainedsoul> when dealing with non-technical people, the definition of "works" is bent in ways that I don't appreciate. 08:03 < Grum> like with this soundsystem, its not really broken in a way that it is 'broken' 08:03 < Grum> but MAN its an abomination 08:03 < Grum> and you cannot do shit easily 08:03 < Grum> everything is hardcoded 08:04 < Grum> the only 'flexible' part is that it plays sound: 'foo.bar' and then you have: foo/bar1.ogg foo/bar2.ogg foo/bar3.ogg and it picks a random one 08:04 < Drainedsoul> hardcoding is a pet peeve of mine. I'm cursed with having to work on PHP/classic ASP, and hardcoding values seems to be a cultural thing in those communities. 08:05 < Grum> so we're extracting the whole thing into 'hardcoding' onto 'playing a sound event by name' 08:05 < Grum> so it would be: game.block.door.open 08:05 < Grum> and then we can 'register' sounds to that event 08:05 < Grum> with weights 08:05 < Grum> (if you wanted to) 08:07 < Drainedsoul> Registration of events, handlers, etc. is quickly becoming my favourite pattern 08:07 < Grum> and all the soundevents <-> soundfiles is done in json 08:07 < Grum> in resourcepacks 08:07 < Grum> in a stacking way 08:08 < Drainedsoul> you guys should've used XML :P 08:08 < Grum> fuck you :P 08:08 < Grum> nothing worse than xml, oh wait, using xml