#dev-general
1 messages ยท Page 380 of 1
Ikr Starmism, Piggy is an aussie so weird that they'd remove it
wtf
i feel like bm just walked in on some weird shit lmao
@ocean quartz Wakey wakey, how do I have an optional argument in mf cmds?
wait what's wrong with cunt
@Optional frosty
blacklisted apprently
this is actually a word I use daily irl
I'd love to!
๐ซ
Kali, :C
Use
i need to watch more oracle tutorials on how 2 plugin without putting it all in Main.java
wat
@Optional is an annotation in mf-cmds
@Optional
hah same thing
smh
Btw guys
๐
Oh Kali, I didn't even see yours smh
How come a lot of plugins are coded on this 'jdk' called 'openjdk' how does oracle allow this? i signed up for a account! what are these fraudelent jdks doing?
oracle is fucking shite
Don't use oracles jdks
Anyone can compile the JDK themselves, people just realized oracle is dogwater and compiled thieir own
use AdoptOpenJDK
you have to sign up for a fucking account for oracle these days
Already do, I've loved the switch
the oracle jdk is based on open jdk
and it's mainly interesting for big companies that need oracle to fix stuff for them
Interesting
it's the same reason RHEL exists
but why do i see SO MANY tutorials telling to download oracle jdk? was this whole signup for the jdk thing new?
f in chat for CentOS
yeah pretty new
Oh makes sense then
oh speaking of Red Hat, did you see they withdrew from the Free Software Foundation? what a hot meme
I might go back to that 1 hour tutorial for a plugin then and ignore the oracle part
the FSF is a "hot meme"
have intelliJ do it for you, that's how I learned how to 'code' in java. just click all the suggestions and you've got a working ai
private Suck suck = new Suck();
public Suck balls() {
return this.suck;
}
๐
class OptionalCock(val cock: Cock) {
fun insert(hole: Hole) {
hole.receive(this)
}
}```
๐
receive ๐คจ
ur right
oh nvm the hole ๐
that right there is dependency injection at its finest
Shouldn't it extend Optional?
Can we deprecate Optional
i dunno i used kotlin man
uhhhhh why?
Not enough people use it
lol im new to java
so, how does deprecating work
0_0
Deprecating means it's discouraged to use because it'll be removed at some point
u would usually deprecate something in turn for a better method, allowing people to switch over to the new method before it is fully removed for example
Interesting, I'll remember that
oh dude did you guys know that gradle doesn't support jdk 16?
i had to downgrade to jdk 15
iirc someone said the RC version does
RC?
racecar gradle? ๐ฎ
i saw that, i think it's sorta justified tbh
yeah stallman kinda funky, I just don't like Red Hat lmao
release candidate
BukkitTask br where does the r come from lol
bukkitrunnable?
No idea, some of the stuff in the code is HIGHLY questionable.
Got any dependencies? Lemme slap them into the resources folder
Yeah, I was questioning it aswell. This was put in the pom.xml file to stop it from being jarred or whatever
<resource>
<directory>resources</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
mmm maven go brrrr
Not trashing on the guy's code, but why?
wait
is it possible to exclude all files in resources folder when shading in gradle?
I mean, I presume so
What would be the point of that?
just curious
how do you add kotlin support to maven?
answer: swap to gradle :)
You switch to gradle
i wanna go to gradle trust me
I love gradle
the person i'm coding for is using maven
Then tell them to switch to gradle
I might complain to them saying we need to use gradle
now that's a good idea
That's disgusting
i know, but he knows the right way, he is merely being forced to conform. i had to help a homie out
right, I'm currently trying to fix a bug with tags in Krypton (they're throwing all sorts of errors, though they still seem to work on the client's end, no idea), and basically, what I need to do is load in a bunch of JSON tags from memory and perform lookups to find other tags to get all of the top-level values
I realise that's a terrible explanation, so let me use some resources to help
https://github.com/KryptonMC/Krypton/blob/master/server/src/main/kotlin/org/kryptonmc/krypton/registry/tags/TagManager.kt#L51 this is the current algorithm (doesn't work, can't remember why, just ignore it I guess)
build.gradle.kts ๐
bro did you see my message wtf
right, now https://github.com/KryptonMC/Krypton/tree/master/server/src/main/resources/registries/tags/blocks in here, this is all of the block tags for example
no i didn't
i was just quickly scrolling
.
oh
now, in each one of those files, there's a values array
and that value array may either contain a namespaced key pointing to a block state in the registry
or it may contain a #, indicating it points to another tag
what I need to do is search through all of these tags and get all of the bottom level tags
example of that hash I mentioned: https://github.com/KryptonMC/Krypton/blob/master/server/src/main/resources/registries/tags/blocks/bamboo_plantable_on.json#L4
and that points to sand.json
excuse me, mister, what is a top-level/bottom-level tag?
when I say bottom level, I mean one that doesn't have a #
so non-referential tags, okay
a.k.a one that is a block/fluid/entity/item's resource location
yes
and a simple for loop over all of these bad boys ain't cuttin' it?
just looping through all of the tags and checking if they have a # doesn't work?
wtf how could there be duplicates? hmmm
and the code is just confusing me
so these values change at runtime?
no
oh
we load them in from JSON files
I need to turn that JSON data into https://wiki.vg/Protocol#Tags this
oh I see
the numeric ID is just as simple as looking it up in the registry
but for that, I need the namespaced key
so hold on, could you not just check every single file, and every single array, and cache your tags or whatever?
or is that not the problem
oof
cause I'm about getting there too bro
sleepy time? it's 5PM
stayed up all night designing shit in illustrator lmao
hey man, a nap can be extremely refreshing
a nap isn't something I can do
I tried to take a nap yesterday, and woke up 6 hours later :/
and that's why I have yet to sleep and it's now 10 am :)
fun getDeepTags(tag: Tag): Set<NamespacedKey> {
val tags = mutableSetOf<NamespacedKey>()
tag.data.values.forEach { value ->
if (value.startsWith('#')) {
val subTag = getDeepTags(allTags.first { it.name == value.substring(TagManager.NAMESPACE_CHARACTERS) })
tags += subTag
} else {
tags += value.toNamespacedKey()
}
}
// tags.filter { it.startsWith('#') }.forEach { value ->
// println(value)
// tags += getDeepTags(allTags.single { it.name == value.substring(NAMESPACE_CHARACTERS) })
// }
return tags
```this is the code I tried
the commented out stuff is the old code
that exists?
i mean i gotta convince the other dev to allow me to move over to gradle first. smh
LOL
xD
okay yeah hold on, so that line calls the function again looking for the thing that # points to?
Non [a-z0-9/._-] character in path of location: minecraft:banners ????????????????????????????????base_stone_nether???base_stone_overworldbeacon_base_blocks?????bedsYZVWTRXNSPMLQUKObeehives??bee_growables???????
birch_logs%1*7buttons?????
```that's what happens with `first` lol
yeah
I'm not joking, whenever I make a new project setting it to gradle is the main priority now
well if you're already going through every single one, why check for what it references?
if it's a #, just skip it
you'll get to whatever it was referencing eventually, no?
I swear if that works
Non [a-z0-9/._-] character in path of location: minecraft:anners ????????????????????????????????base_stone_nether???b lol
bro what in the fuck
your file path must be fucked up or someting
what does TagManager.NAMESPACE_CHARACTERS look like
._-
wait but that's not even being run hang on a sec
how are you running every getDeepTags() on every Json file?
using a File object as the directory?
oh btw, I've just thought of why your solution wouldn't work
let's just put this into context
mmk
say we want to tell the client all the logs that burn
we need to tell them the IDs of every single one of the logs that burn
e.g. all of the IDs of the dark oak logs, oak logs, acacia logs, birch logs, jungle logs and spruce logs
so hang on
why even are there #'s
why not just reference everything and have duplicate references?
because that's wasteful lol
well it's obviously causing significant problems, no?
well just modify them
let's just make that clear, these aren't mine
these are generated by the data generators
imagine how easy life would be if you just had to loop through the thing and cache those references
way less computationally expensive
oh no okay I see why it does it now
what did you find?
lol
okay wait, so that method returns a Set of keys right?
and you want all of them in the new set if it has a # in it
oh wait can you add sets together in kotlin
ofc
you can add sets together
lemme take another look at vanilla's tags packet actually
the whole operator overloading thing and using += on a data structure makes my brain go poo poo
its pog
yeah vanilla does it exactly how I'd expect
it just does a deep lookup on the values and sends all their protocol IDs
ain't that what you're doing too?
trying to, yeah
vanilla seems to do it when it loads the values though
wanna see some vanilla code?
https://paste.helpch.at/isavofexak.js this is the preparation logic
https://paste.helpch.at/paxurejimu.js and here's the loading
oh fuck decompiled code gets me every time
lol
have they never heard of a json library?
or do they use a different storage method
cause it seems they're making fucking readers themselves
they use Gson
hmmm okay
so, just a thought, what if we split up your complicated af one liner into a few lines that are easier to understand
the .first one that is causing problems
allTags.single { it.name == value.substring(NAMESPACE_CHARACTERS) } this is really easy to understand
NAMESPACE_CHARACTERS is 11 btw (amount of characters to remove #minecraft:)
I don't know what .single does
gets a single value?
matching the given predicate, yes
or throws an error if there are either 0 or more than 1 elements matching said predicate
okay so I still don't understand the "really easy to understand code"
allTags is a combination of all the tag sets
essentially that is supposed to get the referenced # tag from the cached list of tags?
and then get all of its tags
yes
no, not slap it into the new cache
it just returns the set and that's directly sent
so it stupidly computes them every time
because laziness 
are these sets that this function returns stored somewhere?
nope
okay so, right, what if we preloaded all of these into a nice data structure like a hash table and just looked it up in O(1) time every time we needed it
exactly what I should be doing
the problem is that I don't seem to have the brain power for that rn
can't be that hard, just iterate through every file and call that method, slap it into a data structure, bam easy pickings
and if it's a #, just ignore it
easy squeazy
I'm gonna get out pen and paper to solve this myself
also, I learn by example
you gotta show me, talking at me goes in one ear and out the other
hmmm
okay well where would be a good time to preload these bad boys?
like, at what point in the server bootup can you load all these guys into memory
yeah that's what I'm thinking of doing
okay, okay im just trying to help you brainstorm
at whatever point you choose, you can do something along the lines of ```java
hashtable<tags> = new hashtable;
for (file in (dirWithTags)) {
hashtable += getDeepTags(file);
}
and that is rough pseudocode
but you get the idea right
yeah I do, but... idk, this is just confusing me
idk whether it's me being tired or not being assed or what but idk
alright how bout this
ยฏ_(ใ)_/ยฏ
lol
yeah it'll be fine, trust me
alright bet bro
i wanna see some top-tier Krypton caching
this is one time where it's okay to have a few longs lying around ;)
there won't be any longs lying around
yeah yeah, tags or whatever
are they strings?
strings are probably worse than longs anyways
isn't short better than int?
but how do i make short variable since iirc i can't just do short s = 4
stfu
dkim we live in a day and age where like 2 bytes don't matter in the long run
lol
you can afford to use ints for everything number related :)
what about longs :)
longs for extra storage
Depends on the context of better
as long (heh) as you don't have a few million being generated per player, it's okay
You see
Java is stupid as fuck
And you have to cast it
short s = (short) 4;
Literally the dumbest shit ever
im glad they discourage it
Anyone else finish the entire plugin, and then test it for the first time
Or is that just me
see im not smart enough to make my own plugins from scratch, so I can't relate
lol
but it sounds like a feasible plan if you are very well coordinated and know what you want to accomplish quickly
Finishing a plugin? Can't relate
yes
haha, TriumpChat go brrrrr
Lmao
i wonder who thought of lmao
Gonna test it rn, will let you know if shit works out the bat
heh another madlad shutting down tasks async like you're supposed to
Doesn't Bukkit shut tasks down for you...?
But Bukkit does unregister services, listeners and cancel your tasks
Yes, but it also gives the warning because you should be doing that yourself
have you never put anything in onDisable Fefo?
alright that's it, it's taco bell time
Late to the party but anything smaller than int doesn't even exist locally so
Where the bytes might matter is in arrays
You wouldn't use int arrays to represent bytes at a low level, even though byte can't represent unsigned 8 bit numbers
wouldn't it be auction_worth_database not auction_worth_db 
what do u think
lol
wdym
I'm a retard
lol
ffs I just can't do this tag loading BS
I'm literally ๐ค this close to just hard coding it all and saying fuck it
hard coding ๐ซ
well if you find a way to do this then let me know
because I'm all out of both ideas and patience
sure... ๐
Bardy I got you a 2 pack of cinnabon bites, cheer up
lol
- Person with a bad nickname
;-;
what's that? your mum's house phone number? 
man thats like 2 phone numbers
They don't have very much sugar, but they'll still be good!
which is to never ever put any personal information in them
nice
also, wanna see the whacky file reading logic Nicole wrote to make tag loading work inside IJ btw?
val jarFile = File(javaClass.protectionDomain.codeSource.location.toURI())
var fileSystem: FileSystem? = null
val rootPath = if (jarFile.isFile) {
fileSystem = FileSystems.newFileSystem(URI("jar:${jarFile.toURI()}"), mapOf<String, Any>())
fileSystem.getPath("/registries")
} else {
Paths.get(URI("file://${javaClass.classLoader.getResource("registries")!!.file}"))
}
val entries = Files.walk(rootPath, Int.MAX_VALUE)
.filter { !Files.isDirectory(it) && it.toString().endsWith(".json") }
.collect(Collectors.toList())
fun getTagsAtPath(path: String, type: String) =
entries.filter { it.parent.toUri().toString().removeSuffix("/").endsWith(path) }.map {
val tagName = NamespacedKey(value = it.fileName.toString().removeSuffix(".json"))
create(InputStreamReader(Files.newInputStream(it)).readText(), tagName, type)
}.toSet()
blockTags = getTagsAtPath("registries/tags/blocks", "blocks")
entityTypeTags = getTagsAtPath("registries/tags/entity_types", "entities")
fluidTags = getTagsAtPath("registries/tags/fluids", "fluids")
itemTags = getTagsAtPath("registries/tags/items", "items")
fileSystem?.close()
```this is what I have to deal with
woa
Hideous
and any of you who think "why don't you just read the file using the class loader?", yeah... that was tried many, many times
Matt sees !! and freaks out.
forgot there was even any !!s in there
Always!
oh that actually kinda slaps tho
gotta remove that . :)
why aren't you using that Bardy
I am
oh excellent!
that's the code Nicole wrote
who
every day this codebase makes me more and more depressed
oh I see someone of competence, very nice
i am ashamed to be a part of this organisation
well give me a hand trying to fix it then
๐
-_-
๐
"someone of competence"
TIL there's a guice-related thing for Kotlin.
this is actually cursed
Description will go into a meta tag in
sorry, er... who spent hours and hours finding out how chunk data works? how reading MCA files works? how to read NBT? how NBT even works?
yeah I'm aware
I love Koin, BM hates it because it encourages property-based injection
You're reassigning a global nullable mutable variable in the initialiser of another variable
Jesus
so I was actually referring to myself as someone who lacks competence, considering how long I tried to help you and did nothing. but it's kinda hilarious that you think I was dissing on you lmao
Koin is kinda ugly
because it's literally an anti pattern
from where
Idk how many times I need to say it
lol
did u get those
taco bell bro
Property injection is awful
taco bell????
yeah????
wait ar ethose donuts
I didn't say it wasn't, I just said you can't say it's bad because of that
they're cinnabon bites
I've neevr tried those
it still allows constructor-based DI
Yes I can
were they good?
I mean, I personally quite like property injection tbh
means I get to keep my constructor
i got them for Bardy
lol
no he doesn't
that's not what that code does lol
wtf im gonna cry
that code just reads the files
I don't think they have those in Canada starmism
it doesn't actually group the tags
well get nicole to write some more code then
sucks to be in canada then yikes
lol
we have snow
so do I
I mean, I'm not going to disagree that the UK is bad, but I'm not going to agree that Canada is the best place in the world
starmism r u an american
bro bri ish accents are 100% more redeemable than canadia not having cinnabon bites
yes ofc
lmfao
nope
Irish accent is the superior accent
the rocky mountains go all the way to mexico bro
i know, i've had it
i literally have a little bottle on my night stand for some reason
it's been there for years
o_O

why
it's a good luck charm
No
canada arrow?
make them yourself
just cross the border bro
not worth it
bm you literally have soldier as your pfp, I think you're betraying his morals with that statement
i am not sure the tf2 soldier is a good stereotype of american people
@cinder flare So so far two issues, me being incapable of writing the correct db, and me putting () around the select statement cause I'm a retard
do you need some cinnabon bites too man?
I have a coffee, so something to snack on would be nice yes
hmmm okay
tf2

how do u take ur coffee frosty
well I already went, you'll have to wait until like tomorrow or whenever I go next
that's the real question
Bardy already claimed today's haul
needle, and I stick it in my arm
oooh, very classy
interesting
Chill
is that what you guys do in wherever you live frosty?
nah he's got a point
fristy lmao
fristy gonna get frisky ๐
๐
Everything else seems to function properly 
@old wyvern Even though the configuration extends compileOnly it's showing as compileClasspath 
canada > uk ๐
i mean
us < all
that's just not true though is it
us > all
correct
yeah no he has a point
Watch the message get edited in 5 minutes
or deleted
๐คฃ
Yes, but for internal shutdowns (executor services, connections, etc)
what would !!true mean?
yeah haha
or am i on crack
in java, that's negating a negation
this is the question I was presented lmao
not not not variable
๐
!! is not null checking either
wow, you got 4 of me? very cool
!! basically means "Throw NPE"
!! is unsafe null access operator
?: = nullcheck
if it ain't null, it'll still work
and ?.
if it is, it'll pull a java and throw a NPE
yea lol
!! = good
fun <K, V, T, R> Map<K, V>.transform(function: (Map.Entry<K, V>) -> Pair<T, R>): Map<T, R> {
val temp = mutableMapOf<T, R>()
for (entry in this) {
temp += function(entry)
}
return temp
}
```now that is a function and a half
lol
dkim what the actual fuck
wow that is... something
the way you're meant to avoid a singleton is DI
also, all that function does is allows me to remap every element in a map
No context can save you from that
..
bro your brain must be fucking bulging because I can't wrap my head around that beast
JS be like if (!!1)
it avoids me having to write someMap.mapKeys {}.mapValues {}
lol
lol
mutableMap ๐คข
yeah that's Bardy right there
you know literally every declarative Kotlin function to do with collections or whatever uses imperativism internally right
dont care
also, bonus of that function means I only copy the map once
Be the better person ๐
im out of cinnabons, so not great
๐ค taco bell has that?
you bet
ive always ate tacos from taco bell
use ktx.collections.immutable ๐ ๐
and i also like chicken quesadillas
quesadillas are amazing
how do i convert mutable map -> immutable
o
avoid that where you can though
just hit em with a nochange
as toMap creates a copy of the original map
how come?
and?
i thought immutable = good
Use that shit everywhere

