#dev-general
1 messages ยท Page 309 of 1
@ocean quartz you've done stuff with central, there's nothing wrong with https://paste.helpch.at/mocodejoma.cs is there?
no reason why that should give me a 401
๐ฅฒ
lmao per version charge
I mean, I already have an account on BM's repo, but I wanted to try out central for this
kinda regretting my decision now ngl
just use jitpack ๐
depends
it ain't bloody wrong though
Jitpack sucks though
No idea, used maven when was doing it fot central because with Gradle it would only stage had to be released (i think that's the word) manually
epm repositories
might use Indra ngl
yes use jitpack
Host nexus on your localhost open your port and share your ip ez
so smart!

thats so smart!
do it in haskell
why has no one ever thought of that matt
Wow! There's a docker image for sonatype nexus 3! Who would have imagined.
artifact <- fetchArtifact "elara"
epm fetch bombardygamer/minelara xD
Repo that's only reachable when you're online sounds like an awesome idea
indeed it does
Just leave your computer on all night
exactly!
!!
just get a raspberry pi smh
not to mention that ur giving out ur ip directly!
or make a plugin to do it and then host it on server.pro ๐
Oh my god
Windows 10 be like "How likely are you to recommend Calculator App to a friend or colleague?"
linux be like exists
mavenUsername='BomBardyGamer' well that might explain my issues
docker volumes look very cool
might need to start using these
instead of paths in my home directory lmfao
mention docker and ull summon lemmo
how do i summon a dad
๐ณ
oof i restarted intellij but it didn't open
and hasn't been opening for like the past 5 minutes
welp
log out and log back in
windows user
mhm
I've changed my mind, publishing to Maven Central ez
just gotta set everything up right
yep keep telling yourself that
you will change your mind very quickly whenever you use a different language and deploy there
attempt #2 btw
attempt #1 failed because my key wasn't on a verified key server lol
and here we go, it's released
over an hour to deploy lol
I got the response that I was allowed to use this at 18:35 lol
lmao
https://issues.sonatype.org/projects/OSSRH/issues/OSSRH-64655?filter=allissues looks like Morgan Stanley's trying to claim their namespace lol
efe!
how's it going? lol
@ocean quartz btw, after you've posted a comment saying you've published your component, is it manual verification or what?
Uh i don't remember
https://issues.sonatype.org/browse/OSSRH-50944?jql=text ~ "ipsk" looks like yours was a bit different
yours was automatic, but it took a couple of hours
just wondering
what the fuck
^

call 110
110?
its probably their emergency number
EU?
Yeah, for us it works for everything you call and explain and they'll send accordingly
911 works in EU too since tourists sometimes don't know the emergency number of the country
111 for non-emergency NHS, and 101 for non-emergency police
and then if you want to report something to the local police, you just ring their landline number
emergency numbers seems like a thing that should be standardized lol
yes but you can still call it for any emergency, they will redirect you
yes
mainly so you have a single number across many countries that people can memorise
lol
yep
I hate it
that's what the ASC files are for
I love the idea of signing your shit for verification
that's an amazing idea
imagine using repo.maven.apache.org instead of repo1.maven.org
I just googled "Maven Central" and that's what I found lol
right, that's adventure replaced
time to replace adventure NBT lol
gets error
spends 2 more hours
hates central
continues using repo.bristermitten.me
lol
switches to clojars
"clojars"?
wow, I didn't know trash languages made that sorta stuff
it's a maven repo
reject evolution bardy
send me a fax tomorrow
after you've signed the maven central contract by hand
you know my thing's already on Central right? lol
wonder how long it'll take https://search.maven.org and https://mvnrepository.com to update
Official search by the maintainers of Maven Central Repository
I do wonder
also im 50 minutes through that haskell ivory tower video
with clojars I just type lein deploy and I'm done 
i must say it's very interesting
also, anyone got any CI recommendations btw?
how much easier is it compared to gradle publish (not on central)
debating whether to self-host Jenkins again or go for a cloud hosted one
i assume you still need to configure some stuff
everything's easy compared to central
yea ik
im saying compared to publishing on a self hosted repo for example
like if i wanna deploy an api for a plugin, i just run gradle publish. i had to do some minor setup initially so it knows my credentials and stuff, but now that its setup its just one command
im assuming clojars is similar
also, me using Central means I don't have to worry about allocating 4 cores and 8 GB RAM just to host Nexus lol
https://github.com/clojars/clojars-web/wiki/Tutorial according to this, incredibly easy
you just put username and password and url in ~/.lein/init.clj and it works
from what i can see
not speaking from experience
yea this does look pretty easy
yeah you just get a one time token and you're done
also, can I get some feedback on the Komponent DSL?
is ```kotlin
component {
translation("key") {
children {
text("I am text! I am part of the with of the translation component above!")
}
}
}
tempted to just have xComponent (e.g. textComponent, translationComponent, etc.) instead of component, to avoid having to throw an UnsupportedOperationException when someone tries to define 2 root components
textComponent("I am text!") {
color = NamedColor.BLACK
formatting {
bold = true
italic = true
}
text("I am a child of my parent!")
}
```thinking this is a bit cleaner
translation as in text depending on the client language?
yeah
nice
considering the focus on DSLs in kotlin, it is surprising that there's not much type safety with them
not type safety
you know what i mean
static checking
for example, making sure at compile time that this can't happen
top vs bottom
comparing apples and oranges
theyre different?
nah
is "apples and oranges" a thing?
yea people say that
you've never heard the expression "it's like comparing apples to oranges" before?
maybe just a British thing
we say it in the US
anyway, there's not an obvious difference between the 2, because they're different
no, but I haven't picked up all the collocations native speakers use yet
didn't know you were from the US 
I was just interested here because it's "apples and pears" in my language
indeed
the land of the dummies
๐ฅฒ
yeah that seems to be the EU equivalent
i think it's said here sometimes though
also bardy it seems like your dsl could get very "arrow codey," but i might be misunderstanding it
yeah that seems to happen pretty regularly with DSLs
consider using EDN instead ๐
yeah that's the problem
that's why I suggested option #2
could you do it similar to this where its like in order is how it gets added instead of each "node" has children
why am i doing my ifs like that
lmao
I don't like the Bungee component DSL
or whatever tf that is meant to be
the bungee component builder is horrible
thats just calling .apply on a ComponentBuilder lol
@lunar cypress Do you know if there's a reason why in clojure and many other FP langs, lists don't provide random access by default? (instead having distinct vector, array, etc types). I assume the reason is that the persistent implementations are something like a linked list, but could you confirm? not sure how to google this lol
well they usually do, don't they?
not in constant time i mean
or do they?
if so, what's the point of vectors / arrays?
yeah that's implementation detail
I suppose what you're asking is why linked lists are the default
yeah
@prisma wave btw, for commands, we gonna use Brigadier? or we going for our own custom systemโข๏ธ?
I mean, used by pretty much every other impl
brigadier is good
as I think just about everyone's said before, looking for an alternative to open-source software is just dumb
gonna need to add a DSL to that though
because builders ew
well that's mostly because they're the most basic (and often cheapest) immutable data structure you can think of. But there's usually a bit more to this, most notably laziness
LiteralCommandNode<?> timeCommand = LiteralArgumentBuilder.literal("time")
.then(LiteralArgumentBuilder.literal("set")
.then(LiteralArgumentBuilder.literal("day"))
.then(LiteralArgumentBuilder.literal("noon"))
.then(LiteralArgumentBuilder.literal("night"))
.then(LiteralArgumentBuilder.literal("midnight"))
.then(RequiredArgumentBuilder.argument("time", IntegerArgumentType.integer())))
.then(LiteralArgumentBuilder.literal("add")
.then(RequiredArgumentBuilder.argument("time", IntegerArgumentType.integer())))
.then(LiteralArgumentBuilder.literal("query")
.then(LiteralArgumentBuilder.literal("daytime"))
.then(LiteralArgumentBuilder.literal("gametime"))
.then(LiteralArgumentBuilder.literal("day"))
).build();
```๐คฎ
beautiful in Java, disgusting in Kotlin
In Haskell lists are lazy, and in clojure you typically don't deal with lists but rather lazy sequences which are very similar in structure
i see
yes please
is there not a persistent list implementation that also provides constant random access? or is there just no point
but one of the most beautiful thing about them is definitely that you get an immutable data structure where insertion and removal is O(1) for both time and memory
yeah that's very cool
to my knowledge that is impossible
huh okay
I don't know what haskell has to offer, but Clojure uses a tree-like structure for vectors to make immutability cheap. It's "good enough" in most cases but not technically O(1)
Haskell possibly has something more efficient
I believe in the case of vectors it's O(log n), but in practice the base of the logarithm is 32 so you pretty much approach constant time
oh yeah I think I remember watching a video on that
okay that makes sense, ty
in that case it would probably be a very good idea for Elara to have some sort of native lazy sequence, right?
literalCommand("time") {
literalArgument("set") {
literalArgument("day")
literalArgumen("noon")
literalArgument("night")
literalArgument("midnight")
requiredArgument<Int>("time")
}
literalArgument("add") {
requiredArgument<Int>("time")
}
literalArgument("query") {
literalArgument("daytime")
literalArgument("gametime")
literalArgument("day")
}
}
now that's what you call a DSL
some sequence interface would be good, yeah
alrighty
i think i had a small idea for them, but i didn't realise just how important they were
I actually think clojure data structures might beat haskell ones
just a guess because a lot of research and time went into Clojure's data structures to make them practical and able to compete with mutable ones
while haskell focuses more on purity
yeah i've heard there's some overhead from some of the things they do
makes sense
i would've guessed Haskell's are faster because they aren't tied to a VM so there's more potential for optimisation
but maybe not
but idk. Haskell can perform pretty well and it's hard to compare because of the different runtimes
yea there's probably not a huge difference either way
haskell would have the advantage of being native + statically typed though
JVM first
i wanna try do a native impl at some point
but that would require a lot more thought
writing an entire runtime is not an easy thing to do
and it most definitely should not be done before the reference implementation is mature enough
i.e. never
If you write to existing runtimes there's usually ways to do native anyway
GraalVM works pretty well for Clojure as an example
yeah have fun writing a compiler for every target out there bardy
NASM's pretty nice
yeah that also sounds painful
Elara on ARM
that would be cool
that's why you scratch assembly and write to LLVM
I'd have to write NASM Linux x86, Linux ARM, MASM and AT&T
I think
AT&T though
fuck that
"Not configuration help"
i have had an idea that might be cool
currying but for all of the parameters
"total application"?
for example f :: a -> b, totally applying f would return a function () -> b
foo(bar, _, baz, quz, _)
hmm?
is that already a thing
idk, I mean it's all just a lambda with extra steps
yeah true
or with less steps lol
yeah i guess it's not that useful
especially not in a pure lang
in haskell couldn't it just be a "variable" of type b?
since it would be lazily evaluated
if, for example it was a random number function rand :: Int -> Int, hs randInt = rand 30 would be the same thing as ```hs
randInt () = rand 30
I don't think so
yeah it's what I meant
Prelude> foo x = x + 5
Prelude> foo1 = foo 5
Prelude> :t foo1
foo1 :: Num a => a
Prelude> foo2 () = foo 5
Prelude> :t foo2
foo2 :: Num a => () -> a
not just slightly
one defines a function because of the empty parameter list
the other calls a function and defines a variable with the returned value
a1 = 3
a2 () = 3
``` these are both functionally equivalent though, right? the only difference is that `a2` requires `()`
would something like replicateM 10 a1 evaluate 3 every time?
isn't that for monads
https://i.imgur.com/uAPOcjZ.png anyone else sad enough to do this btw?
they're still different types, I don't think you can pass a scalar as a function
yeah
If you made a2 take one parameter that is discarded it would be equivalent to const 3
yes bcs types
mhm
okay i see
do you know if there's a reason why the language actually distinguishes between the 2? since a scalar could be converted to a function taking unit and vice versa
i think
i guess in the case of stuff like random numbers where there would be a noticeable difference, that's covered with monads
because there is no benefit to convoluting those concepts
it only creates ambiguity
fair enough
at least the way the language is structured wouldn't profit from it
still need help setting the module sdk through gradle
for some reason my intellij is freaking out and cant recognize dependencies
like it cant recognize import statements either
invalidate & restart
That moment when your code works fine, you stop working on it for a bit to add another part then go back to it and it no longer works
:))

familiar feeling
trying to think if ```kotlin
textComponent("I am text!") {
color = NamedColor.BLACK
formatting {
bold = true
italic = true
}
clickEvent = openURL("https://example.com")
hoverEvent = showText("I am hover text!")
text("I am child text!") {
color = NamedColor.WHITE
}
}
better than kotlin
component {
text("I am text!") {
color = NamedColor.BLACK
formatting {
bold = true
italic = true
}
clickEvent = openURL("https://example.com")
hoverEvent = showText("I am hover text!")
children {
text("I am child text!") {
color = NamedColor.WHITE
}
}
}
}
if you can add showItem without having to deserialize the item then you are gud
@jovial warren look at this smh
wdym without having to deserialise the item?
the way I serialise and deserialise any type of hoverevent content is proper hacks.exe
lemme show you
I had to use nmshit
items can have optional NBT iirc
but I've left that out for now
until me.bardy.nbt is made lol
good
@prisma wave stfu
just because you prefer Hibernate over Exposed
because somehow Hibernate is better for Kotlin
I prefer raw SQL queries to whatever tf exposed is trying to be
Exposed is amazing
It's so ugly
how does hibernate looks like
Since always
Mr. <$> .:
fr
Those aren't ugly

Annotations
yes, that's hideous
Actually been using exposed and quite like it
example bm
Hibernate (for Kotlin and non-Spring) bad
I'm on mobile
that's so bad
Cba to find an example
gimme a min
I'll do it for you
Thats a VERY good guide.
I know right!
@get:GeneratedValue what's up with the @get:
@Entity
data class Player(
@Id val id: Int,
val uuid: UUID,
val name: String,
val kills: Int
)
```iirc
but Hibernate is massive
kotlin being ugly
annotation target iirc
Exposed:
object Users : Table() {
val id = integer("user_id").autoIncrement()
val name = varchar("name", 50)
override val primaryKey = PrimaryKey(id, name = "pk_user_id")
}
That's not really a fair comparison
yeah let's just use all symbols we have
.: comes from a library
they are there for a reason
That's not a standard thing
and what does it mean bruh
idk
what you overriding the PK for?
Some sort of custom operator for serialization
why do people hate themselves and write languages like that
also, why you defining an id there?
That's how you're supposed to do
<$> probably comes from the mathematical definition of a functor, since that's what it operates on
object Users : IntIdTable() {
val name = varchar("name", 50)
}
what are you doing with your life Matt
honestly
get on my level
IntIdTable ain't deprecated
right out of their readme lmao
:))
never used it but it looks like thats how they want it done
I prefer to have my pk declared
IntIdTable automatically declares your ID field and PK for you
unacceptable!
Like i said i prefer to have it there visible lol
fair
lol
how exactly is this better than a data class + an annotation
Hell yeah
more lightweight
more idiomatic
LongLong.MAX_VALUE times better
Hello, I wish I could reload my plugin by storing a Multimap in a config.yml file and retrieve them afterwards, but I can't ... please help me.
actually it's not more idiomatic, that's a lie
I find it ugly but i like it more than hibernate
It's more lightweight because it's barely an ORM... Hibernate abstracts literally everything away into a few functions
where is the ugly party
That doesn't answer the question
alright Mr. Declarative good imperative bad
us normal people don't mind a bit of imperative programming
return Answer(LongLong.MAX_VALUE times better)
happy now?
This is literally declarative
LongLong?
c has long long iirc
lanfguags
let x;
if (you) {
x = me
} else {
x = you
}```
Shut
noice
Dgraph is what's hot
Matt is hot
๐ณ
graphql
graphsql looks interesting but cant find an use for it rn
Dgraph is a database with graphql built in, nerd
graphql is overkill for a lot of projects
on the server side I mean
On the client side it's great
oh ok nice
whats graphql
I canโt remember
lemmo suggested I use it on docdex and I briefly looked into it
a query language
well more specifically I looked into neo4j, I think theyโre related
What is GraphQL? Learn how it compares to REST and why developers love this query language for reading and mutating data in APIs https://fireship.io/tags/graphql
GraphQL API Docs https://graphql.org/
SpaceX GraphQL API https://api.spacex.land/graphql/
#dev#graphql #100SecondsOfCode
Install the quiz app ๐ค
those videos are so satisfying to me
yea he does a great job
fireship
aight iโm gonna implement that for docdex
pog
when you look at https://blogs.oracle.com/thejavatutorials and see this:
An Oracle blog about the Java Tutorials
also they make 1 sentence like 20 lines
unreadable
?
๐
We're would I go for spigot dev support?
Gotcha ty
https://i.imgur.com/oSPRkTU.png who doesn't love a 30m indexing
Butiful
Damn everyone in kyori discord trash talking pdm๐
It's valid criticism but still hurts
show them screenshots
of what lol
of them trash talking ๐
o right
make my morning good
There's my treasure ๐
cant do "012345".indexOf(c) == -1 or smth like that?
isnt like you download a dependency every 5 minutes
I mean if a big plugin used it, it might
But it uses central mirrors anyway
Me and glare both host one
how so?
does it not download the dependencies on startup?
Yeah it does
But there are probably enough people using something like Essentials so it's equivalent
Not sure what they are complaining about tbf
Lack of relocation mostly
Ah
Which is obviously an issue
How about comparitive to Java?
But why not learn Elixir?
Is Elixir on BEAM?
BEAM ?
I was just asked to use Ejaberd so I assume any language on BEAM works
ErLang's VM
Also fully interoperable?
was haskell not designed to be useful?
Its more of an academic language piggy
any idea how can I design a config system that extends YamlConfiguration or something?
Most of the old fp languages were just made for academics to circlejerk over type theory
gaby yamlconfiguration is an impl
I don't think you're meant to extend it
and why would you want to?
this might be an xy problem
was trying to get a config class that I can use without configClass.getYaml().getString()
Wha?
Im just trying to learn something different
gaby simply don't use bukkit's config api
make your own objects
and use snakeyaml directly
@frigid badge do u use aws at work? https://web.archive.org/web/20210216153239/https://github.com/salesforce/endgame / https://github.com/brandongalbraith/endgame
uhh
for a chat filter, would be ok to have a list of regex patters and check if one matches instead of a big ass regex?
Would it even affect the speed at all
Probably not. If you're worried run a benchmark with the max amount of chars possible in chat
I believe there is a limit per message?
256
probably not as in is not good or it won't matter xd
@old wyvern
also, where would I run this benchmark ๐ฎ
Random message generator 
and it's a reasonable change otherwise
@quiet depot interesting, we don't use aws at work so no worries gladly.
ah that's too bad
u could've hijacked ur company and held them for ransom
personally, it's one of my favourite pastimes
lmao
@prisma wave btw bm how does pdm remove the need to relocate?
I just noticed that while reading through the kyori logs a bit earlier
it doesnt exactly
i think i wrote that part of the readme before i realised how important relocation was
ah, I think that part is what led them to the 'classloader' hack part
probably
They seem to have assumed you use an isolated classloader
yea
so other plugins taking in dependencies from this plugin would have issues
or something similar
Actually that shouldnt matter hmm
Yugi, do you plan on playing wf consistently? Cause if yes I got some shit for you
K neat
Senpai
Make ur own gb game
TWITCH: https://www.twitch.tv/mortmort
Tools, Hardware, Software & Socials in the Description
โฆ๏ธ โฆ๏ธ โฆ๏ธ โฆ๏ธ โฆ๏ธ โฆ๏ธ โฆ๏ธ โฆ๏ธ โฆ๏ธ โฆ๏ธ โฆ๏ธ โฆ๏ธ โฆ๏ธ โฆ๏ธ โฆ๏ธ
Website: https://www.mortmort.net/
TWITTER: https://twitter.com/MortMort_
INSTAGRAM: https://www.instagram.com/mortmort__
ITCHIO: https://mortmort.itch.io/
Discord: https://discord.gg/6qpKjzC
PIXEL MERCH: h...
@prisma wave finally got it to work ๐ฎ
that is beautiful
hAsKeLl
what does the .: do? i saw it's from that json library
๐ฅฒ Almost 2 days of work to finnaly understand how to resolve all that xD
is it just for getting an element in the json?
all worth it tho
fetching a value from the json object
mhm
Was pretty large, had to rewrite the function to shorten it once I actually got it to compile
๐ฅฒ
yea I guess so
same with rust
this would just end up with a Nothing if any of the calls fail
very nice
(from a dummy acc ofc)
xD
cute
@prisma wave one more for the collection https://i.imgur.com/mwzqw6H.png
or maybe it looks better like this? https://i.imgur.com/MNaZn25.png
xD
i alreayd got that one lol
oh ok
oh it is that old xD
no one removed it
thought its new didn't even look at the hour
lol
wonderful, 2 languages that idk and 1 that haunts my nightmares
๐ฅฒ
I have never used it tho ๐คท
I see
its noice
๐ฎ i have an awesome idea to do with my new javafx skills
||an app to make a minecraft server (just the files, nothing like a start/stop button)||
text("I am text!") {
color = NamedColor.BLACK
text("I am child text!")
}
```how dis look
actually lemme edit that
how dat look
having text on the top level seems like it could take away from other functions
This would be applied to which text?
color = NamedColor.BLACK
cli pls
๐
uhhhhhh
||nooooooo||
||i need to use javafx skills||
do u have an idea for a project?
how what
up to you
do you really like cli that much
then you'd love cli minecraft ๐
๐
๐
the benefit of CLI is that if you know what you want to do and how, you can do it much quicker than a GUI
sometimes significantly faster
depends on the task
i cant really think of a good example lol
i could type ./start-server --spigot faster than i could open a GUI, put in the values in different text boxes and click a start button
i think most people could
yea
i thought u meant like
what did you think i meant lol
cli very good
o right
they can be nicer
npm init is pretty nice
you have a prompt to input project name, author, github url, version etc
rather than doing it all at once
gradle init is also very nice
yeah that too
the gradle command line is good
often faster than navigating through a bunch of menus in IJ
real ones run gradle in a docker container
๐ฅฒ
realest ones run their whole computer in a docket container
i dont like cli bc u have to memorize the cmds
you definitely know the gradle ones off by heart for example
lol
gradle shadowJar, gradle build, gradle init, etc
go
- how do you delete all files in windows cmd prompt
idk
by all files i mean wipe the hard drive
fuck windows
i barely use batch
sudo rm -rf / โno-preserve-root in linux
lol
#2
lmao
im not sure you should test that anyway
how come?
We just got asked to install wamp. Php is coming ๐ซ
F
because it would delete everything lol
php bad or good?
php bad
very bad
oh
PHP and COBOL are the only 2 languages i would say are objectively "bad"
Lua also ๐
never used lua but i've heard lua is good
gtg byee
adios
ill live
no u wont
ciao
I hate lua on the way they are executed on runtime (thread)
Not too sure what are after that 
I have CompleteableFuture<Person>
Person has level
And xp
I want to put placeholders for level and xp
No?
Ask in the right channel if you want help
Ok someone go to support channel and help me
lol
also, me working on a Brigadier DSL
rate pls
literalArgument<Player>("time") {
literalArgument("set") {
literalArgument("day")
literalArgument("noon")
literalArgument("night")
literalArgument("midnight")
requiredArgument("time", integer)
}
literalArgument("add") {
requiredArgument("time", integer)
}
literalArgument("query") {
literalArgument("daytime")
literalArgument("gametime")
literalArgument("day")
}
}
thinking about it, maybe those extension ones don't need to be suffixed with "Argument"
consistency though amirite
you could possibly do better with infixes maybe
That doesnt look very diff from how brigadier already is
no but it's better than using a builder in Kotlin
also, how would I use infixes here?
Copy-paste is a thing...
They form a left derivative tree when used in sequence I think
You could probably have people specify the whole command tree that way maybe?
literalArgument("time") then "set" then {
"day", "noon", "night", "midnight", required("time") type integer
}
```that wouldn't be bad, but likely wouldn't work
That is ew
ew
top one ew?
There's no way that compiles
yeah that won't compile lol
why not? hmm
why would it?
the random strings + commas
you would probably need to use a collection there instead of a lambda
The rest is fine
I kinda like this though ngl
tfw no macros
๐ฅฒ
The important part of it works
Could possibly improve that a lot
that link just seems to send me to my own playground btw
oh wait
Worked for me
Same here
oh yeah, worked in different browser
You would have to replace the comma and stuff with something else I guess but it mostly works
not 100% sure on this DSL
because the trees would still turn out looking about the same
infinx fun Any.`,`(any: Any) {}
There i made the comma work ez
It looks fairly better than what brigadier has I think
I do like this
why would you want to make this a sequential thing if you end up with a tree structure anyway
consider multiple layers of sub commands
literalArgument("time") then {
then "set" then {
then "day"
then "night"
}
then "query" then {
then "daytime" type integer
}
}
or something like that
Too many then
literalArgument("time") then {
"set" then {
"day"
"night"
}
"query" then {
"daytime" type integer
}
}``` could be reduced to this I think
yeah maybe
Or Bardy. Have no DSL for it, build it into the commands system of minekraft directly.
MineKraft doesn't have a command system lol
not sure if I want to make one yet or not
Brigadier
Disgusting
that's what this is a DSL for
oh i was thinking brigadier was only for the colored arguments and stuff
thatโs gross donโt make it only brigadier lol
nah Brigadier is the full monty
Make sure you add colored arguments support somehow
if Brigadier supports it, Admiral supports it lol
j think a command system as a part of minekraft similar to mattโs lib maybe that automatically does brigadier colored arguments for you
@prisma wave what do you think? Brigadier or custom?
Custom
we ain't using MF CMD
custom for sure
you know Brigadier won't be for the frontend right btw?
Start using it
oh then do whatever you want lmao
we'll come up with a custom system for the API ofc
i thought you were saying your solution to plugin commands was brigadier lol
Why two different systems?
but this is just for parsing and dispatching on the backend
Use the same one
just use brigadier then
we need something to parse and dispatch on the backend that's not exposed on the frontend
and also, using existing free and open-source libraries > making your own
Why?
the server doesn't really need to worry about this
because I don't want plugin developers to have to do dispatching on the backend
again, this is something that should be down to individual plugins to use
What dispatching on the backend do you mean?
Brigadier
So you dont want plugin developers to access brigadier?
I want them to be able to optionally access it, but not be forced to
Brigadier isn't designed for the frontend anyway
They dont need to be forced to anyway tho
If you have a proper interface set up to create commands you could use the same for internal purposes and allow developers to use that in plugins
maybe
that means I gotta create my own dispatcher from scratch though lol
Sure
project Admiral is a go I guess (name derived from lucko's commodore lol)
trying to think how I want this to work
also trying to resist the temptation to look at Brigadier source code for ideas lol
might make something similar to the way BungeeCord's command stuff works for the frontend
These names lol
e.g. ```kotlin
class MyCommand : Command(name, permission, aliases) {
override fun execute(sender: Sender, args: List<Argument>) {
// do some thingys
}
}
or one better, suspend operator fun invoke
we do not need a separate project for every single thing
no but this is going to be separate
because it's mine xD
and because I want to make more standalone libs
ok but don't expect it to necessarily be used
we can just use brigadier on the server side and any other frameworks that people want can build upon that
that's literally what I said
^
ok this means its not gonna be used
but Yugi said bad
+1
literally just something as basic as bukkit CommandExecutor would be fine
correct
yeah no that's trash BM
I want my method of defining commands, it better xD
Command(name, permission, aliases)
bukkit has that too
yeah but you're not really meant to use it
i didnt say a carbon clone of bukkit's system
but it's not the server's responsibility to provide an overengineered framework for very simple things
as long as we don't have ```kotlin
override fun onCommand(sender: Sender, command: Command, label: String, args: Array<String>)
yeah ik
the reason why we use Komponent is because it's lightweight for example
on the server layer you don't even need that
literally it's only purpose is easy serialisation and deserialisation to and from JSON with kotlinx.serialization
we are not writing raw JSON strings
that's a pain in the ass
it is when you gotta escape everything
and it's barely readable at the best of times
kotlin has raw strings, and i didn't say hardcoding
but there are very few situations where the server implementation ever needs to handle json data
I guess
the implementation should just take some json or some low level abstraction and send and receive it
except for chat messages, which the text gets wrapped
yes

