#dev-general

1 messages ยท Page 375 of 1

old wyvern
#

installing and uninstalling bundles at runtime

forest pecan
#

but it requires another class

#

like the agents thing

quiet depot
#

yeah osgi is cool

old wyvern
#

Yea but they need to be specified when running the application

quiet depot
#

never actually used it

#

but it looks cool

quiet depot
#

and no they don't yugi

#

well

#

maybe they do in newer vers

old wyvern
#

It does 9+

quiet depot
#

ah ok

old wyvern
#

Atleast thats whats I read in the javadocs a bit ago

#

lemme check

quiet depot
#

I just remember a project which allowed you to extend String.class

#

it used an agent which was self initialized iirc

hot hull
#

messages

old wyvern
#

๐Ÿ˜ฎ

lunar cypress
quiet depot
#

ah okie

forest pecan
#

but isnt the string class is like final?

#

how is that possible

#

lol

quiet depot
#

yes

lunar cypress
#

What are you guys up to? I have some experience with hooking into bukkit class loading and manipulating the bytecode and so on

forest pecan
#

๐Ÿฅฒ

quiet depot
#

he's trying to make an agnostic plugin system

#

so one that works with things like bukkit's urlclassloader, and a standalone app's system class loader

old wyvern
#

It was on the bytebuddy javadoc piggy

errant geyser
#

Uh, Java 16 seems to have broken my Gradle or smth. That's fun

quiet depot
#

project I was referring to

forest pecan
lunar cypress
#

making something like that agnostic is virtually impossible

old wyvern
#

hmm

#

I guess it might still be worth it to look into the topic a bit more before I move into changing bytecode

lunar cypress
#

wait, what do you mean exactly when you say "plugin system"

old wyvern
#

Not exactly a plugin system

quiet depot
#

plugin system might not have been an apt description, yugi said it was more like a pdm remake

old wyvern
#

mhm

lunar cypress
#

and what do you want to do with bytecode?

ocean quartz
#

Wait if Java 16 changes affect things like PDM wouldn't it also affect Bukkit's plugin loading and PAPI's extensions? Or those work differently?

quiet depot
#

papi constructs new class loaders for each expansion iirc

#

no clue about bukkit

old wyvern
#

Change "new" invocations on entry class to resolve it through a specific classloader

old wyvern
lunar cypress
#

that is not handled on the bytecode level

forest pecan
old wyvern
ocean quartz
#

Ah okay gotcha

jovial warren
#

PAPI 3 when xD

old wyvern
#

I wanted to transform something like new Human() to using something from this lib to load it (Human)classProvider.getClass("a.b.c.Human").newInstance()

jovial warren
#

I'd do some work on it if I knew what I was doing lol

quiet depot
#

yugi any reference to Human will still resolve the class

jovial warren
#

because it means I can have placeholders on Krypton without rewriting PAPI xD

old wyvern
#

oh true

#

welp

quiet depot
#

you have to use base classes/interfaces or reflection

lunar cypress
#

that just screams xy problem

old wyvern
#

I guess the only choice is using a different entry point then

jovial warren
#

you mind showing me around PAPI 3 pig?

old wyvern
#

That was not a "how" to do that John

quiet depot
#

well

forest pecan
#

I wanna see as well

quiet depot
#

not exactly sure what you want me to do

forest pecan
#

but idk if i have that right

#

lol

old wyvern
#

I was thinking of diff ways I could do what I was trying to do

#

The actual question is still the earlier one

quiet depot
#

just take a look around yourself and if something tickles your eyes give me a shout and i'll explain why you feel that tickle

jovial warren
#

I wanna help get PAPI 3 done this year rather than this decade xD

lunar cypress
#

Before you rewrite pdm or whatever, you should really start by listing what you want to end up with and what currently sucks about pdm

old wyvern
#

lmao

lunar cypress
#

on an abstract level

jovial warren
#

well idk how Guice works so I gotta learn that

#

yeah PDM needs to be rewritten

old wyvern
#

Good point

quiet depot
#

the way I'm using guice shouldn't really need explanation

#

just don't question where these constructors are actually getting called and you'll be fine

prisma wave
#

what currently sucks about pdm
Nothing??

quiet depot
#

just accept that the dependencies are getting supplied

#

you just don't need to know where from

jovial warren
#
  1. multiplatform support is a joke
  2. URL class loader hacks aren't the way forward
  3. it's kinda a mess ngl
quiet depot
#
  1. relocation?
jovial warren
#

and that, yeah

#

also, I wanna make it so PDM can have platform versions

prisma wave
#

it is multiplatform

#

In theory

#

None of the essential classes depend on spigot at all

lunar cypress
#

multiplatform? what?

forest pecan
#

Relocation can easily be achieved tho (asm)

jovial warren
#

so for example, on Velocity and Sponge I believe, you don't need jar-in-jar because it gives you access to add paths to classpath

quiet depot
#

like sponge spigot etc johnny

#

i assume

lunar cypress
#

ah

jovial warren
#

and that also applies to Krypton

#

on Bukkit and BungeeCord, we may need a more advanced solution, such as jar-in-jar, so we can remain in control of the class loader

lunar cypress
#

the thing is, bukkit's class loading is uniquely fucked

old wyvern
#

๐Ÿ’€

errant geyser
#

So is bukkit as a whole

jovial warren
#

yeah I think we know that

forest pecan
#

you can also use the method where you just completely override the classloader

#

and use your own classloader to load the other plugins

#

and expose the url method

jovial warren
#

thanks for yesterday's news @lunar cypress xD

quiet depot
#

