<<Prev Next>> Scroll to Bottom
Stuff goes here
L1[00:01:24] ⇨ Joins: Gregory (~Gregory@173-224-23-159.stanton.net)
L2[00:01:47] ⇦ Quits: iso2013 (~iso2013@c-67-176-10-45.hsd1.co.comcast.net) (Read error: Connection reset by peer)
L3[00:02:05] ⇦ Quits: Abastro (~Abastro@175.223.3.45) (Ping timeout: 384 seconds)
L4[00:03:40] ⇨ Joins: Hunterz (~hunterz@62.182.234.189)
L5[00:04:05] ⇨ Joins: JustWhoAmI (~admin@122.167.23.113)
L6[00:15:03] *** TTFTCUTS is now known as TTFT|Away
L7[00:26:22] ⇨ Joins: MrIbby (~MrIbby@173.85.200.171)
L8[00:30:14] ⇦ Quits: alekso56 (~znc@2001:464b:c2aa:0:745d:45ff:fe3b:a098) (Ping timeout: 183 seconds)
L9[00:33:40] ⇨ Joins: alekso56 (~znc@2001:464b:c2aa:0:745d:45ff:fe3b:a098)
L10[00:40:14] ⇦ Quits: Gregory (~Gregory@173-224-23-159.stanton.net) (Quit: ~ Trillian - www.trillian.im ~)
L11[00:44:16] *** fry|sleep is now known as fry
L12[00:45:21] ⇨ Joins: mallrat208 (~mallrat20@107-145-175-135.res.bhn.net)
L13[00:58:01] *** minecreatr is now known as Mine|dreamland
L14[01:12:35] ⇦ Quits: MrIbby (~MrIbby@173.85.200.171) (Quit: MrIbby)
L15[01:12:52] ⇨ Joins: MrIbby (~MrIbby@173.85.200.171)
L16[01:13:09] ⇦ Quits: MrIbby (~MrIbby@173.85.200.171) (Client Quit)
L17[01:17:45] ⇦ Quits: Upthorn (~ogmar@108-85-88-44.lightspeed.frokca.sbcglobal.net) (Ping timeout: 186 seconds)
L18[01:25:55] ⇦ Quits: McJty (~jorrit@94-225-203-206.access.telenet.be) (Quit: Leaving)
L19[01:37:49] *** Vigaro is now known as V
L20[01:45:39] ⇨ Joins: Upthorn (~ogmar@108-85-88-44.lightspeed.frokca.sbcglobal.net)
L21[01:49:47] ⇦ Quits: PitchBright (~PitchBrig@CPE00fc8d8a3ce3-CM00fc8d8a3ce0.cpe.net.cable.rogers.com) (Ping timeout: 206 seconds)
L22[01:52:45] ⇨ Joins: PitchBright (~PitchBrig@CPE00fc8d8a3ce3-CM00fc8d8a3ce0.cpe.net.cable.rogers.com)
L23[01:59:42] <MCPBot_Reborn> [TEST CSV] Pushing snapshot_20161015 mappings to Forge Maven.
L24[01:59:46] <MCPBot_Reborn> [TEST CSV] Maven upload successful for mcp_snapshot-20161015-1.10.2.zip (mappings = "snapshot_20161015" in build.gradle).
L25[01:59:56] <MCPBot_Reborn> Semi-live (every 10 min), Snapshot (daily ~3:00 EST), and Stable (committed) MCPBot mapping exports can be found here: http://export.mcpbot.bspk.rs/
L26[02:10:58] *** tterrag is now known as tterrag|ZZZzzz
L27[02:11:44] ⇦ Quits: kinggoesgaming (uid23106@id-23106.tooting.irccloud.com) (Quit: Connection closed for inactivity)
L28[02:15:08] <JustWhoAmI> ghz|afk, are you really afk? ;_;
L29[02:39:21] ⇦ Quits: AstralSorcerer (~AstralSor@128.151.114.121) (Remote host closed the connection)
L30[02:44:49] ⇨ Joins: Mathe172 (~Mathe172@80-66-227-127.dynamic.modem.fl1.li)
L31[02:48:11] ⇦ Quits: Mathe172 (~Mathe172@80-66-227-127.dynamic.modem.fl1.li) (Ping timeout: 183 seconds)
L32[02:49:23] ⇨ Joins: Abastro (~Abastro@39.7.54.28)
L33[02:52:59] *** PaleOff is now known as PaleoCrafter
L34[02:56:38] ⇨ Joins: Snapples (uid167569@id-167569.highgate.irccloud.com)
L35[02:59:27] ⇦ Quits: killjoy (~killjoy@71.65.228.225) (Quit: Leaving)
L36[03:07:46] ⇨ Joins: ThePsionic (~ThePsioni@ip5457f909.direct-adsl.nl)
L37[03:26:11] *** blood_ is now known as blood|sleep
L38[03:31:19] ⇨ Joins: Noppes (~Noppes@ip56530f2e.direct-adsl.nl)
L39[03:34:01] ⇨ Joins: Ipsis (~Ipsis@82-69-71-184.dsl.in-addr.zen.co.uk)
L40[03:42:20] ⇨ Joins: Samario (~Samario@cpc5-bigg3-2-0-cust219.9-2.cable.virginm.net)
L41[03:42:54] ⇦ Quits: ThePsionic (~ThePsioni@ip5457f909.direct-adsl.nl) (Read error: Connection reset by peer)
L42[03:43:40] *** AbrarSyed is now known as Abrar|gone
L43[03:45:24] ⇨ Joins: Hgrebnednav (~Hgrebnedn@d8d872a6e.access.telenet.be)
L44[03:52:37] ⇨ Joins: TechnicianLP (~Technicia@p4FE571E4.dip0.t-ipconnect.de)
L45[03:53:48] ⇦ Quits: alekso56 (~znc@2001:464b:c2aa:0:745d:45ff:fe3b:a098) (Ping timeout: 183 seconds)
L46[03:55:33] ⇦ Quits: JustWhoAmI (~admin@122.167.23.113) (Ping timeout: 384 seconds)
L47[03:55:56] ⇨ Joins: alekso56 (~znc@2001:464b:c2aa:0:745d:45ff:fe3b:a098)
L48[04:24:30] ⇨ Joins: JustWhoAmI (~admin@122.171.125.231)
L49[04:39:21] ⇦ Quits: samschaap (~samschaap@5469bf1f.cm-12-2c.dynamic.ziggo.nl) (Ping timeout: 186 seconds)
L50[04:43:31] ⇨ Joins: Jezza (~Jezza@92.206.4.86)
L51[04:46:19] ⇨ Joins: samschaap (~samschaap@5469BF1F.cm-12-2c.dynamic.ziggo.nl)
L52[04:51:49] *** MrKick|Away is now known as MrKickkiller
L53[04:54:44] <shartte> is there a way to get a diff of the snapshots btw?
L54[04:58:54] *** amadornes[OFF] is now known as amadornes
L55[04:59:13] ⇦ Quits: Everseeking (~Everseeki@pool-100-6-80-90.pitbpa.fios.verizon.net) (Quit: Big Gulps, huh? Alright... Welp, see ya later)
L56[04:59:28] ⇨ Joins: abab9579 (~Abastro@175.117.182.109)
L57[05:05:49] ⇦ Quits: Abastro (~Abastro@39.7.54.28) (Ping timeout: 384 seconds)
L58[05:16:03] <ghz|afk> JustWhoAmI: I was. I just woke up
L59[05:16:10] *** ghz|afk is now known as gigaherz
L60[05:27:18] ⇨ Joins: tschm (~tschm@xdsl-213-168-72-84.netcologne.de)
L61[05:30:27] <tschm> am i right in the assumption that it's not that a block can also be tile entity, but more that a tile entity is bound to a block? So they are two seperate objects and the block just references the tile entity
L62[05:30:53] <gigaherz> the way mc stores the world data
L63[05:30:57] <gigaherz> is that it has a "world grid"
L64[05:31:10] <gigaherz> split into chunks
L65[05:31:19] <gigaherz> each chunk bsing 16x16, with the 256 blocks height
L66[05:31:26] <gigaherz> being*
L67[05:31:32] <gigaherz> in each chunk
L68[05:31:41] <gigaherz> it has an array for the internal block IDs
L69[05:31:46] <gigaherz> an array for the block metadata bits
L70[05:31:58] <gigaherz> and a tileentity table
L71[05:32:28] <gigaherz> there's only one Block instance for ALL the blocks of one type
L72[05:32:33] <gigaherz> it's a "manager class"
L73[05:32:50] <gigaherz> so you can't store data in the Block class, it would be meaningless there
L74[05:32:55] <gigaherz> hence the blockstate system
L75[05:33:02] <gigaherz> but when you do need more data
L76[05:33:16] <gigaherz> you use a TileEntity, which is "attached to a position in the world grid"
L77[05:33:22] ⇦ Quits: Zed (~Zed@host-92-16-150-162.as13285.net) (Quit: Textual IRC Client: www.textualapp.com)
L78[05:33:28] ⇨ Joins: iari (~iari___@evana.futhark24.org)
L79[05:34:02] ⇨ Joins: Zed (~Zed@host-92-16-150-162.as13285.net)
L80[05:37:34] ⇨ Joins: Intektor (~Intektor@p5B27613B.dip0.t-ipconnect.de)
L81[05:37:59] <Intektor> gigaherz, you there?
L82[05:38:11] <tschm> alright gigaherz that was a pretty good explanation, thanks for that :) I guess i understand the basic concept now
L83[05:38:42] ⇨ Joins: KGS (~KGS@h-155-4-129-249.na.cust.bahnhof.se)
L84[05:38:58] <gigaherz> Intektor: yes
L85[05:39:14] <Intektor> I got that outline stuff working
L86[05:39:20] <gigaherz> yay
L87[05:39:33] <Intektor> but I cant find the scaling and translation which is defined in th model json
L88[05:39:41] <Intektor> and I need to apply that
L89[05:39:50] <Intektor> do you have a idea where I can find it
L90[05:40:00] <gigaherz> hmmmm
L91[05:40:21] <gigaherz> IBakedModel#getItemCameraTransforms
L92[05:40:55] <gigaherz> or more accurately
L93[05:41:09] <gigaherz> ForgeHooksClient#handleCameraTransforms
L94[05:41:54] <gigaherz> note that this will modify the GL matrix
L95[05:42:01] <gigaherz> if it's not what you want, then don't just CALL that ;P
L96[05:45:11] <Intektor> ah yes that scales it, but the translatrion is still a little bit offset
L97[05:45:17] <Intektor> I will take a look at that
L98[05:45:50] <Intektor> thanks man
L99[05:45:53] <gigaherz> np
L100[05:49:14] <Intektor> works perfect http://i.imgur.com/Ylmcu7R.png
L101[05:49:47] <Intektor> is there a way to get the model from the player? or from every entity and do the same?
L102[05:51:06] <gigaherz> nah entities work differently
L103[05:51:13] <gigaherz> they don't have BakeQuads
L104[05:51:17] <gigaherz> they draw directly to opengl
L105[05:51:20] <tschm> has the update() method changed its name tick() at some point? I am referring to ITickable. This is used in a wiki example
L106[05:51:27] <gigaherz> wrong tickable
L107[05:51:33] <tschm> ohh i see
L108[05:51:42] <gigaherz> there's two ITickables in different packages
L109[05:51:51] <Intektor> how can I get their boxes then?
L110[05:52:40] *** V is now known as Vigaro
L111[05:52:50] <gigaherz> no idea
L112[05:54:42] ⇦ Quits: Ipsis (~Ipsis@82-69-71-184.dsl.in-addr.zen.co.uk) (Ping timeout: 183 seconds)
L113[05:57:17] ⇦ Quits: alekso56 (~znc@2001:464b:c2aa:0:745d:45ff:fe3b:a098) (Ping timeout: 183 seconds)
L114[05:57:31] <Intektor> can I do it armor?
L115[05:58:06] <gigaherz> you can try to get the model the way the armor render layer does it
L116[06:00:40] ⇨ Joins: alekso56 (~znc@2001:464b:c2aa:0:745d:45ff:fe3b:a098)
L117[06:02:45] <tschm> hmm.. i changed a blockstate via world.setBlockState and the value for the tile entity is resetted
L118[06:02:59] ⇦ Quits: Hgrebnednav (~Hgrebnedn@d8d872a6e.access.telenet.be) (Ping timeout: 198 seconds)
L119[06:03:00] <tschm> its a simple "right click to increase a counter"
L120[06:03:33] <tschm> and i rotate the block every 5 secs and it become faster, when the counter increases
L121[06:03:57] <tschm> after each call of setBlockState the counter resets to 0
L122[06:06:52] <gigaherz> the TE has a .shouldRefresh
L123[06:07:02] <gigaherz> you should override that
L124[06:07:10] <gigaherz> to ignore blockstate changes that are not block changes
L125[06:07:19] <gigaherz> if none of your blockstate changes will be block changes
L126[06:07:36] <gigaherz> then return oldState.getBlock() != newSate.getBlock()
L127[06:08:41] <tschm> so with block state change you mean just a change in the respective block state properties. And with block change that a logical change or replacement of the block has happend?
L128[06:09:06] <gigaherz> yup
L129[06:09:10] <gigaherz> imagine that you have a block with subblocks
L130[06:09:13] <gigaherz> like log types
L131[06:09:21] <tschm> ohh wait.. you mean i should check if it is the same block id or still like the same block type
L132[06:09:26] <gigaherz> if someone does setBlockState(spruce)
L133[06:09:33] <gigaherz> when you had oak in the world
L134[06:09:48] <gigaherz> they share the same BlockLog class
L135[06:09:56] <gigaherz> but they have different TYPE or whatever
L136[06:09:58] <tschm> i see that would be a different block. but rotating the oak block would just be a blockstate update
L137[06:10:04] <gigaherz> exactly
L138[06:10:07] <gigaherz> both ARE blockstate updates
L139[06:10:16] <gigaherz> just one implies "different block" and the other does not
L140[06:10:32] <gigaherz> since forge doesn't know what your blocks behave like
L141[06:10:36] <gigaherz> it prefers to err on the paranoid side
L142[06:10:41] <gigaherz> and resets the TE every time by default
L143[06:10:43] <tschm> shouldRefresh() means that the tile entity is "deleted" or replaced with a fresh one? And this would be the default behaviour if the blockstate was changed?
L144[06:10:48] <gigaherz> you have to tell it otherwise
L145[06:11:00] <gigaherz> yup
L146[06:11:07] <tschm> ahh i see
L147[06:11:16] <gigaherz> if you return true from shouldRefresh, the TE gets deleted and recreated from scratch
L148[06:11:23] <tschm> i see
L149[06:12:00] <tschm> before you said that, i did "world.setBlockState(..); world.setTileEnity( getPos(), this);" hehe
L150[06:12:15] <tschm> would this actually work?
L151[06:12:48] <gigaherz> it may
L152[06:12:50] <gigaherz> but it's ugly
L153[06:12:57] <gigaherz> so never do that
L154[06:12:57] <gigaherz> ;P
L155[06:13:13] <tschm> alright :D
L156[06:13:25] <tschm> argh.. what's the comment hotkey for intellij?
L157[06:13:44] <gigaherz> no idea, i just do // ;P
L158[06:13:47] <PaleoCrafter> ctrl + /
L159[06:13:50] <gigaherz> or /* */
L160[06:14:21] <tschm> german key layout T.T
L161[06:14:26] <tschm> anyway, i cahnge it
L162[06:14:32] <PaleoCrafter> use your numpad :P
L163[06:19:05] ⇦ Quits: Naiten (Naiten@5.143.123.232) (Read error: Connection reset by peer)
L164[06:19:55] ⇨ Joins: Hgrebnednav (~Hgrebnedn@d8d872a6e.access.telenet.be)
L165[06:22:59] *** Jezza is now known as Jezza|AFK
L166[06:24:20] ⇨ Joins: founderio (~Thunderbi@p200300C4E3CC8100FADFE006F4355DE7.dip0.t-ipconnect.de)
L167[06:31:07] ⇨ Joins: Mathe172 (~Mathe172@80-66-227-127.dynamic.modem.fl1.li)
L168[06:45:20] ⇦ Quits: Mathe172 (~Mathe172@80-66-227-127.dynamic.modem.fl1.li) (Ping timeout: 183 seconds)
L169[06:46:21] ⇨ Joins: Naiten (Naiten@77.35.134.17)
L170[06:51:49] ⇨ Joins: Mathe172 (~Mathe172@80-66-227-127.dynamic.modem.fl1.li)
L171[06:52:58] *** mumfrey is now known as Mumfrey
L172[06:55:09] ⇦ Quits: Mathe172 (~Mathe172@80-66-227-127.dynamic.modem.fl1.li) (Ping timeout: 183 seconds)
L173[06:56:41] ⇨ Joins: Mathe172 (~Mathe172@80-66-227-127.dynamic.modem.fl1.li)
L174[07:00:09] ⇦ Quits: Mathe172 (~Mathe172@80-66-227-127.dynamic.modem.fl1.li) (Ping timeout: 186 seconds)
L175[07:01:03] ⇨ Joins: Mathe172 (~Mathe172@80-66-227-127.dynamic.modem.fl1.li)
L176[07:04:47] ⇦ Quits: Mathe172 (~Mathe172@80-66-227-127.dynamic.modem.fl1.li) (Ping timeout: 198 seconds)
L177[07:13:37] ⇦ Quits: Hgrebnednav (~Hgrebnedn@d8d872a6e.access.telenet.be) (Ping timeout: 206 seconds)
L178[07:17:22] ⇨ Joins: armctec (~Thunderbi@186.204.95.187)
L179[07:20:44] ⇦ Parts: armctec (~Thunderbi@186.204.95.187) ())
L180[07:31:02] ⇨ Joins: Girafi (Girafi@0x555178eb.adsl.cybercity.dk)
L181[07:31:41] <Roburrito> I found an unmapped field, do I report it and let someone else fix it or is there a way I can map it?
L182[07:32:45] *** Mine|dreamland is now known as minecreatr
L183[07:38:44] *** Jezza|AFK is now known as Jezza
L184[07:42:35] ⇦ Quits: KGS (~KGS@h-155-4-129-249.na.cust.bahnhof.se) (Ping timeout: 198 seconds)
L185[07:43:13] <g> Roburrito, iirc you'd want to look at MCP for that
L186[07:46:46] <Roburrito> Ah. Makes sense.
L187[07:50:38] ⇨ Joins: Fye (~Fye@dynamic-adsl-84-220-170-49.clienti.tiscali.it)
L188[07:52:09] ⇨ Joins: Ipsis (~Ipsis@82-69-71-184.dsl.in-addr.zen.co.uk)
L189[07:53:14] ⇦ Quits: Samario (~Samario@cpc5-bigg3-2-0-cust219.9-2.cable.virginm.net) (Ping timeout: 206 seconds)
L190[08:00:16] ⇨ Joins: Hgrebnednav (~Hgrebnedn@d8D872A6E.access.telenet.be)
L191[08:01:22] ⇨ Joins: sinkillerj (~sinkiller@nc-67-232-8-209.dhcp.embarqhsd.net)
L192[08:01:49] ⇦ Quits: founderio (~Thunderbi@p200300C4E3CC8100FADFE006F4355DE7.dip0.t-ipconnect.de) (Quit: founderio)
L193[08:02:05] ⇨ Joins: founderio (~Thunderbi@p200300C4E3CC8100FADFE006F4355DE7.dip0.t-ipconnect.de)
L194[08:08:30] ⇨ Joins: edr (~edr@d-65-175-180-73.cpe.metrocast.net)
L195[08:12:28] ⇦ Quits: tschm (~tschm@xdsl-213-168-72-84.netcologne.de) (Read error: Connection reset by peer)
L196[08:18:45] <gigaherz> anyone here played portal knights?
L197[08:28:45] <sham1> o/
L198[08:31:17] <sham1> 'Kay then
L199[08:40:45] ⇨ Joins: Cuby96 (~Cuby96@62.68.4.51)
L200[08:41:54] <gigaherz> sham1: DID YOU PLAY COOP?
L201[08:41:55] <gigaherz> oops
L202[08:41:59] <gigaherz> did you play coop?
L203[08:42:04] <sham1> Of wat
L204[08:42:09] <Cuby96> hi there, having an issue with the setUnlocalizedName method. i setup inside my class this.setUnlocalizedName("foo") but still my fluid shows as tile.null.name
L205[08:42:10] <gigaherz> portal knights
L206[08:42:14] <sham1> Umn
L207[08:42:24] <gigaherz> I got the game earlier
L208[08:42:29] <gigaherz> and my flatmate asked me about the coop feature
L209[08:42:32] <sham1> I don't have it
L210[08:42:42] <sham1> sadly
L211[08:43:04] <gigaherz> Cuby96: can you show it?
L212[08:43:49] <Cuby96> the code or ingame?
L213[08:43:53] <sham1> code
L214[08:44:51] <Cuby96> http://imgur.com/a/nuvdE
L215[08:44:53] <gigaherz> the code of your block, and the code where you call setUnlocalizedName, if it's elsewhere
L216[08:45:14] ⇨ Joins: Samario (~Samario@cpc5-bigg3-2-0-cust219.9-2.cable.virginm.net)
L217[08:45:19] <gigaherz> you didn't call setUnlocalizedName on the block, though
L218[08:45:48] <Cuby96> http://imgur.com/a/Z7i3u thats from the FluidOil class
L219[08:45:49] <sham1> I don't see the reason to have post your code in a screenshot
L220[08:46:13] <sham1> Also
L221[08:46:14] <gigaherz> Cuby96: not that, the BlockFluidOil
L222[08:46:25] <gigaherz> "tile.null.name" means you didn't call setUnlocalizedName on the BLOCK
L223[08:46:37] <sham1> Is ElectroniCraft the class with @Mod?
L224[08:48:00] <Cuby96> yes it is sham1, and @gigaherz BlockFluidClassic doesnt have the method setUnlocalizedName for whatever reason
L225[08:48:22] <sham1> But Block does
L226[08:48:32] <sham1> Also, why are you extending your @Mod-class?
L227[08:48:41] <sham1> You're not supposed to do that
L228[08:48:45] <gigaherz> Cuby96: ? Block does, so you should be able to call it regardless
L229[08:50:17] ⇦ Quits: sinkillerj (~sinkiller@nc-67-232-8-209.dhcp.embarqhsd.net) (Quit: またね)
L230[08:53:45] <Cuby96> ok nvm setBlockName did the job
L231[08:55:31] ⇨ Joins: otho (~otho@191.189.118.78)
L232[09:16:33] ⇨ Joins: MrIbby (~MrIbby@173.85.200.171)
L233[09:19:56] ⇦ Quits: Naiten (Naiten@77.35.134.17) (Read error: Connection reset by peer)
L234[09:50:12] ⇦ Quits: RichardG (~richardg8@201.37.241.91) (Ping timeout: 206 seconds)
L235[09:50:17] <Roburrito> Rendering is the same between 1.8 and 1.10, right?
L236[09:50:24] <Roburrito> I'm finding a lot of info on 1.8 but not 1.10
L237[09:50:41] <gigaherz> mostly
L238[09:50:48] <gigaherz> there's some differences
L239[09:50:56] <gigaherz> https://gist.github.com/williewillus/57d7093efa80163e96e0
L240[09:51:04] <gigaherz> https://gist.github.com/williewillus/e37edde85dc78d2e138c
L241[09:51:13] <gigaherz> the second link is differences between 1.8 and 1.9
L242[09:51:18] <gigaherz> 1.8 to 1.10 is practically the same
L243[09:51:20] <gigaherz> 1.9*
L244[09:52:56] <Roburrito> Danke
L245[09:53:35] <Roburrito> The big thing I noticed is that getItemColorFromStacks seems to be gone.
L246[09:53:41] <Roburrito> Which is what I was looking for.
L247[09:53:55] ⇦ Quits: CoreDuo (~CoreDuo@216.8.161.80) (Remote host closed the connection)
L248[09:53:56] <auenf> 1.10 was just content update to 1.9, iirc there was minor forge api changes
L249[09:54:13] <auenf> almost nothing
L250[09:54:24] <kenzierocks> Roburrito: it's like ItemColorHandler or something now
L251[09:54:48] <Roburrito> Ahhh
L252[09:55:04] <kenzierocks> IItemColor
L253[09:55:59] <Roburrito> Ar har
L254[09:56:19] <Roburrito> Now to trace the call patha nd create IEntityColor for my nefarious porpoises
L255[09:56:44] *** Mumfrey is now known as mumfrey
L256[09:58:32] ⇨ Joins: ThePsionic (~ThePsioni@ip5457f909.direct-adsl.nl)
L257[10:01:39] <sham1> auenf, at least between 1.9.4 and 1.10
L258[10:01:48] <sham1> When it comes to 1.10.2, stuff changed
L259[10:10:15] ⇨ Joins: NPException (~NPExcepti@cable-158-181-85-207.cust.telecolumbus.net)
L260[10:11:59] ⇦ Quits: TechnicianLP (~Technicia@p4FE571E4.dip0.t-ipconnect.de) (Remote host closed the connection)
L261[10:12:50] ⇦ Quits: MrIbby (~MrIbby@173.85.200.171) (Quit: MrIbby)
L262[10:13:44] ⇨ Joins: gr8pefish (~gr8pefish@24-121-241-166.flagcmtk01.res.dyn.suddenlink.net)
L263[10:15:33] ⇨ Joins: Brokkoli (~Brokkoli@p5B23C07C.dip0.t-ipconnect.de)
L264[10:29:57] <gigaherz> ... since when does vanilla generate pockets of silverfish outside strongholds?
L265[10:30:09] <sham1> Since forever
L266[10:30:16] <sham1> In extreme hills
L267[10:30:22] <gigaherz> are they like, only in ... oh
L268[10:30:24] <gigaherz> that explains it
L269[10:30:31] <gigaherz> I usually never play in extreme hills
L270[10:30:35] ⇦ Quits: VikeStep (~VikeStep@101.184.243.180) (Read error: Connection reset by peer)
L271[10:31:20] <sham1> Also, I wish Mojang added snowy biomes back and made them easier to find
L272[10:31:56] <sham1> I miss pre-1.7 Tundra
L273[10:32:57] <shadowfacts> does anyone have a link for a IDEA code formatter that adheres to Forge's standards?
L274[10:32:57] <Roburrito> I haven't really played post-1.7, what's changed?
L275[10:33:13] <shadowfacts> there was one a while ago, but I managed to lose it when I reinstalled IDEA
L276[10:35:01] <sham1> Well in 1.7, Mojang revamped the biome generation
L277[10:35:40] <sham1> Now it is more "realistic" in that the biomes gradually change to others to stimulate temper zones
L278[10:36:12] <sham1> It also means that finding certain kinds of biomes became much harder
L279[10:36:19] <gigaherz> shadowfacts: I don't know any, but I could export my personal settings if so
L280[10:38:34] <Roburrito> Ah, because it needs to be surrounded by the less-extreme version
L281[10:39:18] ⇨ Joins: Cooler (~CoolerExt@45.249.158.7)
L282[10:45:41] ⇨ Joins: RichardG (~richardg8@201.37.241.91)
L283[10:45:42] MineBot sets mode: +v on RichardG
L284[10:48:04] ⇨ Joins: KnightMiner (~KnightMin@107-1-23-59-ip-static.hfc.comcastbusiness.net)
L285[10:51:45] *** mumfrey is now known as Mumfrey
L286[10:59:54] ⇦ Quits: gr8pefish (~gr8pefish@24-121-241-166.flagcmtk01.res.dyn.suddenlink.net) (Quit: I'm gone)
L287[11:02:02] <Roburrito> Hokay, I think I may have just sprinted off in a bad direction.
L288[11:02:17] <Roburrito> Items, blocks, biomes all have registeries, but entites do not?
L289[11:02:57] <Roburrito> Derp, found one.
L290[11:05:08] <Roburrito> Was thrown off by entity not having a RegistryDelegate field named delegate when messing with code.
L291[11:05:39] <kenzierocks> how are you registering your items/blocks/etc?
L292[11:05:55] <kenzierocks> just doublechecking that you're not messing directly with the Block.REGISTRY fields
L293[11:05:56] <gigaherz> entities are registered in a different way
L294[11:06:00] <gigaherz> because they aren't unique
L295[11:06:35] <gigaherz> (you can have many instances of your Entity class, unlike Block or Item, which have one instance for eahc registry entry)
L296[11:06:37] <Roburrito> Right now I'm trying to mess with rendering so I can have a grayscale texture on an entity and color like biome grass and such.
L297[11:07:26] <Roburrito> So I'm not registering anything ATM, but trying to reference the registry
L298[11:07:48] <gigaherz> uhm but entities have their own rendering code
L299[11:07:52] <gigaherz> they don't really need that
L300[11:07:59] <Roburrito> Ahhhh
L301[11:08:17] <Roburrito> No need for EntityColor?
L302[11:08:22] <gigaherz> you can just do it in the Renderer<T>
L303[11:08:39] <Roburrito> I will still want a common class so I'm not copying code.
L304[11:08:45] <Roburrito> But not need to do a registry.
L305[11:08:46] <Roburrito> Cool.
L306[11:13:06] ⇦ Quits: Xenose (webchat@pdf8753e1.tokynt01.ap.so-net.ne.jp) (Ping timeout: 195 seconds)
L307[11:17:55] <Cuby96> how can i create a fluid and simply give it another color nothing more special? i create a class for the fluid and the block for the fluid
L308[11:19:20] *** Vigaro is now known as V
L309[11:24:50] ⇨ Joins: armctec (~Thunderbi@186.204.95.187)
L310[11:31:08] ⇨ Joins: tschm (~tschm@xdsl-213-168-72-84.netcologne.de)
L311[11:41:45] ⇦ Quits: Cooler (~CoolerExt@45.249.158.7) (Ping timeout: 186 seconds)
L312[11:43:14] ⇨ Joins: Cooler (~CoolerExt@45.249.158.7)
L313[11:44:01] *** TTFT|Away is now known as TTFTCUTS
L314[11:51:33] ⇨ Joins: McJty (~jorrit@94-225-203-206.access.telenet.be)
L315[11:59:29] ⇦ Quits: armctec (~Thunderbi@186.204.95.187) (Read error: Connection reset by peer)
L316[12:00:03] ⇦ Quits: Jezza (~Jezza@92.206.4.86) (Ping timeout: 384 seconds)
L317[12:01:04] <Roburrito> Oh.
L318[12:01:34] <Roburrito> I was thinking an interface or a separate object for the rendering for common code. I'm dumb.
L319[12:01:54] <Roburrito> Abstract class that extends RenderLiving
L320[12:02:58] <Roburrito> But then I'd need an interface on my entity classes?
L321[12:03:04] ⇨ Joins: Mattizin (~mattizin@p57AF4BE1.dip0.t-ipconnect.de)
L322[12:03:55] <Roburrito> Because .hasLayeredTextures() is not a method in Entity
L323[12:04:08] <gigaherz> but it is in your base class?
L324[12:07:09] <JustWhoAmI> gigaherz, can I pm you?
L325[12:07:27] <gigaherz> I'd rather not, unless you want to say something private and personal
L326[12:07:45] <JustWhoAmI> alright then
L327[12:08:15] ⇨ Joins: kokolihapihvi (webchat@a91-154-117-107.elisa-laajakaista.fi)
L328[12:10:38] <JustWhoAmI> is there a ts/discord for the irc?
L329[12:11:58] <Roburrito> I am presently implementing my entities as being children of vanilla entities.
L330[12:12:14] <Roburrito> As I want things outside my mod to treat them as if they were the vanilla entity
L331[12:12:26] <Roburrito> So I have EntityEquine extends EntityHorse
L332[12:13:45] ⇦ Quits: RichardG (~richardg8@201.37.241.91) (Ping timeout: 186 seconds)
L333[12:14:33] <JustWhoAmI> gigaherz, could you walk me through all the capability related parts in this file:https://github.com/gigaherz/Ender-Rift/blob/master/src/main/java/gigaherz/enderRift/generator/TileGenerator.java
L334[12:16:04] <gigaherz> lines 40-57 are a custom IItemHandler, for the item capability
L335[12:16:31] <gigaherz> lines 64-75 are a slightly customized IEnergyStorage for the energy capability
L336[12:16:59] <Roburrito> But if I make abstract class RenderLivingColored extends RenderLiving, I would not be able to rely on the <EntityType> casting to make it work.
L337[12:17:06] <gigaherz> lines 79-90 are the special Tesla wrappers (will remain null if Tesla isn't present)
L338[12:17:29] <Roburrito> So I guess I do need to just copy the code across all my RenderEntity classes, rather than having a parent class.
L339[12:17:32] <JustWhoAmI> gigaherz, so in 64-75 you use the rf api?
L340[12:17:38] <gigaherz> no not RF api
L341[12:17:48] <gigaherz> the integrated IEnergyStorage capability in forge
L342[12:18:05] <JustWhoAmI> forge added that?
L343[12:18:14] <gigaherz> yes, relatively recently
L344[12:18:16] <JustWhoAmI> hold on, I don't really understand
L345[12:18:33] <JustWhoAmI> like what's the difference between the rf api and this new "energy" system added by forge?
L346[12:19:19] ⇨ Joins: PolarizedIons (~Polarized@vauff.me)
L347[12:19:44] <gigaherz> the RF api is the crappy kind of api
L348[12:19:57] <gigaherz> where you do "extends TileEntity implements IEnergyWhatever"
L349[12:20:03] <gigaherz> it's not a capability at all
L350[12:20:08] <gigaherz> it's hardcoded into your class
L351[12:22:43] <gigaherz> (the main purpose of the capability system is to avoid "interface creep" where a single TE has a few dozen interfaces)
L352[12:23:01] <JustWhoAmI> right
L353[12:23:03] <JustWhoAmI> but this api
L354[12:23:15] <JustWhoAmI> added by forge, is compatible with rf?
L355[12:23:21] ⇦ Quits: Fye (~Fye@dynamic-adsl-84-220-170-49.clienti.tiscali.it) (Ping timeout: 186 seconds)
L356[12:23:27] <gigaherz> not really
L357[12:23:34] <gigaherz> xcept that it's meant to use the same units
L358[12:23:42] <gigaherz> so 1 RF == 1 "forge energy api units"
L359[12:23:44] *** blood|sleep is now known as blood_
L360[12:23:55] <gigaherz> but a mod that lives in the past
L361[12:24:00] <gigaherz> and implements only the RF api
L362[12:24:06] <gigaherz> will NOT be able to talk to your blocks
L363[12:24:46] <kenzierocks> there could be a mod that converts between the two
L364[12:24:59] <gigaherz> there's plenty of mods with energy "pipes"
L365[12:24:59] ⇦ Quits: Ipsis (~Ipsis@82-69-71-184.dsl.in-addr.zen.co.uk) (Ping timeout: 384 seconds)
L366[12:25:17] <gigaherz> that support tesla and rf, and I guess will now support the forge one
L367[12:25:23] <gigaherz> the idea, IMO
L368[12:25:31] <gigaherz> if you are making a mod with wires/pipes
L369[12:25:36] <gigaherz> support everything you can in the wires
L370[12:25:43] <gigaherz> but for machines and generators
L371[12:25:48] <gigaherz> limit them to either only the forge one
L372[12:25:52] <gigaherz> or forge+Tesla
L373[12:26:08] <JustWhoAmI> but see
L374[12:26:39] <JustWhoAmI> the problem arises when you see, that there is little compatibility between the rf based mods, and the tesla/forge based ones
L375[12:26:42] <tschm> for an inventory like this (http://i.imgur.com/g5yIlgc.png), does the texture has to have the slots as well? Or are the dark grey slots added when adding slots via code?
L376[12:26:48] <gigaherz> JustWhoAmI: look
L377[12:26:58] <gigaherz> fuck mods that use RF in 1.10.2
L378[12:27:01] <gigaherz> that simple.
L379[12:27:11] <gigaherz> same for ANY api that uses interfaces when it could be using capabilities
L380[12:27:16] <tschm> or is it a simple a slot just marks a interactable/clickable area and evrything visual you have to provide through the texture?
L381[12:27:30] <JustWhoAmI> I understand
L382[12:27:36] <JustWhoAmI> and I completely agree
L383[12:28:19] <JustWhoAmI> a genuine question
L384[12:28:27] <JustWhoAmI> how hard would it be for experienced modders
L385[12:28:37] <JustWhoAmI> to convert their rf based mods to tesla/forge?
L386[12:28:56] ⇨ Joins: RichardG (~richardg8@201.37.241.91)
L387[12:28:57] MineBot sets mode: +v on RichardG
L388[12:29:20] <gigaherz> 10 minutes' work, tops
L389[12:29:26] <gigaherz> maybe big mods like buildcraft would need an hour
L390[12:29:54] <JustWhoAmI> then what prevents them from doing so?
L391[12:30:11] <JustWhoAmI> why haven't we seen a large scale transition to the new system?
L392[12:30:18] <gigaherz> lazyness?
L393[12:30:26] <gigaherz> also most mods do support Tesla
L394[12:30:57] <JustWhoAmI> oh
L395[12:33:00] <kenzierocks> also, they might not like new apis for whatever reason
L396[12:33:06] <kenzierocks> people are strang
L397[12:33:35] ⇦ Quits: KnightMiner (~KnightMin@107-1-23-59-ip-static.hfc.comcastbusiness.net) (Ping timeout: 198 seconds)
L398[12:35:18] <gigaherz> some people don't quite understand capabilities
L399[12:35:22] <gigaherz> so they think "capabilities are bad"
L400[12:35:25] <gigaherz> so they refuse to use them
L401[12:35:53] <gigaherz> (and some of them don't understand capabilities simply because they dislike joining IRC and asking)
L402[12:36:25] <JustWhoAmI> I'm happy that I'm atleast trying to understand
L403[12:36:36] <gigaherz> you understand plenty, already
L404[12:36:50] <JustWhoAmI> that's good
L405[12:37:36] <gigaherz> I like to think I'm quite smart, and it took me a while to figure them out (although I didn't have any docs at the time -- I decided to learn how caps work in order to write the docs, in fact)
L406[12:37:38] ⇨ Joins: Inusua1Z (~InusualZ@adsl-72-50-87-22.prtc.net)
L407[12:38:39] <JustWhoAmI> that's awesome!
L408[12:39:18] <JustWhoAmI> one second
L409[12:39:41] <JustWhoAmI> @ gigaherz , if tesla is not present
L410[12:39:57] <JustWhoAmI> how does your block exactly handle power?
L411[12:40:02] <JustWhoAmI> TE*
L412[12:40:46] ⇦ Quits: tschm (~tschm@xdsl-213-168-72-84.netcologne.de) (Quit: RL is waiting)
L413[12:40:52] <gigaherz> check my hasCapability and getCapability methods
L414[12:41:35] <gigaherz> the block's primary energy api is forge's
L415[12:41:38] <JustWhoAmI> you've got two for tesla
L416[12:41:42] <gigaherz> yes
L417[12:41:59] <gigaherz> Tesla has 3 separate capabilities, Consumer, Producer, and Holder
L418[12:42:06] <gigaherz> Consumer tells others the block can receive energy
L419[12:42:13] <gigaherz> Producer tells others it can send energy
L420[12:42:19] <gigaherz> and Holder tells others how much energy it has inside
L421[12:42:39] ⇦ Quits: Samario (~Samario@cpc5-bigg3-2-0-cust219.9-2.cable.virginm.net) (Quit: You think you are above consequences.)
L422[12:42:44] <gigaherz> meanwhile, the internal energy capability in forge is just a single interface, with everything in one
L423[12:42:45] ⇦ Quits: InusualZ (Hexchat@ipv6.4.chi.elitebnc.org) (Quit: EliteBNC - http://elitebnc.org (User-Removal: deleted by account holder))
L424[12:42:48] <Roburrito> https://mcforge.readthedocs.io/en/latest/datastorage/capabilities/
L425[12:43:13] *** Inusua1Z is now known as InusualZ
L426[12:43:27] ⇨ Joins: Fye (~Fye@dynamic-adsl-84-220-170-49.clienti.tiscali.it)
L427[12:43:35] ⇦ Quits: Fye (~Fye@dynamic-adsl-84-220-170-49.clienti.tiscali.it) (Remote host closed the connection)
L428[12:43:58] <Roburrito> Is there something I can read on what capabilities can be made to do beyond inventories?
L429[12:44:01] <Roburrito> Or is inventory what they do/
L430[12:44:43] <gigaherz> capabilies doe ANYTHING
L431[12:44:48] <gigaherz> they are just "attachable features"
L432[12:44:54] <gigaherz> do*
L433[12:45:08] <gigaherz> forge now has 3 integrated capabilities
L434[12:45:13] <gigaherz> IItemHandler, for inventories
L435[12:45:21] <gigaherz> IFluidHandler, for fluids
L436[12:45:32] <gigaherz> and IEnergyStorage, for RF-like energy
L437[12:45:40] <gigaherz> but the possibilities are endless
L438[12:46:11] <Roburrito> Read those base classes to figure this shit out?
L439[12:46:21] <gigaherz> read the docs first
L440[12:46:36] <gigaherz> other reading: https://gist.github.com/williewillus/c8dc2a1e7963b57ef436c699f25a710d
L441[12:46:48] <gigaherz> and an alternative explanation: https://gist.github.com/gigaherz/2dbaaff11e32940cc9500e863071b69b
L442[12:47:12] <gigaherz> note that this is fictional, what I explain there is NOT a real-life story, it's just an explanation to make things easy to understand
L443[12:48:04] ⇦ Quits: InusualZ (~InusualZ@adsl-72-50-87-22.prtc.net) (Ping timeout: 206 seconds)
L444[12:48:52] <JustWhoAmI> gigaherz, ITEM_HANDLER_CAPABILITY is for the IItemHandler thing?
L445[12:49:05] <gigaherz> yes
L446[12:49:16] <JustWhoAmI> right
L447[12:49:18] <gigaherz> although you can just create your own static field, with @CapabilityInject
L448[12:49:26] <JustWhoAmI> I have a few questions
L449[12:49:27] <gigaherz> and you'll receive the same reference
L450[12:49:29] <JustWhoAmI> First up:
L451[12:49:51] <Roburrito> Thanks, giga
L452[12:51:37] ⇨ Joins: InusualZ (~InusualZ@adsl-64-237-235-48.prtc.net)
L453[12:52:09] <JustWhoAmI> What is the difference between: 1) the @CapabilityInject annotation 2) the AttachCapabilities/Item.initCapabilities methods 3) CapabilityManager.INSTANCE.register() ? To me, all these seem to do the same thing - attach capabilities to objects @ gigaherz
L454[12:53:05] <gigaherz> lol no
L455[12:53:13] ⇦ Quits: Cooler (~CoolerExt@45.249.158.7) (Ping timeout: 186 seconds)
L456[12:53:21] <gigaherz> you first have to understand that there's two separate things
L457[12:53:21] <JustWhoAmI> Could you explain?
L458[12:53:22] <gigaherz> the Capability
L459[12:53:28] <gigaherz> and the capability instance for a specific object
L460[12:54:01] <gigaherz> there is ONE and only one Capability object that serves as both a "helper", and an identifier
L461[12:54:11] <Roburrito> Oh snap. Could a capability override rendering?
L462[12:54:14] <gigaherz> for eachregistered capability interface
L463[12:54:15] <JustWhoAmI> is that the defaultimpl?
L464[12:54:19] <gigaherz> no
L465[12:54:27] <gigaherz> the default impl is one of the functions inside the Capability
L466[12:54:50] <gigaherz> Roburrito: how would it do that?
L467[12:55:02] <Roburrito> You said it could do anything :P
L468[12:55:02] <JustWhoAmI> wait so what is this one and only one cap. object?
L469[12:55:04] <Roburrito> I have no idea.
L470[12:55:14] <Roburrito> Trying to find limits.
L471[12:55:16] <gigaherz> JustWhoAmI: okay you know how you have Block
L472[12:55:21] <gigaherz> that manages all the blocks in the world?
L473[12:55:26] <JustWhoAmI> yeah
L474[12:55:29] <gigaherz> and when you do Blocks.stone
L475[12:55:34] <gigaherz> it's THE stone block
L476[12:55:38] <gigaherz> and it will always be the same one
L477[12:55:46] <gigaherz> so you can compare with ==
L478[12:55:51] <JustWhoAmI> and all stone blocks in the world are like copies of it
L479[12:55:53] <JustWhoAmI> yeah?
L480[12:55:57] <gigaherz> not copies
L481[12:56:03] <gigaherz> literally THAT one object manages all of them
L482[12:56:17] <gigaherz> IBlockState.getBlock will always return the same Block
L483[12:56:19] <JustWhoAmI> Wait so one stone block object
L484[12:56:22] <JustWhoAmI> oh
L485[12:56:26] <JustWhoAmI> okay
L486[12:56:32] <gigaherz> same for items
L487[12:56:39] <gigaherz> there's ONE Item for all of the same item
L488[12:56:42] <gigaherz> Items.stick
L489[12:56:43] <JustWhoAmI> but
L490[12:56:46] <gigaherz> will always be Items.stick
L491[12:56:51] <JustWhoAmI> consider a pickaxe
L492[12:56:53] <gigaherz> no matter how many ItemStacks you create
L493[12:56:56] <JustWhoAmI> how can a single item
L494[12:57:08] <JustWhoAmI> manage so many pickaxes, with different durabilities?
L495[12:57:13] <gigaherz> because the durability, metadata, and NBT tags
L496[12:57:15] <gigaherz> are in the ItemStack
L497[12:57:16] <gigaherz> not in the Item
L498[12:57:17] <JustWhoAmI> oh
L499[12:57:20] <JustWhoAmI> but the item remains
L500[12:57:24] <JustWhoAmI> yeah that makes sense
L501[12:57:28] <JustWhoAmI> alright go on
L502[12:57:38] <gigaherz> same for capabilities.
L503[12:57:45] <gigaherz> you register a Capability
L504[12:57:52] <gigaherz> and when people call hasCapability and getCapability
L505[12:57:58] <gigaherz> the parameter they give you in the method
L506[12:58:04] <gigaherz> will always be that capability
L507[12:58:11] <gigaherz> so IEnergyStorage
L508[12:58:15] <gigaherz> is registered by forge itself
L509[12:58:33] <gigaherz> but no matter if you look at CapabilityEnergy.ENERGY_CAPABILITY
L510[12:58:45] <gigaherz> or in any other @CapabilityInject(IEnergyStorage.class)
L511[12:58:52] <gigaherz> it will be the same reference to the same Capability object
L512[12:59:20] <gigaherz> so when you do CapabilityManager.INSTANCE.register
L513[12:59:25] <gigaherz> forge will create this Capability object for you
L514[12:59:43] <gigaherz> and then it will scan the entire classpath for @CapabilityInject annotations
L515[12:59:50] <JustWhoAmI> but that registration
L516[12:59:51] <gigaherz> and any annotation that matches the capability, gets filled in
L517[12:59:55] <JustWhoAmI> is already done by forge right?
L518[13:00:04] <gigaherz> for IEnergyStorage, yes
L519[13:00:05] <JustWhoAmI> I don't need to register an already done Cap.
L520[13:00:07] <JustWhoAmI> ?
L521[13:00:09] <gigaherz> but for Tesla, the Tesla mod does it
L522[13:00:13] <JustWhoAmI> right
L523[13:00:19] <JustWhoAmI> any caps. I'd create
L524[13:00:21] <JustWhoAmI> I'd register
L525[13:00:21] <gigaherz> you only call .register if you create a brand new capability
L526[13:00:31] <JustWhoAmI> so hold on
L527[13:00:36] <JustWhoAmI> If I could use the object
L528[13:00:43] <JustWhoAmI> CapabilityEnergy.ENERGY_CAPABILITY
L529[13:00:49] <JustWhoAmI> or the object
L530[13:00:53] <JustWhoAmI> for any capability
L531[13:01:01] <JustWhoAmI> why would I ever use the annotation?
L532[13:01:13] <gigaherz> because a static field on the same class is faster
L533[13:01:20] <gigaherz> AND
L534[13:01:31] <gigaherz> because if you use the annotation, you don't have explicit references to the mod's classes
L535[13:01:42] <gigaherz> (annotations are discarded if they reference missing types)
L536[13:01:47] <diesieben07> "a static field on the same class is faster" - where does this come from?
L537[13:01:53] <gigaherz> lex keeps saying it
L538[13:02:03] <diesieben07> i mean... static fields are faster, yes
L539[13:02:09] <gigaherz> accessing a static from the same class you are in is faster than an external one
L540[13:02:11] <diesieben07> but i don't see why the location would matter
L541[13:02:11] <kenzierocks> no class lookup i assume
L542[13:02:21] <kenzierocks> but not like it should matter /that/ much
L543[13:02:24] <diesieben07> it has to look-up the class-object anyways
L544[13:02:30] <kenzierocks> sounds like a micro-optimization
L545[13:02:36] <gigaherz> yeah hence why I don't follow it
L546[13:02:38] <diesieben07> hotspot implements static fields as instance fields on an internal class object
L547[13:02:48] <JustWhoAmI> that benefits your system right? the fact that annotations are discarded if they ref. missing types... that allows you to avoid hard dependency on tesla?
L548[13:02:51] <diesieben07> but it trusts them so it can inline... but that it does evne with "foreign" fields
L549[13:02:58] <gigaherz> JustWhoAmI: exactly
L550[13:03:14] <gigaherz> otherwise
L551[13:03:19] <gigaherz> I would have to use reflection tricks
L552[13:03:22] <gigaherz> and Loader.isModLoaded
L553[13:03:30] <gigaherz> to avoid initializing the type if the mod doesn't exist
L554[13:03:31] <JustWhoAmI> gigaherz, but then I don't see you use the annotation in that file..?
L555[13:03:57] <gigaherz> because I have a custom set of wrappers
L556[13:04:12] <gigaherz> in here
L557[13:04:13] <gigaherz> https://github.com/gigaherz/Ender-Rift/tree/master/src/main/java/gigaherz/enderRift/plugins/tesla
L558[13:04:15] <diesieben07> you still have to do a check for null then...
L559[13:04:17] <diesieben07> on the field
L560[13:04:27] <gigaherz> I do
L561[13:04:34] <gigaherz> anyhow, this is how it works
L562[13:04:37] <gigaherz> I have this base class
L563[13:04:37] <gigaherz> https://github.com/gigaherz/Ender-Rift/blob/master/src/main/java/gigaherz/enderRift/plugins/tesla/TeslaControllerBase.java
L564[13:04:42] <gigaherz> which by default, returns null
L565[13:04:47] ⇨ Joins: TechnicianLP (~Technicia@p4FE571E4.dip0.t-ipconnect.de)
L566[13:04:57] <gigaherz> and then this class
L567[13:05:08] <gigaherz> that gets executed through the annotation
L568[13:05:08] <gigaherz> https://github.com/gigaherz/Ender-Rift/blob/master/src/main/java/gigaherz/enderRift/plugins/tesla/TeslaController.java
L569[13:05:17] <gigaherz> notice that I have the method annotation, rather than the field one
L570[13:05:17] ⇦ Quits: NPException (~NPExcepti@cable-158-181-85-207.cust.telecolumbus.net) (Quit: Leaving)
L571[13:05:29] <gigaherz> which means the method gets called on registration, with the cap passed as a parameter
L572[13:05:30] <diesieben07> anyways, i am not going into this again.
L573[13:05:41] <diesieben07> i have stated many times what i think of the annotation
L574[13:05:48] <gigaherz> yeah
L575[13:05:53] <gigaherz> I'm explaining it to JustWhoAmI ;P
L576[13:05:58] <diesieben07> yeah i know
L577[13:06:10] ⇦ Quits: ThePsionic (~ThePsioni@ip5457f909.direct-adsl.nl) (Quit: Leaving)
L578[13:06:21] <JustWhoAmI> So gigaherz , your TeslaControllerBase
L579[13:06:31] <gigaherz> I'm certain now, my design is overcomplicated
L580[13:06:35] <gigaherz> and I could simplify it. XD
L581[13:06:40] <JustWhoAmI> haha
L582[13:06:56] <gigaherz> but it works, so...
L583[13:07:58] <JustWhoAmI> So gigaherz , your TeslaControllerBase
L584[13:08:03] <JustWhoAmI> it has getCapability
L585[13:08:10] <JustWhoAmI> but doesn't implement ICapabilityProvider?
L586[13:08:30] <gigaherz> yeah because it isn't
L587[13:08:56] <gigaherz> it doesn't get the actual "capability"
L588[13:09:01] <gigaherz> it gets the "Capability" (capital c)
L589[13:09:05] <gigaherz> https://github.com/gigaherz/Ender-Rift/blob/master/src/main/java/gigaherz/enderRift/generator/TileGenerator.java#L87
L590[13:09:07] <gigaherz> like so
L591[13:09:34] ⇨ Joins: quadraxis (~quadraxis@cpc77293-basf12-2-0-cust699.12-3.cable.virginm.net)
L592[13:10:15] <JustWhoAmI> no... I didn't understand
L593[13:10:21] <gigaherz> okay so
L594[13:10:26] <gigaherz> gah
L595[13:10:39] <JustWhoAmI> sorry to irritate
L596[13:10:39] <gigaherz> this would be complicated enough WITHOUT having two things referred to by the same name
L597[13:10:46] <gigaherz> i'm not irritated at you ;P
L598[13:10:53] <JustWhoAmI> :D
L599[13:11:07] <gigaherz> let's do some aliasing here
L600[13:11:19] <gigaherz> from now on, when I talk about the Capability, i will say Manager
L601[13:11:32] <gigaherz> and when I refer to the capability, I will say instance
L602[13:11:40] <JustWhoAmI> wait wait
L603[13:11:52] <JustWhoAmI> what's the difference between the capital C and the other one?
L604[13:12:10] <gigaherz> remember what we talked about about Block and Item?
L605[13:12:29] <JustWhoAmI> yeah
L606[13:12:31] <gigaherz> "Capability" is equivalent to Block/Item
L607[13:12:37] <gigaherz> "capability" is equivalent to ItemStack/TileEntity
L608[13:12:54] <gigaherz> the one with a capital C is a manager/identifier
L609[13:13:00] <JustWhoAmI> the one, central instance, controlling every other "c"apability is "C"apability?
L610[13:13:11] <diesieben07> > "capability" is equivalent to ItemStack/TileEntity
L611[13:13:12] <diesieben07> no
L612[13:13:23] <JustWhoAmI> k my head hurts
L613[13:13:24] <diesieben07> those are capability *providers*
L614[13:13:28] <gigaherz> diesieben07: nono
L615[13:13:29] <diesieben07> they provide capabilities
L616[13:13:35] <gigaherz> I mean how one Item, has many itemstacks
L617[13:13:40] <gigaherz> and one Block has many tileentities
L618[13:13:45] <diesieben07> that is... confusing :D
L619[13:13:47] <gigaherz> yes
L620[13:13:53] <gigaherz> which is why it's so fucking annoying to explain
L621[13:13:54] <gigaherz> xD
L622[13:14:17] <JustWhoAmI> oh tell me about it diesieben07 , trying to wrap my head around this system for the past two days xD
L623[13:14:17] ⇨ Joins: Kuraron (~DUX@HSI-KBW-46-223-0-70.hsi.kabel-badenwuerttemberg.de)
L624[13:14:31] <diesieben07> i meant giga, not the system :P
L625[13:14:38] <diesieben07> but the system is confusing (a bit), too
L626[13:14:45] <gigaherz> JustWhoAmI: the Capability is ITEM_HANDLER_CAPABILITY
L627[13:14:49] <gigaherz> the other one is the IItemHandler
L628[13:15:16] <JustWhoAmI> Right
L629[13:15:21] <JustWhoAmI> so what i said is correct
L630[13:15:26] <gigaherz> yes
L631[13:15:31] <gigaherz> so
L632[13:15:31] <JustWhoAmI> >the one, central instance, controlling every other "c"apability is "C"apability?
L633[13:15:34] ⇦ Quits: Meow-J (~Meow-J@45.32.34.121) (Remote host closed the connection)
L634[13:15:46] <gigaherz> if you want to obtain the inventory from an object
L635[13:15:49] <gigaherz> you'll do
L636[13:16:05] <gigaherz> if (object.hasCapability(ITEM_HANDLER_CAPABILITY, east))
L637[13:16:14] <diesieben07> the *C*apability is the identifier
L638[13:16:17] <gigaherz> handler = object.getCapability(ITEM_HANDLER_CAPABILITY, east);
L639[13:16:22] <gigaherz> so in that situation
L640[13:16:29] <gigaherz> the Capability it working as an identifier/key
L641[13:16:30] <diesieben07> *c*apability is the general concept of capabilities...
L642[13:16:37] <diesieben07> it has no specific meaning
L643[13:16:40] <diesieben07> imho
L644[13:16:46] <gigaherz> but the same class can also be used for other things
L645[13:16:46] <gigaherz> like
L646[13:16:53] <gigaherz> ITEM_HANDLER_CAPABILITY.getDefaultInstance()
L647[13:16:58] <gigaherz> ITEM_HANDLER_CAPABILITY.readNBT
L648[13:17:01] <gigaherz> ITEM_HANDLER_CAPABILITY.writeNBT
L649[13:17:12] <gigaherz> so it's also a manager
L650[13:17:17] <gigaherz> or a helper class
L651[13:17:23] <gigaherz> this ITEM_HANDLER_CAPABILITY
L652[13:17:28] ⇨ Joins: Meow-J (~Meow-J@45.32.34.121)
L653[13:17:29] <gigaherz> is of type "Capability<IItemHandler>"
L654[13:17:35] <gigaherz> to indicate that it works with IItemHandler instances
L655[13:17:41] ⇦ Quits: Mattizin (~mattizin@p57AF4BE1.dip0.t-ipconnect.de) (Ping timeout: 384 seconds)
L656[13:18:08] <gigaherz> to reduce the mental load
L657[13:18:15] <gigaherz> pretend that the annotation and the register methods don't exist
L658[13:18:21] <gigaherz> ignore them for now
L659[13:18:23] <JustWhoAmI> okay
L660[13:18:44] <JustWhoAmI> okay so let me explain
L661[13:18:53] <JustWhoAmI> correct my explanation as I go along
L662[13:18:57] <gigaherz> focus just on the fact that you have them ready-to-use in their respective static fields
L663[13:19:43] <JustWhoAmI> So:
L664[13:19:52] <JustWhoAmI> The 'C'apability
L665[13:19:59] <JustWhoAmI> is the identifier, the central object
L666[13:20:10] <gigaherz> yes
L667[13:20:11] <JustWhoAmI> it can be used as a parameter in has/getCap.
L668[13:20:17] <gigaherz> yup
L669[13:20:18] <JustWhoAmI> or to get the default implementation
L670[13:20:39] * gigaherz nods
L671[13:21:05] <JustWhoAmI> Where exactly is this 'C'apability stored? In the interface itself?
L672[13:21:10] <gigaherz> no
L673[13:21:16] <gigaherz> in the field with the annotation
L674[13:21:19] <gigaherz> in this case
L675[13:21:26] <gigaherz> CapabilityItemHandler.ITEM_HANDLER_CAPABILITY
L676[13:21:46] <gigaherz> forge takescare of that, so pretend it magically gets there ;P
L677[13:21:47] <JustWhoAmI> Right
L678[13:21:56] <LexLap2> for best performaance it should be stored in your ICapProider
L679[13:22:02] <JustWhoAmI> so in that case, forge would call the annotation on ITEM_HANDLER_CAPABILITY
L680[13:22:11] <JustWhoAmI> and we can use it
L681[13:22:14] <JustWhoAmI> or if we wanted
L682[13:22:20] <JustWhoAmI> inject our own annotation
L683[13:22:23] <JustWhoAmI> correct?
L684[13:22:26] <gigaherz> yep
L685[13:22:29] <JustWhoAmI> HOLY SHIT
L686[13:22:35] <gigaherz> anything that has @CapabilityInject(IItemHandler.class)
L687[13:22:36] <JustWhoAmI> my head literally feels lighter
L688[13:22:39] <gigaherz> will receive the same object
L689[13:22:54] <gigaherz> it's important to understand that it's the SAME object
L690[13:23:00] <gigaherz> no matter if where it ends up in
L691[13:23:14] <JustWhoAmI> got that
L692[13:23:22] <JustWhoAmI> so that's 'C'ap. dealt with
L693[13:23:29] <JustWhoAmI> now, what is a 'c'ap.?
L694[13:23:33] <gigaherz> IItemHandler
L695[13:23:48] <gigaherz> although we should stop calling it little-c completely
L696[13:23:50] <gigaherz> just.. instance
L697[13:24:06] <gigaherz> the instance of the interface that is managed by the Cap
L698[13:24:11] <JustWhoAmI> but isn't the instance actually ITEM_HANDLER_CAPABILITY?
L699[13:24:18] <JustWhoAmI> or whatever object you choose
L700[13:24:19] ⇦ Quits: RANKSHANK (~Michael@ppp121-44-37-139.lns20.syd4.internode.on.net) (Quit: Leaving.)
L701[13:24:21] <gigaherz> well
L702[13:24:22] <gigaherz> think about it
L703[13:24:28] <gigaherz> there's one single Capability
L704[13:24:34] <gigaherz> but you need to store different data on each object
L705[13:24:38] <gigaherz> each TE/Entity/ItemStack
L706[13:24:43] <gigaherz> needs its own "thing" to hold this data
L707[13:24:52] <PaleoCrafter> oh, Lex, you here? :P
L708[13:24:54] <LexLap2> you do know how interfaes work right?
L709[13:24:57] <LexLap2> yes
L710[13:24:57] <PaleoCrafter> heh
L711[13:25:05] <PaleoCrafter> I've added a dark theme to the test forums
L712[13:25:11] <gigaherz> item handlers are just objects that implement IItemHandler
L713[13:25:14] <gigaherz> so your thing
L714[13:25:20] <LexLap2> all capabilities is, is a 'do you have a object that satisfies this interface?'
L715[13:25:25] <gigaherz> will be any class that implements IItemHandler -- whatever works best for you
L716[13:25:25] <LexLap2> 'Cool give me that object'
L717[13:26:09] <JustWhoAmI> So, what is the difference
L718[13:26:30] <gigaherz> did you do modding in 1.7.10?
L719[13:26:31] <gigaherz> or earlier
L720[13:26:41] <JustWhoAmI> between the object of a class implementing IItemHandler and an object inject with IItemHandler.class?
L721[13:26:42] <PaleoCrafter> mind PMing me the email your account should be registered to?
L722[13:26:52] <LexLap2> object inject?
L723[13:26:58] <JustWhoAmI> @CapabilityInject
L724[13:27:01] <JustWhoAmI> injected*
L725[13:27:02] <LexLap2> LexManos@gmail.com
L726[13:27:04] <gigaherz> JustWhoAmI: you don't inject IItemHandler, you inject the Capability<IItemHandler>
L727[13:27:11] <gigaherz> the manager, not the instance
L728[13:27:40] <LexLap2> Capability* classes do not implement the interface, they are just a holder.
L729[13:27:54] ⇨ Joins: PieGuy128 (~PieGuy128@69.157.254.127)
L730[13:28:08] <LexLap2> you cant do: ((IItemStackHandler)ITEM_STACK_HANDLER).getItem(4)
L731[13:28:34] <LexLap2> oh im gunna shank Flamegoat
L732[13:28:48] <LexLap2> sending password plaintext in registration email?
L733[13:28:58] <PaleoCrafter> just because I manually created the account :P
L734[13:28:59] <diesieben07> wheeeee :D
L735[13:29:40] <JustWhoAmI> gigaherz
L736[13:29:43] <JustWhoAmI> @CapabilityInject(ITeslaProducer.class)
L737[13:29:43] <JustWhoAmI> public static void producer(Capability tesla)
L738[13:29:43] <JustWhoAmI> {
L739[13:29:43] <JustWhoAmI> TeslaControllerBase.PRODUCER = new Producer(tesla);
L740[13:29:43] <JustWhoAmI> }
L741[13:29:46] <LexLap2> eah, just somethign that throws me away.
L742[13:29:55] <gigaherz> PaleoCrafter: then the system should ideally have marked the account as "requires password reset", and sent a reset password email to the user
L743[13:29:56] <gigaherz> ;P
L744[13:30:00] <PaleoCrafter> probably
L745[13:30:01] <LexLap2> Just: That is wrong
L746[13:30:04] <PaleoCrafter> blame IPS :P
L747[13:30:12] <JustWhoAmI> what is the manager and what is the instance here?
L748[13:30:17] <gigaherz> JustWhoAmI: that's something I did
L749[13:30:26] <gigaherz> I'm starting to think I shouldn't have shown you that code yet
L750[13:30:26] <gigaherz> XD
L751[13:30:30] <JustWhoAmI> haha
L752[13:30:34] <gigaherz> that's unrelated to the capability system
L753[13:30:36] <LexLap2> that code is.. not good
L754[13:30:46] <gigaherz> it's something internal I use to avoid referencing non-existant types
L755[13:30:50] <DemonWav> PaleoCrafter so what's the likelihood you could actually get that PR working for my intellij plugin? ;)
L756[13:30:53] <gigaherz> unless the capability is registered
L757[13:31:10] <JustWhoAmI> yeah okay
L758[13:31:13] <JustWhoAmI> but sayh
L759[13:31:14] <JustWhoAmI> say*
L760[13:31:17] <PaleoCrafter> I haven't had a lot of time lately due to school stuff, but I should be able to work on it in the next couple of weeks
L761[13:31:17] <LexLap2> Paleo: looks good? what should I be checking?
L762[13:31:25] <JustWhoAmI> I had something like
L763[13:31:41] <gigaherz> JustWhoAmI: I recommend you to ignore my optionality stuff
L764[13:31:46] <gigaherz> and just try to understand capabilities by themselves
L765[13:31:49] <gigaherz> get yourself familiarized
L766[13:31:56] <gigaherz> see how they interact with eachother
L767[13:32:02] <JustWhoAmI> is there another example where I can see the annotation?
L768[13:32:05] <JustWhoAmI> without the optionality
L769[13:32:08] <gigaherz> ignore the annotation
L770[13:32:11] <LexLap2> you have seriously tried to explain this to him for 2 days?
L771[13:32:11] <PaleoCrafter> nothing in particular, just whether it fits your expectations for a dark theme that doesn't make your eyes bleed :D
L772[13:32:25] <gigaherz> no, he asked yesterday
L773[13:32:26] <LexLap2> yes it fits that
L774[13:32:30] <gigaherz> I gave him some links
L775[13:32:41] <DemonWav> i see. no rush or anything but I would love the PR once you get the time
L776[13:32:41] <gigaherz> and tyold him to read and comeback if something wasn't clear
L777[13:32:46] <gigaherz> it was... less clear than I thought
L778[13:32:47] <gigaherz> ;p
L779[13:33:26] <JustWhoAmI> lol at this point I'm annoyed at myself
L780[13:34:25] <LexLap2> Do you know the basics of how an interface and objects work?
L781[13:34:40] <JustWhoAmI> yes
L782[13:34:57] <LexLap2> okay, all you need to know.
L783[13:35:32] <LexLap2> Is that the capability system is a way to generically ask anything {tile entitiy, entity, itemstack, world} for an object that satisfies an interface
L784[13:36:01] <LexLap2> Literally: 'Do you have a object of this type?' 'Give me an object of this type'
L785[13:36:26] <LexLap2> Got that sofar?
L786[13:37:16] <JustWhoAmI> yep
L787[13:37:57] <Ordinastie> it's probably to late to change it, but it's the name that's confusing, what's called capability here is just a marker/key, the term capability tends to make you think of the implementation
L788[13:38:00] <LexLap2> Okay, so when you compare two objects you can either compare using ==, or compare using .equals
L789[13:38:05] <LexLap2> == is super fast
L790[13:38:08] <LexLap2> .equals is super slow
L791[13:38:13] <LexLap2> still tracking?
L792[13:38:24] <PaleoCrafter> oh, Lex, another thing: I've opted for a little different ad placement on the downloads page: http://forge.mineformers.de/downloads.html
L793[13:38:57] <LexLap2> Im really not a fan of the left menu, I like keeping it up top
L794[13:39:55] <LexLap2> THe other issue is, im willing to try different ad placements, but the layout we have right now is performing really well
L795[13:40:11] <JustWhoAmI> yes, @ LexLap2
L796[13:40:22] <gigaherz> don't ping him, he doesn't like it
L797[13:40:38] <PaleoCrafter> I mostly changed it to the left menu because I also used that for the docs and wanted to keep it consistent
L798[13:40:59] <JustWhoAmI> oh kk
L799[13:41:14] <LexLap2> Okay, so in order for == to work, the thing being compared has to be exactly the same as the thing being compared to.
L800[13:41:16] <PaleoCrafter> I'll see how I can make it horizontal while still being indefinitely extendible
L801[13:41:18] ⇨ Joins: fraktor (~fraktor@97-121-116-191.omah.qwest.net)
L802[13:41:32] <PaleoCrafter> the current files page is on the edge of horizontal scrolling xD
L803[13:41:42] <LexLap2> In order for people to get the things exactly the same Forge does black magic to fill fields with the same instance.
L804[13:41:47] ⇨ Joins: Zidane (~Zidane@e3-1270v3.bl-ash0.1.1.2.10.k8.securedservers.com)
L805[13:41:55] <LexLap2> And it knows what fields to do it with using the annotation
L806[13:42:17] <JustWhoAmI> So everyone gets the exact same stuff
L807[13:42:19] <fraktor> I'm developing a small mod that is really meant to be used more like a bukkit plugin (that can also be run on the client). Is it possible to allow a client to connect without requiring forge to be installed on the client?
L808[13:42:27] <JustWhoAmI> usign @CapabilityInject
L809[13:42:47] <diesieben07> fraktor, that is the default.
L810[13:42:57] <diesieben07> forge will allow vanilla to connect, if no mods are required to be installed on the cleint.
L811[13:43:05] <LexLap2> eah I can see that, and im not to married to either layout, right now the main thing im concerned with is ads. You guys ar efutzing with the main source for Forge.
L812[13:43:19] <fraktor> diesieben07: when I tried to test it out, my connection was refused. How can I make my mod not be required on the client.
L813[13:43:31] <gigaherz> fraktor: acceptableRemoteVersions:"*"
L814[13:43:33] <fraktor> *?
L815[13:43:36] <gigaherz> in your @Mod
L816[13:43:51] <gigaherz> I believe so (haven't actually used it myself)
L817[13:43:54] <diesieben07> yep
L818[13:44:00] <diesieben07> note that that will allow ANY version of your mod to connect
L819[13:44:01] <fraktor> gigaherz: will I need to modify my mcMod.info as well?
L820[13:44:04] <diesieben07> no
L821[13:44:20] <gigaherz> do you have version info in the mcmod.info file?
L822[13:44:20] <diesieben07> if you want "not at all OR *this specific version*" then you need @NetworkCheckHandler
L823[13:44:24] <diesieben07> and write custom logic
L824[13:44:26] <LexLap2> Yes, Just, they get the exact same stuff.
L825[13:44:34] <JustWhoAmI> right
L826[13:44:47] <LexLap2> Then they use that stuff to ask ICapProviders for the interfaces.
L827[13:45:30] <fraktor> diesieben07: let's say that I have an outdated version on the client. Since all the calculations will be done server-side (even when I'm running only single player, it should still take place on the logical server), will that cause an issue?
L828[13:45:56] <diesieben07> i do not know your mod, you need to decide that :)
L829[13:46:51] <fraktor> what could be the repercussions of such an event?
L830[13:47:04] <diesieben07> depends on the mod.
L831[13:47:17] <fraktor> it breaks blocks and modifies damage.
L832[13:47:40] <diesieben07> completely serverside?
L833[13:48:20] <fraktor> it should be. it should always run on the logical server, if not the physical server.
L834[13:48:38] <diesieben07> then it should be fine
L835[13:48:42] ⇦ Quits: Intektor (~Intektor@p5B27613B.dip0.t-ipconnect.de) (Quit: Leaving)
L836[13:48:42] <shadowfacts> is there any way to access the ModelLoader instance?
L837[13:49:07] <fry> what for?
L838[13:49:13] <PaleoCrafter> Lex, regarding the ads: the sizes I've chosen supposedly are the most successful ones Google has to offer, so trying that layout at least for a week or something might be worth it
L839[13:49:38] <shadowfacts> I'm writing an ICustomModelLoader that is functionally the same as the vanilla one but using HOCON
L840[13:50:27] <shadowfacts> (this might be an X/Y problem, you call stateModels.put in your VanillaModelWrapper.getDependencies, not sure if that's actually necessary or the right placed, based on your TODO comment)
L841[13:50:36] ⇨ Joins: Jezza (~Jezza@92.206.4.86)
L842[13:51:18] <shadowfacts> actually this is definetely an X/Y problem
L843[13:51:47] <shadowfacts> my life would be a lot easier if ModelLoader.VanillaModelWrapper was public so I could use that instead of copying my own
L844[13:51:56] *** Abrar|gone is now known as AbrarSyed
L845[13:52:33] <Flamegoat> Wait, I got shanked, why?
L846[13:52:58] <fraktor> thanks guys, now I can connect with a vanilla client.
L847[13:54:37] <JustWhoAmI> gigaherz, and lex (not tagging) I found this, I think this explains a lot: https://github.com/MinecraftForge/MinecraftForge/blob/bc6b00836476c8f79e0c0b53d72c36bec1d8189d/src/test/java/net/minecraftforge/test/TestCapabilityMod.java. I will try making my own now, and if I run into trouble I will come back here.
L848[13:56:05] <shadowfacts> fry, any suggestions other than publifying VanillaModelWrapper?
L849[13:56:07] <JustWhoAmI> just one last question
L850[13:56:07] <PaleoCrafter> Flamegoat, IPS sends the password in plain text when an account is created via the admin panel xD
L851[13:56:13] ⇦ Quits: An_Angry_Brit (~AngryBrit@90.199.223.81) (Ping timeout: 384 seconds)
L852[13:56:16] <Flamegoat> Only when you select the option.
L853[13:56:30] <gigaherz> so...
L854[13:56:36] <gigaherz> I have been playing some vanilla 1.11 snapshots
L855[13:56:47] <kashike> 1.11 looks nice so far
L856[13:56:49] <gigaherz> did anyone peek into the snapshot code changes yet?
L857[13:56:56] <kashike> I have a bit
L858[13:57:01] <gigaherz> anything fancy in there?
L859[13:57:14] <kashike> one of the more notable things is that entities have been split more
L860[13:57:16] <gigaherz> the only thing I know about are the resloc lowercase enforcement
L861[13:57:25] <Flamegoat> For the dev site, it doesn't matter. But on the live site it won't be an option. You'll have to create the account and forward people to the reset password process.
L862[13:57:30] <kashike> http://wiki.vg/Pre-release_protocol#Mobs
L863[13:58:06] <kashike> entities have a ResourceLocation-based registry now, too
L864[13:58:12] ⇨ Joins: An_Angry_Brit (~AngryBrit@90.199.223.81)
L865[13:58:31] <Cuby96> how do i set the fluid's texture? i didnt find any concrete tutorial how i set the texture of a fluid correctly
L866[13:58:32] <JustWhoAmI> @ gigaherz what exactly can the annotation be called on? of what type should the object be? can it be anything? For example in the code I linked, it is an object of type Capability. You used TeslaControllerBase.. so what exactly should I use?
L867[13:58:53] <JustWhoAmI> unless TeslaControllerBase is itself the cap.
L868[13:59:05] <gigaherz> any static field, and any static method
L869[13:59:15] <gigaherz> doesn't have to be related to caps at all
L870[13:59:16] <gigaherz> in facy
L871[13:59:17] <gigaherz> fact
L872[13:59:25] <gigaherz> lex always recommends having your own field in your class
L873[13:59:30] <gigaherz> so that access to it is quicker
L874[13:59:51] <gigaherz> the type will be
L875[14:00:01] <gigaherz> @CapabilityInject<XXX.class>
L876[14:00:10] <gigaherz> static Capability<XXX> NAME;
L877[14:00:15] <JustWhoAmI> gotcha
L878[14:00:17] ⇨ Joins: Everseeking (~Everseeki@pool-100-6-80-90.pitbpa.fios.verizon.net)
L879[14:00:26] <gigaherz> where the XXX is the interface the capability represents
L880[14:02:23] <LexLap2> inject MUST be on a field or method that takes Capability
L881[14:02:45] *** Darkhax is now known as Darkhax_AFK
L882[14:03:04] <gigaherz> Hmm I jsut had another idea for a mod feature
L883[14:03:25] <gigaherz> anyone knows if there's any mod that makes sword attacks crit when you time them right?
L884[14:03:52] <gigaherz> as in, if you swing again when the charge is between 90 and 99%, you have a chance of crit, but once you reach 100%, it cancels
L885[14:04:32] <gigaherz> I'd make that into an enchantment, Combo I through III, with increasing probability
L886[14:05:48] ⇦ Quits: LexLap2 (~LexManos@172.76.2.58) (Read error: Connection reset by peer)
L887[14:07:04] <JustWhoAmI> In the example tile entity given by tesla
L888[14:07:07] <JustWhoAmI> https://github.com/Darkhax-Minecraft/Tesla/blob/master/src/test/java/net/darkhax/teslatest/tileentity/TileEntityAnalyzer.java
L889[14:07:31] <JustWhoAmI> private BaseTeslaContainer container; is present, but no annotation above it?
L890[14:07:32] <gigaherz> yes?
L891[14:07:41] <gigaherz> that's because this is NOT the same
L892[14:07:53] <gigaherz> this is the instance, NOT the Capability
L893[14:08:15] <JustWhoAmI> OH RIGHT this is the provider class
L894[14:08:44] <gigaherz> that's the class that implements ITeslawhatever
L895[14:08:46] ⇦ Quits: Hunterz (~hunterz@62.182.234.189) (Quit: Leaving.)
L896[14:10:09] <JustWhoAmI> So, (hopefully) one final time, say I wanted to use the ITeslaProducer capability in my class
L897[14:10:16] <JustWhoAmI> I would use
L898[14:10:28] <JustWhoAmI> @CapabilityInject(ITeslaProducer.class)
L899[14:10:51] <JustWhoAmI> private static final Capability(ITeslaProducer) producer = null (to ensure soft dependency)
L900[14:11:00] <JustWhoAmI> then later in some method
L901[14:11:09] <gigaherz> the = null is unnecessary
L902[14:11:10] <PitchBright> g'day o/
L903[14:11:14] <gigaherz> and it's <ITeslaProducer>
L904[14:11:19] <JustWhoAmI> Yeah sorry
L905[14:11:24] <JustWhoAmI> didn't notice I did that
L906[14:11:34] <JustWhoAmI> so producer; is enough
L907[14:11:46] <JustWhoAmI> then later, in some tileentity or any other entity
L908[14:12:09] <JustWhoAmI> if(te.hasCapability(producer, face)
L909[14:12:10] <JustWhoAmI> )
L910[14:12:18] <gigaherz> yes
L911[14:12:21] <JustWhoAmI> then getCapability
L912[14:12:24] <gigaherz> yes
L913[14:12:25] <JustWhoAmI> in the same manner
L914[14:12:26] <sham1> Just... what the hell is going on here
L915[14:12:31] <JustWhoAmI> and use the capability to do what I want
L916[14:12:34] <JustWhoAmI> correct?
L917[14:12:36] <gigaherz> sham1: just someone who's trying very hard to understand capabilities
L918[14:12:45] <gigaherz> JustWhoAmI: yup
L919[14:12:49] <JustWhoAmI> this is good
L920[14:12:56] <gigaherz> that's how you query capabilities in other people's objects
L921[14:12:57] <JustWhoAmI> probably the farthest i've ever progressed
L922[14:13:15] <JustWhoAmI> I think there just remains one last thing
L923[14:13:32] <JustWhoAmI> and that's IStorage
L924[14:13:57] <JustWhoAmI> I still don't know what that is
L925[14:14:03] <gigaherz> okay let me try to explain
L926[14:14:14] <gigaherz> you know how in Tesla
L927[14:14:23] <gigaherz> we just use BaseTeslaContainer for the actual variables
L928[14:15:00] <JustWhoAmI> yeah
L929[14:15:01] <gigaherz> in Tesla's case
L930[14:15:12] <gigaherz> they chose to make BaseTeslaContainer implement INBTSerializable
L931[14:15:27] <gigaherz> so that means when you use BaseTeslaContainer explicitly
L932[14:15:31] <gigaherz> you have the serializeNBT method right there
L933[14:15:39] <gigaherz> but if you use the default instance provider
L934[14:15:46] <gigaherz> you only have ITeslaProducer
L935[14:15:56] <gigaherz> you don't actually know if it's INBTSerializable or not
L936[14:16:12] ⇨ Joins: Kane_Hart (Kane_Hart@modemcable160.103-83-70.mc.videotron.ca)
L937[14:16:18] <gigaherz> so, in order to avoid messy crap like
L938[14:16:26] <gigaherz> if (theObject instanceof INBTSerializable)
L939[14:16:45] <gigaherz> or any other of the million ways to read/write NBT that people may come up with
L940[14:16:51] <gigaherz> what forge proposes
L941[14:16:54] <gigaherz> is a generic way
L942[14:17:06] <gigaherz> so that you just do capability.readNBT(theObject)
L943[14:17:12] <gigaherz> or capability.writeNBT(theObject)
L944[14:17:20] <gigaherz> but in order for those methods to work
L945[14:17:32] <gigaherz> you need to give the register() method a helper that implements it
L946[14:17:36] <gigaherz> that's IStorage
L947[14:17:49] <gigaherz> it's just a helper that lets your default implementations provide save/load functions
L948[14:27:07] <JustWhoAmI> So gigaherz for a capability that I haven't made
L949[14:27:13] <JustWhoAmI> I don't need to make an IStorgae
L950[14:27:14] <JustWhoAmI> ?
L951[14:27:57] ⇦ Quits: Cuby96 (~Cuby96@62.68.4.51) ()
L952[14:33:09] ⇦ Quits: fraktor (~fraktor@97-121-116-191.omah.qwest.net) (Quit: leaving)
L953[14:33:27] <gigaherz> nope
L954[14:33:46] <gigaherz> you can make use of existing IStorage, but the only purpose of it is to give it to the capablity registry
L955[14:34:11] <shadowfacts> fry...?
L956[14:34:25] ⇦ Quits: InusualZ (~InusualZ@adsl-64-237-235-48.prtc.net) (Ping timeout: 206 seconds)
L957[14:34:33] ⇨ Joins: InusualZ (~InusualZ@adsl-72-50-87-48.prtc.net)
L958[14:36:28] <Kane_Hart> I have not done profiling much in recent times. I use to do it for memory leaks and such. But is there a way to see how much certian mods are using for memory?
L959[14:36:51] <Kane_Hart> I'm trying to track down what mod or mods are using the most memory. I need 5gigs just to load my modpack up in 1.10.2 and there is only a 100 or so.
L960[14:37:27] <Kane_Hart> I know a lot of memory changes have taken place with caching and such in recent versions of Minecraft. But I like to try to figure out a list of the top memory using mods.
L961[14:37:34] <kenzierocks> no you cannot really
L962[14:37:40] <Kane_Hart> darn :(
L963[14:37:46] <Kane_Hart> Thanks for the info.
L964[14:37:47] <kenzierocks> unless you have a profiler that tracks allocations per class
L965[14:37:53] <Kane_Hart> hmm
L966[14:38:06] <kenzierocks> even then
L967[14:38:09] <fry> take a memory dump with visualvm, load it in eclipse mat, look around :P
L968[14:38:10] <gigaherz> in order to know what mods are using the memory, you'd have toi use a heap analyzer
L969[14:38:17] <gigaherz> and trace the reference tree
L970[14:38:26] <kenzierocks> the major contributors are probably textures, which will be allocated by minecraft
L971[14:38:26] <gigaherz> to see what package is holding what memory
L972[14:38:40] <kenzierocks> wait actually textures are in VRAM arent they
L973[14:38:45] <gigaherz> depends
L974[14:39:09] <gigaherz> it's common for drivers to hold a copy in system ram as backup
L975[14:39:27] <kenzierocks> also if you run out of VRAM it'll go to RAM
L976[14:39:31] <kenzierocks> and then to your disk
L977[14:39:36] <gigaherz> yeah
L978[14:39:37] <kenzierocks> and your game fps will drop a ton
L979[14:40:23] <gigaherz> Kane_Hart: is this memory usage seen at startup
L980[14:40:26] <gigaherz> or does it grow over time
L981[14:40:43] <shadowfacts> fry, is making VanillaModelWrapper public the best solution and should I PR it?
L982[14:41:39] <Kane_Hart> Not a leak just startup
L983[14:41:59] <Kane_Hart> I notice if I set the pack at 4 and its loading up at the end it starts to stall and using like max cpu
L984[14:42:07] <Kane_Hart> assuming GC is screaming out in pain
L985[14:42:30] ⇨ Joins: AstralSorcerer (~AstralSor@128.151.114.87)
L986[14:42:36] <Kane_Hart> odd enough from what I can tell once the game is loaded uses less ram.
L987[14:42:55] <Kane_Hart> I just know a lot of people only set their clients to about 4gigs of ram so convincing people to go higher might be annoying
L988[14:44:20] ⇨ Joins: KnightMiner (~KnightMin@107-1-23-59-ip-static.hfc.comcastbusiness.net)
L989[14:44:21] ⇦ Quits: McJty (~jorrit@94-225-203-206.access.telenet.be) (Quit: Leaving)
L990[14:46:04] <fry> shadowfacts: won't become public for a couple reasons: 1) making formats that are slightly different but very close to the vanilla json is a great way to fragment resource packs (more work for creating/understanding/reusing them) without major benefits for users; 2) forge is free to make breaking changes to private classes, since all public classes/members are a public API 3) something
L991[14:46:05] <fry> else probably but I'm too lazy to remember it right now :D
L992[14:50:05] <shadowfacts> What should I do then? because otherwise I need to copy the entire VanillaModelWrapper class and somehow access private ModelLoader fields
L993[14:50:22] <g> wrt the setting on the server that removes erroring entities
L994[14:50:37] <g> Obviously setting it on the server does nothing for entities that error on the client
L995[14:50:42] <g> is there a similar client setting?
L996[14:50:53] <diesieben07> what would be "the best" thread-safe collection if all i need is add/remove objects and iterate the whole thing
L997[14:50:59] ⇦ Quits: Everseeking (~Everseeki@pool-100-6-80-90.pitbpa.fios.verizon.net) (Quit: Big Gulps, huh? Alright... Welp, see ya later)
L998[14:51:05] <diesieben07> ConcurrentHashMap.KeySet?
L999[14:51:11] <g> some kind of queue, diesieben07, I'd have thought
L1000[14:51:18] <g> unless you need to edit the middle
L1001[14:51:29] <diesieben07> no, i only need add(Object), remove(Object) and .iterator
L1002[14:51:42] <fry> why did you decide to write something "functionally the same as" the vanilla models in the first place?
L1003[14:51:46] <g> so why not just a synchronized ArrayList?
L1004[14:52:04] <diesieben07> because just synchronizing the whole thing is ugly...
L1005[14:52:09] <diesieben07> and that does not cover iteration
L1006[14:52:21] <diesieben07> except locking the whole thing whiole i am iterating
L1007[14:52:24] <fry> diesieben07: what operations will happen more often and how more often? :D
L1008[14:52:39] <shadowfacts> fry, because I like how vanilla models work but not that they use JSON
L1009[14:52:46] <diesieben07> iteration: a lot.
L1010[14:52:48] <g> you'd have to lock it, wouldn't you?
L1011[14:52:54] <g> otherwise something might be added/removed
L1012[14:52:56] *** Kolatra|away is now known as Kolatra
L1013[14:52:58] <shadowfacts> HOCON is a JSON superset which makes it a lot nicer to hand write
L1014[14:53:01] <diesieben07> ConcurrentLinkedQueue or whatever is lock-free
L1015[14:53:25] <diesieben07> actually...
L1016[14:53:25] <shadowfacts> (scala depends on HOCON, so it's already in Forge, so it could be in Forge)
L1017[14:53:26] <diesieben07> yeah you are right
L1018[14:53:29] <fry> ArrayList + a lock might be enough
L1019[14:53:34] ⇦ Quits: AstralSorcerer (~AstralSor@128.151.114.87) (Ping timeout: 183 seconds)
L1020[14:53:43] <diesieben07> yeah i need that actually. since i must not miss new objects when iterating
L1021[14:54:02] <fry> doesn't have to be super complex, if updates are rare enough to not matter
L1022[14:54:22] <diesieben07> well, basically it is a collection of "lobbies", aka rooms
L1023[14:54:35] <fry> shadowfacts: hand-write in hocon, convert to json with a script before putting in a resource pack?
L1024[14:54:37] <diesieben07> a room has a fixed capacity, if its full i need to create a new one for new players
L1025[14:54:51] <diesieben07> if one is empty, i need to remove it
L1026[14:55:03] <diesieben07> and i need to iterate the whole thing to find free spots, etc.
L1027[14:55:05] <shadowfacts> ehh
L1028[14:55:24] <fry> diesieben07: batch update events in a queue, interleave iteration with update processing
L1029[14:55:46] <PaleoCrafter> inb4 MC modeling becomes CSS/JS with a ton of preprocessors
L1030[14:56:10] <diesieben07> interesting.
L1031[14:56:43] <fry> diesieben07: there are like 100 ways to solve this problem, depending on particular constraints :P
L1032[14:56:50] <fry> choose the simplest one :D
L1033[14:56:58] <fry> (simplest one that's fast enough)
L1034[14:58:43] <fry> class UpdateEvent { enum Type { add, remove}, T value }; ... List<UpdateEvent> updates, Set<T> stuff; while(running) { stuff.iterate(); updates.foreach(apply); }
L1035[14:58:50] <fry> (pseudocode)
L1036[15:00:06] <diesieben07> yeah i got what you mean with the batching
L1037[15:00:24] <diesieben07> it probably does not matter...
L1038[15:00:49] <diesieben07> but the batching is nice
L1039[15:00:53] <fry> replace the iteration step with a 3rd message object and suddenly you have an actor model :D
L1040[15:00:53] <diesieben07> so ... doing that.
L1041[15:00:59] <diesieben07> lol
L1042[15:01:20] <diesieben07> but yours does all the processing on one thread
L1043[15:01:39] <diesieben07> my goal was that any thread can just call a "findRoom" method which needs to iterate the list
L1044[15:01:54] <fry> return Promise :D
L1045[15:01:59] <fry> e.t.c.
L1046[15:02:07] <diesieben07> meeeeeehhhh.
L1047[15:02:14] * diesieben07 becomes a sheep.
L1048[15:02:23] <fry> better than locking the asking thread :P
L1049[15:02:40] <diesieben07> i ... guess?
L1050[15:02:51] <fry> and if the asking thread has the same loop it'll even look nice :P
L1051[15:03:14] <diesieben07> "asking thread" is a handler for a packet that comes from the client
L1052[15:03:26] <diesieben07> where the client asks "i wanna join a room, plz!"
L1053[15:04:10] <diesieben07> this all arises because i decided to allow multithreaded access
L1054[15:04:18] <diesieben07> but if i do it all in one thread anyways through a queue...
L1055[15:04:29] ⇨ Joins: keybounce (~keybounce@64.201.108.45)
L1056[15:04:42] <sham1> Wait, when did Diesieb become a sheep
L1057[15:05:35] <Redfoxmoon> D:
L1058[15:05:35] <fry> case JoinPacket(data) -> send(setActor, data); case ReplyFrom(setActor, data) -> data.user.send("joined!")
L1059[15:05:37] <Redfoxmoon> whoops
L1060[15:05:45] <fry> (pseudocode :D)
L1061[15:05:54] <sham1> I say
L1062[15:05:59] <fry> (or the user packet handler)
L1063[15:06:01] <diesieben07> yes, yes i get what you mean
L1064[15:06:01] <fry> *of
L1065[15:06:02] <sham1> That lambda looks weird
L1066[15:06:24] <sham1> I was about to throw my hands in the air like I just did not care
L1067[15:06:29] <fry> yes, I'm generous with the name bingings :D
L1068[15:06:51] <diesieben07> ok, i am now returning CompletionStage<ServerLobby> and not ServerLobby
L1069[15:06:52] <diesieben07> yay.
L1070[15:07:03] <fry> hehehe
L1071[15:07:14] <sham1> Also, promises? What is this, JavaScript?
L1072[15:07:30] <diesieben07> CompletableFuture is basically a promise.
L1073[15:07:39] <fry> good enough universal name for the concept :P
L1074[15:07:53] <sham1> Umn, Either a b was not good enough?
L1075[15:08:05] <fry> "universal" is the key :P
L1076[15:08:18] <fry> as in "understood by most programmers"
L1077[15:08:24] <sham1> Point taken
L1078[15:08:35] <sham1> Meanwhile
L1079[15:08:38] <diesieben07> and isn't Either like optional, as in, not lazy?
L1080[15:08:51] <fry> major problem of haskell is using haskell to explain haskell :P
L1081[15:08:51] <sham1> Autotools is so hard to understand
L1082[15:09:16] <fry> haskell is lazily evaluated, diesieben07
L1083[15:09:27] <diesieben07> right... i was thinking of scala :D
L1084[15:09:30] <diesieben07> silly haskell
L1085[15:09:34] <sham1> Because all the GNU project has said about autotools is in some god-forsaken info pages
L1086[15:11:34] <sham1> And yes, Haskell is lazy, unless you force it to be strict
L1087[15:11:53] <sham1> Which is why XMonad can work in such a swift way
L1088[15:12:03] <diesieben07> yes i know it is :D
L1089[15:12:06] <sham1> Because strictness helps performance and memory
L1090[15:12:09] <diesieben07> i just didn't know you were talking in haskell
L1091[15:12:20] <sham1> If that was scala
L1092[15:12:28] <sham1> It would have been Either[A,B]
L1093[15:12:31] ⇦ Quits: otho (~otho@191.189.118.78) (Remote host closed the connection)
L1094[15:12:34] <diesieben07> right, right
L1095[15:12:38] <sham1> But yeah
L1096[15:12:39] <diesieben07> i was in pseudocode mode :P
L1097[15:12:41] <sham1> Promises
L1098[15:13:00] <quadraxis> fry, am I correct in my understanding that json models don't inherit property overrides?
L1099[15:13:04] <sham1> Brief me on this
L1100[15:13:23] ⇨ Joins: otho (~otho@191.189.118.78)
L1101[15:13:55] <sham1> Wasn't CompletableFuture enough?
L1102[15:14:07] ⇨ Joins: Razz (~Razz@2a01:4f8:160:2372::2)
L1103[15:14:19] <diesieben07> CompletableFuture is a promise
L1104[15:14:26] <diesieben07> so yes, it is enough
L1105[15:14:30] <diesieben07> even though it is far from perfect
L1106[15:14:53] ⇦ Quits: otho (~otho@191.189.118.78) (Remote host closed the connection)
L1107[15:15:19] ⇨ Joins: otho (~otho@191.189.118.78)
L1108[15:16:27] ⇨ Joins: KGS (~KGS@h-155-4-129-249.na.cust.bahnhof.se)
L1109[15:16:46] ⇨ Joins: AstralSorcerer (~AstralSor@128.151.114.87)
L1110[15:16:48] ⇦ Quits: otho (~otho@191.189.118.78) (Remote host closed the connection)
L1111[15:17:54] <sham1> Does CompletableFuture turn into a failure when an exception is thrown automatigally?
L1112[15:18:05] <sham1> I don't have the source code handy
L1113[15:18:11] <diesieben07> Yes it does
L1114[15:18:38] <diesieben07> if any of the stuff you pass in (functions to thenApply, etc.) throws, that becomes the exception
L1115[15:18:47] <sham1> Ah good
L1116[15:18:49] ⇦ Quits: kokolihapihvi (webchat@a91-154-117-107.elisa-laajakaista.fi) (Quit: Web client closed)
L1117[15:19:08] <sham1> Wait a minute, did that piece of meat just disconnect?
L1118[15:19:21] <diesieben07> which is why i don't understand that there isn't a CompletableFuture.of(Callable)
L1119[15:20:22] <sham1> I don't understand why there is no mention of map in CompletableFuture
L1120[15:20:24] <diesieben07> my god checked exceptions suck
L1121[15:20:32] <sham1> Not even in a reference to another method
L1122[15:20:32] <diesieben07> map?
L1123[15:20:44] <diesieben07> oh you mean as in "apply a function"
L1124[15:20:46] <sham1> Like "This method is an analouge to the List method map"
L1125[15:20:49] <sham1> Indeed
L1126[15:20:59] ⇨ Joins: kokolihapihvi (~kokolihap@a91-154-117-107.elisa-laajakaista.fi)
L1127[15:20:59] <kenzierocks> there is no List method map :P
L1128[15:21:02] <kenzierocks> do you mean Stream?
L1129[15:21:02] <diesieben07> because java terminologie
L1130[15:21:09] <sham1> Thank you
L1131[15:21:19] <sham1> I treat Streams like lists anyway
L1132[15:21:27] <kenzierocks> you shouldnt
L1133[15:21:31] <diesieben07> uhhh they are very different
L1134[15:21:35] <kokolihapihvi> anyone know if its possible to get the ResourceLocation of a blocks texture from a Block instance in 1.8.9?
L1135[15:21:40] <kenzierocks> at least in performance critical code
L1136[15:21:46] <kenzierocks> streams are literally the worst
L1137[15:21:53] <sham1> I use them to compose calculations
L1138[15:22:02] <kenzierocks> spin-up time for streams is really big
L1139[15:22:26] <fry> again, haskell lists are lazy, so they are more like java streams than java lists
L1140[15:22:27] <PaleoCrafter> streams only really are worth it with a lot of data
L1141[15:22:54] <diesieben07> or if you don't care about performance and wnat the nice code :D
L1142[15:23:05] <PaleoCrafter> then you use Scala, hurr durr
L1143[15:23:11] <diesieben07> lawl
L1144[15:23:17] <diesieben07> at least you admit it :D
L1145[15:23:43] <sham1> To be fair, one could have for instance wrapped a Socket to a Stream<Byte>. Well, any InputStream really, but the ones you get from Socket might be some of the most useful
L1146[15:24:04] <sham1> Because you never know how much data you get over the wire
L1147[15:24:08] <PaleoCrafter> it'd be a ByteStream :P
L1148[15:24:09] <diesieben07> lol that sounds like a horrible idea
L1149[15:24:15] <PaleoCrafter> 'cause boxing is bad
L1150[15:24:27] <sham1> D'oh
L1151[15:24:29] <diesieben07> well, IntStream, there is no ByteStream
L1152[15:24:39] <sham1> *rolls eyes*
L1153[15:24:50] <fry> go 1 step futher, make a stream of batches of bytes, and you have netty :P
L1154[15:24:55] <diesieben07> :D
L1155[15:25:29] <sham1> Data streams manipulated with map, filter, fold, and the rest of the gang
L1156[15:25:35] <sham1> What's not to love
L1157[15:25:42] <kenzierocks> the speed
L1158[15:25:47] <sham1> Parallel
L1159[15:25:51] <fry> the speed is good enough :P
L1160[15:26:09] <kenzierocks> parallel would suck imo
L1161[15:26:20] ⇨ Joins: otho (~otho@191.189.118.78)
L1162[15:26:20] <sham1> Also, you could collect a temporary buffer and feed from there
L1163[15:26:24] <kenzierocks> esp. trying to make a packet stream
L1164[15:26:29] <diesieben07> fry what have you made me do... my method returns a Lobby instance. which has a method getPlayers. now i need to make that an immutable list (because the Lobby instance gets passed into other threads) but still update somehow from the "i am allowed to write shit" thread...
L1165[15:26:52] <sham1> A circular buffer if we are lucky
L1166[15:26:54] ⇨ Joins: Octobyte (webchat@host86-131-202-60.range86-131.btcentralplus.com)
L1167[15:27:04] <fry> diesieben07: welcome to the multithreaded world :P
L1168[15:27:14] <diesieben07> i know :D
L1169[15:27:19] <diesieben07> i have done it before man :P
L1170[15:27:27] <diesieben07> it just sucks.
L1171[15:27:35] <fry> try some actor framework, you might like it :P
L1172[15:27:43] <sham1> Concurrent parallelism
L1173[15:27:44] <diesieben07> how does that help me?
L1174[15:27:56] <fry> easier to manage all those futures
L1175[15:28:10] <sham1> Possible futures
L1176[15:28:11] <diesieben07> you mean getPlayers shoudl return a future? heck no.
L1177[15:28:21] <fry> and message queues :P
L1178[15:28:26] <fry> and no, I don't mean that :P
L1179[15:28:41] ⇦ Quits: otho (~otho@191.189.118.78) (Remote host closed the connection)
L1180[15:28:52] <diesieben07> i just need to update a volatile "read only list" field in the instance from the worker thread
L1181[15:28:56] <diesieben07> whenever the actual list changes
L1182[15:28:58] <diesieben07> not that hard
L1183[15:29:07] ⇨ Joins: otho (~otho@191.189.118.78)
L1184[15:29:13] <diesieben07> "not that hard" he says
L1185[15:29:19] <fry> ^ :P
L1186[15:29:42] <fry> with actors you don't have to think about a lot of the low level problems
L1187[15:29:49] <fry> and the performance is the same :P
L1188[15:30:06] <sham1> And the code will probably look nicer
L1189[15:30:14] <diesieben07> you mean actors will just magically make this work? doubtful :P
L1190[15:30:39] <diesieben07> which FW do you recommend so i can take a look at some example code?
L1191[15:31:21] <sham1> Does Akka have Java bindings?
L1192[15:31:27] <fry> http://stackoverflow.com/questions/3357332/which-actor-model-library-framework-for-java
L1193[15:31:32] <diesieben07> yeah already found Akka
L1194[15:31:38] <diesieben07> isnt it written in java? :D
L1195[15:31:45] <fry> akka is big and mature, and fast enough, but not very java-idiomatic
L1196[15:31:47] <diesieben07> in any way it has a java api
L1197[15:31:53] <fry> yup, java api is there
L1198[15:32:11] <sham1> Java idioms are something else entirely
L1199[15:32:25] <sham1> This is what you get when you try to scale that scala
L1200[15:33:37] <fry> jumi looks frugal and idiomatic enough :P
L1201[15:34:27] <diesieben07> looking at akka examples... omg so much noise
L1202[15:34:40] <sham1> Okay, I want to know
L1203[15:34:55] <sham1> Whose idea was it to have info pages continue when scrolling down
L1204[15:35:33] ⇦ Quits: Octobyte (webchat@host86-131-202-60.range86-131.btcentralplus.com) (Quit: Web client closed)
L1205[15:35:50] ⇨ Joins: Octobyte (webchat@host86-131-202-60.range86-131.btcentralplus.com)
L1206[15:35:50] ⇨ Joins: ThePsionic (~ThePsioni@ip5457f909.direct-adsl.nl)
L1207[15:35:52] <diesieben07> wait wat
L1208[15:36:10] <diesieben07> this thing adapts interfaces and stuff... what the hell?
L1209[15:36:17] <diesieben07> that is nice... i ... think?
L1210[15:36:19] <fry> hmm?
L1211[15:36:23] <fry> what thing?
L1212[15:36:31] <diesieben07> jumi
L1213[15:36:38] <diesieben07> the hello world example
L1214[15:36:56] <diesieben07> they just call sayGreeting directly, but that executes on the threadpool thread
L1215[15:37:17] <diesieben07> so it has to manufacture some instance of Greeter that schedules stuff to run on the threadpool
L1216[15:37:23] <fry> probably
L1217[15:37:44] <diesieben07> yep it uses "event stubs", which you can pre-generate with maven
L1218[15:38:03] <diesieben07> still have no idea how this helps me solve my problem. it's nice, but thats about it.
L1219[15:38:12] <diesieben07> also... what happens if that Greeter thing returns something? :D
L1220[15:38:32] ⇦ Quits: TechnicianLP (~Technicia@p4FE571E4.dip0.t-ipconnect.de) (Ping timeout: 183 seconds)
L1221[15:39:15] ⇨ Joins: Octobyte_ (~Octobyte@host86-131-202-60.range86-131.btcentralplus.com)
L1222[15:39:17] <fry> heh, I think it uses InvokeDynamic
L1223[15:39:17] <Octobyte_> Testing
L1224[15:39:18] <diesieben07> it can't... obviously...
L1225[15:39:21] <Octobyte_> ahh right
L1226[15:39:22] <diesieben07> really? fun.
L1227[15:39:33] <Octobyte_> For some reason espernet irc window on the website doesn't work >.>
L1228[15:39:45] <diesieben07> intentinoal
L1229[15:39:54] <Octobyte_> yeah I can see why now
L1230[15:40:01] <fry> here's the return type handling: https://github.com/orfjackal/jumi-actors/blob/master/jumi-actors/src/main/java/fi/jumi/actors/eventizers/dynamic/DynamicListenerToEvent.java#L28-L35
L1231[15:40:14] <fry> (I think)
L1232[15:40:47] <diesieben07> so i need to have the return type Object in my interface
L1233[15:40:54] <diesieben07> so that it can fit both the actual type and the promise? ewww
L1234[15:41:05] <fry> wat?
L1235[15:41:15] <diesieben07> https://github.com/orfjackal/jumi-actors/blob/master/jumi-actors/src/main/java/fi/jumi/actors/eventizers/dynamic/DynamicListenerToEvent.java#L31
L1236[15:41:19] <diesieben07> that returns the promise
L1237[15:41:26] <diesieben07> that doesn't work if the method returns String
L1238[15:41:32] <diesieben07> in whcih case it just returns null
L1239[15:41:38] <diesieben07> which leaves me not being able to handle the result.
L1240[15:43:11] ⇦ Quits: Octobyte (webchat@host86-131-202-60.range86-131.btcentralplus.com) (Ping timeout: 195 seconds)
L1241[15:43:57] ⇨ Joins: kinggoesgaming (uid23106@id-23106.tooting.irccloud.com)
L1242[15:44:38] <sham1> Oh nice
L1243[15:44:44] <sham1> Jumi is a Finnish project
L1244[15:44:53] <sham1> First Retrolambda and now this
L1245[15:49:35] <fry> diesieben07: generally speaking, you send the message back, instead of using the return value of a method; I used the ask pattern only once in all actor code I wrote :D
L1246[15:50:03] <fry> (ask pattern - send a message and block until the reply is available)
L1247[15:50:20] <diesieben07> so the call to the method is completely far away from the handling of the answer? that sounds horrible
L1248[15:50:35] <diesieben07> with promises/completableFuture it all stays in one place while still being async
L1249[15:50:51] <fry> depends on your definition of "far away" :P
L1250[15:51:29] <fry> as I showed before: case JoinPacket(data) -> send(setActor, data); case ReplyFrom(setActor, data) -> data.user.send("joined!")
L1251[15:51:40] <diesieben07> well, from what i have seen so far i will have some giant "handleMessage" method somewhere
L1252[15:51:45] <diesieben07> with a giant switch-case
L1253[15:51:59] <fry> with juli you have a "giant" interface
L1254[15:52:04] <fry> with 1 method for each case
L1255[15:52:12] <diesieben07> instead of: doStuff(bla).andThen(result -> println(result));
L1256[15:52:31] <diesieben07> where it is immediately clear what happens as a result of what
L1257[15:53:06] ⇦ Quits: otho (~otho@191.189.118.78) (Remote host closed the connection)
L1258[15:53:35] <fry> void onJoinPacket(data) { setActor.tell().onUserJoin(data); } void onUserJoinStored(user) { sockets[user].send("joined!") }
L1259[15:54:16] <diesieben07> and that is better than the promises, because...?
L1260[15:54:25] <diesieben07> and "it has more code" does not count.
L1261[15:54:34] <fry> because you're forced to never block :P
L1262[15:54:42] <diesieben07> my thing does not block either.
L1263[15:55:34] <diesieben07> and, big plus, it does not have a big library with lots of reflection hackyness in the background.
L1264[15:55:54] <Roburrito> Oh! I forgot taht ForestryMC had genetics for its plants and bees already!
L1265[15:56:09] <Roburrito> And it's 1.10.
L1266[15:56:23] <Roburrito> Diggy diggy read
L1267[15:57:19] <fry> diesieben07: actors encapsulate state; if you had "counter += 1" in your toy andThen example, you'd have a bad time :P
L1268[15:57:48] <fry> you are guaranteed that actor only processes 1 message at a time
L1269[15:57:52] <kenzierocks> speaking of having giant interfaces, https://github.com/md-5/pircbotx/blob/master/src/main/java/org/pircbotx/hooks/ListenerAdapter.java
L1270[15:57:57] <kenzierocks> isn't it beautiful
L1271[15:58:08] <diesieben07> andThen(bla, workerThread) where workerThread is a SingleThreadExecutorService
L1272[15:58:11] <diesieben07> thats what i have
L1273[15:59:39] ⇦ Quits: thechief5456 (~thechief5@c-24-13-64-193.hsd1.il.comcast.net) (Quit: Leaving...)
L1274[15:59:57] <fry> with actors you can actually use multiple threads :P
L1275[16:00:07] <fry> (which is the point :D_
L1276[16:00:09] <fry> *)
L1277[16:00:19] <sham1> Wait
L1278[16:00:25] <diesieben07> how are 3 threads any good if i only ever run one task at a time?!
L1279[16:00:48] <fry> usually you have >1 actor in your program :P
L1280[16:00:49] <sham1> _ instead of ), how in the name of Dvorak does that happen
L1281[16:01:11] <diesieben07> i guess...
L1282[16:01:30] <diesieben07> i still highly dislike the programming style though
L1283[16:01:44] <fry> only because you didn't try it enough
L1284[16:01:51] <fry> it's actually quite nice :P
L1285[16:01:54] <diesieben07> you send this message and it causes this completely unrelated thing to happen over there some time later
L1286[16:02:08] <diesieben07> how do you know it does? well... you have to know.
L1287[16:02:09] <diesieben07> great.
L1288[16:03:00] <fry> on the flipside you're not bound by "request followed immediately by response" protocol of method calls :P
L1289[16:03:21] <diesieben07> its not a response i get back
L1290[16:03:25] <kenzierocks> diesieben07: it's kinda like sockets :P
L1291[16:03:29] <diesieben07> its a token that says "you will get a response eventually"
L1292[16:03:37] <fry> sham1: - and 0 are neighbor keys on my kb :P
L1293[16:03:42] <diesieben07> with your actors i just shout into the void
L1294[16:03:47] <diesieben07> hoping someone will answer
L1295[16:03:48] <kenzierocks> on most keyboards
L1296[16:03:58] <fry> diesieben07: again, you force 1 request - 1 response
L1297[16:04:01] <kenzierocks> considering most keyboards are QWERTY not Dvoark
L1298[16:04:07] <diesieben07> how is the response forced?
L1299[16:04:14] <diesieben07> the request method returns void
L1300[16:04:18] <diesieben07> how do i know it will send me a message back?
L1301[16:04:26] <fry> in the method worldview
L1302[16:05:24] <fry> let's go through it step by step
L1303[16:05:46] <fry> 1 simple "method": A foo(B)
L1304[16:05:53] ⇨ Joins: BlueMonster (uid82864@2604:8300:100:200b:6667:4:1:43b0)
L1305[16:06:02] <fry> step 1: you "call foo with b1"
L1306[16:06:30] <fry> alternatives for step 2: either "foo returns a1 from b1", or "call foo with b2"
L1307[16:06:47] <diesieben07> no.
L1308[16:06:49] <fry> either alternative can happen first due to multithreading
L1309[16:06:50] <diesieben07> it returns first...
L1310[16:06:59] <diesieben07> oh mulitple threads already
L1311[16:07:00] <diesieben07> ok
L1312[16:07:04] <fry> yup
L1313[16:07:24] <fry> even with promises, either "promise fires first" or "foo is called again"
L1314[16:07:32] <diesieben07> sure.
L1315[16:08:18] ⇦ Quits: JustWhoAmI (~admin@122.171.125.231) (Read error: Connection reset by peer)
L1316[16:08:41] <fry> so, you already have to think about both alternatives
L1317[16:08:52] <fry> with actors you encode them explicitly :P
L1318[16:09:32] <fry> (and it's often very natural)
L1319[16:09:42] <diesieben07> in my case all foo does is create a promise that runs foo0 on the worker thread executor
L1320[16:09:57] ⇨ Joins: howtonotwin (~howtonotw@r75-110-22-15.gvllcmtc01.gnvlnc.ab.dh.suddenlink.net)
L1321[16:09:58] <diesieben07> it does not need to care, the executor handles the scheduling of the tasks
L1322[16:10:41] <diesieben07> my problem is that if i call an actor method, it gives me back nothing. i have to read the code of the method or its docs or whatever to find out if there will be a response message at some point
L1323[16:10:56] <diesieben07> if i call a method that gives me a promise i KNOW what i get, even if it's not there yet
L1324[16:11:57] <fry> but you don't know when that promise will fire, and you only get 1 promise back :P
L1325[16:12:36] <diesieben07> do i know when the actor will call me back with its answer message? no.
L1326[16:12:43] <diesieben07> so that "flaw" is not a flaw.
L1327[16:13:02] <fry> you need to go read the documentation for both approaches :P
L1328[16:13:27] <diesieben07> i get the point, i just don't like it. :D
L1329[16:14:02] <fry> it's way nicer than explicit thread stuff :P
L1330[16:14:11] <diesieben07> i am not writing "explicit thread stuff".
L1331[16:14:21] <fry> oh you are :P
L1332[16:14:35] ⇦ Quits: plp (~plp@112.203.118.64) (Quit: Leaving)
L1333[16:14:45] <diesieben07> at some point yes. but that is the same wiht the actors...
L1334[16:14:46] ⇨ Joins: jackmcbarn (jackmcbarn@gateway.insomnia247.nl)
L1335[16:14:50] <fry> and look, akka actually has nice api: http://doc.akka.io/docs/akka/2.0/java/typed-actors.html#method-dispatch-semantics
L1336[16:15:08] <fry> (you have your "call method and return future" too :D)
L1337[16:15:49] <diesieben07> lol i have to write all that code?
L1338[16:16:08] <fry> all what code?
L1339[16:16:20] <fry> Future<Integer> fSquare = mySquarer.square(10);
L1340[16:16:24] <diesieben07> Squarer and SquarerImpl
L1341[16:16:34] <diesieben07> i have the same thing 4 times.
L1342[16:18:25] <diesieben07> and that future method is cheating.
L1343[16:18:26] <fry> you can only write the future one, like you do already :P
L1344[16:18:32] <diesieben07> then why would i use actors?!
L1345[16:18:45] <fry> again, you never have to think of threads again
L1346[16:18:51] <howtonotwin> ^
L1347[16:19:05] <diesieben07> if i have to write that future method, yes i do.
L1348[16:19:08] <fry> no passing of "worker thread" anywhere
L1349[16:19:08] <howtonotwin> main purpose of actors is to completely forget about where your code is running
L1350[16:19:10] <diesieben07> because that future method needs to produce the future somehow.
L1351[16:19:11] <fry> no you don't :P
L1352[16:19:15] <diesieben07> i don't?
L1353[16:19:23] <fry> return Futures.successful(i * i, TypedActor.dispatcher());
L1354[16:19:39] <diesieben07> how is that in any way asynchronous?
L1355[16:19:41] <howtonotwin> akka deals with threads
L1356[16:19:43] <howtonotwin> akka does
L1357[16:19:45] <howtonotwin> you don't
L1358[16:19:58] <fry> again, that code will run in the actor that receives the message
L1359[16:20:07] <fry> not in the one that calls it
L1360[16:20:28] <diesieben07> then why do i need to make a future at all?
L1361[16:20:38] <diesieben07> if i am already in the "i need to do stuff here" space?
L1362[16:20:40] <fry> because java is stupid
L1363[16:21:21] <fry> and your interface expects Future<T> and not <T>
L1364[16:21:23] <diesieben07> yeah no this is not satisfying.
L1365[16:21:40] <fry> want satisfying - use haskell :P
L1366[16:21:48] <diesieben07> oh god no :D
L1367[16:21:52] <gigaherz> or C#'s async ;P
L1368[16:22:05] <diesieben07> "use language X" is nto helping :P
L1369[16:22:06] <fry> want to actually get stuff done - don't "this is not satisfying" me :P
L1370[16:22:22] <diesieben07> i get stuff done alright :P
L1371[16:22:32] <diesieben07> you brought up this whole actors stuff
L1372[16:22:43] <diesieben07> which is stupid in java, hence not an option.
L1373[16:22:44] <howtonotwin> why not go to the root and use erlang?
L1374[16:22:48] <howtonotwin> :P
L1375[16:22:50] <IoP> ML!
L1376[16:22:51] * diesieben07 slaps howtonotwin
L1377[16:22:58] * sham1 slaps howtonotwin
L1378[16:23:00] <diesieben07> this is going downhill fast.
L1379[16:23:07] <howtonotwin> true.
L1380[16:23:09] <fry> it's less stupid than handling threads explicitly :P
L1381[16:23:17] <IoP> mutability is sin!
L1382[16:23:23] <diesieben07> i am not handlign threads explicitly.
L1383[16:23:36] <diesieben07> i am using an executor service and say "do this!"
L1384[16:23:37] <IoP> threads are bigger sin!
L1385[16:23:53] <kenzierocks> you guys should all use my new language husk, it's like haskell but in java. there's also no compiler code yet so it should be easy to run
L1386[16:24:15] <howtonotwin> inb4 we all get banned bc banned topic #3 is dangerously close to this xD
L1387[16:24:15] ⇨ Joins: Mattizin (~mattizin@p57af4be1.dip0.t-ipconnect.de)
L1388[16:24:31] <PaleoCrafter> what about Frege, kenzierocks? :P
L1389[16:24:34] <sham1> ^
L1390[16:24:51] <kenzierocks> it's not java syntax
L1391[16:24:55] <kenzierocks> i love java syntax too much :P
L1392[16:25:03] <sham1> But we are not talking about how MC would be better
L1393[16:25:06] <sham1> We are talking in general
L1394[16:25:13] <kenzierocks> like: head [ x | (x,y) <- pairsOf cosines, x == y]
L1395[16:25:15] <kenzierocks> what does that even mean
L1396[16:25:19] <IoP> Sometimes I wonder if there is still some languages which does not have any bindings to create javascript from the programs at all
L1397[16:25:48] <sham1> COBOL
L1398[16:25:56] <sham1> FORTRAN
L1399[16:26:01] <sham1> ADA
L1400[16:26:07] <sham1> You get the drift
L1401[16:26:07] <kenzierocks> PHP
L1402[16:26:10] <sham1> Eww
L1403[16:26:20] <kenzierocks> i actually had to write some php recently
L1404[16:26:24] <kenzierocks> i hated it so much
L1405[16:26:28] <PaleoCrafter> It's Ada, you scum, sham1
L1406[16:26:41] <Kane_Hart> Is there a known issue with forge where sometimes mobs spawn with blury textures or sometimes with white textures and when I reboot it's fine though other mobs might be missing textures or be blury lol
L1407[16:26:54] <Kane_Hart> No optifine or any of that silly crap
L1408[16:27:10] <diesieben07> fry, ok, so. if actors are so great, is there a way to solve this: "hey, here is object X, but if you want to interact with it you must do it on this thread"
L1409[16:27:14] <fry> diesieben07: chains of promises are good for sequential things, actors are good for stateful things; you can use promise chains with actors, but when you need to wrap state, like your user set example, you usually reimplement the message queue, and it ends up badly :P
L1410[16:27:19] <sham1> Oh here is a language
L1411[16:27:20] <sham1> Prolog
L1412[16:27:26] <Roburrito> Finally worked out registerEntity and registerEntityRenderer. Now to figure out why my horse is invisible.
L1413[16:27:45] <diesieben07> say, "please gimme room for user" ... later: "ok here is room"
L1414[16:27:55] <diesieben07> but that room comes from the room managemenet actor...
L1415[16:27:59] <diesieben07> and Room.class is not threadsafe
L1416[16:28:10] <diesieben07> but the "here is room" handler runs on another thread, because its an actor as well
L1417[16:28:11] <diesieben07> now what?
L1418[16:29:09] <fry> define "room management actor" and ""here is room" handler
L1419[16:29:21] <fry> "
L1420[16:30:09] <diesieben07> join handler: void onJoin(JoinMessage) { roomMgrActor.tell().gimmeRoom(msg.user); }
L1421[16:30:15] <fry> also, define "gimme room" - do you need a "handle" of the room, or the instance of the Room class - since it's not thread-safe?
L1422[16:30:27] <diesieben07> are those not equivalent?
L1423[16:30:36] <fry> that's what I'm asking
L1424[16:30:46] <diesieben07> Room.class has methods like getPlayers
L1425[16:30:52] <diesieben07> which then needs to be a threadsafe list...
L1426[16:30:55] <diesieben07> right?
L1427[16:31:03] <diesieben07> but you said with actors i dont have to think abotu that stuff.
L1428[16:31:09] <fry> also, define "not threadsafe"
L1429[16:31:16] <howtonotwin> actors may only process one mesg at a time
L1430[16:31:20] <diesieben07> ArrayList
L1431[16:31:25] <howtonotwin> so there's that
L1432[16:31:32] <diesieben07> yes, but these are 2 distinct actors...
L1433[16:31:32] <fry> so, 1 instance is accessed by only 1 thread
L1434[16:31:37] <diesieben07> passing messages back and forth
L1435[16:31:55] ⇨ Joins: ScottehBoeh (~ScottehBo@95.144.45.252)
L1436[16:32:04] <ScottehBoeh> What did I miss! xD
L1437[16:32:07] <ScottehBoeh> Also, Salutations.
L1438[16:32:19] <howtonotwin> we are debating the actor pattern for some reason
L1439[16:32:21] <Roburrito> EVERYTHING
L1440[16:32:42] <howtonotwin> 7 is wondering how it works and fry is explaining
L1441[16:32:53] <diesieben07> i know how it works (roughly).
L1442[16:32:57] <diesieben07> i jsut don't get how it is better :D
L1443[16:33:10] <howtonotwin> ya what he said
L1444[16:33:22] <howtonotwin> meanwhile I'm going to stop procrastinating on my docs
L1445[16:33:25] <fry> so, who needs the room instance? the same thing that processes the user join packet?
L1446[16:33:33] <fry> the "network handler"?
L1447[16:33:50] <diesieben07> well... someone needs to tell the user that he is now in the room
L1448[16:34:00] <diesieben07> you tell me how the actor pattern do that
L1449[16:34:09] <howtonotwin> isn't that the very definition of `tell`?
L1450[16:34:10] <howtonotwin> :P
L1451[16:34:23] <diesieben07> i would write a promise handler that sends a network packet back to the client "hey you have room xyz now"
L1452[16:34:28] <fry> you send back the "joined" message to the network handler, it relays it to the user
L1453[16:34:30] <fry> yup
L1454[16:34:44] <diesieben07> so the room manager now needs to know about network stuff?
L1455[16:34:56] <fry> but instead of passing back the Room instance, you pass the room id
L1456[16:35:00] <fry> no, it doesn't
L1457[16:35:09] <fry> it uses your domain object
L1458[16:35:15] <diesieben07> so i have to pass something threadsafe.
L1459[16:35:16] <diesieben07> ok.
L1460[16:35:22] <diesieben07> so this does not solve my primary problem in any way.
L1461[16:35:32] <howtonotwin> wait can't akka send messages to actors over the network?
L1462[16:35:35] <fry> what is your "primary problem"?
L1463[16:35:37] <howtonotwin> or was I dreaming
L1464[16:35:41] <fry> it can
L1465[16:35:46] <fry> transpatently :P
L1466[16:35:47] <diesieben07> my primary problem is that my Room class is not threadsafe
L1467[16:35:59] <fry> what do you actually do with it?
L1468[16:36:03] <diesieben07> and my gimmeRoom(player) method returns Promise<Room>
L1469[16:36:07] <howtonotwin> in that case there isn't much to "know" about networking in the room manager :D
L1470[16:36:27] <diesieben07> it originally just returned Room, because i wasnt planning for multiple threads.
L1471[16:36:55] <fry> what is Room? :P
L1472[16:37:24] <diesieben07> i'll start calling it by its actual name: Lobby
L1473[16:37:43] <diesieben07> it has getPlayers, getState, getCapacity, isFull
L1474[16:37:56] <diesieben07> oh and getChosenMap (the player can vote on a map)
L1475[16:38:24] <fry> what do you send over the net to the user in the "joined response" code?
L1476[16:38:58] <diesieben07> "your lobby state is now XXX" (probably AWAITING_PLAYERS initially)
L1477[16:39:27] <PaleoCrafter> is that state equal to "watching porn"? hurr durr
L1478[16:39:29] <diesieben07> but the LobbyManager should not need to know "this is going out over the net, they only need the state"
L1479[16:39:58] <diesieben07> the only logical thing for LobbyManager.requestLobby(Player) to return is Lobby
L1480[16:40:01] <diesieben07> or Promise<Lobby>
L1481[16:40:08] <fry> option 1: call getState in LobbyManager and send that to the player net handler
L1482[16:40:27] <fry> option 2: wrap room in an actor and interact with it that way
L1483[16:40:35] <howtonotwin> so in the docs for ItemOverrideList, should I say that applyOverrides "is only called in the vanilla handleItemState, and in almost all cases can be safely ignored."?
L1484[16:40:58] <diesieben07> with option 2... if i wanted to get the player out the room i'd have to sent it a message and wait for its response?
L1485[16:41:07] ⇦ Quits: abab9579 (~Abastro@175.117.182.109) (Ping timeout: 384 seconds)
L1486[16:41:09] <diesieben07> *get the players in the room.
L1487[16:41:11] <fry> depends
L1488[16:41:12] <diesieben07> damnit hands.
L1489[16:41:48] <ScottehBoeh> how do i maek a craft an item
L1490[16:41:49] <fry> you can either put the logic inside your RoomHandler actor - then you can call Room methods synchronously
L1491[16:42:05] <fry> or send a message if you're outside
L1492[16:42:23] <diesieben07> or i could make an immutable copy of the room before passing it out
L1493[16:42:37] <fry> yup
L1494[16:43:01] <diesieben07> or make getPlayers return Promise<List<Player>>
L1495[16:43:02] <diesieben07> :D
L1496[16:43:07] <howtonotwin> Promise?
L1497[16:43:11] <howtonotwin> are you sure about that?
L1498[16:43:12] <diesieben07> CompletableFuture
L1499[16:43:14] <diesieben07> but thats too long
L1500[16:43:28] <fry> again, basically, if you have a chunk of state with a protocol around it - actors are a natural choice
L1501[16:43:40] <diesieben07> yes, i get it
L1502[16:43:47] <diesieben07> but that does not solve this problem
L1503[16:43:55] <diesieben07> even wtih actors i could not pass this Room instance to the outside
L1504[16:44:06] <fry> you still didn't tell me enough about "this problem" :D
L1505[16:44:18] <diesieben07> someone calls reserveRoom
L1506[16:44:23] <diesieben07> gets a Room instance back and walks off with it
L1507[16:44:33] <fry> if you put all the "room" logic inside the RoomActor you don't need to "pass it outside"
L1508[16:44:38] <diesieben07> calls getPlayers on it, whcih gives them my thread-unsafe ArrayList
L1509[16:45:07] <diesieben07> so the RoomActor then needs to know that they need to send a network packet to the player if a room is requested
L1510[16:45:09] <fry> which is basically exactly the same amount of work as wrapping every getter in a promise code :D
L1511[16:46:55] <diesieben07> right? or am i misunderstanding?
L1512[16:47:07] <fry> user network code needing access to the thread-unsafe Room object is bad coupling - you'll need to change something anyway
L1513[16:47:10] <diesieben07> what woudl the roomactor respond with to the "room-request"?
L1514[16:47:33] <diesieben07> well, Room is just an interface
L1515[16:47:43] <diesieben07> just the implementation here happens to be thread-unsafe
L1516[16:47:48] <fry> LobbyManager will return ActorRef<Lobby> instead of Lobby
L1517[16:48:12] <fry> or whatever is the interface you want to expose
L1518[16:48:42] <diesieben07> What is ActorRef?
L1519[16:48:44] * diesieben07 goes to google
L1520[16:48:53] <fry> thing you call .tell() on :D
L1521[16:49:02] <fry> in jumi
L1522[16:49:06] <diesieben07> Oh
L1523[16:49:32] <diesieben07> so yeah, then i'd have to receive a response just to get the players out
L1524[16:49:41] <diesieben07> since if its an actor, i can no longer return List<Player>
L1525[16:50:16] <fry> you can hide it behind a promice if you want to, or behind a blocking call
L1526[16:50:48] <diesieben07> you know, i am very tempted to go back to being single-threaded.
L1527[16:51:01] <fry> why?
L1528[16:51:07] <diesieben07> because this all sucks very much :D
L1529[16:51:12] <fry> what sucks?
L1530[16:51:15] <diesieben07> all of this :D
L1531[16:51:21] <fry> be specific :P
L1532[16:51:30] <fry> learning sucks? :P
L1533[16:51:34] <howtonotwin> also if you have a future of list[player] can you not use map and other monad-y things to alleviate the pain of blocking?
L1534[16:51:38] <fry> talking sucks? :P
L1535[16:51:50] <diesieben07> no, no. all options i have so far are not nice :D
L1536[16:51:58] <fry> define "nice" :P
L1537[16:52:00] <diesieben07> howtonotwin, yes, i know.
L1538[16:52:16] <diesieben07> too much... fluff
L1539[16:52:20] <fry> you can do List<Players> players = LobbyRef.getPlayers() in akka
L1540[16:52:20] <diesieben07> i don't know :P
L1541[16:52:35] <diesieben07> and how the heck is that supposed to run async?
L1542[16:52:56] <diesieben07> that will block my network thread while it waits from some database to read the player list ...
L1543[16:53:00] <fry> it'll block the current thread obviously, until ther lobby responses, yes
L1544[16:53:28] <fry> it's a method call, nothing in java will give you anything better :P
L1545[16:53:50] <fry> but, if your Lobby actor is not stupid, it won't block
L1546[16:53:51] <kenzierocks> you know what i sometimes wish i had in java
L1547[16:53:55] <kenzierocks> generators from python
L1548[16:54:01] <kenzierocks> they're the best thing ever
L1549[16:54:26] <fry> and the whole request-reply won't be much slower than calling it all in 1 thread
L1550[16:54:52] <fry> + you'll get interleaved responses from multiple users - assuming each "user processing code" is run async
L1551[16:55:11] <diesieben07> honestly at this point i do not care much about performance, yet.
L1552[16:55:22] <fry> what do you care about then?
L1553[16:55:28] <diesieben07> i am just trying to find a way to nicely write this code, multithreaded :D
L1554[16:55:42] <fry> in java I assume? :D
L1555[16:55:56] <diesieben07> yes.
L1556[16:56:06] <diesieben07> and i know the answer will be "not possible". shaddap :P
L1557[16:56:12] <fry> it won't be :P
L1558[16:56:29] <fry> you have 2 alternative ways to write the "user network code"
L1559[16:56:40] <fry> blocking or promice chain (monadic)
L1560[16:56:46] ⇨ Joins: Cuby96 (~Cuby96@62.68.4.51)
L1561[16:57:04] <fry> that choice is completely independent of whether or not you use actors :P
L1562[16:57:21] <diesieben07> ok my connection is currently just a netty thingy based on NioEventLoop
L1563[16:57:29] <diesieben07> that means i get one thread per connection, right?
L1564[16:57:44] <fry> don't remember
L1565[16:57:50] <diesieben07> so if i block in that thread after receiving the packet, nothing should go horribly bad, right?
L1566[16:57:55] <diesieben07> assuming that is the case
L1567[16:58:01] ⇦ Quits: Mattizin (~mattizin@p57af4be1.dip0.t-ipconnect.de) (Ping timeout: 186 seconds)
L1568[16:58:04] <Cuby96> when i want to create a fluid i can do extends Fluid but i can do extends BlockStillLiquid and BlockDynamicLiquid right?
L1569[16:58:47] <diesieben07> anyways, i will sleep over this... need to get up in 8 hours.
L1570[16:58:49] <diesieben07> thanks for all your help.
L1571[16:58:53] <fry> hehe :P
L1572[16:58:57] <fry> bye
L1573[16:59:12] <diesieben07> even if i am not happy with the results :P
L1574[16:59:14] <diesieben07> but that is not your fault
L1575[16:59:20] * fry looks at the clock and leaves too
L1576[16:59:25] *** fry is now known as fry|sleep
L1577[16:59:26] <diesieben07> night
L1578[16:59:42] <fry|sleep> my main point is that actors will help with the LobbyManager :P
L1579[16:59:43] <Roburrito> RanchCraft.MODID + ":horse_gray.png"
L1580[16:59:50] <fry|sleep> (and with other things like it)
L1581[16:59:56] <Roburrito> java.io.FileNotFoundException: ranchcraft:horse_gray.png
L1582[17:00:12] <Roburrito> I put a file marked horse_gray.png in every folder I could think of.
L1583[17:01:20] ⇦ Quits: KnightMiner (~KnightMin@107-1-23-59-ip-static.hfc.comcastbusiness.net) (Ping timeout: 206 seconds)
L1584[17:01:51] <Cuby96> instead of Fluid i can extend from BlockStillLiquid and BlockDynamicLiquid and merge them together right?
L1585[17:03:14] ⇦ Quits: founderio (~Thunderbi@p200300C4E3CC8100FADFE006F4355DE7.dip0.t-ipconnect.de) (Quit: founderio)
L1586[17:04:13] <Cuby96> ?
L1587[17:04:17] ⇦ Quits: Hgrebnednav (~Hgrebnedn@d8D872A6E.access.telenet.be) (Ping timeout: 183 seconds)
L1588[17:04:20] ⇦ Quits: ScottehBoeh (~ScottehBo@95.144.45.252) (Quit: Leaving)
L1589[17:08:44] <Cuby96> anyone who can help me out?
L1590[17:08:48] <howtonotwin> 1) What are you doing? 2) Java doesn't have multiple inheritance for classes. 3) Do not use the vanilla BlockLiquid classes unless you have a good reason to.
L1591[17:08:56] ⇦ Quits: AstralSorcerer (~AstralSor@128.151.114.87) (Ping timeout: 183 seconds)
L1592[17:09:05] <howtonotwin> is this just a normal fluid block?
L1593[17:10:15] <Cuby96> howtonotwin yes it is i managed it to use the Fluid method setup the name but i cant do the textures so i want to try the other way with BlockLiquid
L1594[17:10:47] <howtonotwin> read this https://gist.github.com/WesCook/c9e282e49580588dd397350283e7e4e1
L1595[17:11:01] <howtonotwin> and you need a Fluid class
L1596[17:11:08] <howtonotwin> well a Fluid instance at least
L1597[17:11:12] ⇨ Joins: Doty1154 (~Doty1154@c-73-189-164-179.hsd1.ca.comcast.net)
L1598[17:11:16] <howtonotwin> that must be registered with the FluidRegistry
L1599[17:12:15] <kokolihapihvi> is there an easy way to determine if a block has a custom renderer?
L1600[17:12:30] <Cuby96> cant i just use colorMultiplier to use a standard color howtonotwin
L1601[17:12:39] <howtonotwin> ?
L1602[17:12:51] <howtonotwin> koko: "custom renderer" meaning?
L1603[17:13:20] <kokolihapihvi> the block has a 3d model, instead of the vanilla basic cube
L1604[17:14:40] <Cuby96> a sideonly colorMultiplier(IBlockAccess iba, int par2, int par3, int par4) doesnt that work aswell?
L1605[17:14:59] ⇦ Quits: RichardG (~richardg8@201.37.241.91) (Ping timeout: 198 seconds)
L1606[17:15:03] ⇨ Joins: RichardG_ (~richardg8@201.37.241.91)
L1607[17:15:03] MineBot sets mode: +v on RichardG_
L1608[17:15:23] <howtonotwin> what?
L1609[17:15:37] <howtonotwin> the textures are totally separate from the fluid and block
L1610[17:15:45] <howtonotwin> you still need to define a block
L1611[17:15:48] <howtonotwin> and a fluid
L1612[17:15:50] <howtonotwin> and a texture
L1613[17:16:14] <howtonotwin> explain in great detail what you want
L1614[17:16:38] <howtonotwin> koko: There's an instance of BlockStateMapper somewhere in the client
L1615[17:16:48] <howtonotwin> probably protected or private
L1616[17:16:56] <howtonotwin> search around for it
L1617[17:16:57] <howtonotwin> get it
L1618[17:17:14] <howtonotwin> ask it to map the IBlockState in question
L1619[17:17:23] <Cuby96> my Fluid Constructor only has one argument as it calls the super function as it extends, and it accepts only a String which is the fluidName howtonotwin
L1620[17:17:46] <howtonotwin> not what you're doing; what you want.
L1621[17:17:47] <howtonotwin> :P
L1622[17:18:08] <kokolihapihvi> I'm doing this during load time, I don't think blockstates exist yet?
L1623[17:18:39] <howtonotwin> in that case you'd want to do this for all possible IBlockStates for a block
L1624[17:18:53] <howtonotwin> and this will be client only
L1625[17:18:59] <Cuby96> i opened up the Fluid.class and its written here public Fluid(String fluidName)
L1626[17:19:02] <howtonotwin> so you can't do much with it
L1627[17:19:32] <howtonotwin> Cuby: what do you want to do, as in what do you want to see in the game
L1628[17:19:56] <howtonotwin> I still don't have a good grasp on what you're doing
L1629[17:19:56] <Cuby96> well i want to simply add a custom liquid
L1630[17:20:09] <howtonotwin> in that case
L1631[17:20:17] <howtonotwin> read the thing I linked earlier
L1632[17:20:26] <howtonotwin> and then state which part you have an issue with
L1633[17:20:28] <Cuby96> and the constructor of the super class only accepts a string as parameter
L1634[17:20:43] <Cuby96> well thats my issue the constructor in the super class only accepts one param
L1635[17:21:18] <howtonotwin> ?
L1636[17:21:20] <howtonotwin> `public Fluid(String fluidName, ResourceLocation still, ResourceLocation flowing)`
L1637[17:21:29] <howtonotwin> straight from the source
L1638[17:22:23] <Cuby96> http://imgur.com/a/hF1FQ thats my source
L1639[17:23:08] <kokolihapihvi> basically I'm going through all registered ores in the oredictionary and I need to filter out blocks that I can't render as cubes
L1640[17:23:45] <howtonotwin> Cuby: are you not on 1.9+ by any chance
L1641[17:24:01] <howtonotwin> bc that's dragon territory for me and you better ask someone else
L1642[17:24:45] <Cuby96> well its 1.7.10 as i want to make a mod for the modpack i love to play (dont judge me)
L1643[17:25:06] <howtonotwin> yeah I don't know much about 1.7 rendering, esp. not fluids
L1644[17:25:07] <gigaherz> Cuby96: that's pointless to say, we WILL judge you regardless
L1645[17:25:08] <gigaherz> ;P
L1646[17:25:17] <gigaherz> the thing really is
L1647[17:26:02] <gigaherz> this channel doens't provide support for 1.7.10, or even 1.8 -- 1.9.4 is the oldest we can reasonably help with
L1648[17:26:33] <gigaherz> and even that one will soon be phased out since 1.10.2 now has new stuff that won't apply to the old versions anymore
L1649[17:26:52] <gigaherz> (registry events, most notably)
L1650[17:27:08] <Cuby96> so where can i get help for older things? because most of the modpacks are made with 1.7.10 mods so i want to do that and im not interested in newer updates yet
L1651[17:27:14] <gigaherz> "elsewhere"
L1652[17:27:24] <howtonotwin> koko: yeah that's gonna be hacky
L1653[17:27:27] <gigaherz> I personally don't care much for old mc
L1654[17:27:36] <gigaherz> so I never bothered to look for alternative places to get help from
L1655[17:27:38] <howtonotwin> anyway you're gonna have to get all the blockstates for a block
L1656[17:27:58] <howtonotwin> and filter them for non-"minecraft:block/cube" models
L1657[17:28:14] <Roburrito> Dammit.
L1658[17:28:20] <Roburrito> Incorrect folder arrangement.
L1659[17:28:22] <Roburrito> BUT FIXED
L1660[17:28:27] <Cuby96> gigaherz: well for my case i want to implement it into a modpack which is 1.7.10 so reasonably i will code my program in 1.7.10
L1661[17:28:38] <Roburrito> Forgot to have /textures in /assets/modid
L1662[17:28:59] <Roburrito> BUT
L1663[17:29:05] <Roburrito> I have it working now. Yay me.
L1664[17:29:06] <howtonotwin> get an MRL from an IBlockState with BlockStateMapper
L1665[17:29:09] <gigaherz> Cuby96: sure I understand
L1666[17:29:15] <gigaherz> I don't agree, but I understand
L1667[17:29:26] <gigaherz> but the rules are that this channel doesn't provide help with 1.7.10, and that we can't help
L1668[17:29:27] <howtonotwin> which exists somewhere, protected/private
L1669[17:29:31] <kokolihapihvi> ...and it needs to run serverside because it registers items, is there really not a "hasCustomRenderer" method anywhere?
L1670[17:29:37] <howtonotwin> no
L1671[17:29:41] <howtonotwin> bc that won't make sense
L1672[17:29:52] <howtonotwin> every client may have its own resource pack
L1673[17:29:55] <Cuby96> can i pm you for a bit gigaherz?
L1674[17:29:57] <howtonotwin> and block shapes happen there
L1675[17:29:59] <gigaherz> yo ucould
L1676[17:30:04] <kokolihapihvi> ahhh yeah you're right
L1677[17:30:05] <gigaherz> but as I said, I don't know much of older versions
L1678[17:30:08] <gigaherz> so it will be pointless
L1679[17:30:09] <gigaherz> ;p
L1680[17:30:27] <howtonotwin> anyway, why do you need to know if you can render it as a cube?
L1681[17:30:28] <gigaherz> also, I have 0 experience with fluids so yeah
L1682[17:32:07] ⇦ Quits: Noppes (~Noppes@ip56530f2e.direct-adsl.nl) (Read error: Connection reset by peer)
L1683[17:34:13] <kokolihapihvi> I generate textures based on the ore's original texture and if the block has a custom model I can't access its texture
L1684[17:36:45] <kokolihapihvi> thaumcrafts crystals are causing me alot of trouble for being an ore with a custom model
L1685[17:38:20] <kokolihapihvi> I suppose I could just default to a blank texture and ignore them since you can't craft my item without the silktouched ore anyway (i don't think you can silktouch thaumcraft crystals)
L1686[17:38:22] <gigaherz> sure you can, you can get the baked model(s) for it, get each quad, and reverse-map the UVs to a TextureAtlasSprite
L1687[17:38:41] <gigaherz> unless you are on 1.7.10, then you are out of luck, I guess
L1688[17:39:00] <kokolihapihvi> gigaherz the TextureAtlasSprite maps to missingno because this happens in loadtime
L1689[17:40:23] <gigaherz> yo ucan always have some config file where people can give you overrides
L1690[17:40:31] <kokolihapihvi> and I don't think I could even use that in my code because I'm merging BufferedImages
L1691[17:41:26] <howtonotwin> what kind of effect are you going for here (just curious)?
L1692[17:41:44] <gigaherz> that's actually a good question
L1693[17:41:47] <kokolihapihvi> I'll just show you the mod; https://minecraft.curseforge.com/projects/ore-pings
L1694[17:41:50] <gigaherz> depending on what modification you want to do
L1695[17:41:58] <gigaherz> you could do it without injecting new textures
L1696[17:42:21] <gigaherz> hmmm
L1697[17:42:52] <howtonotwin> use the particle texture?
L1698[17:43:00] <howtonotwin> think that'll be ok for this
L1699[17:43:07] <gigaherz> yeah sounds like the simplest choice
L1700[17:43:10] <kokolihapihvi> maps to missingno because this happens at load time
L1701[17:43:15] <gigaherz> wat
L1702[17:43:17] <howtonotwin> wat
L1703[17:43:21] <howtonotwin> custom IModel anyone?
L1704[17:43:23] <gigaherz> oh you are generating the textures at load time
L1705[17:43:31] <kokolihapihvi> yeah
L1706[17:43:31] <gigaherz> yeah wrong place
L1707[17:43:33] <gigaherz> do it with an IModel
L1708[17:43:40] <gigaherz> and put all the models for other blocks in your dependencies
L1709[17:44:15] <gigaherz> actually doesn't ModelBakeEvent happen after TextureStitch?
L1710[17:44:19] <kokolihapihvi> I'm getting the other mods ore texture by "guessing" the ResourceLocation of the texture and loading it in
L1711[17:44:39] <gigaherz> there's another option, but it will be less "fancy"
L1712[17:44:50] ⇨ Joins: KnightMiner (~KnightMin@107-1-23-59-ip-static.hfc.comcastbusiness.net)
L1713[17:44:51] <gigaherz> you can use the actual model, as a cube or whatever
L1714[17:45:04] <gigaherz> just draw it inside an empty "frame" scaled down a bit
L1715[17:45:31] <gigaherz> or draw the black edge on top of the cube
L1716[17:45:41] <howtonotwin> 1) in custom IModel, get texture for block somehow (particle texture is good idea)
L1717[17:45:45] <howtonotwin> 2) do math
L1718[17:46:02] <howtonotwin> 3) produce BakedQuads in desired shape with desired texture
L1719[17:46:19] <howtonotwin> also there's a helper static somewhere
L1720[17:46:26] <howtonotwin> might by in ModelDynBucket
L1721[17:46:34] <howtonotwin> that takes a texture and a mask
L1722[17:46:43] <howtonotwin> and makes BakedQuads out of them
L1723[17:46:45] <howtonotwin> I think
L1724[17:46:47] <gigaherz> you could also inject "dummy" textures at load time
L1725[17:46:52] <gigaherz> and then modify those texture afterward
L1726[17:47:14] <howtonotwin> why make new textures when you can just do math in the model?
L1727[17:47:28] <gigaherz> I'm thinking of different ways to achieve this
L1728[17:47:28] <gigaherz> ;P
L1729[17:47:51] <kokolihapihvi> a item renderer that renders the block inside a blank black ring item?
L1730[17:48:07] <howtonotwin> no
L1731[17:48:12] <howtonotwin> custom IModel
L1732[17:48:24] <kokolihapihvi> heres how I do the texture stuff now, its based on RWTemas dense ores; https://github.com/kokolihapihvi/OrePings/blob/master/src/main/java/com/kokolihapihvi/orepings/client/PingTexture.java#L72
L1733[17:49:01] <kokolihapihvi> it's working fine for ores that follow vanilla guidelines
L1734[17:49:09] <howtonotwin> ok you see ModelDynBucket?
L1735[17:49:14] <howtonotwin> It's a Forge class.
L1736[17:49:25] <howtonotwin> you want basically that except a little tweaked
L1737[17:49:26] <howtonotwin> :P
L1738[17:49:58] <howtonotwin> Get out your clipboard! It is time to prove your C and V keys
L1739[17:50:01] <howtonotwin> ' worth
L1740[17:50:05] <howtonotwin> dammit keyboard
L1741[17:50:09] <howtonotwin> x)
L1742[17:51:23] <kokolihapihvi> when's that baked?
L1743[17:51:37] <howtonotwin> sometime between preinit and innit
L1744[17:51:39] <howtonotwin> *init
L1745[17:52:26] <kokolihapihvi> so technically it wouldn't change much from what I'm doing now
L1746[17:52:54] <howtonotwin> this thing loads a new texture into the atlas
L1747[17:53:18] <howtonotwin> ModelDynBucket doesn't, it loads a new model and bakes it using the existing stuff
L1748[17:56:10] <kokolihapihvi> I don't get it... instead of the list of textures I have now, I'd have a list of those IModels and I'd pick the right one in handleItemState?
L1749[17:56:58] <howtonotwin> The issue you have is that you need the texture of a block when loading textures
L1750[17:57:20] <kokolihapihvi> yeah and currently I load it from a ResourceLocation
L1751[17:57:28] <howtonotwin> otherwise worded, during the loading of textures, you want to get the model of a block and find a texture out of it
L1752[17:57:39] <howtonotwin> yes?
L1753[17:58:59] <kokolihapihvi> did you look at the github link I pasted?
L1754[17:59:30] <howtonotwin> yep
L1755[18:00:00] <kokolihapihvi> so basically I guess the ResourceLocation of the ores texture and load it in manually, and then merge it with my blank texture
L1756[18:00:08] <howtonotwin> which is a bad idea
L1757[18:00:13] <howtonotwin> as you already said it fails
L1758[18:00:14] <kokolihapihvi> how so?
L1759[18:00:30] <howtonotwin> on things like TC crystals
L1760[18:00:36] ⇦ Quits: iari (~iari___@evana.futhark24.org) (Quit: Leaving)
L1761[18:00:39] <gigaherz> not even that
L1762[18:00:41] <kokolihapihvi> ah yeah, for ores that don't follow the vanilla standard of "textures/blocks/ore_whatever.png"
L1763[18:00:51] <howtonotwin> you shouldn't depend on that
L1764[18:01:01] <gigaherz> http://resourcepack.net/res/3d-resource-pack/
L1765[18:01:12] <gigaherz> there's an entire category of resourcepacks that are simply not cubes
L1766[18:01:26] <howtonotwin> you need to know the model of a block to really understand how it's textured
L1767[18:01:53] <howtonotwin> otherwise you'll have so many edge cases that the edge cases are no longer edge cases :P
L1768[18:02:14] ⇨ Joins: electrolitic (~electroli@104-184-56-125.lightspeed.cicril.sbcglobal.net)
L1769[18:02:19] <kokolihapihvi> yeah I hadn't even thought about that
L1770[18:02:45] <howtonotwin> therefore, you need to let the block models load
L1771[18:02:54] <kokolihapihvi> this is basically 1.7.10 code forced to work in 1.8 :p
L1772[18:03:00] <gigaherz> it shows ;P
L1773[18:03:13] <gigaherz> which is why we are suggesting alternative solutions
L1774[18:03:18] <howtonotwin> and THEN, in a custom IModel, piece together the block model's extracted texture and your base
L1775[18:03:20] <gigaherz> since modern minecraft doesn't work the same way as before
L1776[18:03:59] ⇨ Joins: TankCR (~KRoy.Loca@c-67-185-205-223.hsd1.wa.comcast.net)
L1777[18:04:26] <kokolihapihvi> I just haven't figured out how the models work yet, that dynbucket way seems more elegant anyway
L1778[18:04:34] <howtonotwin> erm
L1779[18:04:37] <howtonotwin> one mo
L1780[18:04:43] <TankCR> hey anyone know of a duct that will pour fluid into a pond?
L1781[18:04:55] <gigaherz> hmmm there was a filler in 1.7.10
L1782[18:05:00] <gigaherz> dunno if the mod that had it has been ported
L1783[18:05:05] <howtonotwin> https://gist.github.com/howtonotwin/399aa28984d729060f30b44a02d4c726#file-mkdocs-yml-L21-L27
L1784[18:05:18] <howtonotwin> this is a gist'd snapshot of a very wip thing that I'm writing
L1785[18:05:26] <gigaherz> I assume by "pour" you mean actually place the fluid
L1786[18:05:32] <howtonotwin> it's a PR to the rtd pages
L1787[18:05:34] <TankCR> running a 1.7 server that I need it on, remember what the filler was from
L1788[18:05:36] <gigaherz> if you just want it to animate a fountain, that'd be no, then
L1789[18:05:36] <howtonotwin> *will be
L1790[18:05:59] <howtonotwin> read the files in the order specified in the highlighted part of mkdocs
L1791[18:06:04] <gigaherz> buildcraft has the Filler
L1792[18:06:09] <gigaherz> but there was another one I think
L1793[18:06:09] ⇦ Quits: Cuby96 (~Cuby96@62.68.4.51) ()
L1794[18:06:14] <howtonotwin> and please yell at me if you don't like the writing
L1795[18:06:15] <TankCR> cool, got bc on there
L1796[18:06:21] <gigaherz> no wait the filler is for
L1797[18:06:25] <gigaherz> filling an area with X block
L1798[18:06:29] <howtonotwin> it works for blocks too, no?
L1799[18:06:33] <howtonotwin> *liquid
L1800[18:06:37] <gigaherz> can't remember the name
L1801[18:06:45] <gigaherz> well yeah
L1802[18:06:59] <gigaherz> Flood Gate
L1803[18:07:07] <gigaherz> that one places fluids around itself
L1804[18:07:08] <kokolihapihvi> yeah I'll look those, thanks
L1805[18:07:13] <howtonotwin> np
L1806[18:07:18] <gigaherz> http://minecraftbuildcraft.wikia.com/wiki/Flood_Gate
L1807[18:07:23] <gigaherz> as they say there
L1808[18:07:25] <howtonotwin> and please comment anything you don't like
L1809[18:07:31] <gigaherz> pump - pipe - floodgate
L1810[18:07:35] <gigaherz> lets you move lakes around
L1811[18:07:38] <howtonotwin> now there are a couple of pieces missing from that thing
L1812[18:07:50] <howtonotwin> ItemOverrideList
L1813[18:07:53] <howtonotwin> BakedQuad
L1814[18:07:55] <howtonotwin> VertexFormat
L1815[18:07:59] <howtonotwin> and ICustomModelLoader
L1816[18:07:59] <gigaherz> TankCR: seen that link?
L1817[18:08:12] <howtonotwin> you should be able to glean most of it from ModelDynBucket
L1818[18:08:27] <howtonotwin> and the intro page should help too.
L1819[18:08:31] <kokolihapihvi> I'll get back to you later if you're still here
L1820[18:08:35] <kokolihapihvi> yeah
L1821[18:11:08] ⇨ Joins: Abastro (~Abastro@175.117.182.109)
L1822[18:15:46] <g> If I remove a mod and re-add it, restarting the server in-between, it appears that forge doesn't actually remove the entities from that mod
L1823[18:15:52] <g> Any way to make it do that?
L1824[18:16:33] <howtonotwin> probably better and easier to just use mcedit
L1825[18:16:46] <g> would rather not download and reupload a 30GB map
L1826[18:17:09] <howtonotwin> load world, /kill @e[type=...] ?
L1827[18:17:26] <g> hmm.. could try that
L1828[18:17:30] <howtonotwin> will probably only work in loaded chunks
L1829[18:17:39] <g> the area is chunkloaded so it should work
L1830[18:17:44] <g> gotta figure out what the entity name is though
L1831[18:17:48] <howtonotwin> so really you may as well disable the mod and travserse the entire server
L1832[18:17:59] <g> I know where the erroring entity is
L1833[18:18:09] <g> but going to the area with the mod disabled doesn't remove the entity
L1834[18:18:14] <howtonotwin> you can also kill all in area
L1835[18:18:34] <g> the problem is that the client crashes in the area, that's why I need to do this
L1836[18:18:39] <g> old broken entity from an older version of the md
L1837[18:18:41] <g> mod*
L1838[18:20:42] <howtonotwin> if you don't feel like transferring 60GB you could just transfer the one region file with the issue and mcedit that :P
L1839[18:21:08] <g> mm, true, but I don't know what region file it is
L1840[18:21:30] <howtonotwin> https://dinnerbone.com/minecraft/tools/coordinates/
L1841[18:22:19] <g> are my logoff coords stored somewhere I can get at that's human-readable?
L1842[18:22:29] <howtonotwin> you player dat file
L1843[18:23:06] <g> not exactly human-readable though
L1844[18:23:06] <g> lol
L1845[18:23:07] <howtonotwin> filenames are UUIDs
L1846[18:23:10] <howtonotwin> https://mcuuid.net/?q=howtonotwin
L1847[18:23:18] <howtonotwin> download and nbtedit :P
L1848[18:23:23] <g> ergh, okay. :P
L1849[18:23:39] <howtonotwin> you totally didn't see my crappy skin
L1850[18:23:42] <howtonotwin> >.<
L1851[18:24:28] <masa> isn't there also a config option in Forge to remove erroring entities?
L1852[18:24:37] <g> yeah, but this is erroring on the client, not the server
L1853[18:25:04] <masa> also, would setting the player render distance really low and then loading the area only on the server with the mod removed delete the entity?
L1854[18:25:16] <g> it doesn't delete the entity
L1855[18:25:22] <g> I'm not entirely sure what forge does
L1856[18:25:26] <masa> I don't see how the entity could persist without the mod being enabled
L1857[18:25:30] <g> but if you install the mod again, the entities are back exactly how they were
L1858[18:25:37] <g> I noticed it with some other mods as well
L1859[18:25:43] <masa> hmm
L1860[18:25:48] <g> well they're just, yknow, entities stored in the world file
L1861[18:25:49] <masa> which mod and entity is it?
L1862[18:25:51] <g> it just doesn't load them in
L1863[18:25:55] <g> haha, it's MoCreatures' dolphins
L1864[18:26:01] <g> closed-source or I'd be done by now
L1865[18:26:20] <g> He's got some silly bug where he's trying to cast a boolean to a string
L1866[18:26:24] <masa> well when the chunk saves again, it should only write (and overwrite to be more specific) the laoded entities from the chunk
L1867[18:26:37] <masa> and the entity can not be loaded if the mod and thus the class for it are missing
L1868[18:26:49] <g> well, I don't know what to say, really
L1869[18:26:52] <g> they persist
L1870[18:26:53] <g> we did try it
L1871[18:26:58] <masa> hmm
L1872[18:27:14] <masa> so does it crash the server when it gets loaded, or what happens?
L1873[18:27:27] <g> the server is fine
L1874[18:27:33] <g> the client crashes while trying to render it
L1875[18:27:47] <g> I've disabled spawns, just need to get rid of the entities
L1876[18:28:10] <masa> hmm actually...
L1877[18:28:19] <howtonotwin> server console?
L1878[18:28:28] <g> server's fine, as I say
L1879[18:28:36] <masa> it happens that I just a few days ago made a mod that can remove entities that have duplicated (same UUID)
L1880[18:28:37] <g> I'd kill all the entities if I knew what the entity name was
L1881[18:28:40] <g> it's nothing obvious though
L1882[18:28:46] <howtonotwin> killall within 127 blocks of player?
L1883[18:28:54] <masa> so adding in the ability to remove all entities of a type would be trivial
L1884[18:29:03] <g> I'd be murdering user's farms and stuff so I'd rather not do that unless I have to
L1885[18:29:09] <g> masa, that'd be pretty helpful
L1886[18:29:15] <masa> I also have the Tellme mod that can dump you a complete list of the entities
L1887[18:29:30] <g> Didn't know that was a thing, that'd be handy
L1888[18:29:34] <masa> registered entities that is
L1889[18:29:42] <masa> https://minecraft.curseforge.com/projects/tellme
L1890[18:30:17] <masa> you should be able to find out the entity ID from that list, and then use the /kill @e[type=whatever]
L1891[18:30:22] <g> that'd work
L1892[18:30:24] <g> I'll give that a go
L1893[18:30:26] <masa> but be careful with the kill command!
L1894[18:30:32] <g> I know. :P
L1895[18:30:44] <masa> before 1.11 if you make a typo, it will kill ALL entities that are currently loaded!
L1896[18:30:49] <masa> so have a backup first :p
L1897[18:30:56] <g> oh?
L1898[18:31:01] ⇨ Joins: Xenose (webchat@pdf87575b.tokynt01.ap.so-net.ne.jp)
L1899[18:31:07] <g> oh, you mean the syntax
L1900[18:31:09] <g> rather than the.. yeah
L1901[18:31:09] <g> okay
L1902[18:31:45] <howtonotwin> oh they changed that in 1.11?
L1903[18:32:05] <masa> hmm not entirely sure what happens if it doesn't find any entities, but atleast if you typo the argument, ie. type vs. Type for example, it will kill EVERYTHING
L1904[18:32:25] <g> you say that, but it didn't
L1905[18:32:26] <g> :P
L1906[18:32:28] <masa> yeah I think i nthe latest snapshot they finally fixed that so it will give you error messages instead of killing everything :p
L1907[18:32:31] <howtonotwin> if it finds nothing you get lovely red text saying it got confused
L1908[18:32:37] <howtonotwin> :P
L1909[18:32:40] <g> yeah, rcon gives me an error
L1910[18:32:42] <g> instead of deleting everything
L1911[18:33:05] <masa> oh which version are you on?
L1912[18:33:21] <g> 1.10.2
L1913[18:33:25] <masa> ok
L1914[18:35:09] *** PaleoCrafter is now known as PaleOff
L1915[18:36:29] <g> alright, got it
L1916[18:36:32] <g> thanks for your help, guys
L1917[18:37:10] <Roburrito> Hm. I think I'm close to having this.
L1918[18:37:45] <Roburrito> RenderWolf has the doRender() method, which contains the line: GlStateManager.color(f, f, f);
L1919[18:38:00] <Roburrito> This changes the color of the wolf, f being set by being wet.
L1920[18:38:16] <Roburrito> I can't find where GlStateManager actually messes with the texture, though.
L1921[18:39:01] <masa> it doesn't?
L1922[18:39:48] <gigaherz> it doens't. that's passed on to opengl
L1923[18:39:58] <gigaherz> which is passed on to the gpu, which multiplies the values on the fly
L1924[18:40:52] *** amadornes is now known as amadornes[OFF]
L1925[18:43:01] <Roburrito> Ah
L1926[18:43:15] *** Darkhax_AFK is now known as Darkhax
L1927[18:45:00] <g> hmm, I wonder if I can hook map loadup and delete entities before they reach the client
L1928[18:46:41] ⇨ Joins: sinkillerj (~sinkiller@nc-67-232-8-209.dhcp.embarqhsd.net)
L1929[18:46:52] <g> not that I'd have a clue how to do that
L1930[18:47:00] <g> doubt there are docs on it, either
L1931[18:48:27] <g> anyone have any ideas on that?
L1932[18:50:48] <Roburrito> Huh. doRender() isn't being called.
L1933[18:51:09] <gigaherz> g: hmm you could maybe delete them offline?
L1934[18:51:20] <gigaherz> I don't kno if mcedit can list/edit entities
L1935[18:51:30] <g> I can't download and reupload the map
L1936[18:51:32] <g> it's far too big
L1937[18:51:35] <gigaherz> Oh I see
L1938[18:51:39] <g> and the server is headless
L1939[18:52:48] <g> it's stupid idea time
L1940[18:52:52] <g> chunkloaded command block on a timer
L1941[18:52:56] <g> lol
L1942[18:52:59] <masa> so you would still need to delete all entities in the entire map?
L1943[18:53:13] <g> or just get 'em when they're loaded
L1944[18:53:14] <g> yeah
L1945[18:53:31] <gigaherz> hmm so wait
L1946[18:53:37] <gigaherz> is the issue that those entities crash on a client?
L1947[18:53:42] <g> yeah
L1948[18:53:44] *** InusualZ is now known as InusualZ-Bed
L1949[18:53:58] <gigaherz> can't like, compile a modified version of the mod that avoids the crash?
L1950[18:54:06] <g> closed-source and obfuscated
L1951[18:54:07] <masa> well a cheap solution would be to have a mod that prevents them from being spawned in the world
L1952[18:54:14] <gigaherz> yeah
L1953[18:54:19] <g> the mod itself provides that
L1954[18:54:21] <g> I have the spawn disabled
L1955[18:54:25] <masa> no I mean
L1956[18:54:27] <g> there are just entities hanging around from before that
L1957[18:54:33] <gigaherz> can EntityJoinWorldEvent be cancelled?
L1958[18:54:39] <masa> cancel EntityJoinWorldEvent
L1959[18:54:44] <gigaherz> yup it can
L1960[18:54:44] <masa> yeah
L1961[18:54:46] <gigaherz> it's @Cancelable
L1962[18:54:51] ⇨ Joins: LexLap (~LexManos@172.76.2.58)
L1963[18:54:51] MineBot sets mode: +o on LexLap
L1964[18:54:57] <g> do I just use that like any other forge event?
L1965[18:55:01] <gigaherz> yup
L1966[18:55:03] <gigaherz> @SubscribeEvent
L1967[18:55:05] <gigaherz> and the method
L1968[18:55:21] <g> alright, I'll give that a shot then
L1969[18:55:23] <g> thanks
L1970[18:55:29] <Redfoxmoon> g, are you sure it's not just MCP reobfuscation? :P
L1971[18:55:35] <LexLap> ?
L1972[18:55:38] <g> it's MoCreatures, so yes
L1973[18:55:38] <g> :P
L1974[18:55:43] <Redfoxmoon> oh brother
L1975[18:55:57] <g> gotta say I don't remember it being this buggy
L1976[18:56:28] <Redfoxmoon> brutal way would be to remove the mod, that should just cause the entities to disappear right?
L1977[18:56:37] <gigaherz> out of curiosity, did you try removing optifine/fastcraft/whateverotherhackyoumayhaveinthere
L1978[18:56:47] <gigaherz> Redfoxmoon: that's what he said, it doesn't
L1979[18:56:52] <g> yes, it's not that
L1980[18:56:58] <Redfoxmoon> O_o
L1981[18:57:03] <g> the issue is that the mocreatures dev is casting a boolean to a string dynamically for some reason
L1982[18:57:28] <Redfoxmoon> wait so, even when the mod is removed, the entities remain?
L1983[18:57:30] <Redfoxmoon> good lord
L1984[18:57:32] <g> yes
L1985[18:57:37] <masa> is it a DataManager problem?
L1986[18:57:49] <g> No
L1987[18:58:14] <g> it goes from RenderManager right into the dolphin renderer, where the error is
L1988[18:58:19] <masa> there used to be something weird either in vanilla or Forge where some zombies were causing a similar casting error
L1989[18:58:26] <gigaherz> Redfoxmoon: well he doesn't want to fully remove the mod
L1990[18:58:27] <masa> oh okay
L1991[18:58:31] <gigaherz> he just wants to remove the buggy entities, I think
L1992[18:58:46] <gigaherz> if he just removes the mod and loads the chunks
L1993[18:58:46] <g> yeah, but removing the mod, restarting the server, and then adding it back doesn't remove the entities
L1994[18:58:51] <masa> well just removing the mod won't magically remove the entities from unloaded chunks
L1995[18:58:57] <gigaherz> ALL the entities will disappear then
L1996[18:59:05] <gigaherz> but there is that: you have to cause ALL the chunks to load
L1997[18:59:07] <g> I'd be okay with that
L1998[18:59:10] <g> yeah, that's the problem
L1999[18:59:10] <gigaherz> so that the entities are loaded from those chunks
L2000[18:59:31] <masa> well that mod I mentioned can delete entities from unloaded chunks
L2001[18:59:46] <masa> but it doesn't currently have a command variant to delete entities by type
L2002[19:00:05] <masa> and laos, I need to add a scheduler for it to handle the world in smaller parts
L2003[19:00:14] <masa> currently it just does it all at once
L2004[19:00:18] <masa> *also
L2005[19:01:21] <Redfoxmoon> gigaherz, right, okay
L2006[19:01:27] <masa> g: how urgent is this? I could try to work on that mod tomorrow and get you a version that could delete all the entities from the unloaded chunks
L2007[19:01:29] <Redfoxmoon> understandable :-)
L2008[19:01:44] <g> I'm just gonna cancel the event
L2009[19:01:50] <masa> ok
L2010[19:01:53] <g> we have an in-house mod we use as glue either way
L2011[19:02:23] <masa> alright. Well I'll be adding that command to my mod in any case, but there isn't any real hurry then
L2012[19:02:41] <g> not actually sure how to get the correct entity name here..
L2013[19:02:46] <g> haven't worked with entities before
L2014[19:03:35] ⇦ Quits: KnightMiner (~KnightMin@107-1-23-59-ip-static.hfc.comcastbusiness.net) (Ping timeout: 198 seconds)
L2015[19:04:20] <Redfoxmoon> g, unless I got an old version; it doesn't seem to be obfuscated
L2016[19:04:26] <masa> I think you would want to get the id from EntityList.whatever()
L2017[19:04:56] <g> right you are, thanks
L2018[19:04:57] <Redfoxmoon> nvm. grabbed old one
L2019[19:05:18] <masa> don't remember the exact method names, see what the Entity class uses in the writeToNBT() to get the "id" string
L2020[19:06:50] <g> EntityList.getIDFromString("mocreatures.Dolphin") should get the right ID, shouldn't it?
L2021[19:07:45] <masa> hmm
L2022[19:08:08] <masa> do you know the corrent ID? did you use the kill command?
L2023[19:08:11] <g> yeah
L2024[19:08:13] <g> that's the one
L2025[19:09:29] <masa> then don't you just want to compare like if ("mocreatures.Dolphin".equals(EntityList.getIDForEetityOrWhatever(event.getEntity())) ?
L2026[19:09:52] <g> IDs are ints
L2027[19:09:56] <masa> oh
L2028[19:10:05] <masa> humm
L2029[19:10:14] <masa> do those work for mod entities?
L2030[19:10:24] ⇨ Joins: AstralSorcerer (~AstralSor@128.151.114.178)
L2031[19:10:29] <g> well I mean, they'd have to be in the registry
L2032[19:11:02] <gigaherz> what version of mc?
L2033[19:11:05] <masa> but I think mod entities don't use unique integer IDs, do they? aren't they just by their string IDs
L2034[19:11:13] <g> 1.10.2
L2035[19:11:17] <gigaherz> they do have internal IDs
L2036[19:11:18] <Roburrito> Ah. I've been throwing an error I hadn't noticed. Been doing a bad call to RenderingRegistry
L2037[19:11:23] <gigaherz> although there's per-mod tables
L2038[19:11:34] <LexLap> <masa> then don't you just want to compare like if ("mocreatures.Dolphin".equals(EntityList.getIDForEetityOrWhatever(event.getEntity())) ?
L2039[19:11:36] <g> is it not as simple as this? https://dl.dropboxusercontent.com/u/1547120/ShareX/2016/October/idea64_2016-10-16_01-11-53.png
L2040[19:11:39] <LexLap> holy shit thats bad
L2041[19:12:15] <masa> yay for bad
L2042[19:13:32] <masa> is there something else that uniquely identifies entity types, without adding dependencies for the mod? this is for a quick hax bug fix mod anyway
L2043[19:13:33] <gigaherz> the entity registry has the ModContainer corresponding to an entity class
L2044[19:13:42] <gigaherz> along with the entity name
L2045[19:14:11] <gigaherz> however that seems to be private?
L2046[19:14:12] <masa> right okay
L2047[19:14:22] <gigaherz> ah no
L2048[19:14:23] <kashike> I'm glad 1.11 brings a ResourceLocation-based entity registry
L2049[19:14:25] <Kane_Hart> When I finally make my first mod I'm going to have it store via a list and have it scan through it every 1ms :P
L2050[19:14:28] <gigaherz> EntityRegistry#lookupModSpawn
L2051[19:14:31] <masa> I don't have my IDE at hand so I can't look up anything atm :/
L2052[19:14:32] <gigaherz> takes a Class
L2053[19:14:43] <gigaherz> and returns the EntityRegistration for it
L2054[19:14:50] <gigaherz> or null if not found
L2055[19:14:53] <LexLap> does it? havent looked and didnt last time i looked
L2056[19:15:07] <gigaherz> public EntityRegistration lookupModSpawn(Class<? extends Entity> clazz, boolean keepLooking)
L2057[19:15:21] <gigaherz> there's also
L2058[19:15:22] <gigaherz> public EntityRegistration lookupModSpawn(ModContainer mc, int modEntityId)
L2059[19:15:28] <gigaherz> but I was looking at the other one
L2060[19:15:35] <g> I don't appear to have those
L2061[19:15:54] <gigaherz> EntityRegistry.instance().lookupModSpawn ?
L2062[19:15:54] <g> anyway, looking over how tellme works
L2063[19:16:03] <g> oh right, .instance()
L2064[19:16:10] <g> looks like this is indeed what I want to be doing
L2065[19:16:22] <g> since passing the class into getEntityStringFromClass does indeed return "mocreatures.Dolphin"
L2066[19:18:10] <gigaherz> ah yeah, that would work too, I suppose ;P
L2067[19:20:12] <LexLap> what are you trying to do?
L2068[19:20:31] <g> stop entities of a particular type from loading into the map
L2069[19:20:35] <gigaherz> he has mocreatures in a server
L2070[19:20:39] <gigaherz> and the dolphins went crashy
L2071[19:20:50] <gigaherz> so he's trying to remove the existing ones from the map
L2072[19:20:51] <masa> so for use in that event, would it work that you get the entity class based on the name in the constructor and hold on to that, and then just compare the entity class in the event handler method?
L2073[19:20:53] <gigaherz> so they can continue playing
L2074[19:21:17] <LexLap> then just do instanceof
L2075[19:21:27] <LexLap> why you fucking with names?
L2076[19:21:34] <g> that'd be a hard dependency
L2077[19:21:43] <g> just looking for a hacky set-and-forget
L2078[19:21:54] <gigaherz> me: https://s-media-cache-ak0.pinimg.com/736x/27/e0/19/27e0190e1d0b5934efdc36d3b6ee2f25.jpg
L2079[19:21:57] <masa> can instanceof be used without having the mod as a dependency/present in the dev environment?
L2080[19:22:14] <LexLap> not a hard dep if you reflectivly get the class
L2081[19:22:24] <masa> hmm right
L2082[19:22:27] <gigaherz> no it would fail to load, you'd have to Class.fromName(...).isAssignableFrom or whatever
L2083[19:22:42] <g> don't really want to get into reflection at 1:30am
L2084[19:22:48] ⇨ Joins: iso2013 (~iso2013@c-67-176-10-45.hsd1.co.comcast.net)
L2085[19:22:49] <g> this should work anyway, so I'm happy as long as it does
L2086[19:22:59] <masa> so is using instanceof better than checking the class?
L2087[19:23:18] <masa> if the goal is to just prevent a specific type from entering the world
L2088[19:24:20] <LexLap> instanceof is faster and more reliable then looking in the registry or string comparison
L2089[19:24:26] <LexLap> however
L2090[19:24:36] <LexLap> if you dont want any 'reflection hackary'
L2091[19:24:56] <LexLap> then just do event.getClass().getName().equals("whatever.the.class.name.is")
L2092[19:24:59] <LexLap> slow, but mhe
L2093[19:25:54] <masa> how about getting the class from the registry based on the name in the event handler constructor and then directly comparing the class?
L2094[19:26:52] <LexLap> could yes but either way dont ping the registry every event
L2095[19:27:11] <masa> yeah
L2096[19:28:58] ⇦ Quits: Octobyte_ (~Octobyte@host86-131-202-60.range86-131.btcentralplus.com) (Quit: Leaving)
L2097[19:32:40] <Roburrito> YES
L2098[19:32:49] <Roburrito> Throwing errors, but new ones!
L2099[19:33:40] ⇦ Quits: codingCaptor (~codingCap@cpe-45-36-245-106.triad.res.rr.com) (Quit: Leaving)
L2100[19:33:42] ⇦ Quits: iso2013 (~iso2013@c-67-176-10-45.hsd1.co.comcast.net) (Quit: Bye :))
L2101[19:34:11] ⇦ Quits: kokolihapihvi (~kokolihap@a91-154-117-107.elisa-laajakaista.fi) ()
L2102[19:39:26] <g> thanks for your input guys, I'll play with it more tomorrow but I think I'm happy with it for now
L2103[19:39:28] <g> o7
L2104[19:40:53] <Boreeas> So for implementing a cubic chunks mod, we copied and modified the sponge async chunk loading classes. Anyone have an idea what that implies for licensing?
L2105[19:41:09] <Boreeas> s/sponge/forge/ apparently
L2106[19:41:12] <Boreeas> https://github.com/MinecraftForge/MinecraftForge/blob/f08f3c11053d414b57d03192dd72fcbfaef100f7/src/main/java/net/minecraftforge/common/chunkio/ChunkIOExecutor.java these ones
L2107[19:41:29] <Boreeas> Which licensing header do we use? Do we need a special notice somewhere for those classes in our LICENSE.txt?
L2108[19:43:09] <LexLap> lgpl follow it
L2109[19:44:28] <gigaherz> Boreeas: https://tldrlegal.com/license/gnu-lesser-general-public-license-v2.1-(lgpl-2.1)
L2110[19:46:05] <Boreeas> gigaherz: Thanks, that's helpful
L2111[19:46:22] <Roburrito> https://github.com/Roburrito/logs/blob/master/2016-10-15_20.44.35.png BOOYAH
L2112[19:46:37] <Boreeas> If I understand the blurb at the top correctly, we would need to relicense from MIT to LGPL though to actually use these classes?
L2113[19:46:44] <gigaherz> no
L2114[19:46:56] <gigaherz> the final package must be distributed under the LGPL
L2115[19:47:05] <gigaherz> you can still keep those files as MIT, while separately
L2116[19:47:07] ⇦ Quits: sinkillerj (~sinkiller@nc-67-232-8-209.dhcp.embarqhsd.net) (Ping timeout: 206 seconds)
L2117[19:47:18] <gigaherz> but as a whole, the LGPL must "take over"
L2118[19:47:37] <gigaherz> however, if you intermixed the code in onesingle file
L2119[19:47:42] <gigaherz> then yes, the whole file ends up as LGPL
L2120[19:47:56] <LexLap> umm no, lgpl isnt contagious
L2121[19:48:05] <Boreeas> Alright, thanks. Guess I'll talk to our project lead about that then
L2122[19:48:06] <LexLap> but the point is, just keep your shit open source
L2123[19:48:10] <gigaherz> botu you can still take out the bits that are LGPL
L2124[19:48:13] <LexLap> and dont take credit for our shit
L2125[19:48:17] <gigaherz> and it can go back to the individual licenses of the parts
L2126[19:48:30] <LexLap> you can use the shit as in-code library
L2127[19:49:29] <gigaherz> hmm yeah I worded something wrongly
L2128[19:49:43] <jamierocks> funnily enough I've been planning to do async chunk loading for neptune :p
L2129[19:49:43] <gigaherz> the LGPL only applies to the parts that are compiled as one single indivisible unit
L2130[19:50:12] <gigaherz> so long as you have enough information to re-create the binary
L2131[19:50:19] <gigaherz> with new modifications, it's ok
L2132[19:50:20] <Kane_Hart> Lex I know you hate people who can't code so I thought I share this error I got from random mod I was testing today. http://pastebin.com/HTzQGKEx
L2133[19:50:39] <LexLap> why should i click that...
L2134[19:50:55] <jamierocks> is that not obvious what the issue is?
L2135[19:51:02] <Kane_Hart> You better not click it lol.
L2136[19:51:06] <howtonotwin> o_O_o_O_o_O_o_O_o_O_o_O_o_O_o_O_o_O_o_O_o_O_o_O_o_O_o_O_o_O_o_O_o_O_o_O
L2137[19:51:12] <Kane_Hart> Not my mod just random one I tested out :P
L2138[19:53:04] <howtonotwin> It appears to be the author's first mod, created less than a week ago. That might explain it.
L2139[19:53:26] <Roburrito> Did they just mess up their registry path?
L2140[19:53:57] <howtonotwin> saying new ResourceLocation("path") without a domain defaults the domain to minecraft
L2141[19:54:03] <Roburrito> Ahh
L2142[19:54:05] <LexLap> no
L2143[19:54:08] <Roburrito> No?
L2144[19:54:15] <LexLap> the issue is hes creating his shit in the static inializer
L2145[19:54:27] <Roburrito> That sounds bad.
L2146[19:54:47] <howtonotwin> oh i just saw that
L2147[19:58:04] ⇨ Joins: sinkillerj (~sinkiller@nc-67-232-8-209.dhcp.embarqhsd.net)
L2148[20:02:06] ⇦ Quits: sinkillerj (~sinkiller@nc-67-232-8-209.dhcp.embarqhsd.net) (Ping timeout: 206 seconds)
L2149[20:08:10] ⇦ Quits: Girafi (Girafi@0x555178eb.adsl.cybercity.dk) (Read error: Connection reset by peer)
L2150[20:10:27] ⇦ Quits: ThePsionic (~ThePsioni@ip5457f909.direct-adsl.nl) (Quit: Leaving)
L2151[20:12:25] ⇨ Joins: VikeStep (~VikeStep@101.184.243.180)
L2152[20:15:49] ⇨ Joins: sinkillerj (~sinkiller@nc-67-232-8-209.dhcp.embarqhsd.net)
L2153[20:20:09] ⇦ Quits: cpw (~cpw@76-10-144-162.dsl.teksavvy.com) (Ping timeout: 186 seconds)
L2154[20:24:59] <Roburrito> hownottowin: I think I figured out how to do gene registry.
L2155[20:25:37] <Roburrito> Abstractly. Still learning the registry system.
L2156[20:26:04] ⇨ Joins: iso2013 (~iso2013@c-67-176-10-45.hsd1.co.comcast.net)
L2157[20:31:20] ⇦ Quits: droidicus (uid120579@id-120579.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
L2158[20:33:03] <howtonotwin> [yay sound effect]
L2159[20:34:19] *** Mumfrey is now known as mumfrey
L2160[20:34:54] <Roburrito> The hard part was going to be colors, but I think doing a pigment registry and then having hooks to boost/fade them before final rendering would do the trick.
L2161[20:35:09] <Roburrito> Other than that, every possible stat is hookable.
L2162[20:35:58] <Roburrito> Obvs would want to look at the genome as rarely as possible, not re-read the colorizer every tick.
L2163[20:36:58] <howtonotwin> I have the most evil and disgusting idea for this :P (srsly DO NOT use it)
L2164[20:37:07] <howtonotwin> you know Scala's traits?
L2165[20:38:57] <Roburrito> Thankfully no?
L2166[20:39:06] <howtonotwin> they aren't disgusting alone
L2167[20:39:11] <howtonotwin> they're actually pretty neat
L2168[20:39:21] <howtonotwin> they're basically a way to do multiple inheritance
L2169[20:39:24] <Roburrito> Ahhh
L2170[20:39:34] <howtonotwin> so say I have class Entity { def doA; def doB }
L2171[20:39:47] <howtonotwin> and trait A extends Entity { override def doA = ??? }
L2172[20:39:59] <howtonotwin> and trait B extends Entity { override def doB = ??? }
L2173[20:40:20] <howtonotwin> then I can say new Entity with A with B and that'll create an entity
L2174[20:40:29] <howtonotwin> with doA = ??? and doB = ???
L2175[20:40:32] <howtonotwin> now
L2176[20:40:39] <howtonotwin> this is must be done at compile time
L2177[20:40:51] <howtonotwin> so it wouldn't work for your uses
L2178[20:40:54] <howtonotwin> but...
L2179[20:41:04] <howtonotwin> well scala's compiler has a good api
L2180[20:41:11] <howtonotwin> so what I was thinking
L2181[20:41:15] <Roburrito> Oh dear.
L2182[20:41:22] <howtonotwin> you can actually use the compiler api
L2183[20:41:40] <howtonotwin> make a string class ... with ... with ... with ...
L2184[20:41:47] <howtonotwin> and then pass it into a new instance of scalac
L2185[20:41:52] <howtonotwin> and get bytecode for a new class
L2186[20:42:06] <howtonotwin> and then you can apply MOAR hackery to load this class
L2187[20:42:24] <howtonotwin> are you disgusted yet?
L2188[20:42:34] <howtonotwin> :P
L2189[20:44:38] <Roburrito> I'm just going to eat this big bowl of NOPE-Os and move on.
L2190[20:44:45] <howtonotwin> http://stackoverflow.com/a/3269452/5684257
L2191[20:44:53] <howtonotwin> xD
L2192[20:45:23] ⇨ Joins: cpw (~cpw@24-212-223-237.cable.teksavvy.com)
L2193[20:45:23] MineBot sets mode: +o on cpw
L2194[20:45:47] <Roburrito> I'm still working to wrap my head around interfaces.
L2195[20:45:56] <howtonotwin> I will not even be surprised if he ^ came here just to kick me rn for saying something so vile.
L2196[20:46:28] <Redfoxmoon> howtonotwin, naughty naughty :)
L2197[20:49:48] <Roburrito> Unrelated: I realized while I was at work that I should have found a nice overhang of sand while I had my entity to chicken code live.
L2198[20:52:09] ⇦ Quits: Jezza (~Jezza@92.206.4.86) (Ping timeout: 384 seconds)
L2199[20:57:02] ⇦ Quits: iso2013 (~iso2013@c-67-176-10-45.hsd1.co.comcast.net) (Quit: Bye :))
L2200[21:02:23] ⇦ Quits: KGS (~KGS@h-155-4-129-249.na.cust.bahnhof.se) (Ping timeout: 198 seconds)
L2201[21:04:01] *** gigaherz is now known as ghz|afk
L2202[21:11:10] ⇨ Joins: Cooler (~CoolerExt@45.249.156.63)
L2203[21:19:24] ⇦ Quits: howtonotwin (~howtonotw@r75-110-22-15.gvllcmtc01.gnvlnc.ab.dh.suddenlink.net) (Quit: Pop!)
L2204[21:31:27] ⇦ Quits: BlueMonster (uid82864@2604:8300:100:200b:6667:4:1:43b0) (Quit: Connection closed for inactivity)
L2205[21:43:08] ⇨ Joins: tips48|away (~tips48@nope.bz)
L2206[21:48:59] ⇦ Quits: alekso56 (~znc@2001:464b:c2aa:0:745d:45ff:fe3b:a098) (Ping timeout: 183 seconds)
L2207[21:51:05] ⇨ Joins: KnightMiner (~KnightMin@68.73.225.172)
L2208[21:51:42] ⇨ Joins: alekso56 (~znc@2001:464b:c2aa:0:745d:45ff:fe3b:a098)
L2209[21:56:17] ⇦ Quits: PieGuy128 (~PieGuy128@69.157.254.127) (Remote host closed the connection)
L2210[22:12:35] ⇦ Quits: Lathanael|Away (~Lathanael@p549613C6.dip0.t-ipconnect.de) (Ping timeout: 198 seconds)
L2211[22:18:19] ⇨ Joins: Lathanael|Away (~Lathanael@p54960DB2.dip0.t-ipconnect.de)
L2212[22:19:58] <PitchBright> I've spawn a custom entity in (close of my player)... and his head is vibrating like mad...
L2213[22:20:05] <PitchBright> anybody know what that's about?
L2214[22:20:23] <PitchBright> holy spelling.... "spawned".... "clone"
L2215[22:36:48] ⇦ Quits: RichardG_ (~richardg8@201.37.241.91) (Quit: You saw nothing.)
L2216[22:39:15] ⇦ Quits: sinkillerj (~sinkiller@nc-67-232-8-209.dhcp.embarqhsd.net) (Quit: I await your twitter fire)
L2217[22:44:41] ⇦ Quits: edr (~edr@d-65-175-180-73.cpe.metrocast.net) (Quit: Leaving)
L2218[22:47:23] ⇨ Joins: McJty (~jorrit@94-225-203-206.access.telenet.be)
L2219[23:09:55] ⇨ Joins: RichardG (~richardg8@201.37.241.91)
L2220[23:09:55] MineBot sets mode: +v on RichardG
L2221[23:10:21] ⇦ Quits: TankCR (~KRoy.Loca@c-67-185-205-223.hsd1.wa.comcast.net) (Read error: Connection reset by peer)
L2222[23:11:46] ⇨ Joins: TankCR (~KRoy.Loca@c-67-185-205-223.hsd1.wa.comcast.net)
L2223[23:15:28] ⇨ Joins: SatanicSanta (~SatanicSa@c-76-115-175-15.hsd1.or.comcast.net)
L2224[23:16:09] <SatanicSanta> Trying to build https://github.com/Esteemed-Innovation/Esteemed-Innovation/blob/1.10/build.gradle and getting the following error https://paste.ee/p/LsZ4i
L2225[23:22:13] ⇦ Quits: p455w0rd (~p455w0rd@50.102.92.146) ()
L2226[23:28:57] ⇦ Quits: Searge|office (~Searge@h-85-24-130-18.na.cust.bahnhof.se) (Ping timeout: 186 seconds)
L2227[23:30:58] ⇨ Joins: gr8pefish (~gr8pefish@24-121-241-166.flagcmtk01.res.dyn.suddenlink.net)
L2228[23:52:58] ⇦ Quits: alekso56 (~znc@2001:464b:c2aa:0:745d:45ff:fe3b:a098) (Ping timeout: 183 seconds)
L2229[23:55:05] ⇦ Quits: electrolitic (~electroli@104-184-56-125.lightspeed.cicril.sbcglobal.net) (Quit: Leaving)
L2230[23:55:25] ⇨ Joins: alekso56 (~znc@2001:464b:c2aa:0:745d:45ff:fe3b:a098)
L2231[23:57:20] *** TTFTCUTS is now known as TTFT|Away
<<Prev Next>> Scroll to Top