#dev-general

1 messages · Page 181 of 1

heady birch
#

Yeah you can do that but when I've used it its been individual. i'm not sure about open sourcing it yet but i will think about it an see

jovial warren
#

I can do what? 🙂

heady birch
#

I meant its possible to transfer issues

jovial warren
#

ah okay lol

#

also, making your repo public means you can make use of features like draft pull requests, which require a paid subscription for private repos

#

and there's a bunch of other things that you get access to

dusky drum
#

changed how holograms work in my plugin for third time lets see if i made improvements.

jovial warren
#

yeah, with private repos you only get a total of 2,000 actions minutes/month, whereas you get pretty much unlimited for public repos

#

you also get code owners, protected branches, draft pull requests as I said earlier, multiple pull request assignees and reviewers, scheduled reminders, and automatic code review assignment

#

oh, and free pages and wikis, repository insights and multiple issue assignees

prisma wave
#

i will make ElaraHub when i am in charge

jovial warren
#

and required reviews, required status checks, automated code scanning and GitHub security advisories

prisma wave
#

free everything but only for projects written in Elara

#

otherwise you get a maximum of 2 files before you get banned

jovial warren
#

lol

#

"when"

prisma wave
#

when

#

lol

jovial warren
#

you mean if

prisma wave
#

pitiful kotlin

#

i mean when

jovial warren
#

if

prisma wave
#

mark my words

jovial warren
#

@heady birch also making the whole lot open-source means it can all be one big project, rather than you splitting it off in to separate repositories to accomodate the API (which should be open-source ngl)

heady birch
#

True

#

For my adapter implementation models. At the moment they are names just 1_8_R2 e.g, should they be kiteboard-adapter-1_8_R2?

jovial warren
#

nah you'll be fine

#

I'd just leave it as it is and let others suggest changes like that xD

prisma wave
#

kiteboard-adapter-1_8_R2
kebab case 👀

jovial warren
#

actually that's not what I mean

prisma wave
#

that reminds me of a certain language

jovial warren
#

shut up

prisma wave
#

🙄

jovial warren
#

I mean you should open-source it now so I can work on it xD

#

I love contributing to other people's projects

#

also @heady birch , what's not ready?

#

I'm just curious

heady birch
#

groupId in all the poms is net.kitesoftware.board when it should be just net.kitesoftware

jovial warren
#

oh yeah that

heady birch
#

but that's what I'm working on now

jovial warren
#

anything within the code?

#

probably not

heady birch
#

Not really

jovial warren
#

from what I saw in my version there wasn't

#

except for that weird initialisation thingy with StorageManager being given the current instance of the plugin while it was still initialising

prisma wave
heady birch
#

whats that the new YamlStorageAdapter()

jovial warren
#

the new?

#

I haven't fixed it yet lol

#

wait what am I on about lol

heady birch
#

Oh yeah that I see what you mean now. I'm not too sure why that works, but it seems to

compact perchBOT
#
✳️ Global Multiplier Expired!

The global multiplier has ran out and has been reset!

onyx loom
jovial warren
#

I did some debugging and it didn't work for me

#

also F

heady birch
#

Wait it didn't work for you?

jovial warren
#

nope

heady birch
#

Interesting

jovial warren
#

not with my version of the code

#

that's what I mean

#

I tried moving the assignments outside of the constructor and just assigning them where they're declared, but that didn't work either

#

also something's probably wrong with my pom since it doesn't seem to like putting the shaded artifacts in the normal JAR, it only puts them in the shaded JAR

#

also @heady birch , got something for you to look at

#

I invited you, check your GitHub

#

there's probably quite a few things you'll notice

heady birch
#

Wow

#

Last couple of lines in KiteBoardPlugin

jovial warren
#

I got that from what's it called lol

#

CFR

dusky drum
heady birch
#

I've never seen that properly decompiled before

jovial warren
#

yeah luyten couldn't do it

#

CFR did it though

#

that's why @quiet depot is an actual god

heady birch
#

Spigots anti-piracy thing it injects on the download's which is quite clever

jovial warren
#

I knew it existed, since luyten showed a loadConfig0 method at the top of onEnable

#

but only CFR showed the actual code

#

CFR was the one that properly decompiled those enum switches

dusky drum
#

i've actualy managed to fix my placeholder updater frik yes!

#

now API for placeholders here we go and after that api for creating the holograms

jovial warren
#

also I added some nice annotations for the API if you noticed @heady birch

#

@ForTheFuture (the best name for an annotation ever lol) denotes that something will be implemented in a future version

#

and then @Experimental denotes that it is currently in testing and it is unknown whether it is fully stable or not

#

also you can see my attempt at removing any remenants of Bukkit in the API with the GroupAssignEvent, though that failed because the UserManager takes a Player

heady birch
#

do you know if the interface event would work?

jovial warren
#

I reckon it will since it's technically an event

#

well, it's implementation is a registered event

heady birch
#

would they not need to do
@EventHandler
public void onSomething(GroupAssignEventImpl event)?

jovial warren
#

yeah I'm really not sure

#

I should put @Experimental on that

heady birch
#

As for the user manager i was thinking of maybe KiteUser<T>

jovial warren
#

genius

#

why didn't I think of that lol

heady birch
#

but I dont know how that would work with the rest of the plugin internally

jovial warren
#

Matt used that to abstract his thingy

heady birch
#

would I just use KiteUser<Player> internally?

jovial warren
#

probably yeah

#

I'll look in to it right now

#

what would the UserManager be?

#

<T> KiteUser<T> getUser(final T player);?

#

or should UserManager also take a T type param

#

lemme have a look in to this

heady birch
#

Heh good point I'm not sure

jovial warren
#

maybe just make the UserManager methods take <T> and have UserManager remain how it is

#

but I'm worried that could be annoying for developers

#

myKiteService.getUserManager().<Player>getPlayer() seems a bit annoying, unless Java can figure those out by what you pass in as a param there

dusky drum
jovial warren
#

e.g. myKiteService.getUserManager().getPlayer(aPlayerInstance)

#

@dusky drum welcome to Minecraft, done in the complete opposite way to everything else Microsoft does

dusky drum
#

XD

jovial warren
#

(what I mean is that Windows 10 for example is backwards compatible back to the ages of DOS, where Minecraft has 0 backwards compatibility)

dusky drum
#

yep

#

i mean they could easily make it compatible

#

but no

jovial warren
#

also @heady birch , you can probably see that everything that isn't extended is declared final, just a Kotlin habit as classes are final by default in Kotlin xD

#

I did a pretty good job though huh

heady birch
#

everything is already final but proguard probably removed that

jovial warren
#

I mean, you will find the odd method named noClue or noFuckingClue or noIdea or alsoNoIdea lol

#

that's just where I had no idea at the time and forgot to come back to it

#

or where I actually have no clue

#

or unknown

#

like in some of the animations

#

TypewriterAnimation has a noFuckingClue in it at the bottom lol

#

WaveAnimation has a noIdea in it

heady birch
#

yeah I saw, that is basically just a counter that goes up to choose between _ or " "

jovial warren
#

what the typewriter one?