bardy idk when i'll be free to work on papi 3

#

my 2 week holiday starts next week but that's basically reserved for a deluxechat update and hopefully a docdex release

jovial warren
#

that's why we have loads of people added to the project though amirite

forest pecan
#

Wait you guys have a 2 week holiday right

#

I think ours is like split 1 week and 1 week

jovial warren
forest pecan
#

for U.S.

quiet depot
#

no it's mainly for advice bardy

forest pecan
#

we have a break every 2 months

#

for 1 week

jovial warren
#

what's not done yet pig?

quiet depot
#

frankly I'm a bit iffy about people contributing to beta software because chances are I'll delete their contributions the second I think of a better way

onyx loom
#

lol

forest pecan
#

is papi 3 publicly visible?

quiet depot
#

no

forest pecan
#

oh

jovial warren
#

nah, private, to avoid confusion

forest pecan
#

๐Ÿฅฒ

quiet depot
#

it's not to avoid confusion

jovial warren
#

pig will probably add you on request though

quiet depot
#

it's to avoid me getting annoyed and other people getting annoyed when I delete their contributions

onyx loom
#

the perfectionist

jovial warren
#

idm having my contributions deleted lol

forest pecan
#

lol

quiet depot
#

and that's why you have access

jovial warren
#

I'd rather make it work first and make it work well later

#

that's mainly because that's how I program lol

forest pecan
#

I just don't make contributions in general. I kind of talk about them

#

cause im worried about people who are like "You added an extra line here!"

quiet depot
#

like my main concern is that someone is going to write a big pr adding some new feature, but I can't accept it, because the feature they added is in fact planned, but planned in a much better, and different way. That pr goes down the drain because it's unusable, as it implements it in the wrong way

old wyvern
#

Are the planned features listed somewhere?

quiet depot
jovial warren
quiet depot
#

yeah on issues

#

AND

#

if you guys have any recommendations

#

put them on issues

jovial warren
#

if you tell us how you want it implemented, we can implement it like that ๐Ÿ™‚

quiet depot
#

if it's not an issue it won't happen

old wyvern
#

Alrighty ๐Ÿ‘

quiet depot
#

yeah if I get time i'll go through the issues and make a specification

#

even that's not set in stone though

#

will go back to my original point, where I said i'll delete it the second I think of a better way

old wyvern
#

lol

quiet depot
#

you guys can also try write a spec for a proposed feature

#

and i'll provide feedback eventually

forest pecan
#

Oh shit

#

Uh oh

#

๐Ÿฅฒ

jovial warren
#

xD

forest pecan
#

Page not found ๐Ÿฅฒ

jovial warren
#

piggy don't kill me pls

quiet depot
#

lol

errant geyser
forest pecan
#

but

#

we are both tier 4

quiet depot
#

pulse

#

click it

errant geyser
#

I don't have it either dummy

forest pecan
#

๐Ÿคฉ

jovial warren
#

oh btw, we should use Retrofit for the eCloud queries ๐Ÿ™‚

forest pecan
#

"Planned Platform Support"

#

:kekw:

quiet depot
#

what's retrofit

#

no

#

will just use java 11 http client

jovial warren
#

basically, you write an interface with HTTP request methods, and it uses OkHttp to do the calls internally and stuff

#

ew

errant geyser
#

Damn it bardy

jovial warren
#

it's actually good

#

alright, at least use OkHttp

quiet depot
#

I got it up before both of you and I'm the one who asked what it was

#

u guys r slow

jovial warren
#

at least use OkHttp

quiet depot
#

no lol

#

no point

jovial warren
#

LuckPerms uses OkHttp

#

it's very fast and very reliable

errant geyser
#

Just shade the entirety of Spring and use none of it

#

Ez

quiet depot
#

luckperms maintains a connection to its web interface, no?

jovial warren
#

and much better to use than Java's built in stuff

jovial warren
#

I think

quiet depot
#

papi doesn't maintain a secure connection like that

jovial warren
#

still uses OkHttp to query stuff

quiet depot
#

it doesn't need anything fancy

jovial warren
#

you know it's just queries back and forth right?

#

that's all LP does

#

and it still uses OkHttp

#

also, OkHttp is only like 800 KB

quiet depot
#

well

#

they're on java 8

#

by the time papi 3 is public java 11 will probably be reaching eol in the mc community

errant geyser
#

dear god

quiet depot
#

lol

jovial warren
#

lol

jovial warren
forest pecan
#

lol

jovial warren
#

we got this guys, dw

#

don't listen to pig

forest pecan
#

piggy you use @NotNull final instead of final @NotNull right

#

except for like arrays

jovial warren
#

he doesn't know what he's talking about

quiet depot
#

arrays r

jovial warren
forest pecan
#

me 2

#

lol

jovial warren
#

also one of those who uses two arguments per line

quiet depot
#

@NotNull final String @NotNull [] stringsgsgs

forest pecan
#

ok i dont understand the two arguments per line thing tho

#

lol

jovial warren
#

yeah that's cursed

quiet depot
#

2 arguments fits nearly 100% of the time within the margin

jovial warren
#

it also looks horrible

quiet depot
#

nah

jovial warren
#

yes

forest pecan
#

lol

old wyvern
#

1 arg per line gang

jovial warren
#

you are literally the only one here who thinks 2 arguments per line is a good idea

forest pecan
#

I do 1 arg per line if my arguments are thicc

errant geyser
#

I do it, unless they're super thicc ^

jovial warren
#

I don't often have that many constructor params lol

old wyvern
#

thicc methods

forest pecan
#

thicc overloading

old wyvern
#

