#dev-general

1 messages ยท Page 134 of 1

hot hull
#

It doesn't execute actions in order

#

Plus lacks features which I'm too lazy to implement fingerguns_reversed

errant geyser
#

Hey Frosty

#

Is it ActionLib 2.0 time?

heady birch
#

ActionLib

ocean quartz
#

@hot hull You have any example of actions I can use for testing?

hot hull
#

default cofig

#

config*

#

Has a few basic ones, plus examples for each one

ocean quartz
#

Does it display stuff for OP by default or is it defaulted to vanish?

hot hull
#

It uses the highest priority format

ocean quartz
#

I'm assuming it's not working then

hot hull
#

Why?

ocean quartz
#

Nothing shows

hot hull
#

turn on debug

#

And see what gets executed

ocean quartz
#

Talking about my changes though

hot hull
#

Yea it'll still show you what's going on

ocean quartz
#

Yeah it shows nothing lol

hot hull
#

Make sure it actually enabled fingerguns_reversed

ocean quartz
#

It did

old wyvern
hot hull
#

Yes

ocean quartz
#

Frosty my boy, I reverted all my changes and still nothing shows, doesn't even error out xD

old wyvern
#

Alrighty

hot hull
#

I mean I've not tested it at all on kotlin, so idk Matt, keep the changes and pr

#

And I'll do some debugging

#

(If it doesn't error that's nice fingerguns_reversed)

#

Alrighty
@old wyvern It get's sorted above for the player, and then just uses the first one in the sorted list

ocean quartz
#

No no, my changes weren't great it was just for testing xD

hot hull
#

Ahh, I still gotta fix that NPE then somehow

#

Cause I can't test anything if it's there

old wyvern
#

Ah ok frost, Im fixing stuff up, ill open a PR in a bit

hot hull
#

Okay yea, just don't y'all be pring at the same time, cause my mind gonna explode

old wyvern
#

๐Ÿ˜†

hot hull
#

Matt, if you don't consider the actions part of it, how does the code look?

ocean quartz
#

If everything in it is going to be a companion object, just make it an object lol

errant geyser
#

@heady birch Sorry probably last ping I swear, but when I started using Spring you unkowingly consented to provide 240/70 support :))))))))
https://dzone.com/articles/add-login-to-your-spring-boot-app-in-10-mins Is this a good way of doing it? Seems like it'd do what I want, but with GH instead of Discord. I could probably figure that bit out though i hope

dzone.com

In this tutorial, we will look at various ways that you can add a login feature for Single Sign-On (SSO) using Spring Boot 2.1.

hot hull
#

Matt, did not know that fingerguns_reversed

topaz bay
#

That is not good

heady birch
#

Yes

#

Try it

#

Make sure you follow the github bit

#

Theres like 5 seperate tutorials in that page

#

I think with oauth it should all work the same between github discord e.g

errant geyser
#

Discord iirc does it a bit differently, thats why I had to do this ```kotlin
@Bean
fun accessTokenResponseClient(): OAuth2AccessTokenResponseClient<OAuth2AuthorizationCodeGrantRequest?>? {
val client = DefaultAuthorizationCodeTokenResponseClient()
client.setRequestEntityConverter(object : OAuth2AuthorizationCodeGrantRequestEntityConverter() {
override fun convert(oauth2Request: OAuth2AuthorizationCodeGrantRequest): RequestEntity<*>? {
return super.convert(oauth2Request)?.withDiscordUserAgent()
}
})
return client
}

@Bean
fun userService(): OAuth2UserService<OAuth2UserRequest?, OAuth2User?>? {
    val service = DefaultOAuth2UserService()
    service.setRequestEntityConverter(object : OAuth2UserRequestEntityConverter() {
        override fun convert(userRequest: OAuth2UserRequest): RequestEntity<*>? {
            return super.convert(userRequest)?.withDiscordUserAgent()
        }
    })
    return service
}```
#

But anyway

#

ima try it

eternal compass
#

Hey, does anyone here know MySql?
I can barely code plugins, but I need to make a random code-generating plugin

errant geyser
#

Why would you need MySQL for that?

eternal compass
#

Because i'm hooking it up to my Discord bot

#

So people can get a code in game, and redeem it in discord

#

I know how to write discord bots that interface with mysql, so I thought it made sense to make the plugin do the same

analog crater
#

You could make the bot within the plugin itself so you can use a flatfile storage such as Sqlite or json. This will save money with storage and be easy

eternal compass
#

oh, good idea

#

now I just need to figure out how to do that ๐Ÿ˜›

analog crater
#

Discord jda

#

Is the best java wrapper for discord api

eternal compass
#

Ok

#

how I need to figure out how to register a command ๐Ÿ˜„

#

I'm very new to the spigot api

analog crater
#

Ah. Are you new to java?

eternal compass
#

yeah

#

I'm used to javascript

#

which is pretty different

analog crater
#

You may want to learn java before you dive into a project like this

eternal compass
#

oh, would this be complicated?

analog crater
#

Yes. Sorta

eternal compass
#

ah... ok!

#

so you think the Discord JDA is simpler than MySQL?

#

because i've heard MySQL is pretty complicated with java, but idk

analog crater
#

Eh depends. Discord Jda is quite simple once you know java syntax. Mysql in java is a bit of complicated process.

eternal compass
#

ok, got it

hot hull
#