heady birch
#

Yeah

#

The wave one just puts all the gradient values into a String[]

pastel imp
#

stupid question

#

but I can have perms like

#

azone.staff.heal

#

right?

#

and azone.staff.* is just all

dusky drum
jovial warren
#

nice

dusky drum
#

had some issues with 1 class so i made it in java, now i have to convert it back to kotlin, idk why it wasnt working as kotlin .

heady birch
#

@jovial warren was thinking about putting all the animation option keys into a single enum

jovial warren
#

yeah might be a good idea since they're constant

#

also having a little trouble with Java generics atm lol

#

maybe we just allow you to get players by UUID and name

#

which was my original idea

heady birch
#

Yeah that could work, but then youd have to lookup the player by the user uuid every time you need the player

jovial warren
#

true

#

but there isn't really any other way to use it in implementation

#

since if I use <T> KiteUser<?> getUser(final T player), because T doesn't extend Player, it sees it as invalid when I try to take Player as a parameter in implementation

#

and if I take T as the type, it can't find player.getUniqueId()

old wyvern
#

contract based types fingerguns

jovial warren
#

contract based types?

#

what are those?

heady birch
#

KiteUser<T> getUser(final UUID uuid, final Class<T> clazz) ?

old wyvern
#

Elaras version of a "generics" implementation

jovial warren
#

@heady birch that could work maybe

#

but then giving Class<T> every time would be really annoying

old wyvern
#

You would ask for a function or variable to be present as a contract rather than define a base class

prisma wave
#
<T { getUniqueId() => UUID }>
let getUser = (T player) => KiteUser<?> {
  return player.getUniqueId()
}
#

ez

jovial warren
#

wait what?

#

you can do that?

prisma wave
#

accepts any type that has a function getUniqueId() that returns a UUID

#

in elara you can

old wyvern
#

^

jovial warren
#

that's really cool

prisma wave
#

indeed

jovial warren
#

but I'm in a Java project lol

old wyvern
#

Move to Elara

prisma wave
#

^

old wyvern
#

ez

jovial warren
#

not really feasible for this project

onyx loom
#

everything is feasible for elara

jovial warren
#

@heady birch wait I've got another issue

#

what about AbstractCriteria

#

it requires a ConfigurationSection for the config

#

should we just make that generic as well?

dusky drum
#

anyone has idea if i can like do player#hasLineOfSight as like location not entity? cause entity doesnt really exist on server.

heady birch
#

Well it get's complicated quite quickly and I'm not sure I will ever add cross platform support anyway

jovial warren
#

yeah I just gave up and committed the broken code to a devel branch lol

#

also @heady birch would you be alright if I made a library based off of the idea of internally adapting to the current NMS version (basically I wanna make a library based off of your adapter system, but more extensive)

#

because I think it's a really good idea that people could make good use of

heady birch
#

yeah sure

jovial warren
#

cool!

#

thanks

#

now I gotta make an adapter for pretty much every single packet and then make the implementations for each of them in each and every version lol

#

I'm really not sure whether to make this in Java or in Kotlin either lol

distant sun
#

@eager fern web scrape deesnt work for ig?

eager fern
#

Keep getting blocked for some reason and we have to be signed in to be able to actually view it

distant sun
#

Mhm

#

You probably need some headers to make it think you are a real user

eager fern
#

@distant sun prob not its scuffed idk what todo

frigid badge
#

use something like selenium

#

which actually runs chrome headless erc

#

etc*

old wyvern
#

Seems to work fine without being logged in @eager fern

dusky drum
#

after this i'll add per player lines and so on

old wyvern
#

Yea just had the scraper loop a 100 times, does not seem to rate limit atleast at that

distant sun
#
quaint isle
#

I might design my own language
@jovial warren Bro bro hear me out: HTML-like code, but it compiles to PHP 😳

onyx loom
quaint isle
#

😳 👉 👈

#

haha what my account got hacked I didnt write that

lunar cypress
#

Worst of both worlds

#

Writing xml

#

And having php as output

quaint isle
#

The more I think about it, it actually sounds like a great idea. Just imagine the looks if you were out there writing pure HTML backends like an absolute mad lad.

onyx loom
#

im going to have to stop u right there

#

no

quaint isle
#

"Combine the beauty of HTML with the webs most powerful scripting langugage"

onyx loom
#

"beauty"

old wyvern
#

Oh fuck please no

quaint isle
#

And you could even market it as innovative by automatically enforcing strict typing etc :p

#

Imagine using Typescript in 2k20 when you could be using HTML instead 🤷‍♀️

old wyvern
#
<define> <id>Test</id> <value>"wtf"</value> </define>

yea... no thanks

quaint isle
#
<var type="integer" value="18" id="age"/>
<var type="boolean" value="true" id="minor"/>

