#dev-general
1 messages ยท Page 139 of 1
So what is lateinit
you dont have to initialize the variable there and then
and it throws an error if its not initialized i tihnk
lateinit means you don't have to give it an initial value without it being nullable
Ok thnk
https://img.bristermitten.me/LDoNpr7ODG.gif how is this for a demo of PDM?
this might be bad practice but i use lateinit a lot of my manager variables and for my plugin
i do a lateinit var plugin: MyPlugin
then in my onEnable i do plugin = this that way i can just call plugin anywhere in my project and it has an instance of my plugin
well DI is always preferable
DI?
"Pop my cherry"
?kotlin-dependency
Dependency Injection
Dependency injection is when we pass a class through other class constructors to access that specific class in those other classes.
class Main : JavaPlugin() {
override fun onEnable() {
val other = Other(this)
other.method()
}
fun myMethod() {
/* Some code goes in here */
}
}
class Other(private val main: Main) {
fun method() {
main.myMethod()
}
}
that was clip
Damn ya'll still in voice
// clip - start
fun firstTime() = println("This is my first time using kotlin. Pop my cherry")
// clip - end```
it was the only plugin I had easily accessible lol
ah
I just looked up what that phrase meant
yeah time to change that I think
o
lmao
"Vulgar slang"
You didnt know what popping the cherry meant?
Too young for such words
no lol

Would u like to explain to him BM?
I think i mightve once - and looked it up, but forgot since then lol
Would u like to explain to him BM?
not in the slightest
alright third time lucky
how's this?
whats with the java icon
probably because I installed the JDK through intellij or something
rather than with the installer
ItemBuilder is looking nicer ๐
Not bad.
@hot hull You have used brigadier before right?
Yes
Do you have an example I can have a look at?
The generic for the literal function seems to just default to Object for me for some reason
Not really no
Im supposed to use the CommandSender for the dispatcher right?
I believe you use the CommandDispatcher
CommandDispatcher<CommandSender> dispatcher = new CommandDispatcher<>();Yea I meant the generic argument
CommandSourceStack
Ok and what about with the literal function call
it seems to result a argument with Object as the generic arg
I doubt I'm the right person to be asking this 
I've used it once, but I can't remember shit from last week so 
Ah rip. Thanks tho ๐
I assume you trynna make them fancy colored commands?
I mean thats the goal but trying to understand how to setup a basic command with this
Probs easier if you look at commodore or whatever tf lucko's command shit is called
Or atleast how he wrapped brigadier into it
hmm
Does anyone mind explaining the difference of why mojang allows paid plugin resources and not mods? Is it just because mods tend to actually use mojang's code where plugins are mostly off of APIs?
if ("balance".equals(params)) {
profile = this.instance.getProfileManager().getProfile(player);
if (profile == null) return null;
return String.valueOf(profile.getTokens());
}```
switch (params) {
case "balance":
profile = this.instance.getProfileManager().getProfile(player);
if (profile == null) return null;
return String.valueOf(profile.getTokens());
}```
@remote goblet Imagine not being able to use this yet >:) https://github.com/Frcsty/AdvancementAPI
๐ก
don't randomly tag him like that, go to #development and provide the error and code using https://paste.helpch.at/
@obtuse gale
well what's your code...
let me pastebin
alrighty
and how are you registering it?
#register();
have you read this? https://github.com/PlaceholderAPI/PlaceholderAPI/wiki/PlaceholderExpansion#internal-class
Nope spigot wiki
read that instead, it's more updated
if(Bukkit.getPluginManager().getPlugin("PlaceholderAPI").isEnabled()){
getLogger().info("Placeholder api found registering");
new PlaceHolderApiHook(this).register();
}
}```
by placeholder api register part
And you get the papi found message correct?
yes
add an indentifier to your onRequest code
And then /papi parse me %minestore_<indentifier>%
kk
make sure you have canRegister returning true and persist returning true as well
KM, that code will fail in many ways, but oh well, not the concern here 
ยฏ\_(ใ)_/ยฏ
public String getPlugin() {
return null;
}```Is that not supposed to return the plugin instance 
nvm
Name
Yea figured it out
its working showd the value
colored commands? ๐
@prisma wave Any chances I could "inject/add" my own components (types) into a nms class?, or am I just being stupid rn 
unlikely
I'm sad now
best option would be a subclass or something
bytecode modification might be possible, but probably not at runtime
make a derived class and replace it where it's used
I kinda can't, since the method I'd use it in requires the specific nms class
how can you not?
Unless I'm missunderstanding what you mean
@obtuse gale use isPluginEnabled() as getPlugin() is nullable
@hot hull show what you wanna code and what your current/nms current code is
Well I mean the code/specific example doesn't really, what matters is can you add let's say enums to a class that you can't edit yourself
technically I believe you can
๐ฎ
There's a thing in NMS for advancement frames,
AdvancementFrameType
I was hoping I could somehow modify it to see if it's possible to add my own frames
cant you use reflection or smth to modify an enum?
with bytecode modification you could
^
you can edit existing constants, but not add new ones afaik
F
I mean yea I could just edit one of the existing ones to test if it's even possible
I got my intellij ultimate for students
YAY
๐
I asked my college that im going to next year to give me my .edu email
and the came in plug!
nice
get the Github Student Developer pack while you're at it
it has a crap ton of free stuff
KM, This is the enum I'm trying to get
CHALLENGE("challenge", 26, EnumChatFormat.DARK_PURPLE),
guide me
Do I use DeclaredField or what?
And I just use the name as CHALLENGE?
yeah
If I use set, would the first object param be the param name or the actual type?
And the second? confused since there's 3 params to it
enums compile down to static constants
GOLD('6');
``` compiles to ```java
public static final ChatColor GOLD = new ChatColor('6');
you need to firstly remove the final modifier from the field
then instantiate a new ChatColor (insert enum name here)
by setting it to accessible I assume?
then set the field value
no
you need to actually edit the modifiers field of the field
oh I see
Already running a slideshow but oh well
KM, if there's 2 param to the enum, what would that compile to?
new EnumName(params, here);
Thanks
hot