MySQL is pretty straightforward with libs like Hikari (even without a lib it's decent)

eternal compass
#

well, idk what a lib is, so I guess i'll try the Discord JDA ๐Ÿ˜›

old wyvern
#

JDS?

hot hull
#

Yugi, how's it coming along?

heady birch
#

Look into spring boot

old wyvern
#

Working on message formatter

#

@hot hull Any reason why you used player#effectivepermissions and compared for permission instead of just has perm?

#

Is effectivePermissions diff?

hot hull
#

It temporarelly fixed having the * perm fucking all the formats

#

Not sure if it still works tho

old wyvern
#

Should I keep it like that ?

hot hull
#

Yea

old wyvern
#

Alrighty

heady birch
#

Anyone wanna make me a website?

old wyvern
#

website for?

errant geyser
#

What u want

heady birch
#

Niall

old wyvern
#

as in a Portfolio?

errant geyser
#

What you want?

heady birch
#

Website

#

How are people making these github bios?

distant sun
#

Make a repo with your name and then create a readme, if you are talking about what sxtanna has @heady birch

worldly palm
#

famalam, can someone gimme a hand? im trying to create an itemstack with a custom player head but i cant figure out the new implementation

#

sorry for moving this message around, im trying to figure out where it belongs

hot hull
worldly palm
#

oh HECK sorry

#

i saw 'dev' and..yeah ok sorry

distant sun
#

Easy - set skull owner
"Harder" - use a base64 value and some stuff to use any skin

hot hull
#

?codeblocks

compact perchBOT
#
FAQ Answer:

Use codeblocks for formatting code or configuration files:
```<language name>
<your code here>
```

For example:
```yaml
test:

  • โ€œhiโ€
  • โ€œthereโ€
    ```

Produces:

test:
- โ€œhiโ€
- โ€œthereโ€```
distant sun
#

It doesnt work on skeleton skull

hot hull
#

Also, it's PLAYER_HEAD iirc

old wyvern
hot hull
#

Uh what, might've accidentally tabbed the wrong shit kek

#

Change it to HEX_USE

old wyvern
#

ah xD

digital patrol
#

is it possible for A plugin that only allows players with certain permissions to enter, if a player without the permission tries to enter it instantly and constantly teleports them back and says you do not have permission to enter this area.

errant geyser
#

That my friend

#

Is called WorldGuard

digital patrol
#

yes i know xD

#

just remember the flag

#

but how do i make it so certain member

onyx loom
#

add members to the region?

digital patrol
#

but then cant they break it

onyx loom
#

blacklist those members then?

#

i think thats a feature

digital patrol
#

uhh

#

no clue how but thanks

onyx loom
#

check the wiki <o/

old wyvern
#

@hot hull Are the actions supposed to be executed before the event is called?

hot hull
#

I haven't sorted the events out just yet, I just made placeholders and copied the logic to there

#

I'll organise that tommorrow

old wyvern
#

ah ok

hot hull
#

(making custom events so people can have more control with different plugin)

old wyvern
#

I feel like the action should be executed once your FrojenJoinEvent has resolved

#

yea

hot hull
#

The logic will be in the frozenjoinevent listener

old wyvern
#

Wait what?

#

which logic are you talking about?

#

You shouldnt listen to your own event for that purpose

hot hull
#

The shit that's currently in the player join event

#

Ah, I'll make a check to see if mine was cancelled and if it wasn't, execute the logic I guess?

old wyvern
#

Um yea it should be more of,

Find actions to be executed
Call event -> event resolves
Use result to run your logic```
hot hull
#

Kk, I'll do that tommorrow, cause I gotta change the event anyways

old wyvern
#

Alrighty

hot hull
topaz bay
#

๐Ÿ˜ฌ

distant sun
#

:))

jovial warren
#

hey anyone got any idea how I can do unknown amounts of properties in an application.yml file?

#

(e.g.) ```yaml
hello:
property1:
key: value
property2:
key: value

topaz bay
#

its just a map?

jovial warren
#

what the properties are just a map?

analog crater
#

All of it

#

Yaml is a big map (or small)

jovial warren
#

ah okay

old wyvern
#

@hot hull Heads up

hot hull
#

?

old wyvern
#

PRed

hot hull
#

Not on pc anymore, thanks tho

old wyvern
#

๐Ÿ‘

#

Havent touched action lib things btw

#

Ill have a look at that at some other time

#

have to wake up early tmr

hot hull
#

Imma remake it from scratch anyways

old wyvern
#

Alrighty lit!

jovial warren
#

hey @heady birch I call upon thee

heady birch
#

Hi

jovial warren
#

how good are you with application.yml in Spring?

heady birch
#

I've only used application.properties

jovial warren
#

okay

#

lemme basically show you what I'm trying to do anyway

heady birch
#

I'm not sure you can do that

#

Kind of like a getKeys in plugin configurations?

jovial warren
#

I think so yeah idk

#

lemme have a look

prisma wave
#

im fairly sure spring could deserialize a Map<String, Any>

jovial warren
#

what I mean is a bit like getList

#

in ConfigurationSection

turbid geode
#

is there a chance that noflyzone will be updated to 1.16?

onyx loom
#

yea it's called WorldGuardExtraFlags ๐Ÿ™ƒ

jovial warren
#

the one that gets all items in a list, and all the guides I can find have their configs laid out like this: ```yaml
helloworld:
mylist:

myproperty: hello
myotherproperty: world
#

but I want to remove that - (list declaration) and load them as kinda properties

#

idfk

prisma wave
#

just have mylist be a Map<String, Any>

#

that's pretty much what yaml is

jovial warren
#

what in the config class?

prisma wave
#

yes

jovial warren
#
@Configuration
@ConfigurationProperties(prefix = "lavalink")
class LavalinkConfig {

    lateinit var nodes: List<NodeConfig>

    class NodeConfig {

        lateinit var name: String

        lateinit var url: String

        lateinit var password: String
    }
}
```what I got so far (the inner class comes from the stackoverflow answer)
#

so I just replace that nodes thingy with a map or what?

prisma wave
#

wait

#

what does your actual yaml look like

jovial warren
#

it's gonna look something like either: yaml lavalink: nodes: "node-1": name: lavalink-node-1 url: wss://localhost:9000 password: TheWorldsBestPassword "node-2": name: lavalink-node-1 url: wss://localhost:9000 password: TheWorldsBestPassword or ```yaml
lavalink:
"node-1":
etc...

#

it's so if you self-host it you can give it as many nodes as you like

#

and so I can easily expand it if I need to

prisma wave
#

that should work fine then

#

or maybe not

#

have nodes be a Map<String, NodeConfig>

jovial warren
#

which one?

#

okay

#

which config should I use? the first one then?

prisma wave
#

yes

jovial warren
#

okay

prisma wave
#

incidentally there's a way to not need lateinit

#

@ConstructorBinding iirc

jovial warren
#

which class/field gets annotated with that?

#

and also what do I replace lateinit with?

prisma wave
#

the config class

#

a constructor

#

lol

polar mirage
prisma wave
#

configuration classes should always be data classes imo

polar mirage
#

help

prisma wave
#

wrong channel

jovial warren
#

^^^^

prisma wave
#

also, ew 1.8

jovial warren
#

