08:51 <+SirCmpwn> exactly zero of them have changed 08:51 < Grum> and all those reasons are selfish 08:51 < Grum> and not actually needed 08:51 <+md_5> supporting a thriving group of people who were just like you 2 years ago isnt one of them 08:51 < Grum> well maybe not all :p 08:51 < Grum> i gotto run to work; getting late; online in ~40m 08:52 <+SirCmpwn> they're selfish, but they help the community because when we get them, we do shit with them that helps the community at large 08:52 <+md_5> ok, we will just plot and scheme until you get here 08:52 <+md_5> thanks for your time 08:52 <+AndrewPH> so who's gonna order the pitchforks? 08:52 < SinZ> btw Grum: is the new launcher still supposed to not show the icon for 1.5.x ? 08:52 <+SirCmpwn> drive safe, Grum, I need to yell at you more when you get there 08:52 <+md_5> thats dinnerbros domain SinZ 08:52 <+ammar2> every one of the reasons we state you end up countering with "but how will vanilla use it" 08:52 <+ammar2> and its incredibly fucking frustruating 08:52 <+md_5> no one uses vanilla 08:52 <+ammar2> ^^ 08:52 <+md_5> is that not understood :| 08:52 < SinZ> md_5: dinnerbro isn't accesable, and I won't go near #minecraft 08:52 <+SirCmpwn> apparently not by Grum 08:53 <+AndrewPH> md_5: correction, nobody uses vanilla /server/ 08:53 <+md_5> at peak time there are 300,000 users on Minecraft servers 08:53 < SinZ> AndrewPH: Vannila dedicated server* 08:53 <+md_5> at peak time there are 55,000 users on my software 08:53 < dx> dinnerbro did appear here a few times 08:53 <+ammar2> months ago 08:53 <+AndrewPH> i should plug in my 3ds and work on oracle of ages some more 08:53 <+AndrewPH> finally got past that skull dungeon 08:54 < dexter0> I't disappointing to hear the rendering engine rewrite has run into trouble. 08:54 <+md_5> bloody 20% of your playerbase gets their opinion about the quality of Minecraft SMP through the quality of my code 08:54 < dx> in the middle of a discussion i remember he sent an amazing amount of 10 messages (over the period of a few hours) 08:54 <+md_5> if my code has a bug that causes players to crash -> 20% of your smp players assume that it is YOUR fault 08:54 <+AndrewPH> md_5: better get going 08:54 <+md_5> not to be egotistic or anything 08:54 <+AndrewPH> you know what to do 08:55 <+md_5> but how is that NOT a reason to provide some level of support 08:55 < SinZ> implant a bug just to cause an uprising 08:55 <+ammar2> md_5: support checklist 08:55 <+ammar2> [ ] is it vanilla? 08:55 <+AndrewPH> [ ] is it vanilla 08:55 <+AndrewPH> [ ] does it require changes to more than 0 things 08:55 <+ammar2> [ ] does sethbling care? 08:55 <+SirCmpwn> [ ] does it please youtubers? 08:56 < SinZ> MinecraftHelp only supports vannila, which is why there is almost never server help requests there 08:56 <+SirCmpwn> maybe I should hit up sethbling on skype 08:56 <+SirCmpwn> convince him to do a video about how terrible this shit is 08:56 <+SirCmpwn> or sneak a blog post into his site 08:56 < Zachoz> a just unban his bro's account.. 08:56 < Zachoz> crap, wrong window.. 08:56 < SinZ> [ ] Does it help #mcdevs in any possible way? 08:56 < SinZ> ^ if ticked, reject 08:57 < Zachoz> we need a huge twitter trend to start or something...for them to even consider... 08:58 <+SirCmpwn> #MinecraftSucksAndMojangDoesntCare 08:59 <+SirCmpwn> ping me when Grum gets back, I'm going to beat a few kittens to death to relieve frustration 08:59 <+ammar2> hot. 09:04 -!- ranie [~rramiso@124.6.182.55] has joined #mcdevs 09:10 <+md_5> hm 09:10 <+md_5> I vote mojang hires this kid: http://www.minecraftforum.net/topic/1861963-need-proffesional-modders-and-texture-makers-remaking-minecraft/#entry23030238 09:12 < SinZ> "Can you modding" 09:14 <+md_5> I can into modding 09:14 < SinZ> I find it entertaining, he actually just wants to make a mod of minecraft to replace basically everything 09:15 < SinZ> "I dont mean remake minecraft. I make superbig mod." 09:17 -!- SpaceManiac [~SpaceMani@r74-192-152-131.gtwncmta01.grtntx.tl.dh.suddenlink.net] has quit [Ping timeout: 276 seconds] 09:20 -!- SpaceManiac [~SpaceMani@r74-192-152-131.gtwncmta01.grtntx.tl.dh.suddenlink.net] has joined #mcdevs 09:22 < Grum> < SinZ> [10:52:24] btw Grum: is the new launcher still supposed to not show the icon for 1.5.x ? <-- actually that should work, for some reason it doesnt, not really sure why :/ 09:22 < SinZ> is the normal MC version just destroying it again after the wrapper sets it? 09:23 < Grum> that could be 09:23 <+md_5> oh 09:23 <+md_5> welcome back 09:23 < Grum> SirCmpwn: saw it, wont respond to it (you know what it is about :D) 09:23 <+md_5> just tell Grum when he gets back that I am still very sad that he and Mojang don't care for developers 09:23 <+md_5> we will give you a minute to read all the backlog 09:23 < Grum> nothing new on it 09:24 <+ammar2> c'mon man 09:24 <+ammar2> we worked hard on that checklist 09:24 < Grum> hehe i do like it :P 09:24 < Grum> sadly some things seem to go like that :( 09:24 < Grum> however, the first one is rather valid 09:24 -!- Calinou [~Calinou@unaffiliated/calinou] has joined #mcdevs 09:24 < Grum> (and the second one thereby ;D) 09:26 <+ammar2> Grum: can we get a more recent pic of you to compare happiness with http://i.imgur.com/t3NMr.jpg 09:27 <+md_5> facecam now plz 09:27 <+md_5> are dinner's eyes still red? 09:27 -!- edlothiol [~edlothiol@2a02:810b:80c0:27:f2de:f1ff:fe78:51cf] has joined #mcdevs 09:28 -!- r04r|away is now known as r04r 09:29 < dx> i heard his eyes are more red than ever 09:29 < SinZ> he decided since skeletons are made of bones, they should be MLG snipers 09:30 < dx> do they turn 360 degrees before shooting too? 09:30 < SinZ> they just kill you 09:31 < dx> oh. okay. 09:32 -!- unnicked177 [~d45d641f@204.155.152.124] has joined #mcdevs 09:33 -!- Sabriel [~sharvey@pdpc/supporter/student/sabriel] has quit [Ping timeout: 246 seconds] 09:37 -!- Sabriel [~sharvey@scspc337.cs.uwaterloo.ca] has joined #mcdevs 09:37 -!- Sabriel [~sharvey@scspc337.cs.uwaterloo.ca] has quit [Changing host] 09:37 -!- Sabriel [~sharvey@pdpc/supporter/student/sabriel] has joined #mcdevs 09:48 < SinZ> Grum: I like the name of your new login service 09:49 <+md_5> SinZ what is it? 09:50 < SinZ> Yggdrasil 09:50 <+md_5> huh 09:50 <+md_5> Yggdrasil is the name of a server I know 09:50 <+md_5> also a tree it seems 09:50 < SinZ> the server is authserver.mojang.com/authenticate 09:51 <+md_5> Server:Restlet-Framework/2.1.2 09:52 < SinZ> https post, where the post info is json 09:53 -!- Yoshi2 [~chatzilla@xdsl-87-78-40-148.netcologne.de] has joined #mcdevs 09:55 -!- unnicked177 [~d45d641f@204.155.152.124] has quit [Quit: CGI:IRC (Ping timeout)] 10:11 -!- eddyb [~eddy@unaffiliated/eddyb] has joined #mcdevs 10:13 -!- mappum [~mappum@c-67-170-21-29.hsd1.wa.comcast.net] has quit [Ping timeout: 256 seconds] 10:23 -!- unnicked177 [~d45d641f@204.155.152.124] has joined #mcdevs 10:23 < unnicked177> actually Yggdrasil is a powerful Zerg Overlord 10:23 < unnicked177> http://starcraft.wikia.com/wiki/Yggdrasill 10:23 < unnicked177> everybody just likes to steal name from it 10:24 <+ammar2> b-but that was before you came in 10:24 <+md_5> dun dun dun 10:24 < dx> lol 10:25 < dx> he just pingout'd 10:25 <+ammar2> oh right :P 10:25 < dx> also 10:25 <+md_5> nooo 10:25 <+md_5> look up 30 lines or so 10:25 <+md_5> shows him joining for the first time 10:25 < dx> unnicked177: TOTALLY NOT PART OF NORSE MYTHOLOGY 10:26 < unnicked177> definetely not 10:26 < unnicked177> also, mythologies are describing non-existing things so they are pointless 10:26 < TobiX> m( 10:27 < TobiX> unnicked177: How is Starcarft any more "real"? 10:28 < unnicked177> TobiX: universe is near-infinite, Zergs or similar hive-mind-based lifeforms have great chance to exist 10:28 < unnicked177> creatures from mythologies have lesser chance because they are so unnatural 10:28 < dx> confirmed for high as fuck 10:29 < unnicked177> dx: Zergs don't violate any laws of physics or biology 10:29 < unnicked177> there is no reason for them to not exist somewhere 10:30 < dx> maybe, but you gotta be high to apply that kind of logic 10:30 < unnicked177> no, you just have to know basis of probability theory and have some common sense 10:31 -!- conehead [~conehead@unaffiliated/conehead] has quit [Quit: Computer has gone to sleep.] 10:31 < unnicked177> it is more probable for lifeform that doesn't violate any laws of universe to exist, than for lifeform that violates many of laws to exist 10:31 < TobiX> unnicked177: Uhm. "Hive mind" as portraied in StarCraft violates some laws... At least until the existance of telepathy (over long distance) is proven... 10:32 < unnicked177> so starcraft is describing more real things (potentially) than mythology, hence Yggdrasill should belong to Zerg overlord 10:32 < dx> dis guy 10:32 <+md_5> oh jeez 10:32 < dx> md_5: ikr 10:32 * md_5 pings sadimusi and whoever else can wield the banhammer 10:32 < unnicked177> TobiX: iirc Zerg uses overlords and celebrates as retransmitters 10:32 * unnicked177 has 14 years of starcraft experience 10:34 < unnicked177> TobiX: remember the mission when Zeratul kills celebrates, after that remaining zergs go rampart 10:37 < unnicked177> TobiX: btw, there are hive-minds on Earth. ants. 10:39 < Grum> whaa back; also unnicked177: its a big tree 10:40 <+ammar2> Grum: scroll up, we had a very important request 10:40 < Grum> denied. 10:41 < jast> news flash: big trees are less likely to exist than zerglings 10:41 < jast> according to some random guy 10:41 < unnicked177> jast: mythological big trees. 10:41 < jast> so the thing that makes it not exist is the context in which people spoke of it? 10:41 < jast> people speak of zerglings in the context of a video game. that's just as made up as a mythology. 10:42 <+AndrewPH> starcraft was based on a true story, though 10:42 < jast> you're saying that one type of made-up story makes anything in it impossible and the other does not 10:42 < unnicked177> no, i am speaking against specific tree, not just big tree 10:42 < unnicked177> "Yggdrasil is an immense tree that is central in Norse cosmology, in connection to which the nine worlds exist." 10:42 < unnicked177> sounds quite unlikely to exist 10:42 <+AndrewPH> time to scour the house for large sheets 10:42 <+AndrewPH> for a fan fort! 10:44 < unnicked177> jast: i just compared the chances of Zergs to exist with chances of "immense tree that is central in Norse cosmology, in connection to which the nine worlds exist." to exist. 10:44 < unnicked177> i'm not claiming Zergs exist. but they have higher chance 10:45 < jast> according to what metric? your thinking 10:45 < jast> which, of course, is the sole authority on existence of everything ever 10:47 < unnicked177> according to calculation of impossible events that are necessary to allow existance of entity in question 10:47 < jast> you can't calculate this kind of hting 10:47 < jast> unless you'd like to give me the underlying probability distribution function(s) as formulae 10:47 < unnicked177> jast: you can't calculate everything with 100% reliability. but it is possible to calculate it based on past experience of humanity 10:48 < jast> that's what's called an inductive leap 10:48 < unnicked177> ( existance of humanity and outer world is an axiom in this case ) 10:48 < jast> there is no mathematical truth to it... none whatsoever 10:49 < unnicked177> jast: is chance of seeing a car on the street higher than seeing protoss carrier? 10:49 < unnicked177> whatever will be your answer, it will be inductive leap aswell 10:50 < jast> in terms of my personal experience? yes. in terms of math? only if you assume that the past predicts the future 10:50 < jast> (which is something that I don't generally agree with) 10:51 < Grum> md_5: packet 254 should have what changes and why? 10:52 < dx> whoa. grum seems to be willing to actually change something. everyone else stop the offtopic. 10:52 < unnicked177> jast: believing that math gives a way to avoid inductive leap is inductive leap aswell. 10:53 < unnicked177> so it can't give such way 10:53 < dx> unnicked177: stop. 10:53 < Grum> it's fine 10:53 <+md_5> Grum : 10:53 <+md_5> Packet 254 should have the following changes 10:54 <+md_5> 1) A version byte identical to that in 0x02 10:54 <+md_5> 2) A string + int to detail the connected hostname, identical to that in 0x02 10:54 <+md_5> this will allow for 10:54 <+md_5> 1) Proxies / Servers to support multiple Minecraft versions concurrently 10:54 <+ammar2> vhosting that isn't a pain in the ass :P 10:54 <+md_5> 2) Proper virtual hosting support 10:55 < Grum> so i can do 2, because 1 has really not that much usecase does it? 10:55 < Grum> 1 actually gives us support issues 10:55 <+ammar2> yeah 2 is fine 10:55 <+ammar2> do it for 2 10:55 < dx> you can add a string but not a version byte? 10:55 <+md_5> Grum not really..... 10:55 <+md_5> bungee supports multiple versions 10:55 <+md_5> you just have to bind to multiple ports 10:56 < Grum> right 10:57 < SinZ> but version is less important than actually having the hostname|port 10:57 < dx> nothing stops you from doing hostname|port|version 10:58 < dx> if there's some actual reason not to use that one 'unused' byte, that is. 10:59 <+ammar2> dx: expensive for bandwith 10:59 < dx> lol 10:59 < Yoshi2> changing that byte might add considerable overhead 10:59 <+md_5> ssh 10:59 < Grum> i'm actually not seeing where the 0xFE gets used >.> 10:59 <+md_5> lets stop questioning 10:59 <+md_5> and actually have a reasonable chance of getting these changes 11:00 * SinZ wishs Dinnerbro was here 11:00 <+md_5> Grum check PendingConnection or whatever you call it, handlerPacket254 11:00 <+md_5> it decides which version of 0xFF to send 11:00 < SinZ> I want to question him on how the new login server works 11:00 -!- shoghicp [~shoghicp@77.225.6.14] has joined #mcdevs 11:00 < Grum> yes but that is the reply 11:00 < Grum> there seems to be no source for 0xFE in our code 11:00 < SinZ> 0xFE is the most boring packet in the protocol 11:00 < SinZ> as everything about it gets handled in 0xFF 11:02 <+ammar2> its the most interesting packet in the protocol SinZ 11:02 <+ammar2> it contains the fabled Schrödinger's byte 11:03 < dx> i was thinking 'interesting packet paradox' 11:03 < SinZ> Grum: stop using quantum physics over the wire 11:04 <+md_5> seriously guys 11:04 < TobiX> Well, since we are talking about it, 0xFE must be quite interesting ;) 11:04 < unnicked177> it would be nice to make a packet which will instruct the client to download updated client from link that is provided into packet, and replace the running client with it 11:04 < unnicked177> updates will become really seamless 11:04 <+md_5> lolwat 11:04 <+md_5> what are you smoking 11:04 <+md_5> think through what you just said 11:04 * unnicked177 thinked 11:04 < unnicked177> yeah, sounds nice 11:05 < SinZ> how is that useful at all 11:05 <+md_5> "lets add a way to download and run any software" 11:05 < SinZ> client and server should both be latest offical version. 11:05 <+ammar2> SinZ: how else will I extract the lastlogin file from the server side 11:05 <+ammar2> silly goose 11:05 < unnicked177> SinZ: what if server was updated while clients were connected to previous version? 11:05 < unnicked177> then they must be disconnected, right? 11:05 <+md_5> oh jeezus 11:05 < SinZ> unnicked177: clients will be kicked, and told to update 11:06 < unnicked177> SinZ: well that's ugly 11:06 < unnicked177> with proposed packet players won't notice a thing 11:06 < unnicked177> maybe just some lagging if their pc/internet is slow 11:06 <+ammar2> agreed 11:06 <+md_5> ..... 11:06 <+ammar2> this is going to make the protocol 100% better 11:06 <+ammar2> pls implement ASAP 11:06 < Grum> ugh this code is terribadly hacky 11:06 < SinZ> Grum: Rewrite it for 1.6.1 11:06 < Grum> eventhough i want to do the change, doing it might not actually be feasable >.> 11:06 <+ammar2> Grum looks at the minecraft codebase 11:07 <+md_5> hm 11:07 <+ammar2> Grum: YOU GAVE US HOPE 11:07 <+md_5> do I have a client decompilation handy somewhere 11:07 < Grum> md_5: there is some horribly backwards compat magic going on 11:07 <+md_5> its not horrible Grum 11:07 <+md_5> its an if else statement 11:07 < Grum> it is 11:08 < TobiX> Instant backdoor protocol - I like it! 11:08 <+md_5> if (packet.a) s = "xxx" else s = "yyy" 11:08 < Grum> yeah its not that simple md_5 11:08 <+md_5> that is literally what I am reading the code in front of me to be 11:08 < Grum> it *is* backwards compatible to old versions 11:08 <+md_5> yes 11:08 <+md_5> and you can continue to do so 11:08 < Grum> by fudging the timeout to be lower for that specific packet 11:08 <+md_5> yes 11:08 <+md_5> we dont need to change ANY of that 11:09 <+md_5> we just literally need the client side constructor of packet 254 changed to actually set the byte 11:09 < Grum> except that we'll be adding more of this horrible code :/ 11:09 <+md_5> wat 11:09 < Grum> there is no clientside constructor of that packet 11:09 <+md_5> let me download MCP and give you a .patch file to look at 11:09 <+md_5> fair? 11:09 < Grum> not needed, there simply is no clientsided constructor 11:09 <+md_5> so make one 11:09 <+md_5> ._. 11:10 < Grum> the 'packet' is manually made :( 11:10 < TobiX> unnicked177: In-protocol downloads have never worked well for game servers. Just send "There is an update - please install it.", KICK, problem solved. 11:11 < SinZ> md_5: I have a mcp instance open infront of me, WritePacketData is abstract for that packet 11:11 <+md_5> no seriously just gimme 5 minutes and Ill have a patch your way 11:11 <+md_5> decompiling as we speak 11:11 < Grum> let me first fix up the mess 11:11 < Grum> and then i can look into adding more 11:11 < unnicked177> TobiX: what is player in engaged with important PvP (carrying stacks of diamonds) 11:12 < unnicked177> it gets kicked and killed 11:13 -!- yorick [~yorick@oftn/member/yorick] has joined #mcdevs 11:13 < jast> for a client to support seamless updates in game, the server would have to support the same 11:14 < jast> both are pretty tricky to implement 11:14 < jast> as long as the server doesn't support it, the only place in which sending such a packet to the client makes sense is during login 11:15 < unnicked177> what is tricky there? 11:15 < jast> a kick during login hardly causes gameplay issues 11:15 < unnicked177> jast: potentially it can 11:15 < jast> yeah, potentially zergs exist, yadda yadda, I know, 11:15 < unnicked177> i.e. you found a huge amount of diamond ore, then you got kicked 11:16 < unnicked177> you update client, connect and see that somebody already dug it all out 11:16 < jast> yes, but you only get kicked while you're connecting to the server 11:16 < unnicked177> how so 11:16 < jast> unless the server supports seamlessly switching to a new binary (which would be the only thing that could require the client to upgrade, too) 11:16 < unnicked177> jast: when server restarts, you get kicked too 11:17 < jast> yes, unless you support seamless updates (which is hard, and it needs to be in both server and client) 11:18 < unnicked177> jast: so my argument stays. you can find a lot of diamond ore, then get kicked and smoebody else will dig it out 11:18 < unnicked177> just because he will have faster internet/pc and will update faster than you. 11:18 < unnicked177> seamless updates are the only way of doing updates without destroying gameplay 11:19 <+md_5> done 11:19 <+md_5> 2 lines of code change 11:19 < SinZ> oh neat, I found where Minecraft Client sends Packet254 11:19 < dx> md_5: \o/ 11:20 < Grum> md_5: its *far* more 11:20 < SinZ> very ugly indeed Grum 11:20 <+md_5> no... 11:20 < Grum> actually 11:20 <+md_5> its 2 lines 11:20 <+md_5> ... 11:20 < Grum> nah more than two lines at least :) 11:20 < Grum> minimal is ~13 orso :p 11:20 <+md_5> here 11:20 <+md_5> hurry up gist 11:21 < Grum> just reading the stuff of the protocol means ~6 lines :P 11:21 < Grum> (and writing) 11:21 <+md_5> Grum https://gist.github.com/md-5/f7b09e6da137e6828ec8 11:21 <+md_5> I spot 2 lines 11:21 < Grum> yeah 11:21 <+md_5> how many do you? 11:21 < Grum> and that is wrong. 11:21 <+md_5> "wrong" 11:21 < Grum> i'm doing the full change obviously ;) 11:22 <+ammar2> but thats just the proto version md_5 11:22 <+md_5> there is quite possibly nothing else you can do 11:22 <+ammar2> no host/port 11:22 <+md_5> thats all I was going for 11:22 <+md_5> host and port, ez pz 11:23 < dx> grum wants to refactor the whole thing but at the same time doesn't want to refactor the whole thing 11:23 < SinZ> it should be using Packet254ServerPing.WritePacketData 11:23 < SinZ> but that function doesn't do anything, so it needs to start doing something 11:24 <+md_5> https://gist.github.com/md-5/f7b09e6da137e6828ec8 11:24 <+md_5> @@ Grum 11:25 < Grum> almost md_5; i actually like the > 71 11:25 < Grum> eventhough its magical 11:26 <+md_5> I assume you have constants in the actual code 11:26 <+md_5> but obfuscator ofc strips them 11:26 <+ammar2> lol 11:26 <+ammar2> you have high expectations 11:26 < Grum> should be 73 ;) 11:26 < Grum> we cant use the constant 11:26 < Grum> as it will change over time obviously 11:26 <+md_5> you can make another constant 11:26 < Grum> yeah doing just that 11:26 <+md_5> VERSION_WHEN_PING_FIELD_WAS_CREATED = 73 11:27 <+md_5> if (readThing >= VERSION_WHEN_PING_FIELD_WAS_CREATED) 11:27 < Grum> WHEN_MD_5_GOT_ME_TIRED 11:27 < dx> loling 11:27 <+ammar2> ONE_SMALL_STEP_FOR_MCDEVS 11:28 < SinZ> md_5: so 9 lines for full implementation 11:28 < Grum> nah a bit more 11:28 < Grum> this justifies comments ;) 11:28 <+md_5> 8 lines 11:28 < Grum> also the sending of the packet has to be updated obviously :) 11:28 <+md_5> + 1 brace 11:28 <+md_5> + 5 comments 11:28 < unnicked177> you can script constant creation based on git history i think 11:28 <+md_5> Grum the packet isnt even 'sent' :p 11:28 < Grum> now it is! 11:28 < unnicked177> will save you a lot of work 11:29 < SinZ> I expect 1.6.1 to be known as the MCDevs patch 11:29 < unnicked177> i.e. VERSION_WHEN_WAS_f443e32e 11:29 < Grum> unnicked177: not really useful 11:29 < Grum> also not possible ;) 11:29 < Grum> because it goes from when i do the commit 11:29 < Grum> and ic annot know the sha ;) 11:29 <+md_5> why did you take what unnicked177 said seriously? 11:30 < SinZ> he is in the ban todo list 11:30 < Grum> haha 11:30 < unnicked177> SinZ: lol, how so 11:30 < SinZ> I don't need to answer that... 11:31 < unnicked177> you don't need to say anything, btw 11:32 <+md_5> oh well Grum , thanks for the work you have done this morning, hopefully its just the start of a cooperative relationship :) 11:33 <+ammar2> too friendly 11:33 < unnicked177> you want relationship with Grum? 11:33 < unnicked177> why?.. 11:33 < Yoshi2> why not? 11:33 <+ammar2> unnicked177: men have needs 11:33 < dx> i agree with Yoshi2 here 11:34 < unnicked177> ammar2: i thought exactly that when he put his "cooperative relationship" request 11:35 < dx> well yeah, he needs to have proper virtual hosting 11:35 < dx> having a cooperative relationship helps achieve this and other goals 11:35 < unnicked177> so he is trying to use Grum for his own needs? 11:36 < Grum> too much weird stuff in this code 11:36 < Grum> but it should be 'ok' now :/ 11:36 < TobiX> unnicked177 is only here for entertainment ;) 11:37 -!- kcj [~casey@unaffiliated/kcj] has quit [Read error: Connection reset by peer] 11:39 -!- Yoshi2 [~chatzilla@xdsl-87-78-40-148.netcologne.de] has quit [Quit: ChatZilla 0.9.90 [Firefox 21.0/20130511120803]] 11:40 -!- Yoshi2 [~Yoshi2@xdsl-87-78-40-148.netcologne.de] has joined #mcdevs 11:40 < Grum> md_5: doing it 'properly' 4 files changed, 43 insertions(+), 10 deletions(-) 11:40 < Grum> o.O 11:40 < Grum> hmm more even 11:40 < Grum> this is not proper yet >.> 11:41 * AlphaBlend nerfs Grum's golden apple stash to half its contents 11:41 < unnicked177> Grum: welcome to java :) 11:41 < dx> .. 11:42 < Grum> has nothing to do with java obviously 11:42 < Grum> has everything to do with doing it 'right; 11:42 <+md_5> fixing the original issue 11:42 <+md_5> and redoing the code 11:42 <+md_5> are two different things 11:42 <+md_5> you cant compare them 11:43 < Grum> fixing it properly is more work though :) 11:43 < Grum> i mean, i'd be only making the code worse if i wouldnt do that 11:43 < AlphaBlend> ^ 11:43 < AlphaBlend> is refactoring fun Grum? :P 11:44 < dx> not every addition to shitty code means making it worse 11:44 <+ammar2> they've been refactoring over the last year, many fun times to be had 11:44 < Grum> necessary evil 11:44 < Grum> dx: in this case it is 11:44 < AlphaBlend> oh of course! 11:44 < Grum> it has like 10 red flags :) 11:45 -!- shoghicp [~shoghicp@77.225.6.14] has quit [Quit: Leaving] 11:45 < AlphaBlend> ammar2: Yeh, refactoring may be boring, but it might result in much more fun in the end, because neater code :D 11:46 -!- unnicked177 [~d45d641f@204.155.152.124] has quit [Quit: CGI:IRC (Ping timeout)] 11:48 < Grum> 5 files changed, 49 insertions(+), 11 deletions(-) 11:48 < Grum> jeej 11:50 < Grum> http://pastie.org/private/i8bobrpmbbyvhs2txsgdq 11:50 < dav1d> Grum: are you doing something fancy? 11:50 <+md_5> thanks 11:50 < Grum> md_5: the complete production diff ^^ 11:50 * md_5 crosses off list 11:50 < dav1d> I always miss the intersting stuff 11:50 < Grum> md_5: tons of fun not? :/ 11:50 < dav1d> I should let znc log or increase the backlog to 2000lines -.- 11:51 <+md_5> thats not what I would call difficult :| 11:51 < Grum> not sure where it is called difficult 11:51 < Grum> its more than your 'straightforward fix' 11:51 <+md_5> Grum : 11:51 <+md_5> + public boolean isLegacy() { 11:51 <+md_5> + return version == LEGACY_PROTOCOL_VERSION; 11:51 < Grum> fail! 11:51 <+md_5> oh 11:51 < Grum> != ... :p 11:51 <+md_5> nevermind 11:52 < Grum> oh wait 11:52 < Grum> no 11:52 < Grum> that is right =) 11:52 <+md_5> nah I thought you had set LEGACY to 61 11:52 < Grum> lol when i just glanced it i did the same as you ;) 11:52 < Grum> yeah 11:52 <+ammar2> PROTOCOL_VERSION_WITH_UPDATED_PINGPACKET, disappointing name 11:52 <+md_5> yeah moar hyphen, PING_PACKET 11:53 < Grum> now named: HOST_PORT_INTRODUCTION_PROTOCOL_VERSION 11:53 < Grum> which is actually a better name :P 11:53 < Grum> i still dislike it 11:53 < dx> yeah, still doesn't mention md_5 11:53 < Grum> but meh; best be descriptive :( 11:53 < Grum> now sure why it should :P 11:54 -!- unnicked177 [~d45d641f@204.155.152.124] has joined #mcdevs 11:54 < Grum> Add host/port to GetInfoPacket (254). Thanks to md_5 for persisting it should exist. <-- ? :D 11:54 <+md_5> :D 11:54 <+md_5> second mention ever: https://gist.github.com/Dinnerbone/1974247 11:54 <+md_5> "Fixed: 11:54 <+md_5> - Fixed godmode exploit (Thanks md_5)" 11:55 * md_5 huggles Grum 11:55 < Grum> now i have to test it 11:55 < Grum> so much fun! 11:55 < Grum> someone gimme a server i can send this new packet to :P 11:55 < Grum> oh wait 11:57 < Grum> now find me the jira ticket for this md_5! 11:57 <+md_5> ._. 11:57 <+ammar2> no jira tickets for suggestions! 11:57 <+ammar2> take it to the mc forums 11:57 <+md_5> ^^ 11:57 <+ammar2> because thats the best place for technically orientated suggestions 11:57 <+ammar2> I'm sure the prrofessional modders will love it 11:57 < Grum> quite sure there must be a ticket for it 11:58 < Grum> hmmmz its not working as intended somehow :/ 11:58 <+md_5> MC-137 11:58 <+md_5> @@ Grum 11:59 < Grum> yeah meh not working properly :/ 11:59 < dx> Resolution: Works As Intended 11:59 < dx> fun 12:00 < Grum> yeaah there are issues md5 12:00 <+ammar2> what sorta issues 12:03 < Grum> backwards compat ones obviously :/ 12:03 <+md_5> Grum https://gist.github.com/md-5/f7b09e6da137e6828ec8#file-production-diff-L78 12:03 <+md_5> oh 12:03 <+md_5> nevermind 12:03 <+md_5> obfuscation is fun 12:10 < dav1d> readUtf? 12:10 < dav1d> really? 12:10 < dav1d> can we have utf-8? 12:11 <+ammar2> dav1d: baby steps 12:11 < dav1d> ammar2: this is a ... yes? 12:11 < dav1d> awesome 12:11 < dx> dav1d: unfortunately ammar2 isn't a minecraft developer 12:11 < dav1d> dx: so no? 12:11 <+ammar2> there's hope 12:12 <+ammar2> but most likely not in the near future 12:12 < dav1d> but in md_5's diff is readUtf? 12:12 -!- Yoshi2 [~Yoshi2@xdsl-87-78-40-148.netcologne.de] has quit [Ping timeout: 240 seconds] 12:12 <+md_5> its just obfuscation 12:12 < dx> other parts of the code that he didn't modify used that name too 12:12 < dx> so it's probably just an alias to whatever function reads UCS-2 12:13 < dav1d> nooooo 12:13 <+ammar2> cruel mojang 12:13 < dav1d> The java.io.DataInputStream.readUTF() method reads in a string that has been encoded using a modified UTF-8 format. 12:13 < dav1d> :( 12:13 < dx> it used to be like that 12:13 < dav1d> notice the difference? 12:13 < dav1d> readUtf - readUTF 12:14 < dx> that readUtf is part of Packet, not dis, lol 12:14 <+ammar2> also that is DataInputStream.readUTF, this is their own Packet 12:14 < dav1d> oh 12:14 < dav1d> haven't seen that^^ 12:14 < dav1d> too early! 12:15 < unnicked177> UCS-2 is a pita to implement, also it double the traffic for strings, why mojang use it? 12:15 < dx> IIRC the last time we talked about utf-8 vs ucs-2 we reached the conclusion that nobody knows why they switched to UCS-2 12:15 < dx> not even grum 12:15 <+ammar2> Grum: '[EB]' in the comment, those your initials? 12:15 < dav1d> UCS-2 is not a pita to implement, it just sucks 12:15 <+ammar2> if so, why not git blame ;_; 12:15 < unnicked177> dx: sounds like conspiracy 12:15 < dx> .. 12:16 < unnicked177> well i can think of only 1 legit reason - predetermined length to read 12:16 < dx> nope 12:16 < dx> nothing stops you from getting the utf-8 bytestring length 12:16 < unnicked177> dx: i mean - with UCS-2, a string of length 8 occupies 16 bytes 12:16 < unnicked177> so you can send it in packet prior to sending this string 12:17 < unnicked177> with UTF-8, string of length 8 can occupy different size 12:17 < unnicked177> so you will have to read it byte-by-byte 12:17 < unnicked177> hm, can be worked around by specifying byte size instead of length in short prior to it 12:17 < dx> or just send a different length prefix that shows number of bytes instead of number of unicode code points... 12:17 < dx> ye 12:17 < unnicked177> yeah 12:18 <+ammar2> which is what dos.writeUTF does 12:18 < dx> so we're back to "nobody knows why" 12:19 < unnicked177> Grum: any chance of starting using UTF-8 instead of UCS-16 everywhere? 12:19 < unnicked177> and sending its byte size instead of length 12:19 < unnicked177> seems like minor fix 12:19 < dav1d> because minecraft :( 12:19 < dav1d> the problem is not UCS-2 but correct UCS-2 12:19 < dx> "correct UCS-2"? 12:19 < Grum> unnicked177: make java do it? 12:19 < dav1d> I fear the date someone sends a character which doesn't fit into UCS-2 and I encode it as utf-16 12:19 < unnicked177> dav1d: the problem is - twice the traffic is sent for every string, even if it's ASCII (which is 99% cases) 12:20 < dav1d> Grum: java already does it 12:20 < unnicked177> Grum: yeah, or switch to python/php 12:20 < Grum> we just use java's crap? :/ 12:20 -!- SpaceManiac [~SpaceMani@r74-192-152-131.gtwncmta01.grtntx.tl.dh.suddenlink.net] has quit [Ping timeout: 246 seconds] 12:20 <+ammar2> yes 12:20 < dav1d> unnicked177: that doesn't amtter, not a lot of strings are sent in comparison to other packets 12:20 < dav1d> Grum: yes? 12:20 <+ammar2> Packet.writeUtf = dos.writeUTF 12:20 < dav1d> Grum: dis.readUTF(...) 12:20 < unnicked177> dav1d: quite a lot, i.e. in players list 12:20 < Grum> dav1d: because we need a custom-max-length ? 12:20 < unnicked177> also utf-8 allows for more characters 12:20 < dav1d> unnicked177: in comparison to other packets that is nothing 12:20 < unnicked177> not just 65536 max 12:20 < dav1d> Grum: why? 12:21 < Grum> hm it is rather 'weird' 12:21 < Grum> dav1d: because you can send a string that is 1000gb big? 12:21 < unnicked177> dav1d: what other packets? 12:21 < Grum> and we'll keep reading until we get it? 12:21 < unnicked177> 0x38? well its sent rarely 12:21 < dav1d> Grum: I can't think of a reason, no you can't 12:21 < dav1d> Grum: max is short.max 12:21 < Grum> yes you can? 12:21 < Grum> yes because WE enforcethat 12:21 < dav1d> Grum: dis.writeUTF prefixes with a short 12:21 < Grum> but you cannot use dis.readUTF() with a length argument 12:21 < unnicked177> Grum: and you don't need t. 12:21 < unnicked177> to. 12:21 < Grum> if you use the java dis/dos read/write UTF8 12:21 < unnicked177> or, you can send both 12:22 < dav1d> Grum: ... checking this and using it is really trivial, also readUTF excepts a short 12:22 < unnicked177> byte size, then length 12:22 < unnicked177> then UTF-8 string 12:22 < dav1d> Grum: if someone sends a manipulated string. .. whatever maximum is short.max bytes 12:22 < Grum> maybe it actually does in 1.6 12:22 < dav1d> Grum: this is *less* than what is possible atm with UCS-2 12:22 < Grum> nope. readUTF() takes no length arguments 12:22 < dav1d> Grum: I know 12:22 < Grum> we're just reading/writing java chars 12:22 < dav1d> Grum: it reads a short, then reads N bytes (N = short) 12:23 < dav1d> Grum: writeUTF writes a short then N bytes (utf-8) 12:23 < dav1d> Grum: atm you send a short but representing the codepoints = short.max*2 bytes 12:23 < dav1d> that is the double amount someone can make the server read with a faked packet 12:23 < unnicked177> Grum: also, you may want to try EUC-JP (which is a three-byte encoding), that way more characters will be available to you 12:23 < Grum> 64k actually 12:23 <+ammar2> also, whats the worst thats gonna happen if someone sends you a long string? Its all on the network reader thread 12:23 < unnicked177> ( you can substitute japanese glyphs with any chars you need ) 12:24 < dav1d> Grum: so you use ushort? well makes no difference 12:24 < Grum> ammar2: you can trivially dos a server with it ;( 12:24 < dx> dataoutputstream a server 12:24 < dav1d> Grum: situation would not get worse if you change it to the java builtins 12:24 < dav1d> if you want a length-check, that is really trivial 12:24 < Grum> except that we can limit it to our lengths of strings 12:24 < dav1d> that is trivial.. 12:24 < Grum> dav1d: not without copying code frmo java's sourcebase 12:25 < dav1d> Grum: and what are you doing now? 12:25 < Grum> not that? 12:25 < dav1d> Grum: right... implementing shitty UCS-2 12:25 < Grum> we just poop chars into the pipe 12:25 <+ammar2> Grum: you can add in your own length prefix 12:25 < dx> reading a length and encoding/decoding utf-8 from/to a bytestring is not rocket science 12:25 <+ammar2> along with read/writeUTF 12:25 < Grum> ammar2: that wont make any idfference and will just add useless numbers to the stream (as writeUT8 will do it too) 12:26 < unnicked177> dav1d: there is no need to use UTF-8 for minecraft 12:26 < unnicked177> reading UTF-8 has much worse performance 12:26 -!- Calinou [~Calinou@unaffiliated/calinou] has quit [Quit: Excess Flood] 12:26 < Grum> we cant even render most of the weird glyphs properly :P 12:26 < dav1d> Grum: writeUTF for sending, readUTF (self-implemented) which reads a short, then N bytes and makes utf-8 out of it 12:26 < unnicked177> and you can't sacrifice performance in minecraft (which is low enough already) 12:26 < dav1d> Grum: that can't be hard 12:26 < Grum> dav1d: possible 12:26 < dav1d> unnicked177: wtf 12:26 < unnicked177> dav1d: what is the point of using UTF-8? 12:26 < dav1d> unnicked177: it sends bytes not codepoints 12:27 < unnicked177> dav1d: codepoints? 12:27 < Grum> i first have to hack this md_5 crap working 12:27 < Grum> old servers choke on the new data and close the connection 12:27 < dav1d> unnicked177: yeah get your facts straight before yelling 12:27 < Grum> SO MUCH FUN 12:27 < dav1d> Grum: will you consider it if I can write you a readUTF function which does exactly what you want? 12:27 < dav1d> I release it under the Grum-License, too 12:28 < Grum> dav1d: yeah 12:28 < unnicked177> dav1d: the facts - 1) UCS-2 is faster to read (you know the bytes size AND the length) 2) UCS-2 is fast to convert to ASCII (just get every second byte) 12:28 < dav1d> Grum: awesome! 12:28 < dav1d> unnicked177: wrong 12:28 < Grum> dav1d: keep in mind you have quite some libs you can use! 12:28 < unnicked177> dav1d: with UTF-8 you must parse a byte to know how to parse the next byte... 12:28 < dav1d> Grum: speaking of java std.lib only 12:28 < dav1d> unnicked177: wrong 12:28 < unnicked177> that involves loop with lots of ifs 12:28 < unnicked177> dav1d: why? 12:28 < Grum> dav1d: you have commons-io etc 12:28 < dx> also lol 12:28 < dav1d> unnicked177: write utf-8 prefixes with the number of bytes not codepoints 12:28 < Grum> use it please :P 12:28 < dx> unnicked177 seriously suggested EUC-JP instead of UTF-8 12:28 < dav1d> Grum: commons-io is a package? 12:29 < dav1d> ← java nub 12:29 < Grum> dav1d: yes 12:29 < dav1d> anyways I'll figure it out 12:29 < unnicked177> dx: why not? it's faster than UTF-8 and allows for more chars than UCS-2 12:29 < dav1d> Grum: will do, awesome! 12:29 < Grum> dav1d: everyone can copy the horrible code; i rather not have code that i cannot test 12:29 < dav1d> unnicked177: really? 12:29 < Grum> so use a library == win 12:29 <+ammar2> dav1d: http://pastie.org/private/eqiomyhthcyt8xqhesba 12:29 <+ammar2> oops 12:29 < dav1d> unnicked177: utf-8 supports twice as many as ucs-32 12:29 < dav1d> *ucs-2 12:29 < unnicked177> dav1d: please read my sentence again 12:29 < unnicked177> carefully 12:29 < Grum> ammar2: writing is the easy part; we do not have to do anything for that 12:30 < dav1d> ammar2: is that from the std.lib? 12:30 < unnicked177> "allows for more chars than UCS-2" 12:30 <+ammar2> dav1d: yar 12:30 < unnicked177> "faster than UTF-8" 12:30 < Grum> reading has to take a limit 12:30 <+ammar2> Grum: and it can! int utflen = in.readUnsignedShort(); 12:30 <+ammar2> if you manage to hit a char lenght above it 12:30 <+ammar2> break out 12:30 < Thinkofdeath> About the string length issue above: Do you check the length of strings/arrays in nbt data? (Like in the place block packet) 12:31 < dav1d> dammit random dc 12:31 < dav1d> ammar2: awesome thanks 12:31 < dav1d> Grum: sure, I understand that 12:31 < Grum> i'm actually wrapping this new data in a custom-data-packet >.> 12:31 < Grum> so the remote server wont choke on it 12:31 < Grum> >.> 12:32 <+md_5> I dont see how the remote server could choke 12:32 <+md_5> it doesnt choke on the 0x00 sent 12:32 < Grum> it chokes on the byte after that 12:32 <+md_5> how? 12:32 < Grum> and isntantly closes the connection 12:32 <+md_5> it shouldnt try to read anymore 12:32 < Grum> java.io.IOException: Bad packet id 111 12:32 < Grum> at ei.a(SourceFile:193) 12:32 < Grum> at ci.i(SourceFile:250) 12:32 < Grum> at ci.c(SourceFile:16) 12:32 < Grum> except that it does 12:32 <+md_5> well 12:32 < Grum> and .... we cannot change the old behavior 12:32 <+md_5> the best fix imho 12:33 <+md_5> since the server closes when it sends 0xFF 12:33 <+md_5> therefore any packets after FE will NEVER EVER get handled anyway 12:33 <+md_5> is to just 12:33 <+md_5> if (readPacket instanceof GetInfo) ReaderThread.interrupt9 12:33 <+md_5> or however you want to shut that thread down 12:34 < Grum> we cant do that for old servers obviously >.> 12:34 <+md_5> :( 12:34 <+md_5> riight 12:34 < Grum> yeah 12:34 < Grum> and that is the issue 12:34 <+md_5> add a random magic byte 12:34 <+md_5> that is a valid MC packet 12:34 <+ammar2> new packet pls 12:34 < Grum> i am adding magic bytes so the content after it seem like a packet 250 12:34 <+md_5> and it will try to read, but just hang until 0xFF is sent 12:34 < Grum> yup 12:34 < Grum> just what i am doing now 12:34 <+ammar2> oh god 12:34 < Grum> but GOD IT IS UGLY 12:35 <+md_5> write(0XFA) write(totalLength) write(data) 12:35 < Grum> yeaaah not really 12:35 < Grum> it has a string in it too 12:37 < dx> wait, did i get it right, the old servers keep reading the rest of the 0xFE payload as new packets? 12:37 <+ammar2> yes 12:37 <+md_5> brb 12:37 <+md_5> exploting 12:37 <+ammar2> and it can't be changed now, that code is on all the servers ^o^ 12:37 <+md_5> exploiting 12:37 < dx> so basically 12:37 < dx> if the 0xFE payload starts with 0xFF + string, it will work 12:38 <+ammar2> anything you send after schrondiger's byte will be read as a new packet 12:38 <+md_5> schrondigers byte will be too 12:38 <+md_5> old servers are sitting there waiting for a keepalive int 12:38 <+ammar2> oh lel 12:39 < Grum> meh wrapping it in a 250 doesnt seem to work .. so much fun ..... 12:40 <+md_5> dx has a better idea 12:40 <+md_5> : 0xFE 0x01 0xFF 12:40 <+md_5> actually 12:40 <+md_5> nope that wont work 12:41 < Grum> sendind 0xFE, 0x01, 0xFA, String"", SizeOfPayload ... and then the normal data 12:42 <+ammar2> Grum: breaks for the really old servers 12:42 <+ammar2> they don't expect schrondiger's byte, they'll interpret it as keep alive 12:42 <+ammar2> then the next 4 bytes will be the keep alive id int 12:42 <+ammar2> so your plugin message gets eaten up 12:42 < Grum> i do not really care for *really* old servers 12:42 < dav1d> md_5: anything which speaks against `new String(bytes, "UTF-8")`? 12:42 <+ammar2> SEE THIS IS WHERE PACKET LENGTHS WOULD BE USEFUL 12:43 < Grum> not really ammar2 12:43 <+md_5> dav1d nope 12:43 < dav1d> then it'll be really easy 12:43 < Grum> dav1d: Charsets.UTF8 12:43 < dav1d> Grum: alright! 12:43 < Grum> becuse that throws an invalid charset exception 12:43 * dav1d starts intellji 12:44 <+ammar2> Grum: well if you don't care about older servers then your plugin message wrap works fine 12:44 -!- ranie [~rramiso@124.6.182.55] has quit [Remote host closed the connection] 12:44 < Grum> ammar2: i have to care for 1.5.2 12:44 < Grum> not for 1.2.x 12:46 < Thinkofdeath> Grum: Looking at the code, no length checks are done on strings/arrays in nbt data (or the size of the nbt data), doesn't that have the same issue as with large strings? 12:46 < Grum> that is different 12:46 < dx> Thinkofdeath: don't talk to grum about nbt 12:46 < dx> Thinkofdeath: he really really really really hates that code 12:46 < Thinkofdeath> dx: :) 12:47 < unnicked177> what is the point of nbt? 12:47 < unnicked177> why not just keep everything as byte array? 12:47 < dx> funny guy 12:48 < dx> might as well ask "what is the point of data structures" or "what is the point of abstraction" 12:48 < Grum> unnicked177: because nested data is totally not needed 12:49 <+ammar2> why are you guys taking unnicked177 seriously again 12:49 < dx> i'm not, i said it's funny 12:49 <+ammar2> why are you grums* 12:49 < dx> lol 12:50 < Grum> BECAUSE I CAN FUCKING DO WHATEVER I FUCKING PLEASE ammar2. 12:50 < dx> \o/ 12:50 < Grum> got that? 12:50 <+ammar2> CAPS LOCK: CRUISE CONTROL FOR AWESOME 12:50 < Grum> now *STFU* 12:50 <+ammar2> lel 12:51 < SinZ> Grum: am I supposed to beable to make my clientToken with Yggdrasil to be anything I want? 12:51 < Dinnerbone> Make it something unique to that instance of the client. If you don't send one, you'll get one back - save it. 12:51 < Dinnerbone> An account can only be logged in on 6 different clients, based on IDs 12:52 < SinZ> oh, I don't need to send it? 12:52 < SinZ> yay 12:52 < dx> TIL "yggdrasil" is the only way to highlight Dinnerbone on irc 12:52 <+ammar2> on #mcdevs* 12:52 < Dinnerbone> But you should, because as I just said - you can only be on 6 different ones, and one is generated if you don't send one 12:53 <+md_5> where is the api doc for yggrdrasil 12:53 < Dinnerbone> Isn't one 12:53 < SinZ> md_5: in the launcher.jar file that bootstrap 4.0 will allow you to use 12:54 < SinZ> it is a https post to http://authserver.mojang.com/authenticate with the post data being json 12:55 < SinZ> {"agent":"Agent{name='minecraft', version=1}","username":%USERNAME%,"password":%PASSWORD%} 12:55 <+ammar2> thanks for the free account 12:56 < dx> wow this account is registered as mojang gold 12:58 < TobiX> Is Mojang Gold as awesome as Reddit Gold? 12:58 < SinZ> apparently my account has no "availableProfiles" in it 12:59 < Dinnerbone> SinZ: do you have (paid) minecraft on that account? 12:59 < SinZ> yup 12:59 < Dinnerbone> Version should be sent as a string 12:59 < Dinnerbone> And the agent is Minecraft not minecraft 12:59 < Dinnerbone> Agent == what game you're asking about 13:00 < SinZ> in the launcher it is MINECRAFT 13:00 < SinZ> oh wait, mis-read 13:00 < Dinnerbone> Yep you did :p 13:00 < Dinnerbone> public static final Agent MINECRAFT = new Agent("Minecraft", 1); 13:00 < Dinnerbone> Actually version can be an int! 13:00 < Dinnerbone> But the name is still Minecraft 13:01 -!- unnicked177 [~d45d641f@204.155.152.124] has quit [Quit: CGI:IRC] 13:01 -!- unnicked177 [~d45d641f@204.155.152.124] has joined #mcdevs 13:01 <+md_5> you mean we can finally have multiple names per email 13:01 <+md_5> shrug 13:01 <+md_5> changeable names 13:01 <+md_5> thats gonna lead to spam 13:01 <+md_5> and stupid names 13:02 < Dinnerbone> Stupid names aren't possible right now? 13:02 < Dinnerbone> Well I didn't know that :) 13:02 < SinZ> there are some account names in horrible 1337 13:02 <+md_5> I_LIKE_DX -> 10 minutes later IHATETHISSERVER 13:02 <+md_5> etc etc etc 13:02 < dx> ._. 13:03 < Dinnerbone> If they don't mind paying every 10 minutes sure that's up to them 13:03 < dav1d> mh not so trivial at all 13:03 < SinZ> you can't change your name yet still, but >1 account per email is possible now 13:03 < dx> mojang won't mind either 13:03 <+md_5> no one mentioned cash :( 13:03 < dav1d> y u use custom utf-8 13:03 < Dinnerbone> You just ban them from your server if they're spamming you 13:03 < SinZ> (you can get a deal with Mojang support to have your name changed, only if you owned the non-premium account beforehand though) 13:03 < Dinnerbone> Name changes aren't a golden ticket out of trouble 13:04 <+md_5> permissions files are gonna be fun 13:04 <+md_5> uuid_goes_here 13:04 < SinZ> yeh, Servers don't like it when your name changes 13:04 < Dinnerbone> One of the many reasons I've always said stuff like that should be through a tool and not written by hand ;) 13:05 < SinZ> you don't realise how much stuff is bound to your name until it changes 13:05 < dx> yeah, god damn lockette chests 13:05 < dx> they say [Private] and a list of usernames in the following lines 13:05 < SinZ> and warps/homes 13:06 < SinZ> and being able to build in areas 13:06 < SinZ> and inventory / enderchest 13:06 < dx> some of the players of my server switched accounts and had a lot of fun removing each sign from each one of the hundreds of chests they owned 13:07 < dx> i should have written a worldedit craftscript to fix that... 13:12 < TobiX> dx: No, let them work for this. This pretty much gurantees they never do it again ;) 13:12 < SinZ> Im still getting no activeProfiles, https://github.com/SinZ163/SinZ-MC-Launcher/blob/3c843300471e4dddcbec0784477b500f3eb2b908/SinZ%20MC%20Launcher/Login/Yggdrasil.cs#L36 13:13 < SinZ> wow that link is huge 13:13 < dx> SinZ: you can usually shorten these by replacing the commit sha1 by a branch like "master" 13:14 < SinZ> the commit made it easier to find the file 13:14 < dx> well actually a partial sha1 works too 13:14 < dx> cut it to the first 8 chars or so 13:14 <+ammar2> SinZ: protip, open up repo, press 't' 13:15 <+ammar2> and enter your file name 13:15 <+ammar2> or at least the beggining o it 13:15 < SinZ> ooh, that is nice 13:16 < dx> https://github.com/SinZ163/SinZ-MC-Launcher/blob/3c84/SinZ%20MC%20Launcher.sln 13:16 < dx> 4 chars of sha1 :D 13:16 < dx> wait why did i link that file 13:17 < dx> oh right i tried the file search thing ammar2 mentioned 13:17 -!- SpaceManiac [~SpaceMani@r74-192-152-131.gtwncmta01.grtntx.tl.dh.suddenlink.net] has joined #mcdevs 13:19 < dav1d> Grum: I guess you wouldn't like if I use the java-implementation and tweak it to take an additional max-length argument? 13:19 < Grum> not acceptable indeed 13:20 < Grum> you missed how oracle raped google for doing things like that? :D 13:20 < dav1d> well then, I have to reimplement that 13:20 < dav1d> alright 13:20 < Dinnerbone> Im still getting no activeProfiles, https://github.com/SinZ163/SinZ-MC-Launcher/blob/3c843300471e4dddcbec0784477b500f3eb2b908/SinZ%20MC%20Launcher/Login/Yggdrasil.cs#L36 13:20 < Dinnerbone> Uhh 13:20 < dav1d> y u use dumb self-implementation 13:20 < Dinnerbone> That's not how you json. 13:21 < SinZ> you guys turn a class into json, so it is hard to tell 13:21 < Grum> dav1d: because i do not want untestable code in my repo 13:21 < dav1d> Grum: why untestable? 13:21 < dav1d> Grum: writing unittests is trivial 13:22 < Grum> oh you are writing unittests for THAT code? :D 13:22 < Grum> do you even fully understand it so you can test the edgecases? 13:22 < dav1d> Grum: well if I implement it myself, yes 13:22 < Grum> or do you want to make it run through the full unicode table and see if it 'encodes/decodes' the same as java does? 13:22 < dav1d> Grum: well, we we could make it easier, let writeUTF send codepoints and byte-length 13:22 < Grum> (keep in mind, no unittest can take longer than 500ms :D) 13:22 < Grum> dav1d: which would mean what? 13:23 < Grum> 4byte for all data? 13:23 <+md_5> 500ms is trivial to encode the entire unicode sequence 13:23 <+md_5> ... 13:23 < dav1d> Grum: if codepoints > max-codepoints (characters), reject it 13:23 < dav1d> Grum: use worst-case (4 bytes) to determine if the byte-length is too long 13:23 < Grum> what would the max be? java uses chars internally to represent stuff 13:24 < Grum> which arent really >2byte codepoint compatible :P 13:24 < Grum> md_5: managed to get this horrible code hacked working backwards compatible :/ 13:24 < dav1d> Grum: max = max characters 13:24 < dav1d> Grum: e.g. I think your max for usernames is 26 characters, so max-codepoints would be 26 13:24 < dav1d> then check, 26*4 > bytelength 13:25 < dav1d> well 13:25 < dav1d> one could also infere the from the bytelength 13:25 < dav1d> if that is good for you, it would be relativly easy 13:25 < dav1d> bytes/4 > max_codepoints 13:26 < dav1d> but that is not accurate 13:26 < Grum> md_5: you're going to have a fieldday parsing this data :/ 13:26 < dav1d> if you want it accurate you need to parse it on your own.. 13:26 < Grum> http://pastie.org/private/zvxnufcduqmh7dmhu2dgw <-- md_5 13:26 < Grum> oh i can drop the "a" actually :P 13:27 <+md_5> just write "" as the payload? 13:27 < dav1d> SinZ: minecraft login changed? 13:27 <+md_5> instead of "a" 13:27 < SinZ> dav1d: new launcher, new login server 13:28 < dav1d> SinZ: the old post doesn't work anylonger? 13:28 < Grum> md_5: fixed: http://pastie.org/private/56wxmn1rfvxajnsyutola 13:28 < Grum> except for the horridl ocation of the static 13:28 < Grum> aaanyhow 13:28 < SinZ> dav1d: it wont work for 1.6 13:28 <+md_5> nonetheless having this is much needed imho 13:28 < dav1d> ah ok 13:28 < SinZ> it will continue to give the timestamp for 1.5.2 13:29 < Grum> md_5: just trying to show you how much unexpected shit comes up when you do a 'trivial change' like this 13:29 < Grum> anyhow, this should be fine now 13:30 < SinZ> pure hackery, but if you want backwards compatibility that much, it'll do 13:31 < Grum> so your theoretical 9-line-fix ends up being: 5 files changed, 68 insertions(+), 11 deletions(-) 13:31 <+md_5> Packet.writeUtf("", dos); 13:31 <+md_5> could even call that "MC|PingHost" 13:31 <+md_5> or something 13:31 <+md_5> and make it an actual channel, since thats what it is, and thats how it will be read 13:31 < Grum> nah it wont be read like that 13:32 < Grum> but i can indeed 13:33 < Grum> 6 files changed, 69 insertions(+), 11 deletions(-) 13:33 < Grum> jeej. 69 13:35 <+md_5> if ( version >= 72 ) 13:35 <+md_5> { 13:35 <+md_5> connectHost = new PacketFAPluginMessage(); 13:35 <+md_5> connectHost.read( buf ); 13:35 <+md_5> } 13:35 <+md_5> thats what mine will look like 13:35 <+md_5> + add some glue to read from the PacketFAPluginMessage 13:36 < SinZ> Dinnerbone: Oh, the agent is a JSON Object, got it working now <3 13:37 < Grum> d2e2be6..6831257 master -> master <-- totally pushed md_5 13:38 < Grum> now send me cake 13:38 < Grum> this was far more effort than i wanted to spend on it >.> 13:38 <+md_5> http://graybarnbaking.files.wordpress.com/2013/03/y11_5989-edit.jpg 13:38 <+md_5> md_5 & Grum 4eva 13:38 < dav1d> meh, DataOutputStream.writeUTF sucks :P 13:38 < dav1d> <- implemented his own 13:38 < Grum> dav1d: no kidding ;P 13:39 < dav1d> Grum: it really does, it uses some strange utf-8 modified stuff, I think for other streams than sockets 13:39 < Grum> so erm, what we *could* do is roll our own read/write stream -- the main issue is the decoding 13:39 < Grum> new String().getBytes(Charsets.UTF8) 13:39 < Grum> that gives us the right data to send 13:39 < SinZ> Dinnerbone: is the profile ID thing the sessionID I send to the client? 13:39 < Grum> but the other way around -- the decoding 13:39 < dav1d> Grum: I did it, worst case someone could maxLength*3 bad bytes send through 13:39 -!- BizarreCake [~BizarreCa@46.121.251.157] has joined #mcdevs 13:39 <+md_5> Charsets.UTF8.decoder().decode(byte[]) 13:40 <+md_5> or similar 13:40 < Grum> the issue is that you dont know if you have a complete byte 13:40 < Grum> erm complete char :p 13:40 <+md_5> this is why we have the length? 13:40 -!- BizarreCake [~BizarreCa@46.121.251.157] has quit [Client Quit] 13:40 -!- BizarreCake [~BizarreCa@46.121.251.157] has joined #mcdevs 13:41 <+md_5> also another argument for packet length header is that it isnt non blocking friendly atm. You have to do a replay thing - throw exception / return magic value to indicate you need more data 13:41 < Grum> that still doesnt apply 13:41 < dav1d> md_5: that's not the problem 13:41 < Grum> hmm well in theory that might be enough 13:41 < Dinnerbone> SinZ: I would recommend you research all the situations that apply in this new auth service before trying to roll your own implementation of it. 13:42 < dav1d> md_5: Charset.UTF-8? 13:42 < dav1d> md_5: new Charset("UTF-8")? 13:42 < Dinnerbone> You're already ignoring the client token warnings I gave you 13:42 < Grum> dav1d: yes the same but no checked exceptions (1.6 support only) 13:42 <+md_5> Charset.forName( "UTF-8"); 13:42 < SinZ> I haven't finished implementing it, I will be saving it when its done 13:43 < Dinnerbone> May I ask why you're rolling your own launcher? 13:43 <+md_5> there are tons of launchers out there 13:43 < unnicked177> Dinnerbone: piracy reasons maybe :p 13:43 < Grum> BECAUSE MOJANG MAKES SUCKY THING SAND THEY DONT LISSUN TO US 13:43 <+md_5> mainly for mod management 13:44 < Grum> we'll actively try and break it! *promise* 13:44 < Dinnerbone> So just make the launcher run your custom program which manages mods. You don't have to break authentication or user experience or anything like that. 13:44 < SinZ> mod management is the main goal of this launcher, with the implementation of mod repositories for easy installation 13:45 <+md_5> much easier for users to have a custom launcher than one which they have to setup 13:45 < SinZ> trying to trick vannila launcher into going to my program would take longer than just writing my own 13:45 <+md_5> download -> click -> run 13:45 < dav1d> md_5, Grum: http://vp.dav1d.de/5TFlL?ReadUTF8.java proof of concept 13:45 < dav1d> buffer should probably cached 13:45 <+md_5> uh 13:45 <+md_5> why the / 4 13:45 < SinZ> its bad enough to trick the vannila launcher into using a different version.jar file 13:45 <+md_5> also dos.writeShort(data.length() & 0xffff); // unsigned short 13:45 <+md_5> would be unsigned short 13:46 < dav1d> md_5: yeah just noticed that 13:46 < dav1d> have it locally fixe 13:46 < dav1d> d 13:46 <+md_5> the /4 makes no sense though 13:46 < dav1d> md_5: /4 because maximum length of a utf character is 4 bytes 13:46 <+md_5> yeah 13:46 <+md_5> but .length() that you write with is the length in chars 13:46 < dav1d> md_5: so if /4 is already bigger than maximum characters, the data is already too long 13:46 <+md_5> not bytes 13:46 < dav1d> md_5: smart 13:47 < dav1d> yeah, as I said, not tested 13:47 < SinZ> should be *4 13:47 < dav1d> SinZ: no 13:48 < dav1d> md_5: http://vp.dav1d.de/Cup?ReadUTF8.java <- SinZ 13:48 < dav1d> the question is 13:48 < dav1d> if that is good enough 13:48 -!- yorick [~yorick@oftn/member/yorick] has quit [Remote host closed the connection] 13:48 < dav1d> the "/4" hack 13:49 < SinZ> could always just send the length in bytes through the short 13:49 < dav1d> SinZ: you mean codepoints? 13:49 < SinZ> nvm, was thinking of something else 13:49 < dav1d> SinZ: Grums concern is that someone could send a 64Ki string to dos the server 13:49 < dav1d> that wouldn't prevent it 13:50 < dav1d> so if we don't want to parse utf-8 on our own, that's the only soloution I see 13:50 < dav1d> and it should be good enough 13:50 < dav1d> maybe a default max length of 300 characters, done 13:51 < dav1d> another advantage, this is UTF-8 and not some strange DataStream UTF-8 which wouldn't work out of the box in most languages 13:52 <+md_5> dav1d I sortof fixed your code 13:52 < dav1d> md_5: mh? 13:52 < dav1d> you have a better idea? 13:52 <+md_5> http://vp.dav1d.de/NyOx?c 13:53 < Dinnerbone> trying to trick vannila launcher into going to my program would take longer than just writing my own 13:53 < Dinnerbone> Uhhh 13:53 < dav1d> http://vp.dav1d.de/NyOx?java 13:53 < dav1d> ^ java highlighting 13:53 < Dinnerbone> 2 minute job if it's your first time seeing the system 13:53 < Dinnerbone> 30 second if not 13:53 < Dinnerbone> We're also creating an installer package system to make it a 1 second job for users