#dev-general
1 messages ยท Page 86 of 1
I'm not saying Java's getter and setter boilerplate isn't unnecessary
I'm saying there's a reason to stop editing of the internal values
eg ```kotlin
var age = 30
private set
does that just stop you setting the value?
it makes a private setter
Alrighty who was the other Spring person here
which overrides the default public setter
Was that you Mitten
there was definitely Niall
Ahh crap no matter what I'm going to have to push an update.
I was trying to force clear spring cache
But I'd need to push an endpoint for that or just reboot it.
what you working on?
MCBanners. The cache between it and Spigot is broken so I was going to try to clear it.
Si
also can someone please explain to me what the purpose of loading configuration values in to memory is when bukkit already does that for you
getString() returns a String object from the cached YamlConfiguration object
which means it's already cached by bukkit
to a degree
I suppose if you wanted ORM for files it could be pretty handy
A big reason to use it is compile time typo checking
if you're doing getString("blah.elqj") a lot you could easily make a typo
good point
you can also do more complicated object loading (eg loading a ConfigurationSection into a proper object)
but you generally wouldn't want to repeat that code
repeated code is bad practice apparently
well precisely
so calling getString over and over is repeating yourself
compared to a direct property access
so what you do it the LuckPerms way and load config values as a map of paths to values?
you also get type safety (eg you would know connectionTimeout is an Int, so you couldn't accidentally do getString instead)
that seems pointless
MemorySection is a map anyway
what I was thinking
although it's possibly slightly faster
so what else do you do?
because getString("path.path1.path2") performs string splitting on the .
I want this plugin to be as optimised and efficient as possible
My go-to is a data class that wraps the config values, then you load that once on startup from the config and then pass around
at the moment my plugin takes about 10-15 seconds to load on startup
yikes
wait what @prisma wave
what are you doing?
creating db tables
how the fuck
idk why it causes so much lag though
you should do db stuff asynchronously
I am
I think
actually no it's using .join() so I can see when it throws errors
I'll fix that later
data class ConfigWrapper(
val connectionTimeout: Long
val someOtherConfigValue: String
)
val config = ConfigWrapper(
config.getLong("blah"),
config.getString("blah2")
)```
completablefuture in kotlin
ew
actually no db queries are done synchronously I don't think
yeah I'll probably use Hikari and/or coroutines
CompletableFuture is just what I was using before
those are not mutually exclusive
that's why I said and/or
?
since I wasn't sure if I should be using both or if coroutines pool
You can use both just fine
I don't know how either of them work
Coroutines are lightweight threads
Similar to how BukkitScheduler works
Hikari does connection pooling
guessing they're better than using regular threads?
You can use the two together fine
they're better in that you can switch between them easily and dispatch them easily
ah okay
They're like the Bukkit scheduler on steroids
yeah I'll have to look in to that then
how am I supposed to replace methods like thenApply and thenCombine?
pretty much just write normal code
Kk
explain varargs. now.
damn... Im hungry
They definitely have a bit of a learning curve and I'm not 100% confident but you can do some fancy stuff with coroutines
can be any amount of arguments
its just fancy syntax for passing an array
^
ok. thx.
fun sumValues(vararg values: Int)
can be ```kotlin
sumValues()
sumValues(1, 2, 3)
sumValues(1, 2, 3, 4, 5, 6...)
sumValues(1)
any amount of arguments
That bothers me
because there is a case for no arguments
it broke half my plugins
Oh thatll probably do it
Is it an EAP?
I just allocated more RAM to it and it sped up.
hm
it's weird, IJ reports it's only using about half a GB in the bottom right, but htop says differently
I give it like 8GB or something
๐ณ
WHAT
That is WAY too much
Is it any good
@prisma wave ij probably only shows its own direct usage
but htop is probably including any sub process as well

how does one allocate ram to ij
All I did was increase this.
Dude... that is seriously way too fucking much
Fine, I'll make it like 2
Yeah it still opens fine.
Is it an EAP?
when you google EAP and it returns "employee assistance program" lol
early access program
makes sense
also who thinks I should convert my completablefutures to coroutines in this commit
more like who doesn't
currently this commit includes a complete overhaul of the plugin, rewritten in Kotlin, with separate bukkit and bungee modules
that's a big commit
I know
can't really go back now though
and it's still a snapshot at it's current local point in development
so hold on
https://paste.helpch.at/jegukiwuxa.sql ignore the formatting
do I just make that return Unit?
and then start up new coroutines rather than using thenApply and thenCombine
when you can't remember where you put one of your methods :/
fun <T> transaction(statement: Transaction.() -> T): CompletableFuture<T> = CompletableFuture.supplyAsync { transaction(get<Database>(), statement) } current transaction method
what should I have that return?
my knowledge on this is not perfect
but I believe suspend means it has to be run in a coroutine context
also what should I replace CompletableFuture#supplyAsync with?
ah okay
because you can safely block a coroutine
so just transaction(get<Database>(), statement) instead of supplying that to a CompletableFuture
yes
seems legit
suspend fun <T> transaction(statement: Transaction.() -> T): T = transaction(get<Database>(), statement)?
yep
alright
there's some very clever stuff going on behind the scenes
what does suspend do?
ah okay
"The suspend keyword means that this function can be blocking."
pretty much yeah
so you said I write this as if it's going to block the main thread
I don't need to change player or dbSender's code then
and now I'm getting an error saying suspend functions should only be called from other coroutines
Precisely
so I can just have this entire command execute asynchronously then?
Don't do it all async
why not?
unless this is a completely stupid idea, I run under the policy of: if it can be run asynchronously, it should be run asynchronously
Actually try it all async
That's a somewhat stupid idea
Not exactly
but somewhat
because often async actually serves no benefit and makes your code more confusing
what I did before is just ran kickPlayer synchronously and everything else was async pretty much
Some operations aren't thread safe
Indeed
good point
Especially not in bukkit
isn't thread-safe basically avoiding race conditions?
Pretty much
if it's all done on the same thread though (a bit like the main thread), then race conditions don't apply here
thread safe means you can interact with an object from several threads without encountering problems
since there won't be any race conditions if it's done on the same asynchronous thread
Indeed
since you can't have a single thread race to assign a value
In purely sequential code race conditions are borderline impossible
They kind of mean the same thing in this context
no calling iterator.next() on a separate thread since that puts in a race condition

for now I could just wrap this all in the same thread and if it doesn't work I'll fix it later
Technically yes
I'm getting slightly out of my depth here but I don't think that's how you should do it
I mean, other than the kicking of players, nothing else in here needs to be done on the main thread
we're talking about coroutines
I believe coroutines are better used as a form of ExecutorService - you dispatch the tasks you need to a coroutine and use a callback for the result
This is kotlin
Same thing
However the callbacks can be written as sequential code
Kotlin java they're both the same
I think
Thread pooling and connection pooling are not the same thing
If it posts hello world its the same
anyway
How so
so ExecutorService does connection pooling and Hikari does thread pooling?
The other way around
ah okay
also can't I launch a new thread using GlobalScope.launch or is that a bad idea
You can launch a new coroutine with that
so ExecutorService does connection pooling and Hikari does thread pooling?
And I don't think that's a bad idea no
lol
look, I've never done pooling before
I meeeaaannn, when youre using these, its not like you do anything special
You used coroutines much sx?
Not happily
also what do I replace thenApply with?
Darn
porquoi?
I am getting out of my depth here and wondered if you could offer more insight
context?
https://paste.helpch.at/jegukiwuxa.sql that to coroutines using Hikari
pretty much
so I just remove thenApply and thenCombine methods?
Because Skedule...
and yes it is
what's Skedule?
It integrates coroutine stuff into the bukkit scheduler
ah okay
oh wow... ole lookin good
this isn't just a bukkit plugin though
which is kind of like putting a plaster o top of a gaping wound but better than nothing
I mean the very idea of using coroutines in bukkit
can't use that in my common though
it feels wrong because you know you'll have to return to the main thread eventually
since common doesn't depend on Bukkit or Bungee
I don't know how to define it properly
@jovial warren I believe you bungee is more lenient regarding asynchronous code
I need an implementation that works for both
then just use coroutines normally?
Write the common stuff to use coroutines without bukkit, then use skedule when applicable
which means I'd prefer to do it without the context of either Bukkit or Bungee
then just use coroutines normally?
that's what I'm trying to do...?
just never ever used them before so got no idea how the hell they work
From a structural point of view your command executor is doing way too much anyway. All the DB related stuff should be delegated to an abstraction that means your commands don't care how you are storing data
returning?
it returns a completablefuture, used in testing
WAIT IS THIS A COMMAND
wdym why?
SRP is a thing
SRP?
Wdym you use join to throw errors properly?!?!??!
Single responsibility principle
You can throw errors properly without join
in testing @topaz bay
A command handler shouldn't even know that a database exists
In testing of what
src/test/java
command testing
I use mockk
I don't know how to properly explain it
https://paste.helpch.at/makotojaxi.bash that's my command testing class
Fucking throw it all away
wdym "fucking throw it all away"
This is honestly... not good..
also from those tests can you see why it returns a CompletableFuture now?
No...
That command handler (and the tests for that matter) are a massive violation of the SRP
Not only that, but youre designing based on testing???
also that wasn't me who made it return a CompletableFuture
you have to test to make sure things work properly
I'm new to Kotlin alright gimme a break
This has nothing to do with Kotlin
If you want to get the messages just mock Player and store the params of sendMessage()
mocking spigot plugins is honestly just stupid
this structure is very question
@jovial warren sx is being kind if you can't handle how Sx says things gl my guy.
questionable
ITS STILL A PLUGIN
this part of the plugin isn't dependent on either Bukkit or Bungee
Abstract it then
Either Player or ProxiedPlayer
Into an abstract type that you can do sendMessage and things with
then you can write that code without caring about the implementation
interface Sender {
val uuid: UUID
val name: String
fun hasPermission(permission: String): Boolean
fun sendMessage(message: String)
}
yeah pretty much
that's copied straight out of my existing Sender
then just mock that?
I DID
to store the messages
WHY ARE YOU MOCKING AT ALL
val sender = mockk<Sender> {
every { uuid } returns UUID.randomUUID()
every { name } returns "Charles"
every { hasPermission(any()) } returns true
}
```?
mocks the sender
as I said, returning CompletableFuture wasn't actually my idea
then change it?
I am now I'm using coroutines
yes but
I should be returning Unit correct?
Why is your command handler returning anything
Yes it should be unit
all your command handler should do is validate user input and send messages. Anything more than that should be done in another class
also do I just remove the CompletableFuture methods?
Fucking throw it all away
Because its for the best
Rewrite from the ground up with coroutines and actually following the SRP
I'll throw away the old code and replace it with new stuff
but I'm not just throwing away the old code and being done with it
anyway it's bed time now
I'll see you lot tomorrow
bye
@prisma wave I am thoroughly enjoying IntelliJ just completely not working
Infinitely analyzing
That's why you don't use EAP
What's it analysing?
the debug control flow analysis?
This is the highlighter
Oh lol
Perhaps your pc is cursed
That seems like a reasonable conclusion
I really need to drop this habit of naming my main class Main lol
Loving to use function extensions right now, so useful
Actually i can make that better
Nice, now is just if (link.isPaste())
how better is PPPoA over PPPoE?
Yea but is the difference visible?
iirc ATM is short for something like Asynchronous xxx
well you don't really notice it
just that you don't have any MTU issues as well as less overhead
hmm
I think for now ill have to switch to 4g for uploads ๐
What is this supposed to mean? xD VDSL doesnt come over tel cable?
> [14:44:56 WARN]: [ProtocolLib] [PacketFilterManager] [DistrictCreeperEggs] Unsupported server packet in current Minecraft version: Dynamic-91871dbe-c8fb-4766-b470-5c3c92299197[LEGACY, SERVER, -1, classNames: [] (unregistered)]
> [14:44:57 WARN]: [ProtocolLib] [PacketFilterManager] [DistrictCreeperEggs] Unsupported server packet in current Minecraft version: Dynamic-c90ec39d-8a67-4ecb-bcd3-c088f6fd0afd[LEGACY, SERVER, -1, classNames: [] (unregistered)]
> [14:44:59 WARN]: [ProtocolLib] [PacketFilterManager] [DistrictCreeperEggs] Unsupported server packet in current Minecraft version: Dynamic-03a44df7-5ac1-4855-aadc-b307dc852513[LEGACY, SERVER, -1, classNames: [] (unregistered)]
> [14:45:01 WARN]: [ProtocolLib] [PacketFilterManager] [DistrictCreeperEggs] Unsupported server packet in current Minecraft version: Dynamic-debb335f-f07e-41c6-8fb3-0b143df6336d[LEGACY, SERVER, -1, classNames: [] (unregistered)]
Any suggestions on easiest way of hiding this?
hideConsole();
suppressed reports:
Add the REPORT_UNSUPPORTED_SERVER_PACKET to there @hot hull
ProtocolLibrary.getConfig().setSuppressedReports(-);
it's possible to make an itemstack with negative amount ?
I don't think so
Not sure what happens if you try, probably illegal argument exception
I think in newer versions it just removes the item
there is not a way around the problem?
Why do you even want negative amounts lol?
@prisma wave you told me to setup gradle can you explain me how pls ? D:
Sure
In Intellij it's very easy - go to new > project > gradle
Put in your group id (eg me.bristermitten) and artifact id (eg myprojectname)
And you're pretty much done
I'm about to shower but I can give more info soon
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
You should find this useful
yep already saw it thx ๐
Np
@prisma wave what do I do now ? ๐ถ http://prntscr.com/sq3u2a
That URLClassLoader is invalid for one thing
new URL[]{mriUrl}
Then you can do Files.copy(InputStream, Path) to copy from the resource to the file
so then guys. day 2 of kotlin ๐ฏ