anyway, so I should have it look something like: ```kotlin
@Configuration
@ConfigurationProperties(prefix = "lavalink")
@ConstructorBinding
data class LavalinkConfig(val nodes: Map<String, NodeConfig>)

prisma wave
#

it has to be a val

#

or var

jovial warren
#

where do I put the inner class though if it's a data class?

prisma wave
#

but yes

#

inside the class?

#

being a data class doesn't change anything about inner classes

jovial warren
#

can data classes have bodies?

prisma wave
#

yes lol

#

all data class means is to generate equals/hashCode/toString/copy for the constructor parameters

jovial warren
#

apparently says could not autowire now

prisma wave
#

where?

jovial warren
#

at nodes

#
@Configuration
@ConfigurationProperties("lavalink")
@ConstructorBinding
data class LavalinkConfig(val nodes: Map<String, NodeConfig>) {

    data class NodeConfig(val name: String, val url: String, val password: String)
}
#

nodes shows up as red and says could not autowire

#

does the inner need to be @Configuration or what?

prisma wave
#

remove @novel badgeruration

#

oops

#

sorry

#

@novel badgeruration

#

you know what I mean

#

lol

jovial warren
#

yeah I did

#

now @ConfigurationProperties("lavalink") is red

prisma wave
#

sorry for the pings

hot hull
#

He's a cool dude, he probs won't get mad fingerguns_reversed

prisma wave
#

saying what?

#

hopefully not lol

jovial warren
#

not registered via @EnableConfigurationProperties, marked as spring component, or scanned via @ConfigurationPropertiesScan

prisma wave
#

do one of those then

#

@ConfigurationPropertiesScan on main class works nicely for me

jovial warren
#

okay

#

yeah that fixed it

#
@ConfigurationProperties("lavalink")
@ConstructorBinding
data class LavalinkConfig(val nodes: Map<String, NodeConfig>) {

    data class NodeConfig(val name: String, val url: String, val password: String)
}
```so this is fine then?
prisma wave
#

probably

jovial warren
#

also what do I do about my metadata?

prisma wave
#

?

jovial warren
#

since it says it can't resolve the properties of node-1

prisma wave
#

what's the full error?

jovial warren
#
lavalink:
  nodes:
    "node-1":
      name: lavalink-node-1 # <-- cannot resolve
      url: wss://localhost:9000 # <-- cannot resolve
      password: TheWorldsBestPassword # <-- cannot resolve
#

it's not an error it just shows up yellow

prisma wave
#

oh

#

IJ can alt+enter it I think

jovial warren
#

okay

prisma wave
#

it's probably just because it's not a registered config thingy

jovial warren
#

okay yeah making it a map and removing the "" part of that yml seemed to fix it

#

a.k.a: yaml lavalink: nodes: node-1: name: lavalink-node-1 url: wss://localhost:9000 password: TheWorldsBestPassword with: ```json
{
"name": "lavalink.nodes",
"type": "java.util.Map<java.lang.String, dev.bombardy.bardybot.config.LavalinkConfig.NodeConfig>",
"description": "Description for lavalink."
}

#

don't ask why the descriptions are all the default ones lol

heady birch
#

Did that work?

jovial warren
#

haven't tested it yet, still working on changing the code to make it work

#
@Bean
fun lavalink(jdaFunction: JDAFunction, linkConfig: LavalinkConfig, botConfig: BotConfig) = JdaLavalink(
        botConfig.clientId,
        1,
        jdaFunction
).apply {
    linkConfig.nodes.values.forEach {
        addNode(it.name, URI(it.url), it.password)
    }
}
```that looks about right haha
prisma wave
#

that is hideous

jovial warren
#

I know

onyx loom
#

ur hideous

jovial warren
#

not even the worst of it BM

#

cover your eyes

#
@Bean
fun jda(jdaFunction: JDAFunction, lavalink: JdaLavalink, config: BotConfig): JDA = runCatching {
    val jda = JDABuilder.create(config.token, GATEWAY_INTENTS)
            .setActivity(Activity.playing("bot.bardy.me | !help"))
            .setVoiceDispatchInterceptor(lavalink.voiceInterceptor)
            .setMemberCachePolicy(MemberCachePolicy.VOICE)
            .setChunkingFilter(ChunkingFilter.NONE)
            .disableCache(DISABLED_FLAGS)
            .build()

    jdaFunction.jda = jda
    return jda
}.getOrElse {
    LOGGER.error("Your bot token is empty or invalid! You can configure your token by providing the -Dbot.token=my_token argument when running this application")
    exitProcess(0)
}
prisma wave
#

why

#

why do you do this

jovial warren
#

I mean, it works

#

the exitProcess() is really sneaky though

#

that's there so that I can return JDA as the result of that function

prisma wave
#

Nothing hacks

jovial warren
#

also for some reason that still returns Nothing without the explicit type there

jovial warren
#

Parameter 0 of constructor in dev.bombardy.bardybot.config.SentryConfig required a bean of type 'java.lang.String' that could not be found. tf?

jovial warren
#

@prisma wave any ideas?

prisma wave
#

send code

jovial warren
#
@ConfigurationProperties("sentry")
@ConstructorBinding
data class SentryConfig(val dsn: String)
#
sentry:
  dsn: "my_sentry_dsn"
#

then @ConfigurationPropertiesScan on my main class

restive abyss
#

Hey, I'm fairly experienced coder in Java looking to get into plugin development. I would love if someone could show me some good resources to learn or teach me the basics

hot hull
#

Play around with it I guess, most tuts are garbage so GWcmeisterPeepoShrug

rotund egret
#

Your mistake is not using configurate

jovial warren
#

yeah gl finding a decent tutorial @restive abyss

#

also @rotund egret wdym?

#

@prisma wave you got any ideas either?

rotund egret
#
@ConfigSerializable
object Config {
    @Setting
    var sentry = SentryConfig
}

@ConfigSerializable
object SentryConfig {
    @Setting
    var dsn = "my_sentry_dsn"
}```
๐Ÿ˜Ž
jovial warren
#

tf?

#

you realise we're talking about Spring configuration here right

rotund egret
#

No clue, I just like configurate as a config lib

topaz bay
#

This could be our excuse to actually collaborate.

#

lol

prisma wave
#

Damnn

#

Any ideas?

#

I propose a new language called Frodin

onyx loom
#

๐Ÿ‘€

prisma wave
#

And since they want "unique" we need to have a gimmick

topaz bay
#

I was thinking more along the lines of Odigga

#

and thus begins the war

#

HA

prisma wave
#

fuck off Barry

#

anyway

topaz bay
#

Barry is oppressive

#

petition to delete barry

onyx loom
#

Frodin sounds better

#

lol

prisma wave
#

i propose a language that can hack Barry and remove the anti caps thing

topaz bay
#

@onyx loom fuck you

onyx loom
#

no fuck u

prisma wave
#

I imagine something esoteric is out of the question

topaz bay
#

most likely

prisma wave
#

So

#

