11:54 < Grum> to do what? 11:54 < Paprikachu> to utilize the instruction cashe 11:54 < Paprikachu> cache 11:54 < Grum> but now you imply they have to be sorted for something 11:55 < Grum> for what would they need to be sorted? 11:55 < Paprikachu> they have to, if you want performance 11:55 < Paprikachu> that is, if you're having an entity container at all 11:55 < Grum> what operation requires them to be sorted? 11:55 < Paprikachu> i just said: performance reasons 11:55 < Paprikachu> it's not a requirement for anything 11:55 < Grum> WHICH OPERATION 11:56 < Paprikachu> any operation that iterates over all the entities 11:56 < Grum> sigh 11:56 < Grum> ah! so you assume we iterate over all entities 11:56 < Grum> for what reason would we do that? 11:56 < Paprikachu> i'm pretty sure you do, otherwise you wouldn't need such a container 11:57 < Grum> what for a container? 11:57 < Paprikachu> for example, finding neighbouring entities 11:57 < Grum> ah, so we put all the entities that exist on the server in 1 list and then just iterate over them if one needs a neighbor? 11:57 < Paprikachu> i'd imagine you'd have one such list per world 11:58 < Grum> because that is what you would do right? 11:58 < Paprikachu> no, because that's the easy way out 11:58 < Paprikachu> and judging by the performance of minecraft it uses lots of easy ways out that are slow 11:59 < Paprikachu> this is an assumption, and if it's wrong, feel free to tell me why server performance is so bad 11:59 < Grum> but you are going to make a server which has the same gameplay feel that is not slow with 10k people right? :D 12:00 < Paprikachu> what is "gameplay feel" even supposed to mean 12:00 < Paprikachu> no, it's hopefully not going to lag with 10k people on it 12:00 < Grum> a server that does the same as vanilla 12:00 < Paprikachu> aim high you know 12:00 < Paprikachu> if it can handle 1k, that's still good 12:01 < Paprikachu> yes, i'm eventually going for a more or less full implementation 12:02 < Paprikachu> but seeing how many server projects died on the way, it's likely i'm not gonna make it there 12:02 < Paprikachu> so might as well aim for 10k 12:03 < Paprikachu> one issue the vanilla server definitely has, is non-linear data structures 12:03 < Grum> as a proxy? mayhaps 12:03 < Paprikachu> no, i'm talking about 10k players on a single machine 12:03 < Grum> that still means nothing 12:03 < Paprikachu> no proxies 12:03 < Paprikachu> so? 12:04 < Paprikachu> why not? 12:04 < Grum> apples and pears 12:04 < Paprikachu> eh? 12:04 < Grum> 'vanilla doesnt do 10000 people online at the same time' 'mine does' ... but you are not ever going to get remotely close to vanilla with 10k people online 12:04 < Paprikachu> and that's because? 12:05 < Grum> if you were to do all the server does (perhaps in another way) you are no way going to have 10k people online 12:06 < Paprikachu> well, what are the biggest performance issues? 12:06 < Grum> you should know, you are aiming for 10k because vanilla doesnt 12:06 < Grum> wouldn't that the first thing you'd research? :) 12:06 * Thinkofdeath stares at players making mob grinders 12:07 < Paprikachu> i came to the conclusion that a) inefficient designs and b) java leads to such behaviour 12:07 < Grum> or 200k+ items wheatfarms :p 12:07 < Paprikachu> i just don't buy that around 200 players is the maximum possible 12:07 < Grum> Paprikachu: you are minimal 55% wrong then :) 12:07 < Grum> it is not 12:07 < Grum> people have had servers with 550 people on them 12:07 < Paprikachu> single machines? doubt it. 12:07 < Grum> and you are wrong again 12:08 < Paprikachu> i used to host a server with 70 players, and it came close to 100% cpu usage. 12:09 < Thinkofdeath> There are quite a few issues with vanilla (pre-1.7.5 wolfs blocking the server with a http lookup on load for example) but a lot of it is just the way the game works 12:09 < Grum> i've played on a server with 550 people online and playing 12:09 < Paprikachu> i'm sure it could've been optimized to use less resources by turning down some vanilla features 12:09 < Grum> ticking distance on the server was just 1 chunk 12:09 < Paprikachu> but that ruins the experience 12:09 < Grum> so yes, that heavily modified the experience 12:09 < Grum> also ran at 1.4tps 12:10 < Paprikachu> well... 12:10 < Paprikachu> when i said 200 players, i assumed a smooth 200 players 12:10 < Grum> define smooth :) 12:10 < Paprikachu> with more or less vanilla-like experience 12:10 < Paprikachu> 20 tps 12:10 < Grum> best not be capped on bandwidth then 12:10 < Grum> but yes, the server can do many things much better 12:11 < Paprikachu> well, it'd need a rewrite in c++ :P 12:11 < Thinkofdeath> .-. 12:11 < Grum> since when is C++ better? 12:12 < Paprikachu> java doesn't give you enough control 12:12 < Grum> it doesn't? 12:12 < Paprikachu> i'm gonna link you the same post i linked yesterday: http://mechanical-sympathy.blogspot.co.at/2012/08/memory-access-patterns-are-important.html 12:12 < Paprikachu> you have no control over this with class objects in java 12:13 < Grum> you can if you want to 12:13 < Paprikachu> i'm sure the performance could be vastly improved simply by having linear memory access 12:13 < Grum> allocate a block of memory, write into it yourself 12:13 < Grum> totally doable without too much effort 12:13 < Paprikachu> except you need proxy objects or the like 12:14 < Paprikachu> cause picking data out of a byte array is pretty bad :) 12:14 < Grum> is it? 12:14 < Paprikachu> plus, you guys aren't even doing that 12:14 < Grum> because that wont solve any issues 12:14 < Grum> would just give us more 12:14 < Paprikachu> which is understandable 12:14 < Paprikachu> it'd require too many changes now 12:15 < Paprikachu> Grum: since you refuse to tell me what exactly are the biggest performance bottlenecks, i can only make assumptions here 12:16 < Paprikachu> but generally data oriented designs can perform significantly better 12:16 < Grum> we have no idea 12:16 < Grum> there are some big low hanging fruits 12:16 < Grum> like generating chunks on the main thread for example 12:17 < Paprikachu> chunk generation isn't threaded? 12:17 < Grum> its not 12:17 < Grum> it right now cannot even be 12:17 < Paprikachu> what are the issues with that? 12:18 < Grum> more than a single chunk needs accessing 12:18 < Grum> putting that off to another thread means contention issues 12:18 < Paprikachu> hm, aren't those only specific operations though? 12:18 < Paprikachu> like generating structures 12:19 < Grum> yes but unless writing into a chunk is threadsafe in some way there is no trivial way of doing it 12:19 < Paprikachu> you could do the terrain threaded and structures non-threaded, no? 12:19 < Grum> no 12:19 < Grum> well yes obviously you can 12:19 < Grum> but that will not solve the actual problem 12:20 < Grum> it will just bandaid it to be a 'bit better' 12:20 < Paprikachu> well, in theory i'd think that since everything depends on the seed, you could express the type of every block as a function of the seed and that would be trivially parallelizable 12:21 < Grum> except that is not the case 12:21 < Grum> it is for the general noise 12:23 < Paprikachu> something related, have you seen my post here: http://www.reddit.com/r/minecraftsuggestions/comments/2d10wb/optimization_more_compact_worlds_significantly/ 12:23 < Paprikachu> it's a few months old, but i put some thought into it back then 12:23 < Grum> tldr? 12:24 < Paprikachu> tl;dr is, don't send chunk data, send something like "generation commands" 12:24 < Grum> also people can figure out the worldseed trivially with a handful of blocks in the world 12:24 < Paprikachu> can they? 12:24 < Grum> yes 12:24 < Paprikachu> i'm curious how that'd work 12:25 < MrARM> MCPE did that some time ago 12:25 < Grum> LGC is not quite strong 12:25 < Paprikachu> but if that is doable anyways, why not send the seed to clients? 12:25 < Grum> its not 'true random' 12:25 < MrARM> it was slow, but now it wouldn't be 12:25 < MrARM> also 12:25 < Grum> because then the server would need to spend all its time calculating the delta 12:25 < Grum> and itself would have to calculate the contents of the chunks constantly 12:25 < MrARM> a lot of servers modify the terrain completly 12:25 < Paprikachu> no, you can keep a list of deltas 12:25 < Paprikachu> and store it along with the world 12:26 < Paprikachu> or rather, the save file would be the list of deltas 12:26 < MrARM> You want him to kill custom clients, right? 12:27 < Grum> ah, so now the one thing that has the most issues with cpu time, has to waste more cpu cycles to access simple chunk data? 12:27 < Grum> and use double memory? 12:27 < MrARM> Have fun writing an vanilla like generator 12:27 < Paprikachu> well, with my approach from the post it is generator independent 12:27 < Paprikachu> Grum: you'd keep the current version in memory 12:27 < Grum> forever? 12:27 < Paprikachu> so no additional cost for that 12:28 < Paprikachu> my post covers the performance aspects as well 12:28 < MrARM> I don't really understand why you want this to happen 12:28 < MrARM> Also, how do you want a 10k player server to fill 12:28 < Paprikachu> ? 12:28 < Flemmard> "who can more can less" :) 12:28 < MrARM> it's not that easy to get popularity :p 12:29 < Flemmard> if it holds 10k people, it can hold 1k with less power than actual servers 12:29 < Paprikachu> there are server networks with thousands of players 12:29 < Flemmard> and such 12:29 < Paprikachu> that's also very true 12:29 < Grum> lets just say: 100 people all not standing nearby eachother will mean 25x25x16 + 100x19x19x16 chunks loaded in memory ... TWICE 12:29 < MrARM> anyway, Java is notably slower 12:29 < Paprikachu> Grum: i assume 16gb+ of memory 12:30 < Paprikachu> because that's what those machines have 12:30 < Grum> 10000 + 577600 12:30 < Flemmard> the main problem is also the network shit 12:30 < Grum> to me the main problem is actual access time and memory wasting 12:30 < Flemmard> MC protocol is a bit too much bandwith hungry 12:31 < Paprikachu> Grum: access time of what? 12:31 < Grum> a chunk is 16*16*16*3.5bytes each 12:31 < MrARM> yeah, it is network hungry 12:31 < Grum> so that would be: 8423833600 for those raw chunk data 12:31 < Grum> that is 8GB of raw data for just 100 people 12:31 < Grum> and then double that 12:31 < Paprikachu> that's where i start with memory :) 12:32 < Grum> so 16gb for 100 people not standing 'nearby' 12:33 < Player> What is meant with this? Paraphrase (with no authentication and no encryption): send a 0x02, get a 0xFD, send a 0xCD, get a 0x01, get a 0x06. Then you'll eventually get a 0x0D, and that's when the game really begins. 12:33 < Paprikachu> also, where does the *2 come from 12:33 < Grum> 160mb per person 12:33 < Flemmard> or you send a full upgrade at clients on connect and then only deltas xD 12:33 < Grum> Paprikachu: because every chunks data in memory has a section with 'empty data' to represent diffs 12:33 < Player> I cannot find a 0xCD packet 12:33 < Paprikachu> that's if you represent the diff in a chunk 12:33 < Paprikachu> i'd have a list 12:34 < Grum> ah so make lookup times for normal chunk data EVEN slower? 12:34 < Paprikachu> no 12:34 < Grum> you do realize that the server does MILLIONS of those per tick right? 12:34 < Paprikachu> the server has the current chunks in memory 12:34 < Paprikachu> and a list of diffs to the old chunks 12:34 < Grum> yes but not directly readable 12:34 < Paprikachu> they are 12:35 < Grum> ah, so you are keeping 'reverse' diffs? 12:35 < Grum> you are keeping how to get back to the original again? 12:35 < Paprikachu> yes 12:35 < Grum> that would take care of the 'access times' for reading chunk data 12:36 < Grum> but there would be fucktons of those 12:36 < Grum> nearly every chunk with data in it would have it 12:37 < Paprikachu> do you have any statistics on what % of blocks is modified on big servers 12:37 < Grum> its not just modified 12:37 < Grum> but ore locations are not 100% guaranteed through seeds 12:37 < Paprikachu> huh? 12:38 < MrARM> what 'big servers'? minigame ones don't do a lot 12:38 < Grum> ores are features, features are not 100% defined through the seed 12:38 < Paprikachu> well, servers with actual survival-like gameplay with many players 12:38 < Grum> why not? well else someone can just calculate where the nearby diamonds is not? ;D 12:39 < Paprikachu> i would have though lack of knowledge of the seed takes care of that 12:39 < Flemmard> people wont ever do that ! 12:39 < Paprikachu> but apparently not 12:39 < Flemmard> XD 12:40 < MrARM> for standard sg... idk. Probably around 100-200/s 12:40 < MrARM> and that won't get spread to too much players I think 12:40 < SopaXorzTaker> wait, sorry for messing in, but why use signed type for packet length 12:40 < Paprikachu> because java doesn't have unsigned types 12:40 < MrARM> yep 12:40 < SopaXorzTaker> :< 12:40 < Grum> doesn't really need them 12:41 < Grum> but sometimes it would be easy :) 12:41 < MrARM> yeah, but then you would need an long in memory likely 12:42 < MrARM> java is great for quick prototypes 12:42 < MrARM> but it's pretty slow and memory hungry 12:42 < Grum> slow how? 12:43 < SopaXorzTaker> -> rewrite Craftie in C++ 12:43 < Paprikachu> Grum: if i made a server like vanilla with significantly better performance, would MS buy it 12:43 < Grum> no 12:43 < SopaXorzTaker> *C# 12:43 < Paprikachu> :d 12:43 < Grum> obviously not 12:43 < Paprikachu> what's with MS buying mojang anyways 12:43 < SopaXorzTaker> and can I sell my server that works better than vanilla? 12:43 < Grum> Paprikachu: ask notch why he wold 12:43 < SopaXorzTaker> #eulasareboring 12:43 < Grum> *sold 12:44 < Paprikachu> do you know of any big plans regarding minecraft 12:44 < Grum> yes 12:44 < Paprikachu> otherwise i wouldn't know why MS would buy it 12:44 < Paprikachu> any rewrites? 12:45 < SopaXorzTaker> Paprikachu, rewrites -> mod developers won't rewrite their mods 12:45 < Grum> because it is pointless to buy it? 12:45 < Grum> it wouldn't be usable? 12:45 < shoghicp> hmm, this is one of those times where #mcdevs fills my scrollback 12:45 < SopaXorzTaker> ah, well, the binary will be digitally signed 12:45 < SopaXorzTaker> and unmoddable 12:45 < shoghicp> "unmoddable" xD xD 12:45 < Grum> the client runs the server too 12:45 < Grum> how would it do that? 12:45 < SopaXorzTaker> yeah 12:45 < Grum> 50% of gameplay implementation sits in the server 12:45 < Grum> how would that work with the client in java? 12:45 < Paprikachu> so MS is rewriting everything in c# 12:46 < Paprikachu> :p 12:46 < SopaXorzTaker> no-one will want to mess in .NET MSIL to implement any API 12:46 < Grum> Paprikachu: no? 12:46 < shoghicp> give them a challenge ;D 12:46 < shoghicp> they'll try even harder 12:46 < SopaXorzTaker> They won't 12:46 < MrARM> well, ILSpy 12:46 < Paprikachu> Grum: so minecraft's pc version will for the forseeable future be in java, both client and server? 12:46 < SopaXorzTaker> Because modders wouldn't want 12:46 < SopaXorzTaker> #mine2craftinjava 12:46 < Grum> if there has to be a rewrite it would most likely be C# because it makes the most sense 12:47 < SopaXorzTaker> #minecraftinjava 12:47 < Grum> Paprikachu: yes obviously 12:47 < Paprikachu> if you buy a company for $2b, you usually have a plan 12:47 < Grum> not really 12:47 < Grum> it was done all super hastly 12:48 < Grum> +i 12:48 < Paprikachu> why would MS be that stupid 12:48 < Paprikachu> makes no sense 12:48 < MrARM> yeah 12:48 < Grum> stupid? they just saw an opportunity to get their hands on the biggest IP out there right now 12:48 < MrARM> but they did 12:48 < Paprikachu> IP? 12:48 < SopaXorzTaker> Think of mods! rewrite -> un-moddable -> no API's -> no modders -> no mods -> -50% of auditory -> hate -> ... 12:48 < Grum> Intellectual Property, brand 12:48 < Paprikachu> ah 12:49 < MrARM> Why though 12:49 < Paprikachu> rewrite doesn't mean unmoddable 12:49 < Paprikachu> btw 12:49 < Grum> it does 12:49 < shoghicp> SopaXorzTaker: Minecraft: PE is ARM assembly, and even that has mods :) 12:49 < Grum> depending on the language 12:49 < Paprikachu> not really 12:49 < Player> Which packet has ID 188? 12:49 < Grum> shogchips: only because debug symbols have been given away 12:49 < Paprikachu> no packet has 188 12:49 < shoghicp> Grum: they did before symbols, too 12:49 < MrARM> Grum: dSYM or only symbol table? 12:50 < shoghicp> now it's even easier :) 12:50 < Grum> shogchips: sure 12:50 < Player> May it be the Encryption Key Request? 12:50 < MrARM> There were mods before dSYM 12:50 < shoghicp> now they can do it in C++ directly 12:50 < MrARM> I'm one of the people who did that 12:50 < Grum> you would murder the complete modding scene if you would change language to c/c++ 12:50 < Grum> c# would be less of a drastic change but still quite the huge barrier 12:50 < Paprikachu> please don't call it c/c++ 12:51 < shoghicp> nah, I mean on Minecraft: PE 12:51 < Paprikachu> my eyes :< 12:51 < MrARM> and stripped symbols so those would be without names 12:51 < MrARM> would kill it 12:51 < MrARM> for sure 12:51 < Grum> names are not really important 12:51 < MrARM> those are 12:51 < MrARM> in c/c++ 12:52 < MrARM> it's possible as long as you have those and know where that points to 12:52 < Player> Ah no, it's PacketID 1 and PacketSize 187 12:52 < Grum> Paprikachu: c/c++ is just 'c or c++' 12:53 < Paprikachu> obviously, if you built a modding api into the rewrite, it would be much better for the modding community 12:53 < Grum> not at all 12:53 < MrARM> he would not 12:53 < Grum> it would instantly kill the modding community flat out 12:53 < shoghicp> MrARM: well, you can do it without names 12:53 < Paprikachu> why do you think that 12:53 < MrARM> shoghicp: you in theory can 12:53 < MrARM> in theory 12:53 < shoghicp> but it's harder 12:53 < MrARM> but noone would do it 12:53 < Grum> Paprikachu: because it wouldn't be modding anymore 12:54 < Paprikachu> modding, plugins, whatever - same thing 12:54 < Grum> not at all 12:54 < MrARM> not really 12:54 < MrARM> api would be limited 12:54 < Grum> but sure, people would have to start from scratch again 12:54 < SopaXorzTaker> Grum, make them an API 12:54 < SopaXorzTaker> in case of rewrite 12:54 < Grum> API is kinda overrated honestly 12:55 < SopaXorzTaker> Why? 12:55 < Paprikachu> i wouldn't even know how to design a client api 12:55 < MrARM> I pretty much don't understand why Mojang did not give headers instead of dsym 12:55 < Grum> 'being able to add gameplay features as exists in the game right now' would be plenty enough, if that would add a specific api or not matters little 12:55 < MrARM> wait, I think I know why 12:56 < MrARM> code can be here 12:56 < Paprikachu> Grum: legal question: would it be allowed to sell licenses of custom servers? 12:56 < MrARM> no 12:56 < Grum> no 12:56 < Paprikachu> why not 12:56 < Grum> well sorry, yes 12:56 < Grum> unless they are minecraft servers 12:56 < Paprikachu> :p 12:56 < SopaXorzTaker> So you can't sell anything that is based on (Micro)Mojang's specs 12:57 < Paprikachu> well, if i ever make it to a complete implementation, i'm certainly not gonna open-source it 12:57 < SopaXorzTaker> Paprikachu, ? 12:57 < Grum> why not? 12:57 < MrARM> not everyone likes good stuff 12:57 < SopaXorzTaker> why not? 12:58 < Paprikachu> because it's valuable then 12:58 < Grum> is it? 12:58 < Wuppie> Whut.... 12:58 < Grum> we just determained it has no value to Microsoft/Mojang :) 12:58 < SopaXorzTaker> I think everything based on Mojang's code/protocol should be open-sourced with a license notice 12:58 < MrARM> I wish I wasn't still stuck reading chunk data 12:58 < Paprikachu> it doesn't need to have a value to mojang 12:58 < Wuppie> SopaXorzTaker +1 12:58 < Paprikachu> it would reduce server costs by a large amount 12:58 < Paprikachu> people would pay for that 12:58 < Grum> Paprikachu: except that you couldn't sell it to them :) 12:59 < Paprikachu> i could host the servers along with it though :p 12:59 < MrARM> and have fun implementing physics 12:59 < shoghicp> you could sell the service, not the software 12:59 < Paprikachu> ^ 12:59 < Grum> yup you can host servers with it running on it 12:59 < MrARM> and mechanics 12:59 < Grum> but peopel would demand full access to it 12:59 < MrARM> ^ 12:59 < Grum> and then they would just copy your program :p 12:59 < MrARM> also 12:59 < Wuppie> ^^ 12:59 < MrARM> plugins in c++... 12:59 < Paprikachu> could make it non-readable by the user 13:00 < Paprikachu> or just restrict access 13:00 < Paprikachu> i'm sure there's a solution :p 13:00 < Wuppie> Host the server files outside of the folder they can acces lol 13:00 < Grum> good luck! 13:00 < Grum> major networks wouldn't bother 13:00 < Paprikachu> by the time i finish it, nobody is probably going to care anymore 13:00 < Grum> no-one else needs a server for 10k people :) 13:01 < Wuppie> Exactly @Grum 13:01 < Paprikachu> as has been said before: less demanding hardware for smaller numbers as wel 13:01 < Grum> would be so much fun in chat, 10k people chatting at the same time 13:01 < shoghicp> > Join my server! [NO LAG] [10000 players] [Ask for OP] 13:01 < Wuppie> xD 13:01 < Paprikachu> you would be able to host a 100 people server from just a vm 13:01 < Paprikachu> or even more 13:01 < MrARM> but 13:01 < Grum> Vanilla can also host 10000 players at the same time 13:01 < MrARM> big networks 13:01 < Wuppie> Paprikachu prove it to us :P 13:01 < MrARM> already have their infrastructure 13:02 < Grum> if you were to host it on a quantum computer from teh future! ;D 13:02 < MrARM> plugins in JAVA 13:02 < Paprikachu> no, servers have monthly costs 13:02 < MrARM> NO existing network would care 13:02 < Paprikachu> ok well 13:02 < Paprikachu> i have better things to do than discussing that 13:02 < Paprikachu> i'd rather work on my server and get something done :) 13:02 < Player> Why I don't get a Login Success packet? Instead I am getting a Time Update packet 13:03 < Grum> Player: because we have no idea what you have sent sofar or have received or if you are doing things right or not 13:03 < MrARM> What you're doing is pointless, but ok 13:03 < Paprikachu> did i mention wireshark yet 13:03 < Paprikachu> :D 13:03 < shoghicp> :D 13:04 < MrARM> btw 13:04 < MrARM> packet ids overlap 13:04 < SopaXorzTaker> also, I think every server perk should be forbidden, except list of donators. And allow *ONLY* donations 13:04 < MrARM> 0x03 is also set compression 13:05 < SopaXorzTaker> MrARM, they're in different mode 13:05 < SopaXorzTaker> aren't they 13:05 < MrARM> no 13:05 < MrARM> he said he expects a login success 13:05 < MrARM> set compression gets sent before I think 13:06 < SopaXorzTaker> then no problem 13:06 < SopaXorzTaker> Also, what about Bukkit 13:06 < SopaXorzTaker> Who killed it 13:07 < SopaXorzTaker> Who was that 'Wolfe' 13:07 < MrARM> one of constructors 13:07 < SopaXorzTaker> Still can't understand it 13:07 < Grum> SopaXorzTaker: madman doing mad shit 13:07 < MrARM> *constributors 13:07 < SopaXorzTaker> MrARM, and they 'infinged' his damn copyright 13:07 < SopaXorzTaker> what exactly 13:07 < MrARM> was license changed or what? 13:07 < Grum> no 13:08 < Grum> but lets not discuss it 13:08 < Grum> it makes no sense what he did 13:08 < Grum> also that bs is over anyhow 13:08 < Grum> as craftbukkit just lives again 13:08 < SopaXorzTaker> rewrite his code? 13:09 < Grum> no 13:09 < Grum> just use patches only 13:09 < Grum> his code is gpl, so anyone can use it 13:09 < Grum> or rather, his patches 13:10 < SopaXorzTaker> he's really mad: https://twitter.com/wolvereness 13:10 < SopaXorzTaker> his site is already down 13:14 < Grum> all in all he violated GPL more than anyone else by taking the whole repository with everyone elses work offline 13:17 < Grum> which is kinda exactly what GPL tries to prevent, that someone infringes the 'freedom of the code' :) 13:17 < SopaXorzTaker> is he a psycho/autist? 13:17 < SopaXorzTaker> or just a rare-kind moron 13:17 < Grum> who isnt 13:20 < TechRo> How do I write a string to a server? First send the length and then the string? 13:21 < Grum> http://wiki.vg/Protocol#Data_types 13:21 < SopaXorzTaker> Grum, how do I do VarInt encoding 13:21 < Weloxux> ah, was gonna send the link too, you ninja 13:21 < Grum> SopaXorzTaker: http://wiki.vg/Protocol#Data_types 13:21 < TechRo> But what's meant by "prefixed"? 13:21 < SopaXorzTaker> No, do you use any library or wrote the thing yourself 13:22 < Grum> http://en.wikipedia.org/wiki/Prefix 13:22 < Grum> SopaXorzTaker: wrote ourselves 13:22 < Grum> using a library was overkill for it as the only one that had it was protobuf and it is massive 13:22 < Weloxux> well, first a VarInt with the length, then directly after that your string 13:22 < Weloxux> easy as pie 13:22 < SopaXorzTaker> I was going to use protobuf 13:27 < TechRo> So it's length + "-" + string? 13:27 < SopaXorzTaker> Grum, how to cancel protocol encryption server-side? 13:27 < Thinkofdeath> Offline mode, just send a login success 13:27 < Weloxux> no, length + sting 13:28 < Weloxux> *string 13:28 < TechRo> With nothing between? 13:28 < Weloxux> nope 13:28 < Wuppie> Any way i can make minecraft show errors more detailed? 13:29 < Wuppie> any arguments or somethin 13:29 < Player> Is it normal, that the client connects and disconnects instantly then? 13:30 < SopaXorzTaker> wait, what is my Session Token 13:30 < SopaXorzTaker> is it given to servers 13:31 < Wuppie> @Player does your client send / receive ping packets? 13:31 < Player> It just sends a handshake packet and then a login start packet 13:32 < MrARM> Then you can get set compress 13:32 < MrARM> ion 13:32 < MrARM> then login success 13:32 < MrARM> (omitting encryption) 13:32 < SopaXorzTaker> Hey, can I post exactly three lines 13:33 < SopaXorzTaker> so, what is this packet? 13:33 < SopaXorzTaker> $nc -l 25565 | hd 13:33 < SopaXorzTaker> 00000000 0f 00 2f 09 6c 6f 63 61 6c 68 6f 73 74 63 dd 02 |../.localhostc..| 13:33 < SopaXorzTaker> 00000010 0f 00 0d 53 6f 70 61 58 6f 72 7a 54 61 6b 65 72 |...SopaXorzTaker| 13:33 < MrARM> hmm? 13:34 < Thinkofdeath> handshake followed by a login start 13:35 < Wuppie> Guys, is there a way minecraft can give me more details on errors? 13:37 < SopaXorzTaker> but, did I make a mistake 13:37 < SopaXorzTaker> Length=0f, Id=00 13:37 < SopaXorzTaker> Protocol=2f 13:37 < SopaXorzTaker> of how? 13:38 < Wuppie> http://prntscr.com/5tjefk 13:38 < Wuppie> Can anyone help me with that? 13:38 < Paprikachu> the satisfying feeling when the cross thread handover of your client works 13:38 < Thinkofdeath> SopaXorzTaker: that looks fine so far 13:38 < SopaXorzTaker> but I'm on 1.8.1 13:38 < SopaXorzTaker> wait 13:39 < SopaXorzTaker> 47 is dec 13:39 < SopaXorzTaker> so that's correct 13:39 < SopaXorzTaker> yes! 13:40 < SopaXorzTaker> Can I not compress the data 13:40 < Wuppie> send a compression packet with -1 13:40 < SopaXorzTaker> after client asks me to 13:41 < Wuppie> set the compression level to -1 13:41 < Wuppie> that will disable compression 13:44 < SopaXorzTaker> ah 13:44 < SopaXorzTaker> it works automatically, because the packet length will always be < 13:56 < Player> What does bad packet ID 120 mean? 13:57 < Grum> http://wiki.vg/Protocol 13:58 < Wuppie> Grum, i get this error when sending slotdata 13:58 < Wuppie> http://prntscr.com/5tjefk 13:58 < Grum> so you must be sending it wrong 13:58 < Wuppie> Probably, but i don't see what im doing wrong, as i send it exactly as described on wiki 13:59 < Grum> there is no 'fieldSize' anywhere in 1.8.x 13:59 < Wuppie> is http://wiki.vg/Slot_Data 13:59 < Wuppie> up 2 date? 14:00 < Thinkofdeath> I think I had that one before, its from a library if I remember right 14:00 < Wuppie> http://wiki.vg/Protocol#Set_Slot 14:00 < Wuppie> http://wiki.vg/Slot_Data 14:00 < Wuppie> Both up 2 date? 14:00 < Thinkofdeath> someone changed the slot data page :/ 14:00 < Thinkofdeath> incorrectly 14:01 < Wuppie> Ah, that explains allot 14:01 < Wuppie> Could you tell me what is wrong about it? 14:02 < Thinkofdeath> reverted his change 14:02 < Wuppie> Thank you :) 14:02 < Thinkofdeath> there is no length, just a zero byte for no nbt and the nbt tag if there is 14:03 < SopaXorzTaker> how chunks work 14:03 < SopaXorzTaker> I want to send the client some empty chunk 14:04 < SopaXorzTaker> but how to encode 14:05 < Thinkofdeath> Grum: found it, its from netty's ByteBufInputStream 14:05 < Grum> no idea, probably reading a short when there is only 1 byte in the buffer 14:06 < Thinkofdeath> yeah 14:07 < Thinkofdeath> Not the most descriptive error since the 'fieldSize' its refering to is a parameter to a private method 14:07 < Thinkofdeath> http://hastebin.com/hemacelova.coffee 14:07 < MrARM> anyway, can anyone help we with the thing I posted yesterday? 14:08 < Grum> why on earth a horizontal scrollbar on hastebin? :/ 14:08 < Thinkofdeath> o.o i've never noticed that 14:08 < ScruffyRules> Grum, Because they're silly. >:| 14:09 < Thinkofdeath> its because someone put 'padding-right: 360px;' pre containing the code for no apparent reason 14:11 < Thinkofdeath> https://github.com/seejohnrun/haste-server/commit/962976c20465d51dc3366b2048fc3a70b9797bda The commit message is useful 14:12 < Grum> lol 14:12 < Grum> someone comment that it adds nice scrollbars ftw 14:13 < Grum> guess it wasnt tested with chrome 40 :p 14:13 < MrARM> Firefox few 14:13 < Thinkofdeath> s/chrome/any browser 14:14 < MrARM> *ftw 14:14 < ScruffyRules> Chrome 40? 14:14 < ScruffyRules> I thought latest was 39 14:18 < Grum> running 40 here 14:18 < MrARM> canary? 14:19 < ScruffyRules> "Yellow Chrome" 14:19 < Grum> Version 40.0.2214.85 beta-m (64-bit) 14:20 < ScruffyRules> Version 39.0.2171.99 m 14:22 < ScruffyRules> I use to use Canary. 14:22 < Grum> even after Bukkit came out? weirdo 14:23 < ScruffyRules> I'm surprised I got that joke. 14:23 < MrARM> yes, webbrowser plugin for Bukkit! 14:24 < MrARM> (ik) 14:24 < MrARM> *jk 16:32 < Trini> Hello :) 16:33 < Trini> Can someone say me what's wrong with this code? http://pastebin.com/xTU5QtM8 16:37 < Trini> Also doesn't work with this: http://pastebin.com/tftKFzZk 16:38 < Grum> out.writeBytes("testname"); <-- 16:40 < Grum> No idea what that does, b ut it doesn't do the right thing 16:44 < Trini> I have to write a minecraft name, don't I? 16:45 < Grum> No, you have to write the raw utf8 bytes you just took the length from 16:45 < Trini> Okay, let me try that in a moment :) 16:46 < Grum> as said here: http://wiki.vg/Protocol#Data_types 16:52 < Trini> Okay, but I am still getting a Time Update packet instead of Login Success 16:54 < Bibl> hi 16:55 < Bibl> Trini: explain your problem 16:56 < Trini> Hey Bibl 16:56 < Bibl> hiya 16:57 < Trini> I am sending a login start packet 16:57 < Trini> The player connects and instantly disconnects, and I get a packet with ID 3 16:58 < Bibl> you need to send a handshake packet first 16:58 < Trini> I do 16:58 < Trini> http://pastebin.com/38pksy4f 17:00 < Bibl> i recommend making a proper packet system 17:00 < Bibl> because when you have to handle compression and encryption it will be a pain 17:00 < Trini> How would I do that? 17:01 < Bibl> library called netty 17:01 < Bibl> example: http://i.imgur.com/i8qgmbX.png 17:01 < Bibl> and then http://i.imgur.com/WTjD5dJ.png 17:02 < Wuppie> Anyone willing to help with chunk data? i don't understand it 17:02 < Bibl> what part of it dont you understand 17:03 < Wuppie> I don't understand the format 17:03 < Wuppie> i have to do the map chunk bulk 17:03 < Wuppie> (C# language) 17:04 < Bibl> bulk is just an array of single chunk data packet data 17:04 < Wuppie> Yeah, but i don't understand the chunk data 17:04 < Bibl> boolean skylight = in.readBoolean(); 17:04 < Bibl> int columns = in.readVarInt(); 17:04 < Bibl> x = new int[columns]; 17:04 < Bibl> z = new int[columns]; 17:04 < Bibl> chunks = new Chunk[columns][]; 17:04 < Bibl> biomeData = new byte[columns][]; 17:04 < Bibl> oh 17:05 < Wuppie> Also, it is a server so 17:05 < Trini> What are these LC00-names? 17:07 < Bibl> L - Login, C - Client (to Server), 0x00 - Packet ID 17:07 < Bibl> Like http://i.imgur.com/K4FJugd.png 17:07 < Trini> Aaah 17:09 < Trini> And they all implement AbstractPacket? 17:10 < Trini> Can you show me your LoginStartPacket-class? 17:10 < Trini> Then I know the system 17:10 < Bibl> Wuppie: https://github.com/GlowstoneMC/Glowstone/blob/d3ed79ea7d284df1d2cd1945bf53d5652962a34f/src/main/java/net/glowstone/GlowChunk.java#L640 17:11 < Bibl> with my system, I have writeablepackets and readablepackets 17:11 < Bibl> both extend packet 17:11 < Wuppie> ill check it out 17:11 < Bibl> Trini: http://hastebin.com/fasobibaxe.java 17:12 < Bibl> readable are incoming and writeable are outgoing 17:12 < Trini> And whats in the Packet class? 17:12 < Bibl> this is the login packet for protocl 47 http://hastebin.com/eceduqidix.java 17:13 < Bibl> packet is just http://hastebin.com/uguniyaqif.java 17:14 < Trini> And WriteableOutput ist just something like a DataOutputStream? 17:15 < Bibl> yeah 17:15 < Bibl> but has varints and stuff 17:19 < Trini> Something like this? http://pastebin.com/UVEYXhSG, Bibl 17:21 < Bibl> i would do some input sanitisation 17:22 < Trini> How do you mean? 17:22 < Bibl> sec 17:23 < Bibl> http://hastebin.com/zetukufubu.java 17:25 < Trini> But I can do it with a DataOutputStream? 17:25 < Bibl> instead of using a bytebuffer use a dataoutputstream 17:25 < Bibl> the methods are similar i think 17:25 < Wuppie> i still don't understand the chunk data and stuff.... im probably to dumb 17:25 < Bibl> http://wiki.vg/SMP_Map_Format 17:25 < Trini> But if a bytebuffer is better I would use that one :D 17:26 < Wuppie> i know, i seen it Bibl 17:26 < Wuppie> i just dont understand it :S 17:26 < Bibl> bytebuffer is from netty 17:27 < Bibl> Wuppie: understand "You will sometimes get a blob of data and a bitmask. Each bit in the 16-bit short represents a chunk. The least significant bit represents the chunk from Y=0 to Y=15, and so forth. If it's 0, the chunk is entirely air and there's no data to read. "? 17:27 < Wuppie> not really :S 17:27 < Wuppie> i guess my english isn't good enough or something 17:27 < Trini> Okay, then I'll use the ByteBufOutputStream 17:28 < Bibl> Trini: you would need to write a client system using netty 17:28 < Bibl> Wuppie: int mask = in.readUnsignedShort(); 17:28 < Bibl> int chunks = Integer.bitCount(mask); 17:28 < Bibl> you read a short (16 bit int) 17:28 < Trini> How do you mean that? 17:28 < Trini> I just wanna make a client for chatting 17:29 < Bibl> thats the amount of chunks given (starting at 0 then going up) 17:29 < Wuppie> ill check if i can do that in c# xd 17:29 < Wuppie> But i don't need to READ. i need to write to the client 17:29 < Wuppie> ? 17:29 < Bibl> yeah 17:29 < Bibl> so you figure how many chunks you're giong to send to the player 17:30 < Bibl> and compose a short with the bits set 17:30 < Bibl> make a short* thats sounds dodgy 17:30 < Bibl> Trini: http://seeallhearall.blogspot.co.uk/2012/05/netty-tutorial-part-1-introduction-to.html 17:31 < Wuppie> OK wait, let me rewrite my chunk generator, a chunk is 16*16*16? 17:31 < Bibl> " Chunk: a 16x16x16 area, logically made up of multiple Chunk Data arrays, storing things like block ids and skylight " 17:32 < Wuppie> Could you explain Ground-Up continuous 17:32 < Wuppie> to me? 17:33 < gurun> chunks start from the bottom-up 17:33 < gurun> ? 17:33 < Wuppie> oh that way 17:33 < Wuppie> lol 17:33 < Wuppie> okay 17:33 < Wuppie> thnx 17:34 < gurun> are you only writing a chat-client? 17:34 < gurun> (i missed the beginning of the conversation) 17:35 < gurun> it says this channel is publically logged. Anyone has a link to the logs? 17:37 < Trini> Bibl: How would I make the readPrefixedBytes method for the ReadableInput? 17:37 < Bibl> What do you mean? 17:37 < Bibl> there is a short which is the length 17:37 < Bibl> and then that many bytes after it 17:38 < Trini> Do I have to be able to read the same things as I am able to write? 17:38 < Grum> yes 17:38 < Grum> server and client share the codebase for the network, so they share the reading/writing of all data 17:39 < ScruffyRules> \o/ 17:40 < Trini> So how would I read these? 17:41 < Trini> Or would you also be so kind to send me your ReadableInput class? :D 17:42 < Bibl> http://hastebin.com/jajucoweyu.java 17:42 < Trini> Thanks a lot 17:42 < Wuppie> bibl you said " Wuppie: int mask = in.readUnsignedShort();" Where would that uShort come from? 17:43 < Bibl> thats what im using to read the data 17:43 < Bibl> so you would have to count the amount of chunks to send 17:43 < Bibl> and set the bits of a short 17:44 < Wuppie> i can tell it to always send for example 8 chunks? 17:45 < Bibl> i think so 17:45 < Wuppie> ok :) 17:51 < Trini> I also need a PacketHandler, don't I? 17:51 < Bibl> Wuppie I think the continuousGroundUp thing is for complete chunks 17:52 < Bibl> well, with netty you need encoders and decoders 17:52 < Wuppie> This world generation shit is hard lol 17:55 < Grum> the 'reading' would really be as simple as: https://gist.github.com/grum/cb6ca427ad9901ee0f3d 17:56 < Grum> (and writing) 17:56 < gurun> Grum, looks like that is setting up send/receive pipelines. I've similar with ACE C++ framework. Are you using some sort of protocol framework? 17:57 < Grum> netty 17:57 < Grum> and that is what the game uses 17:59 < Grum> the reading should be as simple as: decrypt, split on the varint21, decompress, read the data 18:00 < Grum> and writing: write data, compress, prepend with varint21, encrypt 18:01 < Trini> Bibl, it's normal that the player gets kicked, isn't it? 18:01 < Bibl> for what 18:02 < Trini> I just sent the handshake and the LoginStart packet 18:02 < Grum> then you send them wrong 18:02 < Grum> read the packet you are getting 18:02 < Grum> it should give you some reason 18:02 < Trini> Maybe the reason is, that my program terminates 18:03 < gurun> Grum, thanks. Looks very interesting. Trying to locate something simiarl (and mature) for .NET. WCF is just too complicated to do that setup with. 18:03 < Trini> Because it terminates and so the socket closes 18:04 < Grum> that wouldn't send a disconnect packet 18:04 < Grum> well i guess the server *might* send it 18:04 < Grum> but jsut read the data in the disconnect packet 18:04 < Grum> it has a text in it explaining why 18:04 < Trini> An existing connection was closed by the remote host 18:05 < Bibl> didnt send the right data i think 18:06 < Trini> Where do I have to write the packetID and the length? 18:07 < Trini> Bibl: Because it's also not in your PacketLC00LoginStart class 18:09 < Bibl> @Override 18:09 < Bibl> public void writePacketId(WriteableOutput out, int packetId) throws IOException { 18:09 < Bibl> out.writeVarInt(packetId); 18:09 < Bibl> } 18:09 < Bibl> 18:09 < Bibl> private static int varintLength(int i) { 18:09 < Bibl> if ((i & -128) == 0) { 18:09 < Bibl> return 1; 18:09 < Bibl> } else if ((i & -16384) == 0) { 18:09 < Bibl> return 2; 18:09 < Bibl> } else if ((i & -2097152) == 0) { 18:09 < Bibl> return 3; 18:09 < Bibl> } else if ((i & -268435456) == 0) { 18:09 < Bibl> return 4; 18:09 < Bibl> } else { 18:09 < Bibl> return 5; 18:09 < Thinkofdeath> .-. pastebin exists 18:09 < Bibl> } 18:09 < Bibl> } 18:09 < Bibl> oops ignore that last piece of code 18:10 < Bibl> unless your monitor is 2 1/2 cm tall pastebin isnt needed :D 18:12 < Trini> That's how I get the length? 18:18 < Grum> anything more than 5 lines justifies kicks 18:18 < Trini> Like this Bibl? http://pastebin.com/t80sKrj4 18:20 < ScruffyRules> Grum, Pitty you're not +o 18:29 < Trini> How can I make an inputstream to a bytebuf? 18:30 < Paprikachu> Grum, why is the max players field not a varint? :p 18:30 < Trini> Or how can I get a bytebuf from a socket? 18:35 < Paprikachu> and what's the default_1_1 level type? D: 18:40 < Trini> Bibl? 18:42 < ScruffyRules> Grum, https://twitter.com/MC_Modding_Newz/status/556376710166216704 xD totally legit. 18:43 < Wuppie> lol wtf 18:46 < Grum> Paprikachu: yes 18:47 < Paprikachu> yes? :D 18:49 <+Amaranth> Paprikachu: I parsed that as boolean 18:49 <+Amaranth> (I may be a YAML parser) 18:49 < Paprikachu> huh 18:49 < Paprikachu> i'm confused, what are we talking about 18:53 < Paprikachu> ohh 18:53 < gurun> Grum, what he heck is that about? 18:54 < Paprikachu> Amaranth: gotcha :D 18:54 < Paprikachu> what's the reducedDebugInfo bool in JoinGame about? 18:55 <+Amaranth> It makes F3 show less things 18:56 < Paprikachu> is the default for that to be on or off in vanilla? 18:56 < ScruffyRules> off 18:57 < Paprikachu> alrighty 19:38 < Bibl> oh crap 19:38 < Bibl> i forgot i was in this chat 19:38 < Bibl> so i went to fix a tv with my grandad 19:39 < Bibl> got into a fight over 2 apple pies 19:39 < Bibl> and watched some tv 19:39 < Bibl> trini left ;( 19:44 < gurun> that's what happen when you get your stuff buried in apple pie 19:54 < Wuppie> Awh, poor Bibl 19:54 < Wuppie> don't crie! 19:55 < Bibl> sister slapped the appie pie out of my hand 20:26 < Wuppie> lol wtf xD 21:15 < Bibl> hmm would making bounding boxes 20 times per second for gravity create huge problems? 21:15 < Bibl> or is the jvm optimised enough to handle it 21:24 < Grum> yes and no 21:25 <+Amaranth> Minecraft does it :P 21:25 < Grum> yup but do it too much and stuff starts to suffer 21:26 <+Amaranth> They allocate really fast so long as you don't have too many and hopefully they clean up really fast assuming you're using the right GC with the right parameters, don't have too many, and don't hold on to them too long 21:26 <+Amaranth> Only costs you two CPU cores 21:26 < Grum> cleaning out eden gives some jitter 21:27 < Grum> so filling it up too much is not really advisable :) 21:29 < Grum> we do that quite some less in 1.8.2 pre's 21:35 < Paprikachu> if you're allocating multiple megs per frame, you're doing it wrong 21:35 < Paprikachu> but then again, GCs for games are also wrong 21:36 < Grum> you do not have a lot of choice in some cases 21:36 < Grum> depending what is happening during the frame obviously :) 21:37 < Grum> right now when you stop batching chunks the memory will barely go up 22:21 < Bibl> hmm the wiki doesn't have entity sizes 22:21 < Bibl> it just says "varies" in for the mobs 22:26 < Wuppie> Hmm, if i sent my setslot packet, the item seems to appear for less than a second, than it disapears... 22:26 < Wuppie> setslot* 22:28 < Wuppie> Anyone else ever had that problem? 22:40 <+SpaceManiac> Wuppie: are you sure you're not sending other setslots, or inventory contents? 23:07 < Bibl> lol looking through those files in objects 23:07 < Bibl> "mco.reset.world.seed=Semen (Arbitrarius)" 23:07 < Bibl> in latin 23:54 < Bibl> Grum: whats the point of this http://hastebin.com/eyewaloxis.axapta --- Day changed dim. janv. 18 2015 00:06 < Wuppie> SpaceManiac I am sending them, but i'm 100% that im net sending them again for the same slot 00:07 < Wuppie> not* 00:42 < user23> What is the difference between a system message and a regular message? 00:42 <+SpaceManiac> I don't think they display differently 00:42 < user23> Yeah I was wondering because they both just go to the chatbox 01:48 < Wuppie> http://wiki.vg/Protocol#Window_Items 01:48 < Wuppie> you have to send a Count 01:48 < Wuppie> which is the number of slots 01:49 < Wuppie> does that simply mean if i send 5, it will set 5 off the slots? 01:49 < Wuppie> i guess i have to tell WHICH slots? 01:51 < Bibl> Wuppie: i think thats the amount of items 01:52 < Wuppie> Would i just give the Slot id where to start Bibl? 01:52 < Wuppie> How does it know where i wanna put the items? 01:52 < Bibl> the client doesnt know 01:52 < Wuppie> It will just put m in random slots? 01:52 < Bibl> it just stores them 01:53 < Bibl> yeah but it tries to do it logically 01:53 < Bibl> finding the first empty one 01:53 < Bibl> and then filling that one 01:53 < Wuppie> Okay, ill see what it does haha 01:53 < Bibl> say you want to show an 'L' shape made out of an item 01:53 < Bibl> I think you have you have to send the empty slots as well 01:53 < Wuppie> Ah, ok :) 01:54 < Bibl> and when the client sees it 01:54 < Bibl> it happens to show it in that order 01:54 < Wuppie> Well, i'll check and see what it does 01:54 < Bibl> but if you're on another client and for some reason it stores it backwards 01:54 < Wuppie> Bibl, what language do you write in? 01:54 < Bibl> it might not show properly 01:54 < Bibl> interested in JVM stuff for the last few years 01:54 < Wuppie> haha okay :P 01:54 < Bibl> so Java, scala, groovy 01:54 < Bibl> very into bytecode 01:54 < Wuppie> haha cool :P 01:55 < Bibl> https://github.com/TheBiblMan/Byte-Engineer-2 01:55 < Wuppie> well, MC has enough bytes 01:55 < Wuppie> xD 01:55 < Bibl> currently a rewrite 01:55 < Bibl> too many 01:55 < Wuppie> Who do I talk to? 01:55 < Wuppie> Bibl 01:55 < Wuppie> Who do I talk to? *Bible 01:55 < Wuppie> xD 01:55 < Wuppie> brilliant 01:55 < Wuppie> Bibl* 01:55 < Bibl> thanks lol 01:56 < Wuppie> xd 01:56 < Bibl> i tried doing some c# stuff 01:56 < Wuppie> Oh well, my project is unorganized and bad coded as it can be 01:56 < Bibl> but it makes me cringe 01:56 < Bibl> lol same 01:56 < Wuppie> haha, i <3 c# 01:56 < Wuppie> Definitely my favorite language 01:56 < Bibl> ive spent 4 years learning most of the standard java classes 01:57 < Wuppie> cool 01:57 < Wuppie> Bibl: https://github.com/kennyvv/sharpmc 01:57 < Wuppie> xd 01:57 < Bibl> gonna spend another 10 learning to design my code using it lmao 01:57 < Wuppie> haha 01:57 < Bibl> namespace SharpMC 01:57 < Bibl> { 01:57 < Bibl> class Program 01:57 < Bibl> { 01:58 < Bibl> those brackets are all out of whack 01:58 < Wuppie> Hmm 01:58 < Wuppie> not in my IDE i think... 01:58 < Wuppie> let me check 01:58 < Wuppie> no problem in my ide 01:58 < Wuppie> lol 01:58 < Bibl> you should work on your program design 01:58 < Bibl> Program.cs has a lot of random functions 01:59 < Wuppie> True 01:59 < Wuppie> but this project is mostly to get used to the MC protocol 01:59 < Wuppie> gonna do a complete rewrite when i actually understand the protocol xd 02:00 < Bibl> https://github.com/TheBiblMan/BiblBytecode this was my attempt at c# lol 02:01 < Wuppie> haha :P 02:01 < Bibl> i gave up because something broke 02:01 < Bibl> i found out that the reader reads little endian 02:01 < Bibl> but java uses big 02:01 < Wuppie> hahaha xd 02:02 < Wuppie> i don't use the reader 02:02 < Wuppie> :P 02:03 < Bibl> currently trying to refactor the entire 1.8 mc client 02:04 < Wuppie> haha cool :) 02:04 < Wuppie> it's sad how there aren't any minecraft clients 02:04 < Wuppie> not by mojang 02:04 < Wuppie> would be nice to see people do that again 02:04 < Bibl> suprised at how bad the mc wiki is 02:05 < Wuppie> is it that bad? :P 02:05 < Bibl> its missing half the data and the data isnt standardised 02:05 < Wuppie> lol xD 02:05 < Bibl> like some pages have different names for the same values 02:05 < Bibl> in the entity sizes table 02:05 < Bibl> for "mobs" it just says "varies" 02:05 < Wuppie> yeah, i seen that hahahah 02:05 < Bibl> and theres no info about the individual mob sizes 02:06 < Wuppie> "Well, it varies. We don't tell you the individual sizes tho" 02:07 < Bibl> http://hastebin.com/amuhoxodux.avrasm what do you think the two String[] do in this class? 02:08 < Wuppie> hmm? why? 02:08 < Wuppie> oh 02:08 < Wuppie> let me see 02:08 < Wuppie> missread your message xd 02:09 < Bibl> its fine i got it 02:09 < Wuppie> lol 02:09 < Wuppie> okay xd 02:09 < Wuppie> i hate these 'Obfuscation' like things 02:11 < Bibl> lol 02:11 < Bibl> i did a lot of obfuscation reversing for games 02:11 < Bibl> mc just renames 02:11 < Wuppie> yeah, i know 02:11 < Wuppie> but still. it Sucks 02:11 < Wuppie> :P 02:14 < Wuppie> Oh well, i try not to look at MC Source code at all anyways 02:14 < Wuppie> i don't really have a use for it 02:15 < Bibl> learn about the client 02:17 < Wuppie> Great, null pointer exception 02:17 < Wuppie> :| 02:17 < Wuppie> know why 02:17 < Wuppie> already 02:18 < Wuppie> nvm 02:18 < Wuppie> lol 02:18 < Wuppie> hmm 02:19 < Wuppie> Ah 02:22 < Wuppie> i guess i know why it happens, just need to fix it now 02:23 < Wuppie> well, i fixed that. but another issue. i think i know the prob tho 04:12 < ackpacket> How are UUIDs generated for offline players? Or for player names that don't exist? 04:12 < ackpacket> For example... with NPCs 04:12 < ackpacket> Or, for instance, if someone uses MagicLauncher to play with a username that doesn't exist 04:13 < ackpacket> on an offline server 04:16 <+SpaceManiac> ackpacket: it's md5(utf_8("OfflinePlayer:" + username)) with some bits modified 05:05 < ackpacket> SpaceManiac: Thank you. How are the bits modidied? Or, can I read this documentation somewhere? 05:05 < ackpacket> SpaceManiac: I know one of the characters represents the version... 15:14 < GamePlay> Hello, I have a question about packet sending 15:14 < GamePlay> Do I send size, ID and data through the outputstream of the socket? 16:58 < Batimonster> Bibl? 16:59 < Paprikachu> in the join game packet, what is the purpose of the level type field? does it change anything for the client? 17:01 < shoghicp> Paprikachu: I would guess the bedrock fog 17:01 < Paprikachu> ah, makes sense 17:01 < Paprikachu> what does default_1_1 mean though? 17:04 < shoghicp> hmm, let me check again that packet 17:05 < shoghicp> a new generator version? or maybe using customized settings 17:05 < Bibl> yes Batimonster 17:05 < Batimonster> Can you help me with my code? 17:06 < Batimonster> I made a system like yours 17:06 < Batimonster> But I always get a SocketTimeOutException 17:07 < Bibl> system like mine? 17:07 < Batimonster> You already helped me yesterday, I just changed my name :) 17:07 < Bibl> oh ok 17:07 < Bibl> are you using netty or datain/out streams? 17:08 < Bibl> also post the code 17:08 < Batimonster> Now I am using streams 17:08 < Batimonster> http://pastebin.com/Q09Xw5BE 17:09 < Bibl> sec counter strike 17:09 < Batimonster> :D 17:09 < Batimonster> I get Read Timed Out 17:16 < Bibl> i think you should have 1 threads to read and write packets 17:16 < Bibl> thread* 17:16 < Bibl> each 17:17 < Batimonster> Okay 1sec, I'll try that 17:20 < Batimonster> Should I start the thread, then join it, and then get the answer? 17:24 < Bibl> you need 2 threads 17:24 < Bibl> you have 1 which queues outgoing data 17:24 < Bibl> and then sends it in the threads run method 17:24 < Bibl> and the other one which reads packets and adds its to a list 17:28 < Bibl> Batimonster 17:28 < Batimonster> I'm trying it 17:29 < Batimonster> Like this? 17:29 < Batimonster> http://pastebin.com/U9LLp7hb 17:33 < Batimonster> Bibl 17:36 < Batimonster> When you write something please mention my name, so I get a notification :D 17:44 < Bibl> yeah but add the packets to a queue Batimonster 17:44 < Batimonster> How would I do that? 17:45 < Batimonster> Bibl :D 17:45 < Bibl> make a queue 17:45 < Bibl> make an add method 17:45 < Bibl> add to a queue 17:45 < Bibl> inside of the run method do through the loop 17:45 < Bibl> send a packet 17:45 < Bibl> remove it from the quee 17:45 < Bibl> queue 17:47 < Batimonster> Okay, I try tha 17:47 < Batimonster> *that 17:48 < Batimonster> Bibl, and then periodly execute the writers and readers? 17:49 < Bibl> well in the run method 17:49 < Bibl> check if there is stuff in the queue 17:49 < Bibl> and if there is then send 17:50 < Batimonster> But when should the run method by executed? 17:50 < Bibl> Batimonster 17:50 < Batimonster> Bibl :D 17:50 < Batimonster> *be 17:50 < Bibl> put a while(true) inside the run 17:50 < Bibl> start it as a thread 17:50 < Batimonster> Okay, 1mom 17:51 < Batimonster> Is my writing and reading correct Bibl? 17:56 < Bibl> code? 17:58 < Batimonster> http://pastebin.com/U9LLp7hb 18:00 < Bibl> Batimonster lol you're class naming is atrocious 18:00 < Bibl> you need a queue of packets in the packetwriter class 18:00 < Bibl> so 18:00 < Batimonster> Yea, it's not updated yet 18:01 < Bibl> you should have writeablepacket and readablepackets 18:01 < Bibl> or outpacket and inpacket 18:01 < Batimonster> Can't I just let the read/write method empty, if I don't need it? 18:02 < Bibl> huh 18:02 < Bibl> PacketWriter needs a Queue of packets 18:03 < Bibl> in the run method you need to write the packets in the queue to the outputstream 18:04 < Batimonster> Omg man 18:04 < Batimonster> I love you 18:04 < Batimonster> Bibl 18:04 < Batimonster> Oh no 18:05 < Bibl> ? 18:05 < Batimonster> I thought it worked :D 18:05 < Batimonster> I stayed ingame for 30 secs 18:05 < Batimonster> And then kicked with reason timeout 18:05 < Batimonster> Maybe missing Ping packet? 18:06 < Bibl> well if you're not sending the right packets then ofc you'll get kicked 18:06 < Batimonster> Which packets I need? 18:06 < Batimonster> Handshake, LoginStart and then? 18:07 < Batimonster> Bibl, I'm missing KeepAlive 18:07 < Bibl> you need encryption 18:07 < Bibl> and compression 18:07 < Bibl> you need to reply to keepalives as well 18:08 < Batimonster> So just read the keepalives? 18:08 < Batimonster> And then answer with the same ID