#dev-general
1 messages ยท Page 464 of 1
lol
notch was like "hurr durr gmtk is just politics nowadays" and gmtk said they wouldn't do politics anymore if he deleted his account
Will have a read when I get home
Libtards owned
How is it even political
I've not watched in a while but like
Does that just mean they reviewed a game with a black person in or something
talking about accessibility maybe?
Gradle is less arrowy than Maven, they said
im currently having an issue and not sure whats causing it. so i have a plugin called playtime and i recently added playtime top to it but for some reason its adding the same user in different positions but in the json file theres only 1 data for the user. the top ones are the correct ones which shows the correct time and the other ones dont update.
code: https://github.com/Twi5TeD/PlayTime/blob/master/src/me/F64/PlayTime/Commands/PlayTimeTop.java
image: http://prntscr.com/12hffmw
flat it out?
Just a joke, it's actually not that much
the issue is kotlin dsl
yeah well I mean you can generally do stuff like
shadowJar {
classifier 'blah'
}
//to
shadowJar.classifier 'blah'
``` if u didnt know but I take it u alr know
Sorry couldn't read that over all the warnings in the file
only yellow decorations
except like 1 or 2 times ๐ฅฒ
Lmao
no!
how could he!
how do I install conda?
Anaconda?
think so
Since IJ is being a pain i have to convert my project to kotlin mostly by hand, I know i have to convert the gradle stuff over(change the file type etc.) but then are there alot of internal project configuration things i have to do or no? I dont really want to brute force it and have issues later
You don't have to change the Gradle to the Kotlin DSL.
But yeah, I wouldn't trust IJ to convert my project over to Kotlin directly.
Is there a good way to do it? I switch it over and then a bunch of IJ things/warnings/flags pop up at the top like script configuration wasnt received It seems like its getting confused by some internal configuration of the project but i have literally no idea what i need to change around
Ive already restarted and invalidated my caches
I'm not entirely sure what you're talking about. Got some screenshots?
Huh, it seems to have sorted itself out after changing the single quotes to double ill see if it runs though
in kotlin single quotes = a character wheras in groovy it's a string
Any reason why kotlin needs a different file type for gradle? It seems like it shouldnt matter too much
gradle.build.kts for example
build.gradle*
wow it actually compiled and ran
It doesn't need a different one
They're 2 distinct things that just happen to use the same language
So does it make sense to change it or not?
It's personal preference
Well its working fine when did so i guess ill just stick with it like that
If you wanna change for the sake of consistency, sure. If you don't care, it's fine to leave it
i use groovy bc its more common = better support but i also code in kotlin
Alr thanks, Btw ive been looking at krypton and it looks amazing! I started trying to learn kotlin this week and looking over krypton was a giant help(seeing what you guys did in terms of language specific stuff)!
Yeah I typically just use Kotlin in projects but the regular Groovy build system. Works fine.
Krypton bad
Learn Haskell instead
NO
Im assuming you are kidding though, it looks very will written from a quick glance
Functionality aside ๐
well
the bits written by me are well written, yes
Would be a whole lot nicer in Haskell though
so humble!
Well alr thanks for the help
Groovy is like '' string! "" string! 0 string! ItemStack string! any string!
wat
my humility is one of my many great qualities
H
no
yes
A
God IJ is weird, I created a small test project in Java then tried to convert it to kotlin and had SO many issues, then i did it with my real one and it went just fine
๐ฅฒ
so true 
S
B
How does this compile as a KTS??
oh, simple answer it doesnt
im so smart
๐ฅฒ
You changing it to gradle.kts?
im trying to
Honestly the only reason i am though is being Id get hated on later for not
good luck - gradle kts in general is nice, but if you're trying to use a plugin that only has documentation for groovy, it can get annoying :p
by plugin i meant a gradle plugin
ah i see
which is the reason why i went from groovy -> kts -> groovy -> kts -> groovy
plugins {
java
}
group = "net.yakclient"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
dependencies() {
testimplementation("...")
implementation("...")
}
tasks {
test {
useJUnitPlatform()
}
}
not really
some people prefer kts
some dont
im on the fence atm
I prefer kts
IJ will automatically create it as a kts though, is there a way to tell it not to?
IJ normally defaults to groovy
In a kotlin project this is what it generated
well its easy to stay on groovy so i guess ill stick with that then
god this is opinionated
ye thats what i was talking about
ah nice, you took the time to draw arrows?
tasks.test {
useJUnitPlatform()
}
๐
What is the minecraft option btw?
Personally i prefer this way of creating
it takes like 10 seconds ._.
The minecraft development plugin, i have it but tbh don't use it
please untick java ๐
wat
I love the MC Dev thingy ๐
support in training
I like that way so you can have multiple tasks without needing to always do tasks.
Not entirely sure what you mean, but you probably wanna ask over in #general-plugins ! have a nice day!
how's that
lol
Im assuming this is pretty bad kotlin? Its auto generated
idk why it put the run blocks in ๐

could be worse...
kinda cursed though
https://x0.at/J56.png this can all go
the run blocks can go
apart from that it's pretty much fine-ish
You wouldn't, normally it'd be a top level function
And not jvmstatic
And wouldn't even need args
val `class` ๐
so much better
Are regex's different in kotlin? Its complaining about those
Doesnt seem to like the "_" here
Depends, what is it saying?
unresolved reference
put a \ maybe
you can do this: @humble silo kt val variable = "a" val other = "b" val string = "first variable: $variable, second variable: $other, combined: ${variable.plus(other)}" println(string) this will print first variable: a, second variable: b, combined: ab
i actually dont even need that
and so it errors because _ isn't a variable
im just gonna take that part out cause it was deprecated anyways... I totally forgot what that regex was for
what do you mean by that
I forked something right
And now I wanna make edits
Inside of IntelliJ
So how do I send those files over to my IDE
Do I need GitHub Desktop for that?
ew no
either
New -> From Version Control
or if it's your own project
Git -> Branch -> branch name
anyone know what scope i should be using in coroutines if GlobalScope is bad
obviously Dispatchers.IO for IO, but what about for more general stuff?
\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} \[\w+\] \w+ \w+ - .* I am the regex master lol
somehow that matches a line in Krypton's log format lol
trying to configure Ideolog
Default or you could always create a dispatcher from your own thread pool
isn't Default blocking
No
huh
i saw some article that said Thread.sleep will block it, but i guess i'll be using delay() so that's fine
okay
Default uses the fjp common pool I think, but that might be implementation details
ah cool
you know the IO dispatcher is backed by the default dispatcher right?
doesn't seem much point making my own pool when there's at least 2 existing ones
the IO and default dispatchers use the same pool lol
Yes ofc, Thread.sleep is not ideomatic inside a coroutine context unless you want to hog up one of the threads xD
then the article was dumb
* This dispatcher shares threads with a [Default][Dispatchers.Default] dispatcher, so using
* `withContext(Dispatchers.IO) { ... }` does not lead to an actual switching to another thread —
* typically execution continues in the same thread.
* As a result of thread sharing, more than 64 (default parallelism) threads can be created (but not used)
* during operations over IO dispatcher.
```from the documentation of `Dispatchers.IO`
They are not
ok?
yes they do
They simply share some threads
i dont see how that's relevant lol
I think they're still managed by the same scheduler, just not the same dispatcher, which would make sense
actually schedulers = dispatchers
and ready?
What?
wait so
Look carefully, their parallelism values are different
CoroutineScope(Dispatchers.Default).launch {}?
Yes?
ok
Oh btw
just making sure
Sx said you should keep that instance cached
ah yeah
๐
I'm sure haskell's coroutines are EASY
Hrypton is a minecraft server implementation written from scratch in Haskell
๐ฎ ๐ฎ
Written from scratch in Haskell++
competing against krypton?
๐
aren't you the founder of krypton?
or is it bardy
MineKraft
Brister Mitten is the founder of MineKraft (original name of the project) unfortunately
and he's going to get removed from the dev team if he doesn't start pulling his weight soon
lol
Classic BM
looks like Android to me
Yes
making shit then giving up on it? yeah sounds like Alex to me
also, https://i.imgur.com/OZ4jFDt.png one of the like hundreds of differences between Krypton data and Notchian data for broken section 1, 7, 6
might explain it
I don't know what's causing it though, which is annoying
I could be reading data wrong, but I find that unlikely as I basically read Anvil with the same mechanism that vanilla does
it seems to be happening at index 2061 in the buffer
Maybe itโs an nms thing
iirc minecarts always face north
just a game mechanic
actually not true
maybe they always spawn north
or maybe it's just Bukkit being shit as always
Worst case scenario youโd have to use reflection and shit
perhaps this is just yet another thing that Bukkit won't let you do
dis why Bukkit bad
Imagine using Bukkit when Krypton exists 
@tranquil crane add that to the list of things that Krypton needs to do better than Bukkit please (you're the one working on entities, and read up if you don't know what I'm referencing when you read this later ๐)
ikr
Krypton has chunk streaming now as well
a.k.a you move between chunks = new chunks load and old chunks unload
thats pog^pog
ikr
and I wanna fix broken sections next, which will be pog^pog^pog^pog^pog^pog^pog^pog^pog
wasn't there an arrow notation to "accumulate" consecutive exponentiation?
go on
oui
what's this?
unimaginably large numbers
comically large
beyond astronomically large
im sure haskell could process them with ease
https://i.imgur.com/XpwIpqE.png yeah that might explain why the section at Y 7 is broken
ffs
lol
lol
ew Windows xD
sounds like Minecraft to me
sentient minecarts
Try changing the rotation on the spawn method's consumer
what am i looking at here bardy
look at the text on the screen
what is that
left is data sent by Krypton, right is data sent by the Notchian server
it's chunk data
ok and is this good or bad
uhh
and every red line is a difference
aren't they supposed to be the same
that's the point dkim, yes
๐
idk why the client's not rendering these still though
imagine not using kotlinx.atomicfu
Try changing the rotation on the spawn method's consumer
I think that's some vanilla client bullshit lol
as I said, sounds like Minecraft to me
But I can move them and they will still change their yaw at the same time
would be possible to create a python app and make it usable without having to install python on your computer?
with cython maybe
requires buildscript {}
not doing it
gross
download python at runtime ๐
p
kotlinx.atomicfu Atomic fuck you
what plugin is this?
the atomicfu one...
lol
That Elizarov dude is actually a pretty cool guy
i am not using buildscript
no
if he was cool he wouldve stopped using deprecated gradle apis in 2 years
lazy sod
release 8 days ago and they cant figure out how to publish a gradle plugin
GROW UP
im actually embarassed to be using this language
absolutely useless
dont use it then ๐
i think its time u need some groovy in ur life
god i would love some
how can u circlejerk a language whose libraries arent even usable ๐คฃ
ikr kotlin SO bad ๐
kotlin > haskell
you know
in haskell i would have this done already
in kotlin i have to WORK AROUND the language
yeah ur right
its by far the best jvm language ๐
so true
god
and now because of USELESS kotlin i have to REDEFINE 300 operators just because i want an ATOMIC
I figured it out @jovial warren delay the teleport method.
bro this is a JOKE
have u tried not usign atomic
sounds like something Trashkit would require you to do lol
B.A.A.S - Too many caps!
No need to shout.
Barry's Anti Abuse System | v1.4.4
it does
WHATS THIS
B.A.A.S - Too many caps!
No need to shout.
Barry's Anti Abuse System | v1.4.4
THEN
in comparison to java ๐
smh
could you don't
https://i.imgur.com/k7Fu05M.png you know you're getting bored when you do this
bad staff
cat < getLine >>= putStrLn ๐
staff in training*
f
yeah I'm not even actually gonna bother to fix that lol
could you dont
B.A.A.S - Too many caps!
No need to shout.
Barry's Anti Abuse System | v1.4.5
Please make a good Kotlin library for atomic variables which features a functioning Gradle plugin thank you ๐ฅฐ
is there a way for you to print out the data in binary notation to see if there's a pattern to it or something?
I can print out the raw binary data, can even write it out, for Krypton that is
for vanilla I'm on my own unless I inject an agent
gotta inject https://upload.wikimedia.org/wikipedia/en/1/1f/Agent_Smith_(The_Matrix_series_character).jpg into the Notchian server
no stupid atomicfu or whatever its called
could you send me both those data files
gotta get the Krypton one again since I fucked it but sure
aight
i got it ๐
It is
But I was unsure about the behaviour
given there's ++x and x++
nono nonononnon on no non
how do i atomic CircularFifoQueue
atomic<CircularFifoQueue>()?
or just use AtomicReference lol
how to make CircularFifoQueue thread safe
ik
yeah right
https://x0.at/Ag5.png utter piss take at this point
the amount of times I've asked for help and you've given me Haskell circlejerk BS and I've put up with it
what is the point of these "convenience libraries" if you have to do everything yourself
also why are you using commons?
why not
because I've found it to be mostly unnecessary, especially when you've got Kotlin
yeah give me kotlin CircularFifoQueue then
and dont say write your own implementation
dont
fifo bad
oh
imily good
i thought you were going to say something funny
you know who would tho?
bo
m
p
bomp?
loll
I could give you an AbstractCircularFirstInFirstOutBlockingQueueBuilderFactoryProviderInstanceBean if you want
also, Circular? what is that meant to even mean?
not helpful
CircularFifoQueue is a first-in first-out queue with a fixed size that replaces its oldest element if full.
fixed size
ah okay
cyclical
so the helpful people of helping chat have so far said "use broken library" and "bomp"
i love you guys
BOMP
:)
"better" discord
my gradle builds are taking 3+ minutes, is this normal ๐ฅถ
for ur pc yes
infact, that is excellent pace
classic
is there nothing i can do about it
kali
._.
return 1 + (level / 10) can someone calculate this if level is 20
ty
thanks
i got it
yes
what is this? it takes like 2 minutes
lol...
Create Jar: Download maven-metadata.xml...
it's downloading maven-metadata.xml
idk, i think it's downloading maven-metadata.xml
why is it taking so long?
it's downloading it
eXtremely Malicious Language
theres a lot of metadata ๐
in xml format
and ur internet slow ๐
you think?
idk have u tried downloading it faster
.
yes i do
gaby i used to say that to u all the time ๐ฉ
:)
org.benf.cfr.reader.util.ConfusedCFRException: Started 2 blocks at once what an exception
ConfusedCFRException
seems sketchy
doesn't look like it