I guess think of a paradigm and build from there?

topaz bay
#

Yes

prisma wave
#

ok

#

what about

#

A functional language that isn't ugly

#

Can't be that hard

onyx loom
#

cant be that hard 4Head

topaz bay
#

I 100% support this

#

rust meets kotlin meets haskell?

prisma wave
#

I like the sound of that

#

mostly

#

the 3 most circlejerky languages combined into 1

#

also known as perfection

topaz bay
#

yup

#

We're gonna need an actual name too

prisma wave
#

indeed

#

something modern but not too quirky I think

#

probably named after something geographical or an element or something

#

what about "cerise"

wise sundial
#

yooo

steel heart
#

Yo Eclipse users be kinda gang gang

topaz bay
#

@prisma wave ew

#

something prettier

prisma wave
#

cerise is pretty but ok

#

elara?

#

named after a really obscure Jupiter moon

#

and also something Greek apparently

topaz bay
#

That sounds fun

prisma wave
#

cool

#

ok

#

so

#

syntax

#

I propose either val and fun or a single def for declarations

#

then maybe mut val for mutable? or just var

#

or let ofc

topaz bay
#

I would hate existence typing mut val

prisma wave
#

likewise

#

but that's kind of the point

#

discourage mutability

#

to build on that, I think mutability as part of the type system could be cool

#

I think rust does something like this, where you have to explicitly specify mut to be able to call any mutating functions on a type

#

so like ```
type Player {
let mut xp = 0

mut fun incXP() {
xp++
}
}

let player = blah
player.incXP() //doesn't compile

let mut player = blah
player.incXP() //does compile

#

could be cool idk

errant geyser
#

Ima try copy all of you and build KatLang

prisma wave
#

uh oh

#

join us

errant geyser
#

Its gonna be a massive shitshow

prisma wave
#

we can split the $10000

errant geyser
#

Damn, who's paying the $10000?

#

Andre or

prisma wave
errant geyser
#

Oh that's an actual prize

#

I thought you were making that up

prisma wave
#

nope

#

real

errant geyser
#

join us
You serious? You do realise I've never touched this before right? I mean I've intended to but then I've gone to other things

#

ยฏ\_(ใƒ„)_/ยฏ

prisma wave
#

you'd better be a fast learner

#

Elara Lang is gonna be the next big thing

errant geyser
#

Sounds fancy, I'm in.

you'd better be a fast learner
I meean, we'll soon find out. So you're coding it in Kotlin I assume right?

prisma wave
#

That seems like the obvious choice

errant geyser
#

Fair enough

#

Well, its midnight almost and I have to get up at 6 so I'm going now, but I'm probably free most of tomorrow, tell me what I need to do Sir Mr Senpai Sir

prisma wave
#

@topaz bay it wants "unique", any ideas?

#

Ok will do

#

gn

errant geyser
#

๐Ÿ‘‹

#

Inb4 Sx screams at you for this

topaz bay
#

Aye wtf, don't invite the noobs

errant geyser
#

There we go

prisma wave
#

Lol

#

yeah let's not get ahead of ourselves

#

so: functional

#

that's not much to go on

topaz bay
#

Ahead of ourselves?

#

It doesn't even start until August

#

Lol

prisma wave
#

oh

#

even so

#

we should have a rough idea

topaz bay
#

You didn't read the damn post

prisma wave
#

I skimmed it

#

smh

topaz bay
#

๐Ÿ˜‚๐Ÿ˜‚๐Ÿ˜‚

#

Shame

prisma wave
#

they started talking about Lisp and I just tuned out

#

which is perfectly fair I think

topaz bay
#

Yeah

#

I'll give you that

onyx loom
#

wait what is this

#

why is elara being created

prisma wave
#

money

#

and it's cool

onyx loom
#

whats the concept / challenge

prisma wave
#

make a "unique" language

#

@topaz bay for uniqueness, what about that type system idea you had a while ago?

#

typing by contract or whatever it was

#

might be tricky in a statically typed language though

onyx loom
#

whats the requirements?

topaz bay
#

Type by contract wouldn't be hard static

#

Once a type has all its members defined, any inferred type for it would just include those as a union

prisma wave
#

true

#

could be worth doing?

#

it's definitely a unique idea

#

not sure if it's practical though

topaz bay
#

Is anything practical?

prisma wave
#

well... yes

#

lol

#

I can't think of a whole lot of benefits that typing by contract would give, that outweigh the potential messiness

topaz bay
#

The only practical thing in existence in the new Kotlin script expansion

prisma wave
#

true

#

although that's not a language

topaz bay
#

SHUT UP

#

๐Ÿฅบ

regal gale
prisma wave
#

maybe we should focus on the task at hand

topaz bay
#

FUCK

onyx loom
#

No need to shout.

topaz bay
#

Shut up noob

prisma wave
#

ok

onyx loom
#

why u always hurting my feelings

#

with such profanity :(

regal gale
topaz bay
#

Its what you deserve

#

Lets be real

onyx loom
#

why so ๐Ÿ™

topaz bay
#

ยฏ_(ใƒ„)_/ยฏ

onyx loom
#

exactly

#

so fuck u

#

idiot

#

noob

#

๐Ÿ™‚

topaz bay
#

WOW

#

Pause

#

Can we talk about Halsey?

#

@remote goblet Do you listen to Halsey?

onyx loom
#

what about halsey

topaz bay
#

You seem the type

#

I love her

#

So much

onyx loom
#

i havent listened to any of her songs

topaz bay
#

New Americana literally shaped my teenage years

onyx loom
#

but the ones shes featured in are bangers

remote goblet
topaz bay
#

I remember to this day, the first time I listened to that song

#

The guy who introduced me to her was pretty hot

remote goblet
#

i first heard that song from trevor moran EmiPopcorn

topaz bay
#

oh dear god

prisma wave
#

halsey is cool

topaz bay
#

Trevor Moran

#

wtf was the name of that youtube group?

remote goblet
#

o2l

topaz bay
#

UGH

#

Bruh... they STOPPED making videos in 2014?!?!?!?

onyx loom
#

@topaz bay favourite song?

remote goblet
onyx loom
#

from her

remote goblet
#

thats where i first heard that song from

topaz bay
#

@onyx loom Thats pretty tuff

remote goblet
#

my favourite is clementine

topaz bay
#

I would say new americana probably

remote goblet
#

clementine is relaxing mmSitStareMocha

topaz bay
#

I like nightmare a lot too

#

I like how were both listening to the same album now

onyx loom
topaz bay
#

NO

#

Go away

#

fags only

onyx loom
#

i am a fag

topaz bay
#

TOO BAD

onyx loom
#

notes never lie

#

ยฏ\_(ใƒ„)_/ยฏ

topaz bay
#

lol

#

You can join in on the song I'm listening to now

remote goblet
#

Jessie Reyez is still one of my favourite singers emojiplead

topaz bay
#

I'm so sad... that I know the words to this song

onyx loom
#

fuck sake

#

6ix 9ine

topaz bay
#

I haven't opened Spotify in a very long time

#

This is almost nostalgic

onyx loom
#

damn thats sad

onyx loom
#

ive prob had 1000 hours on spotify in this yetsr alone already

#

ew wtf is Nightmare sx

#

this is disgusting

topaz bay
#

WDYM

#

Its like a bad bitch anthem

onyx loom
#

ok now i see why u like it then

#

cus ur a bitch PES_Devil

topaz bay
#

fuck you

onyx loom
topaz bay
#

hater

onyx loom
#

clemetine and new americana are ok. i see why u like it but its not my style

topaz bay
onyx loom
#

what the fuck was that

#

please never link me that again

topaz bay
#

FUCK YOU

onyx loom
#

No need to shout.

prisma wave
#
let text = "Hello"
print text //paranthesies are optional

let list = [1, 2, 4.5]
let total = list.map(+ 1).reduce(+)
//Total = 10.5
``` @topaz bay theoretically how does this look?
#