<!-- if(#age >= 18) -->

  #minor = false

<!-- endif -->```
ocean quartz
#

Terror

quaint isle
#

Honestly imma give making a composer package that "compiles" html to PHP a shot sometime when I'm bored. Perfect troll.

heady birch
#

That seems kind of cool

#

Thymeleaf could probably do the same but you still need java powering it

ocean quartz
#

This took some time but got it working, idk what to do with it yet but hey it's pretty cool

distant sun
#

cool

ocean quartz
tranquil crane
#

mfgui.gui.guis.Gui

ocean quartz
#

Shhh

tranquil crane
#

lol

ocean quartz
#

It's just a test xD

#

Though tbh i am horrible with naming things

distant sun
#

arent we all?

prisma wave
#

"elara"

lunar cypress
#

"Combine the beauty of HTML with the webs most powerful scripting langugage"
@quaint isle if php really was the "webs most powerful scripting language" we would be absolutely doomed

empty flint
#

Do you guys know if BuildTools and the Spigot jar are signed or not?

#

I can't find anything in the METAINF of the jar

#

but maybe there's another way to tell

quaint isle
#

@lunar cypress well, HTML isn't that beautiful either :p

#

Combine the beauty of HTML with the Web's most powerful scripting language*
*based on W3Tech usage statistics

#

better?

#

For real tho, as a web guy, while I personally enjoy Typescript more, PHP has come a long way. Coding in recent PHP versions feels just fine.

empty flint
#

I just came across this and it might be useful to anybody trying to learn Kotlin 🙂

https://docs.google.com/spreadsheets/d/1P2gMRuu36pSDW4fdwE-fLN9fcA_ZboIU2Q5VtgixBNo/edit#gid=0

distant sun
#

lol have you guys ever seen a file that it's actually a folder?

#

someone sent me this weird jar and there's an yaml file "random-letters.yml and when you want to open it, it is actually a folder but with a file icon thonking

quiet depot
#

spoopy

distant sun
#

hm?

onyx loom
#

spoopy

distant sun
#

@quiet depot with cfr, is "java -jar cfr.jar file.jar --outputdir path/to/directory all I have to do? If yes, then I guess it failed to decompile the code thonking

quiet depot
#

yeah that looks right

#

if ur struggling, I can try for you

distant sun
#
eager fern
#

@distant sun Scraping is scuffed yk
@distant sun we dont want to require something like an oauth to get there token we just need them to put in a username

astral quiver
#

Inspired by me I guess @ocean quartz

#

great job

ocean quartz
#

Yeah ;p

pastel imp
#

@astral quiver duck you! You didn’t made the java version now we gonna have an even better one hehe

astral quiver
#

He is doing in Kotlin as well

#

you are doing a IntelliJ plugin with Psi read as well? @ocean quartz

ocean quartz
#

Yeah, kinda confusing though, still trying to understand most of it

#

And yeah doing it in Kotlin too

obtuse gale
#

Cause: unable to find valid certification path to requested target

#

halp

#

gradle broke 😦

pastel imp
#

He is doing in Kotlin as well
@astral quiver ye but it’s for his GUI framework.. (java)

astral mason
#

Idk if this is the wrong channel but I was wondering if anyone is capable of fixing a PAPI expansion here and is willing to?...

old wyvern
versed ridge
#

@astral mason What expansion and what's the problem with it?

astral mason
#

skript-expansion, as for the problems, placeholders don't work anymore.

#

I'd like to give more detail but I don't know anything about the internal stuff.

#

I'll try to get an error with it to show you.

#

@versed ridge [PlaceholderAPI] skript is attempting to register placeholders via a PlaceholderHook class which is no longer supported!

frail glade
#

Contact Skript developer

#

They had 16 months to fix this.

astral mason
#

It was working up to .6

frail glade
#

Okay

#

We disabled the method after .6

astral mason
#

I already did and I was only asking to see if anyone was maybe capable of making like a fork or something if that is a thing with expansions.

frail glade
#

Who maintains the expansion

astral mason
#

I made an issue on the page

frail glade
#

Okay

versed ridge
#

It doesn't seem to be using PlaceholderHook?

#

unless I'm blind

frail glade
#

That is true

#

That's probably not what's in the ecloud then

astral mason
#

It just clicked to me who the owner is, I'm actually going to dm him because I actually kinda know who it is.

versed ridge
#

ah

#

No, it's not

#

The one on the ecloud is using it

frail glade
#

Who's the author in the cloud

versed ridge
#

f8te

frail glade
#

Gotta hit them up

astral mason
#

Oh wait, so the guy from github isn't the same guy?

frail glade
#

¯\_(ツ)_/¯

astral mason
#

Well he mentions f8te

versed ridge
#

I can send you the version from github

astral mason
#

Talking to me or Waffle?

versed ridge
frail glade
#

Probabaly you since I don't need it.

astral mason
#

Probabaly you since I don't need it.
lol

versed ridge
#

try that out

frail glade
#

:)

astral mason
#

Alright, the only issue with this is that if it works on my local server it doesn't mean too much because I cant use it on my minigame server over on minehut

#

Unless its uploaded to the ecloud

versed ridge
#

Why not?

frail glade
#

Because you can't upload on MineHut.

astral mason
#

Ye

versed ridge
#

ah, never heard of minehut :P

astral mason
#

I dont use it as my main host

frail glade
#

We can just do a release in the ecloud later this week.

astral mason
#

So it returned my parse as <none> when it should have been 89

#

No errors in console

astral mason
#

Yeah Waffle, he sent me a new version that seemed to have fixed everything.

versed ridge
modest oasis
#

message announcer 1.16.2 please

#

for message announcer?

quiet depot
#

@distant sun the first thread's jar link is broken, and i don't see a link in the second thread

#

just send the jar pls

distant sun
#

@quiet depot will do when I get home

empty flint
#

@quiet depot Sorry for the ping but I thought if anybody knew this about spigot it would probably be you. Is there a way to verify that a provided BuildTools file or spigot server file is actually what they claim to be? I could not find any sort of signature from spigot.org in the manifest and I don't want to use some hash sum or whatever because that would change with every version.

Basically, if I ask the user to provide the path to a BuildTools file in order to run it, I'd like to verify that it is a valid BuildTools file provided by spigot...

quiet depot
#

no clue

obtuse gale
#

How can I autowire classes into a class after the bean in that class is done

empty flint
#

Hm ok ty

obtuse gale
#
@Service
class A @Autowired constructor(
  private val b:B
){

@Bean
fun coolThing():C{
  // Do stuff
  return C
}
}
@Service
class B @Autowired constructor(
  private val c:C
){

}``` this is my problem

@obtuse gale

formal lantern
#

does frozenjoin support sounds on 1.16? I tried and report that bug a couple of days ago but frozen answered that it shouldn't be a problem with that. Does someone have this bug too?

heady birch
#

@obtuse gale Basically you should find away to make A not depend on B

obtuse gale
#

If I remove it than B isnt ran anywhere

#

I just want Bs @PostConstruct to be ran

heady birch
#

does B register listeners?

#

if so I recommend just doing that in the bean method

obtuse gale
#

yes

#

I was tryna make my thing follow srp more or something, I did this a while ago lol

empty flint
#

How do I exclude a certain package in kotlin from building by gradle?

#

I can't get it to work

#
sourceSets {
    main {
        java {
            srcDirs  = ['src/main/kotlin']
            exclude '**/old/**/*.kt'
        }
    }
}
#

This doesn't seem to do the trick

#

I want to exclude everything in the old package

jovial warren
#

@prisma wave hey so I started working on an NMS adapters thingy last night and found out the hard way how shit NMS is, and decided to revive the MineKraft project. Interested in giving me a hand? Because you probably know more than me about the Minecraft protocol and how packets work lol

heady birch
#

MineKraft?

jovial warren
#

it's a minecraft protocol implementation in Kotlin

#

but I plan on making it stupidly high-performance and easy to work with

#

and I want proper concurrency and coroutine support

#

like imagine a Minecraft server that performs better than Spigot, yeah, that's my plan lol

astral quiver
#

I wrote a aproch of concept that if I was able to deliver minecraft packets using Kotlinx.serialization

#

And works pretty good

#

is far for be a complete list of packets, but, still is really nice

jovial warren
#

yeah MineKraft uses kotlinx.serialization

#

I'm gonna do a bit of a shuffle around with the structure of this project though, because having all the outbound packets in one place doesn't seem like a very good idea

astral quiver
#

Uses kotlinx.serialization to serialize packets aswell?

jovial warren
#

yeah

astral quiver
#

Nice

jovial warren
#

it's open-source if you wanna contribute

astral quiver
#

Can you send me a link?

jovial warren
astral quiver
#

🤔

#

I think that it is not using Ktx.serialization

#

Like here

jovial warren
#

I thought you meant just the JSON serialisation lol

#

I didn't know you could serialise that sort of data with kotlinx.serialization

#

you can do some rewriting to make it use kotlinx.serialization if you like

astral quiver
#

hahah

#

Yes, I does not know that was possible too

#

But works

#

Have some problems because the packet is not static

#

Like, some packet if a value false they will load in a different way

#

Like full chunk

jovial warren
#

idk

prisma wave
#

and I want proper concurrency and coroutine support
@jovial warren that was what I had planned too lol

#

Can you use ktx for raw bytes?

#

The biggest thing that needs implementing is the chunk data right now

jovial warren
#

chunk data?

prisma wave
#

And of course not hardcoding everything

jovial warren
#

I'm currently working on restructuring the project a bit, since having loads of packet classes in one place seems a bit eh to me

prisma wave
#

as opposed to what?

obtuse gale
#

is it bad to mix like using @Autowire and manual DI with spring?

prisma wave
#

Incidentally I'll warn you that last I checked the wiki.vg packet format didn't work for 1.16 so I had to reverse engineer it from the nms

#

@obtuse gale generally yes

#

If you're using a DI framework you should use it for everything

jovial warren
#

having packets like this: ```
packets
|- login
|- inbound
|- // inbound packets, probably split up a bit, though there isn't many login packets anyway
|- outbound
|- // outbound packets, same with inbound packets
|- play
|- inbound
|- // inbound packets, same with login inbound, split up a bit
|- outbound
|- // outbound packets, same with login outbound, split up a bit

obtuse gale
#

hm

prisma wave
#

Oh

#

yea that's fine

obtuse gale
#

oh yeah if i use manual DI it wont autowire classes into that class will it

jovial warren
#

me.bristermitten.minekraft.packets.login.inbound.PacketInLoginStart makes more sense to me than me.bristermitten.minekraft.packets.in.PacketInLoginStart

#

I'm also migrating a few things to Kotlin 1.4 where necessary

#

e.g. SerialDescriptor() was deprecated in 1.0-M1-1.4.0-rc (required for Kotlin 1.4), so I'm replacing it with PrimitiveSerialDescriptor()

prisma wave
#

Update ktx.serialization?

#

Yeah

jovial warren
#

also we still haven't settled on the style

#

I've been writing my stuff in K&R, but some of your stuff is in allman and other stuff is in K&R so idk

prisma wave
#

¯_(ツ)_/¯

jovial warren
#

also why tf does PacketInLoginStart not extend LoginPacket lol

prisma wave
#

because I was only using the inheritance as a shorthand

#

rather than for an actual class graph

jovial warren
#

ah okay

prisma wave
#

the entire project is a huge mess rn

jovial warren
#

yeah I'll do some restructuring and submit a draft PR

prisma wave
#

alrighty

jovial warren
#

(draft PR 1. because I wanna make use of them lol and 2. because then we can set thingys we have to do)

#

I'm using a branch called devel for all this stuff atm, just in case lol

prisma wave
#

kk

astral quiver
#

Can you use ktx for raw bytes?
@prisma wave yesss

obtuse gale
#

Can I autowire into method params?

#

If so what do i pass in when I call the method

prisma wave
#

interesting

astral quiver
#

Here is the packet implementation

prisma wave
#

and that's instead of netty?

astral quiver
#

I guess you can use netty as well

#

But I never test it

#

This is just a proof of concept

prisma wave
#

fair enough

#

might give that a look

jovial warren
#

if it's faster and more efficient than netty then it may be worth taking a look yeah

astral quiver
#

Compiler time stuff get so fast

prisma wave
#

then again netty's pipelines are pretty useful

astral quiver
#

And is Kotlin Multiplatform

#

Just because it can

#

lol

jovial warren
#

pipelines?

#

also I was thinking of a solution to Minecraft server's biggest problem: it being single-threaded

#

originally my idea was to open a new concurrent thread for each new player connection, but that could end up out of memory very fast

prisma wave
#

netty already uses a thread pool

#

just build off that

jovial warren
#

so my second idea was to make what I call "batches", groups of players all handled by a single thread, say 5 or 10, and then the batches can communicate with each other using channels

#

which drops the amount of threads you have drastically, but also means you're not handling all the data on a single thread

old wyvern
#

Not always great

jovial warren
#

I'm not 100% sure if it will work or how to make it work, but I don't think it's a bad idea

#

there's probably a better idea though

#

but if we group them in to say 10 players per thread, that means we won't have 250 players all handled on the same thread, meaning it'll reduce the stress and you can finally run Minecraft servers on server CPUs that are designed to execute multiple tasks at once

#

having a thread per-player would mean you'd run out of memory very, very fast

old wyvern
#

have you also considered that you would also have 25 threads active?

jovial warren
#

is 25 active threads worse than a single thread on its own though?

prisma wave
#

threads are heavy

jovial warren
#

also, this is MineKraft, what about coroutines?

prisma wave
#

some sort of thread pool that has a limited amount to begin but can grow if need be is probably the best option

old wyvern
#

Last I read about this, parallelism value is increasing only till no. of threads = no. of cores

#

After that it starts decreasing

jovial warren
#

we could easily just have a new coroutine per player since you can kinda get away with that

#

idk though

dusky drum
#

I mean i wish mc was like multithreaded so we could do more stuff async

old wyvern
#

Coroutines arent exactly threads, more of tasks for threads of a pool

jovial warren
#

yeah true

#

so we'd still have quite a few threads running

#

and sharing 250 coroutines on a single dispatcher is a horrible idea

obtuse gale
#

Can I autowire into method params?
If so what do i pass in when I call the method

old wyvern
#

Common pool always has no. of threads equals to core count unless you manually change it I think

obtuse gale
#

cos like it lets me put @Autowired for a method param

jovial warren
#

if the method is managed by Spring then you can DI with Spring

#

that's the rule: if it's managed by Spring, you can DI with Spring

obtuse gale
#

wdym managed by spring

jovial warren
#

@old wyvern what about custom dispatchers with say cached thread pools or something?

#

because cached thread pools reuse threads that stop executing

obtuse gale
#

for example can i do this

#
    fun commandSetup(@Autowired jda: JDA): CommandManager {```
#

Thats not a bean btw

#

But it is in an @Service class

jovial warren
#

we need to keep the thread count down whilst also keeping the concurrency up

old wyvern
#

As long as the executing thread pool size doesnt expand over no. of cores, that should be its maximum efficiency

jovial warren
#

okay, so say on a 4 core machine, common pool has 4 threads max

old wyvern
#

Basically the limitation is that to run parallel tasks, each tasks are run on diff cores

jovial warren
#

actually no, because most CPUs also have their own virtual "threads"

old wyvern
#

if there are not enough cores

#

Time for each thread is reduced to allocate other threads

jovial warren
#

you can have more than 4 threads on a 4 core machine though can't you

#

but it's just not efficient

#

so we wanna stick to common pool is what you're saying btw

old wyvern
#

Thats up to you

#

But having a growing thread pool is probably not a good idea

jovial warren
#

but if it's fixed we'd have a maximum player count built-in

#

actually doesn't Minecraft already have that

old wyvern
#

Dont think so

jovial warren
#

Minecraft has a maximum player count of 250 unless you use BungeeCord to get around it I believe

old wyvern
#

You dont need each player handled on a diff thread

jovial warren
#

^ yeah ik

old wyvern
#

Minecraft has a maximum player count of 250 unless you use BungeeCord to get around it I believe
@jovial warren
Dont think so

jovial warren
#

but I'm not handling every single player on a single thread

#

because then we'd just be making Minecraft server but shittier

old wyvern
#

You dont need it on a single one, hold a thread pool of size = to available processor count or something

jovial warren
#

also we gotta think about the more important thing, which is: how are we going to make this accessible? and how are we going to serialise packets in to entities

#

@old wyvern wouldn't that limit the max players though?

prisma wave
#

how are we going to serialise packets in to entities
?

jovial warren
#

or are you just saying use a load balancer to choose the thread with the least load

old wyvern
#

Why would you think that?

#

No

jovial warren
#

@prisma wave you know how NMS has things like Entity for example, which is an entity that has an ID, and the packet sending gets that ID to serialise it in to a packet

old wyvern
#

Netty already uses a thread pool as well I think

jovial warren
#

ah okay

prisma wave
#

yeah it does

#

@prisma wave you know how NMS has things like Entity for example, which is an entity that has an ID, and the packet sending gets that ID to serialise it in to a packet
@jovial warren yes? what's the relevance of that

jovial warren
#

I want an API for this

#

like instead of having to create packets with PacketOutSpawnEntity(entityID, etc. etc.), I wanna just give it Entity and then it to its thing internally

#

ya know what I mean

obtuse gale
#

bruh

#

Error creating bean with name 'jda': Requested bean is currently in creation: Is there an unresolvable circular reference?

prisma wave
#

i mean

#

that could literally just be the factory pattern lol

jovial warren
#

maybe we should design the API first, since then we can do some implementations and base the rest of the system from the API

prisma wave
#

bruh you can't even login unless you have my UUID and username yet

#

1 step at a time

jovial warren
#

okay okay

#

we'll make it work first, then we'll work on making it work nicely

prisma wave
#

indeed

onyx loom
#

what are u tring to do anyway?

#

improve MineKraft?

jovial warren
#

yes

#

also what should I do for inbound packets? fill them with lateinit vars and then initialise them in read?

onyx loom
#

nice

jovial warren
#

or is there another way

prisma wave
#

that's what they're doing atm

#

although i don't really like it

onyx loom
#

lmfao

jovial warren
#

is there another way realistically though?

#

actually there's always another way

obtuse gale
#

so

prisma wave
#

abstract factory pattern

#

:)

