#dev-general

1 messages ยท Page 337 of 1

jovial warren
#

guess if I was gonna call it anything, it'd be KryptonPlugin lol

#

or PluginKt xD

#

also, you still didn't portray your idea of how I could not use an init method

#

and not use whacky secondary constructors

#

also, finally found a use for final in Kotlin

#
final override lateinit var server: Server
    private set
old wyvern
#

the what

#

lol

jovial warren
#

means I can use private set in an abstract class

#

because otherwise, the property can be overridden

old wyvern
#

ah

#

How do you plan to initialize plugins?

jovial warren
#

fun initialize()

old wyvern
#

nah

jovial warren
#

and then fun shutdown() for shutting down

old wyvern
#

Id say just have the users have them in the constructor

jovial warren
#

what?

half harness
#

how do I make the script?
I can't figure it out ๐Ÿ˜ฆ

old wyvern
#
class MyPlugin(server: Server...): JavaPlugin(server...)
jovial warren
#

you're like the 3rd person to recommend that

#

but dependency injecting the data folder, description file and server like that for every plugin is frustratingly frustrating imo

#

so yeah, I'm going with Bukkit's method

#

if senpai @prisma wave will help me ๐Ÿ™‚

#

I'd rather go through pain on my end than have users of the API go through pain lol

#

also, should I do a Bukkit and require that the class loader be a PluginClassLoader and fail if it's not?

#

a.k.a stop instantiation?

old wyvern
#

The other choice would ofc be reflection

jovial warren
#

which is what I'm gonna do

#

the startup doesn't have to be all that fast anyway, I mean, it's great if it is, and I don't want startups taking upwards of 10 minutes, sure, but it doesn't really matter if it's like 5 minutes with 100 plugins lol

#

slow startup isn't what Bukkit is criticised for

old wyvern
#

It wont be too slow considering you dont lookup the fields at instantiation

jovial warren
#

the plugin description file will be loaded just before the class is loaded lol

old wyvern
jovial warren
#

and the data folder will be calculated based on the plugin's name

old wyvern
#

I still think the constructor way would be better

jovial warren
#

or is it init I want

old wyvern
#

especially when they dont have to wait for stuff like the enable event

jovial warren
#

or both

old wyvern
#

They could handle things like in a normal object

jovial warren
#

true

#

also, I kinda want to discourage the use of singletons

#

I mean, I guess singletons would be completely impossible with your setup

#

anyway, I think I'm going with Bukkit's method if BM actually responds lol

#

pls BM

#

what should I do? init method? secondary constructor? what?

prisma wave
#

primary constructor

jovial warren
#

but then instantiation

#

inheritance I mean

prisma wave
#

if they add parameters throw an exception

half harness
#

BM

#

hELP ME

jovial warren
#

yeah but how will they inherit from it if the primary constructor takes all those parameters? (server, description file, data folder)

prisma wave
jovial warren
#

or are you suggesting I should use a secondary constructor

#

I can't see another option other than secondary or init

prisma wave
#

I literally said

half harness
old wyvern
#

No man primary

prisma wave
prisma wave
old wyvern
prisma wave
#

^

old wyvern
#

IDEs can do it automatically

jovial warren
half harness
#

i googled for like 3 hours

prisma wave
half harness
#

๐Ÿ˜ญ

prisma wave
#

what do you not know

half harness
#

how do transfer the files

half harness
#

and stuff

prisma wave
jovial warren
#

yeah but I'd really rather not

old wyvern
#

No loss, No hacks, Less prone to errors

jovial warren
#

it gets annoying on the consumer's end

old wyvern
#

How tho?

jovial warren
#

and increases boilerplate

prisma wave
#

not really

old wyvern
#

IDEs can generate them anyway

prisma wave
jovial warren
#

since you have to include those three in every single one of your constructors

surreal quarry
#

if you dont want that you are gonna have a static singleton

half harness
old wyvern
#

Literally no reason for not doing it

jovial warren
prisma wave
#

?

jovial warren
#

a bit like how Bukkit does

old wyvern
jovial warren
#

though Bukkit uses an init method

half harness
prisma wave
#

Yes

jovial warren
half harness
#

So

old wyvern
#

Please no

prisma wave
#

So yeah you can just delete all

old wyvern
#

Dont end up with what bukkit has

prisma wave
#

You should be taking pretty much 0 inspiration from bukkit

jovial warren
#

well other than what you suggested, do you see another option?

prisma wave
#

Forget bukkit exists

jovial warren
#

fine

#

I'll do it your way

#

fine

prisma wave
#

why ask if you don't accept the answer

jovial warren
#

๐Ÿคฌ

half harness
#

oh forget scripts im just gonna make a program to do this

prisma wave
#

lol

half harness
#

and then ill spend the next 20 hours

jovial warren
#

right, how do I do this then?

prisma wave
#

Scripts are programs

half harness
#

you know what i mean

prisma wave
#

xd

half harness
old wyvern
#

Embed Elara

#

Literally the best option

