19:03 < astradev> Alright. 19:03 < TheUnnamedDude> Holli sheet 19:03 < TheUnnamedDude> That renders wrongly on ubuntu 19:03 < TfT_02> Grum, you bored? :P 19:03 < Grum> ⃣o.o ⃣ 19:03 < Grum> i think it is kerned far left hehe 19:03 < TheUnnamedDude> http://screencloud.net/v/zuTd 19:04 < astradev> TfT_02: That's an understatement. 19:04 < Grum> ⃝ ⃣ 19:04 < Grum> :P 19:04 < Grum> ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ ⃣ 19:04 < Grum> aiaiaiai 19:04 < TheUnnamedDude> Inb4 ascii art in the vanilla server 19:04 < Grum> ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ ⃝ ⃣ 19:04 < Grum> uhoh :P 19:04 < Grum> . ⃝. ⃣. ⃝. ⃣. ⃝. ⃣. ⃝. ⃣. ⃝. ⃣. ⃝. ⃣ 19:05 < Grum> http://i.gyazo.com/a30a3ec8ee082f836095d5406ac9743e.png O.o 19:05 < TheUnnamedDude> Nooo 19:05 < TheUnnamedDude> Not gyazo 19:05 < Grum> give me another sane tool that works sane on osx :) 19:05 < Grum> sane please! ;D 19:05 < TheUnnamedDude> screencloud 19:05 < TfT_02> Heh, it looks entirely different for me. Lemme make a screenie 19:06 < TheUnnamedDude> Well, I do not know how it works on OS X 19:06 < humerusj> Someone's having some fun. 19:06 < TheUnnamedDude> Make a script with screencaputure and bind it to a key? :D 19:07 < TfT_02> http://imgur.com/1CLBgd7.png 19:07 < TheUnnamedDude> s/caput/capt/ 19:08 < astradev> https://st0rage.org/~astra/public.php?service=files&t=4ce2e51aec1518c6510c910b56daf1c0 19:08 < astradev> that's what it looks like here. 19:08 < shoghicp> I see a bunch of null characters here :P 19:08 < Grum> lol that doesnt work at all ... 19:08 < Grum> screencloud that is ;( 19:08 < TheUnnamedDude> Whaa 19:09 < astradev> androirc renders it as yellow squares. https://st0rage.org/~astra/public.php?service=files&t=4ce2e51aec1518c6510c910b56daf1c0 19:09 < Grum> it claims: shift-alt-2 ... 19:09 < Grum> does nothing 19:09 < Grum> for a 'region' 19:10 < Grum> its not doing anything! megarage 19:10 < astradev> ⃣ ⃣ ⃣ ⃣ 19:10 < astradev> hm 19:10 < TfT_02> Grum if you have Dropbox for OSX, you can configure it so that it will save all the screenshots online. So you can use the native commands like CMD + Shift + 4 to take a regional screenshot 19:11 < astradev> I just use Owncloud. links all my storage services 19:11 < Grum> its really wtf broken 19:11 < Grum> oh it did something 19:12 < Grum> and said nothing 19:12 < Grum> and hid the window 19:12 < Grum> uninstalling 19:13 < Grum> that was surprisingly not working at all hee 19:13 < TheUnnamedDude> .-. 19:13 < TheUnnamedDude> Works well on windows 19:13 < TheUnnamedDude> Works ok on Ubuntu 19:13 < Grum> gyazo works nice .. but i hate the spam 19:16 <+Amaranth> Grum: So, just to make sure no one is missing anything, there is no way to make an NPC anymore unless you own the account for that UUID and have it log in once every 24 hours, right? 19:16 < Grum> and yeah i know i can probably have the default screenshot stuff store it on dropbox; i want it pastable in my buffers =) 19:16 < Grum> Amaranth: i think so yeah 19:16 < TheUnnamedDude> Hate the fact that when you press the image it starts a download for gyazo 19:17 < Grum> wel you can have an unskinned npc =) 19:17 < TheUnnamedDude> Also the stupid long urls 19:19 <+Amaranth> Grum: But it makes the client disconnect 19:21 < Grum> you can ... prevent that but wont have a skin 19:21 < Grum> and that wont work in the future 19:22 <+Amaranth> I mean, the real solution here is actual NPCs as in custom entities 19:22 <+Amaranth> But it's going to suck between now and when that becomes a thing you can do 19:24 < Grum> abuse villagers? :D 19:25 < dividuum> About this disconnect thing. When does the client disconnect? 19:25 < Thinkofdeath> When it gets the Spawn Player packet 19:25 < TfT_02> Grum: It’s pastable with dropbox (?) Not sure I understand what you mean, but when it uploades the screenshot, the URL is on your clipboard. It does have ugly long urls though.. 19:25 <+Amaranth> When you send it a spawn packet that doesn't have skin blob data (or has invalid data?) 19:26 < dividuum> And invalid is everything from expired to non-matching uuid? 19:27 <+Amaranth> I don't know about the invalid part, that's a guess 19:27 <+Amaranth> If you send 0 it definitely dies 19:27 < dividuum> Grum? 19:28 < Grum> pfft deobfuscate =D 19:28 < dividuum> i'd prefer a statement from the source :) 19:30 < Grum> https://gist.github.com/grum/bae8306e6a704be9d52a 19:30 < Grum> there u go 19:31 < Thinkofdeath> :P 19:31 < Thinkofdeath> http://hastebin.com/bamisejuju.java 19:31 < Thinkofdeath> and http://hastebin.com/hifoxuneko.java 19:31 <+Amaranth> hahaha that was great 19:32 < dividuum> nice statement :-} 19:32 < TheUnnamedDude> Wow 19:33 < TheUnnamedDude> Now I am going to hake minecraft with this code!!! 19:33 < Grum> you missed the important if statement before the first pastie Thinkofdeath 19:34 < Thinkofdeath> http://hastebin.com/duraduhasi.java 19:34 < Grum> and that is how you can have fake players on the server for now 19:34 < Grum> they will be steves 19:34 < Thinkofdeath> A non-version 4 uuid? 19:36 < Deaygo> Grum: the server can still hold hostage a users skin. Can't it just do stupid stuff to make them render as Steve until they pay too. Like change the name of the person when it gets sent back to the persons client? 19:36 <+Amaranth> Which is why he said that is going away 19:36 < Grum> right now? yes, later, no 19:36 < Deaygo> I didn't see the part of it going away, sorry. 19:37 <+Amaranth> Grum: So are you going to detect the server is in offline mode before allowing that? Because that could be faked too 19:38 < Grum> you cannot fake being in online mode 19:38 < Grum> if connection == crypted; you are in online mode 19:38 < Grum> no other way to get there 19:38 <+Amaranth> Oh right I remember how that handshake works now 19:39 <+Amaranth> The same protection against MITM of the handshake blocks pretending the server is offline mode so you can use steve skins 19:39 < Grum> yup :p 19:39 < Grum> right now you can forge a game-profile with a non-version-4-uuid for a steve 19:39 < Grum> 1.8 has code to simply mark the connection as crypted and flatout deny on that 19:40 <+Amaranth> So don't even bother 19:40 <+Amaranth> I wouldn't spend time updating NPCs for that if they're going to break in a month anyway 19:41 < dividuum> so basically I can shut down miners-movies :( 19:41 < dividuum> because all recordings become unplayable after 24h 19:41 <+Amaranth> Although considering the code isn't even stable enough for a snapshot perhaps a month is optimistic :D 19:41 < Grum> haha 19:41 < Grum> i can show you why Amaranth :p 19:41 <+Amaranth> dividuum: You'd have to run in offline mode and just show steves 19:41 < Thinkofdeath> dividuum: You could make a web based viewer 19:41 <+Amaranth> Grum: Because BlockState rewrite? 19:42 < Grum> $ git log -p snapshot-14w11b... | wc -l 19:42 < Grum> 141848 19:42 < Grum> not really :P 19:42 < dividuum> Thinkofdeath, true. But urgs :} 19:42 < Grum> dividuum: it'll work for old stuff and offline:( 19:42 < Thinkofdeath> dividuum: Its not /too/ hard :P 19:43 < dividuum> sigh 19:43 < Grum> we're slightly in a state of 'flux' atm =) 19:43 < dividuum> I was really pumped for the new camera thing 19:43 * Amaranth tries to remember what -p is 19:43 <+Amaranth> Oh right, to show the actual diff 19:44 < Grum> 141k lines of diff ....little bit much 19:44 < Grum> and not remotely done =) 19:44 < Thinkofdeath> Sounds like updating bukkit to 1.8 will be fun 19:44 < Grum> much of the changes are clientside only 19:45 < Grum> but yes, we rip lots and LOTS of code out of all the block classes too 19:45 < Grum> and items too soon 19:45 < Grum> after i make another set of 'controlling objects' >.> 19:45 < Thinkofdeath> Btw how does the new block state system work internally? 19:45 < Thinkofdeath> e.g. for saving 19:45 < Grum> pfft Dinnerbone can explain :p 19:45 < Grum> on 19:45 < Grum> oh 19:45 < Grum> still data 19:45 < Grum> we're not changing that 19:45 < Grum> we cant ... yet 19:46 < Grum> that requires a world format change ... aaaaand yeah no. 19:46 < Thinkofdeath> Maybe I changed my mapviewer away from block ids too soon then 19:46 < Thinkofdeath> Uses a string -> id map per a chunk 19:47 < Grum> we have some issues to solve with data-storage 19:47 < Grum> yeah, like that, is 'too high resolution' :P 19:47 < Thinkofdeath> Isn't too bad http://thinkofdeath.co.uk/mapviewer/ 19:47 < Thinkofdeath> Comes with a small perf hit 19:48 < dividuum> Thinkofdeath, hey. maybe web base playback isn't so bad after all :-) 19:48 < Grum> its not a small one 19:48 < Thinkofdeath> dividuum: :) 19:48 < Grum> that would create too much memory overhead 19:48 < Grum> keeping a map per chunk around 19:49 < Thinkofdeath> I guess 19:49 < Grum> but hell that might be good enough :P 19:49 < Grum> we dont know yet 19:49 < Grum> pro and cons to all the things 19:49 < Thinkofdeath> It isn't too bad, my mapviewer has the world loaded 5 times and the memory is still below ~200mb overall 19:50 < Thinkofdeath> (For the whole mapviewer not just the world) 19:50 < Grum> yeah but that is nothing compared to the area a server has to keep loaded hosting 100 people 19:50 < Thinkofdeath> Oh for server, true forgot about that 19:50 < Grum> per chunk would be nice, better would be per 16^3 ... 19:50 < Grum> but might be too expensive memory wise 19:51 < SinZ> why not have it per region 19:51 < Grum> per region might be nice ad those are the 'files on disk' 19:51 < Grum> but then you have to somehow manage to handle someone copy/pasting them into another world :P 19:51 < Grum> all doable 19:51 < Grum> not fun 19:51 < Grum> per world is going to be the minimum 19:51 < Grum> but you kinda dont just want to store it once 19:52 < SinZ> but you also kinda dont want repeated data everywhere 19:52 < Grum> we might do an inbetween; mega-map @ world-level which does index->string (which gets backed to index->block) and then from each chunk we'll have a 'pallet' of those indexes orso 19:52 < Grum> *baked 19:53 < SinZ> wc3 does the pallet system 19:53 <+Amaranth> Ooh ooh pallet, I did one of those 19:53 < Grum> pallet is awesome, most generated chunks can store blocks with 4bits/block 19:53 < Grum> and i mean 16^3 ofc ;) 19:54 < Grum> so that would just be 2k of uncompressed data 19:54 < SinZ> and chunks that are 100% smooth stone would actually be smaller size 19:54 < Grum> well, ideally we make 'different kinds of chunks' 19:54 <+Amaranth> https://gist.github.com/amaranth/10406779 19:55 <+Amaranth> I spent some time in here trying to get people to think up something better than that 19:55 < Grum> i have many kinda of formats we need to be able to try 19:55 < Grum> ideally i make a system that can mark chunks being of a certain kind 19:56 < Grum> and then we can start experimenting with what works best :P 19:56 <+Amaranth> Oh wait that's the wrong class 19:56 < Grum> and if we just have readers for all 'known formats' forever -- (should be small classes wrapping the data) -- then we can always upconvert to something else 19:57 <+Amaranth> There now it has both 19:57 < Grum> and 3d biomes ... stackable regions ... 19:57 < Grum> many things i need to add :p 19:58 < Grum> we have some nice ways to stop sending large amounts of data too 19:58 < Grum> but we have to see if its too 'heavy' for the server 19:58 <+Amaranth> You remember talking with Zeerix about doing something like this back in early 2012? That was my inspiration 20:00 <+Amaranth> The only representation I've found that would be better would be AABBs which is basically 2D RLE but has the advantage of saving you time on your physics engine 20:00 < Grum> yeah 20:00 < Grum> wont work so well because of custom-shapes 20:00 < Grum> we have no way of handling that yet 20:00 < Grum> going to be SO FRIKKINPAINFUL 20:01 <+Amaranth> Oh yeah, my thoughts on that was just if the block isn't using the default block model treat it like a tile entity 20:02 <+Amaranth> But this is for the server, not the client 20:02 < SinZ> but then there is silly blocks like the anvil which isn't a tile entity 20:02 <+Amaranth> I mean, it'd be nice to do something like this on the client too because a mesh falls out of an AABB with not much work 20:03 < Grum> right now we have definitions of the meshes @ client 20:03 < Grum> but only visual ones 20:03 <+Amaranth> Although this kind of setup is optimized for a world that has writes but isn't dominated by them 20:03 <+Amaranth> While minecraft writes like crazy 20:04 < Grum> yeah 20:04 <+Amaranth> The nice thing about the palette setup is it is still O(1) read (but with an extra level of pointer chasing) and O(log n) write 20:07 < Grum> i want to get to a point where we can experiment with different kinds of storage 20:07 < Grum> but not touching that before 1.9 20:08 < Grum> the amount of work that was needed to stop having Blocks decide their textures in code ... 20:08 < Grum> was .... incrediwtf 20:08 <+Amaranth> Grum: Now it's time for entities! :D 20:08 < Grum> no, items first 20:08 <+Amaranth> Items are just a texture? 20:09 < Grum> or a block...model 20:10 < Grum> also, the server knows the texture ... why? :) 20:10 < Grum> remember 'Icon' in Block? all gone. 20:11 <+Amaranth> Those kinds of things were useful for figuring out what classes were what sometimes 20:11 < Grum> Block.REGISTRY.get($BlockReference) gives you a "minecraft:stone" :P 20:14 < Thinkofdeath> I wish more of the packet classes had toString methods, would make working out the field names easier :) 20:27 < Grum> toostring is overrated 20:34 <+Amaranth> Some classes have methods that look a lot like a toString() but apparently weren't called toString() since that doesn't get obfuscated 23:07 < Thinkofdeath> Grum: If you want you can mark this one as my fault http://hopper.minecraft.net/crashes/minecraft/MCX-1506121/ 23:10 < dx> Thinkofdeath: why would you send the same crash report 24351 times?!?! 23:10 < Thinkofdeath> dx: Spigot bug, so not me sending it :) 23:11 < Thinkofdeath> (I tried once for the hell of it, it wouldn't send :( ) 23:11 < dx> Thinkofdeath: so, what happened there? 23:12 < Thinkofdeath> Player skulls need the correct case username 23:12 < Thinkofdeath> ^ That happens if its incorrect 23:12 < dx> oh 23:12 < Thinkofdeath> And in 1.7.5 it was valid to incorrectly cased skull owner 23:12 < dx> do the crash reports send the exact spigot version string? 23:13 < Thinkofdeath> I think they just send "Craftbukkit" currently 23:13 < Thinkofdeath> Should probably change that 23:14 < dx> i bet mbaxter would appreciate that 23:14 < Thinkofdeath> Yeah I know he would :P 23:18 <+Amaranth> :'( --- Day changed ven. avril 11 2014 02:19 < astradev> Could someone help me with debugging network packets in the MC server? I started the 1.6.4 server up in offline mode, started it with: 02:19 < astradev> "java -Dlog4j.configurationFile=/home/box/Desktop/dbmc/config.xml -jar server164.jar nogui" 02:20 < astradev> And the contents of said config.xml are exactly as what's on wiki.vg 02:21 < NickG365> IIRC, that won't work prior to 1.7, since that's when log4j (and that parameter for a config file) was introduced. 02:22 < dx> astradev: what NickG365 said, use a proxy like https://github.com/sadimusi/mc4p or https://github.com/SirCmpwn/SMProxy 02:23 < astradev> Ooohhh. Well now I feel quite silly. 02:24 < astradev> Thanks. 02:30 <+SirCmpwn> if you plan on using SMProxy 02:30 <+SirCmpwn> you might want to update it first :P 02:31 < astradev> I just decided to stick to 1.7 for now, haha. 02:31 < astradev> when I get around to 1.6.4, I'll have to, though. 03:01 < dx> SirCmpwn: not if it's going to be used with 1.6.4 03:02 <+SirCmpwn> oh, alright 03:02 <+SirCmpwn> yeah 03:08 < astradev> Do the logs not give the information for packets like Use Entity? 03:10 < astradev> [20:57:59] [Netty Client IO #1/DEBUG]: OUT: [PLAY:2] ja[] 03:10 < astradev> This is supposedly the "Entity Use" packet, but it doesn't return any data I can see. 03:35 <+Amaranth> Grum, Dinnerbone: How exactly do you expect to reduce the load on your web services when every call to /op, /deop, /whitelist, /ban, and (maybe) /pardon seems to require a network request to fully populate a GameProfile object just to use as an appropriate key in a HashMap? 03:36 <+Amaranth> Because those things are stored in HashMaps where the key is GameProfile.toString() and that toString() method includes the name, uuid, and properties 06:08 < mbaxter> Thinkofdeath: Much appreciated. I mean, it's not like non-CB mods claiming to be CB caused a minor smear campaign against me or anything... 06:57 < Grum> Amaranth: different webservice, that one is not taking any load at all 06:58 < Grum> Amaranth: of all the things that could have exploded, that is one that isn't atm :P 06:59 <+Amaranth> Grum: It's sad though, I have a UUID and I have to do a web request to get a worthless name and skin blob 07:00 < Grum> yeah that frankly makes no sense 07:00 <+Amaranth> Or write my own replacement for the reader/writer 07:00 < Grum> i dont see how any of the other information matters for those purposes 07:00 <+Amaranth> Perhaps it shouldn't use toString() :P 07:01 < Grum> please don't make me sad again before the workday starts 07:01 <+Amaranth> haha 07:01 < Grum> have had enough rage this week 07:01 < Grum> someone decided to do skull-lookups on the main thread 07:01 <+Amaranth> :D 07:01 < Grum> A R E Y O U F U C K I N G K I D D I N G M E 07:02 <+Amaranth> But it's just that one time, right? 07:02 < Grum> yes, for every skull..... 07:02 <+Amaranth> After that it stores the result in the skull forever? 07:02 < Grum> so load a chunk with 10000 skulls and everyone disconnects 07:03 < Grum> the original idea was: have it async with callback; send the data to the client as a 'steve skin' (so no skin) -- then when you have the data, simply update the client and bake it into the level 07:03 < Grum> but noooôôöòóœ 07:03 <+Amaranth> This is bad but it's just a one off 07:03 < Grum> yeah .... lets just say that i gave up on that note 07:03 < Grum> and its not a one-off 07:03 < Grum> its a 'foreverhappeningthisway' 07:03 <+Amaranth> I've got an OfflinePlayer interface that used to be based on names that I have to convert to UUID except I can't do anything with UUIDs either for some weird reason 07:04 <+Amaranth> :D 07:04 <+Amaranth> I already accepted skulls and moved on to something more tragic :D 07:04 < Grum> things would have been easier if someone hadn't decided that names were a good unique trait 07:05 < Grum> pff please relay all the tragic 07:05 < Grum> i'll go scream at some people today =) 07:07 <+Amaranth> Well that and the kick after 23h59m is all I've found so far 07:08 <+Amaranth> But I stopped there and decided to let someone else deal with it while I complained to everyone that could understand the explanation :P 07:09 < Grum> yeah ... meh 07:09 < Grum> in theory the 'kick' is not needed in the end 07:10 < Grum> right now, people would blame 1.7.7 as broken and not use it 07:11 < Grum> and obviously people werent listening when i said to remove 1.7.6 >.> 07:12 < Grum> we'll see 07:12 < Grum> its a bit annoying right now 07:12 < Grum> if we're showing tons of steves we might need to somehow make the client aware of the 'correct time' 07:17 < Grum> Amaranth: where is it doing this tostring? 07:17 <+Amaranth> Was going to say the expiry could be ticks since for some reason the server tells the client that but that ruins the signing part 07:17 <+Amaranth> Uh, we call it JsonList 07:18 <+Amaranth> It's got a HashMap and to get the key it does Object.toString() using a method that grabs the GameProfile from the entry object 07:18 <+Amaranth> Let me get the obfuscated class name 07:18 < Grum> meh impossible to find 07:19 <+Amaranth> Well, you could just see what the parent class of the thing in PlayerList holding the whitelist is 07:19 <+Amaranth> Looks like the obfuscated class name in 1.7.7 is ol 07:20 < Grum> ah found i think 07:20 <+Amaranth> "Could not save the list after removing a user." 07:20 <+Amaranth> A string in the file 07:21 < Grum> protected String getKeyForUser(K user) { 07:21 < Grum> return user.toString(); 07:21 < Grum> } 07:21 < Grum> w...h...y 07:21 < Grum> so confused; 07:21 < Grum> public class StoredUserList> { 07:21 < Grum> and then internally; private final Map map = Maps.newHashMap(); 07:23 <+Amaranth> Yeah, we don't have the generics so it looked like someone was trying to make a list of things with an efficient index that wasn't the object the list is storing 07:23 <+Amaranth> And I can't explain that in a way that doesn't sound like a map 07:23 <+Amaranth> I blame mbaxter 07:23 < Grum> multiple things seem to be tostringged in there 07:24 <+Amaranth> Anyway, I think my solution is going to be to make GameProfile's toString only include the UUID and pray nothing falls over :P 07:24 < Grum> just the stringified uuid through the banlist and opslist ... and whitelist 07:24 < Grum> so why not make it uuid? :/ 07:26 <+Amaranth> This skin stuff is a tough problem 07:26 <+Amaranth> Now that you've pointed out the possibility of holding skins hostage if you make it possible in any way people are going to do it 07:26 < Grum> those two are not connected 07:27 <+Amaranth> Oh I was just reading bug mail 07:27 < Grum> i mean, people would do this if we wouldn't do these changes 07:27 <+Amaranth> If you get rid of the expiry all people need to do is have someone login once and they can impersonate them forever 07:28 <+Amaranth> If you make it just fall back to a steve skin a server could use a stale skin blob on purpose until the user pays to get their skin on that server 07:28 <+Amaranth> I don't know that any of them would have done that before but after you pointed out it was possible people have the idea now :P 07:28 < Grum> which is why we're never going to remove expiry time 07:29 <+Amaranth> I could totally see them doing "$10 to look like dinnerbone" or something though 07:29 < Grum> which wont work; name wont match etc 07:29 <+Amaranth> Right, I'm saying if you didn't lock it down 07:29 < Grum> which is why we locked it down in the first place 07:29 < Grum> there is 'risk' in having servers distribute this data 07:30 <+Amaranth> I wish Riking would use the preview button and stop spamming edits to his comment on that bug 07:31 < Grum> those mails are going straight to devnull>.> 07:32 <+Amaranth> You could just not spawn the player but then someone would abuse that to be invisible in PVP or something 07:33 <+Amaranth> I think you're going to have to just fall back to Steve and not disconnect. And just mention brand guidelines to anyone who screws with it :D 07:37 <+AndrewPH> hey hi, important question here, how much deditated wam do i need for my minecraft suvruwr 07:37 <+SirCmpwn> 3 07:38 < Grum> if i could ban you i would have 07:38 < Grum> sad moment 07:38 <+AndrewPH> okay great thnksdf 07:38 <+Amaranth> Can I? No, I don't think so 07:38 <+Amaranth> -ChanServ- You are not authorized to perform this operation. :D 07:39 <+AndrewPH> so hi hey how's it going guys 07:39 < Grum> quite sure that kid has bigger balls than 75% of the internet 07:39 <+AndrewPH> probably 07:39 <+AndrewPH> he had the courage to ask so yeah 07:40 <+AndrewPH> my girlfriend slaps me when I make fun of people in those awkward minecon videos 07:40 <+SirCmpwn> I feel like I missed something 07:40 <+Amaranth> Random topic change 07:40 <+AndrewPH> SirCmpwn: my question was asked by a guy at minecon 07:40 <+SirCmpwn> asked of whom? 07:40 < SinZ> Not as good as the autism question 07:40 <+AndrewPH> I don't know any minecraft or bukkit or anything devs by face 07:40 <+AndrewPH> SinZ: THAT kid has balls. 07:40 <+AndrewPH> he's going places 07:40 <+AndrewPH> maybe to timeout 07:41 <+Amaranth> We went using Object.toString() as a key to skull profile data getting loaded from the interwebs on the main thread to the client blaming Spigot for every mod/plugin that screws up skins in 1.7.7 :D 07:41 <+Amaranth> Oh, and then to dedicated ram 07:41 <+AndrewPH> deditated wam* 07:41 <+SirCmpwn> I feel like the mojang/bukkit guys are qualified to answer that question 07:42 < SinZ> without info like player count, its hard to say 07:42 < SinZ> and how much they want to explore in different directions and have 500 chickens in the space of one block 07:42 <+Amaranth> Let's just say 100MB/player and call it good 07:42 <+SirCmpwn> I would have made an educated guess that he hosts 1-30 players 07:43 <+SirCmpwn> wait, 100MB/player 07:43 <+SirCmpwn> jesus, is vanilla/bukkit still that bad? 07:43 <+AndrewPH> I'd say 200MB + (50MB*players) 07:44 <+SirCmpwn> I'm surprised MB is even involved 07:44 <+Amaranth> With zero overhead just the raw block data for a single player at the default view distance can be up to 83MB 07:44 <+SirCmpwn> C.N needs a handful of kilobytes per player on a bad day 07:44 <+Amaranth> Because you don't actually have any chunks 07:44 <+SirCmpwn> ? 07:44 <+AndrewPH> SirCmpwn: this is accounting for all the blocks, not just the player 07:44 < Eviltechie> guise, y don't u rewrit server in c++ 07:44 < Grum> SirCmpwn: its not like some pissy counterstriek game 07:45 < Grum> you HAVE to have the world in memory to simulate it 07:45 <+AndrewPH> countershrek 07:45 <+SirCmpwn> well, presumably most players on a homey server play near each other 07:45 < Grum> and its just a fucktone of data 07:45 < Grum> yes, and 17x17chunks is how much data? 07:45 <+SirCmpwn> 3 07:45 <+Amaranth> 21*21 actually 07:45 < Grum> yeah, just downcasting it a bit 07:45 <+Amaranth> default view distance is 10 so (10+1+10)^2 07:46 < Grum> 441 chunks, at 16 sections at 4096 blocks, is how much? 07:46 < Grum> 28901376 ... 07:46 <+Amaranth> 83MB, like I said :P 07:46 < Grum> at ~3.5bits/block is .... 07:46 < Grum> indeed 07:46 <+SirCmpwn> you keep all of the sections in memory? 07:46 < Grum> right now, no choice 07:46 <+Amaranth> This is worst case 07:46 < Grum> worstcase per player yeah 07:46 <+Amaranth> In reality without mods you're only going to use 2.5 bytes per block, not 3 bytes 07:46 < Grum> and yes, do you want to have the added latency of having to load this of disk on the main thread somewhere? 07:47 <+Amaranth> And most chunks aren't built up to 256, probably more like 96 on average 07:47 <+SirCmpwn> latency doesn't really factor into memory needs, Grum 07:47 < Grum> io-locking your system while having to wait for it blocking does >.> 07:47 <+Amaranth> Which is more like 26MB 07:47 <+Amaranth> But that's a perhaps somewhat optimistic average case 07:47 <+SirCmpwn> spawned a vanilla world, highest point nearby is Y=72 07:48 < Grum> we can greatly improve the memory footprint *IF* we get rid of random ticking 07:48 <+SirCmpwn> you only need a quarter of the sections loaded 07:48 < Grum> the 'pure air ones' are a special kind that take less memory atm 07:48 < Grum> but we can do better than that 07:48 < Grum> but ... we need to kill the random ticking 07:48 <+SirCmpwn> I will admit that C.N loads all 16 as soon as you put a block in the top section 07:48 <+Amaranth> But if someone builds a single block at y=256 all the sections below it are suddenly real things using 16*16*16*2.5 bytes each 07:48 <+Amaranth> To store air :P 07:49 < umby24> Nice sidenote to the conversation, should cut down on the constant movement updates every tick, just my opinion though. 07:49 < Grum> yeah ... for now >.> 07:49 < Grum> umby24: you are not being specific enough 07:49 <+SirCmpwn> wow, I haven't played vanilla in a while 07:49 < Grum> i assume you mean: 'sent from the client' ? 07:49 <+SirCmpwn> there are fancy flowers everywhere 07:49 < umby24> yes 07:49 < SinZ> umby24: yup, because having the client / server spam the crap out of movement packets is very helpful 07:49 < Grum> the client shouldn't send anything unless the client has input 07:49 < Grum> but yeah, someone didn't quite design this shit 07:49 < Grum> we all know that, dead horse, beat and rape it a bit more! 07:50 < SinZ> wasn't the 1.7 butthurt update supposed to fix this stuff 07:50 < Grum> no? 07:50 < Grum> we cannot touch this for a while 07:50 <+Amaranth> The networking protocol is just enough serialization to split the client in half and call half of it a server :P 07:50 < Grum> even now 07:50 <+SirCmpwn> "fix stuff" has been scheduled and delayed for quite some time 07:50 < Grum> not delayed at all 07:50 < Grum> just not at the top of the todo list 07:50 <+SirCmpwn> that's an odd todo list you've got 07:50 < Grum> because of this giant layer of yaks ontop of it 07:50 < Grum> not by our 'design' 07:50 < Grum> we get rather limited by which cruft sits in our way 07:51 <+SirCmpwn> I met some yaks IRL once 07:51 <+SirCmpwn> they were nice 07:51 < Grum> they are 07:51 < Grum> also very hairy 07:51 <+SirCmpwn> I don't know if hair is the right word for... that 07:51 <+Amaranth> Networking comes later is what he means, they're working on rewriting the inventory and rewriting the internal representation of blocks and rewriting the renderer (more refactoring really) to be data driven 07:52 <+SirCmpwn> didn't they already try to fix networking 07:52 <+SirCmpwn> a couple versions ago 07:52 < umby24> cough 1.7 07:52 < SinZ> wasn't the 1.7 butthurt update supposed to fix this stuff 07:52 <+SirCmpwn> I spent weeks cleaning up that mess 07:52 < umby24> ^ 07:52 <+Amaranth> That was the first indication of just how deep the rabbit hole goes in the weird assumptions the client and server make about movement packets 07:52 < Grum> inventory is on a hold atm 07:52 < Grum> having some design issues >.> 07:52 < Grum> no idea how to fix yet 07:52 < SinZ> having made client bots, movement packets are the spammiest of all spam 07:52 <+SirCmpwn> I'm glad we have a stronger variety of flowers now, though 07:53 < Eviltechie> SirCmpwn: opium poppies? 07:53 < Grum> SirCmpwn: again? you do realize that jens adds shit like that? 07:53 <+Amaranth> Gotta put features out there. For one people demand them and for two working on boring yak shaving all day is a good way to burnout 07:53 < Grum> all the 'features' have been added by people basically in their spare time .. OR by being jens 07:53 <+SirCmpwn> I don't know the politics of mojang, I just deal with their decisions 07:53 < dexter0> And I bet it took all but a few hours. 07:53 < Grum> indeed dexter0 07:53 <+SirCmpwn> oh, hi Grum 07:53 <+SirCmpwn> just realized who I was talking to 07:54 < Grum> good 07:54 <+SirCmpwn> 1.7 made me sad 07:54 < Grum> just list all the 'gameplay' features i added 07:54 < umby24> just hire SirCmpwn to be your program designer 07:54 < Eviltechie> do we count bugs as features? 07:54 <+SirCmpwn> please don't 1.7 again 07:54 * Eviltechie ducks 07:54 < Grum> Eviltechie: sometimes :( 07:54 < Grum> SirCmpwn: in which way? be more specific 07:55 <+SirCmpwn> well 07:55 <+SirCmpwn> hmm 07:55 <+SirCmpwn> not sure where to start 07:55 <+SirCmpwn> how about the fact that the same packet can have different IDs and structures depending on which way it's going 07:55 < Grum> why would that be the same? lol 07:55 < Grum> it was retarded it was the same 07:55 <+SirCmpwn> what? 07:56 <+Amaranth> The ids are an implementation detail of their codebase at this point 07:56 < Grum> it was retarded that packets were reused and then mangled data into fields 'just to reuse it' 07:56 < Grum> i mean, look at the login packet before ... 07:56 < Grum> seriously overloaded to fuck 07:56 < Eviltechie> I design databases like that. I am not a clever man. 07:56 <+Amaranth> Although I'd feel better saying that if they weren't explicitly numbered in the code :P 07:56 < Grum> same 07:57 < Grum> i can remove that in 30 seconds 07:57 < Grum> we just didn't ... yet 07:57 < Grum> as it served no benefit right now 07:57 <+Amaranth> Could have sworn it was just a counter that incremented as you registered them 07:57 < Grum> nah not yet :) 07:57 < Grum> should be, decided not to right now 07:58 <+SirCmpwn> how about using VarInts in places where it doesn't make any sense, especially given that they take more resources to read/write 07:58 <+SirCmpwn> that irked me a bit too 07:58 < Grum> like where? 07:58 <+SirCmpwn> or the whole JSON chat nonsense 07:58 <+SirCmpwn> packet IDs, for one 07:58 <+SirCmpwn> or even packet length 07:58 < Grum> so what should packetids be? 07:58 < Grum> or the length? 07:58 <+Amaranth> 255 packet ids ought to be enough for anyone 07:58 <+SirCmpwn> both should be a uint16_t, imo 07:59 < Grum> ah, so even shorter packets? 07:59 <+SirCmpwn> or a uint8_t for packet IDs, Amaranth is right 07:59 <+Amaranth> The plugin channel packet in 1.7.7 can be bigger than that already 07:59 < Grum> you do realize its a singluar fucking bit-check you call 'overhead' favorable to wasting a byte extra on the protocol 07:59 <+Amaranth> And I was being sarcastic, that's a rip off of a famous old saying 07:59 < Grum> for EVERY PACKET 08:00 <+SirCmpwn> wow, a byte 08:00 * SirCmpwn whistles 08:00 <+SirCmpwn> it just adds complexity that doesn't need to be there imo 08:00 < Grum> also, right now we can grow to ... whatever the fuck complexity we want 08:00 < Grum> you need varint reading anyway 08:00 < Grum> doesn't matter where we use it then 08:00 <+Amaranth> On the other hand you save a byte there and include an extra kilobyte in the spawn player packet. Although if you brought back the byte too people would complain even more 08:00 <+SirCmpwn> haha, I just found this in my 1.7 networking implementation 08:01 <+SirCmpwn> private static readonly Type[][][] NetworkModes; 08:01 < umby24> hmm lets consult my comments real quick 08:01 < Grum> SirCmpwn: not something fromm our source 08:01 <+SirCmpwn> not saying it's your fault 08:01 <+SirCmpwn> but it is amusing 08:01 <+SirCmpwn> I am glad you finally figured out how to do pings 08:02 < Grum> you mean reply with the smallest packet possible? 08:02 < Grum> and then re-consult for the actual information? 08:02 <+SirCmpwn> no, I mean using JSON so you don't paint yourself into a corner 08:02 <+SirCmpwn> five times 08:02 < Grum> lol 08:02 < Grum> L O L 08:02 < Grum> so THERE we should use json 08:02 < Grum> but for chat we cannot? 08:02 <+SirCmpwn> well, I personally wouldn't have used JSON 08:02 <+SirCmpwn> but it serves your needs fine in that case 08:02 < Grum> you do realize that you can infinitely nest translatable statements using chat right? 08:03 < Grum> embed styles/colors/whatever? 08:03 <+SirCmpwn> the JSON chat is a horrific bastardization of JSON that is absolutely ridiculous 08:03 < Grum> and that we actually use that 08:03 < Grum> and that there is no fucking nice way of doing that beyond making your own parser for a custom thing? 08:03 <+SirCmpwn> man 3 printf 08:03 < Grum> if i could ban, i would. 08:03 < Grum> seriously retarded answer SirCmpwn 08:03 <+SirCmpwn> you asked me to tell you my complaints about 1.7 08:04 <+Amaranth> You could do an HTML-like syntax but you'd just be parsing it into something that looks like your JSON 08:04 < Grum> Amaranth: indeed 08:04 <+SirCmpwn> and that wasn't entirely serious, as I'm sure you could have guessed 08:04 < Grum> which is why we opted for json right now 08:04 < Grum> we had it lying around, we can control it *very* well 08:04 <+Amaranth> Whether or not your chat should be a JSON representation of an AST is another thing but whatever, it works 08:04 < Grum> and its not too expensive size-wise 08:04 <+SirCmpwn> I could probably have been convinced that BSON wasn't a terrible choice 08:04 <+SirCmpwn> why JSON? 08:04 <+Amaranth> Now, for consistency, get rid of NBT :P 08:05 < Grum> because we already have a json dependency? 08:05 <+Amaranth> Are you fucking serious? BSON is a joke 08:05 < Grum> msgpack is one i am considering 08:05 <+Amaranth> BSON is totally Web Scale(tm) so you should definitely use it 08:05 < Grum> and bson is poop 08:05 < Eviltechie> I vote we switch to RS-232. 08:05 <+SirCmpwn> BSON isn't great, but it isn't bad 08:05 < Grum> you can say the same for NBT 08:05 <+SirCmpwn> I probably would have just reused NBT since it was already stuffed into it 08:05 < Grum> but i'll try and murder you in your sleep 08:05 <+Amaranth> BSON is a binary format that uses _more space_ than JSON's textual format 08:05 < Grum> NBT SUCKS 08:05 < Grum> it has the most fucked up API (none) ever 08:06 <+Amaranth> BSON is in fact kind of similar to NBT :P 08:06 < dx> HEY EVERYONE. LET'S NOT TALK ABOUT THIS. THANKS 08:06 <+SirCmpwn> well, sure, but you're already stuck with it 08:06 <+SirCmpwn> unless you want to make a new level format again 08:06 < Grum> i want to 08:06 <+Amaranth> msgpack is cool but in practice it seems gzip'ed json is about the same size 08:06 < Grum> ideally i'd put the levels into a leveldb 08:07 <+SirCmpwn> Amaranth: but Mojang doesn't gzip json :/ 08:07 < Grum> (yes that thing by google) 08:07 < Grum> SirCmpwn: we don't have to? 08:07 <+Amaranth> And then there is always protobuf if you don't need to ship the schema with the data 08:07 < Grum> yeah we looked at protobuf for 1.7 but it was 'too soon' 08:07 <+SirCmpwn> Grum: please don't assume that every time I speak I'm expressing criticism for minecraft 08:07 <+SirCmpwn> I was just responding to Amaranth 08:08 <+Amaranth> I was talking about a replacement for NBT, not for JSON chat 08:08 <+Amaranth> They gzip NBT 08:08 <+SirCmpwn> can we work MathML into minecraft somehow 08:08 < Grum> MathML? :) 08:09 <+SirCmpwn> http://aiju.de/rant/XML/MathML 08:10 < umby24> lolz 08:10 < Grum> i found my new format 08:10 <+SirCmpwn> what have I done 08:10 < umby24> now if we can save levels in that format, uncompressed naturally... 08:10 <+Amaranth> I'm not sure I get the point of leveldb. It's just an on disk sorted KV store? 08:10 < Grum> we'll story it pretty-printed in UTF32 08:10 <+SirCmpwn> I don't like client-side physics 08:11 <+Amaranth> I mean, if you're needing something like that may as well use theirs but it doesn't seem all that impressive of a feat of engineering 08:11 < Grum> Amaranth: singular file, highly incorruptable, fast 08:11 <+SirCmpwn> so clearly we should have the server send the physics calculations to the client via MathML to make sure there's no lapse in communication 08:11 <+Amaranth> Oh does it actually do things for data integrity? I thought it was just a dumb store with on the fly compression 08:11 < Grum> it has 'transactions' iirc 08:12 < Grum> so it has fallback states iirc 08:12 <+Amaranth> Oh, bummer, it's in the wrong language for you though :P 08:12 <+SirCmpwn> does anyone remember why minecraft encryption isn't just TLS 08:13 <+Amaranth> Yep 08:13 < Grum> heartbleed SirCmpwn 08:13 <+SirCmpwn> I was thinking about that the other day when reading about heartbleed 08:13 <+Amaranth> That's not why 08:13 <+SirCmpwn> Grum: that's not why 08:13 < Grum> obviously not :) 08:13 < Grum> because TLS would be too simple! don't be silly now 08:13 <+Amaranth> it's because the auth service provides a trusted partner for key exchange so you get to ensure clients are premium at the same time you share a secret with them 08:13 <+SirCmpwn> oh, "the other day" was earlier today 08:13 <+SirCmpwn> https://github.com/SirCmpwn/Craft.Net/issues/210 08:14 < Grum> we have a custom-enough security scheme its hard to write up with TLS 08:14 < Grum> we could use it to START a TLS connection, but meh 08:15 <+Amaranth> Plus with TLS you'd need self signed certs and cert pinning like SSH (which users would ignore) or you'd need servers to pay a CA in order to run a server in online mode 08:15 <+SirCmpwn> or you could establish Mojang as a trusted CA for Minecraft alone 08:15 < Grum> oh and TLS is a pain in the ass to understand in general :P 08:15 <+SirCmpwn> I'd do the self signed route, though 08:15 <+SirCmpwn> the reason I wondered about it is because roll-your-own crypto is nearly always a bad idea 08:15 < Grum> though we're basically doing the same under the hood now >.> 08:16 < Grum> we dont actually care to have strong encryption 08:16 <+Amaranth> That reminds me, I would have thought the protocol break with 1.7.6/1.7.7 would have been a perfect time to slip in the protocol break planned for 1.7.4 08:16 < Grum> just strong enough to get rid of MITM 08:16 < Grum> which one Amaranth? 08:16 < Grum> i did add the custom packet thingie 08:16 <+SirCmpwn> well, in 20 years, Minecraft will be unsupported and TLS will be supported 08:16 < Grum> i must have forgotten something >.> 08:16 <+Amaranth> A security one I'm only vaguely familiar with 08:17 < Grum> SirCmpwn: errr there is very little to support 08:17 <+SirCmpwn> the implication being that Minecraft crypto will be broken and TLS will not be 08:17 <+Amaranth> Grum: That reminds me, what's with the counter while reading NBT data? 08:18 <+Amaranth> The only thing I can think of that could help with is too late to be useful, I think 08:18 < Grum> Amaranth: haha you don't want to know, really :( 08:18 < Grum> IntArray[maxsize] .... 08:18 <+Amaranth> Right 08:18 <+SirCmpwn> hey Grum, if you ever do redesign worlds, please don't do DIM-1 again 08:18 <+Amaranth> I just used a pokemon exception handler for that one :P 08:18 <+Amaranth> gotta catch em all! 08:20 < Grum> there is little you can do when you run out of memory right there and then 08:20 <+Amaranth> SirCmpwn: The Bukkit design for multiworld predates vanilla minecraft's design and uses named worlds, each with their own level.dat 08:20 < Grum> we will NEVER EVER have DIM + [-1,0,1] again >.> 08:20 <+Amaranth> Grum: You don't actually run out of memory though, it just hits an OOM-like exception trying to allocate too much at once 08:20 <+SirCmpwn> the C.N design uses one level.dat and named worlds with directories full of regions 08:21 < Grum> CN? 08:21 <+SirCmpwn> Craft.Net 08:21 <+SirCmpwn> third party server/client/etc 08:21 <+Amaranth> SirCmpwn: So you can't have a superflat world on the same server as a normal one? 08:21 <+SirCmpwn> Amaranth: yeah, I want to change that 08:21 <+SirCmpwn> you caaaaaan 08:21 <+SirCmpwn> but it's weird 08:21 <+Amaranth> Need a per-world level.dat to do it "right" 08:21 <+SirCmpwn> I'm trying to keep compatability with vanilla worlds 08:21 <+SirCmpwn> which makes it more difficult 08:22 < Grum> there are actually some other 'design' issues 08:22 <+Amaranth> And then you need to learn the trick that is sending two world change packets to clear the client's cache or whatever of what kind of world they are in 08:22 < Grum> for example, someone starts a game in 'offlinemode' 08:22 <+Amaranth> Otherwise going from normal to superflat doesn't get rid of the void fog 08:22 < Grum> now he gets a wolf-pet; how he sends this world to someone else ... 08:22 < Grum> what happens with the pet? :P 08:22 < Grum> who owns it? 08:22 < Eviltechie> oh, so that's how those plugins change sky colors... 08:22 <+SirCmpwn> Amaranth: thanks for that tip, someone else was asking me to make multiworld work in C.N 08:22 <+Amaranth> Sky colors are based on biome 08:23 < Grum> the whole 'worldchange'-packet crap .. brrrrrrrrrrrrrrrrrrrr 08:23 <+SirCmpwn> what's this "worldchange" packet 08:23 <+SirCmpwn> there's probably some inconsistency between whatever you guys name it and whatever wiki.vg names it 08:24 <+SirCmpwn> http://wiki.vg/Protocol#Respawn 08:24 < Grum> no idea what it is called with us 08:24 <+SirCmpwn> a situation that is made worse by the 1.7 packet ID murder 08:24 <+Amaranth> The respawn packet 08:24 < umby24> (speaking of the above respawn packet, with only 3 possible values for Dimension, why is it an int? xd) 08:25 <+Amaranth> Sending the extra fake trip to the nether also fixes stuff like "Avoid changing player's dimension to same dimension they were already in, weird bugs can occur i.e. such player will be unable to attack other players in new world (fixes after their death and respawn)" 08:25 <+SirCmpwn> there are lots of similar problems with the protocol, umby24, I doubt they'll all be fixed soon 08:25 <+Amaranth> Just make them all varint, problem solved 08:25 <+SirCmpwn> they're too busy cramming UUIDs in 08:26 < umby24> lmao ok.. 08:26 < umby24> occationally while working with the packets I'll hit one like that and go "wait.. wtf?" 08:26 <+Amaranth> UUIDs are actually important infrastructure work, even if they are a PITA 08:26 <+SirCmpwn> I am quite amused that they adopted varints to save a byte per packet, and swapped out entity IDs for UUIDs 08:26 <+SirCmpwn> UUIDs are fine, but sent as a string? 08:27 <+Amaranth> umby24: It's an int because notch assigned it to an int while writing single player :P 08:27 <+Amaranth> entity IDs are not swapped for UUIDs 08:27 <+Amaranth> Although that'd be nice 08:27 < umby24> Thanks, notch. :P 08:27 <+SirCmpwn> I thought they were working on that, maybe I was wrong 08:28 <+Amaranth> If they were UUIDs instead using a proxy to switch between worlds would be simpler because you wouldn't have to rewrite the entity ID 08:28 <+SirCmpwn> C.N does not allow the same entity ID to exist in two worlds 08:28 <+SpaceManiac> mm, backlogs 08:29 <+Amaranth> The worlds in this case are actually separate servers, thus the proxy 08:29 <+SirCmpwn> oh, right 08:29 <+SirCmpwn> I suppose that's true 08:29 <+SirCmpwn> but Mojang isn't really giving much thought to that use-case, I'd imagine 08:30 <+Amaranth> Anyway, back around to the original topic, StoredUserList makes me super sad and actually made me stop working on updating CraftBukkit 08:30 <+SirCmpwn> what's StoredUserList? 08:30 <+SpaceManiac> I guess I need to update Glowstone... I got hung up trying to fix NBT being really stupid and gave up 08:30 <+SpaceManiac> The thing used for bans/whitelists, I'm guessing 08:31 <+SirCmpwn> details? 08:31 <+Amaranth> SirCmpwn: In 1.7.7 bans, whitelist, and op are stored in json by UUID, that's the class that loads them 08:31 <+SirCmpwn> that doesn't sound like a bad thing to me 08:31 <+SirCmpwn> what do you dislike about it? 08:31 <+Amaranth> But it uses GameProfile.toString() as a key and the toString() includes a UUID, name, skin blob, and "legacy" field 08:31 <+SirCmpwn> :| 08:32 <+Amaranth> So I have a UUID and I still need to do a network request to get useless extra information just so toString() will match 08:32 <+Amaranth> Or I can just iterate all the entries and hope no one has a big ban list 08:32 <+SirCmpwn> there is an awful lot of "it's a decent idea but the execution is junk" in minecraft lately 08:32 < Grum> Amaranth: its not actually right 08:33 < Grum> it stores a srting 08:33 <+Amaranth> SirCmpwn: At least we're up to decent ideas? ;) 08:33 < Grum> but i dont see any code that goes and fetch all the information 08:33 <+SirCmpwn> Amaranth: haha, I guess so 08:33 <+Amaranth> Grum: Right, even worse, there is a chance these are being loaded with an incomplete GameProfile which means I have the opposite problem, they don't actually work for an online player without making an extra GameProfile with _less_ information 08:34 <+Amaranth> That's a better problem to have though but I think they all include a name which is the killer 08:34 < Grum> i am missing where you are having problems 08:34 < Grum> gameprofiles have an optional name 08:34 < Grum> it has to have either a name OR a uuid .. or both 08:34 < Grum> iirc if it only has a name it'll look up the uuid somewhere 08:35 <+Amaranth> I have a UUID, I have a StoredUserList, I would like see if this UUID is in there without doing a network request or iterating all the entries 08:35 <+Amaranth> As far as I can tell the solution is to toss StoredUserList and parse the files myself 08:35 < Grum> i am not sure where StoredUserList is used directly 08:35 < Grum> maybe it should just be abstract >.> 08:36 <+Amaranth> It's all subclasses but they all chain through to the GameProfile.toString() for a key 08:37 <+Amaranth> I guess I could just make it not use toString but then I need to patch GameProfile still to have a special equals that violates the java spec :P 08:37 < Grum> no they dont 08:37 < Grum> protected String getKeyForUser(K user) { return user.toString() } 08:37 < Grum> but its overriden in all subclasses 08:37 <+Amaranth> Yeah they call WhiteListUserEntry.whatever() which returns an Object they call toString() on and that Object is a GameProfile 08:38 < Grum> where does it do that? :/ 08:39 < Grum> only two methods in the entry and they are serialize/deserialize 08:39 < Grum> https://gist.github.com/grum/46e045280503139b77e1 08:39 < Grum> i dont like the fact that this class looks like this 08:40 < Grum> serialization/deserialization should be handled through json and a registration of a serialization class .... not being done by this 'container class' 08:40 <+Amaranth> Sorry the method is actually on the parent class 08:40 <+Amaranth> It returns an Object 08:40 < Grum> 'it'? 08:40 < Grum> the parent of that class has 1 method 08:40 < Grum> T getUser() { 08:40 < Grum> return user; 08:40 < Grum> } 08:41 <+Amaranth> I've got 5 08:41 < Grum> https://gist.github.com/grum/95e8c8a62a63c7b68d04 08:41 < Grum> yes, and two are constructors, 1 is void and 1 is boolean 08:41 < Grum> so 1 method ;) 08:41 <+Amaranth> It stores an Object field, has two constructors, a getter for the Object, and some other crap 08:42 < Grum> i do not understand why on earth the secondary constructor exists OR even gets called 08:42 < Grum> because nothing overwrites it 08:42 <+Amaranth> Right so T is GameProfile and in the end it all ends up with Object.toString() for a key 08:42 < Grum> so ... JsonObject just gets thrown away 08:42 < Grum> where does it do a Object.toString()? 08:43 <+Amaranth> Back in StoredUserList the add method 08:43 <+Amaranth> I've got this.d.put(a(paramJsonListEntry.f()), paramJsonListEntry); where f is the getUser() and a() is the method that returns Object.toString() 08:43 < Grum> map.put(getKeyForUser(infos.getUser()), infos); 08:43 < Grum> no 08:43 < Grum> a is overloaded 08:44 < Grum> StoredUserList should have had 'a' as abstract 08:44 < Grum> the real problem is that this code is 'too generic' ... whcih makes it act like bullshit 08:44 <+Amaranth> My whitelist class doesn't have it overloaded 08:44 <+Amaranth> I've got a String b(GameProfile) that returns profile.getId().toString() but that's not overloading 08:45 < Grum> here it does; 08:45 <+Amaranth> Don't tell me this is some decompiler error 08:45 < Grum> @Override 08:45 < Grum> protected String getKeyForUser(GameProfile user) { 08:45 < Grum> return user.getId().toString(); 08:45 < Grum> } 08:45 < Grum> the whole thing is, EVERY usecase of this object uses 'GameProfile' for 'K' 08:45 < Grum> which makes it super fucking pointless to even have K 08:46 <+Amaranth> Right well I didn't need that mouse 08:46 <+Amaranth> Good thing I still have a trackpad 08:46 < Grum> haha what happened? it learned to fly? 08:46 <+Amaranth> Sure did 08:46 < Grum> wired? :D 08:46 < Grum> wireless mouses fly so far ;( 08:46 <+Amaranth> Nah, bluetooth 08:46 < Grum> could be that we have fucked up obfuscation here btw 08:47 <+Amaranth> Wouldn't that mean this really is broken, not just broken for me trying to mod it? 08:47 < Grum> oh, ipbanlist is by string 08:47 < Grum> i guess ... K is not always gameProfile :/ 08:48 < Grum> i have no idea Amaranth 08:48 <+Amaranth> My GameProfileBanList also has String b(GameProfile) that return profile.getId().toString() 08:48 < Grum> ok now it is getting scary 08:48 <+Amaranth> Crap I don't want to learn to read bytecode, let me find Wolvereness 08:49 < Grum> should be 'easy' 08:49 < Grum> hmmz 08:49 < Grum> which class in the jar? 08:49 < Grum> ah, ol 08:50 < Grum> https://gist.github.com/grum/14ad23e5b8ae48bd9df7 Amaranth 08:51 < Grum> line 61? 08:52 < Grum> is it doing the 'wrong fucking thing'? :/ 08:52 <+Amaranth> No idea 08:53 < Grum> it calls 128 08:53 < Grum> which looks like the right method 08:54 <+Amaranth> Grum: Look at oq 08:54 <+Amaranth> That's the whitelist one 08:54 < Grum> yeah it seems ok for oi 08:54 < Grum> protected java.lang.String a(java.lang.Object); 08:54 < Grum> Code: 08:54 < Grum> 0: aload_0 08:54 < Grum> 1: aload_1 08:54 < Grum> 2: checkcast #2; //class com/mojang/authlib/GameProfile 08:55 < Grum> 5: invokevirtual #16; //Method b:(Lcom/mojang/authlib/GameProfile;)Ljava/lang/String; 08:55 < Grum> 8: areturn 08:55 < Grum> that is in oq AND oi 08:55 < Grum> so .... it wraps to 'b()' in those classes? 08:55 < Grum> no idea why/how/wtf 08:56 <+Amaranth> It's because the parent takes Object and they take GameProfile? 08:56 < Grum> i guess this is how java handles generics? 08:57 < Grum> by injecting a virtual to make it compatible with 1.3bytecode? >.> 08:57 <+SpaceManiac> Oh, yeah, there's some wacky feature for that 08:58 < Grum> lol without JIT java runs like ....... 08:58 <+Amaranth> God damn it this is a jd-gui error 08:58 <+Amaranth> Our real decompiled version has it just fine 08:58 < Grum> i have to say the javap -c output is really nicely readable :) 08:59 <+Amaranth> I've been trying to figure out how to make this work and chasing a decompiler error in a decompiler I don't even actually use (except for browsing) 08:59 < Grum> you suck Amaranth 08:59 < Grum> and you made me angry! 08:59 < Grum> go write a better decompiler 08:59 < Grum> actually, you can use the frontent on procyon 08:59 <+Amaranth> haha, I still haven't found one better than fernflower 08:59 <+Amaranth> procyon fails to decompile 09:00 < Grum> https://github.com/deathmarine/Luyten 09:00 < Grum> yeah but it will do this one right ;) 09:00 < Grum> fernflower gives the 'most usable code' yeah 09:00 < Grum> procyon the best code wherever it gives code ;) 09:00 <+Amaranth> Grum: Did you by any chance upgrade proguard or something? 09:00 < Grum> not recently 09:01 <+Amaranth> Well recently as in between 1.6 and 1.7 09:01 <+Amaranth> 1.7 on seem to have new tricks that are great at breaking decompilers 09:05 < Grum> nah its just that decompilers do not handle abstract enumes 09:05 < Grum> -e; 09:08 < Grum> so tempting to look at the source hehe 12:41 < dividuum> Dinnerbone, MC-52755 is fixed? How? 14:15 < redstonehelper> hmm, player heads still display their skins in multiplayer without the person ever having been on that server, right? 14:16 < redstonehelper> could that be used to make npc players have their skin again? 14:16 < redstonehelper> or do player skulls no longer go by the player skin directly? 14:17 < Thinkofdeath> The skin blob used by skulls is flagged to prevent it from being used for spawning players 14:18 < redstonehelper> so if I play on a server and place a player head of myself, will my skin have to be sent twice? 14:19 < Thinkofdeath> The skin blob will but the client is smart enough to only download it once 14:19 < Thinkofdeath> the blob only contains the url to the skin 14:19 < Thinkofdeath> + some timing/username info 14:20 < redstonehelper> thanks 19:38 < Not-001> [node-minecraft-protocol] roblabla pushed 5 commits to master [+0/-0/±10] http://git.io/9GPA1Q 19:38 < Not-001> [node-minecraft-protocol] roblabla 0a4b365 - Add opportunistic parsing. 19:38 < Not-001> [node-minecraft-protocol] roblabla b7dd1ba - Remove old debug code 19:38 < Not-001> [node-minecraft-protocol] roblabla c1a5b82 - woops, add back the 'packet' event 19:38 < Not-001> [node-minecraft-protocol] ... and 2 more commits. 19:44 < Not-001> [node-minecraft-protocol] roblabla pushed 1 commit to master [+0/-0/±2] http://git.io/ybxXnA 19:44 < Not-001> [node-minecraft-protocol] roblabla 23ecbd3 - Release 0.12.0 20:18 < rom1504> nice :) , I wonder how hard it would be to update mineflayer with that new node minecraft protocol version 20:23 -!- Irssi: #mcdevs: Total of 129 nicks [1 ops, 0 halfops, 10 voices, 118 normal] 23:33 < dividuum> Thanks Grum and Dinnerbone for the changes in 1.7.8! 23:35 < AlphaBlend> fixes you mean? 23:36 <+sadimusi> dividuum: did they remove the timestamp? 23:37 < dividuum> no. the timestamp is still there. but now if the client is presented outdated (but otherwise valid) skin data, it'll go to the session server and renew it from there 23:38 < Grum> which 'fixes' the 'fail clocks' (which will later just be fatal for the user -- when we can properly tell him) 23:39 < Grum> and 'fixes' the users being online for 24hrs .. which is barely ever any usecase anyhow 23:39 <+sadimusi> except for NPCs 23:39 < AlphaBlend> o_O 23:39 < Grum> not sure who cares for npcs and you can cycle those trivially 23:39 < dx> the bug "Staying on a server for more than 24 hours crashes everyone" has 33 votes 23:40 < AlphaBlend> what's about this breaking NPC support? 23:40 < Grum> no idea AlphaBlend 23:40 < AlphaBlend> i've never worked with sole NPCs 23:40 < Grum> we never had npc support 23:40 < AlphaBlend> so i wouldn't know 23:40 < AlphaBlend> well, I guess Amaranth's fake player plugin would break from this 23:41 < Thinkofdeath> Oh the client renews it itself? I thought it just went to steve 23:41 < Grum> we're being nice for now 23:41 < AlphaBlend> Thinkofdeath: What is spigot going to do in 1.8? Create a protocol hack? 23:42 < Thinkofdeath> Well we have a 1.7.8 one so why not? :) 23:42 < AlphaBlend> or have you guys already thought of the impending doom with it 23:42 < Grum> the whole reason this is a problem is because of bullshit like spigot 23:42 < Grum> the 3 day hoop-jumping ... just because people have to fudge the rules 23:42 < Thinkofdeath> Hey I didn't know at first 23:43 < Grum> if we change protocol we do it for a reason 23:43 < Grum> not to 'just do whatever the fuck you want to pretend to be compatible with it' 23:43 < Thinkofdeath> I thought it was intended as a placeholder for 1.8 23:43 < Thinkofdeath> I came and asked when I noticed it was an issue 23:44 < Thinkofdeath> and thats when you found the bug 23:44 < Grum> but its ok, i'm totally happy to randomize the packet-ids for whatever next release we do 23:44 < Thinkofdeath> :P 23:44 < Grum> as for us, it matters nothing 23:44 < dx> grum is such a nice person 23:44 < dx> <3 23:44 < Thinkofdeath> tbh I thought you would do that sooner 23:44 < Thinkofdeath> My server even was ready for it 23:45 < AlphaBlend> Thinkofdeath: Good luck making a protocol hack for 1.8. You're going to end up making hacks so the client can read the data properly, based off what I know already 23:46 < Thinkofdeath> AlphaBlend: I've made one already somewhere 23:46 < AlphaBlend> oh? 23:47 < AlphaBlend> how often does spigot update to snapshot versions? 23:47 < dividuum> we're being nice for now <--- should I be scared about the future? :-) 23:47 < Thinkofdeath> Normally closer to release 23:47 < AlphaBlend> hahaha 23:49 < Thinkofdeath> Also " if we change protocol we do it for a reason" wasn't always true in the past 23:50 < AlphaBlend> anytime it changes, there's a reason why 23:55 < AlphaBlend> ha, i laugh at all the fire that is going on in terms of modding and stuff 23:55 < AlphaBlend> "you guys are breaking this and that" 23:56 < AlphaBlend> well, this is what people get for going with 3rd party modifications that introduce communities. When Mojang hasn't had an official API, people get busy. Now they're working hard on one, and people want to complain --- Day changed sam. avril 12 2014 09:18 <+Amaranth> Thinkofdeath: What makes you think http://wiki.vg/Pre-release_protocol#Teams uses UUIDs now? 09:18 <+Amaranth> Looking at the latest snapshot's /scoreboard command it still seems to use names to add players to teams 10:13 < Thinkofdeath> Amaranth: https://github.com/thinkofdeath/mcprotocol/blob/master/play/PacketClientbound3E.java#L76 String length changed to 40 10:13 < Thinkofdeath> Amaranth: (Note Pre-release is 1.8, The main protocol page is 1.7.6+) 10:14 <+Amaranth> I know, I was looking at 14w11b's scoreboard command 10:14 <+Amaranth> People add arbitrary strings to teams so they can use prefix/suffix to make longer text 10:16 <+Amaranth> I was going through the Bukkit scoreboard API changing it to use Strings and remembered you had said teams were based on UUID now 10:16 <+Amaranth> I think I'll just leave them as "players" in the API and only change the stuff I know can be arbitrary strings 12:35 < Not-001> [node-minecraft-protocol] roblabla tagged a679994 as 0.12.1 http://git.io/41V3Xg 12:35 < Not-001> [node-minecraft-protocol] roblabla pushed 2 commits to master [+0/-0/±3] http://git.io/lDWe5Q 12:35 < Not-001> [node-minecraft-protocol] roblabla d7f3e5c - Support 1.7.6 protocol 12:35 < Not-001> [node-minecraft-protocol] roblabla a679994 - Release 0.12.1 12:35 < Not-001> [node-minecraft-protocol] roblabla tagged 23ecbd3 as 0.12.0 http://git.io/6-EqwA 14:40 < codename_B_> 1.7.8 still has teams as players, yep, I can confirm this 16:46 <+Amaranth> codename_B_: So does the last 1.8 snapshot but apparently they are preparing to change that 16:46 <+Amaranth> Or someone did a search/replace and hit an extra spot 17:30 < codename_B_> shouldn't change the bukkit implementation surely, since OfflinePlayer will have a UUID 17:36 <+Amaranth> codename_B_: I was converting it to not use UUID 17:36 <+Amaranth> Err, to not use OfflinePlayer 17:37 <+Amaranth> I'm going to just leave adding players to teams as OfflinePlayer for now though 17:39 < codename_B_> hmm, yeah fair enough 17:40 < codename_B_> tbh its probably best not to change anything till there's a concrete wtf is going on answer --- Day changed dim. avril 13 2014 01:43 < libraryaddict> Grum you alive? 01:48 < dx> libraryaddict: don't randomly ping the devs like that 01:48 < libraryaddict> Randomly? 01:48 < dx> well, you're not even asking a real question 01:48 < libraryaddict> Actually I suppose it would be better to ask Dinner 01:49 < libraryaddict> Wanting to inquire if they have any plans to remove the one uuid visible restriction 01:51 < shoghicp> well, just ask here. They might see it later 01:52 < dx> or they might ignore you completely, which is completely acceptable given the amount of noise they deal with, but you might have more luck getting a reply if you send them signal instead of noise 01:53 < libraryaddict> Also another thought I had that was similar to it was that if you are enforcing that. Instead of d/c the client. Why not just remove the old player? 01:53 < libraryaddict> I believe there is bug reports already where you can replicate it in vanilla 01:53 < Thinkofdeath> And they will fix those cases 01:54 < libraryaddict> Yes but I don't honestly think they will give modders any leeway to creating a game experience with fake players 01:59 < mbaxter> What is the limitation on faked players? Do the UUIDs have to be the specific calculated OfflinePlayer:$playername matching the sent $playername ? 02:00 < libraryaddict> From what I understand of it. Currently, if you want a player with a skin you need to send the spawn packet with the skin, correct uuid and correct name. The skin must still be valid or no skin 02:00 < libraryaddict> If you want a player with no skin, you send a player spawn packet without a skin blob and with a non version 4 UUID. Any name works. 02:03 < mbaxter> oh, just non version 4. That's good to know. 02:03 < libraryaddict> Yes but I believe thats removed in 1.8 02:05 < mbaxter> Well, I'm just writing for 1.7.8 at the moment :3 02:07 < dividuum> just a random though: what happens, when mojang has to revoke the signing key for the skins? Every old minecraft version won't display skins any more? Or depending on what happens when they get presented a skin the cannot validate: disconnect 02:09 < libraryaddict> Another thought. What will mojang do when a market starts for buying/selling skin blobs? 02:10 < dividuum> add the timestamp back in to prevent that. 02:11 < libraryaddict> Yes but if it was large enough, then depending on what names you want and if you really just want random names. 02:12 < Thinkofdeath> They are adding back when they can display a message to the user with the out of date blob/time issues so they can fix that 02:12 < Thinkofdeath> (If I understood correctly) 02:13 < dividuum> Hm? "You're clock is set wrong !" [ I know ] [ Nope ] 10:37 <+SirCmpwn> my friends and I have realized that we are unsatisfied with minecraft as it is today 10:37 <+SirCmpwn> and we're going to start a small beta 1.7.3 server 10:37 <+SirCmpwn> we all agreed that beta 1.7.3 was the peak of Minecraft's life 10:40 < dx> are you sure you're not unsatisfied with minecraft because you're bored of it? 10:40 <+SirCmpwn> maybe, but I've felt like a lot of the changes are superfluous for a while now 10:41 < dx> yeah, probably 10:41 <+SirCmpwn> I was against command blocks, basically the entire redstone update, etc 10:41 < dx> you're against command blocks? but how will sethbling survive? bukkit plugins? oh wait 10:42 <+SirCmpwn> 1.7.3 had all the core stuff to make minecraft minecraft, and none of the extra junk 10:42 <+SirCmpwn> it had a decent amount of redstone, it had the nether (and notably not the end) 10:42 < dx> yeah, i do agree that it seems like a peak 10:42 <+SirCmpwn> no experience or enchanting 10:42 <+SirCmpwn> no hunger 10:42 < prplz> you don't like hunger SirCmpwn ? 10:42 <+SirCmpwn> it's not neccessary to make minecraft minecraft 10:43 <+SirCmpwn> 1.7.3 also had the far lands 10:43 <+SirCmpwn> and the old lighting system <3 10:43 < libraryaddict> I'm only for the latest MC because you can do so much more with modding 10:43 <+SirCmpwn> can you? Old MC was pretty moddable 10:44 < libraryaddict> Well. I'm refering to vanilla clients and modded servers 10:44 < libraryaddict> Namely bukkit 10:44 <+SirCmpwn> ah 10:44 <+SirCmpwn> bukkit was around in 1.7.3 times 10:44 < libraryaddict> Yeah but back then you couldn't name a item or set lore on it. Which removes item menus 10:45 <+SirCmpwn> I might mod in a few changes from beta 1.8 into 1.7.3 10:45 <+SirCmpwn> maybe beef, melons, pressure plates on fences, sprinting 10:46 <+SirCmpwn> hold to charge bows 10:46 < libraryaddict> The 'Ctrl to auto sprint' is basically sprint hacks .-. 10:46 < libraryaddict> You can sprint even as you attack 10:47 <+SirCmpwn> 1.7.3 also had pistons 10:48 <+SirCmpwn> no server list, though, which was annoying 10:49 < prplz> why not the last beta, and remove the unused exp system? 10:49 < prplz> then you get sprinting too 10:50 <+SirCmpwn> don't want 1.8's endermen, or lighting system, or far lands fix, or hunger, or terrain generator 10:50 <+SirCmpwn> most of the features since 1.7.3 weren't terrible alone, but together they all just made minecraft... different 10:52 < dx> i saw all these feature updates as stuff to keep minecraft interesting for a bit longer 10:52 <+SirCmpwn> you're right 10:52 < libraryaddict> I don't see the skin change doing anything positive tho 10:53 < libraryaddict> Everything else they've added. Yes 10:53 <+SirCmpwn> I would pick and choose a small handful of changes since 1.7.3 to add, if I could 10:53 <+SirCmpwn> most of them aren't needed, especially the End 10:53 <+SirCmpwn> and everything related to the end 10:53 < prplz> the end was just to give the game well, an end 10:53 < prplz> :P 10:58 < dx> SirCmpwn: have you tried some of those , btw? playing that seems to be the opposite of what you're saying about 10:58 < dx> ... 10:58 <+SirCmpwn> ? 10:58 < dx> ok seriously how does that happen 10:58 < dx> i dunno, i must have some keybinding for "enter"... 10:58 < dx> ignore that message 10:59 <+SirCmpwn> consider it ignored 10:59 < dx> SirCmpwn: have you tried some of those modpacks like FTB, btw? playing that seems to be the opposite of what you're saying about 1.7.3 10:59 <+SirCmpwn> I have tried a few from time to time 10:59 <+SirCmpwn> I hate them 10:59 <+SirCmpwn> some of my friends tried to get me into Tekkit 10:59 <+SirCmpwn> and I tried FTB myself 10:59 <+SirCmpwn> couldn't stand either 10:59 < dx> heh, the opposite indeed 11:02 <+SirCmpwn> off to sleep 11:02 <+SirCmpwn> perhaps I will make a 1.7.3 branch for Craft.Net 11:03 <+SirCmpwn> I could dig up the old 1.0 code, that's when I started writing minecraft code