obtuse gale
#

basically I need a way to delay the autowires from the constructor until one of my beans done

prisma wave
#

i'm not sure that's how it works

obtuse gale
#

well yeah lol

#

But my class that registers the commands depends on JDA

#

and that JDA class has to autowire it in just so that the @PostConstruct gets called

jovial warren
#

another thing we'll have to consider at some point is cross-compatibility

obtuse gale
#

hm

#

maybe this is a good time to mess around and try that thing where I register all the commands with that fancy way piggy was saying the other day

#

actually no

#

that will break with spring most likely lol

jovial warren
#

what?

obtuse gale
#

ignore what i just said lol

hot hull
#

Spring, ew

obtuse gale
#

well idk what to do here lol

jovial warren
#

wow I just came up with the best hackery for converting enum entity names to common entity names lol

heady birch
#

Spring makes nothing break usually. You could register your commands like this

@Autowired
CommandManager(CommandOne, CommandTwo) {
...
}

Where CommandOne and CommandTwo would also be a bean

jovial warren
#
val replaced = name.replace("_", " ")
val splitted = replaced.split(" ")

return splitted.joinToString(" ") { string ->
    var foundFirst = false
    string.map {
        if (it == string.first() && !foundFirst) {
            foundFirst = true
            it
        } else it.toLowerCase()
    }.joinToString("")
}
```👌 top notch hackery right there
#

took me a little time to get working though lol

#

actually I could omit the string builder there

prisma wave
#

Was just about to say that

#

you only append once

#

also that's a bizarre amalgamation of imperative and declarative styles

#

gross

jovial warren
#

wait which parts are declarative and which imperative?

prisma wave
#

var foundFirst = false

#

imperative

#

the functional stuff is all declarative though

jovial warren
#

that's just so say if there is two As in the same string, without that it would think both are first and leave both upper case

prisma wave
#

i know what it does

#

but it's still imperative

jovial warren
#

yeah true

#
override fun toString() = name.replace("_", "")
    .split(" ")
    .joinToString(" ") { string ->
        var foundFirst = false
        string.map {
            if (it == string.first() && !foundFirst) {
                foundFirst = true
                it
            } else it.toLowerCase()
        }.joinToString("")
    }
```now that's more like it lol
foggy pond
#

