21:21 < nickelpro> they're* 21:21 < nickelpro> The packets are in their numerical id order right now no? 21:21 < rom1504> ah but I guess the wiki currently order them by id yeah 21:22 < rom1504> well 21:22 < rom1504> in 1.8 21:22 < rom1504> I think people didn't bother to reorder everything in the pre release page 21:22 < nickelpro> Exactly, because its a bastard to manage 21:22 < nickelpro> If we just autogenerated the ids it would be simple 21:22 < rom1504> yeah indeed http://wiki.vg/Pre-release_protocol#Entity_Equipment 21:23 < rom1504> nickelpro: well no precisely 21:23 < rom1504> what's annoying is reordering packets 21:24 < nickelpro> The vast majority of the time it's not a major move like Entity Equipment. It's that all of the packets have been bumped or decremented by an insert or removal of a packet in the middle of the index 21:25 < nickelpro> Those kinds of large id shifts are no harder to manage in an auto system and the little bumps are infinitely easier to manage 21:25 < rom1504> I guess 21:26 < rom1504> that means the order of the packets in the wiki will be meaningless though 21:26 < rom1504> (unlike all entity packets being together in http://wiki.vg/Protocol ) 21:26 < rom1504> well 21:27 < rom1504> not all of them 21:27 < rom1504> yeah idk, I guess that might be better 21:28 < rom1504> anyway https://www.mediawiki.org/wiki/Extension:Autoincrement 21:37 < Meeeh> Ok, I added small edits about ids, but I don't have more time today to add descreption of new packets etc. 21:41 < rom1504> cool 21:42 < Meeeh> also I only know something about 0x00 Teleport Confirm and 0x2E Player Position And Look, they added varInt field here, server sends Player Position And Look with some id (just counted up as far as I see), and then client reply with Teleport Confirm with this same id. If someone have time then he can add that and look exacly how it is used. Seems to be related to that "anti cheat" joke. 22:07 < Fenhl> fwiw, I think packets should be sorted by ID, but we can always fix the sorting on the release migration --- Day changed jeu. déc. 24 2015 01:13 < rom1504> anyone got a clue how the mc server decides the position of chunks in region file ? 01:14 < rom1504> (any way to avoid going through the whole file to find the first zero chunk?) 01:18 < barneygale> isn't there a table at the beginning of the file or something? 01:19 < barneygale> it's been a while :/ 01:21 < rom1504> there is a table at the beginning of the file to save the chunks position yes 01:21 < rom1504> that's useful for reading 01:21 < rom1504> and writing existing chunks 01:21 < rom1504> to write new chunks I need to know the location where that chunk should go 01:22 < rom1504> http://minecraft.gamepedia.com/Region_file_format links http://pastebin.com/niWTqLvk which seems to be storing free locations 01:22 < rom1504> "sectorFree" 01:23 < rom1504> I guess I'll do that 01:24 < barneygale> If I' reading this correctly, the table stores the size and offset of every chunk, so you can figure out where free space is just by reading the table, no? 01:24 < rom1504> no, the table store offset of every chunks saved 01:25 < rom1504> (see http://minecraft.gamepedia.com/Region_file_format#Chunk_Location) 01:30 < rom1504> I think I'm just going to copy/paste http://pastebin.com/niWTqLvk and translate it to js 01:32 < barneygale> benbaptist, if you're interested, i'm working on a project quite similar to minecraft-wrapper 02:31 < Bibl> Hi 02:31 < Bibl> For Endermen in Minecraft, 3 DataWatcher ID's are registered, 16, 17 and 18 02:31 < Bibl> http://i.imgur.com/qxY5ljG.png 02:31 < Bibl> However, 17 doesn't seem to be used in the client. 02:38 <+SinZ> http://wiki.vg/Entities#Enderman 02:50 < Bibl> But that id=17 isn't used in the client 02:50 < Bibl> That's why I'm confused. 02:52 < Bibl> SinZ: is there a way to see when an edit was made? 04:52 < bithon> -/close 21:51 < Bibl> In the 1.8.9 client, this is executed when a mob is spawned. 21:51 < Bibl> http://i.imgur.com/5Ulnpg6.png 21:51 < Bibl> What's the point of this exactly? 21:52 < Bibl> Do the parts id's have to be consecutive with the entity id or is it just a client preference kind of thing. 23:23 <+Amaranth> Bibl_: Probably the enderdragon 23:23 <+Amaranth> It has several parts which are all separate entities 23:24 < Bibl_> So is that snippet of code making sure the parts have consecutive entity ID's? 23:24 < Bibl_> Because in my implementation, I'm assigning entities their ID's by what the server sends 23:25 < Bibl_> whereas the official client has a counter and increments it, and then after that the client decides whether to set the ID to the value the server sent. 23:41 <+Amaranth> Bibl_: I don't really know, I never touched the client 23:41 < Bibl_> Amaranth: what have you worked on? 23:42 <+Amaranth> CraftBukkit --- Day changed ven. déc. 25 2015 01:23 < rom1504> Bibl_: the server doesn't send the entity ids of the dragon 01:24 < rom1504> the client already knows where they should go from the main id 01:24 < rom1504> (of the dragon) 08:13 <+XorBoole> Merry Christmas #mcdevs! 15:52 < nickelpro> :D 20:51 < javaprophet> Hey, I attempted to register on wiki.vg, and it gave me a "MWException". 20:51 < javaprophet> "[5be30bb5] 2015-12-25 19:51:27: Fatal exception of type MWException" 21:01 < Gjum> tktech ^ 23:37 < bithon> did anyone by any chance stumble upon herobrine in a codebase 23:37 < bithon> i'm going to decompile mc's stub to look for herobrine code 23:39 < Meeeh> people still believe in that? 23:49 < bithon> i do 23:49 < bithon> i'm a firm believer 23:49 < bithon> as a matter of fact, i left my atheism behind for herobrine 23:54 < rom1504> add it 23:54 < rom1504> then it's there 23:55 < rom1504> isn't that how religions work :p ? --- Day changed sam. déc. 26 2015 00:12 < redstonehelper> what the fuck 00:38 < dx> redstonehelper: what what 00:46 < redstonehelper> dx: herobrine guy 00:46 < dx> oh. 02:51 <+SinZ> herobrine was remotely funny 5 years ago maybe 02:51 <+SinZ> how is it still a thing 04:03 <+XorBoole> SinZ > implying herobrine isn't a thing 04:04 <+XorBoole> next you're going to tell me that the protocol isn't sane, I bet 04:04 * XorBoole runs 04:06 < Pangea> XorBoole is always running from his problems 04:07 <+XorBoole> I have enough problems as it is 04:07 <+XorBoole> I'm busy solving real problems, like proving that the US legal system is Turing complete 19:15 < Gjum> is this a result of how knockback works? https://www.youtube.com/watch?v=iebQJyGlEgs 19:25 < redstonehelper> Gjum: I think it's knocking the poisoned player back from where the damage came from, the damage came from the player who is recording 19:25 < redstonehelper> so yes, likely 19:28 < Gjum> I'm asking because I'm not totally sure how the client calculates knockback. So is it really just the client looking for a nearby player who could have damaged him, and not part of the protocol? 19:29 < redstonehelper> no, it knows the damage source 19:29 < redstonehelper> maybe 19:29 < redstonehelper> well, with potions I'm not sure 19:30 < redstonehelper> but when you hit somebody with a sword knockback is calculated based on where the receiving client thinks the damage source (which it is told about by the server) is 20:02 < rom15042> Does the client compute knockback ? Pretty sure it's the server doing it 20:03 < rom15042> (Sending a velocity packet) 20:03 < Meeeh> or both of them 20:09 < javaprophet> I still get "[330d50e8] 2015-12-26 19:06:34: Fatal exception of type MWException" on attempting to register at wiki.vg, is there a better place to report it to? 20:09 < rom15042> No not both, pretty sure I remember the client doesn't get any knockback when the server doesn't implement it (which was the case not too long ago on flying-squid) 20:10 < rom15042> Well I'm not 100% the client does nothing in all knockback cases 20:10 < rom15042> *100% sure 20:10 < javaprophet> The server does calculate knockback, the client does not ever, I believe. 20:11 < rom15042> javaprophet: tktech is the one hosting the wiki 20:11 < rom15042> And he's there 20:11 < javaprophet> Thanks 20:11 < rom15042> He'll probably do something about it in some days 20:22 < bithon> hello 22:51 < rich__> Hello 22:52 < rich__> Does anyone know why http://wiki.vg/Protocol#Use_Entity (use entity) uses float, while all other locations use double? 22:54 < rich__> Does anyone know why http://wiki.vg/Protocol#Use_Entity (use entity) uses float, while all other locations use double? 22:54 < javaprophet> It's a fluke I think, similar to using int for entity ID for 2 packets, while most use Varint. 22:55 < javaprophet> Or perhaps to prevent fragmentation to lower ping when doing block interactions? 22:55 < rich__> Fluke in Doc or fluke in Protocol? 22:56 < Xerxes1> I think fluke is the wrong word to use... 22:56 < javaprophet> It's correct in the protocol, perhaps different people designing the packets. 22:57 < rich__> So does that mean practically that the world distance can only be f32 max? 22:58 < javaprophet> I believe it means that precision for interacting on a part of a block will go down up to 2^32/2 blocks from 0, 0 but it may mean that you cannot interact with blocks past that point 22:59 < javaprophet> I think I will test this by teleporting that far out, but I think there is a hard limit somewhere else. 23:01 < javaprophet> http://scr.javaprophet.com/140403.jpg 23:02 < rich__> Oh thanks --- Day changed dim. déc. 27 2015 02:42 < Bibl> Hi, when converting entity positions (doubles) into block positions (ints) should I use Java's Math.ceil or Math.floor or should I cast them to an int 03:40 < javaprophet> Math.floor is correct I think. You may want to account for minX & maxX so that you account for hanging of blocks. 03:40 < javaprophet> off* 03:40 < javaprophet> That is, if you need to precisely define the block an entity is on, for instance, for pathing. Otherwise, just floor it. 03:42 < javaprophet> @Bibl 04:14 < Bibl> ok ty 17:10 < tktech> Weeeeird, wonder what broke registration 17:11 < tktech> I'll take a look this afternoon --- Day changed lun. déc. 28 2015 04:09 < deprilula28> Hello 04:11 < deprilula28> So, I am trying to use PacketPlayOutEntityMetadata for a Spigot server, but I cannot figure out the byte arrays. I simply want to change a entity's name. 04:11 * deprilula28 slaps Brottweiler around a bit with a large fishbot 04:11 < deprilula28> oops 22:11 < Sgt_Tailor> Hey 22:12 < Sgt_Tailor> I am messing around with the minecraft protocol, but I can´t seem to be able to find any documentation about the order in which packets need to be send 22:13 < Sgt_Tailor> I am trying to implement the server side 22:13 < Sgt_Tailor> I am able to authenticate a player, but don´t know what so send next :s 22:14 < Sgt_Tailor> Could someone point me in the right direction? :D 22:15 < Meeeh> 1.9? 1.8? idk if anything changed but just asking for sur 22:15 < Sgt_Tailor> 1.9 22:15 < Meeeh> giveme a second I will check in my server 22:16 < Sgt_Tailor> Thanks 22:16 < Meeeh> so, you done LOGIN part? and you want only PLAY protocol part? 22:17 < Sgt_Tailor> Yes 22:17 < Meeeh> you need start from 0x23 Join Game 22:17 < rom15042> Sgt_Tailor: http://wiki.vg/Protocol_FAQ#What.27s_the_normal_login_sequence_for_a_client.3F 22:18 < Meeeh> oh, it is on wiki too 22:19 < Sgt_Tailor> Aah Thx. I am not sure how I didn´t find that page 22:20 < Meeeh> hah I was studing NMS for hour or 2 to get this when I was creating that part of server :D Why I didn't know about this! 22:21 < Bruqaj> What would be the best way to ban login bots from spamming a server? 22:22 < Bruqaj> Atm we check if the player has send a look or position packet in the first 10 seconds it connected to the server, if not then it is a bot. 22:32 < rom15042> That works for stupid bots. The only way to have it work in all cases is to detect if a message is a spam (like what is done with mails) 22:33 < rom15042> For example detecting keywords, URLs,... 22:33 < Bruqaj> Well the bots just login and logout very fast which makes bungeecord lag and all the connected servers 22:34 < rom15042> They login and logout and do nothing ?? 22:34 < Meeeh> I used simple system to limit new joins per second, but with additional stuff, like players who dig more than 5 blocks on survival and killed 1 pig always can join. (ofc no one should know that rule) 22:34 < Meeeh> this same for spamming on spawn 22:34 < Bruqaj> Yes 22:35 < rom15042> Any reason why they do that ? To ddos the server? 22:35 < Bruqaj> It is always a unique IP and they never login with the same username, 2 days ago we've been hit by 600 unique IP's 22:35 < Bruqaj> Yeah it creates massive lag 22:36 < Bruqaj> None of the IP addresses were identified as a proxy.. 22:36 < rom15042> Can't you just ban all these accounts? They find new ones ? 22:39 < Bruqaj> Well another issue is that the server is ran in offline mode, we already have 400+ players daily and if we are not ready to switch to online mode 22:40 < rom15042> Well at least have some registration process 22:40 < Bruqaj> We do 22:40 < rom15042> Well I guess they can automatically create account if they don't pay 22:40 < Bruqaj> But that doesn't stop them from changing IP and name 22:40 < Meeeh> oh, I also used AutoIn on my server :D so I was able to use more restrictions on cracked players, and allow "premium" players to play without problems! self-ad so much. 22:40 < Bruqaj> Lol 22:41 < Meeeh> but AutoIn isn't good idea for existimg server 22:42 < Bruqaj> Another idea I had was to all players from a random height and have a block below them which they have to touch within a certain period of time 22:42 < Meeeh> as it don't allow cracked players with premium nicknames, so you will lose players anyways 22:43 < Bruqaj> was to drop all players* 22:44 < Meeeh> I don't see how you want check if it is bot that way o.O 22:44 < rom15042> Make them use a captcha for registration 22:45 < Bruqaj> Well they don't need to register to login and blocking a player for not registering in 30 seconds is not very polite 22:46 < rom15042> Use an alternative auth server 22:46 < Bruqaj> @Meeeh, Well since it would be difficult to process the velocity and map chunk they will try to teleport to a wrong height which will result in a ban 22:47 < rom15042> I can't see how you can reliability prevent players to connect and disconnect fast 22:47 < Meeeh> Bruqaj, it isn't hard for simple falling down 22:47 < Meeeh> most of bots should get this right 22:47 < rom15042> Except if you can prevent them to login at all using an auth server 22:49 < Bruqaj> Another thing I was wondering is how they had 600 IP's that were almost exactly the same and not detected as a proxy 22:49 < Bruqaj> Only way I could think of was that the attacker has a botnet 22:53 < rom15042> If they are almost the same then it's probably someone that has a subnet ? 22:54 < rom15042> 1.9 will have ipv6 so anyway IP will become a less and less reliable way to identify someone 22:55 < Bruqaj> http://puu.sh/mbKLn/6eadaf6fef.txt 22:58 < rom15042> 185.89.100.x apparently 22:59 < Bruqaj> That's not the only one 22:59 < Bruqaj> There are a lot more 23:03 < nickelpro> rom15042: Not a lot of things are explicitly banned in #mcdevs, but encouraging or discussing alternative auth methods outside of Mojang's is one of them. Please don't encourage them 23:23 < rom15042> Offline mode + a bad login plugin sounds much worse to me 23:23 < rom15042> Mojang makes no money too and it's insecure 23:30 < Sgt_Tailor> does anyone have a python implementation of the play part of the protocol. I am having troubles and want to take a peek at how other peoplehave tackeld the problem 23:31 < Sgt_Tailor> I´m afk for +- 30m btw 23:34 < rom1504> Sgt_Tailor: https://github.com/SpockBotMC/SpockBot/blob/master/spockbot/mcp/mcpacket.py https://github.com/SpockBotMC/SpockBot/blob/master/spockbot/mcp/proto.py 23:39 < rom1504> nickelpro: but I guess it's in the rules of #mcdev indeed. 23:39 < rom1504> I'll just tell people using offline mode that their usecase is not supported by #mcdevs then 23:41 <+ammar2> that rule is there specifically for piracy, using offline mode for legitimate stuff like proxying is fine to discuss 23:41 <+ammar2> but that guy was talking about "cracked players" which is a clear no no 23:42 < rom1504> right ok 23:48 < nickelpro> Sgt_Tailor: SpockBot's implementation is based on Barneygale's so you might want to check out Quarry too https://github.com/barneygale/quarry --- Day changed mar. déc. 29 2015 00:11 < Sgt_Tailor> Thx rom1504 and nickelpro. I am trying to use quarry, but I am failing quite hard :P 00:13 < Sgt_Tailor> Packet 0/1 (gt) was larger than I expected. found 35 bytes extra whilst reading packet 1 00:15 < rom1504> how are you sending it ? 00:15 < Sgt_Tailor> I´ll create a paste, but basically I am packing all the data and call the send_packet function after a player has joined 00:17 < Sgt_Tailor> https://gist.github.com/Sgt-Tailor/19debf70524802877782 00:19 < Sgt_Tailor> my logs are saying this: http://pastebin.com/mbLweKPa 02:08 < nickelpro> Sgt_Tailor: Wouldn't know, but the protocol is really the least of your worries if you're building a server. Figuring out proto issues is easier when you having something to send the client 02:09 < Meeeh> ugh, AI, physcis, I still affraid of touching this. 02:10 < nickelpro> Meeeh: Physics is easier than you think, Minecraft is all AABBoxes so its really just a few lines of min/max checks 02:11 < nickelpro> AI is mostly pathfinding with a splattering of combat 02:11 < Meeeh> bouncing itemstacks, movement of player to make sure it isn't cheating 02:11 < rom1504> world handling (including generation, saving,...) and inventories are the hardest things imho 02:11 < nickelpro> ∆∆ 02:12 < Meeeh> my EQ is working! but I didn't implemented chests yet, ugh :< 02:12 < rom1504> by inventory I mean all windows 02:12 < Meeeh> idk why I even doing this... :D but writting server is fun. 02:12 < rom1504> yeah 02:12 < nickelpro> minecraft-data has a windows.json that you can pull all the window data from 02:13 < Meeeh> if all inventory actions seems to be working then adding supprot for all chests etc should not be that hard o.O 02:13 < rom1504> crafting 02:14 < rom1504> supporting all kind of clicks 02:14 < nickelpro> Do player inventories require server side window creation? I don't think do 02:14 < nickelpro> so*" 02:14 < rom1504> I'm not saying it's that hard, but it requires some work 02:14 < rom1504> not sure what you mean by "window creation" 02:15 < rom1504> but the server need to know everything to handle accepting/rejecting crafting transaction 02:16 < rom1504> (anyway, is it not possible to use spockbot protocol implem to build a server in python ?) 02:16 < Meeeh> ah, also creating vanilla-like generator may take some time ;/ 02:17 < Guyag> So I'm sending a server list ping as per http://wiki.vg/Server_List_Ping#Current , but it doesn't seem that my response has a favicon field. Any clues about anything I may be doing that's wrong? Is it maybe to do with pinging a Bungeecord server? 02:17 < nickelpro> rom1504: I mean for player inventory actions the server doesn't have to send an Open Window packet: http://wiki.vg/Protocol#Open_Window 02:17 < rom1504> ah, no it doesn't 02:17 < Guyag> I get a field named "modinfo" which doesn't appear on the wiki 02:17 < Meeeh> sending packet isn't big problem 02:17 < rom1504> the player inventory has a special status that way 02:18 < nickelpro> Guyag: what lib are you using that is giving you that field name? 02:18 < Guyag> nickelpro: I can paste my code but I'm not using any lib as such, I'm implementing my own packet sending and such 02:18 < nickelpro> Oh wait you mean in the json don't you 02:19 < Guyag> yep 02:19 < nickelpro> The response can be damn near anything if its valid json. A custom server could send you anything it pleases 02:21 < Guyag> Hmm it's just a bungee server, weird that it's not responding with a favicon in this case as there's definitely one in the client 02:21 < nickelpro> rom1504: All of SpockBot's data utilities are generic and can be used to implement clients, proxies, or servers. But our entire plugin base is geared toward single bot clients 02:21 < Guyag> Oh that's a lie 02:22 < Meeeh> I spend waaaay too much time with creating usless parts of API instead of real server code... like permissions, recipes or support for multiple languages at once, meh 02:24 < nickelpro> Meeeh: Github? 02:25 < Meeeh> ugh, I'm not sure if this is good idea for now :D It looks sometimes like just piece of random code. I still change much in every part of it. 02:26 < Meeeh> also repo is a bit outdated, I playing with 1.9 stuff locally 02:27 < nickelpro> My personal work is currently a broken 1.8 login that explodes if you look at it wrong. I swear to you yours can't be worse https://github.com/nickelpro/luvcraft 02:28 < Meeeh> and still very raw 02:28 < Meeeh> even if it is like near year... meh :< 02:29 < rom15042> Having stuff on github allow other people to collaborate, or at least to share ideas about it ;) 02:29 < Meeeh> it is on GitHub, my code is just shy xD 02:30 < nickelpro> Before I met gjum, gamingrobot and a bunch of other people my "big" codebases were all test scripts held together by spaghetti. And if Barneygale hadn't dump his random scripts I wouldn't even have got that far. Openness does wonders 02:31 < Meeeh> I have that problem that I still change basic ideas about project 02:32 < Meeeh> I want make it too perfect, with too less resources, so instead of perfect I got piece of shitty code with few interesting parts of API 02:33 < nickelpro> Just write code, its hard to find what works before you have some moving parts to work with. If you have globals and God objects in the beginning, that's fine. You need scaffolding to build cool stuff 02:33 < Meeeh> like I love my messages, where every player can see messages in own language, and plugins can use this system too. but why I spend so much time on that, instead of real part of game :d 02:36 < nickelpro> I spent a significant amount of time building my plugin system and its pretty much the only reason I got to work with the people I've got to work with. My best collaborator joined on because "I liked your plugins so much better than mine". Little features that you know intimately build knowledge and experience for designing other features moving forward. Just don't get too stuck on one thing because its comfortable. Accept that you need to dive 02:37 < Meeeh> but whatever, I can't stop, I was always bored with new project after week or 2, this one... I even do less paid stuff to have more time, it is too fun to write. 02:39 < gamingrobot> :) 02:41 < nickelpro> Speaking of new features, next week I get a short vacation gamingrobot. I'm going to try to knock out 0.2 milestones 02:42 < gamingrobot> nickelpro: awww yea, I have been busy at work and fixing my desktop 02:42 < Gjum> woo milestones! 02:43 < Meeeh> nickelpro, can you link that server you are talking about? 02:43 < nickelpro> If we work the glitches out of pathfinding and make a really cool demo I'm going to suggest we do a little advertising. 02:44 < nickelpro> Meeeh: My local repo for the server I linked is a little farther along. I'll push that when I get home from work tomorrow. But we're talking about SpockBot, our bot client 02:44 < Meeeh> oh 02:45 < gamingrobot> nickelpro: our docs are still not greaaaaaaaat but meh 02:45 < nickelpro> Farthest along java server was Glowstone for awhile, in JavaScript there is Flying-squid which is definitely worth a look because its awesome 02:45 < nickelpro> And then there is MC-Server or whatever they call themselves now. But I've never talked to their devs 02:46 < nickelpro> gamingrobot: I will fix the docs!! 02:46 < nickelpro> Maybe, totally on my list 02:48 < rom15042> It's cuberite now, it's pretty cool too 02:49 < rom15042> It's very oop like the java implementation though 02:51 < Meeeh> there is acctually a way to make plugins not in lua but in cpp? (and any chances that it will break with some update?) 02:51 < nickelpro> C++ weirds me out 02:51 < Meeeh> I don't use it anyway, but I just don't see big server on only lua plugins 02:52 < nickelpro> Maybe it's because I learned C in high school and the first C++ I encountered was C++11, but I never managed to make heads or tails of namespaces and templates in a way I felt comfortable witg 02:53 <+Amaranth> If it's luajit and the API is designed well it'll probably be faster than Java plugins on Minecraft :) 02:53 <+Amaranth> And making a stable ABI for C++ is a nightmare 02:53 < rom15042> I hear lua is okay, but it seems weird to me to have a different language between the core and the plugins 02:54 < nickelpro> Meeeh: Tons of major games make do with pure Lua plugin environments. GMod might be the most famous. The real barrier is the unfathomably massive hold Java has on the MC community 02:54 < nickelpro> rom15042: that's because you're a js programmer :-P 02:54 < rom15042> :P 02:55 <+Amaranth> Unity is C++ for the engine and C# for the game 02:55 <+Amaranth> And the way they have that setup it's probably slower than using Lua (especially LuaJIT) 02:56 < Meeeh> I think that java is great for Minecraft server, as there is no limits, if there isn't something in API, you can still do that, even if it isn't in any part of code, reflections, redefining classes, and still very fast 02:57 <+Amaranth> Well, fast anyway, I wouldn't say very fast :P 02:57 < Meeeh> don't be one of that guys from 1997 who still think that java is slow 02:57 <+AndrewPH> java's pretty fast as far as stuff goes 02:57 < Meeeh> all that jokes are from times where java didn't have JIT etc 02:58 <+Amaranth> Meeeh: Don't be one of those guys who doesn't realize that speed is all about data layout which Java gives you basically zero control over 02:58 < nickelpro> You're not going to see any meaningful difference for almost every real world benchmark 02:58 < nickelpro> Outside of true performance code (stock markets) 02:58 < Meeeh> so write in assembly 02:59 <+Amaranth> If you're running some bullshit OOP thing in both then sure, your data layout sucks in both and Java can do some neat tricks to make up for all the bloat so it is competitive 02:59 < Gjum> um, isn't stock markets where java is used a lot? 02:59 < nickelpro> Religious war! I side with the Ottoma-I mean un-memory managed language 02:59 <+Amaranth> Java in HFT is nothing like regular Java though 02:59 <+Amaranth> They use off heap memory so they can control GC and data layout precisely 03:00 <+Amaranth> Makes the code rather ugly, would be easier and look nicer in C++ really 03:00 < rom15042> They use ocaml too :p 03:00 < nickelpro> C++, beautiful, pick one :D 03:00 <+Amaranth> Their stuff is all Unsafe and pointer math 03:00 <+Amaranth> In Java 03:01 <+Amaranth> And there is no reason to use assembly, non-GC languages usually give you the control you need 03:03 < nickelpro> Unless you need to vectorize something in a way your compiler can't naively figure out 03:04 <+Amaranth> That's what intrinsics are for :) 03:07 < nickelpro> I hate this channel, everyone is smarter and more successful than me 03:07 * nickelpro goes to bed 03:08 < Meeeh> can I get any links about using Java and off heap memory etc?, I never saw anything about using it in that way, looks interesting 03:11 < Gjum> Meeeh, I found this a while ago, I remember it being kinda informative https://www.cs.virginia.edu/kim/publicity/pldi09tutorials/memory-efficient-java-tutorial.pdf 03:13 <+Amaranth> Meeeh: http://mechanical-sympathy.blogspot.com/ has some of that, along with a bunch of other things to think about for performance 03:29 < Meeeh> Heap/DirectBuffers are common, but there is some more interesting stuff, but everyone know that java eat memory :D Anyway thanks for links. 03:32 < Meeeh> Gjum, meh, that examples with Map there are somewhere people who use maps like that in java? :D 07:49 < Sgt_Tailor> Vlinder93 07:50 < Sgt_Tailor> blaat354 21:40 < Sgt_Tailor> Is there a way to debug a server implementation of the minecraft protocol besides trial and error? 21:41 < Sgt_Tailor> Some sort of test 'suite' that executes a bunch of tests (send packet A, expect packet B back etc) 22:21 < Sgt_Tailor> Yay, my bouncer works :D 22:27 < rom1504> you can generate packets and check if you the parsed serialized packets is the same as the initial packet 22:27 < rom1504> to generate packets you can have some values for each field type 22:56 < Sgt_Tailor> Hmm, that does help me a bit. Thanks rom1504 --- Day changed mer. déc. 30 2015 17:10 < javaprophet> Why is it that Held Item Change (0x09, server&client bound IIRC) is a short being sent to the server, and a byte being sent back? 17:17 < Meeeh> javaprophet, I think that "Mojang" will be great explanation here. 17:18 <+Grum> awww i missed the context there ;( 17:18 < Meeeh> why Held Item Change use byte in clientbound but short in serverbound ;) 17:19 <+Grum> is it? 17:20 < Meeeh> Grum, as far as I see, yes. 17:20 <+Grum> well it has a '// TODO Short!?' todo statement in it ;D 17:20 < Meeeh> ah, good to now :D 17:20 < Meeeh> know* 17:20 <+Grum> in reality it doesnt matter too much 17:21 <+Grum> should just make them both varints ! =) 17:54 < ecx86> Hello #mcdevs 18:42 < ecx86> Does the client report to the server what version it is? 18:46 < Jode> ecx86: It does report protocol version, though that doesn't always change between regular versions: http://wiki.vg/Protocol_version_numbers 18:50 < ecx86> Yeah. That's what I assumed. 22:30 < ecx> s --- Day changed jeu. déc. 31 2015 02:49 < Not-d54a> [SpockBot] nickelpro deleted branch cleanup-movement 02:56 < Not-d54a> [SpockBot] nickelpro pushed 2 commits to master [+0/-0/±6] http://git.io/vEhUt 02:56 < Not-d54a> [SpockBot] nickelpro 39bbdcd - Move position sending to Physics plugin 02:56 < Not-d54a> [SpockBot] nickelpro 4fabd1b - Merge pull request #203 from nickelpro/cleanup-movement 03:02 < Not-d54a> [SpockBot] nickelpro pushed 1 commit to master [+0/-0/±2] http://git.io/vEhUQ 03:02 < Not-d54a> [SpockBot] nickelpro 68b9604 - Start tickers on Join Game instead of network PLAY_STATE 03:08 < Not-d54a> [SpockBot] nickelpro pushed 1 commit to master [+0/-0/±1] http://git.io/vEhTh 03:08 < Not-d54a> [SpockBot] nickelpro 2cff555 - Only allow a single skip tick per pause in PhysicsPlugin 05:21 < Not-d54a> [SpockBot] nickelpro pushed 2 commits to master [+0/-0/±8] http://git.io/vEhg4 05:21 < Not-d54a> [SpockBot] nickelpro c1aa1ab - Significantly faster collision detection 05:21 < Not-d54a> [SpockBot] nickelpro fd963d4 - Merge pull request #204 from nickelpro/fix-make-collision-less-terrible 05:22 < Not-d54a> [SpockBot] nickelpro pushed 1 commit to master [+0/-0/±1] http://git.io/vEhgS 05:22 < Not-d54a> [SpockBot] nickelpro 1c0cbda - Useless line of code is useless 13:51 < Poring> Hello, can somebody please help me with me client code ? I am trying to read incoming packets from server but for some reason I just receive packet 0x03 after login and later nothing, the client is sucessfully connected to the server but I never receive packet that switch the state to play so I dont know when it is ready to accept play packets, my code looks like this: http://hastebin.com/cabigoparo.avrasm 14:10 < shevchik> Your login packet is wrong 14:10 < shevchik> That 0x00 byte is not needed 14:11 < shevchik> Avtually i'm not sure why do you write 0x00 byte before every packet 14:12 < shevchik> Ow, that's a packet id 14:12 < shevchik> You should write it as varint to make it more clearer 14:13 < shevchik> Anyway, first packet you will receive is login success packet 14:13 < shevchik> And you don't read it fully 14:14 < shevchik> Or i may be set compression 14:14 < shevchik> But you don't read it fully anyway 14:14 < shevchik> And you don't account for packet compression at all 14:43 < Poring> shevchik I have change it to readVarInt but still th while cycle did not received any packet: http://hastebin.com/epovoteqow.avrasm 14:45 < shevchik> Print the length of the packet 14:45 < Poring> At least I should receive compression packet to know if the server has compression enabled, shouldnt I ? 14:45 < Poring> OK I will try 14:45 < shevchik> Yep 14:45 < shevchik> And loginsuccess 14:46 < shevchik> Don't remember the order 14:47 < shevchik> Also make sure that your server is in offline mode 14:48 < Poring> Yea I am testing it on my localhost in offline mode 14:48 < Poring> I got always lenght 3 with this debug: http://hastebin.com/ahemewukod.avrasm 14:51 < Poring> Lol I am stupid sorry, I had wrong netty assigned to the project so there was NoClassDefFound exception.... 14:52 < Poring> But now I am receiving always packet id 0 14:52 < Poring> but with different lenghts 14:55 < Poring> shevchik could it be caused by the compression ? I will try to disable it on spigot server 14:59 < shevchik> Yes it is 14:59 < shevchik> Compressed packet add uncompressed size in the field 15:00 < shevchik> If it is zero that packet is not compressed 15:01 < Poring> shevchik I have disable compression on the server side (compression threshold=-1) but I am still receiving just 0 15:01 < shevchik> It is not possible to disable compression 15:02 < shevchik> You just send all your packets uncompressed 15:02 < shevchik> But compressed packet length varint is still here 15:02 < shevchik> That 0 is the length of packet 15:02 < shevchik> if it is zero - then it is uncompressed packet 15:03 < Poring> So the packet format is the same for compressed and uncompressed format ? 15:03 < shevchik> Yes 15:04 < ecx> , 15:04 < Poring> Ah, ok now I understand so the packet ID is the third varint (first: entire packet lenght, second compressed packet lenght and third packet id) is that right ? 15:05 < shevchik> Yes 15:05 < Poring> Ok thanks, I will try to change it 19:10 < See> hey guys, the motd promts me to check out to the rules at http://mcdevs.org/ but it seems to be offline, is it just standard stuff? 19:10 < See> *prompts 19:18 < ecx> ? 19:19 < ecx> http://wiki.vg/MCDevs 19:19 < ecx> http://wiki.vg/MCDevs/rules 19:19 < ecx> what's going on with tktech? 19:20 < tktech> Fixing the ENTRYMSG with services. 19:20 < ecx> k 19:20 < ecx> hello Morrolan 19:20 < ecx> does anyone actually maintain b.wiki.vg? 19:28 < ecx> client announces version 19:28 < ecx> MC|Brand 19:40 < Pangea> burger is broken since 1.7 I believe 19:40 < ecx> its a shame. it seems cool 19:40 < Pangea> yeah 19:41 < ecx> i wish client also reported version not just mod name 19:41 < ecx> its always 'vanilla' 19:46 < Meeeh> protocol version isn't enough? 21:12 < pokechu22> Has anyone gotten image uploads to work on wiki.vg? I've tried a couple of times but get the error "Could not create directory "mwstore://local-backend/local-public/4/42".". 21:23 < Gjum> tktech ^ 21:23 < Gjum> :) 21:26 < tktech> Grumble grumble 21:26 < Gjum> tktech: have a helper cat http://images.bidnessetc.com/content/uploads/images/source5/helper-cat-sp-47a7f2c033801a8185243e6ca8df5fae.jpg 21:28 < pokechu22> I guess if it helps diagnose, I'm uploading this picture from my computer: http://i.imgur.com/PVqp6sJ.png, with the name 'Anvil-slots.png'. The original file has a size of 4210 bytes. 21:32 < Gjum> oh, cool! 21:32 < pokechu22> I've got a bunch of images like that for the other slots which I'm hoping to upload if I can get it to work, but no luck so far :/ 21:34 < Gjum> how did you get that info? I'd like to compare that to https://github.com/PrismarineJS/minecraft-data/blob/master/data/1.8/windows.json 21:35 < pokechu22> I wrote a clientside mod. Let me look at what exactly I did... 21:35 < Gjum> ah ok 21:37 < pokechu22> Right, I added the following line to GuiContainer.drawSlot(Slot slotIn): 21:37 < pokechu22> drawString(fontRendererObj, Integer.toString(slotIn.slotNumber), slotIn.xDisplayPosition, slotIn.yDisplayPosition, 0xFFFFFF); 21:38 < Gjum> oh, that's neat 21:42 < pokechu22> Here's the full set of images: http://imgur.com/a/jPUs1 21:43 < Gjum> thanks 21:45 < tktech> pokechu22, try now. 21:46 < pokechu22> Worked. Thanks! 21:58 < javaprophet> tktech, I still get a "[6fb7f50a] 2015-12-31 20:58:22: Fatal exception of type MWException" on wiki.vg when I try to register. 21:58 < tktech> GRUMBLE GRUMBLE 21:59 < javaprophet> It's a common MediaWiki bug I found on a google, shouldn't take much to fix ;) 22:00 < tktech> Of course it's common, it's the default exception >_> 22:00 < javaprophet> :) 22:13 < tktech> javaprophet, try now. 22:13 < tktech> Mailgun changed their API a bit, trying to send the confirmation emails was causing the crash. 22:14 < javaprophet> Yep, it worked. Thanks! 22:31 < pokechu22> There we go, I've added images to all of the other inventories on http://wiki.vg/Inventory 22:34 < javaprophet> Very nice looking, thank you. 22:40 < Gjum> lol http://wiki.vg/Sandbox 23:46 < nickelpro> Very nice work, even fixed a bug in minecraft-data --- Day changed ven. janv. 01 2016 00:51 < Not-d54a> [SpockBot] nickelpro pushed 1 commit to master [+0/-0/±2] http://git.io/vufs0 00:51 < Not-d54a> [SpockBot] nickelpro 2afae44 - Expand event core, add comments to collision --- Log closed ven. janv. 01 01:20:20 2016 --- Log opened ven. janv. 01 01:20:49 2016 01:20 -!- Irssi: #mcdevs: Total of 149 nicks [1 ops, 0 halfops, 15 voices, 133 normal] 01:25 -!- Irssi: Join to #mcdevs was synced in 316 secs 01:37 <+AndrewPH> javaprophet: >MWException 01:37 <+AndrewPH> Morrowind exception 01:38 < Not-d54a> [minecraft-data] rom1504 pushed 2 commits to master [+0/-0/±2] http://git.io/vufWh 01:38 < Not-d54a> [minecraft-data] Gjum 438b369 - Fix wrong slot indices in brewing stand window thanks to @pokechu22 for the images from his clientside mod https://imgur.com/a/jPUs1 01:38 < Not-d54a> [minecraft-data] rom1504 a27ff6f - Merge pull request #86 from Gjum/patch-2 Fix wrong slot indices in brewing stand window 01:52 < See> could somebody tell me how to get an understanding of the nms? i would be really grateful, even willing to pay in that matter. 01:52 < rom1504> nms ? 01:53 < javaprophet> What are nms? 01:53 < See> The net.minecraft source. 01:53 < See> In bukkit/spigot terms it's often referred to as nms. 01:53 < rom1504> https://www.spigotmc.org/wiki/glossary/#nms 01:53 < javaprophet> Aah 01:53 < rom1504> apparently it actually means vanilla server 01:54 < See> Awesome thanks for the glossary, rom. Very handy. 01:54 < rom1504> not sure what you'd want to understand about that 01:55 < See> Me neither, but some job i want to apply for seems to require a deep understanding of it. 01:56 < See> "Skilled in NMS development and hooking directly into vanilla code", how would i achieve something like that? 01:56 < See> is it just working with the net.minecraft.server-package? 01:57 < javaprophet> They probably want a custom MC server built on Vanilla, rather than Bukkit Plugins. Depends on what your applying for. 01:58 < rom1504> there are jobs to create minecraft server plugins oO ? 01:58 < See> Thanks for the reply, javaprophet. It doesn't seem like they want a custom mc-server, as they also want a deep understanding of Spigot/Craftbukkit-API. 01:59 < javaprophet> I see, I think it's just wordyness for knowing how to make plugins. 02:01 < See_> sorry for reconnecting 02:03 < See_> I see, javaprophet. Thanks for the answers. I guess i know what 'Having a deep understanding of NMS' is then. 02:21 < javaprophet> How does the Minecraft client communicate using a block? I assumed Block Placement, but it doesn't seem to work. 02:29 < rom1504> yes block placement 02:30 < javaprophet> Any reason why it would silently ignore it? I'm attempting to open a door, yet it doesn't seem to do anything or say anything. I've compared all written data with the Vanilla client, and it seems to be congruent. 02:32 < rom1504> what would ignore it ? 02:33 < rom1504> lots of reason why your server might ignore it 02:33 < rom1504> basically if you didn't code it right 02:33 < javaprophet> The server, I guess I'll debug through the server code to figure it out, thanks. 02:33 < rom1504> didn't do the opening a door part yet in my server but I believe it's just a metadata change ? 02:34 < javaprophet> It is, I properly implement see the door open/close. 02:34 < javaprophet> However, my client swings his arm and the door does not open. 02:34 < rom1504> maybe your code that detect the correct place block is not working 02:35 < rom1504> and do you send the block change packet properly ? 02:35 < javaprophet> I went to the same location in the server, and printed out all the data that comes with the packet, and they are exactly the same. 02:35 < rom1504> what packet ? 02:35 < rom1504> place block ? 02:35 < javaprophet> That's what I'm thinking, I quadruple checked the vanilla client's writing vs mine, I'm going to debug through the server. Yes, place block. 02:35 < rom1504> *block change 02:36 < rom1504> hmm I'm lost 02:36 < rom1504> are you writing a client or a server ? 02:36 < javaprophet> A client. 02:36 < rom1504> ah 02:39 < rom1504> https://github.com/PrismarineJS/mineflayer/blob/aaa90b25d1d9e0353fdd1284000103febd37e79f/lib/plugins/inventory.js#L98 02:39 < rom1504> are you testing on vanilla or spigot ? 02:39 < javaprophet> From my perspective on a vanilla client watching this live, the client swings his arm and the door does not open. Spigot at the moment. 02:39 < rom1504> (if spigot + some anti cheat, the lookAt might be needed) 02:40 < rom1504> ah it's a gui client 02:40 < javaprophet> I properly implement the lookAt, and we disabled the NoCheat+ to determine if that was the problem. 02:40 < javaprophet> The client I'm writing is headless, I'm watching on the server from a vanilla client. 02:41 < rom1504> hmm 02:41 < nickelpro> javaprophet: Github link? It should just be a block change #worksforme 02:41 < javaprophet> It's closed source at the moment, I'll pastebin it. 02:41 < javaprophet> http://pastebin.com/pxpCddmv 02:42 < javaprophet> Data (excluding item, it's a hand) being used by my Client: -294.0, 108.0, -293.0, 5, 0.1875, 0.5, 0.5 02:42 < javaprophet> Data used by vanilla client under identical circumstances: -294, 108, -293, 5, 0.1875, 0.572416, 0.49789447 02:42 < Gjum> do you handle negative values correctly? 02:43 < Gjum> eg. floor not round 02:43 < javaprophet> Yes, I floor. 02:43 < rom1504> javaprophet: normal place blocks do work right ? 02:44 < javaprophet> I've never tested sending them before except for using items, which works fine. 02:44 < rom1504> well, can you try placing a block ? 02:44 < javaprophet> Yes, one second. 02:45 < rom1504> (using items ignore the position for most items) 02:45 < javaprophet> Yes, I know. 02:45 < rom1504> so your position serialization might not work 02:45 < javaprophet> It does, I've tested it extensively in other packets. 02:46 < javaprophet> I also triple checked against the wiki's protocol docs, and how the Vanilla client serializes the packet. 02:46 < rom1504> Gjum: can spockbot open a door ? I never tried it with mineflayer 02:46 < Gjum> it can certainly interact with blocks 02:47 < Gjum> doors, didn't check, neither normal nor fence etc 02:47 < javaprophet> Okay, I just found a possibly revealing fact. While the door doesn't open from my vanilla client's perspective, it makes the open/close noise. 02:47 < Gjum> that sounds like a server issue then 02:48 < rom1504> it would be simpler if you could try with a vanilla server 02:48 < rom1504> just to make sure 02:48 < javaprophet> Alright, I'll try that. 02:52 < nickelpro> Gjum: Just tested, works for me. Get position of door -> place any slot on it -> open 02:52 < javaprophet> On a vanilla server, the noise doesn't happen twice, however, the door still does not open. 02:53 < javaprophet> So the noise was probably a plugin issue or something. 02:56 < rom1504> sounds like you are not sending things right then 02:56 < javaprophet> The animation packet sent right after is fine, I'll see what the server thinks it's received. 02:57 < Meeeh> maybe you are too far away from doors? or you have some weird item in hand, I think that minecraft works a bit different with like sword in hand. 02:58 < javaprophet> He's a block or less away, but he DOES have a sword in his hand on the vanilla server. 02:58 < gamingrobot> rom1504: yes it can 03:00 < javaprophet> I removed the sword, no change. I'll just check the server. 03:00 < Meeeh> maybe you are sneaking for some reason? :D 03:00 < javaprophet> Nope, I'm watching him, and he has no code to start sneaking either. 03:02 < Meeeh> meh, so you must have something weird in your code, did you checked if packet on server side contains good coords too? 03:02 < javaprophet> I'm checking that now. 03:02 < Meeeh> by adding some debug in vanilla or at least spigot + ProtocolLib 03:02 < Meeeh> or some custom server 03:04 < Meeeh> ok, good luck, I need to go. bye. 09:50 < rom15042> Anybody knows whether the 1.9 chunk format is used in .mca files or only in the protocol? (The thingy with a palette and whatnot) 09:51 < rom15042> Trying to figure out if copying the bytearray directly in ram is ok 09:51 < rom15042> (In 1.8 it would be) 10:40 < shevchik> uuu 10:40 < shevchik> It is onlt protocol change 10:46 <+Amaranth> I mean, it's also how the game stores it in RAM 10:46 <+Amaranth> But that's not relevant to you I guess 10:47 < shevchik> Yea the nbt still stores id and meta serparately 10:47 < shevchik> If i remember correctly 12:51 < rom15042> Well yeah but you could just copy it to the right part of the bytearray 12:52 < rom15042> But okay if 1.9 doesn't change you have to really convert between the file and the ram 12:52 < rom15042> *doesn't change the chunk format 12:53 < rom15042> I'll do that then 17:03 < Meeeh> http://wiki.vg/Pre-release_protocol#Entity_Metadata how position is encoded? 17:03 < Meeeh> this long value with x/y/z? 17:05 < Meeeh> or normal 3x int? 17:09 < rom15042> It's a vector3f 17:09 < rom15042> Like 7 17:10 < rom15042> Hmm actually 17:10 < rom15042> Let me check that 17:11 < rom15042> Alright checked , it's a bitfield 17:11 < rom15042> The same position field as in the protocol page 17:11 < rom15042> *type 17:12 < rom15042> Meeeh: http://wiki.vg/Protocol#Position 17:26 < Meeeh> rom15042, oh, thanks 17:49 < Meeeh> physic changed in 1.9 too? or something related to entity movement? my items act weird o.o 18:01 < Gjum> entity physics changed quite a lot 18:02 < Gjum> for example the glass item elevators are kinda broken 18:02 < Gjum> Meeeh: ^ 18:03 < Meeeh> ugh, ok, thanks 19:58 < Meeeh> hah, this is still in MC code if(this.getName().equals("Notch")) { this.a(new ItemStack(ado.e, 1), true, false); } 20:04 < Gjum> what's `ado.e`? 20:05 < Jode> Gjum: apple, I'd presume? 21:53 < ecx> i think Jeb also has some code in there too 22:40 < javaprophet> Can a Window Click be negatively confirmed for being too fast? IE the inventory didn't update quick enough to reflect what the client think' 22:40 < javaprophet> s it's inventory is? I have exactly mirrored an inventory and item movements on a vanilla client and my own, and one causes negative confirmations. 22:41 < rom1504> I don't think so. You need to send stuff in the right order though 22:46 < Gjum> javaprophet: when you send a click, and the Slot is incorrect, you get a negative confirm. but the click is still executed afaik 22:46 < Gjum> so if you send two clicks very fast and don't update the inventory, you could have sent a wrong Slot in the 2nd packet 22:47 < ecx> ^ 22:47 < javaprophet> That would explain throwing the items, I double checked by printing out window clicks sent by Vanilla, so I know order is correct. In my inventory model, it instantly changes the client inventory, but keeps a copy to revert to. 22:47 < javaprophet> I made it go very slowly, and it worked, is the thing. 22:47 < ecx> i think the issue is you are doing it too quick 22:47 < ecx> do you update your inventory after every transaction 22:47 < javaprophet> Yes, I do. 22:48 < javaprophet> After every window click packet, I change the client interpretation. It exactly matches Vanilla doing the same exact change. 22:48 < rom1504> do you wait for the server confirm becore sending a new click ? 22:48 < javaprophet> I do. 22:48 < javaprophet> Now I wait for even longer. 22:48 < ecx> how long do you wait 22:48 < javaprophet> If I send right after a confirm, with more than 3 or so packets, it starts messing up. 22:49 < Gjum> huh 22:49 < Gjum> that never happened to me 22:49 < javaprophet> About 3 clicks in a bundle every second or so. 22:49 < javaprophet> That works, before It would generate the packets in advance in the same fashion, and send them when the server confirmed the previous 22:49 < Gjum> I can craft complex recipes very fast by sending click, waiting for confirm, sending next click, etc 22:50 < Gjum> is that on a vanilla server? 22:50 < javaprophet> Yes, vanilla. 22:50 < rom1504> did you figure out the problem wiht your place block thing btw ? 22:50 < javaprophet> I can send the clicks ASAP like you Gjum, but if I swap two slots via left clicks, and then pick an item back up, it throws it out. 22:51 < javaprophet> Yes, I have been only testing decoding positions, my encoder broke. 22:51 < Gjum> do you send or receive any window or inventory closing packets? 22:51 < javaprophet> It's in the inventory, but no. 22:52 < javaprophet> My thoughts are that when I try to pick up something I just placed down and the server just confirmed it, it may be going too fast? 22:52 < rom1504> is your slot encoding/decoding correct ? 22:52 < javaprophet> Yes, it is, I've moved around enchanted items and such fine. 22:52 < Gjum> did you check your click modifier fields? throwing out sounds like sending a dropping click 22:52 < Gjum> I mean Mode and Button fields 22:53 < javaprophet> Both 0, for a simple left click. 22:53 < ecx> try waiting a tick after getting a confirm before the next transaction 22:53 < javaprophet> That's a good idea, I'll try that ecx. 22:53 < rom1504> I doubt very much you need to wait, mineflayer and spockbot don't wait 22:53 < ecx> mc is magic dude 22:53 < javaprophet> It's an edge case that's the issue. 22:54 < Gjum> what items do you click on btw? 22:54 < javaprophet> Usually it works, but if I'm moving slot 36->40 and 40 back to 36, then the contents of 40 to 5, it breaks. 22:54 < ecx> oh 22:54 < javaprophet> Sword in 36, helmet in 40(after swapping the two) 22:54 < ecx> i have experienced that in a vanilla client 22:54 < ecx> when i was using an autohotkey script too quickly 22:54 < javaprophet> The helmet gets thrown out if I pick it back up too fast. 22:54 < ecx> you just need to wait 22:54 < ecx> i think. 22:55 < javaprophet> It only breaks if I swap an item more than once two fast. I suppose I'll just make it wait 22:55 < javaprophet> Thanks guys. 22:56 < Gjum> ok, but it doesn't sound right 22:56 < ecx> 1sec let me pull up the server sources 22:56 < javaprophet> It could be that I'm not modifying my inventory correctly. 22:56 < javaprophet> http://pastebin.com/Gm69EQe2 22:56 < Gjum> so in your case does it break when you click on a slot say 5 times very fast? 22:56 < javaprophet> That's the only place I write window clicks. 22:57 < javaprophet> Let me write a test. 22:57 < Gjum> I'd like to try and reproduce it with spock to be sure 22:58 < javaprophet> No, it worked just fine, swapping the slots back and forth quickly. 22:58 < rom1504> javaprophet: you write 2 click packet without waiting in that pastebin 22:58 < javaprophet> I have a layer below that that delays writing 22:58 < ecx> http://paste.whitefire.in/view/xeRkVMzOro 22:59 < javaprophet> It puts it into a queue. 22:59 < rom1504> (except if mc.writePacket contains a queue handling confirm transation waiting ?) 23:00 < javaprophet> http://pastebin.com/6D7VqrC0 23:02 < rom1504> hmm so much pain 23:03 < rom1504> no clue if that can work or not. Does vanilla handle async stuff in such an annoying way ? 23:03 < ecx> no its just threaded 23:04 < ecx> all your packets go into a queue 23:04 < ecx> theyre processed one by one in a packet read queue 23:04 < ecx> packet read thread* 23:08 < ecx> each player has their own thread 23:15 < shevchik_> No 23:16 < ecx> idk its been a while 23:35 < Meeeh> what, no, it use one or few more (netty) threads for all players 23:35 < shevchik_> Yes, but not one per player 23:35 < shevchik_> But the only packets that are processed on read thread 23:35 < shevchik_> Are login packets 23:35 < shevchik_> And chat and keep alive 23:36 < shevchik_> Others are processed by main thread 23:36 < Meeeh> ecx, rom1504 ^ 23:37 < Meeeh> shevchik_, hyym, chat use netty thread? it don't have own thread? (IDK, never chcked that) 23:37 < shevchik_> In vanilla and craftbukkit - no 23:37 < shevchik_> In spigot it uses a pool of chat threads 23:38 < Meeeh> ah, now it make sense, ok :D 23:40 < ecx> yeah the last time i actually did worko n this was before netty lol --- Day changed sam. janv. 02 2016 08:41 < javaprophet> How does the client know the motion of entities in a server? I see there is a EntityMotion packet, but it never seems to be sent for things like arrows and players? 08:44 <+Amaranth> iirc the velocity packet is sent for knockback 08:45 <+Amaranth> Otherwise the client and server have the same physics and collision implementations and the same starting points so... 08:45 <+Amaranth> Oh and they sync up the actual position fairly regularly 08:46 < javaprophet> Alright, thanks. 08:47 < javaprophet> What about arrows? They have random initial velocity, so how do they work? 08:47 <+Amaranth> Poorly, haven't you noticed they're basically always out of sync? 08:47 < javaprophet> Hmm 08:48 < javaprophet> Not in the recent updates of minecraft. 08:55 < javaprophet> I discovered the wiki's interpretation of SpawnObject is out of date! I'll modify it. 09:15 < rom15043> Out of date ? What is there to interpret ? It just spawns an object 09:16 < javaprophet> It didn't include the Entity Velocity in SpawnObject packets. 09:20 < rom15043> There is only one spawn object packet and entity velocity is a separate packet 09:21 < javaprophet> Check Minecraft 1.8 source. 09:21 < javaprophet> Spawn Object contains Entity Velocity params similar to Spawn Mob 09:21 < rom15043> Ah I see you added 3 velocity Fields 09:21 < rom15043> That is wrong 09:21 < javaprophet> Look at the source! It is correct! 09:21 < rom15043> They are included in the object data 09:22 < javaprophet> Vanilla MC reads it as part of the packet. 09:22 < rom15043> See http://wiki.vg/Object_Data 09:23 < rom15043> It doesn't matter how vanilla read it. These velocities are optional and were correctly described in the object data page 09:23 < javaprophet> Ahh, I just interpreted it directly out of the SpawnObject packet from MC, I feel like it definitely doesn't belong in Object Data. 09:24 < javaprophet> There are also other packets with optional data. 09:25 < rom15043> Well if you want to get it out of object data then you need to put the integer sent at the beginning of object data as a spawn object field then say the velocity are optional dependending on that field in the velocities description 09:26 < javaprophet> Hmm, I see. 09:26 < rom15043> (And change the object data page to reflect this) 09:27 < javaprophet> What MC seems to do, is to read Object Data as an integer, and then if it's > 0, read the velocity. I see your point. 09:27 < rom15043> Ah and it seems that beginning field is the actual data, object data is always an int apparently 09:27 < rom15043> Yeah but I think you're right too, it would probably be simpler to get this out of object data 09:28 < rom15043> Well providing object data is used nowhere else ? 09:28 < javaprophet> Yea, I suppose. Perhaps specify that object data is always an Int, and provide the object data page on how to interpret it for other entities. 09:29 < rom15043> Yeah sounds good 09:29 < rom15043> Seems that's the only packet concerned too 09:30 < javaprophet> I'll modify it to say the Field type is of type Int, ad put the Object Data link in the Notes, then modify the Object Data page accordingly. 09:33 < rom15043> (And add optional if object data = 0 on the velocity fields) 09:34 < javaprophet> I did at the end of the notes, is there a different place to do it? 09:34 < rom15043> Usually it's in the field notes I think 09:35 < rom15043> Ah you did that 09:36 < rom15043> Alright :) 09:36 < javaprophet> :) I'm modifying the Object Data page now. 13:14 < Meeeh> Actually, what is that metadata, boolean at 4 index, "Is Silent"? 13:14 < Meeeh> and when it is used 13:36 < rom15043> No clue. If I has to guess I'd say it makes the entity produce no noise. But : try it and tell us ;) 13:37 < rom15043> had 14:12 < ecx> just treat other entities and players as EntityLivingBase 14:12 < ecx> javaprophet: 14:16 < Meeeh> setting zombie to eating state wasn't my best idea 14:17 < Meeeh> why so many weird stuff like eating is in Entity metadata when using that will crash mc :D 15:34 < rom1504> the server can crash the client in so many ways ;) 15:41 < rom1504> flying-squid can now fully load anvil files http://download.rom1504.fr/stuff/mc-full-anvil-loading.png :) 15:42 < rom1504> (here it's loading a vanilla world) 15:42 < rom1504> (+ some generation for unsaved chunks on the right) 15:49 < Meeeh> ugh, Elytra should not stop when you fall into 1 block size waterfall :D 19:31 < Not-d54a> [1.8-Models] drXor pushed 1 commit to 1.8 [+2/-0/±3] http://git.io/vuLoV 19:31 < Not-d54a> [1.8-Models] drXor 1e1e1c5 - Update crafting table. 22:52 < Meeeh> http://wiki.vg/Pre-release_protocol#Entity_Metadata I testing that boolean from AreaEffectCloud 22:53 < Meeeh> anyone know what it does? 22:53 < Meeeh> http://imgur.com/k9CNgtn this near me is with true value, both use this same particle, color and radius 4 22:55 < javaprophet> In the chat JSON format, are the arrays in extra just more chat messages? 22:56 < javaprophet> IE they can be selectors or score, translate, or just text? 22:56 < Meeeh> they can be everything as far as I know 22:57 < Meeeh> and they can contains more extra arrays 22:57 < javaprophet> Nasty 23:17 < rom1504> yes the chat format is pretty annoying 23:17 < rom1504> even just vanilla 23:18 < rom1504> with chat plugins it gets just impossible to makes sense of it 23:18 < javaprophet> Yeah, especially considering I'm not using a JSON library. 23:18 < rom1504> oh lol why ? 23:18 < javaprophet> (Just a personal challenge, I try to limit library usage) I managed to make a 200 line interpreter that works pretty well. 23:19 < rom1504> "Just a personal challenge, I try to limit library usage" , ah, I have the opposite personal challange 23:19 < rom1504> challenge 23:19 < javaprophet> :P I'll pastebin the code I created, it's disgusting, in a moment 23:20 < rom1504> well making a new json parser is pretty easy too ;) 23:20 < javaprophet> I did one up on that 23:21 < rom1504> if I were to do that, I would then package it as a library and use that new library though :p 23:27 < Meeeh> this boolean seems to limit effect to only one point 23:27 < Meeeh> instead of using radius o.O 23:27 < Meeeh> This one-> http://wiki.vg/Pre-release_protocol#Entity_Metadata I testing that boolean from AreaEffectCloud 23:27 < Meeeh> http://imgur.com/a/qQXgF :D this is epic 23:33 < javaprophet> test 23:33 < javaprophet> Works with Spigot/essentials & vanilla! 23:33 < javaprophet> Prepare to be disgusted rom1504. 23:34 < javaprophet> http://hastebin.com/uyixoqizaj.coffee 23:34 < javaprophet> This is by far my most disgusting json psuedo-parser I've written yet. 23:43 < rom1504> OMG 23:44 < rom1504> json-mc-chat parser :p 23:44 < javaprophet> It's getting nastier too, I'm fixing a crash bug if you send it "}{" 23:44 < rom1504> when json is such an easy thing to parse https://github.com/rom1504/JsonConv/blob/master/source/parser.mly 23:45 < javaprophet> Why write a proper parser when you can hack it? :P 23:45 < javaprophet> (I love non-open-source projects because of this) 23:46 < rom1504> and that's why I hate non-open-source projects :p 23:47 < rom1504> btw mc chat has mojangson in the some field, I think the hoverevent 23:48 < javaprophet> Mojangjson sounds very concerning. 23:48 < rom1504> yeah, hoverevent for action == 'show_item' 23:48 < javaprophet> However, I'm not implementing anything but the visible text. 23:48 < rom1504> this is mojangson https://github.com/rom1504/node-mojangson/blob/master/grammar.jison :D 23:49 < Gjum> "liste" ;) 23:50 < rom1504> ah yeah, I copied some of the grammar from https://github.com/rom1504/JsonConv/blob/master/source/parser.mly , and this one was a school project, so : in french :p 23:54 < Meeeh> http://imgur.com/Qo5V6mu wat is that! :D 23:54 < javaprophet> I never seen the TeX or OCaml languages in there before. 23:54 < Meeeh> 1 FPS, yey 23:55 < javaprophet> Jesus, that looks cool. 23:56 < Meeeh> yeach, and you don't see anything except that, and you have 1fps :D --- Day changed dim. janv. 03 2016 00:00 < Meeeh> http://imgur.com/a/Bi8iy usable with smaller radius, but still, not for playing :D 00:02 < javaprophet> Are those guardians, Meeeh? 00:02 < Meeeh> javaprophet, they are, but effect isn't 00:02 < Meeeh> this is CloudEffect entity with "mobappearance", 41 as particle id 00:03 < javaprophet> Aah, I see. 00:03 < Meeeh> and it is weird, as this particle isn't in place of spawn 00:03 < javaprophet> I'm writing a headless bot, so I've never played with particles. 00:03 < Meeeh> but as long as you are in chunks where this entity is, you can't see anything except that effect 00:03 < javaprophet> I figure your writing a server? 00:03 < Meeeh> yep 00:04 < javaprophet> Nice 00:08 < Meeeh> they changed anything about chat packets (action messages maybe)? 00:09 < javaprophet> In 1.9? Not documented on the wiki. 00:09 < Meeeh> every action message kick client from game, with malformed JSON exception ;/ 00:09 < rom1504> no idea, never tried it 00:09 < rom1504> ah 00:09 < rom1504> actually I know 00:09 < rom1504> you need to send json for every chat message now 00:09 < Meeeh> I know that it use JSON 00:09 < Meeeh> all my messages use json 00:09 < rom1504> can't just send a string without quote 00:10 < rom1504> in all packets with "chat" type ? 00:10 < Meeeh> this.broadcastMessage(position, new TextComponent(str)); yep 00:10 < rom1504> yeah but for example, in the disconnect packet 00:11 < rom1504> http://wiki.vg/Protocol#Disconnect 00:11 < Meeeh> didn't checked, but disconnect isn't crashing anything 00:11 < rom1504> ah it's not documented in pre-release page 00:12 < rom1504> Meeeh: well are you sure ? my problem was some random other problem was triggering a disconnect, which was not sending json, the vanilla client displayed that json error thingy 00:12 < rom1504> Meeeh: you get the json error when sending any chat messages ? (and only then) 00:12 < Meeeh> yeach, it must be that, meh, I will debug and see how this json looks just before send 00:12 < Meeeh> only action chat messages 00:13 < rom1504> ah okay 00:13 < Meeeh> but they use this same system as other, just other enum value 00:13 < rom1504> well it's weird it's saying the json is wrong, aren't you using a lib to generate the json ?? 00:14 < Meeeh> GSON, my chat API is simillar to spigot one, but with some changes, addons, etc, like replace method and other usless stuff 00:15 < Meeeh> nah, even "/say:action test" kick all players 00:15 < Meeeh> use JsonReader.setLentient(true) to accept malformed JSON, at line 1, col 2. meh 00:16 < rom1504> can GSON produce non-json ? 00:16 < rom1504> 1.9 only parse real json now I think 00:16 < rom1504> (with quotes and all) 00:17 < rom1504> (not Lenient) 00:18 < Meeeh> oh, interesting, it seems to only produce simple string 00:18 < Meeeh> without all other stuff, ugh 00:18 < javaprophet> That's mildly concerning, I might need a 2nd monstrosity to cover old style chat until 1.9 rolls around fully... 00:19 < Meeeh> yeach 00:20 < Meeeh> if chat don't have any format then it use return new JsonPrimitive(src.getText()); :D 00:20 < Meeeh> so yeach, that is a issue, thanks rom1504 00:21 < Meeeh> yey, works again! :D 00:22 < EqDev> Anybody familiar with writing uncompressed packet headers to bytebufs when dealing with the protocol? 00:23 < javaprophet> Almost everyone, I assume, what's your issue? 00:24 < EqDev> I write packet data to a #1 bytebuf. In #2 bytebuf I right the packet length + id and then the packetID. Then I write #1 too #2. That doesnt work. But in #1 when I write the packetid and not in #2, it works 00:25 < EqDev> Let me pastebin it if that didnt make sense xd 00:25 < javaprophet> Has the server sent the compression packet? 00:25 < EqDev> nope this is all before it 00:25 < EqDev> just for status 00:26 < javaprophet> Alright, the packet format before is a varint length, varint id, and then the body iirc. 00:26 < javaprophet> length DOES include id, I believe. 00:26 < EqDev> writeVarInt32(header, data.readableBytes() + packetOut.getId()); 00:26 < EqDev> ^ Thats the first field 00:26 < EqDev> Codec.writeVarInt32(header, packetOut.getId()); 00:27 < EqDev> Thats second. 00:27 < EqDev> Then data writes to the header 00:27 < EqDev> That doesnt work. When I write the packetid to the data, that works. 00:27 < Meeeh> what are you doing? 00:28 < javaprophet> Are you writing the length? 00:28 < EqDev> Trying to send a handshake packet along with ping and request 00:28 < EqDev> Ye 00:28 < EqDev> Codec.writeVarInt32(header, data.readableBytes() + packetOut.getId()); 00:28 < javaprophet> Wireshark it and make sure you didn't mess it up, I suppose. 00:29 < javaprophet> Oh, your adding the ID to the length. 00:29 < javaprophet> Get the length of the VarInt for ID, then add it to body length. 00:30 < EqDev> Know any utils to get the varint? 00:30 < EqDev> Or should I just write it to a bytebuf and get those bytes and add it to the body length 00:30 < javaprophet> Look at Vanilla MC's code in MCP, it has all the answers. 00:30 < javaprophet> That will also work I think. 00:30 < javaprophet> I don't personally use ByteBufs... 00:31 < EqDev> nope it works looks like it 00:31 < Meeeh> https://hasteb.in/lekekonoqe.coffee I use that to get size, I know that there is way with loop and bite shifts, but this is claner and faster for me :P 00:31 < EqDev> https://gyazo.com/5c5f708983236e1f530360fb894563f6 00:31 < Meeeh> oh, maybe that will be more clean witout that magic vaules 00:31 < EqDev> lol 00:32 < EqDev> both work tho correct? 00:33 < EqDev> Your method should do the same as what I did Meeeh 00:33 < javaprophet> "@SuppressWarnings("MagicNumber")" I've never seen such a warning... 00:33 < javaprophet> Yes, EqDev. 00:33 < Meeeh> I use that as I allocate buffers manualy using estaminated size of every packet :D 00:34 < EqDev> weird 00:34 < EqDev> Codec.writeVarInt32(header, varintSize(packetOut.getId())); 00:34 < Meeeh> as I don't like allocting 512 bytes for 5 byte packet that is send 1000 times per second 00:34 < EqDev> I use that for the id and it doesnt work anymore 00:34 < javaprophet> I just use ByteArrayOutputStreams with DataOutputStreams on top w/ some helper write functions like mc.writeVarInt 00:34 < Meeeh> this is only size of varint 00:34 < EqDev> It worked when I did: 00:34 < EqDev> Codec.writeVarInt32(header, packetOut.getId()); 00:34 < EqDev> ohhhh 00:35 < Meeeh> byteSize + varintSize, then packet id, and data. 00:35 < EqDev> still weird. Codec.writeVarInt32(header, t.readableBytes()); still not working 00:35 < EqDev> ^ thats packet id 00:35 < javaprophet> Fire up wireshark and verify what the issue is. 00:35 < rom1504> any benefit in not using https://github.com/Steveice10/MCProtocolLib ? 00:35 < javaprophet> Give us a hex dump of the connection. 00:36 < javaprophet> It uses maven, so it'll probably be a pain to set up. 00:36 < EqDev> nvr herad of wireshark 00:36 < Meeeh> Codec.writeVarInt32(header, packetDataSize + varintSize(packetID)); 00:36 < Meeeh> ec.writeVarInt32(header, packetID); 00:36 < Meeeh> and then write packet data 00:36 < javaprophet> It's free, google it. It allows you to snoop on connections. 00:36 < EqDev> yeah that works 00:37 < EqDev> Meeeh: that works. I thought I have to get the varint of packet.id for the id? 00:37 < EqDev> not just write the int 00:37 < Meeeh> ah 00:37 < Meeeh> but 00:37 < Meeeh> ".writeVarInt32" 00:37 < Meeeh> isn't that for varint already? :D 00:37 < EqDev> OHHHHHHHH 00:37 < EqDev> braindead XD 00:38 < EqDev> thanks guys 00:38 < EqDev> ill try out wireshark btw 00:38 < javaprophet> It's the best for debugging protocol issues, IMO. 00:40 < Meeeh> nah, too lazy for that, I always look into NMS code to find differences xD 00:40 < EqDev> good. Because I have 1 more issue. The request and ping packet doesnt work with the packet id in the header. works perfectly without it 00:41 < EqDev> just installed wireshark 00:42 < EqDev> any user guide to setting this up with a connection? 00:42 < javaprophet> Lots of stuff on google, select a network adapter and the filter is similar to a java if statement. 00:44 < rom1504> "It uses maven, so it'll probably be a pain to set up." Lol 00:44 < rom1504> you seriously don't use a package manager then ? 00:44 < javaprophet> Nope, I don't use any libraries usually. 00:44 < javaprophet> In java atleast, in C, I use a few. 00:45 < EqDev> okay I filtered it to port 25565 00:45 < javaprophet> Run a ping and see what happens. Do it again from the vanilla client, and compare. 00:45 < EqDev> I see 4 sources 00:45 < javaprophet> I usually right click on a packet in the connect, and click follow TCP connection, then check hex dump or some similar. 00:47 < EqDev> How do we know which source is correct 00:47 < javaprophet> Don't run two at the same time. :P 00:47 < EqDev> wat 00:47 < EqDev> idk. I just started the sniffer and filters it with the port # 00:48 < javaprophet> I usually find one, load the hex dump, clear, and restart, then hex dump vanilla for instance. 00:48 < rom1504> and this is why so many companies hire java developers. So they can do lots of NIH :) 00:49 < EqDev> we are listening for the server correct? 00:49 < javaprophet> Definitely not, but I enjoy it in my personal projects. :P 00:49 < EqDev> wat 00:51 < rom1504> just in that not so populated chan, 3 people doing 3 separate java mc protocol lib, instead of working on a good one together :) 00:51 -!- Irssi: #mcdevs: Total of 142 nicks [1 ops, 0 halfops, 15 voices, 126 normal] 00:51 < EqDev> okay javaprophet I did it and I see tons of purple packets 00:56 < javaprophet> I don't recall seeing colors in wireshark... Look up a tutorial man. 00:57 < javaprophet> Mine has large monetary gain as a motivator, so I don't think I'd fit into an open source project with it.... :( 01:03 < EqDev> if client sends ping then request why does the wiki say request then ping 01:04 < javaprophet> I always thought it did request then ping. 01:04 < javaprophet> It's what my pinger does. 01:04 < EqDev> https://gist.github.com/zh32/7190955 01:04 < EqDev> That guy does it vice versa 01:08 < Meeeh> rom1504, not possible :P everyone have own idea to do it, so if I don't see any project simillar to my idea... :P And it is just fun to play around all that stuff 01:08 < Meeeh> also one will use cpp, one C, one Java, one Python, JavaScript, etc... 01:09 < javaprophet> I saw some project that was language-less the other day... 01:13 < Meeeh> i need to ask, why some project have bot here? 01:13 < javaprophet> You mean SpockBot(I think)? 01:13 < Meeeh> I'm not sure, but yes, but there was few other I think 01:14 < javaprophet> I think they asked someone @ http://wiki.vg/MCDevs/rules 01:14 < gamingrobot> ? 01:14 < rom1504> Meeeh: yes having one protocol lib by language is quite fine 01:14 < rom1504> having 15 is inefficient 01:14 < rom1504> waste of effort 01:15 < javaprophet> I kind of agree rom, if we all teamed up, I imagine we could all write an entire client, rendering and all. 01:17 < Meeeh> whateva, I making usless server not library xD I don't even know why I stared, just some lazy day, and instead of leaving all MC stuff and start do something normal, I stared my server project :D 01:17 < Meeeh> And I can't stop :< I like it :< 01:18 < javaprophet> I'm enjoying myself writing AI for things like factions-server domination. 01:18 < Meeeh> and hate, because I know that I will never finish it/make it usable :D 01:19 < javaprophet> Meeeh, if you implement everything & the craftbukkit api/NMS wrapper, you could make something awesome. 01:21 < Meeeh> javaprophet, implementing bukkit API may be possible, but not NMS wrapper :D I don't think that I will someday implement everything... 01:21 < Meeeh> Me vs team of Mojang 01:21 < javaprophet> Yes it is, export all the public functions, and then create the same package & classes & methods, then just make everything call methods from your server. 01:22 < Meeeh> people use a lot of refetcions here, including fields 01:22 < javaprophet> Hell, I could implement MC Forge into my client if I wanted to spend 40 hours on it. 01:22 < javaprophet> Then implement the fields! That will take testing to find, but it won't be an issue I don't think. 01:23 < Meeeh> I have plans to implement Bukkit API, but not craftbukkit/NMS, this is just impossible :D 01:23 < Meeeh> then you will have all data doubled 01:23 < javaprophet> To be honest, that's kind of disturbing they use that though.... 01:23 < Meeeh> 2x more ram needed 01:23 < javaprophet> Nah, just have compatible stuff. 01:24 < javaprophet> 95% of all the methods you can probably directly translate, others, may require more hackery, but I know it's possible. 01:24 < Meeeh> then it is better to start from NMS, like in CraftBukkit 01:24 < Meeeh> only edit NMS and adds own API 01:24 < javaprophet> Then it's obfuscated, and your not on an OS base! 01:24 < rom1504> ("if we all teamed up, I imagine we could all write an entire client" the point of a protocol lib is it can be server/client/proxy independant) 01:25 < javaprophet> I becoming more and more tempted to write my own Client & Server that I personally optimize, and see where it goes. 01:25 < Meeeh> javaprophet, more "real" version 01:26 < Meeeh> is to create some very hacky mappings that will edit plugins on load, and replace NMS fields reflection with your own fields, this same for methods etc, but even that :D you will have "job" for a year 01:27 < Meeeh> But If I will be able to implement bukkit API and ProtocolLib, then it should give me good start. 01:27 < javaprophet> No, just make a duplicate field with the NMS name, and make the NMS class extend your own but provide wrappers for the contents of the variable. 01:27 < javaprophet> If it's a primitive, no extra ram needed really! 01:28 < Meeeh> good luck, 1800 classes :D 01:28 < javaprophet> I'm thinking I should write my own game again, but I need one of those impossible-to-find GFX designers.... 01:28 < javaprophet> I bet I can do it in 300, but I'd rather make my own game and sell it first. 01:30 < javaprophet> (If anyone here is a 2D designer and/or 3D modeller, nows the time to speak up ;) ) 01:31 < Meeeh> the worst part with creating games, you need GFX :< 01:31 < Gjum> programmer art ftw! 01:31 < javaprophet> And for most games these days, modellers are even harder to find. 01:31 < javaprophet> My art has always been solid colors :P 01:32 < Meeeh> nah, just tell OpenGL/DirectX to color lines, and it will be fine! say that this is matrix style game or something. 01:33 < javaprophet> Or maybe say it's a pixelly game like MC.... 01:33 < Meeeh> about models, do squares and circles and put names on them 01:33 < Meeeh> big ball with "dragon" on it 01:33 < Meeeh> and everyone is happy 01:34 < javaprophet> I played around making a 3D game engine a few years ago, I got it loading textured models and then left to go do server daemons for the next few years. :P 01:37 < Gjum> > big ball with "dragon" on it 01:37 < Gjum> had to think of agar.io 01:37 < javaprophet> I wrote a bot for that game too. :P 01:41 < Gjum> who didn't. link? 01:41 < javaprophet> Mine remained private, anything I might sell I leave closed source. 01:43 < Meeeh> weird 01:44 < Meeeh> If i rejoin on my server all that AreaEffectCoulds change to small black cloud, and I have no idea why 01:45 < Meeeh> like they loose thier metadata, but other entites like creeper keep it, o.O 01:46 < Meeeh> oh... because creepers etc have metadata in spawn packet, object don't 01:46 < javaprophet> Object data? 01:47 < javaprophet> Or use EntityMetadata I suppose. 01:48 < Meeeh> I mean that SpawnLivingEntity contains metadata, for object entites, like arrow etc, you need send it manually in second packet 01:49 < javaprophet> Ah, yea 01:51 < Meeeh> Yey, works 02:06 < Meeeh> There is one simple reason why I will never finish this