thicc thicc

forest pecan
#

thicc thicc yugi

#

๐Ÿ˜ณ

old wyvern
#

๐Ÿ˜ณ

errant geyser
#

Almost as thicc as frcsty

jovial warren
old wyvern
#

Oh god

forest pecan
#
    companion object Default : PlayerMetadata(
        MovementFlags(),
        300,
        Optional(null),
        false,
        false,
        false,
        Pose.STANDING,
        HandFlags(),
        1.0f,
        0,
        false,
        0,
        0,
        Optional(null),
        0.0f,
        0,
        SkinSettings(false, false, false, false, false, false, false),
        MainHand.RIGHT,
        CompoundBinaryTag.empty(),
        CompoundBinaryTag.empty()
    )
#

why

errant geyser
#

What in the holy fuck is that shit

old wyvern
#

Please

#

Kill me

quiet depot
#

ok btw

quiet depot
#

my 2 per line ONLY applies for the declaration of parameters

jovial warren
quiet depot
#

I would never do that

jovial warren
#

since I use null to represent when we don't want to send the metadata

forest pecan
#

Oh ic

old wyvern
#

What do you use for long calls piggy?

quiet depot
#

I usually just split at an arbitrary number of args per line

#

depends on the indentation level and my mood

old wyvern
#

lol

quiet depot
#

bardy if you're looking at papi

stuck harbor
#

i seem to have 'xcode' on my 'dock'

#

help

old wyvern
#

Welp idk why but* I really prefer doing either one line or 1 arg per line

stuck harbor
#

my linux

errant geyser
#

What's that HTTP library Matt fangirls for

jovial warren
#

see, now things like factories, I really don't miss lol

#

also, what the actual fuck are those generics

old wyvern
#

Factories are still a thing in kotlin bard

quiet depot
#

lol

old wyvern
#

๐Ÿฅฒ

stuck harbor
#

if u dislike factories, get functional

old wyvern
#

Builder is the obsolete pattern

stuck harbor
#

u nerd

jovial warren
#

<H, E extends Enum<E> & KeyName, K extends Keyable<H, E>>

quiet depot
#

love me some generic soup

forest pecan
#

iwanio!

#

ur nitro!

#

๐Ÿ˜ฎ

errant geyser
#

what the hecking heck is that

jovial warren
#

is KeyName not an enum? or are we looking for an enum that implements KeyName here

stuck harbor
#

no i'm not

quiet depot
#

keyname is an interface

forest pecan
#