I am scared of releasing my premium resource, since I cannot really test how the plugin performs in bigger servers

#

I don't see why it would break or anything

#

But there might be some bugs and people might hate me

jovial warren
#

this won't work actually due to custom names like Minecart TNT and Mushroom @prisma wave (got around it by adding the parameter val commonName: String = toString())

#

@foggy pond you will find bugs, it's just how it is, but if you work quickly to fix those bugs as soon as you get them, then you're showing that you care about your players, and people will like that

foggy pond
#

Yeah but imagine you buy a plugin for 5 euros, excited to use it and it's broken

#

THat would lead to a negative review probably

jovial warren
#

only dick heads are gonna give you bad reviews and chat shit

#

good people will submit an issue or something and if you fix it for them, they're more likely to submit a good review, since you fixed their issue

foggy pond
#

yeah i guess

ocean quartz
#

Anyone knows what this is?
Caused by: org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException: Descriptor wasn't found for declaration FUN
Can't find anything related to it

jovial warren
#

oof

#

show code?

ocean quartz
#

There is no code, that's the thing

#

Invalidating cache to see if it fixes it

onyx loom
#

hey @prisma wave u told me to always use the reformat code button a while ago just to get a habit of it. but i literally dont need it Kappa

hot hull
#

Sheesh

prisma wave
#

congrats

#

you win

#

lol

jovial warren
#

oof

onyx loom
#

🌝

prisma wave
#

you are now officially a Professional Programmer

jovial warren
#

wanna know where I'm up to @prisma wave btw?

onyx loom
#

thanks 🌝

prisma wave
#

sure

jovial warren
#

PacketOutSpawnPainting lol

prisma wave
#

very important packet

hot hull
#

Kali, u got mc opened? fingerguns

jovial warren
#

I'm doing them in order from the top of the list

onyx loom
#

do u want me to test the jar in general plugins frosty

hot hull
#

yus

onyx loom
#

got it boss

jovial warren
#

I've created a few enums already like EntityType, PaintingType and Direction, and I've also got Location and World (TODO)

hot hull
#

I can't test sounds myself cause I don't got speakers setup :p

onyx loom
#

1.8mb for a join plugin OMEGALUL

jovial warren
#

then EntityPacketType, which holds all the packet types for packets that take an entity ID

hot hull
#

the new one is 2.4mb fingerguns

prisma wave
#

World is gonna be tricky

jovial warren
#

yeah ik

#

that's why I've left it for now lol

#

it's just a skeleton class for Location to make use of

#

you're gonna have a field day with this when you see it lol

prisma wave
#

👀

distant sun
onyx loom
#

lmao gaby

jovial warren
#

wait, I never knew that in xxxxxxxx-xxxx-Yxxx-xxxx-xxxxxxxxxxxx the Y means the UUID version