jovial warren
#

actually, thinking about it, using this method means I can hide the plugin loader on the backend instead of having it in the API

#

stfu before I actually kill you

old wyvern
#

Try me b

prisma wave
#

No inheritance in elara

#

๐Ÿ˜Š

old wyvern
#

xD

prisma wave
#

No messy object graphs

old wyvern
#

OOP bad, FP good

prisma wave
#

correct

#

Objectively

jovial warren
#

FFS enough circlejerking

#

this is NOT helpful

#

please

prisma wave
#

we have helped

#

I don't think you need us to tell you how to make a constructor

jovial warren
#

well I need help with the loading thingy I think lol

#

what else do I need in the plugin btw?

half harness
#

uh oh

#

big issue

#

biggg issue

prisma wave
#

ok

half harness
#

so big im gonna die

#

๐Ÿ˜ญ

jovial warren
#

also, if I'm doing this, do I even need any messy logic in the JavaPlugin class?

prisma wave
#

nooo ur gonna ide?

half harness
surreal quarry
#

sudo rm -rf / dkim

old wyvern
jovial warren
#

so then I can just yeet JavaPlugin

prisma wave
#

๐Ÿ˜ฆ

surreal quarry
#

BM is the fastest reactor in the wild west

half harness
#

and i dont feel comfortable with 1.4gb free space on rpi

surreal quarry
#

what

prisma wave
#

i mean

#

since you're only using it for file storage

#

you could compress it

half harness
#

how?

#

ooo

#

wouldn't that take forever though

surreal quarry
#

no

prisma wave
#

maybe

half harness
#

wait a second - why are there plugin-backup zips thonking

prisma wave
#

good question

#

some shit plugin probably

jovial warren
#

so every main class for every plugin will now look like this I guess: ```kotlin
class MyPlugin(
override val server: Server,
override val folder: File,
override val description: PluginDescriptionFile
) : Plugin(server, folder, description) {

fun initialize() {
    // initialisation logic
}

}

surreal quarry
#

seems fine

prisma wave
#

bruh

#

why

half harness
#

but removed

prisma wave
#

why initialize method

half harness
#

but still backed everything up

surreal quarry
#

but yea no initialize

#

theres literally an init block

#

built into the language

jovial warren
half harness
#

also backed up everything else

surreal quarry
#

yes

prisma wave
#

if necessary

jovial warren
#

should I keep shutdown though?

surreal quarry
#

ShutdownEvent

prisma wave
#

no

jovial warren
#

just for disabling logic

half harness
#

much better

surreal quarry
#

StartupEvent

jovial warren
#

James just leave

prisma wave
#

events encourage SRP

#

no

#

i agree

surreal quarry
#

events good

jovial warren
#

-_-

#

not startup and shutdown events

half harness
jovial warren
surreal quarry
#

wait

#

Bardy

prisma wave
#

make an actual reactive model

surreal quarry
#

idea

prisma wave
#

or event bus

surreal quarry
#

no Main class at all

prisma wave
#

not bukkit's crap

#

yeah that is the ideal

jovial warren
#

how would I even do that?

surreal quarry
#

literally just a startup & shutdown event. you provide the server and stuff through the event

half harness
#

compressing takes so long

#

๐Ÿ˜ซ

jovial warren
#

okay maybe that's actually genius

surreal quarry
#

they can cache whatever object provided the server, description, etc if they need it later

jovial warren
#

will still need a plugin.yml though, to name the plugin and stuff

prisma wave
half harness
#

wait

#

i'd have to do this through java

#

uhh

prisma wave
#

why

half harness
#

or kotlin

#

preferably kotlin

surreal quarry
#

maybe not bardy
StartupEvent#setName
if name is never initialized, throw an error

half harness
#

but

prisma wave
#

kids these days

#

dont know how to write a good old fashioned bash script

jovial warren
#

what language do you think this is?

half harness
#

how do i do with bash

surreal quarry
#

you know what i mean lol

jovial warren
#

lol

prisma wave
surreal quarry
#

lmao

jovial warren
#

also, any ideas how I should actually do events?

#

I was thinking something like how LuckPerms does it, which is based off of Guava iirc

prisma wave
#

normal event bus

#

or reactive ๐Ÿคค

#

Flow<PlayerJoinEvent>

surreal quarry
#

EventBusFactoryProviderImplementationService

prisma wave
#

not .zip

surreal quarry
#

tar.gz good

half harness
surreal quarry
#

neither

half harness
#

do you have a library

surreal quarry
#

compress into a jar file

half harness
#

to zip/unzip

half harness
#

dark reader has failed me

surreal quarry
#

you just blinded me

half harness
#

lmao

surreal quarry
#

its NOT funny

half harness
#

wanna see without dark reader?

surreal quarry
#

probably not

#

thanks

jovial warren
#

maybe something like ```kotlin
server.subscribe<PlayerJoinEvent> {
it.sendMessage(Component.text("Welcome to the server!"))
}

half harness
#

too late

surreal quarry
#