Duckkkkk :(

jovial warren
#

ah I see, yeah

stuck harbor
#

i aint no nitro plebian

#

ohhhh

#

u mean my boost

#

oh shiz

forest pecan
#

Yes

#

๐Ÿ˜ฆ

stuck harbor
#

sadge

quiet depot
#

so basically

#

the keyable portion of the api is certainly the most cognitively complex part of the codebase

errant geyser
#

How dare GH have the audacity to assume what I'm looking for!

quiet depot
#

if you can understand it

#

you'll be able to understand anything else in papi 3

stuck harbor
#

who knows, i may return to booster's bot commands paradise one day

#

one day

quiet depot
#

now a key note is, usage of the keyable api does not require understanding of it's implementation

#

it's quite simple to use

jovial warren
#

also, I ain't using your clapped 2 args per line conventions btw

quiet depot
#

just difficult to understand (imo)

jovial warren
#

ain't happening lol

stuck harbor
#

just use rust

stuck harbor
#

paperspigot rust bindings soon just you wait

#

just you wait

errant geyser
#

Someone needs to modify that to "Callum Seabrook"

quiet depot
#

I'm not even consistent 100% of the time

#

in cases like this with massive parameters

#

we can have mixed nums per line

stuck harbor
#

un-stonks

jovial warren
#

oh btw pig

#

nice documentation you got there

quiet depot
#

lol

onyx loom
#

yes im sure ull find him like u find the year 9s ๐Ÿ™ƒ

jovial warren
#

we need documentation on both the API and common ideally

quiet depot
#

yea

errant geyser
stuck harbor
#

json everything

jovial warren
#

I will find where you live katsumag

stuck harbor
#

i will make discord json

#

no gui needed

#

only json

quiet depot
#

but anyway

#

if we look at an implementation

#

it's not THAT complicated

#

implementing krypton shouldn't be too hard

stuck harbor
#

famous last words

jovial warren
#

is it at the point where I can make an at least semi-functional implementation btw?

quiet depot
#

yes

jovial warren
#

instantly forks

#

I swear if I see some BS that means I gotta use the Gradle wrapper like last time imma lose it

ocean quartz
forest pecan
#
    /**
     * Checks the User's permission on the provided String.
     * @return whether the User has the permission
     */
    boolean hasPermission(@NotNull final String permission);
quiet depot
#

first is better

#

that's fact

jovial warren
#

well that was faster than I expected

quiet depot
#

what was faster?

jovial warren
#

building

forest pecan
jovial warren
#

importing the project

#

oh btw, I'm allowed to write this in Kotlin right?

quiet depot
#

no

jovial warren
#

wat

forest pecan
#

lmfao

quiet depot
#

actually

stuck harbor
#

what monster would do final @NotNull

onyx loom
#

๐Ÿคฃ

quiet depot
#

well

#

hm

jovial warren
#

if I maintain it

#

you won't have to touch it

#

my responsibility

forest pecan
quiet depot
#

well I can't stop you from writing it in kotlin

#

it makes sense since krypton is also in kotlin

stuck harbor
quiet depot
#

but I'm not sure about merging it into the main repo

jovial warren
#

no but you can stop it from being merged

#

yeah

#

I mean, it's not that big of a deal

quiet depot
#

because I can't maintain kotlin

jovial warren
#

you know Krypton will likely die if I leave right?

stuck harbor
#

yes

ocean quartz
#

If anything i can maintain the Kotlin portion

jovial warren
#

you can delete it if I retire it lol

quiet depot
#

yeah matt we'd probably just get rid of it

jovial warren
#

yeah if I go you can delete it lol

forest pecan
#

F

jovial warren
#

I don't plan to leave any time soon though

#

I have Krypton to work on and LuckPerms, spark, and what will now be PAPI 3 to maintain

ocean quartz
#

Tbh Bardy get the core thing working first before you implement platforms in those plugin

jovial warren
#

yeah probably a good idea

onyx loom
#

lmao

jovial warren
#

my priorities for Krypton are upside down atm

onyx loom
#

krypton: players cant move or smth
bardy: atleast papi works on it!

half harness
#

opinions on having the window title "MC Server Creator v1.0.0" vs "MC Server Creator"?

jovial warren
#

I wish I had more people contributing to Krypton

half harness
#

or "MC Server Creator 1.0.0"

jovial warren
#

it just mostly seems to be me atm ๐Ÿ˜”

forest pecan
#

choose something besides MC Server Creator

#

too original lol

#

maybe like Xodus

#

or something

half harness
#

uh

forest pecan
#

as your server name

jovial warren
#

oh btw, Piggy, you should join the Krypton Discord

forest pecan
#

a d

jovial warren
#

we have some good fun in there

forest pecan
#

/s

half harness
half harness
forest pecan
#

i was joking to bardy about the ad lol

half harness
#

wdym server name

forest pecan
#

i was talking about using something like "Xodus" or some other name instead of "MC Server Creator"

#

cause MC Server Creator sounds too boring and original

jovial warren
#

I mean, pig likes to join other community projects to do with people in HelpChat

forest pecan
#

if only i got more than 2 stars

#

๐Ÿ˜”

jovial warren
#

I got like 15 now

#

someone in the Minestom Discord found the project and someone else linked the Discord

half harness
forest pecan
#

ah

jovial warren
#

also, you mean unoriginal

forest pecan
#

Yeah i meant that

half harness
#

lol

#

but back to my main question

jovial warren
#

after ticking btw, what should come next for Krypton?

half harness
#

"Name v1.0.0", "Name", or "Name 1.0.0"?

jovial warren
#

actually maybe I should ask that in the Krypton Discord

forest pecan
half harness
#

aw

#

ok

quiet depot
#

feel free to inv me

stuck harbor
#

no versioning required bud

quiet depot
#

can't guarantee i'll stay

forest pecan
#

OoOOF

quiet depot
#

not an insult

half harness
forest pecan
#

i have a modpack discord server i made like 2 years ago

#

it has like 300 members

half harness
#

o

forest pecan
#

but i havent been working on the modpack

#

lately

#

cause of plugins

#

i feel kinda bad

#

there are also like 20 other staff members on there

#

and i havent been really like doing any shit

#

lol

jovial warren
#

also, that moment when you realise that you're going to have to write a changelog describing what you changed for the new version and the list of git changes is off your screen

half harness
#

oof

#

can i have a code review

jovial warren
#

๐Ÿฅฒ

forest pecan
#

i just use the ide

#

lol

jovial warren
#

I swear this is like the first time in my life I've actually had something to do lol

half harness
jovial warren
#
  • Krypton
  • DocDex multi-format support
  • LuckPerms platform
  • spark platform
  • PAPI 3 platform
  • Geyser platform
#

that's my list of projects lol

#

and yes, I spoke to cam last night and found out that writing a Geyser platform impl is ez

half harness
forest pecan
jovial warren
#

I don't use the GUI built-in to IntelliJ btw because it doesn't support commit signing

forest pecan
#

why is it all set to null

#

lol

jovial warren
#

at least, not on Windows

half harness
#

close

#

that embed

#

plz

stuck harbor
#

haha

half harness
#

thx

onyx loom
#

๐Ÿ˜‚

stuck harbor
#

that embed

#

tf

jovial warren
#

lol what is that programmer art

stuck harbor
#

haha

forest pecan
#
    private Stage primaryStage = null;
    private Parent chooseTypeRoot = null;
    private Parent chooseVersionRoot = null;
    private Parent chooseDirectoryRoot = null;
    private Parent installerRoot = null;
    private ServerType serverType = null;
    private ServerVersion version = null;
    private ServerTypeController serverTypeController = null;
    private VersionController versionController = null;
    private DirectoryController directoryController = null;
    private InstallerController installerController = null;
half harness
#

hey im not an artist

stuck harbor
#

i thought i knew programmer art

forest pecan
#

shouldn't you just leave it blank?

stuck harbor
#

but sheesh

forest pecan
#

cause they are null by default

jovial warren
#

just don't even bother to initialise those dkim

half harness
jovial warren
#

yes they are

half harness
#

no they aren't

onyx loom
#

how so

#

what makes u think theyre not

jovial warren
#

yes ๐Ÿ‘ they ๐Ÿ‘ are

half harness
#

they are "uninitialized"

forest pecan
#

w o t

onyx loom
#

๐Ÿ˜

jovial warren
#

which evaluates to null at runtime

stuck harbor
#

lol

forest pecan
#

is this a javafx thing

half harness
#

so they throw error because it's like "this variable might might has not been initialized yet"

forest pecan
#

oh

stuck harbor
#

null ๐Ÿ‘€

forest pecan
#

thats weird lol

half harness
#

since javafx has a start method, not a constructor

stuck harbor
#

an start method

jovial warren
#

also, singletons

#

ewwwww

half harness
#

make a PR

forest pecan
half harness
#

i can't figure it out

#

AHHH

forest pecan
#

you should consider using Abstraction

onyx loom
#

"make a pr" lol

ocean quartz
half harness
#

i should remove that image

forest pecan
#

instead of multiple switch statemeents

half harness
#

it works for me

half harness
#

it apparently cannot extend Application

jovial warren
#

๐Ÿคจ

forest pecan
#

isn't that normal for stand alone apps?

ocean quartz
#

Should have used tornadofx

jovial warren
#

^

old wyvern
forest pecan
#

oh nvm

ocean quartz
old wyvern
#

TornadoFX lit

onyx loom
#

tornadofx in java lol

half harness
jovial warren
#

never too late

half harness
#

๐Ÿ˜ฆ

forest pecan
#

who wants to look at my code

jovial warren
#

I'll rewrite it xD

half harness
#

anyways

#

any good suggestions?

forest pecan
#

dkim you got your tips

#

now

half harness
#

since I can't use DI

forest pecan
#

look at mine

jovial warren
#

let me rewrite it from scratch lol

forest pecan
#

lol

half harness
#

and I need that main method

#

u guys haven't really gave me any suggestions ๐Ÿ˜ฆ

ocean quartz
old wyvern
#

jk

forest pecan
#

Lol

half harness
old wyvern
#

What is that image

old wyvern
#

Did you draw in paint or something?

half harness
#

since JavaFX has its own thread and makes its own instance

half harness
old wyvern
#

god

half harness
#

i suck at drawing

ocean quartz
# half harness what about it doesn't work

Everything, your requireNotNull stuff was always null, package issues, fixed like 4 things to get it running and was still throwing NPE with no explanation why, stopped wasn't worth the time

jovial warren
#

welcome to the club dkim

jovial warren
#

just rewrite it in Kotlin using TornadoFX

ocean quartz
#

That's what happens when you don't handle nulls correctly

jovial warren
#

TornadoFX's DSLs are ๐Ÿ‘Œ

old wyvern
#

Just rewrite it in Haskell

#

Monads are ๐Ÿ‘Œ

half harness
#

i added every file

#

besides .idea

#

and .gradle

ocean quartz
#

Not talking about project structure lol

half harness
#

so i don't get why it doesn't work

half harness
#

and you're using gradle run?

#

๐Ÿ˜•

forest pecan
#

dkim

#

wanna look at my project now after i looked at urs

#

we can trade bad projects

#

lol

half harness
#

๐Ÿคข

#

return > else

onyx loom
forest pecan
#

wait what lmfao

half harness
#

lol

forest pecan
#

is that in my project?

half harness
#

no

onyx loom
#

dkims

forest pecan
#

oh

#

kekw

half harness
#

thats so that they can see the starting message

#

then it waits 1 second

#

bc all console logs into there

#

so its just a little warning

jovial warren
#

throwError lol

steel heart
#

Lmfao

jovial warren
onyx loom
#

oh my god

forest pecan
#

lolll

prisma wave
#

our BRAVE lea9der

half harness
#

because error = bad

#

error = crash

#

good

hot hull
onyx loom
#

take a guess

steel heart
#

Dkim I mean E for effort

hot hull
#

CHAD?

onyx loom
#

the polar opposite of a chad

half harness
#

its not like mc servers where the server can still survive with exceptions

#

if the program throws exception.. it should halt

hot hull
#

being who?

dawn hinge
#

No it depends...

steel heart
#

You should be able to recover from exceptions 90% of the times

jovial warren
onyx loom
#

its not even that dkim

jovial warren
#

dkim what the fuck

half harness
#

unless i keep running the code

#

over and over again

onyx loom
#

there is no need to be sleeping the thread to send a message

old wyvern
#

skim

#

dkim*

dawn hinge
#

Skim lol

old wyvern
#

Show a crash dialog

half harness
#

uh

old wyvern
#

and exit on closing the dialog

half harness
#

ah

#

ic

old wyvern
#

Instead of pausing thread

half harness
#

good idea

steel heart
#

Well thatโ€™s not a reason to make a weird tightly coupled error handling out of it

half harness
#

how do i make a crash dialog? ๐Ÿ˜‚

jovial warren
#
  1. adding a shutdown hook with a new thread every time you throw an error is gonna get real expensive real fast
  2. there is no need to sleep the current thread for 5 seconds when you error
onyx loom
forest pecan
#

who wants to code review mine

#

๐Ÿ˜ฆ

half harness
forest pecan
#

why does nobody code review my project ๐Ÿ˜ฆ

jovial warren
#

you know the entire purpose of exceptions is that they're expected to be caught right?

old wyvern
#

Send link Pulse

jovial warren
#

that's how they differ from errors

old wyvern
#

Ill review it inbetween my work

forest pecan
jovial warren
#

an Error should not be caught, and it is generally non-recoverable

forest pecan
#

its kinda big tho

old wyvern
#

I see

jovial warren
#

an Exception should be caught, and is generally recoverable

forest pecan
old wyvern
#

Ill try my best to cover atleast some parts

half harness
forest pecan
#

tyty

half harness
#

redownload?

#

loop?

jovial warren
#

attempt to redownload it, yeah

half harness
#

keep looping until it downloads?

#

ok

#

good idea

hot hull
#

Even worse than CHAD's code

jovial warren
#

timeout eventually

half harness
#

ill implement it

forest pecan
#

you could send a failed download dialog to the user

hot hull
#

Didn't think that was physically possible

half harness
#

uh

forest pecan
#

and tell them to redownload it

#

using a button

onyx loom
#

whos chad

forest pecan
#

or smthing

half harness
#

how do i make dialog

#

swing?

heady birch
#

JDialog

onyx loom
#

yugi sent link

forest pecan
#

no just in general

hot hull
onyx loom
#

o ๐Ÿ˜ณ

forest pecan
#

not trump?

#

damn

#

i feel offended

steel heart
#

@serene cave

old wyvern
#

um

jovial warren
#

you know what deprecation is pulse?

steel heart
forest pecan
#

nah

#

the dependency imports

#

i removed the dependency from the project

jovial warren
#

ah right

forest pecan
#

so imports wouldn't validate properly

#

and then it would make ide's fuck up

#

lol

onyx loom
#

why not just delete teh class lmao

forest pecan
#

well i saved it for later purposes perhaps

onyx loom
#

๐Ÿค”

forest pecan
#

/** A dead class which used to use JavaCV (which then got removed). RIP */

#

lol

old wyvern
#

@ocean quartz
So I think we can go 2 routes with how we inject* dependencies

  1. Provide an Entry point class which should be extended by the user to run their application
  2. Enforce a Interface-Implementation pattern wherever user wants to use the "shaded" dependencies
#

Whats you opinion on which path we should follow?

#

@steel heart you too

steel heart
#

I think one because we would essentially be able to enforce a base structure etc

old wyvern
#

Hmm

steel heart
#

But that is if one is needed

errant geyser
#

#1 sounds easier

old wyvern
#

True

steel heart
#

Maybe all annots based huhuhuHAHAHA

old wyvern
#

god no

#

Im trying to keep the usage as simple as possible

steel heart
#

Yeah well I vote for 1 anyways

old wyvern
#

Alrighty

#

So 2 votes for #1 rn

#

the poll doesnt have one for options does it

#

welp

#

I guess +1 = 1 , -1 = 2

errant geyser
#

What are you making?

ocean quartz
#

How would the second option work?

old wyvern
#

Something like

AnInterface a = slimJar.create("com.a.b.MyClassImplementingTheInterface")

ig

ocean quartz
#

Also @hot hull sorry I still don't understand how you want the actions on mf-cmd, can you give me an example?
Isn't it possible already?

ocean quartz
old wyvern
#

Alrighty

steel heart
#

What u think yugi?

old wyvern
#

wdym conclure?

#

About the 2 choices?

old wyvern
errant geyser
#

U rewriting pdm or smth

old wyvern
#

Also

#

Yea

errant geyser
#

Ah ok

old wyvern
#

Ill send you invite link for hasklash tonight

errant geyser
#

Nice, cheers

steel heart
#

Like if you were to pick

old wyvern
#

Yea Id pick 1 too I think

#

Just wanted to get everyone's opinion on the choices

errant geyser
#

Does Gradle support Java 16 yet?

steel heart
#

Only reason I wanted to use 2 is where I already extend another class and just want to implement the functionality of it but that would rarely be the case if weโ€™re following srp

old wyvern
lunar cypress
#

the newest RC supports it too if you want it now

errant geyser
#

I'll wait until it's officially released I guess

hot hull
#

@ocean quartz, any suggestions as to how I should approach removing the mf-gui nbt tag when a user takes an item out of a gui?

ocean quartz
#

Did setting it to null not work?

hot hull
#

Haven't tried yet, issue is there's a shit ton of actions that would result in an item being taken out of the gui

ocean quartz
#

Yeah, if only there was a inventoryevent that would trigger on every action right Bukkit

steel heart
#

Event

ocean quartz
#

Deobfuscated NMS is sooo different holly shit

jovial warren
#

yeah

forest pecan
#

why does it use so much this

#

just get rid of the this lol

old wyvern
#

No

#

this good

lunar cypress
#

decompiler

ocean quartz
#

It's normally added by the decompiler

jovial warren
#

you know Paper has an obligation to use Spigot's mappings btw right?

#

so they can't really do much

ocean quartz
#

It's weird though, net.minecraft.server.v1_16_R3.NavigationAbstract doesn't exist on the vanilla server (without version ofc) thonking

jovial warren
#

100% sure about that?

forest pecan
#

^

floral steeple
#

Okey SOrry

jovial warren
#

ffs why are suggestions not working

#

@obtuse gale pls help me Brigadier master

ocean quartz
#

This are all the files on net.minecraft.server

old wyvern
#

You changed something today earlier bard

jovial warren
#

yeah I still can't get suggestions working

obtuse gale
#

Sucks

#

Guess I'll never use krypton then

jovial warren
#

oh btw, if I call a function in a lambda, that function will be called when that lambda is invoked right?

obtuse gale
#

Yeah

jovial warren
#

because suggest never gets called for whatever reason

old wyvern
forest pecan
#

^

old wyvern
#

๐Ÿ˜ฌ

jovial warren
#

dispatcher.getCompletionSuggestions(dispatcher.parse(command, sender))

forest pecan
#

looks so wrong

#

lol

jovial warren
#

anything wrong there?

obtuse gale
#

Nop

ocean quartz
forest pecan
#

uhh no

#

lmfao

old wyvern
#

oh it is?

forest pecan
#

thats the icon for any executable im pretty sure

#

for unknown it is just blank

#

icon

jovial warren
#
val commandNode = buildRawArgumentsLiteral(
            command.name,
            { execute(command, it) },
            { context, builder -> suggest(command, context, builder) }
        )
```registration of the command
old wyvern
#

I was just assuming that to be exe till now

#

oh

ocean quartz
#

This is the .exe icon

jovial warren
#
private fun buildRawArgumentsLiteral(
    alias: String,
    brigadierCommand: com.mojang.brigadier.Command<Sender>,
    suggestionProvider: SuggestionProvider<Sender>
) = literal<Sender>(alias.toLowerCase(Locale.ENGLISH))
    .then(argument<Sender, String>("arguments", greedyString())
        .suggests(suggestionProvider)
        .executes(brigadierCommand))
    .executes(brigadierCommand)
    .build()
forest pecan
old wyvern
#

Thats msi matt

jovial warren
#

^

forest pecan
#

your icons are fucked up matt

#

lol

old wyvern
#

lol

ocean quartz
#

Msi and exe

obtuse gale
#

Lmao

forest pecan
#

they are different

#

lmfao

old wyvern
#

No matt

forest pecan
#

msi is the disc

old wyvern
#

defualt for exe is that other icon

forest pecan
#

exe is the window thingy

jovial warren
#

Fefo is there anything wrong with my registration logic?

#

then suggest btw is ```kotlin
private fun suggest(
command: Command,
context: CommandContext<Sender>,
builder: SuggestionsBuilder
): CompletableFuture<Suggestions> {
val args = context.input.split(" ").drop(1)
val hasPermission = command.permission?.let(context.source::hasPermission) ?: true
if (hasPermission) return builder.buildFuture()

command.suggest(context.source, args).forEach { builder.suggest(it) }
return builder.buildFuture()

}

#

pretty much mirrored Velocity with all of this

#

idk what I'm doing wrong

ocean quartz
#

Well that's the default icon Windows assign when there is no default for the type, if I open it with any program it'll change, I've never opened a .java file directly

forest pecan
#

for me it's just a blank icon

#

and it was like that on multiple windows pcs

ocean quartz
#

Blank is for no extensions

obtuse gale
#

Registration looks good ig, can't give a super detailed look at it rn

onyx loom
#

open .java files with IJ by default ๐Ÿ™‚

half harness
half harness
#

ur icons are weird thonking

forest pecan
#

^^

ocean quartz
# half harness

Unknown extension != known extension with no executable attached to it

half harness
#

huh?

#

no executable attached to it = unknown

#

iirc

ocean quartz
#

No idea, doesn't really matter, it's just an icon lol

jovial warren
#

could probably put money on this issue being something really stupid that I'm just missing lol

forest pecan
#

Matt you don't live in Windows

heady wharf
#

Hello,

Can I have a sonor notification when my name is mentioned in the chat (put the nickname in colors and have a little sound of noteblock with deluxechat ?

obtuse gale
#

Bardy

jovial warren
#

yes Fefo?

half harness
#

Bardy

ocean quartz
forest pecan
#

lol

obtuse gale
#

if (hasPermission) return builder.buildFuture()

forest pecan
#

You use Windex Operating System

#

lol

obtuse gale
#

Wouldn't that not call the actual command suggestion thing?

jovial warren
#
  1. that's what Velocity has
  2. that should be fine
  3. I set a break point on args and that was never called, so that's not the issue here
#

it's not calling suggest at all

obtuse gale
#

Ah

half harness
#

im stuck between
a) coding
b) playing hypixel
c) watching youtube
๐Ÿ˜ซ

