#dev-general

1 messages · Page 173 of 1

empty flint
#

oh what the fuck is this shit?!
[17:44:41 WARN]: java.lang.ClassCastException: me.blocky.ranks.lib.enchantment.Glow cannot be cast to me.blocky.ranks.lib.enchantment.Glow

jovial warren
#

haha

empty flint
#

well why the fuck not dude

obtuse gale
#

f

empty flint
#

Never had that kind of error

jovial warren
#

@prisma wave I think I figured it out maybe

distant sun
#

am I the only that encounter some issues with IIJ randomly freezing after updating to 2020.2.1?

jovial warren
#

@prisma wave apparently when I try to instantiate JDALink using this, it comes back with: "Type mismatch: inferred type is Lavalink<T> but JDALavalink was expected"

#

could that have anything to do with it?

#

I mean, still getting an NPE, but somewhere different this time I think

prisma wave
#

quite possibly

lunar cypress
#

@obtuse gale since you're online right now, I just wanted to ask you again if that issue with spigot-maps was resolved for you through the last update

obtuse gale
#

I actually havent tested it tbh,

#

I can when I get a chance next and let you know, ive still just been using that fixed version that I made, but ill swap to ur version when I get back on my main pc, im on my laptop rn

lunar cypress
#

ok great, just wanted to check back so I know when I can close the issue

jovial warren
#
class LavalinkPlayer(
    private val link: Link
) : IPlayer {

    init {
        addListener(InternalPlayerEventHandler())
    }

    val listeners = CopyOnWriteArrayList<IPlayerEventListener>()

    override fun addListener(listener: IPlayerEventListener) {
        listeners += listener
    }
}
```first one to spot the problem with this gets a cookie
#

(hint: if you know how the Kotlin compiler works, you'll understand instantly)

hot hull
#

meth fingerguns

listeners += listener

jovial warren
#

you're on the right track, but what's the problem with that

hot hull
#

Nothing, just meth

old wyvern
#

reassignment of a final variable?

jovial warren
#

nope

old wyvern
#

hmm

jovial warren
#

since += works in Kotlin, it's the equivalent of listeners.add()

hot hull
#

Yea was just about to say, smexy

#

Kind of strange, but neat

prisma wave
#

ew

#

CopyOnWriteArrayList

jovial warren
#

yeah ik, should probably get a replacement for that, but still, that's not the issue

#

another hint: think about the order

hot hull
jovial warren
#

wait you got your resources deleted? wow

old wyvern
#

since += works in Kotlin, it's the equivalent of listeners.add()
That depends on the functions available on the class

jovial warren
#

I'm still surprised none of you have figured it out yet

old wyvern
#

if you have only plus that would try to reassign

prisma wave
#

listeners hasn't been initialized yet

jovial warren
#

finally

prisma wave
#

logic in constructors bad

old wyvern
#

ah init block

#

move it down?

jovial warren
#

exactly what I did lol

#

anyway BM, here's your cookie:

#

🍪

prisma wave
#

yay

jovial warren
#

yeah it took me a little time to figure out that one myself before I showed it to you lot

jovial warren
#

also is it just me or is the fact that apparently "Evaluation of suspend functions is not allowed" or whatever is the most annoying thing when the entire thing you're trying to debug is entirely based around coroutines

prisma wave
#

didn't they massively improve coroutine debugging in 2020.2 or something?

jovial warren
#

maybe I need kotlinx-coroutines-debug

#

also what might be a better idea is instead of actually querying the REST API, I use something like mock web server or mockk to imitate the responses

empty flint
#

How do I specify the output dir of the gradle build task?

#

And how do I shade packages?

#

basically this but in gradle:

<build>
        <plugins>
          <!-- Maven shade plugin -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.1</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <createDependencyReducedPom>false</createDependencyReducedPom>
                  <relocations>
                    <relocation>
                      <pattern>me.blocky.lib</pattern>
                      <shadedPattern>${project.groupId}.lib</shadedPattern>
                    </relocation>
                  </relocations>
                  <finalName>${project.name}-${project.version}</finalName>
                  <outputDirectory>deployment</outputDirectory>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
        <directory>${build-directory}</directory>
jovial warren
#

wdym output dir of gradle build task?

ocean quartz
#

Make a copy task

jovial warren
#

the output dir is build/

#

the same as Maven's target/

empty flint
#

wdym output dir of gradle build task?
@jovial warren where the classes and jar file gets placed

jovial warren
#

I didn't know you could change that

empty flint
#

the output dir is build/
@jovial warren right, I would like to change that

#

you can in maven, I'd be surprised if gradle couldn't do that

#

Make a copy task
@ocean quartz that does what exactly?

jovial warren
empty flint
#

yeah I didn't know it was called "build" directory. I googled output dir and it gave me a bunch of stuff that didn't work or I didn't understand

#

ty

prisma wave
#

make a task that copies the jar from build/libs to somewhere else

ocean quartz
#

Yeah this is what i meant ^

empty flint
#

I found a shadow task

#

but it's so hard translating from groovy to kotlin

#

when I have no fucking clue what those things mean

#

gonna have to learn groovy syntax I guess

ocean quartz
empty flint
#

ty

ocean quartz
#

Oh, it's not about the groovy stuff xD
Just a video i watched earlier

errant geyser
#

Is that... Eclipse?

ocean quartz
#

No?

errant geyser
#

Or is it just IJs light theme

ocean quartz
#

It's IJ yeah

errant geyser
#

🤢

ocean quartz
#

His sealed class explanation was pretty good

empty flint
#

What could be the reason for a plugin to not import stuff in gradle?

#

I looked at multiple examples online and the ShadowJar task just isn't recognized.

#

with unresolved references

#

the more I use it the more I hate gradle. nothing works and everything has multiple ways of specifying shit only for that shit to not work again

heady birch
#

Agree

#

Maven just works

empty flint
#

and it's well documented with lots of examples. if you google shit for gradle ur lucky to get an answer for groovy. and only if you know what the things you are googling for actually are and do because whatever you google there's something that does it, but it's probably not what you want. And fuck you if you dare use kotlin dsl because no examples can be found for those.

#

it's just frustrating

old wyvern
#

What are you having issues with borz?

empty flint
#

and passing variables to subprojects is more difficult than it needs to be

#

What are you having issues with borz?
@old wyvern just ranting about gradle again, same old.

#

Can't get the shadow plugin to work

#

because it's doc is in groovy and the examples I found for kotlin dsl don't work

#

and there is no useful error msg that tells me why

#

or what to do

old wyvern
#

The examples should in both I think

#

lemme check

empty flint
#
buildscript {
    repositories {
        // Using Bintray repository:
        maven { url=uri("https://dl.bintray.com/davideas/maven") }
        // or Gradle plugins repository:
        maven { url=uri("https://plugins.gradle.org/m2/") }

        jcenter()
    }
    dependencies {
        // Using Bintray or Gradle Plugins repository
        classpath("eu.davidea:grabver:2.0.2")
        classpath("com.github.jengelman.gradle.plugins:shadow:6.0.0")
    }
}

apply(plugin = "com.github.johnrengelman.shadow")
ocean quartz
#

You shouldn't need the buildscript nor the apply

empty flint
#

Well how the fuck am I supposed to know that?!

#

xD

#

what should I need

#

and why

#

like... it's so beginner unfriendly it's unreal

old wyvern
#

Have you checked that out yet?

#
plugins {
  id "com.github.johnrengelman.shadow" version "6.0.0"
}```
ocean quartz
#