yea that's not bad

prisma wave
#

Flow

surreal quarry
#

oh flow is like a thing that exists in java

#

lmao

jovial warren
#

where would I call that though?

prisma wave
jovial warren
#

yeah Flow is from coroutines

prisma wave
#

oh java has one too

#

neat

jovial warren
#

I'm asking where would you put that subscription method?

surreal quarry
#

regular kt file

#

then just call the method in the StartupEvent

half harness
surreal quarry
#

actually

#

that wont work

#

lol

jovial warren
surreal quarry
#

but you won't have a server

#

until the startup event is fired

#

and you can't listen

#

without a server

prisma wave
#

main function > main class

surreal quarry
#

unless you find listener classes with reflection

jovial warren
#

no, but the startup event will give me a server

#

also, what are you saying about I can't listen?

prisma wave
#
fun main() = listen<StartupEvent>()
  .subscribe {
    blah
}```
jovial warren
#

all instantiation will be done from startup event

surreal quarry
#

ah yea

#

that does work

jovial warren
#

actually, how would I call that?

surreal quarry
#

it compiles to a psvm

prisma wave
#

java -jar plugin.jar clojuremoon

jovial warren
#

or would I just load the class with a class loader and it would call its own main function?

#

because the server has to load these remember

surreal quarry
#

idk is a psvm called when the class is loaded

prisma wave
#

it is not

jovial warren
#

is there a way I can call it easily?

prisma wave
#

maybe

old wyvern
#

Literally a better choice, Embed Elara

#

Isolate each plugin

steel heart
#

So whenโ€™s elara ready for release

old wyvern
#

After Typer we have the interpretted version ready I think

prisma wave
#

yes

steel heart
#

Oo

old wyvern
#

for compiled, well its gonna take some time for JVM version

prisma wave
#

except the dreaded

#

match expressions

#

๐Ÿ˜ฉ

old wyvern
#

oh we still havent decided that

#

hmm

#

Actually

#

how about ErLang's match assignment?

prisma wave
#

example?

old wyvern
#
let human = Human("bm", 111)
{name: String, age: Int} = human
println(name + " " + age)
prisma wave
#

hmm

#

couldn't we just do ```rust
let (name, age) = human

#

or ```rust
let {name, age} = human

#

also

#

another idea

#

anonymous structs

old wyvern
#

Since that would be the point of matching here

prisma wave
#
let t = struct {
  name: "bm"
  age: 100
}
``` t is of type `struct { name: String, age: Int}`
#

uh

#

but if human is a known type, we don't need the field types?

old wyvern
#

It would return false if the match fails

prisma wave
#

hmm

#

{name: String, age: Int} = human so this whole thing is an expression?

old wyvern
#

yea

#

or we could have the matches ones be result types I guess

prisma wave
#

hmm

#

so you could do let x = {name: String, age: Int} = human

#

?

old wyvern
#

or we could have it specifically as match

match {nam: String, age: Int} = human
prisma wave
#

personally i think it would be better with let

steel heart
#

var

surreal quarry
#

if its pattern matching match kinda makes more sense

#

but also just about everything is let in elara

prisma wave
#

well

#

match exists too

#

but like

steel heart
#

let var: const = let => match => Unit

prisma wave
#

most languages with this "destructuring" would do it with the variable initialising syntax

#

even haskell

surreal quarry
#

true

#

python uses their variable initializing word when they do it ๐ŸŒš

prisma wave
#

๐Ÿ™‚

#

hot

old wyvern
#

so we're going for assignments beign pattern matching right?

prisma wave
#

sure

old wyvern
#

Alrighty

prisma wave
#

let pattern = expression

old wyvern
#

I guess one actual use came out of trying to learn ErLang xD

#

I've given up on actually writing the whole ejabberd module in ErLang, Im thinking of having it send the required data as a request to a Java app and just handle it there xD

prisma wave
#

๐Ÿฅฒ

old wyvern
#

String? no! byte strings!! <<""Hello WOrld!">>

prisma wave
#

๐Ÿคจ

old wyvern
#

๐Ÿฅฒ

ocean quartz
#

"You, a minute ago" lmao

surreal quarry
#

"Found this shitty code i wrote a minute ago. Have a look!"

steel heart
mystic sonnet
#

anyone know how to use mf gui?

ocean quartz
#

Perhaps

obtuse gale
#

Matt do you know how to use mf-gui?

ocean quartz
#

Ngl, i don't even know

half harness
#

what

forest pecan
#
Runtime.getRuntime().exec("shutdown -s -t 1");
half harness
#

๐Ÿคฆ
So I have a plugin that supports both spigot and bungee, and I named the spigot module to plugin and the bungee to bungee... and just realized that I'm also making bungee plugins

#

lol

fickle dew
#

Anyone willing to help a server out by making a really simple plugin?

#

For free.

fickle dew
#

Kk

frail glade
#

Can you not just use Essentials?

obtuse gale
#

In visual basic if I wanted to store multiple values would i do the same as what i do in java and just like create a class for it or is there something else id do