onyx loom
#

the FactoryFactoryFactoryFactory part of that video just screams @heady birch enterprise logic

jovial warren
#

FactoryFactoryFactoryFactory?

#

seems legit

onyx loom
#

yes 🌝

#

watch the video lmao

#

very foony

prisma wave
#

factory.fact().ory().factory().get()

jovial warren
#

seems legit

#

factory.cre().ate().cre().ate().create().get()

onyx loom
#

classic java fingerguns

jovial warren
#

in NMS, it's BlockPosition apparently

jovial warren
#

apparently it gets sent as a long with a really weird algorithm

prisma wave
#

probably for efficiency

#

You wanna send as few bytes as possible you know

ocean quartz
#

No luck, i have no idea what is causing this .-.
Caused by: org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException: Descriptor wasn't found for declaration FUN

prisma wave
#

could be a compiler bug?

#

On 1.4?

ocean quartz
#

Yeah 1.4

prisma wave
#

Hmmm

#

What's the full stacktrace?

jovial warren
#
block position = ((x & h) << g | (y & i) << f | (z & j) << 0);

where h = (1 << c) - 1;
where g = f + e;
where i = (1 << e) - 1;
where j = (1 << d) - 1;

where c = 1 + MathHelper.c(MathHelper.b(30000000));
where f = 0 + d;
where e = 64 - c - d;
where d = c;

where MathHelper.c(n) = MathHelper.e(n) - (MathHelper.d(n) ? 0 : 1);

where MathHelper.e(n) = unknownArray[((n = MathHelper.d(n) ? n : MathHelper.b(n)) * 125613361 >> 27) & 0x1F];

where unknownArray = [0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9];

where MathHelper.d(n) = n != 0 && (n & n - 1) == 0;