TIL
Fix my WE issue and I'll try Clojure
promise?
Yup
ok

Just my luck smh
Frosty I want that code when you're done boi
Yeye I'll make the lib public
Cheers
If I don't yeet myself before
Make it public now so if you do I can finish it
nono
๐ฆ
@onyx loom what did I tell you?
@prisma wave for fuck sake @errant geyser
I'm a tad confused KM
about what?
Am I missing something or?
getDeclaredConstructor
field.setInt that's not going to do what you want it to do
that's going to set the value of CHALLENGE to an int
I think
yep
Do I need to reasign the class now, or can I just return the starting one now?
where are you talking about?
oh, the Class will still have the same value
is that what you mean?
This is my entire function now
you should probably return the value of your first newInstance call
@errant geyser you're targeting 1.13 right?
1.13.2 yeah
smh
This ain't right ๐
Field.class.getDeclaredField("modifiers");
hm, see now I get the not visible shit on the modifiers field
wdym?
@errant geyser send your build.gradle
Am I dumb or?
private AdvancementFrameType(String var2, int var3, EnumChatFormat var4)
final Constructor constructor = type.getDeclaredConstructor(String.class, int.class, EnumChatFormat.class);
url = 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/'
}
maven { url 'http://ci.athion.net/job/FastAsyncWorldEdit/ws/mvn/' }
maven {url 'https://maven.enginehub.org/repo/'}```
@errant geyser stick with the same style 
Lemme see if that fixes it
@errant geyser try BuiltInClipboardFormat.MCEDIT_SCHEMATIC
Takes time to test cause I gotta throw shit into local maven, and then reimport yadi yada yada
Excuses
I ain't going to sleep until this works so..
the problem is that you're following the 1.12 docs for 1.13
the api changed a lot
or maybe it didn't
Alright, so how can I load the schematic using that then?
I've got a project which works in 1.15, it'll probably work in 1.13 too
although it doesn't use FAWE api
which isn't necessarily a problem
I can work with that, probably
Aren't they similar af?
server died 
and the FAWE API is usually just less boilerplate

compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.1.0")
compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.1.0")```
it uses the DSL, sorry
fun File.loadAndPasteSchematic(source: Location)
{
val format = ClipboardFormats.findByFile(this) ?: throw IllegalArgumentException("Invalid File Type")
val clipboard = format.getReader(inputStream()).read()
val world = source.world ?: throw IllegalArgumentException("No World")
val session = sessionsByWorld.getOrPut(world) {
WorldEdit.getInstance().editSessionFactory.getEditSession(BukkitWorld(world), -1)
}
val copy = ForwardExtentCopy(clipboard, clipboard.region, clipboard.origin, session, source.toWEVector())
Operations.completeLegacy(copy)
session.flushSession()
}```
feast your eyes on that
and try it
ideally
Still getting no such method KM :c
lemme try that
interesting
private static AdvancementFrameType getCustom() {
final Class<AdvancementFrameType> type = AdvancementFrameType.class;
try {
final Field field = type.getField("CHALLENGE");
final Constructor constructor = type.getDeclaredConstructor(String.class, int.class, EnumChatFormat.class);
constructor.setAccessible(true);
final Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
final Object newInstance = constructor.newInstance("challenge", 26, EnumChatFormat.AQUA);
field.set(null, newInstance);
return (AdvancementFrameType) newInstance;
} catch (final NoSuchFieldException | NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException ex) {
ex.printStackTrace();
}
return AdvancementFrameType.CHALLENGE;
}
just a Map<World, EditSession>
I don't need it either way but still
not sure if it's actually needed or not
toWEVector() just made a new BlockVector3 based on the location
fun Location.toWEVector(): BlockVector3 {
return BlockVector3.at(x, y, z)
}``` this should be good right
Okay anyways I'm going to sleep KM, I'll continue bothering you tommorrow 
wait
sleeping at 11pm yuck
I realized what the problem is
enum constructors have another parameter added
a String at the start that represents the enum name
println(AdvancementFrameType::class.java.declaredConstructors.contentToString()) => [private net.minecraft.server.v1_16_R1.AdvancementFrameType(java.lang.String,int,java.lang.String,int,net.minecraft.server.v1_16_R1.EnumChatFormat)]
but that's an int as well
session.flushSession() what does this do? I need to keep the EditSession in tact so I can reverse it later is my concern
yeah the int is for ordinal iirc
String, int, "challenge", 26 (not sure what this is just yet), color
Those are the params then
AdvancementFrameType::class.java.getDeclaredConstructor(
String::class.java,
Int::class.java,
String::class.java,
Int::class.java,
EnumChatFormat::class.java
)```
String (name)
Int (ordinal)
the rest
you probably should
but just copy the existing one
@errant geyser iirc it makes sure all the session's changes are persisted. might be necessary, might not be
No I mean KM, what would the ordinal be? Not sure what that even means?
enum Test {
A,
B,
C
}``` A has an ordinal of 0
ok that sounds alright
it starts at 0, same with arrays
smh
but just use the existing one's ordinal
AdvancementFrameType.CHALLENGE.ordinal()
iirc
in case it changes
probably because they're generated by the compiler
I tried it and it definitely works so
yolo then
What repo did you use BM?
maven { url 'https://maven.enginehub.org/repo/' }``` I have this one defined rn
;C
java.lang.NoSuchFieldException: modifiers
Imma continue with this tommorrow, thanks for the help 

@errant geyser that looks fine. https://maven.enginehub.org/repo/com/sk89q/worldedit/worldedit-bukkit/7.1.0/ it's literally there lol
oh
oops
remove the worldguard dependency
that's not even needed
because I read it as worldedit and copied it lol
It then disconnects me when I get teleported due to an invalid movement packet or smth
i mean
they do say that fawe 1.13 is buggy
although that might be your fault
send code
Surely not unusably buggy
you'd be surprised
Hey I am getting this error when I try to export jar using maven
https://bin.katsumag.me/BxQ0x6QC.cs
private fun paste(): EditSession {
return File(plugin.dataFolder, "BedrockBase.schem").loadAndPasteSchematic(loc)
}```
I can't post image :/
@errant geyser
xyz = rand.nextInt(Int.MAX_VALUE)
Tried Setting Block at x:9, y:1163593441 , z:9
ArrayIndexOutOfBoundsException: 72724590
big brain
Whats the max they can go to?
??????????????????????????????????????????????????
have you ever played minecraft ???
the max y is 256
F
So the x and z can be up to max int right
yes
welp
while dont have a body
oooooooo I get it
do { } while (true)
How do I do it without FAWE without it being laggy as hell
Yeah rn it teleports you to a void world, you're outside the world border and then you fall
ยฏ_(ใ)_/ยฏ
just set a max no?
I do
x and z can be MAX_INT, so I don't define a limit, y can be 0-256 and so I set a limit
also BM data.dat still generates as a folder somehow
ohk I capped it to 256 everywhere and it worked
What in the fuck
The rest of it works as intended @gusty fulcrum, you want this for now? I gtg in 10 mins, but I'll figure out the limit tomorrow
Does this mean I gotta learn Clojure now BM
I have a feeling ima regret this
so I already asked this.. but jsut wanna be sure.. 1.12.2 is the best for prison servers right? cause I see lots of plugins 1.14.4+
I'd say factions server since it has a lot of explosions
NO
A deal is a deal
but for prisons if you have a good server it could go on the newer versions (I recommend latest)
Should've used
Scala
o

might learn scala
It's ok
its meant to be decent right?
Quite tricky at times
yea
It's powerful
but there's a lot of stuff that is difficult to learn
Steep learning curve
(0/:l)(_+_) this is valid scala
I think the main reason is that it has a lot of symbols for making concise, not readable code
lol
It's equivalent to l.foldLeft(0)(x, y => x+y)
and what does that do LOL
But that's not how functional programming does it
Scala is a functional language rather than Object Oriented
So is Clojure
eh it says its both
But scala puts a big focus on FP as far as I know
Well, kali I'm sorry but I agreed to this I guess
FUCK SAKE
I'll do it tomorrow since I've had to go
i swear to god if u convert to the dark side
Heheheh
Kotlin will always be the best language until proven otherwise
thats my boy
To me rn clojure looks like a heap of shit, but I've never used it sooo
I'm getting used to it
It's just different
Not necessarily better or worse
Just different
learn visual basic ๐
Indeed
Nobody has ever wanted to learn vb
I think we can ALL agree that VB sucks
Yep
We had a kid, proper gangsta like yeeeeeah real ard like yeah transfer from a London school to mine since he moved, he took CS for some reason (he dropped out within a week, my CS teachers HATED him), and when asked what language hed learnt at his old school, no shit he said VB. Everyone was stunned like wtf, who teaches people VB????
Proper gansta lol. Was he like 5 5 with a dead trim
6"2 but yes
You know those people with Corsas who have those ridiculous exhausts and a chain thinking they look mad hard but actually look clapped? He was one of them
Lmao did he pick up yr9s at maccies
No, he hung out at our park and maccies with his drug addict friends on bikes
At least half the people in my year can get or have tried drugs
It's insane
jesus christ
mine is the exact opposite
Maybe because everyones high
๐ฌ
Holy shit is it the funniest thing you've ever seen
He abused the shit out of it
If a teacher said anything to him hed yell SUCK MA DICK and they couldn't say anything
๐
Lmao that must get annoying asf though
Scottish tourettes is the funniest thing ever
Meet John he has tourettes! A 1hour program in 5 mins. Its a japs eye!
I pasted a coral advert link by accident lol
Yeah lol u need headphones to watch that. Very profane
I'll leave you all with the wise words of senpai
picture urself in a beatiful green field LOL
?
Inject custom themes into discord
Im sorry. I am severely mistaken but why os it so black
Tf when was that a thing
Its been around for a while
Those are wise words
@analog crater lmao that vid is funny
I cant remember exactly how to get it, iirc u gotta spam dark yeah
Also why u sending hair spray to Poland boi
messenger yuck
Ikr
Messenger is great for casual conversing