I guess that's just off topic
hehe
I posted a lot more in #development lol
that ones great
lol
xD
๐
lol
Yes!
Did you guys know that kotlins better
?? isn't a thing tho ๐ค
it's a meme lol
๐ค
not my meme
then you should write an angry comment to whoever made it
Kotlin memes for Java-jaded teens. 505 likes. OC Compsci memes with a Kotlin twist
ew facebook
lol
lmao
xD
I don't see how labeled expression would be bad in this case, i mean you need it to be
with caption "friendly reminder from Google that it's time to move on"
@ocean quartz labelled expressions are kinda ugly imo
given that you can do it without any return
never heard of it tbh
same
Some obscure functional language
The syntax is nice enough but I've never heard of anyone using it
Ever
I agree, but the thing is some of them aren't really possible without the return, or at least I can't see how it would work
wha
๐ฎ
I posted a language dammit
In your example you don't need the return at all @ocean quartz
For example:
commandManager.registerParameter(Member::class.java) { argument ->
if (argument == null) return@registerParameter TypeResult(argument)
val numericArg = argument.toString().replace(("[^\\d]").toRegex(), "")
val guild = jda.guilds.firstOrNull() ?: return@registerParameter TypeResult(argument)
return@registerParameter TypeResult(guild.getMemberById(numericArg), argument)
}
:O
never actually had a practical use for it nor used at work
that type of return should only be used when there is more than one return context
what the fuck is that
Which there is
a esoteric language
Brainfuck is cool
SPL is the best language
what's SPL?
get out
is that a hello world program
Cook is nice too
seems to be xD
https://paste.helpch.at/raw/dajamejoye that specific page has a bunch of examples, here's the hello world isolated
lol
tf is that?
yep, apl
Emojicode is a full-blown programming language consisting of emojis.
๐
๐ข
You've just segfaulted
this is a real programming language btw, not a joke like brainfuck and spl
Nice one
these types of languages are just jokes
apl is a legit language
Esoteric is the term
๐ ๐
๐ ๐คHey!๐คโ๏ธ
๐
open bracket
ah okay it's just the start of a code block
brainfuck is not a joke
void {
print(" Hey!");
}
effectively
HAHAHAHA
fun main() {
println("Hello World!")
}
I bet that can be simplified
fun main() = println("Hello World!")?
or do you not even need a main function there
no you do
.kts
println("Look mum, no main function!")```
That's only for scripts mind you
that's kotlin for py actually
did you know you can actually write a Minecraft plugin in Python if you want to lol
Minecraft plugins in brainfuck when
is jython just python that runs on the JVM?
also you know Kotlin is named after an island in Russia near St. Petersburg lol
go figure
Java was also named after an island
Jython is a python port to the jvm, yes
Trash
AHH
Not particularly great, though
I just got a NPE for the first time in ages
Python is one of those duck typing languages though
So?
well I guess Python isn't as bad as other duck typing languages that say "true + true = 2"
That is something different
I guess things like that are just typical JS
Also I wasn't saying that Python isn't great, but that Jython isn't great
yeah
I think graal isn't too bad
Just stick to the language you're using, don't try and make some amalgamation of 2 completely different languages together
Graal is a different thing though
yeah
^
The JVM has its own rules and ports like Jython decide to not embrace them and instead build their own incompatible thing on top
It may have some niche applications but you should generally avoid it
like, avoid python at all costs in general
yucky ducky
ducks are meant to be cute
python aint cute
Python is absolutely cute
I have to use python since it's what my school teaches lol
and no matter how many times I ask the GOD DAMN IT TEAM TO GIVE ME FUCKING INTELLIJ THEY JUST DO NOTHING
lmao look at the 4th image caption
sorry that just really pisses me off
yeah
fr
just move school
How can you complain about learning python at school lol
not hard
one of the deputy head's is my senior link and she said she'd deal with it, and she's still done absolutely fuck all
and to even get attention it took me taking my laptop in
what ide are you using for python rn?
im gonna have to do php next year in school
and it's dog shit
did you mention that pycharm is free for educational institutions?
we only use pyscripter though because it's portable and so doesn't allow people to run python scripts on the main machine
I should do that
I've told the head of Computer Science about GitHub Campus so I'm hoping they'll look in to it
but chances are they'll do fuck all
is that even a chance
that is definitely not what I said
when you know more about programming than like the entire department you know there's something wrong with competency
combined may I add
they really don't teach the teachers much though
No offence, but you sound a little hard to deal with
guess I get free repl.it with the github student developer pack, probably the best I'm going to get
my school had a programming teacher for one term, he just happened to teach java, by some great fluke. I demonstrated my knowledge, he asked what IDE I used for personal development, and I said intellij. He said he never heard of it, and said he used android studio. At that point, I knew for certain that my school had no hope whatsoever of ever having a competent computer related subject
._.
๐
he used android studioxD intellij
yeah I know
my schools just tought me HTML for the past 5 years
bruh
And I still dont know it that well
bruh
You can use android sdk on intellij itself right?
my school teaches python and it's really annoying
yes
html is like the go to school "coding" language
intellij ultimate has the functionality of all jetbrains ides
yeah
pretty much
wait Minecraft is an option?
plugin
that's a plugin
ew
consider picking gradle next time
gradle good java bad
might have to start using gradle if it actually does build faster
speed isn't really the primary factor
what is?
it's more so that gradle is infinitely simpler
isn't for me
simplicity, accessibility, extendability
gradle is much less verbose, it's actual code so you can do much more, it's faster,
I just don't like the way it's written, I personally prefer maven's XML layout, personally I find that easier to read
๐ค
but if it's faster I'll switch
if the days of it taking like two minutes to build my little project can be gone then I'll happily switch
Fun fact, a snake's pit organs are fucking gross
lol
also, does anyone here use PIT? just curious
if you don't, you should check it out
well, compare this:
repositories {
maven {
url = "https://hub.spigotmc.org/nexus/content/repositories/snapshots"
}
}
dependencies {
compileOnly "org.spigotmc:spigot-api:1.15.2-R0.1-SNAPSHOT"
}```
```xml
<repositories>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.15.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>```
if you can look at that, and say maven is simpler, you're off your chops
ok
basically it mutates your code (not actually, but in it's own thing), and finds where the program survives (surviving means you didn't test that part)
well, compare this:
repositories { maven { url = "https://hub.spigotmc.org/nexus/content/repositories/snapshots" } } dependencies { compileOnly "org.spigotmc:spigot-api:1.15.2-R0.1-SNAPSHOT" }``` ```xml <repositories> <repository> <id>spigot-repo</id> <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.spigotmc</groupId> <artifactId>spigot-api</artifactId> <version>1.15.2-R0.1-SNAPSHOT</version> <scope>provided</scope> </dependency> </dependencies>``` if you can look at that, and say maven is simpler, you're off your chops
must be off my chops then lol
can confirm, you're off your chops
Also with Gradle you can specify which things come from which repo
definitely off it
what does off my chops mean?
ah
just not thinking straight at that moment
yeah
I see
but no, if gradle is going to make a significant enough difference in performance at least then I'll switch
it will
not now I know gradle performs better no
if it performed the same I'd choose maven
๐ฆ
Why...
bardy it's not your fault
XML is fucking stupid
majority of spigot community is brain washed
lmao
- Because I'm used to it
- Because I prefer the layout of XML personally, don't even begin to ask why it's just a personal preference
"i use eclipse build path because it works fine and a youtuber said to"
get out
Wdym you prefer the layout of xml
I prefer how everything is laid out
you know, you have your group id, then your artifact id, then your version, then your scope, your type, the sections just make it easier for me to read
"i use eclipse build path because it works fine and a youtuber said to"
@prisma wave
lmao
idk
Gradle does all of that in 1 line
You say that as if you cant define dependencies like that in gradle
Gradle does all of that in 1 line
that's the part I don't quite like
I know it makes more sense but
I just don't like it
"not enough boilerplate"?
compile group: 'org.spigotmc', name: 'spigot-api', version: '+'
that's better
i would take 10 lines of groovy over 150 lines of XML any day
compile group: 'org.spigotmc', name: 'spigot-api', version: '+'
that's more like it
that's ugly tho
Are you unable to process a colon delimiter?
I find that easier to read than "org.spigotmc:spigot-api:SPIGOT-VERSION"
no
as I said it's just personal preference and what I'm used to
I guess the "groupid:artifactid:version" fits in more with my code style

if you aren't familiar with what said style is, basically it's compactness and efficiency over readability
ew
kinda the way I live the rest of my life
readability directly correlates with efficiency
basing code on compactness is generally a bad idea
as long as I don't spend hours making my code look nice I'm good
that's exactly what you should be doing
I mean... if youre a good programmer it doesnt take hours
@topaz bay im struggling to understand what that guy is touching in that gif
gimme an example of what good looking code is to you
and I'll show you what I'd write instead
maybe there isnt enough time for it to turn off fully
https://github.com/lucko/LuckPerms this is good code
that's Java
thats java
@jovial warren literally the complete opposite of whatever that completablefuture shit you wrote was
yeah I'll give you that
oh you want kotlin
java can still be clean
using a future there was a bit of a java thing
boilerplate != unclean code
it's just what I was using in my old code
how can i cancel the PlayerArmorChangeEvent when a player join the server?
https://gitlab.com/BomBardyGamer/bardypunishments that's what I mean by my old code
Heres some amazing code
LMFAO
welcome to the korm fields
@ocean quartz FIGHT ME
allman
Yes?
korm is bad
probably my least favourite style
some of these should be expression bodies
I mean.... thats the point of OS?
open source
also, that style goes against kotlin's official coding conventions
Exactly what are you fixing?
what's korm?
ah okay
@prisma wave thats just not true
I literally have logs of it happening
@topaz bay Is this better?
And I have millions of usages of it working properly
you should just use exposed for object-relational mapping imo
i...
You can say that it cant deserialize whatever youre throwing at it
so I'm making it up?
Which is fine to say
But to say that it cant deserialize lists is bullshit
Its one of the core fucking data types in korm
@ocean quartz I love that so much.
I'm glad
wait this allman style looks an awful lot like JSON
it might be being used as a string instead of a list
No, youre getting paid to work with someone I dont have the willpower to work with anymore
good point
well ya never know
glare uses clip's package name in voteparty
ya never know
No, youre getting paid to work with someone I dont have the willpower to work with anymore
and the thing I am getting paid for is fixing bugs
Its literally a repo ON MY GITHUB ACCOUNT
alright alright, no need to bite my head off
@prisma wave Good, take his money
i don't want to ๐ฆ
A normal person would have made an issue
it's confusing
A normal person would report the bug
apparently he did ยฏ_(ใ)_/ยฏ
no such thing as a "normal" person mate
or do you mean me
A weird person complains about it, and then complains about something not working
Im talking about you
oh
Youre complaining about not knowing how it works, and that you have to fix the mess
He said he'd contacted you already so
But I strangely dont see a fucking issue on this repo
you go from 0 to about 5000 in about 0.2 seconds dude chill man
well I'm happy to make some if you like
but I was under the impression that you're not at all interested in working on the project anymore
No, it pisses me off when people dont use their brain properly
Like evolution came THIS far
For you to just throw away the billions of cells
not very far then
in your head
...
does that also apply to opinions then?
huh?
because you seem to take a chunk out of anyone who doesn't agree with you
and what exactly would be the point of making an issue if apparently you've been completely ignoring the project for over 3 months?
@jovial warren You have the right to hold an opinion, and I have the right to say youre an idiot for it
@prisma wave what??
If theres an issue with something not working, make an issue for it
And I will fix it...
bruh
I know that, but I'd rather not have my head bitten off for stating my opinion, please
I was told you've been completely ignoring chris so how was I to assume that you'd suddenly be interested in doing bugfixes
@jovial warren then dont state them in a public forum?
You dont have the right to be unopposed
@prisma wave korm is not related to chris bruh
chris has nothing to do with my language
Korm is the problem you just brought up
hm
no but you don't have the right to take the piss out of people just because their opinion differs from yours either

korm is bad
doesn't even work
i'm having to fork it to fix it
@jovial warren yes I do
but that's not gonna help with the rest of my problems
freedom of speech bruh
If you dont like it, block me
simple
@prisma wave I dont care about the rest of your problems
Youre the one being paid to worry about it
you've got a bad attitude wow
ยฏ_(ใ)_/ยฏ
evidently
given that they're problems in your code, then yes
Yeah, the code YOURE being paid to "fix"
the fact that he's having to pay someone is a problem in itself
?????
paying someone else to fix your problems is just laziness
and also, most of the time, things actually get done when you do it yourself because it's your task so you usually have the most motivation to do it
it's not my code, he shouldn't need to pay someone else to fix bugs
You dont even know what youre talking about bruh...
@prisma wave Your issue is that you clearly dont understand the scope of what this is
What you have in front of you is not the original project
Its LITERALLY around the 30th iteration of it
Every iteration worked fine, until he wanted some other feature
Some new hook into some other random bullshit
Almost all of the issues on that project had to do with working with other plugins
I dont have the time, nor the will to keep fucking around with other shit all damn day
sounds like it would cause problems tbf
The original project, what he originally wanted, worked fucking perfectly fine
nah you got a point
That was nearly 3 years ago
but how was I supposed to know that
asking what exactly?
nobody asks a question when they don't even know what they're asking
good question
and also, no such thing as a normal person
Lol
but fr what was I supposed to ask?
im with niall on this one
basically BM has been paid to fix someone else's code
incidentally i've realised why korm broke
lines: "
&bTemple Name:
{temple_name}
&bClaimed By:
{group_name}
&bStatus:
{temple_status}
"``` this ain't a list
๐ซ
That would be because you have an outdated version
I changed the scoreboards to be a single a very long time ago
pretty sure i cloned from the latest on space
space?
jetbrains space
tf is that?
it's like project management mixed with Git