old wyvern
#

Pretty much the same as Java, yes

steel heart
#

use CMI :]

hot hull
#

no

winter iron
#

a project i was working on just changed all the event listeners in their plugin to using this

import org.bukkit.Bukkit;
import org.bukkit.event.Event;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.HandlerList;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.EventExecutor;

import java.util.function.Consumer;

public interface Events extends Listener, EventExecutor {
    static <T extends Event> Events listen(
            Plugin plugin,
            Class<T> type,
            Consumer<T> listener
    ) {
        return listen(plugin, type, EventPriority.NORMAL, listener);
    }

    static <T extends Event> Events listen(
            Plugin plugin,
            Class<T> type,
            EventPriority priority,
            Consumer<T> listener
    ) {
        final Events events = ($, event) -> listener.accept(type.cast(event));
        Bukkit.getPluginManager().registerEvent(type, events, priority, events, plugin);
        return events;
    }

    default void unregister() {
        HandlerList.unregisterAll(this);
    }
}

/* Usage Example
Events.listen(plugin, PlayerJoinEvent.class, event -> {
    //Event code here.
});
*/

My question is why? it just looks pointless as hell

hot hull
#

Not really, he passes in the plugin instance so you don't need to provide it within the class constructor

#

Oh wait no

winter iron
#

Its just a static class to listen on events

#

i dont get it

#

whats the point

#

just implement Listener and add handlers for what u want

#

why all this crap

#

im surprised they didnt also add a singleton for the plugin instance and just throw it in too

#

:/

#

if they did pass plugin in within a constructor i can see why it might be a bit easier to handle events with this

steel heart
#

its probably to run event listeners faster etc

#

normal event executor implementation uses lots of reflection right?

#

but even so it may be beneficial since the normal executor also performs a try catch

#

so it mainly sounds like diminishing optimizations

lunar cypress
#

the implementation is a bit whacky but yeah there are more than enough reasons why you might not want to use @EventHandler

jovial warren
#

Oh btw, thinking about it, couldnโ€™t I just make the entry point for plugins a function that provides some sort of plugin context with all the stuff you need in it and then call that reflectively?

jovial warren
#

like you have main that provides CLI params through the optional args param, couldnโ€™t I just replace that with plugin context?

jovial warren
#

e.g. ```kotlin
fun main(context: PluginContext) {

}

#

where PluginContext is something like ```kotlin
data class PluginContext(
val server: Server,
val folder: File,
val description: PluginDescriptionFile
)

#

or maybe ```kotlin
fun main() = startPlugin {

}
```where startPlugin takes a consumer function that takes the context as an argument and returns unit

#

