#dev-general
1 messages · Page 335 of 1
It's still not enough compared to what I talked about lol
Sir this is #dev-general
Then tell me where is the send random voiceclips
Sir this is #dev-general
probably in Chat Chat
Aw man... i left there 🥲
oh want invite?
#dev-general more like why haskell is good

@steel heart i'ma end u
what is dead?
Just a chat chat
what is chat chat
Just a simple chat chat land
-.-
Like help chat, but not
oh no my neon 404 is broken 😦
discord invite? 
;-; ok
my neon 404 thooo 😢 https://i.imgur.com/SuaTePD.png
its gone
its broken
its
shit
Also, the game I was talking about was Yandere Simulator
If you know her
😂
If someone still hasn't figured, there are a lot of memes that cited their code on reddit + people on yt started explaining codes
hmm can you go back on github? Like 2 commits back or something?
like from the page itself not using commands
oh I can create branch from a commit
and then merge that one to the main lmao
or maybe not
That's what branches are for, no?
well bcz master is newer and has all the things the old branch has I can't pr it into master
bcz that's what I did
and I made a new branch from that commit
and then I tried pr-ing the new branch onto the main one
but doesn't let me
You want to revert commits?
.
I don't even know how to connect to a repo using commands
lmao
You just use it in the ij terminal or command window
It does
yes
actually its way longer if you click on it but it takes the first 7
wdym?
this is full string https://i.imgur.com/zqMeCYu.png this is shortened version https://i.imgur.com/3g3tsph.png
use the full one
oh I ussed the short one lmao. and it worked
well I think it did
do I need to push now?
it asks me to pull first but if I pull it will just go back to the newest one won't it?
ah I had to force push it
git push --force
thanks
lol
my neon page works again
Dont think you had to force push tho, but I might be wrong here
it just sent an error saying I have to pull first if I didn't force
weird
maybe I typed something wrong idk
No this is correct
kek
no idea why thism happens XD
What's your argument on that packet lol
welp i figuret out i have to send seperate packet to cancel item velocity for some reason, and i also found that i dont know how to get datawatcher object to gravity on 1.8...
does anyone know how airships detect their altitude?
Sir this is #dev-general
@compact perch what channel is this
@quiet depot, Sir this is #dev-general
barry is correct there
May I wanna know how to develop such technology on my own?
but this isn't an aviation channel
n3w0rk there’s a little man who drops down a rule from the plane and measures how far it goes till he feels it can’t go any further
thx
Like boats with their rope and knots?
ofc
Hmm.. There are rising some doubts
Haven't seen such a huge ruler
no the little man just pulls it up a little bit
and are you stupid?
the earth isn’t flat it’s just not not flat
4head
lol
12:58:33.062 DefaultDispatcher-worker-1 Server DEBUG NioEventLoopGroup is the chosen one quality lol
Hey folks, anyone that knows minecraft protocol?
the packet id is a varint by the specification, but currently I'm only seeing a Byte from it
I want to know if anyone knows if the packet id uses this varint currently
like, I don't new packets that need more the one byte to represent its ID
Just wondering, what are your opinions on Python? Is it a good language to use?
I don't hate it
It's not my favourite language tho, although many people like it
Very easy to learn
yeah
Personally don't like the syntax, but it's a very useful language and very easy to learn too
Tbh @jovial warren might know it pretty well at this point xD
Isn't CPython just python?
Python compiled to C I think
That's Cython
Oh?
Afaik
@astral quiver what you struggling with?
you know how a varint works?
the value will be a different amount of bytes depending on it's size
e.g. if the varint is between 0-255 (-128-127 for signed), it'll be one byte long
Does anyone here know how to generate images on the fly with NodeJs/Electron? (I know how to do it with a node webserver, but not electron)
if it's between 256-65535 (+-256 < x < +-32767 for signed), it'll be 2 bytes
etc. etc.
you get the idea lol
also, what you making btw?
if you want a reference of how you actually implement that in code, see https://github.com/KryptonMC/Krypton/blob/master/src/main/kotlin/org/kryptonmc/krypton/extension/bytebufs.kt#L36 and the function below it
and feel free to steal anything else you might want from that code btw if you're doing Minecraft protocol stuff
does anybody know how to make a plugin that gives a user op when they join (uuid based)
that isn't a very good idea
why?
Self ops bad
OP is very powerful
i know
just manually give them OP when they join?
the list of OPs is saved in a file, so you won't have to re-op players every time they join
^
I'd like to think so lol
how do I fix intellij giving a billion warnings in build.gradle 🤔
i dont want to invalidate cache & restart 😫
since i have like a billion dependencies
by not being trash