This is an example of what i use, it's basically just this

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.4.0'
    id 'com.github.johnrengelman.shadow' version '5.1.0'
}

shadowJar {
    relocate("me.mattstudios.mf", "me.mattstudios.thing.mf")
    relocate("me.mattstudios.mfgui", "me.mattstudios.thing.mfgui")

    archiveFileName = "Thing-${project.version}.jar"
}
empty flint
#

exactly what I mean by "the examples do not work"

prisma wave
#

Because they're for groovy

ocean quartz
#

Yeah in kotlin dsl is tasks.shadowJar() {}

empty flint
#

also tried that

old wyvern
#

You dont need the () I think

ocean quartz
#

Import it

empty flint
#

already did

#

doesn't recognize it

ocean quartz
#

Not like that

empty flint
#

not working, kotlin dsl got some compilation errors all of a sudden

ocean quartz
#

Oooh i didn't know in Kotlin you could specify a deprecated level, like from warning to error

#

Show your entire gradle

prisma wave
#

Oooh i didn't know in Kotlin you could specify a deprecated level, like from warning to error
@ocean quartz yeah you can also add code that it can replace with Alt Enter

#

Very cool

ocean quartz
#

Yeah, really cool
Also have you ever used Kotlin's contracts?

empty flint
#

=haste

compact perchBOT
#
HelpChat Paste

Please use a paste service to share configs, errors, code and long logs.
HelpChat Paste

empty flint
#

everything broke

#

Unresolved reference: KotlinCompile

#

and it doesn't tell me why

#

or whats wrong

errant geyser
#

You are doing this in a build.gradle not a build.gradle.kts file right

empty flint
#

no

#

kts

errant geyser
#

You're trying to use Groovy in a Kotlin script

empty flint
#

where

errant geyser
#

.kts is kotlins script file extension

empty flint
#

I know

#

where am I trying to use groovy?

errant geyser
#

Its the Groovy syntax

ocean quartz
empty flint
#

oh yeah that's not the right one

ocean quartz
#

Try this

empty flint
#

probably doesn't work because I fucked up my main gradle build file

ocean quartz
#

Import it..

empty flint
#

or something

#

idk

#

Import it..
@ocean quartz You said not to do it with the import statement

#

I did it like you said

#

from the groovy tool thingy

ocean quartz
#

Importing a gradle change is literally just clicking this button

empty flint
#

yes

#

I did

#

it didn't do shit

ocean quartz
#

I have no idea what you have done then, because that works perfectly fine for me

empty flint
#

exactly

#

fuck gradle

#

I'll go take a break

ocean quartz
#

Not gradle's fault here

old wyvern
#

Does shadow come up under tasks section?

empty flint
#

not gradle's fault but I didn't need help from 5 people to set this up in maven is all im saying

#

Does shadow come up under tasks section?
@old wyvern I'll check when I get back to it

old wyvern
#

Alrighty

errant geyser
#

Thats because you understand Maven

empty flint
#

im done for now

#

Thats because you understand Maven
@errant geyser Without prior knowledge, just like gradle

#

and it was easy to just look stuff up and copy-paste solutions until I figured out what stuff did and tinkered with it

#

with gradle you can't even get started because tehre's 5 different solutions and none work and if you pick the wrong one it fucks up your whole IDE and now nothing compiled even though I reverted it

prisma wave
#

@ocean quartz I know how they work but I don't really have a use for them

empty flint
#

I'll go cool off. See you guys later. Sorry for the rant...

ocean quartz
#

Sx showed me an example yesterday and it's pretty cool, like compile time dynamic nullability and stuff

errant geyser
#

You still have contact with Sx? 😱

ocean quartz
#

Yeah lol

onyx loom
#

🤣

prisma wave
#

same

steel heart
#

why does intellij show this: directory¥file.txt instead of normal directory/file.txt

#

anyone knows how to fix?

lunar cypress
#

You bought that file from china

steel heart
#

huh

hot hull
#

What a comedian

jovial warren
#

hey just curious: since the Bukkit/Spigot/Paper/whatever the fuck else people use these days API is under GPL, does that mean that if I was to say purchase a premium plugin, I could request the source code and they must provide it to me no matter what?

#

since they're using something licensed under GPL, and GPL cannot be sublicensed, that means that their project must also be licensed under GPL

#

I'm just curious of anyone knows anything about this, since I'm just curious about these sort of things lol

ocean quartz
#

I could be wrong, but technically yes, everything done for bukkit needs to be GPL compliant, but, doesn't mean the person will and if they don't you can take it legally but is it worth it lol?

jovial warren
#

I mean, if you've got the money to take them to court, you're likely to win the case

#

so any developer who isn't a dick head will give you the source code then I guess

steel heart
#

I don't think the seller is required to give you permission to the source code?

jovial warren
#

they're required to give you the source code by the rules of GPL @steel heart

#

if you request it

#

and if you've purchased it

steel heart
obsidian hamlet
#

small question guys, can we do ItemStack & ItemMeta stuff async ?

#

and looping through an inventory async ? 😛

steel heart
#

uh

obsidian hamlet
#

?

steel heart
#

No I don't think

dusky drum
#

why isnt holographicdisplays plugin on spigotmc?

steel heart
#

its on bukkit?

dusky drum
#

ye

#

but why?

steel heart
#

the author is probably too lazy

dusky drum
#

can i link download of plugin on spigot in my plugin or is it not allowed to share non spigot links?

steel heart
#

I think it should be fine

dusky drum
#

ok will check spigot discord to make sure but thanks.

#

i cant belive he accualy linked my plugin under description as plugins using this plugin wow.

#

what tha heck is this on 1.16.2
java.lang.IllegalStateException: No API implementation set. Is Holographic Displays enabled?
works fine on 1.16.1

#

eh

#

updated plugin works fine

eager leaf
#

Gaspar, you got HD working on 1.16.2? What version of HD are you using?

dusky drum
#

2.4.4

#

latest on bukkit

eager leaf
#

looks like I still had 2.4.3, oops...

dusky drum
#

XD

onyx loom
#

do SortedMaps preserve the position of the keys? and if so how would i get the position of said key?

prisma wave
#

they maintain an order

#

they don't have indexed access if that's what you mean

onyx loom
#

yeah

#

so what would be the best way to go about getting this then? the only thing i can thing of is to put the keys into a list and get the index that way

prisma wave
#

that'll work

#

you could also just iterate over the entrySet

#

since that's O(n) at worst

obtuse gale
#

Who here knows their stuff about reflection?

prisma wave
#

Ask away

obtuse gale
#

make me angry_fingerguns

#

mm nvm

#

you'll ?tryandsee me lmao

prisma wave
#

I would never

onyx loom
#

:what:

#

if u need help, then ask, this is helpchat fingerguns

dry hedge
#

lkkkkkkkkkkkkkkkkkkkkklllkkklklk

prisma wave
#

?

onyx loom
#

🌝

obtuse gale
#

🙂

static zealot
#

I would never
never in a million years

prisma wave
#

i wouldn't go that far

#

maybe

#

like a year

static zealot
#

oh that's pretty far as well I would say

#

1 minute maybe?

empty flint
#

Alright

#

new day

#

new try with gradle

rotund egret
#

Obfuscation via kotlin

prisma wave
#

clojure*

rotund egret
#

Wingdings*

empty flint
#

@jovial warren Does the license specify in what format I have to give them the code?

#

Also, keep in mind that copyright law isn't international and each country has their own way to deal with it

ocean quartz
#

If you normally write obfuscated code, sure, no problem. Running perfectly normal looking code through an obfuscator with the purpose of making it difficult to read or maintain, however, is not.

#

Technically speaking the code cannot be obfuscated

empty flint
#

Technically speaking the code cannot be obfuscated
@ocean quartz Why? You're allowed to modify it. Who says it has to be human-readable?

heady birch
#

☝️ He got a good point

ocean quartz
#

Because you didn't write it like that, if you write it obfuscated then yes, but you cannot modify it just to be hard to read later

empty flint
#

Also, how do you prove your obfuscation was the result of trying to make it hard to read and not some other purpose?

#

Because you didn't write it like that, if you write it obfuscated then yes, but you cannot modify it just to be hard to read later
@ocean quartz Why not?

#

How do you prove you used a tool to obfuscate?

#

What if you write it normally and it obfuscates itself because you wrote an obfuscator in it to run on itself?

ocean quartz
#

I am not a lawyer nor was the one making the license, don't ask me lol
I'll quote what I said earlier

doesn't mean the person will and if they don't you can take it legally but is it worth it lol?

empty flint
#

Then the obduscation becomes part of the purpose itself

ocean quartz
#

As a base and as it stands yes you cannot obfuscate it, does it matter though? Probably not, no one will pursue legal actions if that happens but in court you'd probably lose

empty flint
#

Would that not also mean that mc server hosts and anybody owning a server would have to give the public access to the whole server setup?

old wyvern
#

Wha

ocean quartz
#

No, GPL applies to the software and it's addons not the usage

heady birch
#

No

#

Unless they redistribute it

#

Idek what is being talked about

old wyvern
#

About if code can be obfuscated in accordance with GPL i think?

heady birch
#

Hm well

#

I think its if you redistribute your version at all, you need to be able to provide the original source as well

#

or something like that

old wyvern
#

Ah

ocean quartz
#

The “source code” for a work means the preferred form of the work for making modifications to it.

heady birch
#

byte code 🙂

#

pure byte code

old wyvern
#

Easy soln

#

Use non java JVM languages

empty flint
#

preferred by whom?

old wyvern
#

Decompile it

#

Recompile it

#

Fuck it all

#

🙃

empty flint
#

Who determines what's preferred?

ocean quartz
#

The judge

empty flint
#

Since I have kotlin code, do I have to provide the source code in java? which doesn't exist?

ocean quartz
#

No?

old wyvern
#

No in kotlin technically

empty flint
#

The judge
@ocean quartz Not many judges know a thing about software

old wyvern
#

Unless you decompile and move the resultant code to Java I guess?

ocean quartz
#

It doesn't matter lol

empty flint
#

No?
@ocean quartz why not? java is preferred over kotlin

old wyvern
#

Idk you can probably find a workaround

ocean quartz
#

What

old wyvern
#

No one really goes to court for this shit

ocean quartz
#

You wrote the software in Kotlin, that is the preferred way

heady birch
#

I prefer it in Rust. You are legally required to change it to Rust for me 🙂

empty flint
#

java is more widely used, you could argue it's prefered on that basis

ocean quartz
#

And it doesn't matter if the judge knows or not about software they'd be the ones judging you, what they say is final lol

old wyvern
#

If client stated it must be in Java you shouldnt be using kotlin in the first place

heady birch
#

Your honour

empty flint
#

And it doesn't matter if the judge knows or not about software they'd be the ones judging you, what they say is final lol
@ocean quartz not how the law works actually. appeals are a thing

heady birch
#

Please be aware of my clients earlier statement: "kotlin good java bad"

ocean quartz
#

Jesus, you're taking this way too far ahead lmao

old wyvern
#

Have there ever been a court case about a bukkit plugin?

#

🤔

ocean quartz
#

Doubt it

empty flint
#

Jesus, you're taking this way too far ahead lmao
@ocean quartz That's where I would take it if somebody sued me to get their hands on my code. If you ask me not even close to far enough

onyx loom
#

Have there ever been a court case about a bukkit plugin?
@old wyvern i hope to god that there hasnt been

ocean quartz
#

You'd be the one losing money in that case

#

Over a damn plugin lol

old wyvern
#

Tell them prior to starting about conditions

#

Get proof of their agreement to ot

empty flint
#

I'm not so sure tbh and a damn plugin can mean a lot of money in the case of a few premium plugins otu there

ocean quartz
#

Most of the big premium plugins are open source and GPL compliant though

old wyvern
#

Do you have to provide the source for premium plugins to all clients?

#

🤔

#

By law I mean

ocean quartz
#

By law, technically yes, if they asked, but no one cares

onyx loom
#

Most of the big premium plugins are open source and GPL compliant though
@ocean quartz tbh most big plugins in general are os anyway

old wyvern
#

Ah

ocean quartz
#

Yeah

old wyvern
#

Time to go around sueing people 😂

#

Jkjk

onyx loom
#

ez money surely 🤔

#

u havent provided source, give me $10000

old wyvern
#

How much would it cost the person for such a case?

#

I mean the dev not thr client

ocean quartz
#

A lot of people hold tight to their source and do everything they can to prevent leaks and it ends all the same way lmao
Then there is the ones with open source who don't worry about anything

#

Idk, it'd depend on the country

old wyvern
#

Ah

onyx loom
#

Then there is the ones with open source who don't worry about anything
a life without stress 🙃

ocean quartz
#

Some countries wouldn't even take the case seriously

old wyvern
#

Well Cases in my country takes years

onyx loom
#

a minecraft plugin being brought to court kekw

ocean quartz
#

Best case would be to sue in the US

old wyvern
#

And i mean like 6-10

#

🙃

#

I mean does the client approach the court of his country

#

Or the dev's country?

ocean quartz
#

I think it's based on the country you sue it on

#

Like let's say you're from UK, you want to sue me (I am from Portugal) you can sue me in the US

old wyvern
#

Lol

ocean quartz
#

It's stupid yeah

old wyvern
#

Would you have to visit court in the US?

ocean quartz
#

Then again don't take anything I say about legal shit seriously, i have no idea about this shit, i am not a lawyer xD
And i think so, idk what happens if you don't

old wyvern
#

😂

onyx loom
#

great advice matt

#

ima sue people in the us now

old wyvern
#

Well, meet you in US then matt 😂

ocean quartz
#

Ah shiittt xD

old wyvern
#

You coming kali?

#

Lets all sue each other

onyx loom
#

hellll yeahhhhhh

old wyvern
#

And do a big meet up

onyx loom
#

😎

old wyvern
#

🤞

empty flint
#

im not publishing my code, I'd rather destroy it than let that abomination of software abuse that crawled out my my nasty ass keyboard and into the servers of literally 10s of people see the light of day

#

I doubt I can be sued for damages if I destroy my source code after publishing the plugin

#

updates require re-writing the plugin

#

but it's worth it

analog crater
#

The shitty source can be made from the bytecode

quiet depot
#

wew

oak coyote
#

Wait what is that guy on about?

hot heron
#

Any reason that I shouldn't just provide my library as a maven project and let the user install/shade it into their plugin?

surreal quarry
#

whats the other alternative? having them copy paste the code?
for libs i always make a lib project then shade it as i need it

hot heron
#

I've just never made a lib before that I planned on making public

#

I didn't know if people preferred that or if they preferred a jar they could manually include

#

I prefer the shade option, was just looking for outside opinion

ocean quartz
#

Most people don't like working with jars

hot heron
#

Yeah, good to know. Only need to figure out how to unregister a custom entity in 1.16 and I can release version 1.0 of this lib 😛

empty flint
#

is it best practice to manage the build and dependencies of submodules in their own build.gradle file or in the root build file?

hot hull
#

Probably their own

split talon
#

The best practice is to write your entire plugin into one file named Main

obtuse gale
#

except its better to name it main, not Main

split talon
#

Ah my bad. I’m still a noobie

empty flint
#

why does

plugins {
    id("org.jetbrains.kotlin.jvm") version ("1.4.0")
}

compile just fine but

val kotlinVersion = "1.4.0"
plugins {
    id("org.jetbrains.kotlin.jvm") version (kotlinVersion)
}

doesn't?

#

help? 😛

hot hull
#

isn't it def for variables in groovy?

empty flint
#

this is kotlin dsl

hot hull
#

Oh

split talon
#

var insteal val maybe?

#

Idk kotlin

empty flint
#

val just means the variable is not re-assignable. const in java

obtuse gale
#

final

empty flint
#

eh sorry, final of course

dusky drum
#

how to upgrade gradle in project?

hot hull
#

gradle -> wrapper -> settings or some shit file name

#

Then change the version and reimport everything

dusky drum
#

where is gradle?

hot hull
#

the folder above your src dir

dusky drum
#

ye but where can i find wrapper?

hot hull
#

sec lemme open IJ

lunar cypress
#

Run gradlew wrapper --gradle-version [ver]

dusky drum
#

and how can i run that if i type that under gradle it just tries to build..

lunar cypress
#

No it doesn't

dusky drum
#

it does for me

lunar cypress
#

Show me

hot hull
#

Gasper

#

open the gradle dir above your src dir

#

Which contains the wrapper

#

then there's a properties file

dusky drum
#

ye?

lunar cypress
#

Manually editing files is so 2008

hot hull
#

shh Johnny

dusky drum
#

johnny i got your's to work i waas in wrong directory.

#

Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details

FAILURE: Build failed with an exception.

#

frik

lunar cypress
#

What's the exception?

dusky drum
#

idk how that happens if i set version above 6.0

heady birch
#

Oh this issue

hot hull
#

Change it manually fingerguns

lunar cypress
#

Oh yeah then you do need to do it manually

heady birch
#

Gasper

dusky drum
heady birch
#

An exception has occured

#

Hope that helps 🙂

lunar cypress
#

Wrong dir

dusky drum
#

thatws .gradle

lunar cypress
#

gradle

dusky drum
#

thats all there is

lunar cypress
#

Not .gradle

hot hull
#

Gasper

dusky drum
#

and where do i get distribution url?=

hot hull
#

Just change it to 6.5.1

lunar cypress
#

Just change the version in there

dusky drum
#

okay.

lunar cypress
#

The rest stays the same

dusky drum
#

why 6.5 if theres 6.6?

hot hull
#

then 6.6

#

I don't check for updates fingerguns

dusky drum
#

ok

jovial warren
#

hey @heady birch if I purchase KiteBoard, would you give me the source code? (GPL says you're supposed to but I'm just curious lol)

heady birch
#

Lol

jovial warren
#

weird question but just try not to ask why lol

heady birch
#

Probably not

#

i mean if theres anything specific you want to see

jovial warren
#

er... don't ask how I know it has this lol, but I wanna see how your command system works

#

because the Argument/Arguments thingy and Completor seem pretty cool tbh

heady birch
#

How you know that lol

#

Ive probably shown every aspect at some point

jovial warren
#

er... I may or may not have downloaded a cracked version, ran it through a deobfuscator and then decompiled it...

heady birch
#

🙁

jovial warren
#

I just wanted to deobfuscate a plugin for fun lol

#

please don't scald me

heady birch
jovial warren
#

yeah I'm on 3.0.8 lol

heady birch
#

It might be a little different

jovial warren
#

a little behind that

#

lemme show you what I got

heady birch
#

no Context or Registerer or TabCompletor

jovial warren
foggy pond
#

Pro Premium Elite Full Which name fits best a premium resource? 😂

jovial warren
#

er... Premium obviously

heady birch
#

how the hell did you get the original names back?

foggy pond
#

Yeah thought so

jovial warren
#

@heady birch Java deobfuscator figured them out

heady birch
#

ive always wondered because the original names would show in stacktraces..

foggy pond
#

But I think that it's kinda lame to have your premium version of the plugin... be called premium 😂

jovial warren
#

all of them, except for the UpdateChecker1, which is a synthetic class

heady birch
#

oh yeah thats Chocos updater

jovial warren
#

if you tell me which obfuscator you used, I could probably get a better result 🙂

heady birch
#

proguard

jovial warren
#

it's proguard? okay

heady birch
#

its pretty wack now

jovial warren
#

so that's why everything's named IIIIIIIiIiIIiiiiIi

heady birch
#

^ well it was

#

not anymore

jovial warren
#

until Spigot updated their rules

heady birch
#

since these new spigot riles

jovial warren
#

yeah

heady birch
#

yeah

hot hull
#

Imagine obfuscating your plugins 🤢

jovial warren
#

I gotta buy it to get the latest version to deobfuscate right?

#

Imagine obfuscating your plugins 🤢
@hot hull ikr lol

#

I hope you don't mind Niall, I'm not gonna share it, I just wanna practice my skills lol

heady birch
#

yeah that should be fine

jovial warren
#

I tried using the deobfuscator on LiteBans first, but I guess it's still breaking the rules, since the main class name and package hierachy are bad