forest pecan
#

im stuck between inside you

#

๐Ÿ‘€

half harness
#

๐Ÿ˜ณ

forest pecan
#

that's something fefo would say 100%

#

lol

jovial warren
#

strange isn't it Fefo

forest pecan
#

EXACTLY

#

lol

jovial warren
#

wasn't talking to you xD

forest pecan
#

oh

#

same thing

#

yea

#

๐Ÿ™‚

#

dkim oof

jovial warren
#

dkim I can see what you delete lol

onyx loom
#

โ“

forest pecan
#

let me guess

#

betterdiscord

#

lol

half harness
#

he said it before

onyx loom
#

would u like to explain urself bardy

jovial warren
forest pecan
#

using a discord injector

#

imagine

half harness
#

should i get bd

#

it seems cool

forest pecan
#

its against tos but in reality its meh

jovial warren
#

it's cool, you'll get told off for it if someone reports you, but Discord doesn't really give a fuck anyway

forest pecan
#

lol true

half harness
#

wdym get told off?

forest pecan
#

warned

#

basically

half harness
#

๐Ÿ˜ฎ what does it look like?

ocean quartz
#

Wtf the path is the same but the classes in them are completely different thonking
I guess Bukkit adds a lot to nms

jovial warren
half harness
jovial warren
#