bitcoin is not anonymous enough for them, so of course they took the logical next step
minecraft accounts
๐
isn't crypto untraceable?
oh
suspend fun flow() = mutex.withLock { queue.iterator().asFlow() } anyone know if this will be "safe"
assuming queue is a non-thread-safe type
there's a 50/50 chance it's perfectly safe
๐ฅฒ
mc accounts = against eula though
im sorry ima have to do u with this
?tryandsee
i hate you
that's not stopping all those alt sellers is it now
love u too
welp
actually
i guess it's probably safe to just take a copy and return that
no suspending locks needed
This guide talks about The Thread Safety Of Suspend Fun Flow() = Mutex.withLock %7B Queue.iterator().asFlow() %7D
i despise all of you
love u too
https://x0.at/gIT.png cute ๐ฅฐ
๐ฅฒ
Yeah it will be safe as long as you would use that lock when modifying the queue on another thread
or am I wrong?
all access uses the lock yes
idk enough about how locks and flows work to be able to say with confidence that will be safe
actually it probably will be fine
it's just ```kt
flow {
forEach { value ->
emit(value)
}
}
so nothing "continuous"
oh well, don't need it now anyway
also flows don't have any{} which is what i actually needed
i see nothing wrong here. nothing wrong. at all.
@prisma wave I mean usually when I want to use non thread safe data structures in a multi threaded environment I just wrap it with Collections.synchronized
This is a funny video made to show difference between expectation and reality related to coding or programming.
synchronization kinda breaks coroutines unfortunately
Does it break daily routines?
Pics or didn't happen ๐
Proof??
aight
wait let me get the post
24 votes and 8 comments so far on Reddit
Hmm actually don't really like the bar down there, I prefer the current one
In astrophysics, the thermal time scale or Kelvin-Helmholtz time scale is the approximate time it takes for a star to radiate away its total kinetic energy content at its current luminosity rate. Along with the nuclear and free-fall (aka dynamical) time scales, it is used to estimate the length of time a particular star will remain in a certain...
lol
oh damn ๐
In kotlin What is the best way to do final static fields like you would do in Java? Should you use a object and declare a const val, should you define it outside a class as a const var or should you do it as a companion object inside
Top level constant
const val METHOD_SELF: String = "";
outside the class?
More specifically in annotation classes?
Like for example:
private const val CONSTANT = ""
class YourClass {
}
Or if you want if you want public constants, remove the private or create a Constants.kt and place it there
Huh alr thanks
Placed where it is is that accessible to any other class? I dont have a great understanding of how constants or methods outside of classes work. Testing it, it seems that no other class can access that constant
Top level constants are available to other classes
If it's private then every class, function, etc, in the file is able to access it
If it's public it can be accessed everywhere (will ask you to import for example)
if it's internal it can only be accessed inside the same module
Also, was wondering what the difference between val and const val and it's just that const doesn't create a getter, it's direct access
Which makes me wonder why they only allow it for primitives 
Private?
Forgot to add "in the file"
ah, that feels really weird that there can just be floating methods and constants anywhere... How would you do a static util class? all top-level functions?
Right, makes much more sense xd
Something.kt
Yeah, all top level
It's a bit odd at first but you get used to it then you actually start liking
Today I wrote my first py script that is actually useful :D
Which was?
What do you think about it? I never really liked py
Cool and weird at the same time
Oh Matt sorry, If im doing a interface that just has constants(like you might do in java) The constants still go toplevel and i dont provide anything in the interface correct?
Create a prefix with gradient from a given set of colors and output the format for Essentials, TAB, or Vanilla (&R&R&G&G&B&B)
In that case they would go in the interface, or else there isn't really any point for the interface
Not a fan of that either
yea
In a companion object?
Yeah
great!
What I find amazing is the collection comprehension thing or however is called
They are inlined by the compiler, hence the restriction to primitives
Yeah, single line on bytecode vs 4 lines for non const
Java inlines static final primitive stuff as well, so it probably exists for the same optimization
Yea could be with properties
Imagine if they added Sx's suggestion of something like
companion const val instead of needing the companion object block
omg this is gonna be a pain... time to turn about a hundred java files into kotlin
letting IJ do the hard work i guess
๐ฎ yea that would be really nice
Why?
No point in converting what you already have
only primitives because it's replaced during compilation iirc
Just write new parts in kotlin
at least thats what i think the intellij error told me
Cause i started writing it in Java and then dumb star convinced me to write in Kotlin
ily star
lol
Kotlin is built with slowly adding it to projects in mind
Replaced?
and it will only take an hour or two
Theres really no point chest
ok u win matt
It will look SO much better though
and just be easier to maintain
Probably because primitives can just be wrote as they are, while other objects needs to be initialized
"Gaby" vs Gaby()
If i dont have to worry about what file type it is
lol
It's because of inlining like Yugi mentioned
As I said, you can develope in kotlin side by side
Idk what inlining means
Is there a reason not too if it wont take that long?
Youll probably end up with something worse if you rush it
Compiler pretty much copy pastes the values to everywhere its used
Ya thats a good point, ok ill just do like 5 files for now and see where that takes me
So theres no real variable
Yea that might be a good idea, slowly switch as you go
sure
Unless this is a small project ig
Chestly, IJ's converter is not really good, it's better to slowly convert as you go
If you convert everything it could break
^
For example, you'll have tons of !!
Also matt ill setup the artifact on* the repo today, hopefully gradle approves today ๐ฅฒ
Ive kinda found that out, atleast it gives me a base to work off i guess... For now ill just do a couple files by hand then do more as i work on it
Also actually forgot to hook up the relocator to the configuration class I think ๐
Need to do that as well
Nice
I hope so too
Adding the lib automatically should be pretty easy once they do
Just need to figure if it's publishing the shadow jar or not, which I don't think it is, i forgot to disable the jar task ๐ฉ
๐ฌ
Will it be an issue later on if we dont have shadowjar rn?
Because otherwise we can publish that after approval right?
lol
people building using jitpack be like
Wow kotlin is very nice, this class was just made alot shorter
Not really, shouldn't be an issue, just easier to publish if i can
And yeah we can always publish after approval, since first version is incomplete anyways
Ikr, as you go you'll find more and more nice things about it
Cant wait!
Ahh lit
Drop builders btw
Its an anti pattern in kotlin
Whats the alternative?
arrays ๐คข
named arguments
example?
classic
MixingDestination(
method = "someThing",
sources = arrayOf(...),
)
method: String = "something"
Forgive the formatting, im on phone, not sure how it looks on pc
Thats a construction call dkim
Formatting is fine! What if i want to add sources to it one by one instead of passing a set?
whats the organization that provides free repo hosting for mc projects?
codemc
ty
Could also create a builder function
buildMaxin {
method = "something"
sources = arraysOf(...)
}
"
"
Isnt the point i wanna avoid a builder?
Build the array separately
Why is a builder a anti pattern while in java its extremely common?
Depends, there are still some usage for builders in Kotlin
Like the buildString (mirrors StringBuilder) or buildList
Because of named arguments
which are?
.
oh that, ok i just didnt know what they were called
Builders are used in java to make construction more meaningful when a class has a large amounts of dependencies
For example:
class Test(private val name: String, private val age: Int)
Test(age = 5, name = "Hello")
Test(name = "Hello", age = 5)
In java it's not possible
Here you get the same, without the extra work
A builder is really meant to provide a way to concisely create an object that might have alot of optional values, in effective java he provides an example of a nutrition label where there are 2 required parts of it and the rest are optional. In my case i require the user to provide a method but they can optionally provide as many sources as they want. I feel like that applies by the same rule but you could defintely just pass in a array
Yes kotlin also has default values for functions
default parameter values are great
Example?
After using it, it's so much pain to go to Java and write multiple constructors or methods just for simple values ๐ฉ
class Human(
val name: String = "Joe",
val age:Int,
)
val alonso = Human(name = "Alonso Church" , age = 60)
alonso.name // "Alonso Church"
val joe = Human(age= 20)
joe.name // "Joe"
Sure i get that example, but what if you have a array list like accomplishements that people should be able to add to that then build it have it be immutable
That array should be built before the construction of the class
why is the builder pattern wrong then?
is it just me or did jetbrains tone down the hsv/hsb of the splash screen in IJ/WS/CL/etc?
they feel much less aggressive lol
Splash screen? ;o
lol
Lmao
this
Ah yeah, i noticed is a lot more pastel as well
btw u can do ```kt
val mixin: MixinDestination = MixinDestination("method", arrayOf(MixinSource(), MixinSource(), MixinSource())
also why not use a list instead of an array ๐
alr ya i guess that is pretty easy
Is there a new IJ version?
I had this
I've been using early releases for some time so it's constantly updating, so never know when a full release is out
Had a lot of issues that were all fixed in the early releases
can someone help me change the permissions in a smp server im in cause im confused on how to change the perms
help please
Sir this is #dev-general
#general-plugins / #general-plugins-2 and name the permissions plugin you use
sorry i didnt know LMAO
wtf is a MethodHandle
not really but what's up
I mean don't really need someone really smart, just need some suggestions regarding what would be best for performance
So I need to call a method whenever a player is near a specific player, (within 20 blocks), how and in what way would be the most optimal for this, do I just listen to move event and loopty loop constantly, or would it make more sense to have a runnable and lose on some accuracy because of it
hmm yeah I'd go with runnable like every 10 ticks or something
plus that bad boy can be async
Runnable would be better, move event triggers more often
Yea fair enough
Could probably get away with listening async
Since you're only reading, not writing
Also, when you wake up this morning and realise the CI is offline, only to find out that you have last month's and this month's bill unpaid ๐ฅฒ
Holy shit lmao, man didnt even check the assignment xD
I didnt write anything, submitted jsut for attendence
ez marks
lol
ah yeah in class activities are usually just participation points
They arent for us
Meanwhile my algorithms tutor detracts points from my score because in his mind addition is O(0) Pepega
lmao
according to him, this:
def f(n):
if n < 2:
return n
...
is O(0) for n = 0 and O(1) for n = 1
the mad man is defying the laws of mathematics
what
sorry
I'm fucking dissapointed
๐ ๐
BomBardyGamer authored and BomBardyGamer committed lol
this is why you donโt use Git and repl.it lol
@prisma wave nice pfp
no
Yes
also, can I please get some opinions on using an exectutor service for loading and saving worlds here? https://github.com/KryptonMC/Krypton/blob/master/server/src/main/kotlin/org/kryptonmc/krypton/world/KryptonWorldManager.kt#L42
Thanks
I support this Bardy
Maybe wanna use some lock mechanism assuming you load and save world files async
I just scrolled through it so yeah might have missed smtng
Future<*> ๐คฃ
world files are loaded async, yeah
๐คฃ ๐คฃ ๐คฃ
yeah the submit that takes a runnable returns that, if I want Future<Unit> then I need to use callable
// also means I don't declare extra unnecessary integers on the stack
OpTiMizAtIoN: ๐ฏ
xD
yeah ignore that BS lol
thereโs literally a comment there saying itโs likely BS, especially if thatโs const val ONE
Coroutines are a thing
yeah ik, not why I made it
bUt jAVa ComPaTIbIliTY
Why is it a wildcard btw?
idk, ask Java
.
not my fault
What type is saveAll?
no clue
You didnt write it?
ah
though I might be able to make that async when itโs auto saving
I think you can specify the generic as Unit there and let it act like a callable tbh
maybe
the world managerโs load returns Future<out World> so I can have it return Future<KryptonWorld> in the implementation, and I moved the save into the World interface itself so you can define custom behaviour to save custom world formats
because the API is obviously implementation agnostic, even though itโll likely only be implemented by Krypton
oh also, you know how in Bukkit, chunk objects can load themselves? do you think thatโs a good idea or should I leave the ability to load chunks to the world object that contains and manages them?
or I guess I could create a new chunk manager interface that every world has
Probably just let the world manage it
since on the backend, the chunk manager is the one managing chunks, not the world
and chunks only exist as chunk objects once theyโve been loaded anyway, so making chunk objects load themselves is impossible
oh btw, going back to the world executor, is it worth making it fixed size or should I leave it to potentially grow infinitely? (currently a cached thread pool)
or maybe I could create a DynamicResizableCachedThreadPoolExecutor that can be resized based on how many worlds there are
Id say fixed size
since I kinda want a cached thread pool with an upper limit on how many threads there can be
lol

kotlin... bad?
Ofc not, Kotlin just bad
lol
I mean tbh I've never gotten this bug with Java, but have gotten this same thing multiple times with kotlin
Might be worth reporting
idk
yeah Iโve had issues with IJ just not highlighting files with broken code at all until I either fix the broken code or restart
Kotlin is harder to highlight anyway because of how vastly superior it is in terms of features to Java
Just 1 patch behind it seems

and Kotlin being superior in features is just a fact btw
There is no big ass "superior" feature thats hard to parse in here
the whole confusion with blocks and having to determine where the end of the line is, etc. sounds like it could cause problems
And it gets better
What confusion with blocks?
like where everything starts and ends
Line end is not anything hard to detect, parser just checks for newline if an expression is complete
gotta check the expression though and determine if it is in fact complete
These are things many languages have infact
There in no going through and checking specifically for ends
its part of building the syntax tree
hmm, idk then
Probably just some minor bug in the plugin
probably a small bug where IJ just gets confused when an error is thrown and freaks the fuck out
kotlin bad
What does that even mean
wdym?
Lol
Lol
pfp ๐
ik BM's looking kinda cute now ๐
lol the commit message https://github.com/PaperMC/Paper/commit/81cc4f9280378f07456e7cbb0d0b1087aee8a743
are you fucking kidding me
you can't Player#chat in another thread
that's next level stupid
Lol
lol
lol
weeb mitten bad?
soldier ๐ฅบ
weeb mitten bad
Says a literal pig
i mean soldier kinda slaps, he has a point
though this new pfp is kinda cute and reminds me of Pulse's
though a bit brighter
new Emily pfp coming soon???
Do it.
No relationship advice this morning? Unfortunate.
Its also currently the only thing that can load a class into current classloader without an exposed addURL or that classloader being a custom classloader
๐ฅฒ
o?
Yea, theres a limitation tho
You must have a class in the same package as the class to be defined in your application's module
I know right? Forever alone 
No idea
One of my irl friends changed to it so I copied it to mock them
Because anime profile pictures deserve bullying
good thing mine's not from an anime ๐
pulse crying inside rn
its not even an anime...
close enough? 
anime girls are way worse than this
Me neither
Although
Soldier is getting a bit old
spy time?
if you bully me for my pfp Kaliber i will bully you for having no developer role
/s
ok time to apply
ok time to get bullied for a month or 2
Perhaps
lmao
or 3 or 4... when i get denied :kekw: