#dev-general

1 messages ยท Page 192 of 1

prisma wave
#

guava

#

google.com.guava

#

/

onyx loom
#

@hot hull using u as an example for this question, how does one get unlimited config options? like in FJ unlimited formats. idk how else to explain it

steel heart
#

ImmutableMap.builder() or ImmutableMap.copyOf() iirc

prisma wave
#

@onyx loom iteration over configurationsection provbly

hot hull
#

:bruh:

prisma wave
#

wtfi can't type anymore

#

lol

hot hull
#

I'm flattered

onyx loom
#

lmfao

hot hull
#

but yea, you legit just loop over your config section

onyx loom
#

i see

#

ty

hot hull
#

You good KM?

#

I can see yes

steel heart
#

Does Configuration implements Iterable?

prisma wave
#

uh

steel heart
#

ConfogurationSection I mean

prisma wave
#

entryset does

steel heart
#

Yeah

prisma wave
#

wtf

steel heart
prisma wave
#

i didn't even say anything?

#

dyno on drugs

#

WOW

#

it deleted my joke

steel heart
#

Lol

prisma wave
#

@loud gyro if you've got something to say say it

#

coward

onyx loom
#

no u

prisma wave
#

this photo was uploaded to sars

heady birch
#

Package by feature vs layer

prisma wave
#

no packages

#

just 1

heady birch
#

Lol

#

Increases developer productivity ๐Ÿ™‚

#

Lemmo really made two packages

prisma wave
#

no need to worry about "organisation"

heady birch
#

entity and repository

#

and deleted the services ๐Ÿ˜ฆ

prisma wave
#

package by feature better

heady birch
#

The service layer is coming back

prisma wave
#

rip to your services but lemmo is different

heady birch
#

Can you just delete a commit

prisma wave
#

git push --force

heady birch
#

Whats difference between revert commit and undo commit

ocean quartz
#

Anyone else gets irritated with how common wondering trader is? Testing plugins and every few minutes a new one spawns to make noises

steel heart
#

Yes ikr

#

I was in a vanilla world and it spawned surprisingly common

#

Jesus autocorrect

ocean quartz
static zealot
#

its common if you're the only one on the server.

hot hull
#

Matt, /gamerule doMobSpawning false fingerguns

ocean quartz
#

I want mobs though

hot hull
#

/yeet wandering trader

foggy pond
#

So trying to add a PAPI expansion to the e-cloud

#

And it says the dependency URL is too long

#

So what am I supposed to do

prisma wave
foggy pond
#

Lol

prisma wave
#

wait wdym

foggy pond
#

I can't paste in my dependency's url

prisma wave
#

@heady birch fix this

foggy pond
#

My premium resource got released earlier than I thought it would be released and I did not submit the PAPI expansion yet

#

And I can't submit it because of that ugh

onyx loom
#

is this for ur resource?

foggy pond
#

Yes it is

onyx loom
#

just put the expansion inside the plugin fingerguns

foggy pond
#

I'd rather have it be a downloadable expansion

hot hull
#

Why tho

#

Just more places you need to maintain

heady birch
#

Lol

foggy pond
#

This is so stressful, I am flying the United Kingdom in 3 days to start university and I have no time where I am sitting at my computer where I can work on this

heady birch
#

Ecloud 2 had this all done

#

Awesome, what university?

foggy pond
#

University of Sussex

heady birch
#

Cool

foggy pond
#

I don't want to disappoint those who were looking forward to the premium resource but I don't have the time to fix what should be fixed (The PAPI expansion)

heady birch
#

Oh its in brighton

#

Awesome

foggy pond
#

Yeah

hot hull
#

oS tHe BiSh

foggy pond
#

It's already OS

#

Ugh I need to upload the PAPI expansion, but I can't cause that stupid url character limit

heady birch
#

Lol. If ecloud team stuck with thymeleaf it would have been out like 2 months ago

foggy pond
#

What should I do then? I have to go soon as I am meeting up with family, should I use some link shortening service?

heady birch
#

Id say so

#

I doubt anyone will be able to fix that within a couple hours

jovial warren
#

@heady birch difference between reverting a commit and undoing a commit is that when you revert a commit, you basically make a new commit that undoes the changes of the reverted commit, whereas when you undo a commit, you basically force the history to erase any trace that the commit you undid was ever there

foggy pond
#

Welp submitted it i guess

jovial warren
#

will ECloud 2 be released at around the same time as PAPI 3?

heady birch
#

Papi 3 is waiting on ecloud I believe

jovial warren
#

ah okay

#

why tf isn't it in Thymeleaf/Spring any more btw?

#

or is it still in that

#

Spring = good

heady birch
#

it is Spring+Crnk + Vue

jovial warren
#

Crnk?

heady birch
jovial warren
#

what dis

heady birch
#

I am continuing thymeleaf anyways

jovial warren
heady birch
#

I have old pictures of ecloud 2

jovial warren
#

I wish I could see ECloud 2's development, but I'm not one of the trusted souls

jovial warren
#

looks good

heady birch
#

it doesnt exist anymore

jovial warren
#

why not?

heady birch
#

Vue ๐Ÿ˜„

jovial warren
#

what did you originally use?

heady birch
#

Thymeleaf ๐Ÿ˜„

jovial warren
#

wait... you can avoid having to write any shitty JS with a template engine????

heady birch
#

yes

#

but then its not really single page

jovial warren
#

sign me up

#

doesn't matter

heady birch
#

raditional web

jovial warren
#

I'd do anything to not have to use JS lol

#

also who gives a fuck about the whole "single page no loading" bull shit?

#

in fact, I find the single page worse, because then it means I can't move backwards and forwards by pressing the arrows

heady birch
#

That is actually a good point

#

They are the single cause of that stupid back button taking you back to google

#

And not back to the last "page"

jovial warren
#

yeah

#

it's annoying as hell

#

like I don't get the point of not having to load a new page

#

I mean so fucking what if you have to load a new page? if you actually have a decent browser, that won't even take long

#

and like 99% of websites don't do the single page thingy anyway

#

these people who like the single page thingy really baffle me

heady birch
#

also seperation of the frontend + backend

#

more maintanable I suppose

jovial warren
#

I guess

foggy pond
#

Guys can someone help me a second I think my paypal link does not work

jovial warren
#

yeah separating frontend and backend is a good idea

#

but not if it means you have to use ๐Ÿคฎ JS ๐Ÿคฎ

foggy pond
#

The one where they will send money in

jovial warren
#

that's an oof

foggy pond
#

What link should I put?

#

I have no idea god

#

https://paypal.me/<name>?

#

That allows for anyone to put whatever amount they want though

#

What should I put instead?

jovial warren
#

does Spigot not allow you to set up payment methods?

foggy pond
#

It asks for the paypal account

jovial warren
#

like what I mean is Spigot should just take you to a page to pay to your e-mail

#

sign in with your PayPal account then

foggy pond
jovial warren
#

that's an oof

foggy pond
#

Yes okay but what should I do

jovial warren
#

also, buy buttons ๐Ÿคฎ

#

no buy buttons ๐Ÿ˜Ž

foggy pond
#

I have to go soon and I really need to fix it otherwise if anyone is interested it's a yikes

jovial warren
#

I'd contact Spigot about it, since I doubt anyone here knows anything

#

if you want a fast response, DM one of the mods via Discord

foggy pond
#

I mean anyone else who has uploaded a premium resource would know

#

It's my paypal email address

#

That's what it is ugh

jovial warren
#

there's quite a few people here who'll know that then, definitely not me though

prisma wave
#

@jovial warren how on earth is that verbose

jovial warren
#

how on earth isn't it?

#

@JsonApiId

#

@JsonApiResource

#

@JsonApiRelation

#

idk what's wrong with @Resource, @Id and @Relation but eh

prisma wave
#

Ambiguous with other frameworks

distant sun
#

^

prisma wave
#

You'd import the wrong thing all the time

#

It's also more clear as to what's actually happening

#

Kotlin could've used @Default, @Overloads, etc but they prefixed with Jvm for clarity

#

At the same time, clojure could've added annotations but they chose not to because they make no sense

distant sun
#

Because nobody uses clojure

#

(:

prisma wave
#

Actually at least 3 people do

distant sun
#

3 weirdos

#

Ngl annotations are hot

prisma wave
#

I'm not a weirdo :'(

#

annotations are a bit of a double edged sword

#

they can save a lot of time but if you base everything off annotations it becomes messy and difficult to learn

ocean quartz
prisma wave
#

pff

#

we're gonna release elara 1.0 on that day

#

so then everyone uses elara instead

ocean quartz
#

Noice

prisma wave
#

@old wyvern make it happen pls

onyx loom
#

why dont u

prisma wave
#

incredibly busy

#

i am a full time circlejerker now

onyx loom
#

๐Ÿ˜‚

prisma wave
#

it pays quite well but not much free time you know?

distant sun
#

Host the event on BM's living room

prisma wave
#

please do

#

i'll bare knuckle box anyone who thinks kotlin is better than clojure

empty flint
#

I might be brainfarting here, but is there a way to have interfaces with non-static variables?

prisma wave
#

java?

empty flint
#

Kotlin

distant sun
#

bbq?

prisma wave
#

they're not static in kotlin?

empty flint
#

wait they aren't?

prisma wave
#

no

empty flint
#

oh right Kotlin doesn't have static

#

yep. brainfart.

prisma wave
#
interface Ageable {
  val age: Int //very much not static
}```
#

btw have you heard about clojure

#

it doesn't have static either

distant sun
#

Pls dont

prisma wave
#

๐Ÿ™„

distant sun
#

Doesnt kt have that companion thing?

prisma wave
#

yeah

#

it's basically static but not really

distant sun
#

Can you have static methods as well?

empty flint
#

technically isn't static at all because there is no static in Kotlin

#

but companion objects behave similar

#

to the point where for 99% of cases you can call it 'java static equivalent'

prisma wave
#

they function identically to static but they aren't static

empty flint
#

they function identically to static but they aren't static
@prisma wave well almost

prisma wave
#
class A {
  companion object {
    fun blah() {
      println("A")
    }
  }
}

A.blah()
``` compiles down to roughly ```java
public final class A {
  public static final class Companion {
    public final void blah() {
      System.out.println("A");
    }
  }
}```
and then any calls just compile to `A.Companion.blah()`
#

ez

#

give xp

#

wait

empty flint
#

haha I typed the same kind of example and then thought "nobody gives a fuck" and just stopped and deleted it

#

Didn't think of the xp

prisma wave
#

haha

#

i was thinking the same

#

but xp is xp

empty flint
#

Barry cares

prisma wave
#

do companion functions convert to static methods?

empty flint
#

@compact perch you are a bro

#

On so Kotlin interfaces don't allow initialisers

prisma wave
#

neither do java's

empty flint
#

hm should I make the interface an abstract class then?

#

I'm so confused, ever since switching to Kotlin I seem to have forgotten all about Software Architecture ๐Ÿ˜ฆ

#
interface Toggleable
{
  var state: Boolean

  fun toggle() { state = !state }
  fun turnOn() { state = true }
  fun turnOff() { state = false }
}
#

This should, conceptually, be an interface. It describes behavior and shouldn't be a class.

tranquil crane
#

That should probably be an abstract class

prisma wave
#

^

empty flint
#

How so?

tranquil crane
#

Interfaces usually don't implement their own behavior

prisma wave
#

^^ an interface arguably shouldn't have any functionality

empty flint
#

That's true

tranquil crane
#

Just because it can doesn't mean it should

empty flint
#

except functional interfaces I guess

prisma wave
#

the interface itself doesn't carry any functionality

empty flint
#

hold on, does kotlin also have the restriction of having only one parent class?

prisma wave
#

yes

#

if you need multiple you should refactor

empty flint
#

c++ master race

prisma wave
#

๐Ÿ™„

empty flint
#

haha

tranquil crane
#

I give it a c+ at best

prisma wave
#

c--

empty flint
#

No ur right, I hate c++, never understood the 1-parent-class restriction necessity though

heady birch
#

Rust is better

prisma wave
#

leads to messy code

#

I think it was a good decision

#

it also raises a lot of questions about implementation

#

how would you call 2 superclass constructors?

#

so static but not really

empty flint
#

how would you call 2 superclass constructors?
@prisma wave Well the same way you would with just one constructor, I don't see the problem.

#

The only thing that would be messy off the top of my head would be if both parent classes defined a method with the same name

prisma wave
#

2 lines of super(blah)?

#

how would you define which is which?

empty flint
#

how would you define which is which?
@prisma wave new syntax, duh?
A.super()
B.super()

#

ez

prisma wave
#

If you need 2 superclasses, you're almost always violating the single responsibility principle

empty flint
#

If you need 2 superclasses, you're almost always violating the single responsibility principle
@prisma wave Well no but yes but also no not really

prisma wave
#

name me a situation where you would actually need 2 superclasses

empty flint
#

I think you are generalizing a bit

#

Well take for instance my case

#

from before

#

I made it an abstract class Toggleable

#

which gives any subclass the toggle functionality without having to declare it a gazillion times

heady birch
#

Toggleable sounds more like an interface

empty flint
#

now think about another such general behavior a class might need to have where each subclass would need the same behavior implemented

#

Toggleable sounds more like an interface
@heady birch Bruh...

#

So it's not just about responsibility

#

it's also about functionality

#

without boilerplate or repeated code

heady birch
#

ToggleButton extends Button implements Toggleable ๐Ÿ™‚

prisma wave
#

Personally I would have the interface define a toggled property, and a toggle function (probably without implementation) and that's it

empty flint
#

ToggleButton extends Button implements Toggleable ๐Ÿ™‚
@heady birch I know, this isn't the point anymore. The ToggleButton needs its own Toggleable state and shit, I need one single implementation

#

Personally I would have the interface define a toggled property, and a toggle function (probably without implementation) and that's it
@prisma wave Yeah and that would make sense if every subclass would need its own implementation

#

But do you get my point?

tranquil crane
#

to answer your question of needing to call super methods/constructors while extending two classes you could just do ClassName.super.method()

empty flint
#

Sometimes, in order to give a class a single responsibility, it needs tools that more than one super class should provide

heady birch
#

Why object oriented is bad

#

Rust does it better

tranquil crane
#

coding bad

prisma wave
#

skript doesn't have these problems

heady birch
#

impl Togglable for TheType {
}

empty flint
#

So I do think there are good usecases for multiple superclasses, but it certainly has the potential to be abused and we all know no other language feature is ever abused and made into bad code

heady birch
#

After 10 minutes ecloud 2 is up and running

prisma wave
#

good

empty flint
#

Anyway back to beefing up my wakatime statistics

half harness
#

Coding or playing minecraft?

prisma wave
#

clojure

heady birch
prisma wave
#

thje jesus vindication machine strikes again

#

wait no wrong word

#

vilification

heady birch
#

Someone forgot a !

tranquil crane
#

my life

heady birch
#

What happened to all the thymeleaf links

#

Its added /static/

prisma wave
#

thymeleaf.remove!(&"/static")

#

pass by value

heady birch
#

Lol looks like rust syntax

prisma wave
#

lol

#

imagine

empty flint
#

it says "leaking this... bla bla"

#

isn't the init block here for exactly that kind of call?

prisma wave
#

because the class hasn't been initialised yet

#

so registerEvents might try and access some property, and the compiler won't be able to tell that it's nullable

#

so runtime error

empty flint
#

hm

#

How do I tell it to do that after initialisation?

ocean quartz
#

When you don't know what it is, blame it on spigot

prisma wave
#

simply speaking you can't

empty flint
#

simply speaking you can't
@prisma wave Motherf****

prisma wave
#

the constructor is always called pre-field initialisation

#

the convention is probably some sort of initialize() function

empty flint
#

the constructor is always called pre-field initialisation
@prisma wave So why is this never a problem in java?

prisma wave
#

it is

empty flint
#

It just doesn't tell me it is?

prisma wave
#

It can lead to the same issues, but Java doesn't have compile time nullability so it's just assumed you know what you're doing

empty flint
#

cool

prisma wave
#

the warning isn't because it's a kotlin exclusive problem, but because you can't use kotlin's problem solving for it

empty flint
#

yeah I got it

#

why isn't there a way to just tell it to do that first thing after initialization though, if they are aware of it happening and can detect it..

#

seems like such an easy thing to fix

prisma wave
#

JVM limitation probably

empty flint
#

oh wait so if I put the init block after all other initializers (property, constructor, etc) then it effectively is done after all else has been inited

prisma wave
#

effectively

#

yes

empty flint
#

effectively is good enough

prisma wave
#

well not exactly

#

wait no

#

the problem is with abstract classes in particular

#

iirc the initialisation order is undefined

#

the kotlin compiler has no way of telling that it's nullable, so will accept it and runtime error instead

empty flint
#

yeah that makes perfect sense, it's a problem with subclasses I get that

#

I guess that would be true for my abstract event listener too then

prisma wave
#

Potentially

#

it could happen with any abstract class

empty flint
#

The only thing I can imagine being a problem would be if there's reflection to determine the @EventListener method

#

or some other way

prisma wave
#

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

#

it's kind of a bad practice anyway

empty flint
#

It would be so clean though if it worked like that

#

damn

#

it's kind of a bad practice anyway
@prisma wave Why is it bad practice?

prisma wave
#

Because it can lead to the problems I just described lol

#

and they're pretty much unavoidable

jovial warren
#

it is kinda weird how the init blocks are called after the field initialisation is done

#

actually no, everything is initialised in the order that exists, except for functions, which don't need to be initialised

prisma wave
#

yeah it's in order

jovial warren
#

does Java do the same?

prisma wave
#

I believe so

jovial warren
#

yeah but the way Java's conventions designed means you don't run in to that

steel heart
#

How bad is lombok actually? 1-10

prisma wave
#

if it wasn't a compiler hack it would be good

jovial warren
#

I rate it a 7/10 (features)

steel heart
#

I hate to write thousands of setters and getters

prisma wave
#

3

steel heart
#

this god damn ModelRendering class

jovial warren
#

11/10 on features, -1/10 on it being hackery

steel heart
#

so like whats the catch about it being a compiler hack?

jovial warren
#

it basically uses ASM to literally change the bytecode

onyx loom
#

Alt + Insert

#

easy getters

jovial warren
#

using Kotlin

#

ez no getters

prisma wave
#

no getters and setters in clojure

onyx loom
#

true ๐ŸŒš

steel heart
#

Well, fk I'm gonna use it for now, will save me some time. Well, I can add //Fix Me and hope someone is pring

prisma wave
onyx loom
#

:))

prisma wave
#

low quality but accurate

steel heart
#

also alex

#

would an uninitialized floating point be 1.0F

prisma wave
#

0

steel heart
#

oh

prisma wave
#

every primitive has a default value of 0

steel heart
#

im like rly dumb

#

isnt there languages though that has other default values

prisma wave
#

no idea

#

maybe

jovial warren
#

any uninitialised variable/field is null by default right?

#

except for primitives

prisma wave
#

yes

jovial warren
#

(in Java)

steel heart
#

Null.MAX_VALUE

jovial warren
#

lol

prisma wave
#

Void.MAX_VALUE

#

void.class

jovial warren
#

YaNan.MAX_VALUE

steel heart
#

void class is useless ?

jovial warren
#

no

steel heart
#

init?

prisma wave
#

nope

#

generics

jovial warren
#

^

steel heart
#

then Void.class ?

prisma wave
#

pdm uses a CompletableFuture<Void>

jovial warren
#

Future<Void> yeah

steel heart
#

Yeah so a wrapper of that class exist?

prisma wave
#

yes

jovial warren
#

I mean, in Kotlin, we don't have void

steel heart
#

then why use void.class

jovial warren
#

we have Unit

steel heart
#

yeah thats why kotlin is superior

jovial warren
#

if you think Kotlin is superior then why tf does your name still have Java-style generics? lol

steel heart
#

cuz forge?

prisma wave
#

void.class is for consistency i imagine

jovial warren
#

wait void.class is a thing?

steel heart
#

yep

prisma wave
#

yes

jovial warren
#

wtf

steel heart
#

But from my pov it doesn't fill any functionality else than its cool to have ig

jovial warren
#

also, BM, you got a job to do

steel heart
#

code me a car

jovial warren
#

the Spigot Discord seem to like attacking anyone who mentions the word "Kotlin" with pitch forks in hand

prisma wave
#

good

#

tell them to learn clojure / elara

jovial warren
#

these idiots think Java better

steel heart
#

Ikr

jovial warren
#

and I'm like

steel heart
#

btw is kotlin like faster than java when running in jvm?

prisma wave
#

@steel heart void.class is as useful as int.class, but they probably introduced it for consistency

#

neglible

steel heart
#

ye

prisma wave
#

in very small cases it might be slightly slower

#

but most of the time it makes no practical difference

steel heart
#

well, thats the only reason to use java

#

but not a big win on that

prisma wave
#

i mean

#

actually I think certain things are actually significantly slower on low end devices (eg some android phones)

#

it's probably been improved a bit

onyx loom
#

what the frick is this new name

#

elara chad LMAO

prisma wave
#

kotlin virgin

onyx loom
#

๐Ÿ‘€

#

why u gotta expose me

#

delete pls

jovial warren
#

kotlin virgin

#

lol

tranquil crane
#

big brain

onyx loom
jovial warren
#

someone tell me what that reference is

steel heart
#

kaliber daily stroke

jovial warren
#

seems legit

prisma wave
#

kotlin user on the left

#

elara user on the right

jovial warren
#

Elara idiot more like

steel heart
#

elera be kinda scary though

jovial warren
steel heart
#

already like -1 ppl using it

jovial warren
#

OOP > functional programming

prisma wave
#

literally no

jovial warren
#

actually, Kotlin has a good mix of both

frail glade
#

๐Ÿ‘‹

prisma wave
#

yo

jovial warren
#

hello Glare

onyx loom
#

hello good sir

prisma wave
#

would you like to hear the word of Elara?

jovial warren
#

good evening

steel heart
#

The Waffle King of King Waffle

jovial warren
prisma wave
#

interesting

#

elara would beat them both ofc

#

but still interesting

onyx loom
#

intriguing

frail glade
#

So you're saying it has hidden overhead?

prisma wave
#

somewhat

#

yes

jovial warren
#

Elara will likely be very, very slow at first (in comparison)

prisma wave
#

HA

#

we will see about that

frail glade
#

That's it, changing everything back to Java.

prisma wave
#

I mean

steel heart
#

I mean consider it has very good features for me Idm

prisma wave
#

often kotlin seems to win in the benchmarks

#

In most general things there's probably a neglible difference

frail glade
#

Honestly I made the decision too soon to move my biggest project from Java to Kotlin cause half a year later it's still sitting at half and half, which, isn't the end of the world.

jovial warren
onyx loom
#

be hopeful! these testings were done on kotlin 1.1.3 !!!

#

im sure performance has improved since !!!

jovial warren
#

I know performance has improved since then

prisma wave
#

unless you're targetting a 1gb single core android phone from 2011 it probably won't make a noticable difference

frail glade
#

I feel like you have to do something pretty wrong to have performance issues from a plugin standpoint in Minecraft, no?

prisma wave
#

now let's all be thankful that we're not android developers

#

that would suck

frail glade
#

Cause like

prisma wave
#

Most plugins aren't particularly optimised but yeah unless you're comparing 3000 inventory titles every tick it's probably fine

frail glade
#

I mean I know some plugins have performance problems but I used YourKit on my projects and noticed they barely had any performance impact on a server

prisma wave
#

yeah

#

If you're remotely clever you shouldn't have any significant performance issues

frail glade
#

And I don't think I'm the best developer out there, I do things wrong all the time, but I still don't have my plugins showing up on timings.

jovial warren
#

so do we all mate (do things wrong)

#

doesn't make you a bad developer

prisma wave
#

speak for yourself

onyx loom
jovial warren
#

shut it you

#

you know I'm right

prisma wave
#

All of my projects are totally bug free

onyx loom
#

flashbacks to pdm

prisma wave
#

and perfectly optimised

#

pdm is bug free

frail glade
#

A lot of my job is just taking old plugins on a server and rewriting them to remove bloat and stuff and I swear some of the code I sit and look at from the plugins are just insanely wack.

prisma wave
#

No bugs that I know of

onyx loom
#

ah yes, my bad, theyre all features

jovial warren
#

there is no such thing as "bug free"

prisma wave
#

(if you close the issue without doing anything it counts as fixing the bug)

#

There is

#

It's called pdm

jovial warren
frail glade
#

Can't have bugs if you don't implement any features your users ask for.

onyx loom
prisma wave
#

preciselyfingerguns

frail glade
#

So far I haven't had anyone complaining hey

jovial warren
#

Can't have bugs if you don't implement any features your users ask for.
true

frail glade
#

Ywt

#

I can't type

#

I did have one show up in VP the other day because I didn't relocate it. Just waiting for the day it happens in Guilds and then I'm SOL until bm finishes relocations.

jovial warren
#

have you learnt Kotlin btw?

#

like enough that you can actually do the writing on your own

prisma wave
#

"finishes relocations"
starts*

onyx loom
#

orrrrr just pr pdm

#

bm why dont u just start saying shutup or pr when people ask for relocations fingerguns

#

its OS kek

prisma wave
#

tempting

#

But I'd rather waste everyone's time by saying I'm going to do it when in fact I've got multiple commissions and no motivation to work on a mess of a side project

onyx loom
#

lmfao

frail glade
#

I mean yeah I know Kotlin, I just don't use it much. I do have a project that basically creates mcmmo throughout custom items on a server. Have about 98 items on that server right now. That plugin is currently written in Kotlin but I mainly do Java.

#

I just learned Kotlin so I could understand it and write it if needed.

steel heart
#

I mean if it doesn't have speed currently. It will probably gain in the future

frail glade
#

Hmm?

onyx loom
#

i assume thats in response to the performance graphs earlier

#

bit late kekw

frail glade
#

Oh one thing I was proud of is that all the items do have a custom durability system on it and I did some timings on it and even with the constant changes it does, the plugin is only taking average of 0.01% of a tick.

prisma wave
#

Pretty speedy

onyx loom
steel heart
#

didnt know you could have init blocks within a constructor thonking

jovial warren
#

yes @onyx loom

#

didnt know you could have init blocks within a constructor thonking
wat

onyx loom
#

frickin spigot ๐Ÿ™„

steel heart
#

or within any method

onyx loom
#

tryna see the ezblocks config so i can see what needs to be done lol

#

how convenient, there isnt an ezblocks section on the helpchat wiki ๐Ÿ˜”

jovial warren
#

lol

#

just look at the original code

onyx loom
#

true

#

was gonna pull up my server files next lol

jovial warren
#

lol

frail glade
#

After doing some profiling on plugins it's amazing how much space is actually used is memory by objects. What I thought was going to be a lot was little to almost none.

prisma wave
#

Yeah I think there's some room for optimising too

#

Since the JVM pads objects

#

Although there's probably a pretty complicated reason for that

frail glade
#

But at what point do you start to call it microptimizations?

prisma wave
#

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

#

There's a fine line

frail glade
#

Like, unless a plugin is just straight up hogging the main thread with problems, then it might not be too bad.

prisma wave
#

Yeah memory usage is the least of your worries

frail glade
#

So then do you just rely on timings / spark to tell you where problems might be?

prisma wave
#

Outside of MC I'd probably just run a profiler if there were any actual problems, or timings

#

Never used spark

#

But I've also rarely had to deal with performance problems

frail glade
#

That's fair.

#

A lot of what I do is I get contacted by server owners that have problems and I just try and fix them

#

Spark is great because it only shows main thread performance.

#

So you can see where plugins are running on that thread and figure out what can be moved off of it.

prisma wave
#

Spark does sound pretty handy

#

Lucko is a clever guy

onyx loom
#

just as a general rule, what should be and shouldnt be async?

frail glade
#

I wish there was a solid list somewhere.

#

I know commands need to be sync.

prisma wave
#

I think the general rule of thumb is if it modifies the world (including entities) it should definitely be synchronous

#

It's weird that commands are sync when chat is async

frail glade
#

Well don't forget that chat can also be sync.

mental trench
#

Anyone having issues with PlayerDropItemEvent and minecraft:give command?

reef maple
#

Hi, is there a way to ignore Armour on EntityDamageByEntityEvent ?

distant sun
#

Anyone having issues with PlayerDropItemEvent and minecraft:give command?
@mental trench what kind of issues?

#

If the event isnt fired that's probably because the item is being spawned on the world and not dropped by the player

mental trench
#

i mean, when you cancel PlayerDropItemEvent and use give command

#

you receive the double

#

oh we can't send images here

distant sun
#

Are you sure the event is your problem?

mental trench
#

yes, removed the part where i cancel the event

#

and works fine

#

add it back and problem again

#

couldnt find a way to fix it

ocean quartz
#

Pretty sure is keys

distant sun
hot hull
#

That'll throw an exception if the table doesn't exist right?

prisma wave
frail glade
#

I doubt they'd rewrite it in Java.

prisma wave
#

Probably not

#

But imagine being a senior language designer for Java and getting assigned to a kotlin app

#

And then you realise...

#

What does oracle even do apart from Java and VirtualBox?

frail glade
#

Idk

obtuse gale
#

._.

heady birch
#

Kotlin review anyone?

hot hull
#

Lmao @prisma wave

heady birch
#

Who wants to do a kotlin review for me?

#

@quiet depot Are you meant to put a @NonNull whereever something is not null?

#

Or should you just put a @Nullable if it is nullable?

#

As in for getters?

prisma wave
#

@heady birch @NotNull for when it shouldn't / will not be null, @Nullable for when it could / can be

quiet depot
#

@heady birch null should never be returned in the ecloud

heady birch
#

What I mean is

#

@NonNull for return types or not?

#

Because if theres no @Nullable then Id assume its non null

quiet depot
#

yes

#

no

#

if there's no annotation, you should assume nullable

heady birch
#

Oh ok

#

Also

#

How do you expect to post a rating?

quiet depot
#

don't have ratings lol

heady birch
#

What kind of response do you want

quiet depot
#

lol just realised that platform arg is broken

heady birch
#

Lol

frigid badge
#

the query is a bit different on the new ecloud but you can do all that

quiet depot
#

@heady birch but yeah niall just copy that shit

#

no need for ratings

#

you can grab the object off gh if you want

heady birch
#

๐Ÿ˜

#

I thought ratings were a thing

quiet depot
#

no

#

they're part of the api, but they've never been implemented, and never will be

#

so remove them

#

also now that I think of it

#

I rekon only bother implementing the v3 api

#

cuz v2 is probs gon be switched off anyway after a while

heady birch
#

probably cant do it with crnk anyway

frigid badge
#

can't do what

heady birch
#

two different api layouts

#

well

frigid badge
#

why not?

heady birch
#

it would be our own implementation i mean

frigid badge
#

you can do anything you want even if you have crnk

quiet depot
#

oh it's ?platforms

#

rip

heady birch
#

thymeeaf

#

@frigid badge i may have reverted your last commit yesterday

#

you may revert the revert

frigid badge
#

smh

#

dumbo

heady birch
#

but could do with bringing back the service layer

frigid badge
#

did you read what i said about that

heady birch
#

i absolutley detest that package layout

frigid badge
#

the service layer is only necessary for the non-crnk stuff

heady birch
#

certain things will need a service layer

frigid badge
#

and I first wanna get all the crnk stuff done

#

like I said like 2 days ago or smth

heady birch
#

POST /user/
{
username: "niall",
password: "myrawpassword:)"
}

#

Uh so

#

I have changes in some other branch how do I keep them when I checkout the feature one?

frigid badge
#

stashing

#

what branch

heady birch
#

uh

#

thymeleaf-continuation ๐Ÿ˜„

frigid badge
#

you can just commit to that/

#

it's a diff branch

heady birch
#

ok

frigid badge
#

but why you wasting time with that

#

lol

heady birch
#

I may have got bored

#

I will do some work on crnk branch

frigid badge
#

๐Ÿ˜›

prisma wave
#

Hash the passwords on the client side

#

More secure

heady birch
#

lol

#

with crnk yes we have to do that

prisma wave
#

o

heady birch
#

joking

#

id hope wed make our own endpoint ๐Ÿ™‚

prisma wave
#

Do it

#

ecloud.com/hash
Sorry, this password is used by clip, please choose another to hash

#

Error 401

heady birch
#

LOL

frigid badge
#

lmao

heady birch
#

@frigid badge So what custom endpoints would we have?

#

/v1/version/publishVersion
/v1/user/registerUser

frigid badge
#

can you do authentication first plzz

heady birch
#

how

quiet depot
#

don't do /v1/

#

that's reserved

heady birch
#

ok

quiet depot
#

/v* is reserved

frigid badge
quiet depot
#

/v* is used by the plugin

heady birch
#

Authentication

quiet depot
heady birch
#

I only know form based login

quiet depot
#

hold up

#

@frigid badge is the plugin api provided by the frontend or backend of the ecloud?

#

I was assuming the backend, but if it's the frontend, nvm ig

frigid badge
#

there's no plugin api

#

you access the same api

quiet depot
#

o

frigid badge
#

why would you make 2 different apis

#

the frontend does basically the same as the plugin

heady birch
#

We are basically giving all the work of the backend to the users web browser

#

@frigid badge shall I revert the revert?

frigid badge
#

if you can that would be helpful

heady birch
#

Nah

frigid badge
#

if not i'll do it once i work on it again

heady birch
#

lol

prisma wave
#

announcements

reef maple
#
    @EventHandler
    public void thunderOnHitBlock(ProjectileHitEvent e) {
        Projectile projectile = e.getEntity();

        if (projectile.hasMetadata("aoe") && projectile.hasMetadata("aoeRadius")) {
            projectile.removeMetadata("aoe", plugin);
            int radius = projectile.getMetadata("aoeRadius").get(0).asInt();
            for (Entity collateral : projectile.getNearbyEntities(radius, radius, radius)) {
                if (collateral instanceof LivingEntity) {
                    EntityDamageByEntityEvent aoeDamageEvent = new EntityDamageByEntityEvent(projectile, collateral, EntityDamageEvent.DamageCause.PROJECTILE, 10);
                    Bukkit.getServer().getPluginManager().callEvent(aoeDamageEvent);
                }
            }
        }

        if (e.getHitBlock() != null && projectile.hasMetadata("thunder")) {
            e.getHitBlock().getWorld().strikeLightningEffect(e.getHitBlock().getLocation());
        }
    }

That's weird. The aoeDamageEvent is triggered well, but the entities doesn't seems to take damages from it '-'

#

(I've check the getDamage on the EntityDamageByEntityEvent, it shows me good values and it is not cancelled at the end)

distant sun
#

dont you also have to damage them?

reef maple
#

EntityDamageByEntityEvent aoeDamageEvent = new EntityDamageByEntityEvent(projectile, collateral, EntityDamageEvent.DamageCause.PROJECTILE, 10);

The 10 is the damages. Plus, the projectile have some datas that changes the damages at the end and it works well in the getDamage(), but the damages doesn't occurs

#

And if I directly shot something with the projectile, the damages are applyed well.

distant sun
#

I assume that's because you actually hit the entity

reef maple
#

Yes, and I use the projectile same which hit the entity to make the AOE damages

distant sun
#

The 10 is the damages. Plus, the projectile have some datas that changes the damages at the end and it works well in the getDamage(), but the damages doesn't occurs
@reef maple the value is correct because you call the event manually

reef maple
#

Yep, but the 10 doesn't apply

distant sun
#

probably because the event have to be called by the server, when the entity is hit?

reef maple
#

or when the block is hit. and the event is called

#
Bukkit.getServer().getPluginManager().callEvent(aoeDamageEvent);
distant sun
#

I doubt that calling the event manually will make the entity take damage, as you can see.

reef maple
#

Hm. So it's my way of calling the event that is problematic

hot hull
#

Why don't you just handle the damage yourself, or am I missing anything here

reef maple
#

Because I don't want only the damages. My projectile has accuracy, magic damages, physical damages and some other datas

#

I want be able to make a AOE heal (the AOE heal seems to work btw)

hot hull
#

I want be able to make a AOE heal (the AOE heal seems to work btw)
so where's the issue then?

reef maple
#

If I shoot an entity, the damages are applied (the entity is hurt, becomes red, as usual)

If the entity is taken in the area, she is healed, but the damages (even after some modifiers) doesn't occurs, so the entity just doesn't take any damage

#

Ooh, you can put an entity into entity.damage(damages, projectile) ^^ Didn't know

distant sun
#

Can you code a mod that take data from the server, ex the player balance and display it on discord (rich presence)?

potent vale
#

Thats possible

hot hull
#

Gaby, yus

potent vale
#

You can even interact with your players through discord

distant sun
#

Even if the server is running spigot and not sponge or smth?

frigid badge
#

An event doesn't do anything by its own...

#

Calling an event doesn't do anything besides literally sending it to all listeners

#

Doing what's supposed to happen if the event continues is up to you

distant sun
#

you could get the final damage and apply it to the entity if the event wasnt cancelled

frigid badge
#

exactly

heady birch
#

@frigid badge Hi

#

Reckon you could lend me your experties

prisma wave
#

Experties

heady birch
#

Im building decoding library

#

Has many different message types

prisma wave
#

decode(&message)

heady birch
#

but

#

loads of fields are decoded by different message types

#

so it seems silly to have enum for every different type

#

just one big struct

potent vale
#

yes @distant sun , just use a plugin

distant sun
#

PluginMessaging?

potent vale
#

make your own ^^

distant sun
#

No, I mean, do I use PluginMessaging to send the data between server and client (mod) or?

potent vale
#

i never used that plugin

#

For myself i code the plugin in java, and connect to discord using Sockets

#

But i can check if PluginMessaging will work

#

i really have no idea what it is, but i use Sockets

distant sun
#

saw some threads on forge forums and they were using that

#

dunno how sockets work though

potent vale
#

If you want to show it on discord, you need to connect to it

#

Sockets can help or the discordbot plugin for java

#

library*

#

@distant sun i can help with the beginning if you want

distant sun
#

I wanted to show the data to each player rich presence if they use our mod

#

like Playing on x.y.z | Username: %username% | Balance: $%balance%

potent vale
#

Ah my fault, i thought you wanted a plugin

steel heart
#

yeah thats a nice feature

#

forge?

distant sun
#

forge or fabric ig

steel heart
#

Wait so like what do you actually want to do?

hot hull
#

He wants to add rich presence to his shit

steel heart
#

But like so it displays info from the server

#

kind of?

potent vale
#

Can you code a mod that take data from the server, ex the player balance and display it on discord (rich presence)?
@distant sun

distant sun
#

yes conclure

#

you know how for other games you can see the round and such

#

I was wondering if the same can be done for minecraft using a mod

potent vale
#

You can use a plugin for that

#

Or do you prefer a mod?

hot hull
#

It's forge..

old wyvern
hot hull
#

ew docs

regal gale
#

I just reviewed the code for first time before I'm gonna maintain something on Statistic-Expansion and.. nice hardcoded

distant sun
#

because isItem doesn't exist on legacy versions

steel heart
#

Gaby I think there exist some public discord forge mods which could help you Ig.

regal gale
#

I mean, it's 1.16.2 code?

distant sun
#

if (isLegacy)

hot hull
#

thien..

potent vale
#

@distant sun if ya dont mind using a plugin (instead of a mod) for it i can help

distant sun
#

@old wyvern my concern is more about how to collect the data from the server xd

steel heart
#

how long does helpchat bin last?

distant sun
#

1mo or for ever I guess

old wyvern
#

Like to see if the player is on a specific server?

regal gale
#

What I was saying is about the class CraftMagicNumbers already provides methods to check if item is legacy the same as that ^

distant sun
#

So if they are on the lobby it won't show much info, maybe just the server name. If they are on survival it would show the balance, on skyblock the balance and team size etc

potent vale
#

the balance is stored somewhere

distant sun
#

all these stuff are on the server, I just need to know how to access the data

potent vale
#

i know about the position

#

but the balance, do you use a plugin for that?

distant sun
#

yes

hot hull
#

Vault probably

potent vale
#

Is it vault?

#

I can give an example for the position of the player to discord

distant sun
#

?

potent vale
#

you wanted to show the player position in discord?

distant sun
#

no, their balance but on rich presence

potent vale
#

only their balance ok, which plugin do you use for the balance?

regal gale
distant sun
#

I dont think we are on the same line thien

#

That method is used to check if a material is an item, mainly for legacy versions where Material#isItem doesn't exist

old wyvern
#

So if they are on the lobby it won't show much info, maybe just the server name. If they are on survival it would show the balance, on skyblock the balance and team size etc
@distant sun
https://github.com/Attano/Spigot-1.8/blob/master/net/minecraft/server/v1_8_R3/PacketPlayOutCustomPayload.java
https://github.com/Attano/Spigot-1.8/blob/master/net/minecraft/server/v1_8_R3/PacketPlayInCustomPayload.java

regal gale
#

Oh, got ya

hot hull
#

@errant anchor
an*

old wyvern
#

Maybe like send a custom payload to server when player joins with your client, and the server sends a packet with the required info about the server or keeps them updated

distant sun
#

mhm, I see

#

might leave this for later

errant anchor
#

@hot hull Oh shit thank you x)

reef maple
#
entity.damage(aoeEvent.getDamage(), projectile);

It works perfectly and damage / kill the mobs, but they don't drop EXP because they are killed by magic. Can I specify an entity for it (LivingEntity / projectile)

to enable the exp drop ?

distant sun
#

EntityDeathEvent?

reef maple
#

EntityDeathEvent think that entity.damage(value, entity2); is a Magic (custom) damage

#

even if you specify the entity2 is the projectile you used before

#

`

[17:13:42] [Server thread/INFO]: OLD DAMAGE CAUSE PROJECTILE //ON HIT BEFORE THE KILL
[17:13:42] [Server thread/INFO]: instance of Player ? false //AFTER THE KILL
[17:13:42] [Server thread/INFO]: killer entity null
[17:13:42] [Server thread/INFO]: Cause CUSTOM
[17:13:42] [Server thread/INFO]: NEW DAMAGE CAUSE CUSTOM
`

empty flint
#

Is there a way to specify generics as varargs?

#

like List<String, Int, Boolean> or something

heady birch
#

No

#

List<Object>

hot hull
#

Object?

heady birch
#

List<dynamic> in dart

hot hull
#

bruh, ain't nobody ask about dart

empty flint
#

Well no not Object, I need to specify multiple specific classes for an interface

#

and idk what the best way to do that would be

heady birch
#

what

hot hull
#

Just use your Interface then?

empty flint
#

Maybe I'm overthinking it again

hot hull
#

or am I misunderstanding

empty flint
#

Let me explain

#

The idea is to create an interface for uniquely identifying instances of classes

#

But I do not want them to be unique per class

#

I want them to be unique per any number of dynamically defined classes

hot hull
#

:what:

empty flint
#

so class A and class B implement the interface and I want both to have elements that are uniquely identifiable (via some arbitrary property) amongst class A and class B instances

#

so say the unique property is a name

#