heady birch
#

out of interest did it reverse variable names?

jovial warren
#

nope

#

but you can kinda figure those out from context sometimes

heady birch
#

some plugins have exemptions

jovial warren
#

like I can figure out that any variable with private KiteBaordPlugin IIIIIIIiIiIIiiiiIi is probably named plugin, and anything that returns that instance is probably getPlugin()

#

some of them are a tiny bit more difficult

heady birch
#

yeah

#

go ahead for the decompiling

quiet depot
#

fun fact java deobfuscator is made by an old mc guy

jovial warren
#

also this Metrics class (from bStats I know) seems to like doing this: java public Whatever myMethod(MyVariable myVariable) { if (myVariable == null) { throw new IllegalArgumentException(); } } a lot instead of just using @NotNull from like JetBrains annotations or something

#

like wtf lol

#

look at the Metrics class from bStats

#

also @heady birch if I manage to deobfuscate and decompile this to a good standard can I have a cookie? lol

prisma wave
#

@NotNull doesn't carry any runtime semantics

heady birch
#

lol

#

roughly what line is that

quiet depot
#

does it generate code on compile bm?

jovial warren
#

you can find it in the constructor @heady birch

prisma wave
#

not that I know of

heady birch
#

Oh I see

jovial warren
#

line 52 in my version

prisma wave
#

it's just an IDE warning

heady birch
#

yeah there is no annotations there

quiet depot
#

well it definitely compiles or has runtime semantics

#

cuz if u pass a null value in, it’ll throw a runtime exception

#

try it

jovial warren
#

you know what the most tedious part about getting these files to java files was?

prisma wave
#

oh really?

quiet depot
#

yeah, i encounter it every now and then when debugging

mental stag
#

Oh nice embed

prisma wave
#

maybe IJ generates it

#

since annotation processing can't edit existing classes

jovial warren
#

the fact that when decompilers decompile class files, they give you the decompiled code, but you can't save it or anything, so I had to manually copy the contents of every single file one by one to java files

quiet depot
#

idk

heady birch
#

Lol

jovial warren
#

I'm paying £8.99 to get better at decompiling lol

#

deobfuscating*

quiet depot
#

wat

#

what decompiler are you using lol?

#

cfr exports to file

#

luyten exports to file

jovial warren
#

fernflower (IJ)

#

I was using luyten

#

but I couldn't find how to export

quiet depot
#

luyten can export fine, you wasted your time

jovial warren
#

lol

#

anyway, I gotta deobfuscate and decompile with a new version of KiteBoard now

#

I'm taking a screenshot of Niall's explicit permission, just in case xD

quiet depot
#

there is absolutely nothing niall can pin against you legally

heady birch
#

you may deobfuscate it as long as you don't redistribute any of it

mental stag
#

Just gonna... put this here

jovial warren
#

yeah of course I'm not going to redistribute it lol

quiet depot
#

you have a right by the gpl to redistribute it if you wish, however that’s by all means, a dick move since niall said no

heady birch
#

i never got the gpl properly

jovial warren
#

but I gotta use a new deobfuscator now since the old one doesn't support ProGuard lol

heady birch
#

pro guard isnt anything very special

#

especially with the settings I use

jovial warren
#

GPL cannot be sublicensed, meaning any work using a GPL-licensed project is also automatically licensed under GPL

#

and GPL is what entitles me to request the source code from you, and by GPL terms, you're supposed to give it to me, though I'm not fussed that you said no xD

quiet depot
#

that’s not necessarily true

#

iirc

heady birch
#

will open source it at some point

hot hull
#

Well I mean he doesn't have to give you source, unless you ofc take legal actions fingerguns

quiet depot
#

I don’t believe gpl explicitly disallows sublicensing, the sublicense just needs the same terms

#

obviously that’s fairly limiting in itself

#

the gpl is basically a contract

#

as far as licenses go, gpl is extreme

jovial warren
#

apparently ProGuard has a mappings file lol

mental stag
#

How does the license apply to something that technically doesn't include any of their code, just references

quiet depot
#

read up on the aggregate section of the gpl midnight

#

plugins are an extension to the base program, and are therefore considered an aggregate, and are covered by the gpl

jovial warren
#

anyone got any idea where ProGuard's mappings file is likely to be located? or is that like really old and not package any more

mental stag
#

Interesting

#

Eh, guess this gives me more reason to complete my server implementation

quiet depot
#

does it use nms?

mental stag
#

Nope

quiet depot
#

anywhere near cuberite or glowstone functionality wise?

mental stag
#

Not atm, I'm trying to get chunks in the game

quiet depot
#

what lang?

mental stag
#

But this is still early stages of development, so I'm doing pretty good

#

Kotlin atm

#

I plan to support all versions of Minecraft including MCPE

quiet depot
#

oo

#

similar goal to me

#

I’m in the midst of writing an api for both versions of the protocol, with implementations for bukkit, sponge, bungee, velocity, and nukkit

#

for use in papi 3, and my personal framework

mental stag
#

Nice, are you near Glowstone level atm

quiet depot
#

it’s merely an api, they’re hardly comparable projects

mental stag
#

Ah alright

#

Yeah, I'ma have to write the same api at some point

#

Maybe that'll save me some time if you make it open source

quiet depot
#

it is open source

#

or will be

empty flint
mental stag
#

Nice, any link?

quiet depot
#

what’s your gh?

#

I’ll add you

mental stag
#

camdenorrb

quiet depot
#

it’s closed source while in early development

#

prevents people from wasting time pring shit and making useless suggestions

mental stag
#

Alright

empty flint
#

So it disallows sublicensing but you can of course use and modify it

mental stag
empty flint
#

and you have to disclose source

quiet depot
#

ah ok blocky

#

my bad

#

thought it allowed sublicensing

empty flint
#

no but it doesn't matter, you have to disclose the source under a GPL compatible license

#

which as far as I could find out is only GPL3

#

if and when GPL4 comes out, that will probably be the only other one

#

so it's forward-compatible

onyx loom
#

@ clip gif me sauce for ploogin pleass

quiet depot
#

blocky you have to disclose the source if requested

mental stag
#

Thx

#

I like your gradle plugin btw

empty flint
#

blocky you have to disclose the source if requested
@quiet depot Requested by whom? And how do you know it has to be requested first?

quiet depot
#

my gradle plugin?

#

requested by whoever wants the source

mental stag
#
apply from: "https://cdn.piggypiglet.me/gradle/spigot.gradle"