and fill up your memory with shit, nice one BM
Immutable everything
awe yeah, put the java GC to work
except that i dont have 2 million variables
still gotta learn how Kotlin's persistent data structures actually work lol
depends on the implementation
and if they're even useful for like 99% of my use cases
Lists are probably just a slightly fancy singly linked List
Sets and Maps will be a bit more complex
bro I love linked lists
yeah im still wrapping my head around trees and shit
also, I think Kotlin's built-in "immutable" lists are actually fake immutable lists
yeah
๐
Well, read only list
https://github.com/Kotlin/kotlinx.collections.immutable though offers real immutability I think
Not exactly
kt standard types are internally mutable, but they only expose a read-only interface
lol that was what i thought when they told me it
yeah
Nothing's stopping you from just casting to the mutable counterpart and causing havoc
ik that
well it's better than all the shit we have in java man
lol
https://github.com/Kotlin/kotlinx.collections.immutable > com.google.common.collect
what's wrong with what I said hmm
no more fake immutability
I think kt missed a trick by not adding collection literals
isn't that that one guy's fault
oh I wish I had those so badly
selfish and corrupt Andrey
we have array literals for annotations but that's about it
wait what
yeah Andrey
show me
collection literals would be so nice
just like the programmers using them!
Andrey and his evil deeds!
LazyBM
He's gone now ๐
Ex-kotlin
wait what happened though
like what?
Kotlin's good features? Reduced to atoms
show me some stuff
show me
I have to see this for myself
Type classes
reference an issue
?
he got rid of or denied implementing all of those things bardy
wow
we would've had a much more functional kotlin without him
yeah they're trickling in, but he caused years of delays
FP idiots be like "muh referential transparency!" Bro just use inline functions ๐
if the community pushes enough, JetBrains will listen
He specifically said he didn't want them
he has a point
He'll murder your family
uhhhh
Tuple types and expression are no longer supported in Kotlin starting from M3. Data classes are the preferred way of dealing with tuple-like data. Library classes Pair and Triple are available for res
maybe you'll gain enough braincells to understand how maps and shit work
Obviously
cause i need some of that
Unironically yes
I mean, destructuring, Pair and data classes do kinda replace those
๐คข
bms literally the only one that uses haskell though
no I'm not
so if i need help = no hope
bro BM is on top of it
Lemmo uses it in his job afaik
he is literally 10/10 support
since ur only online during helpchat's "peak-times"
there are like 8 hours where helpchat is super active
then the rest its just like 3 people
Ivan knows at least the basics too
He causes the peek times
lmao
oh shit yeah you're right
I'll pay you $5 if you can get better at it than I am
Which probably isn't hard
hooo boy you overestimate my brain function
i got confused by Bardy's use of .first
i think it'll be a while lmao
Only one way to find out
anyone here have experience with blender?
yeah ive made a few banana smoothies what do ya need
๐
lol
๐
okay that's actually kinda cool ngl
costco is great
val messageDigest = MessageDigest.getInstance("SHA-256")
val seedBytes = ByteBuffer.allocate(Long.SIZE_BYTES).putLong(world.generationSettings.seed).array()
val hashedSeed = ByteBuffer.wrap(messageDigest.digest(seedBytes)).getLong(0)
```is it just me or is this really wasteful
all I need to do is hash a long in SHA-256 and return the long
that has strong java FactoryFactory vibes
wait they exist in UK?
absolutely
oh
omg really
I wouldn't know
my parents have a costco card
that's actually super cool
๐ฅฒ
we dont go often, but when u go costco its great
first line declares a message digest (class for hashing, or digesting, well, messages)
second line allocates a byte buffer with the size of a long in bytes (always 8) and puts the seed in there, then gets the byte array of that
third line then converts the digested bytes to a long
I only learned the UK had Five Guys last year
u actually have fun shopping
i think it's illegal to spend less than $100 per trip there, it's so great
wait you never knew we had costco over here?
why isn't there just LongUtils.hashLong
I didn't even know it was a worldwide thing
bardy, u gotta remember hes from isle of wight ๐ฅฒ
that's not what this does lol
tiny island ๐ฅฒ
don't actually remember being told that before
man we only got an asda about 2 years ago
omg seriously
yes lmfao
dude, bm can see all the coasts of isle of wight from his window
thats depressing
wtf is an asda
what the fuck lol

british walmart
oh I see
literally owned by walmart
walarg
walmart is dope
yeah asda is actually somewhat respectable
they do @onyx loom
good
you know how you guys pretty much just have walmart?
walmart is where you see insane people
oh fuck
they sell nerf guns
yeah we don't allow those kinds of monopolies over here
lol
walmart is where all the polygamists are
i can pretty much see 1
not even joking
there's a house sort of blocking it
asda, tesco, sainsburys, morrisons
never heard of a monopoly
tempting
we have Asda, Tesco, Sainsbury's, Morrison's, M&S, Waitrose, Aldi, Lidl, etc.
bm send help
ah yeah I remember going to a multi-floor Waitrose
last 4 arent exclusive to uk but yea
you what
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
is this how you do kotlin in maven?
yes
it doesn't work doe
classic utah lol. the whole thing about mormons was polygamy until they wanted to become a state the the federal government said "1 wife per man please"
aldi is literally german
lidl is also european afaik
m&s maybe? im not actually sure

https://i.imgur.com/8FWJGQu.png this right?
make sure you got the Kotlin plugin
i didnt realise they were real
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<configuration>
<jvmTarget>1.8</jvmTarget>
</configuration>
</plugin>
odd
where dat go at top or what
though I don't know if those things are directly related
because i have another suitemate who's mormon but he's really cool
wait do they still do the polygamy stuff
it's pure arrow code too
not the primary mormon church
maven
there's the offshoots like FLDS that do do polygamy
xml*
lol
weird
they hang out at walmart all the time
welcome to XML
man i sure do love me multiple wives ๐
now
yeah they really do. kinda sucks though, being one of many wives and all taht
I tried showing gradle and it doesn't work :/
lol
another day, another discussion about our wives and our shitty build tools
ffs why can't Kotlin's compiler implicitly convert a primitive array into varargs
the spread operator always copies the array
there's gotta be a better way than the spread operator
do u still need a marketer?
agreed bardy
why can't every compiler auto convert everything
if I just checked if (Item instanceof Weapon) please just let me use it as a weapon
java 16 
kotlin 
||tbh i dont like that feature||
wdym
๐คจ
what's not to like
why wouldn't you want to smart cast
and why wouldn't you want that
when would you not want it to smart cast
plus sometimes i forget it exists
and then its like bLaH cNaNot bE aPlpLiEd tO balH
and so i have to do obj as Obj
wot
just because you lack the minimum number of braincells to use a programming language doesn't mean one of its best features is bad lmao
i never said it was bad
to be fair, you really need a high IQ to understand Kotlin
dkim be like: ```kotlin
override fun onCommand(sender: CommandSender, cmd: Command, label: String, args: Array<String>) {
if (sender is Player) {
val player = sender as Player
}
}
uh
at first i was like - wait intellij, why are you saying that as Player is useless?!
also, arrow code 
yeah ik
In Java 15+ you can do this
if (item instanceof Weapon weapon) {
weapon. // item is now weapon
}
but it's you, so it's not that far fetched 
yeah not 100% sure about that tbh
do i have high iq ๐ค or low iq 
Weapon weapon?
still would rather it just smart cast, instead of creating a new variable
I mean, ik Kotlin is creating a new variable internally, but I'd rather not have to see that
wtf is that declaring a new variable and checking type in one line?
or i'd like it so that in the is thing you can like define a variable if u want autocast