A("Bob"), B("Charlie)

#

A("Charlie") should fail just the same as another A("Bob") would because Bob and Charlie uniquely identify two existing instances already

#

And I'd like the Interface to be dynamic :S

#

So it would be easy to just do that for classes A and B

#

but I need this to be unique for any collection of classes I want

dusky drum
prisma wave
#

Graph

steel heart
#

@ocean quartz are you super good in java regex?

empty flint
steel heart
#

you can

ocean quartz
#

I'm alright

steel heart
#

How would I find something in paranthesis but only replace the content inside?

#

Or is that possible?

distant sun
#

\((?<content>\w+)\)?

steel heart
#

consider the content to be an array of chars commas decimal numbers and numbers

distant sun
#

[a-zA-Z0-9,.]+ maybe

steel heart
#

@empty flint I assume working with bytes might be slightly more efficient performance wise but I have really no clue tbf

#

\w matches a-zA-Z0-9 right?

distant sun
#

and _ iirc

frigid badge
#

just use .?

#

and use non matching groups btw

#

since you are only going to use one group from that I'm assuming

distant sun
#

o

steel heart
#

Yeah for now, well actually its for replacing large repetetive code blocks

ocean quartz
#

Something like \\((.*)\\) could work too

frigid badge
#

I'd make that * a +

#

unless you wanna match empty ones too

empty flint
#
interface Interfaceable() {}

val map = Map<Any-type-that-implements-Interfaceable, List<Type-instances>>()

I don't know how to define the map. Can somebody help me figure this out?
I want to map the class that implements the interface to a list of instances of Interfaceable

prisma wave
#

Generics

empty flint
#

So something like a map mapping String.javaClass to a list of Strings, Int.javaClass to a list of Integers etc, with the requirement that they all implement that interface

#

Generics
@prisma wave I can't get that to work in Kotlin and I don't know how to specify the class itself as a key

prisma wave
#

Interfaceable<T: Interfaceable<T>>
Map<T>

empty flint
#

How does Interfaceable<T: Interfaceable<T>> work?!

frigid badge
#

why would you do it like that

#

those are 2 seperate classes I imagine

#

so it's gonna be Map<? : Interfaceable>

empty flint
#

Hmmm

prisma wave
#

@empty flint Interfaceable has to have a type argument of itself basically

#

eg kotlin class IntInterfaceable: Interfaceable<IntInterfaceable>

empty flint
#

So MyClass : Interfaceable<MyClass> cannot extend any Interfaceable<...> other than Interfaceable<MyClass> ?

prisma wave
#

afaik yes

empty flint
#

How do I make the companion object know what that <T> is?

#

is that even possible?

#

oh wait I don't need a companion object for an interface, right?

#

no I kinda do since I can't initialize the map

#

fml

#
interface Interfaceable<T : Interfaceable<T>>
{
  val map: Map<T.class, List<T>> = emptyMap()
}
#

ugh

prisma wave
#

Map<T, List<T>> ?

empty flint
#

No but that would be something like Map<String, List<String>>

#

and I want Map<String.class, List<String>>

#

but generified

#

and "static"

#

at least as static as Kotlin allows

#

or actually string could work too now that I think of it

prisma wave
#

ok first off String.class isn't even correct kotlin syntax

empty flint
#

I can turn the class name into a string

#

ok first off String.class isn't even correct kotlin syntax
@prisma wave I know

prisma wave
#

why not just use Class<T>?

empty flint
#

val map: Map<Class<T>, List<T>> = emptyMap()

#

that works

#

except it's not static

#

and so I can't initialise it ๐Ÿ˜ฆ

prisma wave
#

pretty sure that's gonna be a default value

#

what you're doing here is incredibly gross and anti-oop

#

you can't have static generic interfaces

#

it's like an oxymoron

empty flint
#

But I really really wanna :(((

prisma wave
#

not possible

empty flint
#

ur an oxymoron ๐Ÿ˜ก

#

I mean

#

thanks for your help, I'll have to figure out how to do what I want the proper way ^^

prisma wave
#

you can't there is no proper way :)

empty flint
#

I love how I keep coming up with the grossest ideas of software design and you keep bringing me down to earth ๐Ÿ˜„

prisma wave
#

i aim to please

frail glade
#

๐Ÿ‘‹

prisma wave
#

yo

frail glade
#

PDM when

#

Jk

#

I know you're busy.

onyx loom
#

pdm is a thing

#

altho relocation isnt ๐Ÿ˜ณ

distant sun
#

haters gonna hate

hot hull
#

How'd the interview go Glare fingerguns

empty flint
#

@prisma wave Is there a way for the interface to force a static method to be implemented in the implementing class' companion object?

prisma wave
#

no

#

companion objecst are totally decoupled from the class itself

frail glade
#

It was okay. I have pretty bad ADHD and it hardcore flared up when I had to live-code in front of someone. Can't do much about it. Everything else went pretty good I think.

distant sun
#

:))

hot hull
#

Ah yea that's the worst, having to actually code infront of other people

frail glade
#

Felt like someone was just watching over my shoulder, haha.

#

Luckily you don't really have to do that in the real workplace.

hot hull
#

Yea

frail glade
#

Also had an exam last night, that went okay. I have a paper due tomorrow, lab due tonight, project due Friday, exam due Thursday.

distant sun
#

last night?

frail glade
#

Busiest week I've had in a long time.

hot hull
#

Damn

distant sun
#

"Hey, Glare, wake up! I know it's 3AM but you have an exam"

frail glade
#

Exactly.

prisma wave
#

babe it's time for your daily pdm bugfixing session

#

yes honey

onyx loom
#

๐Ÿคฃ

frail glade
#

"Daily bugfixing"? Aren't you just rewriting it?

prisma wave
#

Eventually

#

not actually done much for a while

frail glade
#

Is relocations being held for the rewrite?

prisma wave
#

Probably yeah

#

Getting it into the existing structure would require a lot of bodging

frail glade
#

Darn. I haven't had the problem show up yet in Guilds but I know it will sooner or later where they have another plugin on the server that uses an older version of Kotlin and it fucks everything up.

prisma wave
#

Yeah there is a bit of a workaround but it's effort

#

I believe Souza is using it at the moment - you relocate the jar yourself and upload to your own repo

#

then use that

#

definitely will implement it eventually though

frail glade
distant sun
#

You can do this ๐Ÿ‘

prisma wave
frail glade
#

So when people build bots to get notified when a new build is pushed on Jenkins without actually having perms on the Jenkins server, are they just doing something with the rss Feed and then checking for changes?

prisma wave
#

Yeah probably either RSS or webhooks if they're a thing

frail glade
#

Yeah I would assume the RSS would connect with the webhooks.

#

I always have to check multiple sites to see when a new build is pushed so I kinda just want to make a bot that sends a webhook to a discord channel whenever a build is pushed from any of the locations I check.

frigid badge
#

why would you use rss & webhooks

#

you use just one of them

frail glade
#

I've never used RSS so maybe I don't understand what I'm talking about. You'd have to ping the RSS feed every so often to check for changes and then you execute a webhook to send a message to the discord channel, right?

frigid badge
#

ohhh

#

I completely misunderstood that lol

frail glade
#

It's all good, so I have my mind in the right place, right?

frigid badge
#

yes, there's probably libraries out there that do all the checking for you and just call an event/callback whenever a new feed has been published

frail glade
#

Yeah, I'll be looking around on GitHub.

empty flint
#

Am I doing this right, @prisma wave?

fun toClass(): Class<in Unique>
should return a Class of a type that implements the Unique interface, right?