<<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
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
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
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
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)
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))
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
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
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
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
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)
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?
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.
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.
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
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?
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
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?
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
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_
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)
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
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
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
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
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
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
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
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
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
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
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
L1845[18:23:07] <howtonotwin> filenames
are UUIDs
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
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
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
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
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
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
L1945[18:53:31] <gigaherz> hmm so
wait
L1946[18:53:37] <gigaherz> is the issue
that those entities crash on a client?
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
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
L1985[18:57:37] <masa> is it a
DataManager problem?
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?
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()))
?
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
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
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
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
L2110[19:46:05] <Boreeas> gigaherz:
Thanks, that's helpful
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.
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)
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