no, it has many more

half harness
#

5 if u count the subclass things

half harness
ocean quartz
jovial warren
#

just the server code isn't all in net.minecraft.server in actual Mojang code lol

half harness
#

ic

jovial warren
#

the packet stuff is in net.minecraft.network

#

go figure

forest pecan
#

I'm a bit confused, but when does $ get added for java bytecode? Is it like subclasses

half harness
#

i was imagining like 100k line classes lol

jovial warren
#

then you have net.minecraft.world, net.minecraft.util, etc.

ocean quartz
#

The issue is that Mojang server has no AbstractNavigation

half harness
jovial warren
#

I think

forest pecan
#

ic

jovial warren
#

anonymous classes

forest pecan
#

Yeah for lambdas

#

also

forest pecan
#

i remember that error

#

lol

jovial warren
#

Bukkit mappings != Mojang mappings

ocean quartz
#

I'm assuming Bukkit's equivalent of PathNavigation

obtuse gale
#

md5 switched to Mojang mappings for package names (for dev environment, not the final jar)

jovial warren
#

you talking about NavigationAbstract Matt?

ocean quartz
#

Yeah

jovial warren
#

that would be net.minecraft.world.entity.ai.navigation.PathNavigation

half harness
#

how can i print out exceptions... but not in console?

