#dev-general
1 messages ยท Page 111 of 1
Dude I've no idea what any of this shit is, blame Piggy
bruh
learn it then
Don't bruh me
Youre such a 4head
isn't actually that hard
He meant import the project
As in File -> New/Open/Import
But you dont need to do that, just click the add button when you right click the build file
yeah that'll work
@jovial warren wdym by that?
it's an absolute pain to then merge that branch back in to master
idk what his issue is lol
oh that
so basically, I updated BardyBot's licensing on GitHub, and didn't know that would create a different branch
so I just had to:
Commit
Push (didn't work, didn't know why)
Pull
Merge
Commit
Push
I didn't...?
I purposefully chose to commit to the master branch though ๐ค
Also, youre supposed to make a PR from that
And then merge into master, and drop the other branch
Then its just a pull from github
that's what I had to do, just not through that way
I guarantee you, you did not choose commit to master
If you did, it would not have made a branch
I did originally, but maybe me changing the license template then changing it back refreshed the settings
its commit to master by default
I probably chose the bottom option like a dumbass
also what does Verified mean?
will my commits only be verified if they use a GPG key?
because I use an ED25519 KEY atm
on the commit I did from GitHub's create new file thingy
You can sign your work locally using GPG or S/MIME. GitHub will verify these signatures so other people will know that your commits come from a trusted source. GitHub will automatically sign commits you make using the GitHub web interface.
There is 0 reason to do this
Sx did you just leak your email address and your name?
https://img.bristermitten.me/18-46-05-22-06-20.png consider yourself HACKED
oh you didn't
No lmao
was gonna say
almost forgot!
daily kotlin meme #3 https://img.bristermitten.me/18-50-34-22-06-20.png
I don't think thats a leak
My public website leads to my linkedin, which has my full name
Ah
@prisma wave we do not fear kotlin
You should have put java interop there
lol
fear null*'
fuck
Boo
ew
i dont want to
๐คฎ
What the fuck is that katsu
just got sent to me ยฏ_(ใ)_/ยฏ
report it
Is that even a thing you can do?
okay that's arrow code
Its also static abuse and a one class plugin
๐
and I thought my himalayas in BardyPunishments was bad
I thought https://github.com/BomBardyGamer/BardyPunishments/blob/master/src/main/java/xyz/bombardydevelopment/bardypunishments/commands/BanCommand.java was bad lol
wait no not that
i mean thats still pretty bad
https://github.com/prosteDeniGC/Dreamcompass/issues/1 ok boys go harass him send him some love
will that even work or what?
process resources plugin
I remember in maven it's ${project.version}
This is gradle tho you 4head
true
KM, I knew I shouldn't have removed that :kek:
smh
I always remove that
on the topic of abominations
remove what?
The process resources plugin
also, this dreamcompass doesn't even fucking use build tools or an IDE
gotta be var
processResources {
from(sourceSets.main.resources.srcDirs) {
filter ReplaceTokens, tokens: [version: version]
}
}
Should be correct yea KM?
Whats up with var?
Yea the tools thingy
if it used an IDE it would be in src/ and if he was using build automation, src/main/whatever
y KM?
oh he doesn't even use a fucking package
and I thought https://gitlab.com/RandomHashTags was a bad programmer
guess < 1 || guess > 10 @onyx loom I would do guess !in 1..10 instead
this prosteDeniGC guy is just on another level of stupidity
oh sweet
in is a operator?
Bardy, why you just dissing everyone out here lmao
it's a keyword
Yugi, it is in kotlin
well kind of
yea
a keyword-operator
feels weird
you get used to it
Bardy, why you just dissing everyone out here lmao
I ain't dissing them I'm just stating facts
does it count as spaghetti bm? as im calling main again if i want to restart program
?plsnoarrowcode @bleak igloo thinks this isn't arrowcode, but staircase code or something
not really
shoudlnt it be !(guess in 1..10) or soemthing like that
nah
?plsnoarrowcode
you can have !in
you used a when so I give you a ๐
I see
๐
it was an if statement at first haha
what is is used for?
it's like instanceof
ah
if(sender !is Player) {
sender.sendMessage("only players can use this")
return
}```
I see
and then you also get smart casting which is cute
oh so in a block which assets it is something it is auto cast to that?
yep
nice
a little more powerful than that
That should defenitely reduce a lot of unneeded shit
but yeah after that return it's asserted that sender is a Player so you don't need to cast
is explicit casting still available?
also, https://github.com/BomBardyGamer/BardyBot/blob/master/src/main/kotlin/dev/bombardy/bardybot/commands/QueueCommand.kt code review?
ah
apparently you should use as? T instead of as T?
the reason why I don't in that though is because as? T ?: // do something covers three different cases
it was three in my case though
it's actually only one here: ```kotlin
sender as? Player ?: doSomething()
`doSomething` if sender is not a Player
i got rid of a var bm are u proud of me
val nowPlaying = musicManager.player.playingTrack
val userData = nowPlaying?.userData as Member?
?: return channel.sendMessage("**You haven't queued any music yet!**").queue()
in that case, as? T would cover nowPlaying, userData, or nowPlaying.userData being null I think, something like that
is that a blank true expr for a ternary or something else?
"yes","y" -> main()```
it's elvis operator @old wyvern
inline ๐
x ?: doSomething() = if(x == null) doSomething()
@jovial warren that should be as?
ah I see
yeah but that would lead to messy code sx, that's why it isn't
and remove the nullability of Member
No it wouldnt
as? is the safe cast operator
Should be nowPlaying?.userData as? Member
so the function called after elvis should return of the casted type?
that message should ONLY be sent if nowPlaying?.userData is not Member? and it's null
it can do
What do you think what I gave you does...
@old wyvern it's just a null check. so you can do things like getString("key") ?: "defaultValue"
or you can return
If the value is null or its not Member, your left side would be null
or anything else
which would trigger the elvis
yeah the three cases I have for that is:
- If
nowPlayingisnull - If
nowPlaying?.userDataisnull - If
nowPlaying?.userDatais not of typeMember
oohh ok
why make userData nullable
wat
lemme bring up the code where I do just that
no idea why but that's how lavaplayer works
what's wrong with my code this time?
if you say it's not allman I swear
What isn't ๐
I still dont see why you would assert a nullable type
On the right side of a cast
And yes, the lack of allman is disturbing
It doesnt make sense
because Message#member I think it is is nullable
though I am giving it a non-null member
why would it be?
members are from guilds
it's null when the sender isn't a member
a message will always be sent inside a server, so it would be by a member
messages can be in private channels
hi i have a problem with DeluxeMenus-1.13.3-DEV-87
@jovial warren You should still not be casting to a nullable type
true
now it's as Member though but that'll throw an NPE if that is null
and it'll be null if it hasn't been assigned
if someone tries to display the queue when no tracks are playing and none are queued it'll return null there
Thats why you use as??
but as covers those three cases I mentioned
and?
nowPlaying?.userData will resolve to either null or Any, resulting in Any?
You would then do as? Member to resolve to either null or Member, giving you Member?
Which you then have an elvis for
Which result in the value after that line being Member
if nowPlaying is null, obviously nothing's been queued
if userData is null, nothing's been queued either
and if it's not a type of Member, nothing's been queued either
so yeah that's fine actually
I'm big brain
anything else wrong with that code?
what about it?
Its just messy
how do you think I can make it not messy then?
I'll consider any suggestion that isn't "use allman"
use allman
get out
no
I swear you don't even use it
I do sometimes
frosty is smart
Look at this section of code
It'd be so much nicer with allman
yeah I'll admit that's not the nicest
anon?
You wanna know a little trick to instantly make disorganized code look slightly more organized?
what
okay yeah idk what else to do about those
So that it aligns
okay
that's now called looping by the way, that map
again, that's the order it came from the demo
also you could just use a Set<Long> instead of Map<Long, Boolean>
how am I gonna get a boolean from that Set<Long>?
Set#contains
that regex should be in a companion object
oh yeah ofc
and a constant
constant? where?
okay I didn't know what else to do about the getter
yeah
but in a companion object, its a pseudo constant
indeed
loadAndPlay came straight from the demo, with a few changes to make it work how I wanted it
also, companion object inside of the object?
Oh, I didn't notice this file was a single object
No, you can just make it a private property in this object
yeah, otherwise I'd have to instantiate it
yeah
the whole point of using Kotlin though is so things like that are done for you
WHAT
getters and setters are made for you, so are things like singletons when using object
Side note, this is a MAJOR SRP violation
SRP?
single responsibility principle
Single Responsibility
oh yeah, right
Dude....
Those code generation aspects are so unbelievably beneath "the whole point of using Kotlin"
the type inference and removal of boilerplate are why I use it
also maybe this whole thing just needs a rewrite
You think?
I know
the reason why I look at demos and stuff though is because I lack so much creativity that I don't know how to structure my own project
a debug boolean should be a static final var inside my main, or?
var?
variable
isn't that variable?
yeah that's what I was saying
final can't be changed, variables can
java, not kotlin
or is that not how variables work in Java
Dude can you read what I ask before starting to saying random things..
xD
A variable is anything
several people are typing
Like legit, not mad, just confused as hell as to why you start saying random shit
where it be local or a field
he didnt mean var in that context bom
it should just be a static final Boolean since there isn't really a point in inferring types here
No one uses variable to denote mutability
Sx, asking specifically for a debug context
private static final
I wasnt talking to you @hot hull
Dude can you read what I ask before starting to saying random things..
@hot hull No
it is a config option..
Just how should I pass it around through the plugin itself
config
Imma smack you Niall
inline class >:)
get it from config
you making a class of constants?
No just that one single debug
DebugOptionConfigValueProvider
Niall, smh
tf
Might as well just make a seperate plugin just for the debug option and register it with a bukkit provider, ye Niall?
AbstractConfigValueFactorySupplierBean.kt
Do I have to ask again, or can I get a straight answer?
public static final Boolean VALUE = value?
this is really overthinking it lol
Depends on how large the plugin is
If it was pretty big, I would use a logger that wraps whether debug messages get sent or not
I've got like 10 debug messages all together
Why would a debug boolean be final?
Yugi
yea?
static private volatile final String isDebugging = "false";
nvm then
Gonna refrain from asking such complex questions in the future sheesh
Cause I see y'all brains just went haywire
@prisma wave just no
yes
always access modifier first
lol
I think we're past the point of "where do access modifiers go"
what's the difference between private and public?
RegisteredServiceProvider<DebugConfigOptionProviderService> debugConfigOptionProviderServiceRegisteredServiceProvider = Bukkit.getServicesManager().getRegistration(DebugConfigOptionProviderService.class);
if (debugConfigOptionProviderServiceRegisteredServiceProvider != null) {
DebugConfigOptionProviderService debugConfigOptionProviderService = debugConfigOptionProviderServiceRegisteredServiceProvider.getProvider();
System.out.println(debugConfigOptionProviderService.isDebugEnabled());
else {
System.out.println("No registration for debug config values!");
}
oh my god
BEAUTIFUL
This is the standard
if(String#contains("false"))
now that is enterprise ready code!
lol
This is good
what's the difference between private and public?
go take a Java course yako
Because if you want to change your DebugConfigOptionProviderService in the future it is perfectly possible
Someone take this man's shrooms away
Other plugins can also use your DebugConfigOptionProviderService
to find out if your plugin is set to debug mode
strings can be private right?
get out
Yeah
Yako you're trolling again
it's kinda not that funny any more yako
val engine = ScriptEngineManager().getEngineByName("JavaScript")
val debugging = URL("https://google.com/search?q=Am+I+Debugging").openStream().readBytes())
engine.eval(debugging)
fun isDebugging(): Boolean {
return engine.eval("!!this.isDebugging")
}
this is the real way to do it
Lol
hang on
whoops
arnt you getting a script engine in a script engine
@topaz bay On Arcade you have var currentGame = null as? Game? what would be different if it was just as instead of as??
ArcadeBoard?
It looks cool I really want to try out its api
as? Game? is just redundant isn't it?
it supposedly makes indentation look nicer
it's a safe cast to a nullable type
@ocean quartz Im pretty sure nothing
I did that to get rid of the warning for it
Since IntelliJ knows that it will not pass
wait wtf?
Gotcha, just curious since I tried it now and it didn't warn me or anything to do it without ?
you're casting null to Game??
@ocean quartz was the target nullable?
Yeah
const val thePointInThat = null
Ohh okok nice, I like that more than var currentGame: Game? = null
Oh no, I actually had it backwards
It gives that warning when the target isn't nullable
why would you have it as null in the first place though?
Yeah xD
Bardy, null is useful
I guess I just did it for my own clarity?
Considering there can be a valid state in which there is no game, I'd say its rather useful
someone gimme a hand with this rewrite
This entire thing could technically just be a giant state machine
But the game is already a state machine, and nested state machines are...
๐
someone help me structure this project lol
as I said, cannot structure projects at all
no
guess I'll just leave it then
What project?
That's why you structure before you write it xD
Spring? teach me the ways then
@heady birch oh mighty Spring senpai teach me the ways xD
What would you actually use Spring for?
Neither. I know it has a use but idk wtf it is
dEbUg
[18:54:56 INFO]: Executing 'default' motd for user Frcsty (a1b72b20-97e0-476e-8a78-db9c9dcf93a4)
[18:54:56 INFO]: Executing 'VANISH' action for user Frcsty (a1b72b20-97e0-476e-8a78-db9c9dcf93a4)
nice
Frosty if you were in Kotlin you could just do "any string".debug() and format stuff if ya wanted
With extension functions ^
@prisma wave what's the point though? won't that just use up more resources than it's worth? what can I even use Spring to do?
he will be in 27 days ๐
it has a DI framework
which makes structuring things easier
DI framework?
dependency injection
Dependency Injection
ah okay
Dependency injection
like guice but cooler
tf is guice?
bruh
nerd stuff
I've heard of it I think but never used it
what can I use Spring to do though?
DI
everything
and that's it or what?
It can do more than just DI
It just has DI capabilities
You would use spring to create entire applications
platforms
backends
whatever
also, which one of these things under "Why Spring" would I be using? idk what any of these are
Microservices, Reactive, Event Driven, Cloud, Web Applications, Serverless, Batch
tf are any of those?
also, is Spring going to run on my 1GB RAM AWS free tier?
maybe
Spring is very multifaceted
Its not like a giant monolith of a base that you write on top of
You only include what you actually use
also how does one begin with a rewrite? just delete everything and start over?
I usually do that
just checkout another branch
Or move old files to a different package
and you do that how sx?
But then I end up importing the wrong classes ๐ฆ
In intellij, just right click it go down to git
go to branches
and checkout a new one
name it "rewrite"
ezpz
checkout tag or revision or new branch?
What did I say to do?
you said checkout a new one
Exactly.
Thats it...
@GetMapping("/greeting")
public String greetingForm(Model model) {
model.addAttribute("greeting", new Greeting());
return "greeting";
}
@PostMapping("/greeting")
public String greetingSubmit(@ModelAttribute Greeting greeting) {
return "result";
}
"Were using AI to greet the user's of our website- invest in us today"
what do I do with my old code?
Youre using it
You can delete it if you want
or move it to the test sources and use it as reference
okay now time to start over
doesnt really matter
I mean...
well yeah, thats what the new branch is for
All of the original code is still on the master branch
Go judge Sx
No
Yes
@hot hull dont like the new design
Effort
change it back
one cannot simply command another to do what he or she wishes and expect them to comply @hot hull
?
is that the new crap or the old one?
new one, it looks quite nice with dark theme
I hate the new one
as I said, bar is too far left, everything's too fat and rounded
why is e.printStackTrace() only printing out java.lang.NullPointerException ????
dark reader makes GitHub look atrocious
Your screen is doodoo Bardy
Stylus with StylishThemes/GitHub-Dark is good
why is
e.printStackTrace()only printing outjava.lang.NullPointerException????
Lol
Your screen is doodoo Bardy
says the one using 4:3
oi, mine atleast fits the theme now
agree to disagree definitely
Now all they did to do is widen the actual code browser
WELCOME TO THE KORM FIELDS
@prisma wave Idk I always notice something weird about catching exceptions in an anonymous class though
please do shut up
Now all they did to do is widen the actual code browser
yeah that might help it a bit
They seem to fail silently for me
yeah me too @heady birch
I can't express how much I want to pummel the lead engineer behind CompletableFuture to death right now
also, what's wrong with it?
I wish they wouldn't fail silently
it makes debugging so hard
https://img.bristermitten.me/20-10-15-22-06-20.png this is literally all I have to go on without poking around
use .join() for testing then
i am partly
isnt there a exceptionally()?
but I don't have the willpower to change everything
yes
except it doesn't seem to work
wdym?
you got to put the try catch within the future
that'll probably work
exceptionally must be chained to the stage with the exception btw
https://img.bristermitten.me/20-12-06-22-06-20.png I want to die
Hey, atleast you're using allman
Also, catching pokemon I see
youre doing that wrong
Are you not able to chain those operations?
there should be a function for chaining that that with PomParser#extract
I'm slightly annoyed you use e instead ex btw KM
^
chain Did you mean Pipeline?
the Netty pipeline is one of human civilisation's greatest acheivements
yeah? so?
I can't chain it
yeah downloadPom returns a CompletableFuture<byte[]> so
can you even pass primitive types to generic type params?
yeah ik that
but you're passing a primitive type keyword
didn't know you could do that
yeah well byte[] isn't a primitive so it works fine
also, which Spring Boot version should I use
latest
oh I see what you mean
also, isn't thenApplyAsync redundant in this case since you've already used supplyAsync
I thought you meant chain directly onto the result of extract
@heady birch since always I think
@jovial warren most likely
is using a snapshot version of Spring a good idea by the way?
because @heady birch you said latest
should be fine
the latest is 2.4.0 which is a snapshot
okay
I love how Lombok is in the add dependencies section even when you select Kotlin on https://start.spring.io lol
also tf am I gonna want to depend on for this?
like what from Spring do I need?
spring data probs
Depends on what you want to do
I'm making a music bot
maybe with some per-guild settings
so probably Spring Data Redis
because me like Redis
github.comโs server IP address could not be found.
haha lol
also what's the difference between Spring Data Redis and Spring Data Reactive Redis?
because I imagine I'm gonna wanna be using K-V Redis
reactive one probably includes a pub/sub framework
apparently it says "Access Redis key-value data stores in a reactive fashion with Spring Data Redis"
ยฏ_(ใ)_/ยฏ
also I could make a web-based config panel idk yet
I'll just leave messaging out of it for now
what's Spring Batch?
also, https://start.spring.io actually gens you a project I think
is that something I should be doing?
yeah it does
generating a project in a zip then importing
i prefer to use the intellij one
can you make a Gradle project through the Spring option?
yes
there are more on the next page lol
guess I can add them later
it wraps the entire website into intellij
what do I need to select? Spring and Kotlin/JVM?
and then next
hold on
this is creating a new project
https://img.bristermitten.me/20-34-12-22-06-20.png this is all you need on that page
what about if I want to convert my current project to Spring
or should I just delete it and recreate it
that sounds like a bad idea
one agrees
you'd be rewriting/restructuring everything anyway
I guess so
so I might as well
also idk about you guys but I remember sometimes trying to recreate a project with the same artifact ID in Maven and it say something like the old project already exists in Maven's thingy or whatever
does that happen with Gradle as well?
also is it the Spring Initializr I want to use to create a project then?
yes
Eh 8 is a safe choice
also why tf is the default version 0.0.1-SNAPSHOT lol
what should my version start at?
I would've thought 1.0 but according to this, apparently not
nvm about that, what's Spring Boot Admin?
also I see this uses Gradle's Kotlin DSL
also,
@SpringBootApplication
class BardyBotApplication
fun main(args: Array<String>) {
runApplication<BardyBotApplication>(*args)
}
that's all you get?
so how does one use this then?
the initalizr is mostly for setting up dependencies
Jhipster looks wack
anyone know how I use this now?
use what
Spring
make a service to do something in
maybe like
JDAService
annottate with @Service
in the constructor do you JDA setup and login
I can't do that in the constructor
well, not in the ClassName() type of constructor anyway
init
does it need to take params?
what?
I mean does the class need to take constructor params
which class
the service class
also there is one thing I miss from Maven
which is?
and that's auto completion
what about it?
hey! can a developer msg me what knows what mongo and redis is and ow ton use it
stick to one channel fella
how do I do that?
I'm pretty sure Intellij prompts this
When you make a gradle project
Go into the wrapper properties file
umm
okay
It's not going to cover every possible thing, but it should give more completions
wait is this gonna be 145 MB every time I make a new project?
can some one help me dev
and also, by completions, I meant the group and artifact ids
Use the package plugin
that'll give me auto completions on those?
which package plugin by the way?
Yes
sorry I was searching the gradle plugins repo lol
It can add and remove dependencies from your build
And it works for gradle and maven
It's fire
also with DSL do methods like implementation have to have brackets after them or can I use implementation "groupid:artifactid:version" still?
can a dev help me?
They're parentheses you nerds
in the UK we call () brackets
in the US you may call them parentheses
can some one help me
what do you want for the last GOD DAMN TIME
ask your question fella
and this channel isn't for support
you've asked about 5 times now
ik
what do you expect
no one
ask again
...
with what????????????????????????????????
Removing redis and mongo from a pl and making it flat file
this channel isn't for support
#development
why tf would you want to remove redis and mongo?
redis is ultra fast and mongo is a decent database engine
lol
xd
MongoDB Atlas isn't shit
make that two million
no
it is
do you know java?
still waiting on a response
no
well then
oh ffs
i need redis
this is gonna be painful fun
and mongo

I thought you just said you wanted to remove redis and mongo
send me the damn code
Not without you knowing Java
If you want to ask someone to do it there is #716864119835459584 or #716864121043419167
send me the damn code
Oh what a joy
๐
No I want to do it
@prisma wave Holy crap. So this does runtime at a gradle level vs having to put anything in your code?
Yep! It looks through your dependencies and generates a dependencies.json file that's read at runtime automatically
The onEnable in that example was this simple: https://img.bristermitten.me/00-20-53-23-06-20.png
Does it handle package relocating in shadowJar?
Not at the moment, although I'm not actually sure it's necessary.
How does it know where to download the dependencies from?
The gradle plugin scans every repository in the repositories block and basically does trial and error (with some caching in future) to see if the dependency is present. If it is, it marks that down. If it doesn't find any it looks inside Maven central and a special repo for spigot at runtime
the file it generates looks like this json { "repositories": { "maven": "https://hub.spigotmc.org/nexus/content/repositories/snapshots/", "maven2": "https://oss.sonatype.org/content/repositories/snapshots", "maven3": "https://oss.sonatype.org/content/repositories/central" }, "dependencies": [ { "groupId": "org.jetbrains.kotlin", "artifactId": "kotlin-stdlib-jdk8", "version": "1.3.72" } ] }
That's pretty cool ;o
Can you have it do maven first?
I'm like ready to drop what I have to switch to this already.
a maven plugin?
No like mavencentral
oh yeah
Or will that be pulled from mavenCentral()
good question lol
I think I've got it set to ignore mavenCentral since that repo is always present
but with a bit of refinement I could get that working
That would be amazing. Can you link the GitHub for this?
Only other thing I could think of would be a possible way to change the name of the folder it does the downloads to? Maybe a configuration in the gradle script?
Yep, glad you like it ๐ https://github.com/knightzmc/pdm
That's an option
Beautiful.
although since it's supposed to be a global directory I think that might defeat the point
Ahh
I would love to be a beta tester when you make those changes to add maven central in it.
Great
I'll get working on them, shouldn't take long
to clarify - it does check maven central, but the gradle script won't explicitly mark it
Yeah, I was just hoping it would be possible to specify for it to check maven central first before my own stuff.
Yup.
I'll see what I can do
Does this support transitive dependencies too?
Yep
Indeed. Super excited.
I'm sorry to say i've not even heard of that
Throw me a DM or ping when it's ready to be tested.
Will do
Its what youre doing
well for one thing that's maven
and also this is automatic
no manual configuration required
Its maven cause its almost 4 years old
And the automatic part is fun... but still
Same thing
Oh please
This project is actually the first thing I ever put in maven central
Its what I submitted for my application
@prisma wave runtime dependencies? ๐ฎ
dop3
Maybe even magic
Make the directory path configurable pls ๐
I want it inside my plugin folder ๐
ly
https://img.bristermitten.me/00-46-40-23-06-20.png @frail glade maven central seems to be working, im gonna refactor everything in the morning and add gaby's suggestion, then once it's been uploaded to the gradle plugins repo it should be ready!
for a beta at least
Ty
@distant sun https://img.bristermitten.me/00-57-31-23-06-20.png https://img.bristermitten.me/00-57-50-23-06-20.png well that was easy

pog indeed

that's... Scary
ebic
and possibly breaks some obscure spigot premium rule idk
f spigot
I doubt it, pretty sure Griefdefender downloads at runtime
Yeah featherboard too
afaik as long as it runs offline after initial startup it's fine
Luckperms I think does as well?