._.
classic invalidate
and..... ij just crashed 🙂
i bet eclipse doesnt crash!
ew
giygh
I know how its works, packet id uses VarInt, but, currently, I think there is no amount of packets that require more then one byte
So, you can use a function that reads var int to read packet id
or just readByte
and should work
What I'm trying to understand is that if minecraft currently have any packet that have a ID that is bigger then one byte
no it doesn't
I would still read it as a varint though, just in case that changes in the future
what you making btw @astral quiver?
also, anyone here up to give me a hand designing the start of Krypton's API btw?
adding more apis do kt-mc-packet
was what I did
but to increase performance and decrease memory allocation, I did this:
nice
What is the difference between a serverbound and a clientbound packet?
WOAH
TIER 5
think about it
lol
uh
they go to the client
i dont know if it's client -> server or server -> client
and serverbound packets go to the server
ok
would I be able to use the serverbound Handshake protocol to get the protocol version of the user?
idk what handshaking is
lol
handshaking is basically a way for a client to say hello to a server
oh
and a server to say hello back
why just: send by server + send by client
it's a way to establish a connection to someone else
much much much simpler to understand
does it "say hello" when the player pings the server or joining?
the handshake packet in Mojang code is called ServerboundHelloPacket, so I'll let you figure that one out
lol
In telecommunications, a handshake is an automated process of negotiation between two participants (example "Alice and Bob") through the exchange of information that establishes the protocols of a communication link at the start of the communication, before full communication begins. The handshaking process usually takes place in order to establ...
read that
actually trying to get you to read something is like telling a baby to not touch something because it's hot
just doesn't happen
yeah TCP has it's own handshake
basically, handshaking is when a client says hello to a server
and generally, the intention of a handshake is to establish a connection
in TLS for example, handshakes are used to establish an encrypted connection
TCP's handshake is to establish that you and the server are both alive and receiving packets correctly
also, thinking about Krypton's API, events are gonna be a real pain, since a lot of Krypton is async
oof
Make it joinable so we can make it sync also
Or smtng
Actually that would be a problem
But yeah forcing async isn’t nice
chunk loading is done on an IO dispatcher coroutine, and so is sending the packets to other connected players when you join the server (e.g. spawn player, chat, etc.)
still actually debating whether I like Sponge or not
actually Sponge 8 is far from done so that's kinda out of the question, might use some of it as a reference though
SharedFlow
Do you folks are using kt-mc-packet at Krypton ?
nah
I'm backing working on it
I think Krypton was made before kt-mc-packet was a thing
yeh, I know
and I'd rather not rewrite the backend to use it tbh
the major problem now is that some minecraft packets are dynamic, is not the same thing one a flag in the middle is true or false
yeah their structure changes based on the content, which is frustrating
For example the tab complete packet 
getWhatever will "give you" all "whatever" variables that are in the packet indexed
So if you do getIntegers().read(0) that will read the first integer in the packet
getIntegers().write(3, 69420) will set the 3rd int to 69420
just a random example: https://wiki.vg/Protocol#Player_Digging
How would I get the face being hit? (the Face field)
wise man once said there's no such thing as a stupid question, just a stupid idiot asking the question I guess