jovial warren
jovial warren
forest pecan
half harness
#

._.

forest pecan
#

i think

#

something like that

ocean quartz
#

Yeah, seems to be it

half harness
forest pecan
#

d; Exception#getStackTrace

ruby craterBOT
#
public StackTraceElement[] getStackTrace()```
Description:

Provides programmatic access to the stack trace information printed by printStackTrace(). Returns an array of stack trace elements, each representing one stack frame. The zeroth element of the array (assuming the array's length is non-zero) represents the top of the stack, which is the last method invocation in the sequence. Typically, this is the point at which this throwable was created and thrown. The last element of the array (assuming the array's length is non-zero) represents the bottom of the stack, which is the first method invocation in the sequence.

Some virtual machines may, under some circumstances, omit one or more stack frames from the stack trace. In the extreme case, a virtual machine that has no stack trace information concerning this throwable is permitted to return a zero-length array from this method. Generally speaking, the array returned by this method will contain one element for every...

This description has been shortened as it was too long.

Returns:

an array of stack trace elements representing the stack trace pertaining to this throwable.

forest pecan
#

look at the print stack trace method

half harness
#

i tried StackTraceElement#toString

#

but that didn't work

forest pecan
#

look at the code for the print stack trace

#

then concatenate that

half harness
#

I've tried doing Exception#printStackTrace(PrintWriter) and PrintWriter#write(char[]) which worked... sorta (it had some extra stuff such as an extra ) at the end of each line

forest pecan
#

into a string

jovial warren
#

Arrays.stream(exception.getStackTrace()).map(element -> element.toString()).collect(Collectors.joining("\n")) lol

half harness
ocean quartz
#

If path1 is same as path2 then path2 = path1

#

Amazing

hot hull
#

Yea setting the nbt to null didn't work

ocean quartz
#

Hmm, i'll try it out Frosty

jovial warren
#

Arrays.stream(exception.getStackTrace()).map(String::valueOf).collect(Collectors.joining("\n"));

ocean quartz
#

Yeah navigation is a bit more complicated than lazy me can handle today ๐Ÿ˜ซ

half harness
#

what should i use as my "error occurred, should reattempt"?
a) a popup/separate window
b) a button under the console output
c) a button above console output
d) crash the app

jovial warren
#

like entity AI?

#

oh dear

half harness
#

hm

#

using Swing?

jovial warren
#

I hope I'm not gonna die inside when I have to put that into Krypton lol

forest pecan
#

you can if you want

half harness
#

because i dont want to make a whole JavaFX stuff for it lol

#

JavaFX is good, but imo not for small things like error popups

forest pecan
#

im an old developer so i use swing

#

but im trying to learn more jfx

ocean quartz
#

Yeah the part for navigation
I want to make a coroutines implementation of navigation
That actually walks through things like rails and shit
But my brain is too slow today

forest pecan
#

my brain is slower

#

๐Ÿข

obtuse gale
obtuse gale
#

The line separator string is defined by the system property line.separator, and is not necessarily a single newline ('\n') character.

jovial warren
#

a.k.a on Windows it'll use \r\n and on literally every other operating system it'll use \n

obtuse gale
#

\r tho

#

Hot

obtuse gale
#

7

#

Fuck off lmao

steel heart
#

Well I meant the method

obtuse gale
#

Yeah that's epic

steel heart
#

But Idk why 7 is the one that comes first whenever I google smtng java related

forest pecan
#

^

#

maybe you just suck

#

idk

steel heart
#

Maybe

jovial warren
#

oh btw, Fefo, could the parse result's nodes field being empty have anything to do with completion suggestions not working?

obtuse gale
#

I have the Java 11 API bookmarked lmao

jovial warren
#

OMFG I'm stupid

#

I swear if it's this

obtuse gale
#

Hi stupid I'm Fefo

surreal quarry
#

dude you don't need to tell us :)

#

we already knew that!

fleet bayBOT
#

Server ID 164280494874165248
Shard [3442 / 10240]
Pod r1-pod-229
Node node-6
Server Region US East

obtuse gale
#

:o

jovial warren
#

OMFG

loud gyroBOT
jovial warren
#

guess what it was

jovial warren
#
private fun handleTabComplete(session: Session, packet: PacketInTabComplete) {
    server.commandManager.suggest(session.player, packet.text).thenAccept {
        session.sendPacket(PacketOutTabComplete(packet.id, it))
    }
}
#

look at that

#

now, what would text be if we type in a command?

obtuse gale
#

I saw what you edited out lmfao

jovial warren
#

lol

obtuse gale
#

But yeah

surreal quarry
#

lol

jovial warren
#

Brigadier tries to parse a literal with name "/command", can't find one with that exact name, and returns no parse results

obtuse gale
#

It sends the entire chat buffer

jovial warren
#

I literally fucking called it

#

I said "I bet it's gonna be something really stupid"

half harness
#

so if I have something like this: should it close the program if the user presses 'no'?

#

dont question my drawing skills

forest pecan
#

nice drawing

surreal quarry
#

nice drawing

forest pecan
#

nice drawing

half harness
#

-_-

obtuse gale
#

๐Ÿฅฒ

half harness
#

but seriously

surreal quarry
#

make it so they literally can't exit the program