I think something like F#'s pipe operator might be cool too

#
let sum = (List<Number> list) => list.reduce(+)

let total = [1, 2, 3] |> sum
#

gives a bit more choice

distant sun
#

|> bruh

prisma wave
#

F# has that

#

I think it's quite cool

#

It's the same as sum([1, 2, 3])

distant sun
#

->

prisma wave
#

But arguably more readable

#

-> might be nicer

onyx loom
#

i quite like it

distant sun
#

weirdos

prisma wave
#

Idk, just thinking of ideas ATM

#

While sx ignores me ๐Ÿ˜”

onyx loom
#

lol what a great partner

topaz bay
#

ew wtf

#

dont call me sx

#

gross

prisma wave
#

guess I'll have to carry

topaz bay
#

And Im playing OW

prisma wave
#

don't care

#

Elara is more important

#

We need gimmicks

onyx loom
#

imagine thinking ow is more important

prisma wave
#

Give me gimmicks

#

imagine

#
let factorial = (Int n) => {
  (1..n).fold(*)
}

let recursiveFactorial = (Int n) => {
  match n {
    1 -> 1
    else -> n * recursiveFactorial(n - 1)
  }
}``` fairly clean imo. Not that unique yet
#

We need a gimmick

sharp cave
#

yall, intellij nis saying my packages no longer exist, pls help Error:(24,23) java: package org.json.simple does not exist

#

idk what to fucking do

analog crater
#

What is spring web? Ive been told its for a rest backend but ive also been told you can hse it for frontend in place of stuff like react. What is the best way of uisng it on a dashboard type website

quiet depot
#

There's never any reason to couple your frontend and backend

#

they should be separate

#

spring handling the backend, and whatever your preferred tool is on the frontend

analog crater
#

So I should have a spring backend for data and a reactjs frontend which gets data from the backend?

heady birch
#

I assume so

analog crater
#

And displays it nicely

heady birch
#

I always did it the traditional way

#

The eCloud guys want the frontend separated

#

It'll improve the UI though

errant geyser
hot hull
#

Lmao

heady birch
#

Holder?? does it have arms??

#

lol.. jk

hot hull
#

I honestly didn't think of what else to name it :p

analog crater
#

add a readme.md. it makes any project 10x better

hot hull
#

Nah I'm deleting it later anyways so fingerguns_reversed

analog crater
#

oh sad.

heady birch
#

commenting code is also very nice

hot hull
#

Nah, this way people have to use atleast 1 braincell fingerguns

analog crater
#

most of us started off as spigot developers. We dont have any braincells left

hot hull
#

Indeed we did

frigid badge
#

imagine not having started with spigot

#

๐Ÿ˜‰

analog crater
#

imagine flooding the spigot market by being a shit dev who gives no shits to any programming concept and only cares about the shit it makes for a shitty spigot plugin taught by some half-arsed youtube tutorial and then having the audacity balls calling yourself a Developer

errant geyser
#

half the people here

lunar cypress
#

imaging shitting on people for being new and still having to learn certain things

analog crater
#

Nah. People just dive way too deep and fail misserably

#

See spigot

distant sun
#

imaging shitting on people for being new and still having to learn certain things
@lunar cypress words

lunar cypress
#

This attitude certainly doesn't help them not "fail miserably"

analog crater
#

I dont see spigot getting ideal any time soon even if change my attitude

lunar cypress
#

nothing gets ever ideal

#

spigot sucks and java sucks

hot hull
#

kotlin good

analog crater
#

java doesnt suck as bad as spigot

hot hull
#

It sucks way more fingerguns_reversed

lunar cypress
#

but you're not critisising that, you're just bashing devs

old wyvern
#

Yakฤซnana

hot hull
#

Yugi

subtle lynx
#

If someone requests a paid commission to modify a plugin whose TOS states that it can't be redistributed, is that a bad thing?

old wyvern
#

sup frost

analog crater
#

yes

hot hull
subtle lynx
#

yikes

#

Latest one

#

The plugin they want modded says not to distribute

analog crater
#

lmao he asked me earlier if i can edit it

subtle lynx
#

lol

old wyvern
hot hull
#

Lemme convert it to kotlin now :p

old wyvern
#

Did you check the pr? ๐Ÿ‰

lunar cypress
hot hull
#

I haven't yet Yugi, been doing this, will check in a bit

old wyvern
#

๐Ÿ‘

hot hull
#

@old wyvern This might error btw, as not all formats have the inverted attribute

isInverted = formatSection.getBoolean("inverted")

old wyvern
#

That returns false if the "inverted" section isnt present

hot hull
#

What I mean is, the inverted attribute might not even exist in the config for that format

old wyvern
#

yes

#

If its not specified it will default to false

hot hull
#

Ah okay

old wyvern
#

like you already had it to

frigid badge
#

what if the inverted section is inverted

old wyvern
#

what if

hot hull
#

@old wyvern Wanna get rid of nulls for me?

old wyvern
#

Sure frost

#

Where?

hot hull
#

FJ

#

Load it into IJ and you'll see fingerguns_reversed

old wyvern
#

The kotlin version right?

hot hull
#

Yes

old wyvern
#

I think I handled most of it ?

#

What else is left null?

hot hull
#

Nah pull the latest thing

old wyvern
#

ah one sec

hot hull
#

I already changed a fuck ton of shit

old wyvern
#

@hot hull Done ๐Ÿ‘

hot hull
#

Thanks

regal gale
#

If I'm maniac enough, I would re-use my code for kteval cmd from my bot to PAPI expansion ๐Ÿ˜‚

#

Sx might have the same idea too, if maybe one day

prisma wave
#

@hot hull why use Long wrapper ๐Ÿ˜ฆ

hot hull
#

what then thonking

heady birch
#

long

hot hull
#

@prisma wave How does one do an instance check in kotlin?

obtuse gale
#

is

prisma wave
#

yeah is = instanceof

#

plus you get smart casting

#

which is hot

hot hull
#

fingerguns_reversed


fun CommandSender.sendMessage(msg: String) {
    var message = msg

    if (Bukkit.getServer().pluginManager.getPlugin("PlaceholderAPI") != null) {
        if (this is Player) message = PlaceholderAPI.setPlaceholders(this, message)
    }

    this.sendMessage(message.color())
}
prisma wave
#

ew

#

no braces ๐Ÿ˜ 

#

smh

hot hull
#

;c

prisma wave
#

pretty clean apart from that though

#

Bukkit.getServer().pluginManager => Bukkit.getPluginManager()

#

wait

#

does that even work?

#

i think the instance function would override the extension function

hot hull
#

boutta test rn

prisma wave
#

IJ might give a warning

hot hull
#

But a commandsender can be a player, so not sure why it wouldn't

prisma wave
#

yeah

#

but I mean CommandSender#sendMessage is already a thing

hot hull
#

(Doesn't give any warnings)

prisma wave
#

so that would override the extension function

#

hm

#

maybe I'm wrong

hot hull
#

Yea changed the method to sendTranslatedMessage

#

since the above wasn't showing up

jovial warren
#

Bukkit.getServer().pluginManager => Bukkit.getPluginManager()

#

Bukkit.server.pluginManager...?

prisma wave
#

it's not a getter

#

well it is

#

but the kotlin compiler knows it isn't tied to an actual field

#

so you can't do that

jovial warren
#

there is a server field in Bukkit afaik

#

I've used it like that before

hot hull
#

In latest doesn't seem to be a thing GWcmeisterPeepoShrug

jovial warren
#

ah okay yeah maybe they changed it since Server is a singleton

#

idfk

#

I haven't used the 1.16 API before

ocean quartz
#

The server field was always private

prisma wave
#

yeah

regal gale
#

I'm gonna be attempting to make the craziest placeholder expansion no one would think of

#

.. if I can move around again

heady birch
#

What is it?

regal gale
onyx loom
#

wow

#

nice tease

#

and u wont even tell us

#

๐Ÿ˜

regal gale
hot hull
#

@ocean quartz What am I missing here? It's not recognizing my aliases

    override fun setAliases(aliases: MutableList<String>) {
        setAliases(Settings.ALIASES)
    }
frigid badge
#

infinite recursion

hot hull
#

Ah

ocean quartz
#

Well yeah you're overriding it dummy

prisma wave
#

don't take a MutableList

#

unless you actually need mutability

#

Liskov applies to Mutable in kotlin

hot hull
#

Well yeah you're overriding it dummy
@ocean quartz uh what, should I be setting it somewhere else then or

ocean quartz
#

Why are you even overriding it?
just do setAliases on init

hot hull
#

@ocean quartz I still don't understand why it's not working lol, I switched it so it set's them on init, yet still nada

ocean quartz
#

Show me your class

#

Both the Settings class and the command one

compact perchBOT
#
๐Ÿ“‹ Your paste, Frosty
https://paste.helpch.at/aruviyuhus

A member of staff has requested I move your message to a paste,
Most likely beacause it contains a config/error/code snippet.

prisma wave
#

smh

compact perchBOT
#
๐Ÿ“‹ Your paste, Frosty
https://paste.helpch.at/tiwesifudo

A member of staff has requested I move your message to a paste,
Most likely beacause it contains a config/error/code snippet.

prisma wave
#

i'm not sure that will work

ocean quartz
#

Yeah i don't like what you're doing with this Settings class

hot hull
#

Got suggestions? fingerguns_reversed

prisma wave
#

not using static

#

or pseudo-static

ocean quartz
#

Use ConfigMe for config related stuff, and yeah ^

hot hull
#

Matt, I'm good thanks

#

pseudo-static?

prisma wave
#

object is pseudo-static

#

it's not literally static, but it effectively is in this context

hot hull
#

Then what? I'm not about to use DI for this

ocean quartz
#

Why not just setAliases(plugin.config.getStringList("settings.alias"))? You're already passing down the plugin instance, you're just creating more to achieve the same

hot hull
#

Changed that now, and for the rest?

prisma wave
#

what even is the problem lol

hot hull
#

I mean Matt, it still doesn't register the aliases lol

ocean quartz
#

And are you sure the value is there?
Print out the stuff from the config on init before you set it

hot hull
#

They print out just fine

ocean quartz
#

Hmm, and was it working before you changed to Kotlin?

hot hull
#

I don't think it was no

#

At first it was, not sure if it was in the latest ver

ocean quartz
#

Okay I'll check in a second

errant geyser
hot hull
#

Is that a getter ๐Ÿคข

prisma wave
#

that is the most java-like code I've ever seen

#

literally no reason to use streams

#

and that getter could be replaced with a val

errant geyser
#

Only reason I made a getter

#

Is cos its a mutable list

prisma wave
#

you can have properties with custom getters

#
val registeredStatistics: List<ProperStatistic>
  get() = _registeredStatistics
``` is one such way of doing it
errant geyser
#