T4 blue ftw
@prisma wave basics of Closure tutorial time? Ima try to make a cli calculator or smth first
I only know the basics myself
but there are 2 key concepts
- Clojure is a lisp - everything is a List
which is done with the syntax (list elements here)
Clojure is functional, which is quite a different programming style to Java's imperative style or Kotlin's semi-functional/imperative style
everything (as far as I know) is immutable which can lead to some different ways of doing things
and you'll typically be chaining functions together (eg map, reduce, filter - think of Streams or Kotlin's Collection extensions)
other than that once you get the basic syntax it's fairly simple
(1 2 3) is a LinkedList, [1 2 3] is a Vector (think ArrayList but not literally)
and then Maps are {:key value} iirc, but @lunar cypress might correct me on that one
ez xp
yeah I'm using IJ
get a plugin
can't remember what it's called but if you tell me the name I can tell you
Cursive
That's it
Syntax is incredibly simple compared to other languages but it's the structure that might give you a headache in the beginning
Gn bois, you can expect to be harassed tomorrow as I inevitably fail at this calculator thing
Please do feel free to harass me
๐
That sounds wrong
but for prisons if you have a good server it could go on the newer versions (I recommend latest)
@static zealot so for a prison server.. you would recommend 1.16.1?
wouldn't it be risky?
not at all
Okay so. I'm being passed a string in the format int1 int2 int3
How would I go about getting those ints into either an integer array or multiple integer variables to do a math operation? I tried using toInt on a hardcoded String.get(), but then when I try to do math with my variables, I can't use math operators like *, +, or %.
val remainders = readLine()
val testInt = (remainders?.get(0)?.toInt())?.times(70))
yes, I know getting my integer with get() is a terrible idea because someone could give me a two or more digit number for some reason
maybe split at the spaces, then use map like .map { String::toInt }
u can try it
idk if itll work
toIntOrNull then filter not null, maybe
Something like val numbers = reminders.split(" ").map { it.toIntOrNull }.filter { it != null }
mapNotNull
kotlin questions are the reason I get up every day
i think it can even be val l = b?.length ?: -1 but i could be wrong
You are completely correct.
I will say though, those are garbage variable names, please don't do that @subtle lynx
Use meaningful names
Ok
Sorry it's been a bit; had to do something
val ageRemainders = readLine()
if(ageRemainders != null) {
var ageRemainderList = ageRemainders.split(' ')
val yourAge = (ageRemainderList[0].toInt() * 70 + ageRemainderList[1].toInt() * 21 + ageRemainderList[2].toInt() * 15) % 105
}
Does anything here look stupid? (the math is provided by the thing I'm using to learn. I wanna know if how I'm getting the values is stupid, not if the equation is stupid)
There is no reason for ageRemainderList to not be a val
Hello
why am i not getting warnings in Intellij, Maven Kotlin Minecraft
Any solutions?
Should I change it to Gradle/no?
Saw this, can't check right now but hey give it a shot
One more reason could be IntelliJ is running on power saver mode, this could be disabled following way:
File Menu -> Power Saver Mode
what is so good about gradle?
Everything
^
https://imgur.com/a/oWXEDyl
How's my project organization thus far? Good or bad? I learned Java in school, but they didn't really teach me how to handle more than one class
Why have you got commad.commands. wouldnt it be better to have command.handlers for your manager etc and command for all your commands
But apart from that its good
This is how compiled kotlin looks with top level functions right?
Missed a semi colon in the Java bit but apart from that it should be right yeah?
so like if i wanna get into coding plugins should i learn kotlin or java
java
๐๏ธ_๐๏ธ im gonna b rlly embarrassed if they're the same thing
They aren't
kotlin
okay ๐ good to hear-
Personally I prefer Kotlin having used both, but its up to you
It's personal preference honestly
^
Kotlin 2๏ธโฃ - Java 2๏ธโฃ
Better to start with Java, yes
but if you say you prefer java, you may get crusaded
o
sad
Got u Ori
i meant the
thing didnt work
ik
Java is more commonly used and you can find more resources on it, kotlin is a fairly recent and not many people know or understand it 