where MathHelper.b(n) = {
    n2 = n - 1;
    n2 |= n2 >> 1;
    n2 |= n2 >> 2;
    n2 |= n2 >> 4;
    n2 |= n2 >> 8;
    n2 |= n2 >> 16;
    return n2 + 1;
}
``` @prisma wave this is what I got from the code lol
#

(I tried to be as generic as possible when explaining those thingys)

prisma wave
#

Good lord

#

What language is that?

jovial warren
#

it's not language-specific

#

it's just my method of trying to explain what goes on in steps

#

where the hell do we even begin with that BM?

old wyvern
#

where

#

where everywhere

#

where were where

obtuse gale
#

where do you see that?

ocean quartz
jovial warren
#

that algorithm is how Minecraft server converts a block position to a long value to send in a packet

#

the best way to work with this is to work backwards

prisma wave
#

It seems like you're really overcomplicating it

dusky drum
#

wut

prisma wave
#

On wiki it looks simple

jovial warren
#

where did you find position?

errant anchor
#

Guys can I ask a stupid question

dusky drum
#

dont ask to ask thats my anwser :3

jovial warren
#

no such thing as a stupid question lol

#

just a stupid idiot asking the question

prisma wave
#

@ocean quartz maybe make sure the plugin is latest version?

ocean quartz
#

It is xD
The thing is that this wasn't happening yesterday, with the same code

errant anchor
#

What is the difference between sending nms or protocollib packets and using spigot methods , why does the people advise to send nms/protocolib packet

ocean quartz
#

Amazing

#

That depends, nms/packets are normally used when the API can't do what you want to do
A lot of the times people use nms for no reason

errant anchor
#

Oh ok 👍

#

Thank you for answering

prisma wave
#

protocollib is just a thin layer of abstraction over nms

#

The spigot methods will use nms under the hood, but they're limited

jovial warren
#

@prisma wave you still didn't tell me where you found the Position type algorithm on the Wiki

prisma wave
#

On mobile

#

Just at the top

#

Where it says where it's encoded or whatever

#

It was like 3 lines of bitshifting

jovial warren
#

ah okay

errant anchor
#

Can you give me an example that thing api cant do but nms can

prisma wave
#

Changing blocks without triggering light updates is a very important one

jovial warren
#

oh I know why I got that algorithm

prisma wave
#

If you want to change lots of blocks quickly, you basically need NMS

jovial warren
#

I'm using 1.8 as a reference lol

prisma wave
#

:/

#

It says it updated in 1.14

old wyvern
ocean quartz
#

@errant anchor Custom entities (path finder etc) is also a good example

jovial warren
#

is << right shift or left shift btw? I can't remember lol

old wyvern
#

left shift

prisma wave
#

left

jovial warren
#

okay so shl

prisma wave
#

yes

jovial warren
#

cool

#

so ((x and 0x3FFFFFF) shl 38) or ((z and 0x3FFFFFF) shl 12) or (y and 0xFFF) then

prisma wave
#

probably

#

Bitshifting in kotlin is disgustingly ugly

jovial warren
#

yeah ik

prisma wave
#

I'd actually consider using java in a class just for bitshifting stuff

jovial warren
#

I mean, it works, and it makes sense

#

shift left

#

shift right

#

and

#

or

prisma wave
#

yes

#

But it's ugly

#

and requires excessive amount of brackets because of no precedence

astral quiver
#

Is really disgustingly

#

but I get the jetbrains chooses

#

I rare code base that uses it

#

Ternary operator we use more and they do not add it

#

and I get this as well

#

More keywords = More things to learn about the language it self

jovial warren
#

also @prisma wave , how do we plan on processing NBT?

#

we gonna do that ourselves or just use a library?

astral quiver
#

😮

#

I do not work in it for a time now

#

Currently I was thinking in create a library for NBT in Kotlinx.serialization

jovial warren
#

yeah that would be very handy

astral quiver
#

Is pretty hard to me, I have a bunch of projects ideas

#

but I work full time

#

I'm in college as well

dusky drum
#

hah made improvements on my placeholder handler

astral quiver
#

So sad to not have time and money to focus on open source projects :c

ocean quartz
#

I feel that, a bunch of project ideas but no time

jovial warren
#

I'm the complete opposite

#

I have loads of time but no ideas

astral quiver
#

lol

jovial warren
#

is the top one your old placeholder system?

dusky drum
#

no

#

why?

jovial warren
#

just wondering

#

since you said you made some improvements

dusky drum
#

ye

#

thats the improvement

jovial warren
#

the update interval?

dusky drum
#

it uses 0.03ms instead of 0.40ms now

#

dynamic line updating

jovial warren
#

nice

dusky drum
#

before i just updated entire holo

jovial warren
#

ah okay

#

you still using pure NMS?

dusky drum
#

yes why?

jovial warren
#

just wondering

dusky drum
#

i dont want to deal with reflections

#

except i use 1 part

#

private fun Any.updateField(name: String, value: Any)
= this::class.java.getDeclaredField(name).apply { isAccessible = true }.set(this, value)

jovial warren
#

how are you working with NMS and not dealing with reflection lol

#

oh yeah, my reflection lol

dusky drum
#

yes

#

thats all i use

#

just to set values in metapacket

#

other packets dont really need reflection

jovial warren
#

ah okay

dusky drum
#

well

#

some need some dont

distant sun
#

Mhm, how does one disable the useless moves of mobs to reduce lag? Like, still have them walk around and such but with a lower impact on performances.

dusky drum
#

disable AI XD

#

no more moving muahaha

jovial warren
#

@distant sun not entirely possible with the way Minecraft works afaik

distant sun
#

😔

jovial warren
#

since every time a mob moves, the server has to send a packet to every player who is within render distance

dusky drum
#

yep

old wyvern
#

Tuinity handles that well

jovial warren
#

Tuinity?

old wyvern
#

Stops ticking entities not near to players

#

Tuinity?
@jovial warren
Paper fork

jovial warren
#

ah okay

dusky drum
distant sun
#

Oh ok

jovial warren
#

why do these things exist

#

a fork of tuinity which is a fork of paper which is a fork of spigot which is a fork of bukkit which patches NMS

distant sun
#

$$

dusky drum
#

wait

#

is it even allowed to sell?

jovial warren
#

ikr, all you need is a catchy name with a catchy title and you can sell it

#

@dusky drum yes

dusky drum
#

wat

old wyvern
jovial warren
#

but you have the right to request source code under GPL if you buy it

dusky drum
#

but Tuinity doesnt even have license

distant sun
#

People sell spigots for hundreds of dollars

dusky drum
#

wait

jovial warren
#

Tuinity is covered by GPL since it can't be sublicensed

dusky drum
#

its MIT license

jovial warren
#

no, their patches are licensed under MIT, which is allowed, since they created those

dusky drum
#

so

#

he is nut actually allowed to or is he to sell modified version of ther stuff

jovial warren
#

actually hold on

#

if that was the case then Paper wouldn't fall under a delegate

#

but it does

dusky drum
#

wait

distant sun
#

he is nut actually allowed to or is he to sell modified version of ther stuff
@dusky drum 2nd

dusky drum
#

Mit allows selling

astral quiver
#

The thing that makes me sad is that I'm the lost payed Android Developer ever, I'm brazillian and currently I receive 2400 REAL a month

jovial warren
#

any open-source license allows selling

ocean quartz
#

is it even allowed to sell?
Depends, if it's just like paper then yes, where you download a buildtool that downloads the server on runtime, it's it's like spigot then no, you are not, not even allowed to distribute, so for example all the getspigot websites actually are illegal as it distributes the server

dusky drum
astral quiver
#

I'm really sad

jovial warren
#

@ocean quartz technically you can redistribute Spigot since it's GPL, it's the NMS stuff you can't redistribute

ocean quartz
#

You cannot

jovial warren
#

but CraftBukkit is like 99% NMS anyway

astral quiver
#

Yes

jovial warren
#

you can distribute forks of GPL products

astral quiver
#

I can redistrubute the Spigot API

#

and Bukkit API

jovial warren
#

because GPL allows you to redistribute

astral quiver
#

that does not have DMCA

dusky drum
#

so how can papermc just share jars?

jovial warren
#

^ paperclip

astral quiver
#

I can see, the Bukkit API is still online at Github

ocean quartz
#

GPL applies for the Bukkit portion of Spigot, the API only
Spigot comes with Minecraft server, which you are not allowed to disctribute

dusky drum
#

isnt paper fork of spigot?

jovial warren
#

paperclip downloads Minecraft server and patches it when you run it

dusky drum
#

ow

#

interesting

astral quiver
#

but I guess that Spigot API

#

You can

ocean quartz
#

You cannot distribute Spigot itself, that's why they use Buildtools to download

astral quiver
#

BUT, why you will do that...

dusky drum
#

thats why papermc does some wierd stuff on first start XD

jovial warren
#

I don't think BuildTools is licensed under GPL

distant sun
#

You cannot distribute Spigot itself, that's why they use Buildtools to download
@ocean quartz that and because they are OLD :(

ocean quartz
#

Yup

dusky drum
#

and thats why theres cache with mojang,patched jars

ocean quartz
#

Paper is fine though, as the jar they distribute is basically a runtime buildtool

jovial warren
#

the Spigot API breaks GPL though anyway because they have their own license agreement that says everything you contribute is licensed to them under their own license rather than GPL

dusky drum
#

interesting

jovial warren
#

they're technically sublicensing GPL, which is illegal

ocean quartz
#

What is their license?

jovial warren
#

Spigot API is a fork of Bukkit, which is licensed under GPL

ocean quartz
#

It doesn't need to be specifically GPL, just a GPL compliant one, like MIT

astral quiver
#

PaperMc is not GPL?

jovial warren
#

GPL cannot be sublicensed Matt

astral quiver
#

I guess Papemc does Patch in the Spigot API as well

jovial warren
#

^ yeah

astral quiver
#

so, with the buildtool

#

I guess does not have a problem

jovial warren
#

Paper's source code contains nothing from Spigot, Bukkit, or NMS

ocean quartz
#

You can, if it is GPL compliant, paper is MIT

jovial warren
#

I thought Paper was GPL with MIT-licensed code

astral quiver
#

but distrubute a maven artifact with other License for the API I guess it is illegal

jovial warren
#

since you can submit MIT-licensed patches and put your name in the CONTRIBUTORS.md thingy

ocean quartz
#

Paper inherits its licensing from upstream projects.

As such, Paper is licensed under the GNU General Public License version 3; as it inherits it from Spigot, who in turn inherits it from the original Bukkit and Craftbukkit projects.

Any author who is not listed below should be presumed to have released their work under the original GPL license.

In the interest of promoting a better Minecraft platform for everyone, contributors may choose to release their code under the more permissive MIT License.

The authors listed below have chosen to release their code under that more permissive MIT License. Any contributor who wants their name added below should submit a pull request to this project to add their name.

astral quiver
#

because the maven artifact from paper will have Spgiot code inside

ocean quartz
#

Licensing is a fucking mess

astral quiver
#

ohhh

#

I get it

#

they migrate to MIT

#

This is allowed

#

if the authors accept it

#

Change license is a mess but can be done

jovial warren
#

licensing itself is a mess, I agree with Matt

ocean quartz
#

We should all use WTFPL license

astral quiver
#

I really dislike GPL

ocean quartz
#

Same, thank Grum for it

astral quiver
#

I really like MIT

ocean quartz
#

Same, all i do is MIT

jovial warren
#

I love GPL, because it's supposed to encourage people not to make premium forks of your shit, and encourage open-source

astral quiver
#

Yes, the same

#

Apache is no so bad, but I don't like it either

jovial warren
#

MIT is nice, but it means that my credit can be removed, so I prefer to use Apache

unreal briar
#

GPL promotes collaboration, MIT promotes embrace

astral quiver
#

But I think this way: I do open source because I love to share and help other peoples with my code

#

But I don't care if they will get it, add stuff and sell it

#

because was my choose to do not that

#

And if they will put work on it, I guess they can sell

jovial warren
#

I make my stuff open-source because I want to encourage people to be more open with their stuff in the world, and I like to see people making use of my stuff

astral quiver
#

Because so many people need to make money I have a great idea about a thing that they love

prisma wave
#

@jovial warren plenty of pre-existing nbt libraries, making an in-house one is probably a bad idea

astral quiver
#

but they can't do because is GPL

#

Like, I want to change a plugin but only for my server

#

To have the essence of my server

#

but is illegal to do

#

I don't want to share a code that have alot of private APIs that, never will work, just because it should be open source

jovial warren
#

I think I prefer Apache over GPL tbh, since Apache gives my software more diversity in terms of usage, but still means that people retain my credit, meaning people can go "oh look, this was made by Callum"

astral quiver
#

MIT as well

jovial warren
#

it's also why I use the @author tag pretty much everywhere

astral quiver
#

but Apache you can't have closed source

jovial warren
#

you can do the same with MIT

astral quiver
#

I guess

#

or you can?

jovial warren
#

but Apache you can't have closed source
what are you on about

#

you realise Kotlin is licensed under Apache 2

#

and so is OpenJDK I believe

astral quiver
#

Android as well

jovial warren
#

exactly

#

also, you realise that technically GPL can be used in proprietary software

#

but since you can't sublicense it, anyone who owns the binary version of your software has the right to request the source code, and you're supposed to give it to them

#

imagine a world where we didn't have to worry about things like licensing because people just behaved themselves lol

#

also @prisma wave , in that case, you got one in mind?

#

we need one that's stupid fast and efficient ideally

astral quiver
#

I don't blame people that put their work in something that is open to get money

jovial warren
#

I still wonder how we're gonna pull this off, since I imagine that the Minecraft protocol model is protected by the EULA

astral quiver
#

A Premium Spigot fork is needed because we can't change game stuffs

#

If we are in the Forge/Sponge world, we can just use Mixins

#

or ASM it self to change the NMS

#

like, to improve performance

jovial warren
#

^ you mean reflection

astral quiver
#

and sell it

#

No, actually ASM

jovial warren
#

you can just use reflection to change NMS

astral quiver
#

Change the bytecode

jovial warren
#

ah okay

astral quiver
#

This is what Forge and Sponge does to add their APIs

jovial warren
#

or you could do what me and @prisma wave are doing and rewrite the entirety of the Minecraft protocol from scratch

astral quiver
#

lol

jovial warren
#

what Bukkit probably should've done

astral quiver
#

If I have time, I will try to help you folks

jovial warren
#

cool

astral quiver
#

Done in Kotlin

#

BUTTTTT it does not focus on Kotlin features

#

And it is just really sad to see

#

Is a minecraft server implementation in Kotlin

#

with the same things that you could do in Java

prisma wave
#

what Bukkit probably should've done
@jovial warren that wasn't the point of Bukkit though

jovial warren
#

true

#

the point of Bukkit was to allow you to easily manipulate game mechanics with add-ons without having to reflectively update NMS

astral quiver
#

The main problem with Sponge is the focus on Java 8 APIs

#

I don't want use Optional

jovial warren
#

Sponge also doesn't have Spigot/Bukkit compatibility

astral quiver
#

I want @Nullable annotations !!!!

prisma wave
#

Uh oh

jovial warren
#

oof

onyx loom
#

😂

prisma wave
#

Discord strikes again

astral quiver
#

Was not me!! 👀

#

I dont not ping null

#

👀

prisma wave
old wyvern
#

Null shall now present himself

jovial warren
#

one thing I was thinking about as well was a Bukkit compatibility layer, if it's possible, so Bukkit/Spigot plugins can function on MineKraft, which will make it more appealing

old wyvern
#

Prepare yourself

prisma wave
#

one thing I was thinking about as well was a Bukkit compatibility layer, if it's possible, so Bukkit/Spigot plugins can function on MineKraft, which will make it more appealing
@jovial warren that would be an excruciating amount of effort

jovial warren
#

are compatibility layers like that even possible?

prisma wave
#

You might be able to use classgen or something

astral quiver
#

If you folks have this IDEA in mind, the project will need to be done thinking in that

prisma wave
#

But not without a lot of effort

jovial warren
#

yeah

astral quiver
#

and I think that if you folks want that

#

will put limitation on your implementation

jovial warren
#

I mean obviously we're making our own API from scratch either way

astral quiver
#

using kotlin

prisma wave
#

Also most plugins are really tightly coupled to being in a bukkit context

#

So getting past that would be tricky

old wyvern
#

Make a skeleton of the bukkit classes

jovial warren
#

yeah true

#

that could work

old wyvern
#

Have them hook into MineKraft classes internally

jovial warren
#

^ brilliant idea

old wyvern
#

Hold them in a separate module to separate their developement

prisma wave
#

that wouldn't work for any plugin using NMS or anything though

#

Or for things that aren't interfaces

old wyvern
#

Good point

#

hmm

jovial warren
#

yeah and I ain't adding a compatibility layer for that lol

astral quiver
#

I guess they try to that with Sponge & Bukkit

#

but they drop it

prisma wave
#

Or all of the plugins that depend on the very specific functionality of Bukkit

old wyvern
#

ORRRR

jovial warren
#

like what?

old wyvern
#

We allow Elara scripts for MineKraft

astral quiver
#

Bukkript >

prisma wave
#

Elara >

astral quiver
jovial warren
#

if Elara can support Kotlin then yeah

prisma wave
#

lol

#

yeah....

#

Totally

onyx loom
#

did someone say elara

jovial warren
#

Elara multiplatform

#

Elara/Kotlin/JVM xD

old wyvern
#

We can have the evalutor function anywhere needed technically

astral quiver
#

Elara tooling, hope this exists 👀

prisma wave
#

Multiplatform would be nice but a lot of effort

astral quiver
#

Yes

old wyvern
#

Lets replace skript

prisma wave
#

Yes

jovial warren
#

yeah Skript can go fuck itself lol

prisma wave
#

Elara/Clojure will be the first backend I think

old wyvern
#

xD

prisma wave
#

Followed by Elara/Fortran

jovial warren
#

Elara/Fortran? get outta here

old wyvern
#

Elara native

prisma wave
#

Boring

#

We need transpiling

#

Elara/BASIC

old wyvern
#

Yes!

#

Elara to every other fucking language that exists

#

xD

#

The one language to take over all

prisma wave
#

That might even be possible though

#

With a bit of clever abstraction

#

You could make backends for most other languages

old wyvern
#

hmmm

jovial warren
#

how about we make a translator system that uses machine learning to figure out how to write Elara code in other languages intuitively

#

lol

#

then Elara would be the only language you'd ever need

old wyvern
#

Machine learning for this? You could probably build a transipiler by the time you create enough labelled data for it to be close to viable

onyx loom
prisma wave
#

Oof

#

Elara/Skript...?

onyx loom
#

Elara/Go

old wyvern
#

oh fuck no

prisma wave
old wyvern
#

Elara/Skript...?
@prisma wave
jnfownfow

#

xD

prisma wave
#

I think it's a good idea

old wyvern
#

I mean why skript

#

We can have elara be a scripting language by itself

onyx loom
#

absolutely not

#

no S word

prisma wave
#

Scripting good Skripting bad

old wyvern
#

If we keep it being interpretted we can possibly even provide better "hotswapping"

prisma wave
#

👀