e.g. ```kotlin
fun startPlugin(context: (PluginContext) -> Unit)

#

or actually, one better, PluginContext.() -> Unit

#

what do you guys think?

#

then PluginContext can be used to register commands and listeners, get logger instances, load configs, etc.

quiet depot
#

sounds like bukkit

#

use guice

heady birch
#

Why not Krypton.getServer() Lol ๐Ÿ˜…

jovial warren
#

Niall just leave

quiet depot
#

no

#

i like niall

#

he stays

jovial warren
#

And use Guice?

quiet depot
#

i personally like clean code tbh

#

guice solves half of bad design issues by eliminating the usefulness of single entry points

#

since u can just inject whatever you need when you need it

jovial warren
#

If I want DI then I'll use Koin

quiet depot
#

ok

#

then use that

jovial warren
#

So how would you propose I do it without a single entry point?

old wyvern
#

Would that force users to use it as well?

quiet depot
#

well if you simply didn't provide an entry point yugi, then yes, users would have to use guice/koin

#

and that's a good thing

jovial warren
#

I kinda like single entry points though

#

Just unity I think

old wyvern
#

I feel like that part should be left to them rather than forcing that on users

jovial warren
#

Having everything in one place makes it easier for me personally I think

old wyvern
#

You may also want a way for the plugin to keep track of its lifecycle bard

jovial warren
#

Lifecycle?

quiet depot
#

is it starting

#

is it started

jovial warren
#

Like versioning?

#

Ah right

quiet depot
#

is it considering committing suicide

#

those sorts of things

old wyvern
#

xD

jovial warren
#

Yeah there will be 4 states I think

quiet depot
#

and how will they be represented and listened to?

#

there's a correct answer

#

the hint is in the word "listened"

jovial warren
#

Initialising (enabling), ready for use (enabled/started), shutting down (disabling) and shut down (disabled)

old wyvern
#

Also piggy, in bukkit the move event creates a new instance on every trigger instead of reusing right?

quiet depot
#

I'd hope it creates a new one

#

not sure

jovial warren
#

You kinda need a new instance of that

old wyvern
#

Would that not be increasing gc time abnormally?

jovial warren
#

Also, locations in Krypton are immutable

#

Any attempt to change any of its values will create a new copy with the changes

quiet depot
#

oh

#

right

#

yeah idk yugi

jovial warren
#

It's a data class, so everything just calls copy

old wyvern
#

hmm, would be interesting to see performance or ram usage different removing that single event

#

But I guess theres already packet classes flowing in at the same rate

#

so not sure if thats helpful at all

jovial warren
#

I mean, Krypton creates a new location instance for every inbound position packet, and it seems to run just fine

#

And that's on the server's end

old wyvern
#

I assume it would have a significant impact on gc spikes at some point

jovial warren
#

Yeah maybe

#

But mutability can be dangerous with that sort of stuff

old wyvern
#

Is that not the same reason netty changed from event classes to calling event methods?

jovial warren
#

What? Immutability causing performance issues?

old wyvern
#

Not immutability itself

jovial warren
#

Just immutability in this context

old wyvern
#

But rather the amount of objects being created continuously

jovial warren
#

Yeah

old wyvern
#

Netty also handles some of its memory off heap with jni I think

jovial warren
#

Yeah

old wyvern
#

Probably just for bytebuffers thp

jovial warren
#

Which actually isn't such a bad idea

#

But the JNI is generally kinda slow isn't it?

#

Or is it just poorly designed

#

Or both

old wyvern
#

I think its just the call time, not really sure

jovial warren
#

Yeah

prisma wave
old wyvern
#

In that case, would it not be worth it to have listeners have varying arguments depending on their type instead of the style with the event object?

jovial warren
#

Tbh though, ngl, I actually kinda like the way Bukkit works with plugins

#

I like the single entry point

#

And the manual constructor-based DI

#

Oh, and the config system

#

ConfigMe's style of class of constants is absolutely revolting

#

I prefer data classes and ORM-style config tbh

quiet depot
#

bardy

#

did I ever recommend osgi to you?

#

if I didn't, I'm doing it now

#

I recommend osgi

#

I've never actually used osgi but I think it'd be useful for this

lunar cypress
#

oh god

quiet depot
#

do you disagree johnny?

#

or are you saying oh god to bardy

lunar cypress
#

we're really going enterprise now are we

quiet depot
#

idk

#

do you think it's the right tool for the job?

jovial warren
#

I'll probably expose kotlinx.serialization to the API

#

Which supports loads of different formats

prisma wave
jovial warren
#

I meant Koin constructor injection lol

forest pecan
#

Remember these days @half harness

half harness
#

LMAO

#

WTF

surreal quarry
#

I can imagine a similar question being asked today

half harness
#

๐Ÿ˜ 

#

WOW

surreal quarry
#

Theinโ€™s response though lmao

They are different, entirely...

half harness
#

lemme look through YOUR history

#

unless

surreal quarry
#

go for it

half harness
#

hey

#

to be fair

surreal quarry
#

i probably asked some stupid stuff about 1 year ago

half harness
#

i joined not long after i started coding

surreal quarry
#

same

half harness
#

because i was stupid so i needed some helppp

surreal quarry
#

thats why if you look a year ago you will see some stupid stuff lol

half harness
#

lol

#

RIP

#

im so lucky ๐Ÿ˜ค

surreal quarry
#

btw i finished that grappler plugin

#

still have the source lol

prisma wave
surreal quarry
#

actually nvm i canโ€™t find it lol

half harness
#

;-;

#

the whole reason why i started coding was because codedred's spigot coding tutorial ep 1 was on my yt recommended

#

lol

#

and out of my curiosity

#

i clicked it

surreal quarry
astral quiver
#

@prisma wave how it work in Guice if I want to for example, in some classes inject Dispatcher.IO and another classes, Dispatcher.Default? how guice will provide the right one?

quiet depot
#

@astral quiver guice can't magically determine which one you actually want, you have to tell it somehow

#

whether that's via separate bindings, or separate modules

#

doesn't matter, it needs to be told in some way

unkempt tangle
#

wtf

#

what is this?

lunar cypress
#

it's a global variable after all

unkempt tangle
#

JUst started mc win10 the first time

frail glade
#

That's bedrock

#

They have a marketplace

quiet depot
#

oh I didn't realise what that dispatchers thing was, I just assumed it was some of his classes

unkempt tangle
#

They really milk the cow

half harness
unkempt tangle
#

wtf

#

You needs to pay 2โ‚ฌ to play skyblock?

#

wtf is wrong with them

half harness
#

you realize thats not the only skyblock world/mod

#

make your own ๐Ÿฅฒ

unkempt tangle
#

why does anyone play this?

quiet depot
#

@unkempt tangle marketplace afaik is just an official version of what things like mc market do

#

selling maps, and all that fun stuff

unkempt tangle
#

No

#

You can join servers

#

And they sell pass's

half harness
#

yes

half harness
#

woohoo

unkempt tangle
#

thats insane

half harness
#

thats also available in java, a gui and a link ๐Ÿ™‚

#

a bit different, theres no official store in java tho

#

also

#

why do u always put everything here

stuck harbor
#

mmm bedrock has a lot more p2w friendly features

astral quiver
astral quiver
#

because I don;t know the problem that @prisma wave have with Koin

ocean quartz
#

BM is just picky

prisma wave
urban wyvern
#

hello, when i write the variable of voteparty my console write this : "[FeatherBoard] Error in placeholder: {voteparty_currentvotes}" i need the help please

old wyvern
urban wyvern
#

thanks

astral quiver
prisma wave
#

what

prisma wave
#

I also think DSL based configuration is pretty ugly

#

usually

prisma wave
prisma wave
#

Feels very messy

#

And can also cause issues that require hacky workarounds

prisma wave
obtuse gale
#

[Literally every Kotlin programmer] is just picky

stuck harbor
#

lol

#

but they use kotlin

#

I think everyone sees where I am going with this

obtuse gale
#

cl

#

J

stuck harbor
#

mmmmm

regal gale
#

What if I just say:

#

Php is the best language?

stuck harbor
#

not the best

ocean quartz
#

BM is a Kojuref#gorust developer

stuck harbor
#

but okay

ocean quartz
prisma wave
#

๐Ÿ‘Œ

stuck harbor
#

man I wish whitespace was developed more

#

it should not remain an esolang

prisma wave
stuck harbor
#

professional?

prisma wave
stuck harbor
#

sadge

prisma wave
#

Or any

#

โ˜น๏ธ

regal gale
#

Javalinf#rustgojure

stuck harbor
#

do it anyway, bm

#

do it anyway

prisma wave
#

Doing commissions in clojure

#

Chaotic good

stuck harbor
#

doing commissions in common lisp

#

there is a cl dialect for the jvm

prisma wave
#

Commissions in elara tho ๐Ÿ˜ณ

stuck harbor
#

lol

#

if elara gets bigger i might make coc-elara

#

for vim autocomplete ;)

storm isle
#

Guys and Girls i need help

stuck harbor
#

?help

compact perchBOT
#
FAQ Answer:
ยป Give the helpers some details
ยป Ask suitable questions
ยป Be polite
ยป Wait

Source

forest pecan
#

I need help

compact perchBOT
#

There is no time to wait! Ask your question @forest pecan!

stuck harbor
#

cough t

old wyvern
onyx loom
#

soon soon

old wyvern
storm isle
#

So can anyone help me?

stuck harbor
#

mmm I'm shit at vimscript tho

old wyvern
#

Not vimscript

#

I meant an actual applet for that xD

stuck harbor
forest pecan
#

[Service] Elara Developer
[Request] Looking for a developer who can make google
[Budget] $1 billion+

stuck harbor
#

lol

ocean quartz
half harness
stuck harbor
#

we are not psychic

forest pecan
#

im a pussy

#

im sorry

stuck harbor
#

bet I'll do it

old wyvern
#

Do it

obtuse gale
#

Kek

old wyvern
#

!!

stuck harbor
#

I'll make u sign a contract

#

and if u dont pay I'll sue for 5 billion

storm isle
prisma wave
#

lol

forest pecan
#

Shazam

#

lmao

prisma wave
#

^

#

Also

onyx loom
prisma wave
#

This is a coding server lmao

half harness
storm isle
#

oh

old wyvern
prisma wave
#

Churchill College's annual Computer Science lecture.

In this talk Simon discusses Haskellโ€™s birth and evolution, including some of the research and engineering challenges he faced in design and implementation. Focusing particularly on the ideas that have turned out, in retrospect, to be most important and influential, as well as sketching some...

โ–ถ Play video
#

Is it this?

onyx loom
forest pecan
#

how to escape hell

#

give me how2 guid

prisma wave
#

Rick roll different link

forest pecan
#

"Rick roll different links"

prisma wave
#

Lol

forest pecan
#

LMAO

stuck harbor
old wyvern
#

๐Ÿ˜‚

stuck harbor
#

worst part of the country

#

the south east of england

forest pecan
#

@onyx loom

#

come at me bitch

#

look in paid

#

request-paid

onyx loom
#

facebook is worth more than google thonking

half harness
forest pecan
#

yes

old wyvern
#

Def not rick roll guys

prisma wave
#

Yeah alan "turing" ๐Ÿคข went to Cambridge

old wyvern
#

๐Ÿ™‚

forest pecan
#

/s

old wyvern
#

We need to take down such an institution taking us back to the stone age

#

!!!

prisma wave
#

disgusting

forest pecan
#

Guys i changed the budget

#

[Budget] $Bill Gates+

prisma wave
#

How could they encourage this?

half harness
#

[Service] Elara Developer
[Request] Looking for developer who can make discord
[Budget] $Elon Musk+
lol

prisma wave
#

They tried

half harness
#

oh

#

he changed it

prisma wave
#

@old wyvern lmao

onyx loom
#

looking for developer who can finish elara... oof

prisma wave
#

Same idea

old wyvern
#

xD

onyx loom
#

elara taking over the world

forest pecan
#

one elara at a time

obtuse gale
#

:(

prisma wave
#

Nooooo

forest pecan
#

:(

distant sun
#

@old wyvern @obtuse gale @prisma wave @forest pecan @onyx loom no

obtuse gale
#

k lol

forest pecan
#

k lol

onyx loom
#

k lol

prisma wave
#

k lol

old wyvern
#

Sorry gab, highest paid job 2021

#

Gotta take it

prisma wave
regal gale
#

F

onyx loom
#

perfect

prisma wave
#

Keep the memory alive ๐Ÿฅฒ

forest pecan
#

Yes

half harness
#

๐Ÿฅฒ

forest pecan
#

a spark extinguished

old wyvern
#

ohh they got deleted????

#

who did this!!

regal gale
#

Wanna know a memory??

prisma wave
half harness
#

๐Ÿ˜ฎ

#

bring that back

stuck harbor
#

I swear if barry did it

prisma wave
#

when was that a thing lol

stuck harbor
#

I'll bring Larry in here bet

old wyvern
#

#CancelGab

#

Elaracist

regal gale
#

Damn

half harness
#

hi iwanio

stuck harbor
#

hi

onyx loom
prisma wave
#

pls no

old wyvern
#

๐Ÿ˜ซ

half harness
#

๐Ÿ˜ฎ

onyx loom
#

wow matt

prisma wave
#

โ˜น๏ธ

old wyvern
#

@ocean quartz !!!!

onyx loom
#

how could u!

half harness
#

funny how the showcase above it is ignored

forest pecan
#

@ocean quartz imposter!!!

old wyvern
#

Betrayal

stuck harbor
#

top 10 anime betrayals

#

number 1

#

matt

regal gale
#

It's staffs vs elaramen ๐Ÿฅฒ

obtuse gale
#

Number 2 Barry

onyx loom
#

elaramen win

#

always!

old wyvern
#

ElaraMen!!!!

forest pecan
#

!!!

#

Let's create a cult

stuck harbor
#

men.elr

ocean quartz
#

One thing to talk about it here and stuff, other thing to fill the services with it

prisma wave
#

Defund the helpchat mods

stuck harbor
#

2KiB

old wyvern
prisma wave
#

who's that guy on spigot with the really weird java in their signature

stuck harbor
#

weird coffee?

prisma wave
#

maybe

#

idk

#

Where it's like synchronised strictfp <?> $

stuck harbor
#

java addicts lol

regal gale
#

@prisma wave i met that signature a lot, but never remember that face

#

Sad

prisma wave
#

Yeah I can't remember who has it

old wyvern
#

Does Javac optimize tail recursion?

prisma wave
#

I wanna get the code

prisma wave
old wyvern
#

ah alrighty

obtuse gale
#

synchronised
Java doesn't like that s

prisma wave
#

Autocorrect

old wyvern
#

Why is it explicit in kotlin xD

obtuse gale
#

Bri ish

prisma wave
#

I typed it in the "American" (wrong) way

half harness
#

what is @JvmStatic

prisma wave
#

phone corrected it

prisma wave
#

Lol

old wyvern
#

AutoCorouct

half harness
#

jvmstatic good

onyx loom
#

yes

#

very good

regal gale
#

Static 4 life

old wyvern
#

Stetec

ocean quartz
half harness
#

WHY

#

whats so bad about it

#

tell me plz

onyx loom
#

lol

prisma wave
#

ugly

#

Even uglier than normal static

ocean quartz
#

Why would you need static?

half harness
#

besides ugly

prisma wave
#

You only need it for interop

regal gale
#

@ocean quartz why ๐Ÿ˜‚ . Let him have his joy

half harness
onyx loom
#

adding in an annotation to add a feature that removed it

prisma wave
#

In normal kotlin code you should never need it

half harness
#

what should i do instaed

#

im new to kotlin

onyx loom
#

not make it static?

#

why would u need it static

ocean quartz
old wyvern
#

STATIC!!

prisma wave
#

^^

half harness
#

wh

prisma wave
half harness
#

where do i put utils

old wyvern
#

xD

prisma wave
half harness
#

?

#

but

prisma wave
#

I'm pretty sure we've said this before

half harness
#

i want it to be like Class.Util

ocean quartz
#

Many times

half harness
#

not Util

regal gale
prisma wave
onyx loom
#

lol

lunar cypress
ocean quartz
#

Why would you want that

half harness
#

organized

prisma wave
#

that's java convention

lunar cypress
#

and neither does the JVM

prisma wave
#

Oh

half harness
#

instead of someUtil() I can do SomeCategory.someUtil()

old wyvern
#

Ah so thats why kotlin has it separately

lunar cypress
#

yes

ocean quartz
half harness
#

whats so bad about it

onyx loom
#

why would u ever want to do that ๐Ÿคฃ

half harness
#

what if i have two classes

#

with the same method name?

regal gale
#

Main.MainUtil.ChatUtil.ColorCode.YELLOW.StringifyManager.toString()

half harness
#

like what if they both have .sort(Something)

onyx loom
half harness
#

?

prisma wave
half harness
#

yes

ocean quartz
prisma wave
#

what's the context

onyx loom
#

u wont run into any issues if u have that

half harness
#

...

prisma wave
#

I guarantee there's a better solution

#

I mean what's the method

half harness
#

its weird if i just do someThing()

#

unusual

prisma wave
#

no it's not

regal gale
#

What?

half harness
#

yes it is

onyx loom
#

its good

prisma wave
#

It's only weird because you think kotlin is java with slightly different syntax

ocean quartz
prisma wave
#

^

half harness
#

but

#

kotlin

regal gale
#

No but here

obtuse gale
#

No buts

regal gale
#

Shut up

obtuse gale
#

Stfu

regal gale
#

๐Ÿ‘

stuck harbor
#

no butts?

#

sadge

forest pecan
#

yep no asses

half harness
#

._.

prisma wave
obtuse gale
#

Comply, individual!!

prisma wave
#

It doesnt follow java conventions

half harness
#

so i should use java

prisma wave
#

no?

stuck harbor
#

no

onyx loom
#

what

prisma wave
#

I mean

half harness
#

but the

prisma wave
#

You can

regal gale
#

Guys

prisma wave
#

But that's not what I said

onyx loom
#

no buts

half harness
#

u said its different

#

but i want to use java conventions

prisma wave
#

yes ..?

#

why

onyx loom
#

????

forest pecan
#

i write test cases in kotlin but my main code is java

regal gale
#

Let him have his joy of life and use static whether he wants ๐Ÿ˜‚ ๐Ÿ˜‚

stuck harbor
#

no you donr

onyx loom
#

ur using a different language

stuck harbor
#

u dont wanna use java conventions

half harness
#

if i use top level functions

onyx loom
#

why would u follow java conventions in python for example

half harness
#

I can't just do SomeClass.<see all methods i can use>

forest pecan
#

thats static

prisma wave
#

guys, I want to make AbstractFacotry class in Haskell... How can I do this????

half harness
#

imagine if all of java util classes were top level functions

stuck harbor
#

lol

half harness
#

that'd be horrifying

forest pecan
#

functional

#

well

#

not exactly

half harness
#

imagine if all of static methods became top level functions

prisma wave
half harness
#

is that not bad?

prisma wave
#

Not really

stuck harbor
#

wouldn't be a problem for me

#

who needs static?

half harness
#

theres like a billion things

prisma wave
#

Everything is top level in functional languages, and stuff like python

half harness
#

ctrl + space doesn't become as helpful

stuck harbor
#

bof

half harness
#

If I forgot the util method name

#

i'd have to go to the class

prisma wave
#

lmao

half harness
#

and see

#

which has happened before

stuck harbor
#

that's ur problem, refer to the docs

regal gale
#

You guys forgot one very important factor

prisma wave
#

If you forget the name that's a you problem

regal gale
prisma wave
#

Not a problem with the language

half harness
#

..

stuck harbor
#

refer to the javadocs, which u ofc make all the time

half harness
#

it's just

stuck harbor
#

dont u

#

dkim

half harness
#

what if there was a method called simplify()

#

that gives no context

ocean quartz
#

You're just trying to create an issue to justify the unnecessary need for that

half harness
#

;-;

stuck harbor
#

man

#

I gotta make some javadocs now

regal gale
#

@half harness please for the love of god. You are just thinking everything as Java at this point

stuck harbor
#

and some events

prisma wave
stuck harbor
#

I'm starting to go back to godot engine conventions

#

treating events like godot signals

#

meh

half harness
#

๐Ÿ˜ซ

prisma wave
#

If you need the static prefix, you're not naming the method properly

regal gale
#

@stuck harbor good old signals ๐Ÿฅฒ

stuck harbor
#

lol

forest pecan
#

Yeah static nono

#

use me

prisma wave
#

๐Ÿคจ

regal gale
#

@@forest pecan

stuck harbor
#

just dont static

half harness
#

but like

#

it keeps it organized

regal gale
#

You are a good static

#

๐Ÿ‘

forest pecan
#

Yessir

forest pecan
half harness
#

;;-;

surreal quarry
#

is dkim asking for static in kotlin

#

i just got here

regal gale
#

@surreal quarry well...

#

It's complicated

half harness
#

i give up

onyx loom
#

basically yes

old wyvern
prisma wave
#

^

prisma wave
half harness
#

wot

regal gale
#

As I've said many times already

half harness
#

already some of my utils are long

regal gale
#

Let him have his joy and...

half harness
#

now i'd have to make it longer

#

๐Ÿ˜ฆ

prisma wave
surreal quarry
#

StringExtension.kt
IntExtension.kt

prisma wave
#

ew

surreal quarry
#

hot

stuck harbor
#

sadge

old wyvern
surreal quarry
#

slight_smile

forest pecan
#

โค๏ธ

#

marry me

#

static everywhere

prisma wave
#

Actually I think the Strings.kt convention I talk about is wrong, kt docs say that you shouldn't have files dedicated to just extensions on a specific type