23:51 < Paprikachu> ew, framework 23:52 < Aragas> okay, i think i ruined it when i said framework 23:53 < Paprikachu> :) 23:58 < woder> uh 23:58 < woder> I hate this thing lol --- Day changed dim. avril 05 2015 00:02 < Aragas> server don't wanna give me more than 3.5k chunks 00:04 < Aragas> 3467* 00:05 < Paprikachu> well, it's certainly not a protocol limitation since my server happily sends as many as you want :) 00:05 < Paprikachu> or client rather 00:05 < Aragas> vanilla server is so wet 00:06 < Aragas> 12384 mc behind 00:06 < Aragas> ms* 00:07 < Aragas> here it goes 00:07 < Aragas> 3546, it's heavily breathing :DDD 00:08 < Paprikachu> i still have to implement a lot of stuff 00:08 < Paprikachu> im curious how it's gonna perform compared to vanilla 00:08 < Aragas> by the way. 481 ram and 624 gpu. You said vanilla needs 1.6 gb to render 4225 chunks? 00:09 < Paprikachu> no 00:09 < Aragas> ah, server, pardon me 00:09 < Paprikachu> my server allocates 1.6gb of ram for those chunks 00:09 < Paprikachu> which is completely fine 00:09 <+Amaranth> gurun: The key feature of Rust is memory safety and a no data races (not no race conditions, those are logic errors) without using a garbage collector 00:09 <+Amaranth> If that doesn't sound appealing you probably won't be interested 00:09 < Paprikachu> considering that i have more efficient random access than vanilla 00:10 < Paprikachu> 1.6 gb is like... who gives a shit :) 00:11 <+Amaranth> C/C++ performance with no use after free, double free, use of uninitialized memory, iterator invalidation, etc 00:11 < Paprikachu> meh, i don't like how you put that. 00:12 < gurun> Paprikachu, regarding how it is going to performe in comparison. Well, you would have to fail hard to make it less performant. Because you won't implement a fraction of the functionality i assume. 00:12 < Paprikachu> i don't have use after free or double frees. and uninitalized memory is a blessing :) 00:12 < Paprikachu> gurun: true 00:13 < Paprikachu> minecraft has so much stuff to implement, it's next to impossible to implement all of it if you're one person 00:13 < gurun> and regarding memory management. Well, i bypassed the GC in .NET to achive what i wanted. But on the other hand, i only did what I would have done in C, C++, Java or any other language. 00:13 < Paprikachu> i don't really care about memory usage 00:13 < Paprikachu> my pc has 32 gigs of ram :) 00:13 < gurun> Chunk management is still a pretty small problem in Minecraft. That's why i asked about WHY there is a limitation. 00:13 <+Amaranth> gurun: Right so Rust gives you C/C++ levels of control over memory allocation and layout with Java/C# levels of memory safety, more or less 00:13 <+Amaranth> It's actually safer than Java/C# in a few ways 00:14 < gurun> I read a chunk and convert it from Anvil to a Chunkcolumn in far beneth 1ms. 00:14 < gurun> and that includes file-open, etc. 00:14 <+Amaranth> The cost for this is having to deal with lifetimes 00:15 < gurun> Amaranth, i deal with lifecycle/lifetime or whatever we would call it. I had to implement my own object pool with reference counters. 00:15 < Thinkofdeath> still don't understand those 00:15 < Paprikachu> i don't see how rust does this any better than c++. 00:15 < Paprikachu> it's more annoying, that's it. 00:15 < gurun> That is exclusive for the sheer amount of objects created. I topped out i a test of 125.000.000 packets per SEC. 00:15 <+Amaranth> Thinkofdeath: Think of it like the opposite of reference counting and done at compile time 00:16 <+Amaranth> Reference counting keeps track of how many things are using something, the borrow checker and lifetimes keep track of when that something stops being used 00:17 <+Amaranth> It's sort of similar to compile time reference counting but the semantics are different 00:17 < gurun> Amaranth, yeah "borrow checker" is a very good word for what I implemented. 00:17 < Paprikachu> reference counting is mostly useless :/ 00:17 < gurun> that's why the object pool is so important. Because without that, it's just refefence counting. 00:17 <+Amaranth> Paprikachu: In C++ you have to keep track of such things yourself and be careful to not mess them up 00:17 <+Amaranth> In Rust when you mess them up the program fails to compile 00:17 < Paprikachu> i don't need to be careful, it just works. 00:18 < Paprikachu> it's not rocket science 00:18 <+Amaranth> Uh huh 00:18 < Thinkofdeath> Amaranth: that much I kinda got, putting them to use in rust had me lost 00:18 < gurun> profiling was very eveident that JIT_new was the biggest Boss in the server. 00:18 < Paprikachu> if you are having trouble in c++, you don't know it well enough. 00:18 <+Amaranth> Paprikachu: You sound like someone who hasn't worked on a 1m+ LOC project with multiple developers over a long time period :P 00:19 <+Amaranth> No one ever gets it perfect 100% of the time, especially when it's not possible to hold the entire program in your head 00:19 < gurun> Amaranth, THAT is probably true :-) 00:19 < Paprikachu> true, but then again i have yet to find someone who i'd enjoy working with 00:19 < gurun> Everytime i ask Paprikachu about why he is theorizing about some illness in vanilla .. it alwasy turns out he didn't try to implement it yet :-P 00:19 < Paprikachu> most c++ "programmers" suck ass 00:20 < Paprikachu> "oh no, you are using macros, i'd rather write 1k loc by hand to do what you did in 25 lines" 00:20 < gurun> But Paprikachu, it doesn't mean i don't enjoy the discussion. I really do. 00:20 < Paprikachu> well truth be told, i'm not very experienced regarding projects. 00:21 < Paprikachu> but in my own code base, it's very clear who owns what. 00:21 <+Amaranth> Oh and all of those memory safety things you have to get 100% correct in C++ get infinitely more complicated when you toss threads in the mix 00:22 <+Amaranth> We have proof people can't do this right, see CVEs 00:22 < Paprikachu> mhhh, i don't have issues with threads 00:22 < Paprikachu> doesn't change pretty much anything actually 00:22 <+Amaranth> Right so you always write perfect safe threaded C++ with no errors ever 00:23 < Paprikachu> pretty much, yeah. 00:23 <+Amaranth> If that's really true you need to move to San Francisco and start making millions of dollars 00:23 < Paprikachu> it's not that hard. 00:23 < Paprikachu> keep shared state to a minimum and make that thread-safe. 00:23 <+Amaranth> The fact that you don't even think it's hard makes it obvious you're out of your depth here :) 00:24 < Paprikachu> ... or i know way too much about threading to think it's hard. 00:25 < gurun> I have to agree with Amaranth. Threads are simple for people that think threaded design naturall. 00:26 < gurun> sorry, mean i agree with Paprikachu. It's not difficult. 00:26 < Paprikachu> look, i came up with a fairly reasonable design that allows me to run worlds in different threads. in that design, you just don't deal with threads most of the time since you are only ever accessing state from the world thread. 00:27 < Paprikachu> and when you have to do cross world stuff, you know you have to be careful. 00:28 < gurun> If you use threads on the right problem, as the right solution, then it usually isn't that difficult to keep track of. 00:28 < gurun> but doing it and keeping performance, that's an entirely different matter. 00:28 < Paprikachu> worlds are simply not parallelizable trivially. 00:29 < gurun> The most requested feature i have on my little server project; please make sure it uses 100% of CPU. 00:29 < Paprikachu> you may be able to run certain tasks on other threads, but that needs to be done on a per-case basis. 00:30 <+Amaranth> Not even talking about threads, here is an example that has actually come up in Minecraft (as in Minecraft ran in to this problem and has a workaround). You want to tick entities in a world, for (Entity &entity: m_entities) { entity->tick(); } seems alright, no? 00:31 <+Amaranth> What happens if you add or remove an entity in that tick method (add a projectile, this entity dies, whatever)? 00:31 < gurun> eh, this is pretty basic Amaranth 00:31 <+Amaranth> Sure, the example is to show how basic shit can screw you :) 00:32 < gurun> there are two things in that 00:32 < Paprikachu> i have thought about it and so far my solution has been to postpone the issue until later :) 00:32 <+Amaranth> Maybe you started out with the tick method not being allowed to add/remove entities, no problem then 00:32 < Paprikachu> but it has nothing to do with threading. 00:32 < gurun> one is to make sure that the list doesn't change (because that will fuck you over). 00:32 < Gjum> actually, what'd you do? reverse iteration direction? add the entity to a to-remove list and remove afterwards? 00:32 <+Amaranth> But then later you or someone else ends up adding code that does so 00:32 < gurun> you do that by .. makeing a copy of the list itself first. 00:32 < Paprikachu> and obviously you can't allow to delete entities in the very same tick 00:32 <+Amaranth> Maybe not even in the tick method itself, but a dozen methods deep in the call chain 00:33 < gurun> then, for critical sections of the code, you have business logic that guards it. Like "yeah i will only do this if the player is still alive" etc. 00:33 < Paprikachu> that goes completely against logic 00:33 < gurun> asserts. 00:33 <+Amaranth> Rust just wouldn't let you call something that had the ability to modify m_entities while you're iterating 00:33 < Paprikachu> the core issue is that your loop is simply wrong 00:34 <+Amaranth> It didn't start wrong 00:34 < Paprikachu> for each does not allow removal 00:34 < Paprikachu> use an iterator based loop and it's a no brainer 00:34 <+Amaranth> That's my point, large old codebases have side effects all over the place 00:34 < gurun> well, it has to be an iterator that allow deletions too :-) 00:34 <+Amaranth> Paprikachu: How does the tick method use the iterator's remove feature? 00:34 <+Amaranth> And how does that help with adding things 00:35 < Paprikachu> well first of all, adding and removing entities are for the purposes of a tick function the same operation 00:35 < Paprikachu> second, you could probably pass the iterator to the tick function. 00:35 < Paprikachu> not pretty, but it might work. 00:35 <+Amaranth> Why does the tick method need the iterator? It's not doing anything with it, you made sure 00:35 <+Amaranth> 2 years ago 00:36 < Paprikachu> i dunno what you're trying to say 00:36 <+Amaranth> And again, the actual add/remove is a dozen calls deep in the call chain 00:37 <+Amaranth> I'm trying to point out how hard it is to be _sure_ you haven't just violated memory safety in a large project 00:37 < Paprikachu> what does any of that have to do with memory safety 00:37 < Paprikachu> this is purely a design issue 00:37 <+Amaranth> Iterator invalidation is an example of violating memory safety 00:37 < Paprikachu> you wouldn't design an entity system without such a thing in the first place 00:38 < Paprikachu> that being said, my entity container wouldn't even invalidate iterators so that's a non-issue for me :) 00:39 <+Amaranth> You're missing the forest for the trees here 00:39 <+Amaranth> Don't focus on the specifics of the example, it's meant to point out a general class of problem that can come up 00:41 <+Amaranth> btw if you really did do everything perfectly all the time Rust wouldn't be that annoying to use 00:41 <+Amaranth> Because if you're doing things right there is almost never anything for the borrow checker to complain about 00:41 < Paprikachu> i get what you're saying, but i might just lack the experience to really understand it. 00:41 < Paprikachu> because i really can't think of an example. 00:41 < Paprikachu> the borrow checker also refuses some valid code from what i've heard 00:41 <+Amaranth> Sometimes the borrow checker is too conservative, it's not possible for it to cover every case perfectly 00:42 <+Amaranth> But most of the time if it complains you're either doing something outright wrong or something that could easily go wrong if you're not very very careful now and forever into the future 00:43 <+Amaranth> Once you add in manual lifetime annotations if you still have a case the borrow checker complains about you're either writing core data structures or you're most likely trying to do something wrong 00:44 <+Amaranth> Trying to write a linked list, tree, or graph? Yeah, the borrow checker is going to get in your way. 00:44 <+Amaranth> Trying to write a Minecraft server? You're probably doing something wrong if it complains. 00:44 < Paprikachu> the two are not mutually exclusive 00:45 < Paprikachu> i do write my own data structures too 00:46 <+Amaranth> Sure, your Minecraft server might have some custom data structures with it but they're still their own self contained thing 00:46 < Paprikachu> i guess 00:50 <+Amaranth> https://twitter.com/themitcho/status/308026012455821312 00:50 <+Amaranth> (that guy is standing) 00:50 < Paprikachu> meh 00:50 < Paprikachu> multi threading is not hard 00:51 < Paprikachu> the standard mutex + thread stuff is just whatever 00:51 < Paprikachu> relaxed atomics are interesting though 00:51 < Aragas> yea, this list stuff and "don't fuck it up" are one of the best things in writing programs 00:51 <+Amaranth> Putting each world on a separate thread isn't exactly pervasive multithreading :P 00:51 < Paprikachu> you can't do better than that. 00:52 <+Amaranth> Sure you can, some guy apparently even did so as a massive hacky patch to Minecraft 00:52 <+Amaranth> He claims to have threaded entities 00:52 < Paprikachu> not only because it's very hard to impossible, but also because it's impossible to support a reasonable api if you do. 00:53 < Aragas> isn't that parallelism? dunno if it is the right word 00:53 < dx> "massive hacky patch", "threading" 00:53 <+Amaranth> So we've gone from threading is easy you just need to get good to "it's very hard to impossible" 00:53 <+Amaranth> :D 00:53 < Paprikachu> and sure, you might be able to isolate the entity calculations and thread that 00:54 < Paprikachu> but i'm also convinced that if minecraft wasn't so cache inefficient, it wouldn't be an issue in the first place 00:54 < Paprikachu> Amaranth: design is a seperate issue 00:55 <+Amaranth> There is actually a fairly well known design for game entities that makes it possible to automatically schedule them on multiple threads safely, you don't even have to think about it 00:55 < Paprikachu> that would be what? purity? 00:56 <+Amaranth> Of course it assumes a static world but if you keep track of things that can modify the world you can deal with them separately 00:56 <+Amaranth> No, an ECS setup 00:56 < Paprikachu> and now you just made the plugin api 10x more complicated 00:56 < Paprikachu> no thanks 00:57 < Paprikachu> a thread-per-world model is a good compromise between threading and ease of api use imo 00:57 <+Amaranth> Well, if you were using Rust it wouldn't be that much more complicated, people would either have to put in the marker than their thing modifies the world or the compiler wouldn't allow them to make calls that modify the world :D 00:57 < Paprikachu> just because your stuff doesn't compile, doesn't mean it's any less complicated 00:57 < Aragas> maybe make a LIFO query with one global entity thread that will perform global operations and small local entity threads? 00:58 <+Amaranth> Actually I'm not sure if the compiler could deal with that one, would have to think about how to design the type system for that 00:58 <+Amaranth> s/type system/types/ 00:59 <+Amaranth> And an ECS setup isn't more complicated, just different 01:00 < Paprikachu> i dunno what ECS stands for 01:00 <+Amaranth> It makes it easy for plugins to attach custom data to entities and can replace events 01:00 < Paprikachu> replace events with? 01:00 <+Amaranth> http://en.wikipedia.org/wiki/Entity_component_system 01:01 < Paprikachu> meh, sounds like bullcrap 01:02 <+Amaranth> Yep, the way most AAA games work is clearly bullcrap :) 01:02 < Paprikachu> i actually used something like this and it turned out to not work for a plugin api. 01:02 < Paprikachu> the system i use right now does use inheritance, but inheritance done right. 01:33 < gurun> These disucssions are so funny 14:35 < Not-4e01> [wiki.vg] Edit by Fenhl to Protocol -> http://wiki.vg/index.php?title=Protocol&diff=6542&oldid=6532 14:39 < Fenhl> hm… the Protocol article doesn't specify whether the state is switched to Play by Login Success 14:40 < Fenhl> if it is, that would mean the packet number of Set Compression depends on whether it is sent before or after Login Success 15:31 < Not-4e01> [wiki.vg] Edit by Wuppie to Server List -> http://wiki.vg/index.php?title=Server_List&diff=6543&oldid=6540 15:41 < gurun> I wonder why "Dimensions" is listed at http://wiki.vg/Server_List 16:23 < Thinkofdeath> hmm, its a mod. Do we have any other mods on that list? 16:23 < Thinkofdeath> pretty sure its all custom stuff 16:39 < dx> tridentsdk is a mod too 16:40 < dx> dragonet and rush are forks of glowstone 16:41 < dx> heh, truecraft is at the end of the list but is more active than most of the other projects in there 16:43 < dx> both dimensions and tridentsdk should be nuked, it clearly says "This page only lists servers written from scratch" 16:45 < dx> "spoon" is a mod too, but it doesn't even have a link and the github repo doesn't exist anymore. google results say "Spoon - A wanna-be-popular Minecraft server api with implementation using reflection" 16:56 < Thinkofdeath> dx: tridentsdk appears to be its own thing unless i'm missing something? 16:59 < Not-4e01> [wiki.vg] Edit by Thinkofdeath to Server List -> http://wiki.vg/index.php?title=Server_List&diff=6544&oldid=6543 17:05 < dx> Thinkofdeath: huh. weird. seems like you're right 17:07 < dx> i just saw tridentsdk which describes itself as a successor to bukkit and is just an API, and i assumed it was just a wrapper 17:07 < dx> but 'trident' actually seems to implement a server from scratch 18:42 < Not-4e01> [wiki.vg] Edit by Thinkofdeath to Client List -> http://wiki.vg/index.php?title=Client_List&diff=6545&oldid=6541 18:54 < Aragas> drawing transparent blocks isn't so easy as i thought 20:19 < teaearlgraycold> So do people actually use RCON? 20:22 <+Amaranth> multiplay does, they wrote it :P 20:22 <+Amaranth> Sort of 20:31 < dx> not many people do with vanilla, this hasn't been fixed in forever https://bugs.mojang.com/browse/MC-7569 20:32 < dx> (i'm not the original reporter but they assigned me there to edit the subject of the bug because it was so terrible it was making the bug less likely to be fixed) 20:52 < Not-4e01> [wiki.vg] Edit by ILexiconn to Wrapper List -> http://wiki.vg/index.php?title=Wrapper_List&diff=6546&oldid=6537 20:52 < teaearlgraycold> Weird... 20:53 < dx> but it doesn't even link the source.. 20:53 < Not-4e01> [wiki.vg] Edit by ILexiconn to Wrapper List -> http://wiki.vg/index.php?title=Wrapper_List&diff=6547&oldid=6537 20:53 < teaearlgraycold> Yeah I'm using it with Spigot right now and just thought of how I've never heard of anyone using it 22:00 < gamingrobot> http://dialexa.com/about 22:00 < gamingrobot> wrong channel 22:01 < dx> oh god what, steven ray STARTED MOVING while i had the page open 22:01 < dx> spooky 22:51 < Not-4e01> [mineflayer] rom1504 pushed 3 commits to master [+0/-0/±5] http://git.io/velRH 22:51 < Not-4e01> [mineflayer] demipixel d0d309f - added bot.recipesAll() 22:51 < Not-4e01> [mineflayer] demipixel 68125fe - fix in docs 22:51 < Not-4e01> [mineflayer] rom1504 b33f5f8 - Merge pull request #255 from demipixel/master added bot.recipesAll() 22:53 < Not-4e01> [mineflayer] rom1504 pushed 2 commits to master [+0/-0/±2] http://git.io/vel0O 22:53 < Not-4e01> [mineflayer] deathcap 0266a7a - Add missing varint length prefix to MC|Brand packet (GH-253) 22:53 < Not-4e01> [mineflayer] rom1504 ba1c68a - Merge pull request #254 from deathcap/brand Add missing varint length prefix to MC|Brand packet (GH-253) 23:27 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+1/-0/±5] http://git.io/velrf 23:27 < Not-4e01> [mineflayer] rom1504 5675cbd - Improve tests : one test file can now generate several tests. Use this to add a test to dig every diggable blocks. Related to #239 --- Day changed lun. avril 06 2015 02:18 < Not-4e01> [wiki.vg] Edit by Fenhl to Protocol -> http://wiki.vg/index.php?title=Protocol&diff=6548&oldid=6542 04:07 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±4] http://git.io/ve8lE 04:07 < Not-4e01> [mineflayer] rom1504 f314a6d - Fix enchant 04:44 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/ve8uU 04:44 < Not-4e01> [mineflayer] rom1504 b378bf4 - Expose some lower level inventory manipulation function, fix #156. 04:46 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/ve8uB 04:46 < Not-4e01> [mineflayer] rom1504 a09556f - fix typo in digEverything.js 05:00 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/ve82U 05:00 < Not-4e01> [mineflayer] rom1504 53d1585 - add unstable api in api.md : see #246 05:15 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±23] http://git.io/ve8Va 05:15 < Not-4e01> [mineflayer] rom1504 a8736c4 - rename bot.client to bot._client and document it in api.md. fix #246 07:56 < DemiPixel> I've been stuck on the same damn problem for hours 08:09 < DemiPixel> And I fixed it :S 08:09 < DemiPixel> Thanks #mcdevs 08:09 < DemiPixel> I knew coming here would help :) 08:09 < DemiPixel> You guys are great, I'll definitely come back again 08:12 <+AndrewPH> lol np 08:12 < DemiPixel> Hey Andrew 08:13 < DemiPixel> are oyu THAT andrew? 08:13 < DemiPixel> I'd imagine not, but just wondering 08:21 <+AndrewPH> >that andrew 08:21 <+AndrewPH> hopefully he didn't mean aera 12:33 < Not-4e01> [wiki.vg] Edit by Chibill to Utility List -> http://wiki.vg/index.php?title=Utility_List&diff=6550&oldid=5956 12:36 < Aragas> how is Biome array sorted? 15:19 < Not-311d> [Jawa] TkTech pushed 1 commit to master [+0/-0/±1] http://git.io/veB1Y 15:19 < Not-311d> [Jawa] TkTech 66599df - Off-by-one on ConstantNumber __repr__ 15:29 < Not-311d> [Jawa] TkTech pushed 2 commits to master [+0/-0/±2] http://git.io/veByg 15:29 < Not-311d> [Jawa] TkTech 4a9f455 - Add landscape health indicator to README.md 15:29 < Not-311d> [Jawa] TkTech 8d2f743 - Remove wildcard import from assembly.py in favour of explicit imports. (W0614) 15:34 < Not-311d> [Jawa] TkTech pushed 1 commit to master [+0/-0/±1] http://git.io/veB9u 15:34 < Not-311d> [Jawa] TkTech 56f4692 - Binary operator after newline (W503) 15:53 < Not-311d> [Jawa] TkTech pushed 1 commit to master [+0/-0/±1] http://git.io/veBQz 15:53 < Not-311d> [Jawa] TkTech b979b39 - PEP8 underindent. Supress pylint cylic import warning (we can't do anything about this without a convoluted pattern. attributes can contain attributes.) 16:00 < Not-311d> [Jawa] TkTech pushed 1 commit to master [+0/-0/±1] http://git.io/veBAp 16:00 < Not-311d> [Jawa] TkTech 65ee6b1 - Pointless lambda (W0108) 16:17 < Not-311d> [Jawa] TkTech pushed 1 commit to master [+1/-0/±0] http://git.io/veRfb 16:17 < Not-311d> [Jawa] TkTech 95b24c3 - Add landscape custom configuration. Enable testing of documentation-related warnings/errors. 17:07 < TkTech> Purge the PEP8 disbelievers 17:11 < Wuppie> hey 17:12 < Wuppie> if this "(id << 4) | data" is getting the blockid thing, how do i get the metadata from that back? 17:14 < Wuppie> i don't really understand that stuff 17:15 < MylesC> Hey, I'm looking into making a simple netty server which simply replies to Server List Pings, this is my code so far http://pastebin.com/QcxevX7a (I used the JSON example from the wiki). It reads all right and gets the information, my question is what makes 0x00 = 15? and why does this not detect the second packet of 0x00 listed on the protocol? If anyone can point me in the right direction to my fault / or give me a better example to 18:41 < Gjum> Wuppie: got it already? If not, try data = blockid & 0xF 18:57 < Not-4e01> [wiki.vg] Edit by Domisum to Entities -> http://wiki.vg/index.php?title=Entities&diff=6551&oldid=6526 19:02 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+1/-0/±2] http://git.io/ve0ZL 19:02 < Not-4e01> [mineflayer] rom1504 e8300e7 - Move the unstable api to unstable_api.md 19:46 < Not-4e01> [wiki.vg] Edit by Domisum to Entities -> http://wiki.vg/index.php?title=Entities&diff=6552&oldid=6526 --- Day changed mar. avril 07 2015 09:00 < DemiPixel> Somebody crack open the champagne 09:00 < DemiPixel> Just finished my project that I've been working on for the past few days 09:00 < DemiPixel> And the video is exporting. Time to pareh! 09:00 < DemiPixel> *partey 09:01 < DemiPixel> Hey 09:02 < DemiPixel> :S 09:08 < DemiPixel> Hey 13:25 < gurun> are there any reasons NOT to save a world on every change? 13:36 < Gjum> fast redstone clocks? 13:37 < gurun> not that i have redstone in MCPE yet, but how fast is fast in for redstone clocks? 13:38 < Gjum> 20hz 13:39 < gurun> ok, like the rest then 13:40 < gurun> but saving takes considerable less time than 50 ms. It's more along the lines of 1ms. So it would have to be a lot of chunks changing for that to be a problem, right? 14:14 <+Amaranth> gurun: I dunno that I'd confidently say I could save multiple chunks every tick, this is disk IO after all 14:14 <+Amaranth> And you've got the serialize the chunk for saving 14:18 < Dinnerbone> Plus redstone contraptions generally involve more than one block updating at a time, so don't do it on the update but schedule it for at least the end of the tick 14:18 < Dinnerbone> Otherwise you'd be saving the same chunk a lot 14:21 < gurun> you are probably right about that. Doing it at the end of the tick. 14:22 < gurun> how often does MCPC save changes+ 14:29 <+Amaranth> Every 45 seconds 14:45 < gurun> hehe, i would have understood 42. Any specific reason for 45? 15:03 < gurun> is there really a good reason for MCPE not to use Anvil? 15:03 < gurun> for storage. 15:10 <+Amaranth> I know nothing about Pocket Edition and I'm not sure why 45 seconds was chosen or even if it still is that long 15:10 <+Amaranth> 45 seconds is 900 ticks so it's a nice even number 15:10 < gurun> I'll give a free RT and FAV to any Mojang employee (with more than 1000 followers) that can do a twitter without getting a "when is 0.11 out" reply :-) 15:11 <+Amaranth> Do they even bug the desktop guys about that? 15:11 < gurun> well, you will see. 15:12 < gurun> i bet they can send out a tweet saying "0.11 will be out on monday" and still get replies asking "when". 15:21 < gurun> xbox etc. What protocol are they using ? 15:45 <+Amaranth> gurun: The xbox stuff is all completely different 15:45 <+Amaranth> There are no servers and each client helps with the simulation 15:47 < gurun> Amaranth, that's just how MCPE works too. 15:48 < gurun> the server is built in 15:59 < Thinkofdeath> gurun: https://i.imgur.com/qdfEUCo.png ha, didn't think it was that bad :P 16:00 < gurun> Thinkofdeath, you should look at the tomcc sending out "i did this really wierd C++ coding shit" and the replies (people have no clue what he is talking about) is .. "Does that mean 0.11 is out soon" 16:01 < Thinkofdeath> lol 16:06 <+Amaranth> Carmack never had the problem :P 16:06 <+Amaranth> He tweets crazy shit most people don't understand and gets a generally sane discussion going in the replies 16:07 <+Amaranth> I dunno, maybe he blocks them 16:07 <+Amaranth> I'd expect people to bug him for details on when their VR headset is coming out 17:07 < MrARM> gg tapatalk, now you can't even close the popup 17:07 < MrARM> well at least on bukkit forums 17:21 < morfin> hello 17:22 < morfin> is packets handling order of one user is nesessary? 20:31 < Aragas> I can't really understand why mcpe don't wanna use any modern stuff. upd, own map format. you either emulate on your server mcpe protocol or use a different client, which doesn't exist 20:47 < gurun> what was the last part Aragas ? 20:47 < gurun> different client? 20:53 < Aragas> gurun: i mean, not mcpe. Custom clients 20:57 < gurun> custom clients for .. mcpe? 20:58 < gurun> but i agree onthe map format. Absolutely no idea why they use LevelDB. 20:58 < gurun> we did performance tests today, comparing. 20:59 < gurun> and well, it was blindingly much faster through direct IO of course. No middleware interfering and slowing things down. 20:59 < gurun> The latest result from reading Anvil: Read 500000 chunks in 8174928ns at a rate of 16ns/chunk 20:59 < gurun> and chunk means x8 chunks in a MCPE column. 20:59 < gurun> so 2ns per chunk basically. 21:01 < gurun> but it couldn't get any better than 16ns becuase that was the limit of the IO for my SSD. 21:01 < gurun> through LevelDB we where talking milliseconds where we talk nanoseconds. 21:02 < Aragas_M> that's funny 21:05 < gurun> and save is much worse and bigger difference. 21:07 < Paprikachu> i remember a conversation 21:07 < Paprikachu> where people tried to convince me that databases aren't slow 21:07 < Paprikachu> ... oops? 21:08 < Aragas> theoretically, is it possible to switch to anvil format? And i'm really interested, why udp? 21:08 < Paprikachu> because udp is the right choice 21:08 < Aragas> entity moving, yes? 21:08 < Paprikachu> tcp sucks balls for games, nobody uses it except amateurs 21:08 < Paprikachu> mainly, yeah 21:09 < Paprikachu> thing is, head of line blocking can be a huge issue in entity movement 21:11 <+Amaranth> Problem is a lot of the data Minecraft sends is essential 21:11 <+Amaranth> Especially with how the protocol is designed 21:11 < Paprikachu> that's trye 21:11 < Paprikachu> true 21:11 <+Amaranth> It needs to get to the client and it needs to do so in a particular order 21:11 < Paprikachu> what exactly requires a particular order? 21:11 < gurun> udp is great, unless you implement reliability as the main feature of your protocol. 21:11 < Paprikachu> apart from things like login 21:12 <+Amaranth> You can't send things like entities and tile entities before the client has the chunk those things are in 21:12 < gurun> moves? 21:12 < Paprikachu> ah, i see 21:12 <+Amaranth> Sending entity metadata before the client has the entity too 21:12 < Paprikachu> well, one could pack those together 21:12 < gurun> they are packed together. 21:12 < gurun> they are sent in burst every 10ms 21:12 < Paprikachu> not moves 21:12 < Aragas> oh no please no more packets 21:13 < Paprikachu> entity metadata 21:13 < gurun> they are. 21:13 < gurun> but they also aren't a problem 21:13 < gurun> moves are the problem 21:13 < Paprikachu> ugh... 21:13 < Paprikachu> you can put a sequence number on moves and discard old moves 21:13 < Paprikachu> that wouldn't be an issue 21:14 <+Amaranth> A UDP protocol for Minecraft would use more bandwidth and would have a retransmit and reorder layer on top to give TCP-like semantics for a lot of the protocol 21:14 < Xor_Boole> why doesn't the vanilla client recenter on bootstrap? waiiii 21:14 <+Amaranth> It would only be a clear win for entity movement 21:14 * Xor_Boole facedesks 21:14 < Paprikachu> hence why you wouldn't use the vanilla protocol 21:14 < Paprikachu> there is no point in doing that 21:14 < Paprikachu> it's not compatible, might as well design your own 21:14 <+Amaranth> I'm not talking about the current protocol 21:15 < Paprikachu> im not sure what you're talking about then 21:15 < Paprikachu> my impression was that you're talking about taking the current protocol and slapping it on top of udp 21:15 <+Amaranth> Most games basically just send the entire world state to every client every tick and use delta compression and sequence numbers to make that work 21:15 < Paprikachu> which obviously can't work 21:15 <+Amaranth> You can't send the entire world to every client every tick in Minecraft 21:16 < gurun> Amaranth, if all states change every tick, then it sends the entiry world every tick. 21:16 <+Amaranth> You have to send chunks only as needed, they have to arrive, and they have to arrive before you tell the client any other information about that chunk 21:17 < Paprikachu> and how is that an issue 21:17 < Paprikachu> of course you need to have some sort of reliability layer on top of udp 21:17 <+Amaranth> Like I said, you basically end up with a worse TCP for most of the protocol and only get the advantage for entity movement 21:17 < Paprikachu> thing is, you don't want it for *every* packet 21:17 < Paprikachu> no, you don't 21:18 < Paprikachu> you get more control 21:18 < Paprikachu> which is the entire point of udp 21:18 < Paprikachu> being able to identify orderings and reliability requirements and only do that 21:18 < gurun> Paprikachu, just for the record. Just becasue reading a rew buffer from disk is fast, doesn't mean that database are slow. 21:18 < Paprikachu> meh 21:19 < gurun> The only reason why i want MCPE to use Anvil, is becuase the tools and libraries we have are for anvil. 21:19 <+Amaranth> I still think it's right to use UDP for this I'm just pointing out it's not a huge win because Minecraft isn't Quake 21:19 < Paprikachu> no actually 21:19 <+Amaranth> SCTP would actually be pretty ideal for Minecraft :) 21:19 < Paprikachu> you're saying it's an issue because there is no "built-in" way of getting that flexbility 21:20 < Paprikachu> someone has to implement it. whether that is a protocol supported by the OS, a library, or the MC devs doesn't make a difference. 21:20 < gurun> SCTP sounds like RUDP 21:20 <+Amaranth> SCTP is what cellular networks use 21:20 < Paprikachu> sctp is far from perfect sadly 21:20 < Paprikachu> certainly better than tcp though 21:21 <+Amaranth> You can tell it was designed for the telephone system by the features it has 21:21 <+Amaranth> Mainly multihoming 21:21 < Paprikachu> i'd love to have proper multihoming 21:21 < Paprikachu> since i have two internet connections 21:21 < Paprikachu> but windows doesn't support it well and neither does software. so meh. 21:22 < gurun> so who cares. It's not like this is really an issue at all anyway. 21:22 <+Amaranth> Worse than a lack of OS support it'll be dropped by your router 21:22 <+Amaranth> And if it isn't it'll be dropped by the first hop after your router :) 21:22 < Paprikachu> i know 21:22 < Paprikachu> but im not talking specifically about sctp 21:23 < Paprikachu> multihoming in general is not supported well :/ 21:23 <+Amaranth> Java actually supports SCTP 21:23 < Paprikachu> isn't that just an api for sctp over udp 21:23 <+Amaranth> But the only way you can use SCTP is via layering on UDP and it doesn't support that 21:23 < Paprikachu> if you're gonna use some layering, might as well use some protocol better than sctp 21:24 < Paprikachu> the way they implemented "optional reliability" is just stupid 21:26 <+Amaranth> Something as big and bandwidth hungry as Minecraft would probably need congestion control too 21:26 < Paprikachu> for world download probably 21:26 <+Amaranth> Otherwise Comcast will start blocking Minecraft for network reliability reasons, same as they did to bittorrent before uTP 21:27 < Paprikachu> uhhh, american isps :p 21:27 <+Amaranth> If it was really a problem I'd hope every ISP would do that 21:27 <+Amaranth> Because the alternative is congestion collapse and this isn't the fucking 80s 21:27 < Paprikachu> makes me glad i'm from europe 21:27 < Paprikachu> :) 21:28 <+Amaranth> Europe doesn't follow the laws of physics? 21:28 < Paprikachu> we dont have sucky isps 21:28 < Paprikachu> ;) 21:28 < Aragas> russia does not, lol 21:28 <+Amaranth> There are two solutions for congestion collapse and only one is viable long term: upgrade the entire network to handle more traffic or implement congestion control in the protocols 21:29 < Paprikachu> i mean, obv mc needs congestion control for world downloads 21:29 < Paprikachu> but for movement updates, i'd choose a different approach 21:29 < Paprikachu> instead of collecting them at the sender side, just throttle the update rate 21:30 < Paprikachu> that also prevents outdated data. 21:31 < Paprikachu> the thing is, for that the application and protocol would have to work together in a way. not sure how that could be done. 21:49 < gurun> Paprikachu, first, and i really mean first .. make a server that actually has a problem with it. 21:49 < Paprikachu> heh 21:50 < gurun> the biggest performance enchancement in MCPE history is coming in the 0.11 version. And that is simply changing the entity ID's of some selected packages. --- Day changed mer. avril 08 2015 00:12 < Aragas> mobile client is spaming, sorry 00:22 < gurun> Aragas ? 00:22 < Aragas> leaving\joining 10:05 < TkTech> https://gist.github.com/TkTech/b81e122d3a2f39a85094 10:05 < TkTech> I don't know how to respond to that. Nothing I come up with is polite. 10:06 < Dinnerbone> Haha went through all the trouble to contact you without realising what a wiki is 10:06 < Dinnerbone> Bless <3 10:07 < TkTech> Right? It has the same visual style as wikipedia, something should have clicked ;-( 10:16 < Dinnerbone> Dear Mr. Wales, I write to you today to inform you that there is a typographical error on one of your pages. Yours sincerely, a concerned citizen. P.S. please make a contact page, it was not easy to find your home address. 11:16 < barneygale> TkTech, http://blogs.msdn.com/b/oldnewthing/archive/2012/10/17/10360184.aspx 11:55 < ScruffyRules> barneygale, Should we hack the site? XD 11:55 < barneygale> what? 11:56 < ScruffyRules> barneygale, That site implies we fix things our selves. 11:57 < ScruffyRules> If it wasn't a wiki. 12:04 < barneygale> does it? 13:42 < TkTech> barneygale: I think I'm just going to reply with that link. 14:08 < gurun> TkTech, i would answer back in educational form and with humble respect in the sense that the author obviouisly went through the hassle of finding you. From the eyes of authors like these, they usually feel they are trying to assist and help. Educating the author about wiki in a polite manner might render a new dedicated author for the wiki. 21:08 < Aragas> wow, started to work with C# PCL. It will be much easier to completely rewrite my network stuff. Totally ruined, even tcp connection can't handle normal. So burned. I fully understand now why there isn't vanilla minecraft on mobiles --- Day changed jeu. avril 09 2015 00:01 < Gjum> server relies on clients to send a position update every 50ms, right? what about the reflected position correction packet (cli->srv), does it count as a position update? 00:02 <+Amaranth> There is a flag for "are we expecting a position correction response" but I don't remember if the entity tick method is called when one of those comes in 00:03 <+Amaranth> I think that flag just disables the "does this movement make sense" checks and instead runs the "is this position the one we told the client to go to" check 00:05 < Gjum> I'm concerned about sending too many position updates, can that create problems for the client? Like loosing health faster? 00:06 <+Amaranth> It'll make things run faster, yeah 00:06 <+Amaranth> Potion effects, breath when underwater, health regain while satiated, etc 00:07 < Gjum> ok, thanks :) 00:08 <+Amaranth> But the client is so fucked here it probably doesn't matter 00:08 <+Amaranth> People won't notice the difference 00:09 <+Amaranth> You're guaranteed to see at least 20 position packets a second from the client (possibly deleted due to packet loss and latency and such) but sometimes you get a bunch more 00:09 <+Amaranth> The most common case is sometimes the client will send separate packets for position and rotation updates in the same tick (server tick) and sometimes it just spams them for reasons I don't understand 00:10 <+Amaranth> So if you're 1/50 off on ticking when teleporting a client no one will notice 00:11 < Gjum> well, it could be a problem if a buggy custom client sends the corrected position, then moves into an illegal spot and sends that wrong position over and over again every 50ms, that'd double the health etc. rates 00:11 * Gjum is writing client physics 00:14 <+Amaranth> If their new position is invalid you reject it 00:15 < Gjum> huh? i thought my client has to obey the server's sent position 00:16 <+Amaranth> Right, but until you do the server ignores your movement packets and once you sync back up if you send an obviously wrong one the server will send a teleport packet back to where you should be or kick you 00:16 <+Amaranth> It won't tick you either way 00:16 < Gjum> ah, right 00:16 <+Amaranth> This is not entirely correct because you can easily cheat but it's close enough for someone trying to play nice 01:07 < Hetal728> Ok, I have a really nooby question. How do I detect when a player disconnects? I've been detecting it with the KeepAlive packet, but I really don't want players to wait 30 seconds to know that someone disconnected 01:16 <+md_5> they send the server a kick/disconnect packet 01:16 <+md_5> also tcp 01:23 < Hetal728> @md_5 I'm unable to find one on wiki.vg 01:40 < Thinkofdeath> 1.8 removed the client -> server one 01:40 < Thinkofdeath> they just drop the connection now 01:46 < Hetal728> Oh ok 05:55 < Not-4e01> [wiki.vg] Edit by Deathcap to Protocol -> http://wiki.vg/index.php?title=Protocol&diff=6553&oldid=6548 13:49 < redstonehelper> in singleplayer, does the 45 second autosave happen independently of saving when I hit ESC? example, if my game autosaves, I wait 40 seconds, hit ESC, go back and wait 5 seconds, will it autosave again or will it only do so another 40 seconds after? 13:49 < ScruffyRules> redstonehelper, Didn't understand what you said but it saves every time you press Esc. 13:49 < redstonehelper> yes, I know that - let me rephrase 13:50 < redstonehelper> every 45 second, the world autosaves. if you hit escape, will it reset the implicit 45 second timer? 13:51 < Thinkofdeath> the autosave timer is based on ticks (last time I checked), pausing should stop ticking therefor pausing the timer. Whether minecraft manually resets that time I don't know 13:51 < Thinkofdeath> but i'd assume not 13:51 < redstonehelper> aw alright, thanks 13:51 < redstonehelper> I'll keep testing anyway 13:52 < Dinnerbone> It does not reset, it is paused 13:53 < ScruffyRules> Makes sense. 13:53 < redstonehelper> the tick timer, does it restart when you restart your game? 13:54 < ScruffyRules> Yes? XD 13:54 < redstonehelper> well, does it reset to 0? 13:54 < redstonehelper> it could be per-world or something like that 13:54 < ScruffyRules> That would be silly for something that goes every 45 seconds 13:54 < redstonehelper> ticks aren't just used for autosaving 13:55 < Dinnerbone> There is only one persisted tick counter, which is world time 13:56 < redstonehelper> welp, thanks 14:06 < ScruffyRules> Does the access token time out? 14:07 < ScruffyRules> Or whatever the term is. 17:46 < redstonehelper> how long does the autosave take usually? 17:47 < redstonehelper> for, say, 30 changed chunks 18:09 < TkTech> Probably the only way to get an accurate estimate for that will be to introspect the save and wrap it with a timer 18:58 <+Amaranth> redstonehelper: All it does on the main thread is serialize the chunks, the actual compression and file writing happens on a dedicated save thread 18:59 < redstonehelper> hm 19:11 < Xor_Boole> Amaranth is that vanilla now? 19:11 < Xor_Boole> if so TIL 19:11 <+Amaranth> Xor_Boole: Always have been, as far as I know 19:11 <+Amaranth> So at least since 2011 20:06 < TkTech> What happens in the unlikely scenario where the saving background thread doesn't finish before the next save timer triggers? 20:07 <+Amaranth> TkTech: I think it just builds up a larger and larger queue 20:07 <+Amaranth> Although I seem to remember something about it blocking the main thread to finish if the queue gets big enough 20:08 < redstonehelper> is there a way, as a non-cheating survival player, to find out when the autosave is happening (from in-game)? 20:09 < redstonehelper> panda says you can use a tile entity update detector against a brewing stand on the border between loaded chunks and chunks that will be unloaded when the next autosave happens, are there other ways? 20:21 < Xor_Boole> ...that is convoluted --- Day changed ven. avril 10 2015 02:48 <+md_5> someone still needs to reset my password please 16:03 < Gjum> md_5: same here, care to tell me when you found someone wo can reset my password? 16:05 < TkTech> Anyone else at PyCon this year? --- Day changed sam. avril 11 2015 01:02 <+md_5> TkTech Gjum and myself need password resets still 04:21 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±3] http://git.io/vvvYf 04:21 < Not-4e01> [mineflayer] rom1504 a02db44 - Fix large chest (see #166 : thanks @jimmyken793), add some checking in useChests.js, improve error displaying in inventory.js 12:57 < TkTech> md_5: You *both* forgot your passwords? 16:09 < dx> TkTech: yes, both of them. also that's answered in the three messages before the ping, excluding joins/parts 17:09 < conji> Hello, is anybody available with C# experience? 17:14 < jast> I only have experience with C# (and .NET) driving me up the wall 17:15 < conji> Haha I feel your pain at the moment. I'm having problem with sending chunk data with 1.8 protocol. Think anybody could give a stab at it? 17:21 < Aragas> conji: Mistah C% profi here, what's the problem? 17:25 < conji> Reading the protocol on http://wiki.vg it reads clearly how the layout for sending chunk data is, but the client keep responding with a corrupted frame exception of length being longer than 21bit. 17:27 < Grum> so you must be sending the wrong datas :( 17:28 < Aragas> can you public you code? It's really easy to amke here errors 17:30 < conji> https://gist.github.com/Conji/3abe53ef51ddef02b1d1 there's the process that I have for creating the chunk data (for bulk at least). 17:31 < Thinkofdeath> Do you have compression and how many chunks are you trying to pack into that packet? 17:32 < Thinkofdeath> Vanilla does 5 max at a time 17:32 < conji> Decompression packets have not been sent yet but I didn't know it did max of 5 at a time. 17:33 < conji> afaik, it won't try to decompress until you send a decompression packet, correct? 17:33 < Thinkofdeath> correct 17:34 < Thinkofdeath> however chunks are huge in size, its likely you are hitting the max packet size 17:34 < Thinkofdeath> specially if you are trying to packet tons of chunks into a single packet 17:34 < conji> True. I tried sending individual chunks as well but that had no luck either. 17:37 < Aragas> connection.WriteVarInt(chunks.Length); That's chunks count, correct? 17:38 < conji> Yes 17:41 < Aragas> All seems correct, except for ToBuffer(), still parsing it 17:42 < conji> Alright, so that answers several questions, thankfully :D 17:44 < Aragas> https://github.com/Aragas/MineLib.Network.Modular/blob/master/Data/Anvil/Chunk.cs#L65 you can compare. My code correctly reads data from MCB packet 17:45 < conji> How come I couldn't find this library amongst all the other ones I searched for? Oh well, thanks kindly! I'll keep you updated on whether or not it worked. 17:45 < Aragas> Nope 17:45 < Aragas> wait, ot that 17:45 < conji> Okie 17:45 < Aragas> https://github.com/Aragas/MineLib.Network.Modular/blob/master/Data/Anvil/Chunk.cs#L385 this is map chunk bulk 17:46 < conji> I'll get to work on it then. Again, thanks for the help. 17:47 < Aragas> Happy to help 17:51 < Not-311d> [Jawa] TkTech pushed 3 commits to master [+0/-3/±5] http://git.io/vvJb3 17:51 < Not-311d> [Jawa] TkTech 7e77081 - Documentation typos [about paragraph] 17:51 < Not-311d> [Jawa] TkTech d85659b - cf.py pylint warnings resolved. 17:51 < Not-311d> [Jawa] TkTech 2b66b82 - Strip out JarFile and EditableZipFile. EditableZipFile is nowhere near comprehensive enough to be [safely] used, and is likely more harmful to keep around than not. Just use the standard python ZipFile module to open JAR archives. 18:02 < jast> fwiw, my C#/.NET 4.5 issue is a call to System.Net.HttpWebRequest.GetResponseAsync() that fails with an OutOfMemoryException. if anyone has an idea how that is even possible, I'd appreciate a few hints... 18:03 < jast> technically I'm not sure whether it's the call itself or the await, but I figure it shouldn't happen either way 18:04 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vvJpA 18:04 < Not-4e01> [mineflayer] rom1504 094a951 - Check we have the items before using them in useChests.js (just like in chests.js) 18:09 < Xor_Boole> I must know: are model predicates going to include NBT tags? 19:18 < Not-4e01> [wiki.vg] Edit by Katnegermis to Rcon -> http://wiki.vg/index.php?title=Rcon&diff=6554&oldid=6190 21:10 < Not-311d> [Jawa] TkTech pushed 2 commits to KISS [+0/-0/±6] http://git.io/vvUxX 21:10 < Not-311d> [Jawa] TkTech d5db896 - Strip out all property proxies and setters/getters from cf.py 21:10 < Not-311d> [Jawa] TkTech 216295c - Less verbose constant creation methods. The create_ prefix is unecessary, and the behavour of these methods will be changing soon to return existing identicial constants already in the pool (closer to the real behaviour of JVM assemblers and compilers) 21:22 < Not-311d> [Jawa] TkTech pushed 1 commit to KISS [+0/-0/±6] http://git.io/vvTel 21:22 < Not-311d> [Jawa] TkTech b5fd649 - Make _load_io a public method (load_from_io) _load_io is currently private, but is used as if it was public method by many internal classes. This is wrong, since many Attributes for example in turn load more attributes from a byteblock. A method will have a Code attribute which in turn has an AttributeTable which can contain more Attributes that reference other Attributes! 21:23 < TkTech> I put some attributes in your attributes that are attributes of other attributes because Java says F* YOU! 21:26 < TkTech> md_5 / Gjum when you made your wiki account did you give it a real email address? 21:50 < Gjum> TkTech: msg'd you, but again: there was no email field when I registered. If it helps, I've still got a valid session in my browser, and the sha256 of a secret message on my user page to verify I'm myself. 22:01 < TkTech> Gjum: privmsg? I don't see anything from you but my bouncer might be mucking up. 22:03 < Gjum> probably 22:47 < TkTech> Gjum: Have you said anything since my last message? 22:58 < Gjum> TkTech: yes? 22:03:31 probably 22:58 < Gjum> got problems with your bouncer? --- Day changed dim. avril 12 2015 00:13 < AlphaBlend> are the names on the tab list for the minecraft client unique to any other part of the client? as in, if I add fake players to PacketPlayOutPlayerInfo, and send to the client, is it going to throw a fit anywhere else in the client? 00:22 <+Amaranth> AlphaBlend: I don't think so but you do have to send all the actual players otherwise it will 00:22 <+Amaranth> So you can't replace the real data with some kind of banner or whatever, you can only add to the list of real players 00:23 < AlphaBlend> ah 00:23 < AlphaBlend> in this case i'm using three fake players and then the real players 00:23 < AlphaBlend> the first time i send this do i need ADD_PLAYER, or can i be fine with UPDATE_PLAYERS? 00:24 <+Amaranth> Not sure 00:24 < AlphaBlend> i guess i'd just test it out to see 04:01 < conji> Hey, me again. So I don't have le error of the data being larger than 21 bit or whatever when sending chunks. Sadly now though, there's no blocks that generate. 05:11 <+md_5> md_5: You *both* forgot your passwords? 05:11 <+md_5> md_5 / Gjum when you made your wiki account did you give it a real email address? 05:11 <+md_5> 1) its in my password manager but not being accepted, 2) if it has en email stored, its real 12:16 < Not-4e01> [fNbt] fragmer pushed 1 commit to master [+0/-0/±3] http://git.io/vvIxH 12:16 < Not-4e01> [fNbt] fragmer e251acd - Empty lists with TagType "End" are now allowed. Unit tests and comments have been updated. Thanks to NiclasOlofsson. Fixes #12 14:22 < Not-4e01> [fNbt] fragmer pushed 2 commits to master [+0/-0/±8] http://git.io/vvLuf 14:22 < Not-4e01> [fNbt] fragmer 8f37bc9 - Cleaned up some minor ReSharper warnings. 14:22 < Not-4e01> [fNbt] fragmer 3debdfc - Release 0.6.3 - updated version numbers, copyright years, and changelog. 14:23 < Not-4e01> [fNbt] fragmer tagged 3debdfc as v0.6.3 http://git.io/vvLuC 14:55 < Not-4e01> [fNbt] fragmer pushed 1 commit to master [+0/-0/±1] http://git.io/vvLr9 14:55 < Not-4e01> [fNbt] fragmer 5005727 - Fixed documentation link in README.txt 21:44 < Not-4e01> [wiki.vg] Edit by Vektoren to Rcon -> http://wiki.vg/index.php?title=Rcon&diff=6555&oldid=6554 --- Day changed lun. avril 13 2015 01:29 < TkTech> md_5 / Gjum Train arrives in about 30 minutes, about an hour after that I'll be home and get you both reset. I will probably also make emails mandatory and enable resets. 16:07 < TkTech> md_5: Are you using some alternative account name? No user by the name md_5, md5, etc... exists. 16:07 < TkTech> md_5: Ah, uppercaes M. 16:40 < TkTech> Wiki's going to be all loopy for a bit, the box it runs on is getting updated. 16:41 < Dinnerbone> The wiki just called me a teapot and then turned into a pigeon and swam away. Can confirm, quite loopy. 16:43 < TkTech> Silly wiki 17:15 < TkTech> Alrighty, wiki should be back to normal and no longer flying away. 17:16 < TkTech> Self-serve password resets are now enabled as well. 17:17 < Xor_Boole> did you make sure to nail it down with the tears of the damned? 17:17 < Xor_Boole> also apparently `public synchronized Foo() {}` is illegal. this amuses me. 18:51 < TkTech> I've tested the email verification and password resets but please let me know ASAP if you encounter a problem. 19:44 < TkTech> Looks like I need to do another Grand Purge on the wiki. Spam accounts getting a little out of hand. 19:58 < TkTech> *Boom* go the first 3655 accounts and 150 revisions. 20:02 * Fenhl checks if his account is still there 20:02 < Fenhl> :P 20:56 < TkTech> I wouldn't do that to you :) 20:56 < TkTech> 356 more accounts down the drain. 20:59 < TkTech> And another 74. 21:01 < TkTech> Down to 187 users, almost all of whom should be real. 21:06 < Xor_Boole> the number of fake users is a set of measure zero 22:36 < Gjum> TkTech: thanks for sanitizing the wiki. Now if I only could set an email address to reset my password without knowing my password... 23:17 < TkTech> Gjum: code.gjum@gmail.com right? 23:20 < TkTech> Gjum: I set your email address, you should be able to just hit reset. 23:47 < TkTech> Gjum: Looks like you're good now? 23:49 < Not-4e01> [wiki.vg] Edit by TkTech to IC:Protocol -> http://wiki.vg/IC:Protocol 23:49 < Not-4e01> [wiki.vg] Edit by TkTech to Sandbox -> http://wiki.vg/Sandbox 23:49 < Gjum> TkTech: yup, thanks a lot! 23:50 < Not-4e01> [wiki.vg] Edit by TkTech to Internal versioning -> http://wiki.vg/Internal_versioning 23:53 < Not-4e01> [wiki.vg] Edit by TkTech to Lan Worlds -> http://wiki.vg/Lan_Worlds 23:56 < TkTech> http://wiki.vg/Talk:Minecraft.net 23:57 < Not-4e01> [wiki.vg] Edit by TkTech to MinecraftCoalition:Current events -> http://wiki.vg/MinecraftCoalition:Current_events 23:58 < Not-4e01> [wiki.vg] Edit by TkTech to MinecraftCoalition:Community portal -> http://wiki.vg/MinecraftCoalition:Community_portal 23:59 < TkTech> MrARM: Yo, disable the away nick or you'll get the boot 23:59 < Not-4e01> [wiki.vg] Edit by TkTech to MinecraftCoalition:About -> http://wiki.vg/MinecraftCoalition:About 23:59 < Not-4e01> [wiki.vg] Edit by TkTech to MinecraftCoalition:Privacy policy -> http://wiki.vg/MinecraftCoalition:Privacy_policy 23:59 < Not-4e01> [wiki.vg] Edit by TkTech to MinecraftCoalition:General disclaimer -> http://wiki.vg/MinecraftCoalition:General_disclaimer --- Day changed mar. avril 14 2015 00:00 < TkTech> Thinkofdeath: http://wiki.vg/index.php?title=Plugin_channel/BungeeCord&action=history 00:00 < TkTech> Thinkofdeath: What's up with this page, want to keep it or is it safe to delete? 00:00 < Thinkofdeath> safe to delete 00:01 < Not-4e01> [wiki.vg] Edit by TkTech to Wishlist -> http://wiki.vg/Wishlist 00:01 < Not-4e01> [wiki.vg] Edit by TkTech to Plugin channel/BungeeCord -> http://wiki.vg/Plugin_channel/BungeeCord 00:01 < Not-4e01> [wiki.vg] Edit by TkTech to Protocol Overview -> http://wiki.vg/Protocol_Overview 00:01 < Not-4e01> [wiki.vg] Edit by TkTech to Protocol JSON -> http://wiki.vg/Protocol_JSON 00:02 < Not-4e01> [wiki.vg] Edit by TkTech to NBT compression -> http://wiki.vg/NBT_compression 00:02 < Not-4e01> [wiki.vg] Edit by TkTech to Mineflayer -> http://wiki.vg/Mineflayer 00:02 < Not-4e01> [wiki.vg] Edit by TkTech to TestObject -> http://wiki.vg/TestObject 00:02 < Not-4e01> [wiki.vg] Edit by TkTech to Vb Minebot -> http://wiki.vg/Vb_Minebot 00:02 < Not-4e01> [wiki.vg] Edit by TkTech to SoundNames -> http://wiki.vg/SoundNames 00:03 < Fenhl> TkTech: my user page disappeared 00:03 < Not-4e01> [wiki.vg] Edit by TkTech to NBT.txt -> http://wiki.vg/NBT.txt 00:03 < Fenhl> and all subpages 00:06 < Fenhl> …looks like all user pages disappeared? 00:34 < Gjum> mine disappeared too 01:19 < TkTech> Gjum: What disappeared? 01:19 < TkTech> (My bouncer is seriously fucked up) 01:26 < Gjum> TkTech: poor guy. Fenhl and I noticed that all userpages disappeared... http://wiki.vg/index.php?title=Special:ListUsers&offset=&limit=500 01:56 < TkTech> Gjum: Oh, yeah, that was intentional. I nuked the entire namespace since it was almost entirely spam. 01:56 < TkTech> Gjum: It was backed up of course if you really must have something restored. 01:56 < TkTech> I searched for a long time and could not find a non-spam user page that wasn't just "my name is bob" 01:57 < Gjum> perhaps go for the length of the page, some link their projects 01:58 < Gjum> or look which ones have any heading 01:59 < dx> TkTech: can we blame your fucked up bouncer for the fact that we have no idea what you're planning to do with notifico? 01:59 < TkTech> dx: Huh? And wrong channel. 02:00 < dx> TkTech: i mean, you seem to be losing messages 02:00 < TkTech> dx: Yes, what does that have to do with Notifico? 02:01 < dx> TkTech: i asked about the status of merging v2 roughly 300 times in the last few months, couldn't tell if you were ignoring me for being too annoying, or if you just didn't see any of those messages :D 02:02 < TkTech> Yes 02:02 < dx> best answer 02:02 * dx commits sudoku 02:02 < dx> i'll stop asking. 02:02 < TkTech> sudoku = number puzzle 02:03 < TkTech> Seppuku = gut stabby stabby 02:03 < dx> same shit 02:22 <+AndrewPH> no you've got them reversed TkTech 03:10 < dexter0> Guess my wiki account got purged. 03:13 < jython234> :/ 07:12 < TkTech> dexter0: Your account would only have been purged if you had 0 contributions, the only account deletions were done by the regular mediawiki maintence script. 07:13 < TkTech> AndrewPH: http://en.wikipedia.org/wiki/Seppuku ... 07:13 < dexter0> And indeed I did have 0 contributions (except perhaps a user page). So I shall just recreate my account. 07:13 <+AndrewPH> TkTech: I was kidding 07:13 < TkTech> dexter0: Yup, sorry for the trouble. 09:19 < MrARM> TkTech, , will do that after I get home 09:19 < MrARM> *oka 09:19 < MrARM> *okay 09:19 < MrARM> dammit, I was pressing backspace not enter 09:20 < MrARM> that okay was supposed to be before the second ',' 09:28 < MrARM> well actually nvm did that now 11:04 < rom1504> oh there was a mineflayer page TkTech ? what was on it ? 15:49 < TkTech> rom1504: Just a small blurb, don't remember now but I think it was last modified in 2013 15:50 < TkTech> rom1504: It was very out of date and had no inbound links so *poof* 15:52 < rom1504> ok, the information on the github repo is more up to date and complete anyway 16:29 < Xor_Boole> hmm, is there any reason the model spec doesn't make faces be culled iff both of the touching faces have cull=true? 16:29 < Xor_Boole> or... meh, that wouldn't work 16:30 < Xor_Boole> I wish wether a block caused culling was controlled by the model 17:27 < TkTech> dexter0: Your email provider rejected your authorization email >_> 17:27 < TkTech> dexter0: Doesn't look like they're setup to properly follow the sender aliases in the email header, good to know anyways I can kludge that. 20:03 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vvBvm 20:03 < Not-4e01> [mineflayer] rom1504 3517e8d - use new node-minecraft-protocol version 21:27 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vvBSa 21:27 < Not-4e01> [mineflayer] rom1504 75e3ede - small change in digger.js example (make it work a little bit better) 21:34 < morfin> hello i have a weird question 21:35 < morfin> how does flying TNT affect explosion calculations? I mean TNT1 explode and near the other flies - does flying TNT affect rays calculation? 21:48 < rom1504> morfin: how could it affect anything ? the explosion is computed at a fixed time isn't it ? 22:01 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vvRfR 22:01 < Not-4e01> [mineflayer] rom1504 f982b4c - actually fix digger.js (placeBlock takes a referenceBlock not a targetBlock) 22:06 < gurun> morfin, you mean the "primed TNT entity" or? --- Day changed mer. avril 15 2015 03:24 < Not-4e01> [mineflayer] roblabla pushed 1 commit to master [+0/-0/±1] http://git.io/vv05K 03:24 < Not-4e01> [mineflayer] roblabla 9ee9e49 - Fix bit fiddling in multi_block_change 09:27 < morfin> yes primed tnt entity which could fly any direction when pushed by another explosion(that's how TNT cannon works) 16:35 < Not-4e01> [wiki.vg] Edit by AlejandroHuber3 to Men s Jackets Coats Up To 70 Off At Sierra Trading Post -> http://wiki.vg/index.php?title=Men_s_Jackets_Coats_Up_To_70_Off_At_Sierra_Trading_Post&diff=6574&oldid=0 16:36 < Xor_Boole> let's purge the wiki they said, it'll get rid of the bots they said 16:42 < TkTech> I never said that, no I did not good sir! 16:43 < Not-4e01> [wiki.vg] Edit by TkTech to Men s Jackets Coats Up To 70 Off At Sierra Trading Post -> http://wiki.vg/Men_s_Jackets_Coats_Up_To_70_Off_At_Sierra_Trading_Post 16:46 < TkTech> I added a "NUKE" button to the template, and I do enjoy pressing it. 17:43 < redstonehelper> I'm trying to push an ender crystal through the portal into the overworld, but when it goes into the portal it comes out on the end spawn platform, not in the overworld - what do? 18:38 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vv2VV 18:38 < Not-4e01> [mineflayer] rom1504 5e84940 - update to minecraft data 0.1.1 19:01 < Not-4e01> [mineflayer] rom1504 pushed 1 commit [+0/-0/±3] http://git.io/vv2yI 19:01 < Not-4e01> [mineflayer] rom1504 73ffc11 - Release 1.1.0 19:01 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±3] http://git.io/vv2yL 19:01 < Not-4e01> [mineflayer] rom1504 73ffc11 - Release 1.1.0 19:04 < Not-4e01> [mineflayer] rom1504 pushed 1 commit to master [+0/-0/±1] http://git.io/vv2Sd 19:04 < Not-4e01> [mineflayer] rom1504 a64b7d0 - add npm badge 20:33 <+AndrewPH> TkTech: but I thought "mens jackets/coats up to 70% off at sierra trading post" was a new packet! 22:10 < TkTech> AndrewPH: If it was I'd hunt down Dinnerbone and smack him with a trout. 22:13 < Dinnerbone> Well I've heard significantly less bitching about the protocol since my rewrites to the packet layer so I'm hoping I did something right, I don't like fish! 22:13 < TkTech> This...this is a PERSON... 22:14 < TkTech> It's not a bot posting this random crap, it's a person... 22:14 < Dinnerbone> Yes, most spambots on the internet are actually people. It's a common misconception. 22:14 < TkTech> It's not even trying to link spam, what's the point :| 22:15 < Dinnerbone> It's the cheapest, most efficient and completely unpreventable way to spam any site regardless of captcha, honeypots, whatever 22:15 < Dinnerbone> Labour is cheap. 22:15 < TkTech> Welp, time to change the registration challenge to "Ask on IRC" 22:16 < rom1504> turing test 22:16 < Dinnerbone> Whenever I make a blog post (roughly: once a year) I get legit comments for 2 days, then human spambots for 2 days, then robotic spambots until I close it. The human spambots will actually talk briefly about the post's subject (not stuff that could be autogenerated, some actually had good points) and then linked back to some free pills websites 22:17 < Xor_Boole> > human spambot 22:17 < Xor_Boole> toppest of keks 22:17 < Dinnerbone> For lack of better term. It's some guy in a poor country (I can only assume) being paid to fill out forms. 22:17 < shoghicp> bot spamhuman 22:18 < TkTech> Dinnerbone: Probably, I do the same thing with Turks when I'm too lazy to do data entry. 22:18 < Xor_Boole> lol 22:18 < Dinnerbone> Just like there are captcha services for fractions of a cent per captcha - there's humans on the other side who get paid to repeat whatever this image shown to them said. 22:18 < Xor_Boole> usually you can get that done by hiring desperate freshmen around here 22:18 < Dinnerbone> captcha solving services* 22:18 < TkTech> Xor_Boole: Do that too, call them interns. 22:19 < Xor_Boole> Dinnerbone yeah at this point I'm starting to fail to see the point of captchas, since they'll only protect against fully automated bots. 22:19 < Xor_Boole> better computer vision doesn't help either 22:19 < Dinnerbone> The only benefit is that they're an inconvenience 22:19 < Dinnerbone> Literally just that. 22:19 < rom1504> recaptcha doesn't work like that anymore ;) 22:19 < Xor_Boole> Dinnerbone and the occasional 4chat troll vector =D 22:20 < Dinnerbone> If you're an inconvenience to the spammer, they probably won't hit you unless you're specifically targeted. 22:20 < Xor_Boole> s/chat/chan 22:20 < TkTech> Xor_Boole: The modern reCaptcha uses statistical browser behaviour to determine "humanity" - mouse movements, browser fingerprints, tracking cookies, etc... 22:20 < Xor_Boole> Xor_Boole TIL 22:20 < Xor_Boole> did I ping myself 22:20 * Xor_Boole facepalms 22:20 < Xor_Boole> TkTech* 22:20 < TkTech> Xor_Boole: It can be as simple as a "Click Here" now, and the answer is really your mouse movements. 22:21 < Xor_Boole> I said this morning, today is not going to be a good day. I have yet to see evidence otherwise 22:21 < rom1504> yeah because they figured out their algorithm to read address number on google street pictures can solve 97% of captcha 22:21 < TkTech> Yup, google has the power of the masses. 22:21 < TkTech> They have an absurd ability to gather training data for any particular sample problem. 22:22 < Dinnerbone> I got invited to trial it before they release that, along with another prototype which uses advertisements. It's pretty cool, but it still only prevents automatic bots - since the majority of spam that bypasses regular recaptcha is from humans, it's moot. 22:22 < TkTech> Simply by throwing a few billion humans at it. 22:22 < Dinnerbone> Also the checkbox recaptcha is optional, it's a convenience for humans but it matters nothing to spammers 22:22 < TkTech> Dinnerbone: That's correct, but you also can't stop trying to defeat the automated ones. Because that *one time* the automated bot breaks through it can instantly flood your service. 22:23 < Dinnerbone> (optional in that it gives you the "old" recaptcha if you wish. It added no security.) 22:23 < Dinnerbone> Yes of course 22:24 < Xor_Boole> mrw I forget java doesn't have abstract fields 22:24 < Xor_Boole> oracle pls 22:24 < Dinnerbone> Abstract getters/setters or use generics 22:24 < rom1504> hopefully soon the focus will be on stopping what you want to stop (for example spaming meaningless stuff) instead of trying to distinguish between human and bot 22:25 < Xor_Boole> Dinnerbone well yeah, I just code too much scala 22:25 < TkTech> If I stuck a donate button on the wiki, do you think anyone would ever click it? 22:25 < TkTech> I don't mean actually donate because no one ever does, but I wonder how many clicks it would get that don't follow through 22:26 < Xor_Boole> TkTech nonzero I'm sure 22:26 < TkTech> Googlebot doesn't count 22:26 < Xor_Boole> probably quite small, but at least nonlinear compared to actual noations 22:26 < Xor_Boole> holy shit I can't spell 22:27 < Xor_Boole> why haven't I written an auto-correct plugin for irssi yet? oh right, that requires using perl 22:28 < TkTech> Lies 22:28 < TkTech> irssi works with python and pretty much anything else. 22:28 < Dinnerbone> rom1504, I was really close to leaving (but removing the links) some spam posts on my blog because they were actually very relevant and thoughtful, save for their website url stuck in the end. 22:28 < Xor_Boole> wat 22:28 < Xor_Boole> I was lied to 22:28 < rom1504> Dinnerbone: I guess in that case you'd want to detect and remove the unwanted urls 22:29 < TkTech> Dinnerbone: rel="nofollow" always always at a minium in comments, or just always strip links 22:29 < TkTech> rel="nofollow" makes all their link spamming utterly worthless, gains them nothing. 22:29 < Dinnerbone> Yes I do that 22:30 < Dinnerbone> But I do let people link to their sites, I just turn off comments after a few days and moderate the posts manually 22:30 < TkTech> What's the advantage of letting them link? 22:30 < Dinnerbone> I post like once a year it doesn't matter to me :D I just find it super interesting that spammers aren't always robots. 22:30 < Xor_Boole> I think there's a post somewhere on my forums where some guy made a serious response to a spambot 22:30 < Xor_Boole> he was a little... tipsy when he wrote it 22:31 < Dinnerbone> TkTech, usually it's their twitter or youtube or something, I have no objections to it so I let them do it. Sometimes it's relevant to the article, like the youtube competitors 22:31 < rom1504> soon bot comments will be smarter than human comments and you will use the captcha to forbid humans to post :P 22:32 < TkTech> Dinnerbone: Hm, maybe a common social media whitelist? I hadn't thought of that. 22:32 < TkTech> I know a lot of forums use bbcode instead of allowing all links ([twitter][/twitter]) 22:34 < TkTech> The Mojang API page is now the official #1 most popular by inbound links. 22:34 < TkTech> Almost entirely people asking "How do you get a player name from a UUID? 22:35 < Dinnerbone> Hah 22:36 < Xor_Boole> TkTech wait, you don't have to sacrifice a goat at the full moon? 22:36 < TkTech> http://wiki.vg/Minecraft_Pi_Protocol - Is there a better source for this page now that I'm overlooking? 22:36 < Xor_Boole> I've been using mojapi wrong all this time! 22:36 < TkTech> It hasn't been updated since 2013 and hasn't gotten any formatting love, I doubt it's up to date. 22:36 < TkTech> Still has a few hundred inbound hits. 22:37 < Dinnerbone> It's probably as relevant as the pi version is :p 22:38 < TkTech> Oh, snap. 22:39 < Xor_Boole> do people even care about pi version? 22:39 < Xor_Boole> like, I forgot it even existed =p 22:40 < TkTech> Apparently not! I just prefer adding an "Outdated!" warning to the page rather than let people think it's up to date. 22:40 < TkTech> That said, the Pi might not have been updated since. 22:40 < TkTech> ~*WHO KNOWS*~ 22:40 < Xor_Boole> somehow I feel mojang forgets it exists sometimes 22:40 * Xor_Boole runs 22:41 < Dinnerbone> It hasn't and likely won't be. It was an experiment. 22:41 < Dinnerbone> Outdated notice is a good idea. 22:43 < Xor_Boole> I've heard worse ideas 22:43 < Xor_Boole> like porting the JVM to a computercraft environment and reimplementing minecraft from there 22:47 < TkTech> And added. 22:47 < Not-4e01> [wiki.vg] Edit by TkTech to Minecraft Pi Protocol -> http://wiki.vg/index.php?title=Minecraft_Pi_Protocol&diff=6578&oldid=3889 --- Day changed jeu. avril 16 2015 00:48 < Not-4e01> [wiki.vg] Edit by Roblabla to Client List -> http://wiki.vg/index.php?title=Client_List&diff=6579&oldid=6545 01:12 < Not-4e01> [wiki.vg] Edit by DemiPixel to Client List -> http://wiki.vg/index.php?title=Client_List&diff=6580&oldid=6579 02:21 < Not-4e01> [wiki.vg] Edit by Woder to Client List -> http://wiki.vg/index.php?title=Client_List&diff=6581&oldid=6580 11:27 * Thinkofdeath smacks woder around the head 17:01 < morfin> should i switch session to disconnect mode when received disconnect packet immediately? 17:02 < morfin> so nothing would be read from socket for those session automatically 17:43 < yawkat> http://blog.ammaraskar.com/minecraft-vulnerability-advisory/ 17:43 < yawkat> server crash via huge zipped nbt structure. 17:43 < ScruffyRules> Please upvote it on reddit; http://redd.it/32tb8e 17:47 < SinZ> does dinnerbro and co know about it? 17:47 < dx> the post says they do 17:47 < yawkat> well according to the article it was reported 2 years ago 17:47 < yawkat> yep 17:48 < Dinnerbone> No. It looks like a bug we fixed a few years ago, though, so I'm surprised it isn't still. 17:48 < Dinnerbone> When we parse nbt from client it has a limit on how much memory that can take, and then we throw an error (disconnect the client, not crash the server) if it was too much. 17:49 < Dinnerbone> I guess it must be broken 17:49 < Thinkofdeath> if you mean the limit reader that nbt has i'm pretty sure it misses a few cases 17:49 < Dinnerbone> Well then that needs to be reported! 17:50 < Thinkofdeath> :) I tend to report most of the things I find. I think this was a while ago though 17:50 * Thinkofdeath goes and checks commits 17:50 < yawkat> is it fixed in spigot? 17:50 < Thinkofdeath> no idea 17:51 < Thinkofdeath> I know we've done a few things around that area 17:52 < yawkat> hai 17:52 <+ammar2> hi. 17:52 < ScruffyRules> hi 17:52 < yawkat> ammar2: http://s.yawk.at/UYXT 17:53 < ScruffyRules> .log 17:53 <+ammar2> so your fix is broken, did you just bother not testing it at all? 17:53 <+ammar2> I did give you the code back then too 17:55 < ScruffyRules> How do I get my token in the easiest possible way? :P 17:55 < Thinkofdeath> yawkat: nope it isn't, guess we still missed cases :P 17:55 < yawkat> cant just limit size of an nbt input to like 1mb? 17:56 <+ammar2> well ideally the client should never send nbt to the server in the first place 17:56 < Thinkofdeath> no so easy, the length prefix was dropped in 1.8 17:56 < yawkat> hm... 17:56 <+ammar2> and if it does, it should be hard capped to a certain size 17:56 < yawkat> Thinkofdeath: could wrap the bytebuf to fail once it exceeds a certain read len 17:56 < Thinkofdeath> thats what we do apparently 17:57 < yawkat> whats the limit? 17:57 < Thinkofdeath> assuming that broke 17:58 < Dinnerbone> Following the code it should be cutting off at 2mb, not sure why it's not. 17:58 < Dinnerbone> Testing it in 1.8.3 now 17:59 < Dinnerbone> We have done a lot of protocol refactoring since 1.6 so I suspect this broke somewhere along the way 17:59 < Xor_Boole> did it work originally though? 18:02 < Dinnerbone> It's so long ago and I wasn't involved in that I can't actually say. I can only speak for now. 18:03 < yawkat> looks to me like it only cuts off at 2mil lists 18:03 < Thinkofdeath> I think I know why ours failed, NBTReadLimit works in bits not bytes. (We changed the system slightly) 18:04 < Dinnerbone> I can't find a relevant issue on the bug tracker. ammar2, do you have a link for me? 18:04 <+ammar2> I didn't personally make a ticket for it, G.rum said he delegated it 18:04 < Dinnerbone> (I am assuming by "defacto standard procedure, I responsibly and privately disclosed the problem" you used the formal channels) 18:04 < Dinnerbone> I see 18:05 < Dinnerbone> And the 3 month pokes - were they 3 months ago from now, or 3 months after reporting it? 18:05 < Dinnerbone> I assume, also, in private to one person? 18:06 <+ammar2> formal channels. Well yes, I was assured it would be fixed, and yes I did ask that person since he refused to give me any more information sicne it was on a "need to know" basis 18:07 < Dinnerbone> By formal channels I meant either email (less preferred but works) or bug tracker (highly preferred), but okay thank you 18:07 <+ammar2> that's a fair point, but I thought it would be redundant at that point 18:07 <+ammar2> I assumed that you made a ticket yourself to handle it internally 18:08 < Dinnerbone> For future knowledge, the bug tracker is the absolute place to put this. You mark it as private, you'll get updates on its progress and can raise concerns/questions as you need 18:11 < Dinnerbone> ammar2: can you 100% confirm it was not fixed in 1.6 nor 1.7? 18:11 < Dinnerbone> Did you see that it was still broken in every update, or is this just checking an old exploit and it still works? 18:11 <+ammar2> Dinnerbone: I can confirm 1.6 for now, need to check 1.7 18:12 <+ammar2> also, aren't private tickets on your tracker visible to ALL volunteers? 18:12 < Dinnerbone> There's a possibility it's a different bug introduced in 1.8 that could theoretically be caused by the same case. 18:12 <+ammar2> that's a lot of people 18:12 < Dinnerbone> To moderators, people whom I trust explicitly. There are very few of them. 18:13 < Dinnerbone> If you do not trust them, you can opt not to show it to them. 18:16 <+ammar2> can't test 1.7 right now, but it definetly was a problem in 1.6 18:16 < morfin> what's actual max packet length for protocol? 18:17 < Thinkofdeath> 2^21 - 1 I think 18:17 < morfin> hmm\ 18:17 < morfin> still fits in my uint32_t 18:18 < morfin> 2Mb? 18:18 < yawkat> yes 18:22 < Thinkofdeath> ammar2: I think your exploit works for a different reason than you think 18:22 < Thinkofdeath> Your list lengths increase in size each level, level 3 being Length: 150994944 18:22 < morfin> lol 18:23 <+ammar2> well yeah 18:23 <+ammar2> each list down has more data 18:23 <+ammar2> wait no, each list up should have more data 18:23 < morfin> wait when client send NBT to server? oO 18:23 < Thinkofdeath> your code shows you setting the length to 10 for each list 18:23 < dx> 150 million list items? am i reading right? 18:23 < SinZ> "the packets used as attack vectors are the 0x08: Block Placement Packet and 0x10: Creative Inventory Action." 18:24 <+ammar2> that's the number of elements in the list isn't it 18:24 < Thinkofdeath> yes 18:24 <+ammar2> so its just 10 lists in 10 lists in 10 lists in 10 lists 18:24 < dx> this isn't the same 37mb payload mentioned in the post, is it? 18:24 <+ammar2> the 37mb is just the nbt payload 18:24 <+ammar2> the actual java objects for it take like a gig 18:24 <+ammar2> or more 18:25 <+ammar2> https://imgur.com/3cs2ULu,N4MeygX#0 18:25 < Thinkofdeath> Dinnerbone: ha I know why it isn't caught by the limit reader (I think) 18:25 <+ammar2> some guy posted these screenshots 18:25 < yawkat> one list is 86 bytes. 18:25 < morfin> and what's best way to get rid of those 18:25 < Thinkofdeath> Length: 150994944 0 18:25 < Thinkofdeath> the 0 being the type 18:25 < Thinkofdeath> 0 = end tags 18:25 < Thinkofdeath> which have no length in a list 18:25 < Thinkofdeath> so the limit reader is never called 18:25 <+ammar2> well for one morfin, on block place that item is completely unecessary. The server knows what item the player is holding anyway 18:26 <+ammar2> and just ignores the item sent by the client 18:26 <+ammar2> Thinkofdeath: oh yeah, it all ends in end tags 18:26 <+ammar2> 10 end tags at the lowest level 18:26 < yawkat> each list has an end tag? 18:27 < yawkat> even in mem? 18:27 < morfin> you will have to parse that shit 18:27 < Xor_Boole> yawkat I don't think so 18:27 < Thinkofdeath> ammar2: your code shows differently which is why I was confused 18:27 <+ammar2> yeah the code wasn't exactly written to be readable :P 18:27 < Grum> ammar2: can you write the binary payload to a filesomewhere? 18:27 < Grum> just the raw nbt? 18:28 < morfin> because of those creative inventory action 18:28 <+ammar2> ehh hold on 18:28 < Grum> because this *should* be caught by the accounter, but actually earlier already by the unpacker of the packets 18:28 <+ammar2> Thinkofdeath: do you have a pycraft instance running? my internet is horrible 18:28 < Thinkofdeath> I do 18:28 < morfin> wait does not Minecraft check if user was in creative or not? 18:29 < Grum> not at that stage 18:29 < morfin> oh 18:29 <+ammar2> from start import generate_exploitative_nbt 18:29 < morfin> so it try to parse 18:29 <+ammar2> with open("out.nbt", "w") as f: 18:29 <+ammar2> f.write(generate_exploitative_nbt()) 18:29 <+ammar2> can you just run that 18:29 < morfin> and then boom 18:29 <+ammar2> in python 18:29 <+ammar2> and give grum the out file 18:30 < Grum> ammar2: i'd like to run it myself but obviously pythons crypto shit refuses to compile on osx 18:30 <+ammar2> Grum: oh this new crypto library should run fine on osx I think 18:31 <+ammar2> # There is insufficient memory for the Java Runtime Environment to continue. 18:31 <+ammar2> # Native memory allocation (mmap) failed to map 672661504 bytes for committing reserved memory. 18:31 <+ammar2> lol 18:31 < dx> http://dequis.org/out.nbt.gz 18:31 < Thinkofdeath> http://dl.thinkofdeath.co.uk/stuff/out.nbt.zip 18:31 < Thinkofdeath> damn 18:31 < Thinkofdeath> .-. 18:31 <+ammar2> rekt 18:31 < yawkat> heh 18:32 < yawkat> ammar2: that the error? 18:32 < yawkat> from the vm 18:32 < dx> the contents aren't very interesting http://dump.dequis.org/BczLt.png 18:33 < dx> it just repeats that for 26mb 18:33 <+ammar2> yawkat: yeah it crashed the jvm for some guy 18:33 < yawkat> im just wondering if it could crash the vm before the limiter kicks in. 18:33 <+ammar2> can't 18:33 < dx> ammar2: this file also triggers a bug in radare2, congratulations 18:33 <+ammar2> dx: two birds with one stone :') 18:36 < Thinkofdeath> 'Tried to read NBT tag that was too big; tried to allocate: 2097153bytes where max allowed: 2097152' that'll do for now 18:37 < mbaxter> At first I (mis)read that message as "My solution to the problem is to limit NBT to precisely one byte smaller than ammar's proof of concept!" 18:37 < Thinkofdeath> lol 18:37 < Xor_Boole> seems like the kind of solutions thinky would come up with 18:38 * Xor_Boole runs 18:38 < Thinkofdeath> nah I just added a byte for all list elements since end tags previously had a size of 0 18:38 < Thinkofdeath> I think the limitreader already covers the other cases 18:38 < yawkat> Thinkofdeath: if you want to know, an nbttaglist instance without items is 86 bytes in memory. 18:39 <+ammar2> jeez that's a lot of overhead 18:39 < yawkat> this includes 10 reference slots in the arraylist 18:39 < yawkat> 10 free ones 18:39 < Grum> Yeah it doesn't account for that, maybe it should 18:39 <+ammar2> oh yeah 18:39 < yawkat> right now it accounts for 1 byte :D 18:39 <+ammar2> do another thing 18:39 < Grum> or rather, apparently it should, but it also greatly depends on VM implementation 18:39 <+ammar2> when you're initializing the arraylist