dependencies {
  spigot "1.16.2-R0.1"
}```
quiet depot
#

you don’t have to publicly advertise “here’s my source”

#

you just have to give it when it’s asked for

#

oh lol

#

that’s not mine, stole it from someone else

mental stag
#

🤔

quiet depot
#

it’s pretty nifty though, which is why I stole it

obtuse gale
#

surely theres a way with reflection or something to loop through all the . classes in a package or all the classes that implement listener and register them all or something? Just something ive bee nthinking recently - idk reflection at all if you couldnt tell

mental stag
#

Wait did you steal that from Sxtanna?

quiet depot
#

yes

mental stag
#

Oml

#

Of course he made that

#

Lmao

quiet depot
#

you can access the classpath via reflection and get that info aj

#

but it’s so eh

obtuse gale
#

why?

quiet depot
#

not reliable imo

obtuse gale
#

wouldnt that be used by alot of people if its possible?

#

why not

quiet depot
#

I recommend scanning the jar itself

jovial warren
#

@heady birch can you tell me what Java version it was compiled with or do I have to view the Bytecode version for that?

obtuse gale
#

Just something I was thinking...

heady birch
#

1.8

jovial warren
#

cheers

obtuse gale
#

Whys it not reliable tho?

empty flint
#

surely theres a way with reflection or something to loop through all the . classes in a package or all the classes that implement listener and register them all or something? Just something ive bee nthinking recently - idk reflection at all if you couldnt tell
@obtuse gale Why not make an abstract class you derive all your listeners from and have it manage all the subscriptions?

quiet depot
#

I’ve just had issues with it in the past

#

if you’re insistent on using the classpath instead of scanning the jar, 2 popular libraries exist for the task

obtuse gale
#

I mean the computer does what its told... surely its not just gonna randomly decide not to lol

quiet depot
#

org.reflections & classgraph

#

it’s volatile

#

bukkit does funky stuff with class loading and shit

#

and that could also change at any time

obtuse gale
#

ah

quiet depot
#

ergo, unreliable

#

you know what doesn’t change though

obtuse gale
#

what if it was for jda then if its just a bukkit thing

quiet depot
#

the fact that your jar, contains all your class names, which can then be loaded, and sorted, and grouped into listeners, and whatever else you need

#

it doesn’t matter what way you go about it

#

the classpath isn’t really meant to be manually accessed

#

obviously you’re inherently safe if you use one of the libraries I mentioned earlier, as they’d update when something breaks

#

however by simply scanning the jar itself, you’re probably going to be safe for the future

#

also scanning the jar is trivial, scanning the classpath, is not

obtuse gale
#

ah alright, i doubt im gonna do it or anything just something id been thinking of...

quiet depot
#

it’s definitely worth doing imo

#

I do it in virtually all my projects

obtuse gale
#

hm

#

I didnt think it was something people actually did tbh

quiet depot
#

It’s extremely common

#

maybe not in the mc world, but definitely outside of it

#

iirc it’s a concept built into spring

jovial warren
heady birch
#

NO

hot hull
#

YES, good Niall.

heady birch
#

What class is that

prisma wave
#

deny it all you want

#

allman best

jovial warren
#

CommandManager

#

all of them are allman

heady birch
#

deobfuscator

jovial warren
#

haha

hot hull
#

As they should be.

jovial warren
#

@hot hull shut the hell up lol

hot hull
#

Nah

jovial warren
#

allman = trash

prisma wave
#

literally not

hot hull
#

Oi, tough talk for a fella within crusading distance

jovial warren
#

guess I might as well fix up this allman code then

heady birch
#

no
{
thank
}
you

#

🤮

jovial warren
#

lol

empty flint
#

wait so allmann good or allmann bad?

jovial warren
#

allman trash

empty flint
#

im confused as to what side to point my sword at

hot hull
#

allman good.

#

All these weebs don't have good taste

jovial warren
#

allman is this: ```kotlin
class Whatever
{
fun myMethod(): Boolean
{
if (myCondition)
{
return true
}
}
}

prisma wave
#

allman good

#

only the smartest people use allman

jovial warren
heady birch
#

i dont know why I love this

prisma wave
#

is that a joke

heady birch
#

no

#

its kind of cool

prisma wave
#

no i mean

#

is the video a joke

#

or is it serious

heady birch
#

which

jovial warren
#

basically defining and then initialising later

heady birch
#

where

jovial warren
#

CommandManager line 50/51

heady birch
#

i dont use that anywhere

#

probably the deocompiler

jovial warren
#

ah okay

#

so I'm guessing in this case, that's meant to be defined and implemented and then it's called in the if statement

#

like this: ```java
final Censored censored = censored1.censored2();
if (censored.censored3().censored4(censored[censored]))

#

if anyone can figure out what any of that means, I'll give you a pound lol

#

also btw, does @Override not stick around after compilation?

quiet depot
#

it should

#

k&r masterrace btw

jovial warren
#

^ I wanna be a part of that

#

lol

#

also @heady birch , AboutCommand line 45, who's ID is 333751?

heady birch
#

Yours

#

spigot replaces it when you download the jar

jovial warren
#

oh nice

#

didn't know you could do that

#

also what kinda funky code is line 38?

empty flint
#

Does allmann specify

if
{ 
  ...
} else 
{
  ...
}

or

if
{ 
  ...
} 
else 
{
  ...
}

?

jovial warren
#

bottom one I believe?

#

@prisma wave you'll know this

onyx loom
#

i hope bottom

hot hull
#

bottom one

onyx loom
#

} else
looks disgusting

#

} else {
is even worse

jovial warren
#

yeah, that's why it should be } else {

hot hull
#

Y'all have feeble minds, you can't handle allman fingerguns

empty flint
#

I actually think

if {
...
} else {
...
}

looks clean as fuck if the body is short. I guess Allmann is better for larger blocks and I forgot what the other one was called is better for smaller ones

jovial warren
#

no, it's just that my style is based around writing less code

empty flint
#

no, it's just that my style is based around writing less code
@jovial warren dude, linebreaks don't count as writing code are you mental? 😄

jovial warren
#

but pressing enter every 5 seconds is effort

#

lol

empty flint
#

let the IJ formatter do its job then

jovial warren
#

also @heady birch , why are the arguments classes factories? just curious lol

heady birch
#

you mean the getInstance() ?

jovial warren
#

no, I mean the public static Arguments create() or whatever it's called method

heady birch
#

oh

jovial warren
#

I'm just guessing it's create since it looks like a factory method

heady birch
#

its kind of like a builder I guess

jovial warren
#

ya know, sometimes I really can't tell whether these variable names are just what happens when you decompile code or your poor variable naming xD

heady birch
#

show example

jovial warren
#

final StringBuilder sb = new StringBuilder(); (I know everyone names it this, but ya know, still kinda bad xD)

heady birch
#

nah

#

i either name it

#

<thing>Builder

#

or stringBuilder

jovial warren
#

tbh so far, I think I'm actually doing an alright job at this

#

the CommandContext was probably the easiest to name so far

#

I've named the String value in the Argument class rawValue because that's what it looks like, that's about the only variable name I'm not actually sure on so far

heady birch
#

just realised Completor is spelt wrong

jovial warren
#

oh and required, thanks for that as well xD

heady birch
#

whereas the implementations are spelt right 🤦‍♂️

jovial warren
#

lol

#

I just called it completor

#

also @heady birch , what kinda whack code is ```java
for (int length = arguments.length, i = 0; i < length; ++i)