oooo

#

Fancy

#

But I uh

#

Still can't really do that

prisma wave
#

why not?

errant geyser
#

Since the list is immutable

prisma wave
#

and?

errant geyser
#

Well

#

I can't add to it

#

Which I sort of need to do

prisma wave
#

you have 2 properties

#

you have a private mutable property _registeredStatistics

#

and a public immutable one

#

yes

errant geyser
#

Oh its another thing

prisma wave
#

lol

errant geyser
#

kkcool

onyx loom
#

No need to shout.

errant geyser
#

Its a senpai learning sesh, whats not to shout about?

floral basin
#

Tier 6

onyx loom
#

๐Ÿ˜

floral basin
#

Jesus

#

All kali does is text here

onyx loom
#

me and bm are nerds, dont mind us

#

hey im not the only nerd

#

๐Ÿ™

floral basin
#

yes

onyx loom
#

๐Ÿ™๐Ÿ™

floral basin
#

Frosty is a nerd too

prisma wave
#

๐Ÿ˜Ž

floral basin
#

@hot hull

errant geyser
prisma wave
#

no

#

why streams

errant geyser
#

Idk how else to filter it down a list of the ProperStatistics that are only for that specific type

prisma wave
#

literally

#

List.filter

#

this ain't java

onyx loom
#