also, what do you want to do? listen for when the packet arrives?
literally an example of that in the README
you probably want PacketType.Play.Client.PLAYER_DIGGING I guess? if that's what it's called
https://wiki.vg/Protocol#Vehicle_Move_.28serverbound.29
To get the yaw, would I do getFloats().read(0) or getFloats().read(3)?
._.
anyone know?
oh btw, I've decided that I actually kinda like Sponge, and that implementing Sponge is gonna be far easier than designing my own API
I will still add some extensions and stuff to make it easier to use in Kotlin, but for the most part, it'll be Sponge
So if you do getIntegers().read(0) that will read the first integer in the packet
getIntegers().write(3, 69420) will set the 3rd int to 69420
It's a bit overwhelming at first and sometimes you have to use reflection of your own but yeah it does make things hella easier
Does people usually make a class for Listeners or a package for them?
in classes?
We make functions!
OOP bad FP good!
mmmhm
true!
?
Nah man, we do it in the break time
What do you mean with the principle
Look up SOLID
abstraction
?solid
What is SOLID?
S - Single-responsiblity principle
O - Open-closed principle
L - Liskov substitution principle
I - Interface segregation principle
D - Dependency Inversion Principle
If you wish to read up more on it, you can check here:
https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design
abs
Polymorphic functions 🤤
parametric polymorphism 🤤
shut
So in single responsibility principle it's just however you define one responsibility? Since a responsibility could be to just have all Listeners. Could also be a class per listener though?
where you draw the line depends
SRP imagine
Yeah, that's what I mean
am i allowed to ask a question not related to placeholder?
I code everything in one class (:
Basically divide it into the smallest units possible that can independently exist
^^ however, you might have 2 event handlers in the same class if they handle the same thing (eg death event + quit event for leaving a minigame)
Well not really though. Because then I'd have only one method per class?
Not true
take it as a yes then
I see what you mean, I just have to know where to make a new class and when to just keep using the same
A class might need to listen to multiple events for its Unit functionality
ok i have commandnpc how do i get my npc to run a mvtp though console to tp the player that clicked the npc to the correct world
fpprank 🥲
wasnt feeling it today 🥲
xD
feel free to do it yourself lol
forgot the link
This guide talks about How To Run Command Commandnpc
🙂
Ah there we go
first thing i see on the link 👀
he haunts me
yes, YT keeps recommending that
yeah it was pretty quiet lol
What is the use of making classes for Listeners only? Like I'm making a GUI rn but why not just create the GUI in the same class as the event?
What is SOLID?
S - Single-responsiblity principle
O - Open-closed principle
L - Liskov substitution principle
I - Interface segregation principle
D - Dependency Inversion Principle
If you wish to read up more on it, you can check here:
https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design
altho that link
How unfortunate I don’t follow a single one of them
While these principles can apply to various programming languages, the sample code contained in this article will use PHP.

ive been learning PHP cause i need to make a portfolio website
and i only know wordpress sadge
Rip
Separation of Concerns.
You do not want to end up with spaghetti where you make changes somewhere and that change then causes further issues in many more places.
Isolating specific logic means you can make considerable changes to it without having to modify more than you absolutely need to .

And ofc that class should have an abstract implementation and an interface
Nah man, what we need is a AbstractClassFactory and generate everything
self writing program
!!!
Lmao
Take that Siri!
We need a factory for that class as well
AbstractFactoryFactory#recursivelyCreate(AbstractClassFactory.class)
LMAOOOOO
you're joking
but
Lmao thanks for showing me
What in the...
So for making a GUI I'd have one class for as Listener for the event and another one for configuring the GUI?
But then if I decide to make a second GUI do I then make two new classes again?
because then I'd end up with tons of classes
If that GUI is different from the first, yes. Ideally tho, if you are working with a lot of these, you'd build a minor internal GUI library or more likely use the pre-existing ones.
why
Who thought this was a good idea
I do not know
I thought it was a joke at first
It's literally just replacing methods with constructors
Yea I think its a joke
The irony is
On the "reasoning" page they say true Objects should represent real life entities
And then...
wym this is great
gonna try it out rn
cant wait to transform my code into this beauty! 😍
Ew
My eyes 
Lmao
that is hideous kaliber
Someone get this dude some glasses and a bag of brain cells
Took a lot of energy to come up with that!
wouldve been better if he turned the sout into an object too 
new Print
yes please
new System 🙂
new
new new new
Ok but when is new Variable(String.class, "s") coming
new (new (new NewFactory()))
thats a great idea
I love me some new new new new new new new new new new. The newest new
Variable<T>
N.java
No generics bad, Use only objects please!
NewFactoryFactory
I also love using deprecated events because the new ones are broken
sounds like a personal issue
sounds like a you problem
Sounds like you're not using enough OOP
I love functional programming
NewLang
helloworld:
New New neW new new new New nEW New
neW New nEW new neW New nEW
neW New nEW new NEW neW New nEW
neW New nEW new New nEW nEW
NEW new new new NeW neW new new new new new
new
I don't know if I like this
why not??!?!?!?!?
modern
making a forge mod is impossible 😭
is it tho 🤔
Wat
for you lol
smh
yes
what can i do
kill myself
😕
6
How do I fix the project's gradle settings?
because I still have a gigabyte or ram left before it says "out of memory"
sadge
Clash ?
yawn sure
anyone else?
there should be a clash role to ping
sure
shall I ping?
xD
@old wyvern @steel heart @half harness @obtuse gale @onyx loom @ocean quartz @hot hull @prisma wave @jovial warren @stuck harbor @forest pecan wanna join?
jesus this one rn
im busy trying to get this thing to work
its mad
ayyy xD
It wont, now join!!!
xD
but holy shit
this question
well I gotta go take a shit. see you in 2 hours
lol
what is with blitz and 2 hour poops
2? those are paultry numbers
👀 it's been 11 minutes and it hasn't ran out of memory
1.5gb free memory
why does it take 15+ minutes to decompile mc
also the red x scares me
BLITZ STOP
he really forgot me in the mass ping smh my head
this is why we need COC role
Yep
Fabric or forge?
forge
Please die
...
Gladly
https://godotengine.org/article/why-isnt-godot-ecs-based-game-engine you tell me, juan
I concur
are we going to talk about compact mode
questionable behaviour
Albeit iOS does not have it which is a shame
so I finished the setupDecompWorkspace stuff but it's as if nothing happened...

it still compiles
Ur mom puss stank bro 🐱😟
stonks
well I think I can guess
lol
cap
perhaps
why is mod development so hard
why can't it just be like spigot, just run buildtools, add the dependency, done
It’s nice but forge is a mess
L
Therefore fabric
._.
nah but like serious
nothing is working 😭
it cant get easier prolly
👏 f a b r i c 👏
Welcome to forge
it's not all that hard lol
How are nametags created? Since armor stands are so slow I can't really see why you would use those for it.
Idk if this is a decent method anymore but the last time I did that I mounted the smallest magma cube to a player and used its name tag
It was barely above the regular height
Some of you in here might have an idea of my plugin knowledge so how good is it compared to that I started a month ago? Am I like decent or? Honest opinion
iirc you started learning java a month ago right
Iirc?
if i remember correctly
No, I’ve used it a bit before
Maybe like a month totally
Idk
Before starting on plugins
well anyways, you are still a beginner (as am I)
java itself is huge and takes years to learn (and even then you are still learning more about it every day)
the spigot api is also a relatively complex api (and poorly made in many cases)
it wouldn't make sense to be very good with any of it in that short of a period of time. you have improved since day 1 i would guess, but there is still a lot more to learn
Alright, so would you say I’m improving fast or slow or whatever?
no clue, i have a terrible memory lol
you're probably around where i was at a month or so
Alright, just feel like this is more complicated than how I thought it was. But I guess most people think that then
For example DI
That was so confusing to begin with
Still kinda is but getting better
before u try using DI
you should probably learn more about how instances and constructors work
and static too
(dont use static)
but you should learn about it
yk what i mean?
i did it the hard way and learned java while i was learning plugins. I would say i didn't really understand DI for a while, i sort of just recognized the patterns of passing instances of classes to one another. You'll understand it eventually. Reading online can be very helpful. theres good articles and SO answers about these things all over the place
i didn't know what overriding did until a loooooooooong time past i started learning lol
static is ok to use in certain cases
ik
stateless things
I use static everywhere
indeed
ms edge is mean
It makes my code minimal, less lines
no
Kinda doing it the same way. I was working on java for a while but then it got boring and I needed projects to work on. Therefore I started on plugins. So I still need to learn a lot about java
JDA 
But I mostly learn java through making plugins
JDA > spigot
Discord4j > jda
🙄
I don’t make the fax
anything > spigot
lol i just saw this in another discord
Lmao
Lol
my response:
Why not just always avoid using static?
some things have no point in not being static
for example util methods
it is very useful to have static for stateless things
theres no point of it having its own instance
so it's static
it might be confusing 😕
Static has a use, the issue is that people use it wrong
^
But I cannot access static methods and classes from non-static ones?
you can
you can't call non-static methods in static methods
hm
but you can call static in non-static
i have an example
actually thats not always true
You can instantiate things in static methods which allows you to call non static members from the instance
Wait I couldn’t though
if you pass an instance as a parameter you can
you can't do something like this
class ... {
static void blah() { other(); }
void other() { ... }
}```
Like, earlier today I was testing out DI in standard java. You cannot use it in the main method though? Since it’s static
I couldn’t figure out how to do it at least
sure you can
you can do something like this
lol
was typing it out on phone
Ohhh so that’s actually what I did In my main class in the plugin
I did need it to get access to other classes though?
oh well you were creating an instance of a class in your onEnable i think
thats a bit different than this
Aren’t you doing that here?
not exactly. in a regular java application, your entry point is in a static context, so you would usually have 2 classes. a launcher and a main class. the launcher's only purpose is to create the main class and call any sort of initialization methods that main class has (if its not done in the constructor)
the point of this is to take your app from a static context to a non-static context. when make a new ReportBot() then call #start(), it gives the app a non-static entry point.
you can think of that start as if it was the onEnable of a plugin. its a non-static entry point
Hmmm, but what you were showing above just created an object of another class though right?
it did
i created a new instance of ReportBot and called the start method in that class
I learned about creating objects when I was learning java. But not about how to make constructors make new objects or whatever it does
Not sure what constructors do yet. Like how they actually give access to the methods in the class
in a minecraft plugin, you don't worry about that step. the spigot api takes your plugin, and uses reflection to call your plugins onEnable
https://github.com/derp-development/Derpio I also have an example here (:
they don't give access
it sometimes helps to think of a constructor as a very specific method. it can have 0, 1, 2, 3, 4, 382 or any number of parameters that you pass it
you pass those params when you do new MyClass(...)
so you are providing the new instance of MyClass with the params ...
those params may be a string, it may be another class, it may be a boolean
thats how you use DI to "give access" to the methods of a specific class
But what does actually happen when you parse the class into the constructor as a parameter?
thats up to you
Like why does that “give access” to the methods
public MyClass(OtherClass clazz) {
}```
this would do absolutely nothing. it doesn't provide you with any of the methods from `OtherClass`
```java
private final OtherClass clazz;
public MyClass(OtherClass clazz) {
this.clazz = clazz; // assign the private value clazz to the clazz passed when the class was created
}
// in methods down here, `this.clazz` or just `clazz` is available because you are in the same class where the private variable was created```
This example does something. It takes the passed `clazz` and assigns it to a variable that the rest of the methods in your class can use
Alright damn, I’m saving this message. This is the best explanation I’ve had of DI lol. I’m really tired right now so doesn’t make 100% sense to me right now. But more than ever before lol. What I don’t understand is that you would need to do something in OtherClass for this to work right?
not exactly. you would need to make an instance of OtherClass at some point so you have something to pass to the constructor
and you would probably want methods or variables in OtherClass
otherwise there’s not really a point of injecting it
An instance like this? “OtherClass clazz = new OtherClass();”? Or wdym. Typing this on phone so yeah kinda slow lol
yea exactly that
So which class do you do this in? Lol
ooh ur blue now

I’ve used this multiple time before I’m just so tired rn lol
I can’t remember how to use this rn lol
it can be in any class
You make the instance in MyClass in this example right?
you just need access to it when you make a new MyClass(...)
not in MyClass if you are passing it to MyClass using DI
it is sort of situational where and when you make it though
Alright, kinda makes sense to me now. I’m just too tired to understand it rn I think. I’ll read through all this tomorrow again. Thank you very much for taking your time to explain all this!
This really helped me understand it
yea np
James epic carry
Oh yeah blue name now lmao
Indeed
need that xp 😤😤

Been working on the Krypton API, using the good parts of Bukkit and some of Sponge as a reference
Currently got a somewhat existent API with the stuff to work with players, load and retrieve worlds and chunks, get status info, and create scoreboards. Also got Player inheriting from Adventure's Audience, because native Adventure support good
I may or may not have stolen Bukkit's Vector functions as well lol
The good thing about my vectors though is that they're completely immutable. All operator functions and calculations call copy with the new values, so you can be sure that your vector won't be modified by something else. It also means that things like the vector's length (sqrt(x^2 + y^2 + z^2)) is only calculated once
It also means that things like the vector's length (sqrt(x^2 + y^2 + z^2)) is only calculated once
how so?
Because you only need to calculate the length once, as it won't change
Since it's immutable
...sure, but when does it happen
Not sure, it's a val so likely when it's instantiated?
bad idea
calculate when u need it?
Yeah maybe that is a bad idea
what I would recommend is a private lazy value and a public property that gives you the value of the lazy
oh yeah you can do something like by lazy I think
Although I've never really understood property delegation
I think the way that works is it'll be calculated lazily but only once, which is exactly what I want
Also, Krypton has three types of positional indicator
You've got Location, which is bound to a world and supports coordinates with fractional precision, and it also supports the two rotational axes pitch and yaw
That doesnt seem like anything new?
You have Vector, which isn't bound to a world, and is essentially just a standard element of vector space. This also supports coordinates with fractional precision
Then you have Position, which isn't world bound either, but does not support coordinates with fractional precision
What would Position represent then if its not bound to a world?
It's things like block and chunk positions
Those should be bound to the world tho?
I know that technically means it should be bound to a world, but it's easier if it isn't
Unless it isn't easier
Actually I might make position bound to a world
The reason it's not in the server is because worlds and chunks are kept separate from one another due to the way they are loaded
Position here just seems like an unnecessary extension to Vector from the above description, i.e, a vector with integer coordinates
Chunks are loaded by loading region files with the RegionManager, and the WorldManager loads world data from level.dat
Yeah I'll have it be bound to a world
And I can't merge position with location because a location includes pitch and yaw, whereas a position doesn't
mhm, and if you do want a integer bound version, Id say atleast name it for the specific use case, so like BlockPosition instead of Position
Maybe you should separate rotation from location
Yeah but then if I name it that, I'll also have to make a chunk position, which just over complicates things imo
Maybe, but location is meant to be used for things like the location of an entity in a world
Yea but then entity could simply add on a Rotation property that takes care of that specific thing
True
I think storing double precision block positions is a bit wasteful though, and that means I'll have to check for that on the backend
Anyway, I got English now :(
See ya
Alright ciao
© 2010-2021 F-Droid Limited and Contributors
You can write your plugins in lua
Lul
bad
Nu i guud
only supports up to 1.12.2 haha
Minecraft Java Edition 1.13+ support is under development. Please don't join with 1.13 yet if you want a playable experience
stonks
Even an fair amount of plugins https://forum.cuberite.org/forum-2.html
Release and download plugins for Cuberite
=plugin lukkit
ironically this is actually the very thing lua is designed for
lua is at its heart, an embedded language
fuckin' lua
if ur gonna just go over every single programming concept, at least do it like common lisp
seemingly inactive sadge
Any server implementation already supporting graalvm?
anyone knows?
I don't, Paper maybe?
Bukkript >
Someday I got more time to finish the project
There is alot of things to be done
specially with PDM
dev
server impls don't need to support graal
it's kinda like java's scripting engine, but even more usable
Yo, I am trying to spawn a fake armor stand using ProtocolLib, however, wiki.vg tells me, I should use a 'Spawn Object' packet for Armor Stands (https://wiki.vg/Entity_metadata#Mobs) and references that packet, but there is no documentation about it. So I want to ask you what the most recent way of spawning an armor stand using packets is lol
@gentle coyote they probably mean that mobs should be spawned with the "Spawn Living Entity" packet and the ones in yellow with the 'regular' "Spawn Entity" one
Alright. And they also mention to use the Object ID instead the Entity ID. Im quite unsure what to specify for the entity ID when sending the packet if I use the Object ID...
Probably the object id? Lol no idea
No, theres a special field for that
GraalVM is just a JVM
If it runs on HotSpot, it'll run on Graal
Can you enchant books or boots for Frost Walker ?
No .. or can you?
Vsause theme playing
*proceeds to talk about everything in the universe without actually answering the question*
Hey, I've downloaded DeluxeMenus 1.8.0 on my 1.8.8 Spigot Minecraft server and yet it doesn't work. It shows up as red in /pl.
- I do not use /reload
Probably a conflict (lack of dependencies, config gone, version incompatibility, config yaml file is wrong)
@unkempt tangle Thanks! I've fixed my issue, it required PAPI I didn't know it was a must for PAPI to exist so the plugin would work. Ty.
Yes, but, GraalVM have a good support to create binaries applications
so, is not just a VM
#bot-commands 🙂
nah i've made L a vowel just to prove a point
It's against discords TOS
bAN
oui
I use discordworse
oops sry ping
isnt betterdiscord already taken off?
all years old
I never knew PlayerQuitEvent doesn't get called when the server shuts down and the player is kicked
oh wait for real?
apparently yea
tried kicking the players on disable
But why not do what you do on quits in onDisable?
Because the code which I need executed doesn't get directly called from my main class so it'd be a fuckery to do that
mac, ew
Do you see my issue
with the oceans?
it duplicates the item because it doesn't clear their inv on server shutdown
Oooof
Didn't kick you, server did
Lmao
This is what I got so far
Still need to change the functional interface abuse
But idc rn
mmm nice main class
very
very klean
need to move the action stuff out
be gone
@hot hull Isn't it supposed to be Registrable? xD
Wdym both are incorrect?
Registerable sounds better imo
could just make it Registry perhaps
COnclure why
@ocean quartz btw using mf gui in that, gotta costumise the shit out of it
Yus
motherf gui
right, it's time to design the command system for Krypton
might somewhat base it off of BungeeCord's command API, since I like the Command(name, permission, aliases)
I personally prefer the idea of allowing predicates instead of plain strings as permissions
more like a "requirement"
yeah maybe
wdym
I could accept a Predicate<T> I guess
do you know what a predicate it?
but that might start to get a bit messy
class MyCommand : Command(name, { it != null }, aliases) {
override fun execute(sender: Sender, args: List<String>)
}
for example
we're definitely not having an annotation-based command system, because I just don't like them all that much tbh
If you don't add brigadier command colorization imma be mad
might cheat and have execute provide an Audience lol
What's an Audience
adventure audience
by Adventure documentation, an audience is a receiver of Minecraft media
and tooltips!!
"Audience is designed to be a universal interface for any player, command sender, console, or otherwise who can receive text, titles, boss bars, and other Minecraft media"
(T) -> Boolean you uncultured swine
yeah whatever lol
lol
🤬
also, how would I then do permission checking if I was using predicates?
it would actually be really nice if it provided an audience bardy
just make Sender implement Audience
there might not even need to be a Sender lol
since Audience covers just about everything I would need
lol
lmao
wtf
lol
🤨
d;lol
Is that I'm not sure this is true
It can implement Audience but it should probably be a more specialised type
eh, apart from the name of the sender, that's about it
yea you need a Sender and a Player of some sort, just make them both implement audience in some way
actually Permissible has quite a bit I might need yeah
getName, performCommand, all the permission based stuff
doesn't have that much
also, how should I do perms btw?
I should probably just stick with string perms tbh, for compatibility
just shove luckperms in the jar
predicates will get a bit messy as well
stfu that's not what I mean you goose
☹️
also, gl getting LuckPerms to work with predicates lol
What I meant is that for commands to allow predicates, but having a stringly based permissions system is flexible enough
you shouldn't have Command take the permission as an argument i dont think
unless its a predicate
If you're making a stringly based permissions system I myself am gonna write an LP implementation for it 
optionally taking the permission it needs as an argument means I can have it be configurable I guess
I was already planning on doing that lol
yea optional would be fine
defaults 
but don't require people to use ur permission thing for commands. i sometiems have multiple perms for a single command depending on subcommands and stuff
That's why it should take a predicate 
yeah I'll just do what bungee does
D:
null means no permission
Strings!! Aargh!
you still have the execute body
fair enough, null it is
also, still thinking of how I want to do plugins
PDM
relocations when
what I mean is
I really want to use inheritance, but then I would probably need to support DI
lmao
I do and I don't want to do another Spigot and just instantiate the class myself
don't
that's the easy way
Don't copy bukkit's cesspit of a system
I might add a lightweight DI framework like Koin or Guice in there or something though, that's another option
to... inject... dependencies...
you don't need a framework for that
no, but it's really nice to have one
why?
especially with something like Spring, where dependencies come from literally everywhere
Yes use something lightweight such as spring boot
-_-
Maybe a bit of XML configuration too
might use Koin tbh
not sure it's really designed for this kind of stuff though
also, is there really a way I can have the main class not be instantiated by me and yet still get an instance?
So you're saying that the framework is useful when you can't organize your shit?
¯_(ツ)_/¯
Gross