#

like why did you create the length variable when you only use it once

#

unless that's again not something that you did

#

also if anyone knows how to force IJ to inspect raw .java files, lemme know

heady birch
#

wheres that?

#

Arguments?

jovial warren
#

line 45 yeah

heady birch
empty flint
#

Allmann clean.

#

I just reformatted all my code in IJ

#

lol

jovial warren
#

ah okay, so now I know that anywhere that's done, it's a for each

#

cool

empty flint
#

Can't read shit anymore because it doesn't look like I had coded it lol

foggy pond
#

does <plugin name> overload sound bad for a premium version of a plugin 😂

steel heart
#

what plugin?

foggy pond
#

Karma, you can tell roughly what it is about just by its name

#

I don't wanna have something basic like Pro or Premium

#

Too cool for that 😎

heady birch
#

KarmaOverload

empty flint
#

does <plugin name> overload sound bad for a premium version of a plugin 😂
@foggy pond Go with Karma Karmelion

heady birch
#

Lol

steel heart
#

Overload sounds little too off topic

#

but the choice is yours

foggy pond
#

And yeah I guess, my only worry is that overload is usually a negative word isn't it?

jovial warren
#

also what kind of a class is CommandRegisterer @heady birch ? lol

empty flint
#

What about Karma Prime which is where the word premium comes from?

heady birch
#

A mess thats what it is

jovial warren
#

yeah... I can see that

heady birch
#

It adds the command alises in the config

#

With some weird reflection thing

#

CommandMap

foggy pond
#

Yeah Prime does not seem that bad

#

I liked how Overload sounds better, but Prime makes more sense

empty flint
#

Just an fyi tho, I'm using it for my premium plugins as well

jovial warren
#

yeah was gonna say, this reflection is proper wack

foggy pond
#

I mean it is not as common as Premium or Pro so it would still be better than those

jovial warren
#

I keep forgetting that this is Java and that all code needs to finish with ; lol

#

though I get reminded when I press enter and it gives me like a 12 space indent

#

okay @heady birch wtf lol
wtf is this: ```java
} catch (NoSuchFieldException exception) {
final IllegalAccessException ex;
ex.printStackTrace();
} catch (IllegalAccessException ignored) {
// we ignore this because this should never happen, I guess
}

heady birch
#

?

#

hows that possible?

#

lol

#

final but its not assigned

jovial warren
#

yeah no idea lol

#

what's it supposed to be? something like this?java } catch (NoSuchFieldException | IllegalAccessException exception) { exception.printStackTrack(); } or did I get it right in my comment saying that the IllegalAccessException is ignored

heady birch
#

if this the the commandRegistrar still

#
} catch (NoSuchFieldException | IllegalAccessException e) {
    e.printStackTrace();
}```
jovial warren
#

okay cool

#

it's really handy that the deobfuscator was able to automatically reverse all class (I mean class, enum, interface, etc. lol) names for me, otherwise I think this would be a lot harder and I'd probably be here all day lol

heady birch
#

yeah i wonder ifs written into the class file or something

jovial warren
#

probably

heady birch
#

because I notice even with obfuscation the stacktraces show the actual class name

jovial warren
#

yeah

#

it's probably in some sort of signature somewhere

#

also is your API shaded in here somewhere btw?

#

because I wouldn't've thought that'd be the sort of thing you could get away with obfuscating

heady birch
#

yeah

#

those classes are not obfuscated

jovial warren
#

and yet I can't find them lol

oak coyote
#

You shouldn’t obfuscate apis

heady birch
#

They are in the same packages as the implementations e.g

jovial warren
#

I don't obfuscate anything, I'm just testing my skills deobfuscating Niall's KiteBoard (with his permission of course)

heady birch
#

a.b.c.d.e.a.class
a.b.c.d.e.b.class
a.b.c.d.e.c.class
a.b.c.d.e.Criteria.class
a.b.c.d.e.CriteriaRegistry.class

jovial warren
#

oh criteria

#

yeah that's in net.kitesoftware.board.criteria for me

#

maybe a couple of these package names were figured out by the deobfuscator as well idk

heady birch
#

as far as im aware

#

the package names that have an api class in remain the same

jovial warren
#

ah okay

heady birch
#

Like this

jovial warren
#

yeah

#

what's the package containing all the animation stuff in called btw?

#

because I called it "animations"

heady birch
#

animation

obtuse gale
#

bruh this is so annoying lol

jovial warren
#

with the package containing Colour called "colour", the gradient stuff "gradient", and then the implementations "impl"

obtuse gale
#

intellij picks up all 5 of my macro keys as F24

#

so I cant use them with ij

jovial warren
#

actually nvm I called it "animation", so I was spot on lol

heady birch
#

yeah exactly

jovial warren
#

wait I got those bang on as well?

heady birch
#

yeah

jovial warren
#

you wanna know where I got impl from

#

you showed me that screenshot of the command package and I saw all the commands were in impl lol

heady birch
#

yeah

jovial warren
#

I see you haven't changed the configuration package since the old 3.0.8 cracked version I deobfuscated and decompiled last time lol

heady birch
#

yeah

#

its kind of wack all that stuff

#

i made some cool annotation for it though I guess

jovial warren
#

yeah it seems like a cool idea

#

some of these things you made in here could probably be published as separate libraries tbh

#

just maybe with a little tweaking

#

like you have a full animation API and command framework built-in to this

heady birch
#

True

jovial warren
#

giving back to the community isn't such a bad idea lol

#

also why do you initialise your default settings in GlobalSettings using a static block btw?

#

and you do the same in LanguageSettings

#

that's definitely changed

heady birch
#

That will be the decompiler/deofsucator

jovial warren
#

ah okay

#

can I share the GlobalSettings class I have in here?

heady birch
#

yeah

jovial warren
#
public final class GlobalSettings {

    @ConfigOption(path = "general.enable-update-check")
    public static boolean ENABLE_UPDATE_CHECK;
    @ConfigOption(path = "general.enable-scoreboard")
    public static boolean ENABLE_SCOREBOARD;
    @ConfigOption(path = "general.enable-tablist")
    public static boolean ENABLE_TABLIST;
    @ConfigOption(path = "general.enable-scoreboard-reinstate")
    public static boolean ENABLE_REINSTATE;
    @ConfigOption(path = "general.enable-short-command")
    public static boolean ENABLE_SHORT_COMMAND;
    @ConfigOption(path = "command-aliases")
    public static List<String> COMMAND_ALIASES;
    