java bad

#

kotlin stay winning once again

prisma wave
#

as usual

errant geyser
#

Fancy

#

ok thats done, looks better

#

I've just realised I don't need a main class do I? Since I'd never use it anyway

prisma wave
#

no idea

#

maybe

errant geyser
#

IAL doesn't have one

#

I'll delete it for now

#

ยฏ_(ใƒ„)_/ยฏ

#
class ExampleStatistic : StatisticListener() {

    private val statistic = ProperStatistic(Material.ACACIA_BOAT, this, JavaPlugin.getPlugin(ExamplePlugin::class.java))

    @EventHandler
    fun doSmth(e: SomeEvent) {
        statistic.increment()
    }

}``` What do you think about this for registering a statistic? Ignore the JavaPlugin thing, its just as a quick example
hot hull
#

statistic should be a constant fingerguns_reversed

onyx loom
prisma wave
#

How would that work, isn't it per player?

onyx loom
#

global server statistics ๐Ÿ˜ฎ

hot hull
#

quick question KM, I need to access the config in my MessageFormatter but I don't wanna use DI for it, since that'd be ugly af

prisma wave
#

Why would it be ugly

#

It's cleaner than it is in Java

onyx loom
#

?kotlin-dependency

compact perchBOT
#
FAQ Answer:

Dependency Injection
Dependency injection is when we pass a class through other class constructors to access that specific class in those other classes.

class Main : JavaPlugin() {
    
    override fun onEnable() {
      val other = Other(this)
      
      other.method()
    }
    
    fun myMethod() {
       /* Some code goes in here */
    }
}
class Other(private val main: Main) {

    fun method() {
      main.myMethod()
    }
}
hot hull
#

Because I'd have to pass it in like 4 different classes as well

onyx loom
#

i wouldnt say its not nice

ocean quartz
#

I mean what's the problem with that?

hot hull
#

4 different classes

prisma wave
#

DI good

hot hull
#

But it's dumb for a single value..

ocean quartz
#

Also should I use LinkedHashMap over HashMap? (in Java) Since that's what mutableMapOf uses

prisma wave
#

It maintains order

ocean quartz
#

Then pass the single value instead of the plugin

#

I think it makes more sense yeah

prisma wave
#

LinkedHashMap is pretty much the same, but it maintains insertion order, so you might as well use it

ocean quartz
#

Specially good for the paginated items

errant geyser
#

Yeeah BM I didn't really think that through did I?

#

I'll revisit that later

ocean quartz
#

And yeah Katsu

old wyvern
#

๐Ÿ˜†

jovial warren
#

is that like 600 lines lol

#

@errant geyser that register function should be reified

#
inline fun <reified T : OfflinePlayer> ParameterHandler.register() = register(T::class.java)
```that looks about right
hot hull
#

@ocean quartz If it was in kotlin you wouldn't have that issue fingerguns_reversed

jovial warren
#

it's probably in Java due to interop, which doesn't make too much sense tbh

old wyvern
#

Is that just to register OfflinePlayer and Player?

jovial warren
#

since you can write Kotlin code that's usable in Java if you do it right

#

Is that just to register OfflinePlayer and Player?
no fucking clue lol

#

time to check source

old wyvern
#

you didnt write that?

jovial warren
#

I didn't write ParameterHandler no

#

I just created the extension to reify it

#

actually it's a class of wildcard

old wyvern
#

what?

jovial warren
#

lemme just modify that code

ocean quartz
#

Trust me frosty I'd write everything in Kotlin if it was shaded in Spigot

old wyvern
#

What is ParameterHandler?

hot hull
#

pdm fingerguns_reversed

#

or we go bully md to shade it in

jovial warren
#

wait how tf does that register function work that @errant geyser is using?

#

function: (T) -> Any?

ocean quartz
#

Can't really use PDM on a lib fingerguns

hot hull
#

I mean

jovial warren
#

wait I'm looking at the wrong project that's why I can't figure it out lol

#

I'm stupid

#

actually it's exactly the same in normal MF

prisma wave
#

I see a kotlin

jovial warren
#

help me out here please KM

prisma wave
#

avec quoi?

jovial warren
#

actually nvm

#

I know how this works

hot hull
#

oui oui

old wyvern
#

๐Ÿ˜‚

jovial warren
#
inline fun <reified T> ParameterHandler.register(action: (Any) -> TypeResult) = register(T::class.java, action)
#

there we go

#

I think I nailed that

prisma wave
#

that won't compile

jovial warren
#

why not?

prisma wave
#

action()

jovial warren
#

oh yeah true

prisma wave
#

action: (Any) -> TypeResult

jovial warren
#

okay how do I fix that?

#

the original takes a functional interface

prisma wave
#

you can probably just pass action itself

jovial warren
#

trying to turn that in to a lambda argument thingy

#

ah okay

prisma wave
#

the compiler can probably automatically do it

jovial warren
#

yeah edited it

#

I think I'm improving my understanding of all these thingys

#

like inlining and higher-order functions

prisma wave
#

inlining is easy

jovial warren
#

yeah but I've never quite grasped it really

prisma wave
#

it's literally compiler copy-pastes

#

same with macros in rust and c++

jovial warren
#

never used

prisma wave
#

in theory it's an easier concept to grasp than functions

jovial warren
#

how do things like crossinline work then?

prisma wave
#

what are you asking?

#

what they do?

#

or how they work

jovial warren
#

both

prisma wave
#

noinline is obvious

ocean quartz
jovial warren
#

why useless it?

prisma wave
#

crossinline afaik just means you can't return

ocean quartz
#

Because i'm validating the slot even though it'll already return null if it's not valid

jovial warren
#

ah okay

ocean quartz
jovial warren
#
fun getGuiItem(slot: Int) = guiItems[slot]
#

๐Ÿ˜Ž

ocean quartz
#

I'd write everything in Kotlin if it was shaded in Spigot

jovial warren
#

ah okay

#

yeah but it's md_5