Curse your Nitro
Shitty bot
Another for the collection
Probs just requires perms
The person who sent the message has to react to it 4heads
See

I want that one Ori

The one that Frosty was on about
This is how compiled kotlin looks with top level functions right?
@errant geyser
The bottom one is probably an inline function which you cant call from java
Its the bottom one on here
This one Ori
ah nvm
Is there a place to ask for help on here with come code?
https://i.gyazo.com/1e0be6f8f1265ae7bd6bd6faf0cd117a.gif heres the ones with pepe in it
then yes, thats how it would be called from java
thanks
Thanks Yugi
So
With my ItemExtensions obviously it works like this in kotlin, but in Java that'd be awful since it'd be java ItemStack item = ItemExtensionsKt.toItemStack(Material.whatever); item = ItemExtensionsKt.setDisplayName(item, "name");right?
I should probably just make an ItemFactory class so it looks clean in Java right?
Yes, You can just have the extensions use that internally
Nope
๐
A cast to Array<String> from Array<out String> should be safe right?
Yes, what even is the difference between them?
vararags lore: String produces an Array<out String> rather than an Array<String> for some reason
I just attempted to use an accidental .sk chunkbuster for referrence
The code was horrific...
"code"
accidental 
Sorry i just downloaded .sk without looking xD
So the script I just got from that is this (in pseudo):
sendTimerMessage
wait 1
semdTimerMessage
wait 1
(5 times more)```
Just don't do it all together jeez
Sorry :P
Thread.sleep(Integer.MAX_VALUE.toLong()) do it
what's the point in the Long
Thread.sleep(Long.MAX_VALUE);
o

What in the hell are you guys trying to do?
Confuse people
We're doing tHREAD.sLEEP(sTRING.max_value) obviously
Lower case s Ori jeez
no
Thread.Sleep
welcome to c# territory
ah yes
@onyx loom You proud?
spigot discord
For github, how do I setup actions to build with gradle and shade some dependencies?
Like automated build on push?
I use my jenkins (https://ci.katsumag.me). It just runs in a docker container on my VPS, and builds (I'm still working on it pushing to my Nexus) on commit
@analog crater define the checkout and java actions
mark gradlew as executable
and call gradlew shadowJar
name: Java CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build with Gradle
run: |
chmod +x gradlew
./gradlew shadowJar
- name: Release Artifact
uses: actions/upload-artifact@v1
with:
name: latest-versions
path: build/libs
like that
will run the action, then attach the output binaries to it
ignore that expired message, this is an old archived repo of mine
(you might want to check if there are updates to those actions I've used)
And how would I have to autocupdate versions
So like every new build has a new incremenr ver instead of latest-version
You can access context information and evaluate expressions in workflows and actions.
specifically:
hold on i didnโt know there was a spigot discord
i asked a few times and everyone said to check the spigot message chat room thingy
idk what itโs called
๐๐๐iโm in
Sx, any way of compacting down a for loop further?
ie: for (int i = 0; i < 5; i++) //code
repeat(5) {}
That's kotlin isn't it :c
Yup
I mean... you could just use a while?
Any equivalent to repeat in java?
@hot hull what's ur //code
show the whole loop
if it's just a one liner, you can do sneaky shit like this
It's a one liner yea
for (int i = 0; i < 10; System.out.println(++i))
Oh yea
Shut up weeb
prefer a stream to what I posted frosty
I'm adding 0 to a list a specific amount of times
Bow to your goddess
what does the result look like sx?
o
@hot hull um...
that's kinda yucky
Arrays.asList(new int[amount])
Holy fuck, noice
if you do that, please make sure to comment the semantics of int null being defaulted to 0
because noobs probably won't know that
and then I just addAll correct?
A member of staff has requested I move your message to a paste,
Most likely beacause it contains a config/error/code snippet.
smh cube
wait what
uhhh okay?
(Was hoping cube added a converter for that one, but doesn't look like it)
I don't see why it matters, in all honesty
yeah
bruh
pastebin the ugly one
you'd think I've seen that error enough to know how to spell it
and I fucked up the caps
amazing
What's yaml engine used for plugin?
snakeyaml
Oh ok
@quiet depot Can you send me the fingerguns emoji
Skyy, why are you doing it like that?
Rat and reverse rat are better ๐ฆ
I don't have Nitro otherwise I'd have reacted with em but eh
get nitro then 
ScoreboardTeam runnerTeam = mainScoreboard.getTeam("runnerTeam");
if (runnerTeam == null) {
mainScoreboard.registerNewTeam("runnerTeam");
runnerTeam = mainScoreboard.getTeam("runnerTeam");
}
runnerTeam.setColor(ChatColor.AQUA);
@subtle lynx
Piggy, the rotated one as well
I don't have them
It just occurred to me that my if() wasn't even checking my variable
also, I was on the spigot discord and they told me that you can just use
runnerTeam = mainScoreboard.registerNewTeam("runnerTeam");
if it returns the team sure
i would disagree
just think of that sweet multi spin
or just get both
ยฏ\_(ใ)_/ยฏ
boi I need my VPS
u dont need it
I don't need Nitro either
My emoji collection is growing by the day
up to 52 items right now
@hot hull just download them off discord
Already got em 
whatโs the point in nitro when i canโt even use my funny emojis in this discord ๐
get gud
You can if you boost
Which is why I'm trying to get Cube to sponsor me
Since he'd have to pay 1p extra for nitro rather than 2 boosts, he gets to keep t3 and I get emojis
๐

Why would you spend 12p extra a year for something that gives you no gain and has less guarantee
sssssshhhhhhhh
@errant geyser https://github.com/Frcsty/Advancements

Unusable
But you forget the lib's dependency info is in it 
why don't you just set the Challenge Complete to the same colour as the bg
So I can use it
How is it pink?
feelsbadman
I thought it was always grey or smth
There's 3 different ones
oof
pls install resource pack and change the item to 
lmao
Time to make a shitty wrapper for it
katsu, if you ask nicelly I'll add you to the lib repo
Not gonna make it public cause then everyone gonna copy my nice shit 
Please Mr Frosty can I be added to the repo so I can make a wrapper for it for ease of use
I mean it's already easy to use what u mean
Meh
Have you even checked the code ;C
Well I mean only three things are there which are part of the wrapper
The rest is just personal preference
Ok fine
Cause shut up
Please Mr Frosty can I be added to the repo to make a kotlin wrapper for it so everyone doesn't complain, and also to simplify whatever I can
Well I mean, I gotta make the lib public then ;C
I mean how do you even use local repo shit with gradle?
I was trynna use gradle at first but couldn't figure it out lmao
oof
Then define it as a regular dependency
ok im sorry ill +1
๐คฆ
@analog crater You've condemned yourself to be required an explanation, go
same reason as me 
Jolly doesn't use kotlin does he?
Kali my libs are written in Java and uses Maven
wtf
I use kotlin lol. Also, im rewriting your advancedments to be more concise, kotlin and gradle
but no excuse for maven ๐
its ok kali, my command handler is coming in Gradle and Kotlin
don't revert back to inferior technologies when you get stuck
smh Piggy
just ask
Yes
Oh fuck not this guy
yeah
everyone
not the c word tho
in my subjective opinion clojure is objectively better than kotlin
๐ก
Oh, why do you say that? What are you objectively comparing
I think you'll find it's objectively subjectively better actually!
I love how everyone saying they gonna rewrite it, but you actually can't since this ain't the lib 
Bamboozled weebs
Objectively subjectfully objective
I'm objectively comparing my subjective opinion to other irrelevant subjective opinions, for the sake of objectivity
I want attention, here is my opinion
@hot hull Mr Frosty pls add me to repo mr boi you are best boi ever libs are good FJ good I love you yes
My opinion is TRUTH. yours is not
I want xp, here isnt my opinion
Oh fuck no, just for that I'm not adding you katsu
NOOOOOO#
I love XP
Fuck
Let me explain my reasoning,
Java - Cuz Spigot, no one wants a lib that adds 1.4mb for no reason
Maven - Because of Maven Central authentication, the same in Gradle is pretty annoying to do
I played myself
Bruh. Theres no advancedapi