    static {
        GlobalSettings.ENABLE_UPDATE_CHECK = true;
        GlobalSettings.ENABLE_SCOREBOARD = true;
        GlobalSettings.ENABLE_TABLIST = true;
        GlobalSettings.ENABLE_REINSTATE = false;
        GlobalSettings.ENABLE_SHORT_COMMAND = false;
        GlobalSettings.COMMAND_ALIASES = Arrays.asList("kboard", "kb");
    }
}
```this is what I got
#

no idea lol

heady birch
#

darn it just noticed that unused config option

jovial warren
#

two*

heady birch
#

OH

obtuse gale
#

Ive got a server setup running inside IJ, how do I setup hotswapping or whatever?

jovial warren
#

you should split some of the libraries off and make them standalone and then release them as standalone libraries

#

like this configuration thingy

heady birch
#

yeah

#

the command framework is kind of wack though

jovial warren
#

or better yet, open-source the whole thing and let me do it 🙂

obtuse gale
#

whats the thing ive gotta add to change my gradle jar output directory?

jovial warren
#
shadowJar {
    archiveFileName 'whatever'
}
```?
obtuse gale
#

that just changes the file name doesnt it

jovial warren
#

oh you want to change the build dir

obtuse gale
#

also im not shadowing anything (pdm)

#

yeah

jovial warren
#

google it silly

#

it's literally the first result from what I remember

obtuse gale
jovial warren
#

@heady birch what's the name of the boolean at line 30 in ConfigurationLoader? I just can't quite figure out this somewhat bogus logic xD

#

also why does the bottom method accept an Object when it only ever calls getClass(), and it gets provided a Class<?>

obtuse gale
#
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by me.bristermitten.pdm.util.ClassLoaderReflection (file:/Z:/project/server/plugins/project-1.0-SNAPSHOT.jar) to method java.net.URLClassLoader.addURL(java.net.URL)
WARNING: Please consider reporting this to the maintainers of me.bristermitten.pdm.util.ClassLoaderReflection
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release```

Just a warning tho and hasnt broken anything
jovial warren
#

@prisma wave

heady birch
#

cloest is 37

#

boolean saveNewConfig

jovial warren
#

ah okay

#

which gets updated when config.isSet(configOption.path()) is false right?

#

also why does the bottom method accept an Object when it only ever calls getClass(), and it gets provided a Class<?>
also, this lol

obtuse gale
#

bruh how tf does this hotswapping thing work lol

#

I dont think I did it right

prisma wave
#

@obtuse gale that warning is pretty much unavoidable until java 9+ becomes mainstream

obtuse gale
#

Im pressing the reload changed classes keybind and its not doing anything

#

ah

prisma wave
#

i could add a workaround but it's not worth the effort tbh

heady birch
#

good second point

jovial warren
#

I replaced it with final Class<?> clazz and replaced all occurences of o.getClass() with clazz in my version

obtuse gale
#

bruh my reload changed classes keybinds isnt doing anything lol

#

I followed piggys tutorial on spigot, idk if that was outdated but I think ived used it before

jovial warren
#

show me

obtuse gale
#

that one

jovial warren
#

also you realise you could just ask pig himself if you need help

pastel imp
#

Yo bois how could I create a custom block using a texturepack in my server? I know I can just change the texture of existing blocks but how do I actually create new blocks?

heady birch
#

Weird thing ive never had to actually do

#

Whats an accurate way of measuring something per seconds

jovial warren
#

like how long something takes?

heady birch
#

More like

#

10 packets/second

jovial warren
#

ah okay

heady birch
#

Im thinking just increment

#

Then every second take that value

#

And reset it

jovial warren
#

I wouldn't reset it

#

I'd just keep ticking it up

heady birch
#

Yeah that's what I thought

#

But then it's more of an "average"

jovial warren
#

yeah true

remote goblet
#

lesson of the day

#

TextComponent is ass

#

and should burn

jovial warren
#

lol

heady birch
#

niall component

jovial warren
#

NiallComponent?

#

seems legit

remote goblet
jovial warren
#

also, what is ConfigType @heady birch ?

remote goblet
#

component.hoverEvent = HoverEvent(HoverEvent.Action.SHOW_ITEM, ItemStack(Material.DIAMOND_SWORD) that'd be simple

#

but no

#

this bitch

heady birch
#

how the config is layed out

#

basically the format of the yaml file

jovial warren
#

ah okay

#

wait YAML has different sub formats?

heady birch
#

graphics.draw(new Rectangle2D.Double(x, y, 75, 30));

#

Wrong paste lol

jovial warren
#

lol

heady birch
#

No just the kiteboard specific layout

jovial warren
#

so they're BASIC and ADVANCED then

heady birch
#

yeah

#

or SIMPLE i think it is

jovial warren
#

wow I should read more of the wiki lol

heady birch
#

in the enum

jovial warren
#

ya know, having that enum is nice and all, but go to line ~24 in ConfigGroup lol

#

this.type = ConfigType.ADVANCED

onyx loom
#

component.hoverEvent = HoverEvent(HoverEvent.Action.SHOW_ITEM, ItemStack(Material.DIAMOND_SWORD) that'd be simple
@remote goblet when u figure out how to do it let me copy ur code fingerguns

remote goblet
#

Gladly

#

If i ever figure it out

#

peepoSad where's esophose when you need em

onyx loom
#

i tried for like a day

#

but then i gave up

remote goblet
#

It requires NMS i believe

onyx loom
#

mainly because im shit, but we ignore that part fingerguns

obtuse gale
#

my hotswap still isnt doing anything lol

remote goblet
#

and it's literally like

obtuse gale
#

I dont get that message saying like X classes reloaded

remote goblet
#

5 years old

heady birch
#

yes the default group type is advanced

jovial warren
#

what are all these constants as well

heady birch
#

dont know just thought it looked nicer 😫

empty flint
#

Why does gradle have only groovy and kotlin as dsls when it's written in Java?

jovial warren
#

no idea what they are lol

heady birch
#

config paths

jovial warren
#

@empty flint because both of those languages cut out boilerplate

#

@heady birch so like "setting" for example is the SETTINGS_PATH?

heady birch
#

basically yeah

#

I like constants

#

Wait till you get to the animation package

jovial warren
#

oh I've been there, I just haven't done anything with it yet except for name the packages

#

I really should be keeping track of what I've done and what I haven't lol

#

screw it, I'm doing the adapters next lol

prisma wave
#

@empty flint it's written in a combination of groovy and java, and what are the other options?

#

java and scala would be way too verbose

heady birch
#

Rust

jovial warren
#

wait are these adapters what allow the plugin to run on multiple versions with all the latest features in a single codebase? (I'm guessing it does that) @heady birch

heady birch
#

Yeah

jovial warren
#

nice

#

what are these void methods in Adapter? are they just for transforming the appearance of the board or something?

#

yeah looks like they just send modified packets

heady birch
#

they do the actual packets

jovial warren
#

yeah I've got no chance with these then since I have no idea how packets work lol

#

we'll come back to these lol

obtuse gale
#

IJ always thinks this

#

even when its not true :((

old wyvern
#

Are you sure aj?

obtuse gale
#

I mean yeah I think so

old wyvern
#

What changes did you make?

obtuse gale
#

unless my gradle build is failing for some reason

#

I added a player.setHealth and a println

#

is that not enough or something lol

old wyvern
#

That should be fine

jovial warren
#

do all the void methods have the same name btw @heady birch ? (still in Adapter)

#

because they look like overloads