#

what do you expect?

prisma wave
#

having it shaded into spigot would probably be a bad idea

#

because they'd be at least 3 versions behind

#

which is why pdm fingerguns

jovial warren
#

lol

ocean quartz
#

Can't really use PDM on a lib fingerguns
I would if i could

prisma wave
#

just use kotlin

#

and get the people who use it to use PDM

jovial warren
#

also it's not a library matt

prisma wave
#

or shade it

#

whatever they want

ocean quartz
#

What do you mean it's not a library?

jovial warren
#

it's a framework...?

hot hull
#

I mean you can just shade it, with most plugins you're below the spigot limit so should be good

#

It's more of a lib than a framework

prisma wave
#

library and framework are not mutually exclusive

ocean quartz
#

It's a GUI lib

jovial warren
#

@prisma wave true

ocean quartz
#

The framework is the commands one

jovial warren
#

never actually used MFGUI

#

I've heard good things about it though

#

also look at all these dependents on the dependency graph

ocean quartz
#

It's getting really good right now, rewriting a bunch of it and adding more features ๐Ÿ‘€

jovial warren
#

damn you GitHub for not supporting gradle

prisma wave
#

?

#

oh right

#

yeah

jovial warren
#

they don't support Gradle dependency thingys

#

like they won't process your dependencies if it's a Gradle project

#

but Gradle is a bit like Linux, people just don't really use it because they think that alternatives are better (which they're often not), and so because not as many people use it, software doesn't always support it

#

(obviously Gradle is much more popular in its market than Linux is in its, but the point kinda still stands)

prisma wave
#

first class in android development tho

jovial warren
#

yeah that's about all that's going for Kotlin and Gradle

#

but that's a massive portion of the JVM's market anyway

#

even with large companies like Google backing them, people still don't care

#

I still know countless people who don't use Kotlin for whatever reason, be it syntax or layout or "Java's superior" or some other BS

#

people are stupid, what can I say

#

I still remember once, my friend said something along these lines: "A person can be smart, but people in general are stupid"

#

ยฏ_(ใƒ„)_/ยฏ

prisma wave
#

circle

#

jerk

hot hull
#

jerk

jovial warren
#

wdym?

hot hull
#

circle

prisma wave
#

jerk

jovial warren
#

there are just some straight known facts throughout the universe:

  • The universe is constantly expanding
  • Bees should not be able to fly
  • Kotlin is objectively better than Java
prisma wave
#

Java bad, Rust bad, C++ bad, ruby bad, python bad, JavaScript bad, Haskell bad, Fortran bad, PHP bad, assembly bad, Odin absolute horseshit, C bad, Go bad, V bad, Dart bad, Swift bad, Objective-C bad, XML bad, Groovy bad, Scala bad, Clojure bad, Lisp bad, COBOL bad, html bad, typescript bad, yaml bad, coffeescript bad, skript bad, C# bad, skript bad

kotlin good

hot hull
#

KM, I hope you can forgive me, but I'm updating a project made in java using maven fingerguns_reversed

jovial warren
#

๐Ÿคฎ

prisma wave
#

gross

jovial warren
#

you still Frcsty btw?

hot hull
#

I mean yea

lavish notch
#

c

#

heck

jovial warren
#

also wait hold on Frosty

hot hull
#

Not finna pay 130$ to someone who is gonna scam me for the IGN Frosty fingerguns_reversed

jovial warren
#

have you finally opened your eyes and realised that Kotlin is objectively superior?

hot hull
#

Indeed I have Bardy

prisma wave
#

cir

#

cle

jovial warren
#

@prisma wave shut up about circle jerking

#

I'm just spitting fax

prisma wave
#

never

#

kotlin good java bad

jovial warren
#

look up "circle jerk" on google

prisma wave
#

Any group or group activity indulging in mutual gratification.
An online community where a group of people form an echo chamber.

#

totally not us

jovial warren
#

"A group of males masturbating ("jerking off") together (with or without interpersonal contact)."

prisma wave
#

that's the original meaning

distant sun
#

::)))

jovial warren
#

okay #3 is a bit more realistic

old wyvern
#

Maybe you are doing that. Who knows. fingerguns_reversed

prisma wave
#

you guys ever heard of kotlin?

distant sun
#

they do that sometimes too @jovial warren

jovial warren
#

you guys ever heard of kotlin?
wait

prisma wave
#

super underrated language imo

#

we don't talk about it enough

heady birch
#

Rust

ocean quartz
#

I mean that's where the meaning came from, people talking about what they like or hate just like jerking each other's off

prisma wave
#

rust bad

#

kotlin good

jovial warren
#

isn't that the name of that objectively superior language that beats out all other competition in the JVM market KM?

prisma wave
#

probably

jovial warren
#

and that's actually truth

prisma wave
#

totally underrated though

jovial warren
#

Kotlin is the second most popular JVM language, behind Java legacy enterprise code

#

and some morons who still think Java's somehow "better"

prisma wave
#

java users should be shot to death

#

change my mind

old wyvern
#

Changed

jovial warren
#

okay that's a bit far

prisma wave
#

kotlin good

ocean quartz
prisma wave
#

java bad

heady birch
prisma wave
#

actually clojure best jvm language

jovial warren
#

@ocean quartz as I said, legacy code, enterprise code and a group of morons who still believe it's "better"

old wyvern
#

Oh fuck no

jovial warren
#

actually clojure best jvm language
wrong

prisma wave
#

no

jovial warren
#

Kotlin is best

prisma wave
#

right

#

clojure good kotlin bad

heady birch
#

@ocean quartz as I said, legacy code, enterprise code and a group of morons who still believe it's "better"
@jovial warren Excuse me

ocean quartz
#

I know yeah was just showing it
Kotlin has been rising super fast

jovial warren
heady birch
#

๐Ÿ™‚

prisma wave
#

you've clearly never used clojure

jovial warren
#

@heady birch HAHAHAHA

prisma wave
#

it's the future of programming

heady birch
#

This face can be interpreted so many ways

ocean quartz
#

Clojure hurts my eyes

heady birch
#

(defn (((())))))))))

prisma wave
#

lisps read better than normal languages

jovial warren
#

yeah I've never actually used Clojure, or Scala, or Groovy, or in fact any other JVM language

#

so I'm, as always, a hypocrite

prisma wave
#

scala and groovy are ok

#

scala has a lot of symbols

#

but it's pretty powerful

ocean quartz
#

Kotlin is like better groovy

prisma wave
#

mixed with scala

topaz bay
#

:O