#dev-general
1 messages ยท Page 437 of 1
epic johnny
no clojure vectors aren't
what can i say, my pc best pc (totally)
Worst thing: malware xD
This should've been the language selection... but... its something
They should be O(log n)
What are you using for benchmarking, Johnny?
jmh
That looks great
Tyty
But I'll have to investigate there because it shouldn't be able to get much simpler than arraylist lookup
Anyone more experienced with python data science stuff and can recommend a library to graph data + a quickstart?
Matplotlib is supposed to be good
something is seriously wrong with ArrayList
the results get more absurd
Removing 1M elements takes 20 (!) seconds
๐ฅถ
were you debugging while checking that?
this is definitely an outlier though
Lookup as in fetching value at a index right?
gotta run that again
yes
lmao
what java version btw kaliber?
should be running on 11
should I learn clojure before kotlin
Yes!
yeah 11
all before kotlin?
openjdk too if thats of any note to u johnny, probably not
Ok! ๐
I have no idea
Yes
let me see if I consume the results correctly
Clojure is an interesting language
clojure is faster than java :kek:
Yep
Wait
Once elara comes out I'm dropping everything to learn that though, obviously.
When the dynamically typed language outperforms java
Idk what your pc did to get 20 seconds with barely any error in that 1 java benchmark but there definitely went something wrong there
sadge
I'll run on my VPS if you want
Yes, but not before I investigate in some places
Okay
Your VPS probably has shit single core performance like mine
all for science ๐
Probably but worth a try
If you want you can run the one outlier in isolation
yea can do that then
x5670 ๐
includes.set(listOf("JavaRemoval.benchmarkArrayList"))
you can put that in the jmh block in build.gradle.kts
see if the result is still 20 seconds
for addition clojure's vector is pretty much on par with ArrayList
Impressive
it seems the other collections are the places where Java clearly outperforms the others
well, apart from stacks and queues
Are vectors roughly equivalent to a TreeSet?
no, they're the ArrayList equivalent
any field that is mutated across more than one thread should in principle be volatile?
kotlin's persistent collections are fast too though, holy cow
Kotlin... Good?
does anybody have any thoughts on how i should handle this:
I have a master server and some slave servers which the master deploys.
- I can send messages from master <-> slave using server sockets
- each slave has a specific open port that the master keeps track of, used for master -> slave
- the master has an ID for each slave but the slaves don't know it
I need the slaves to know their own id, but they take a random amount of time to spin up so I don't think I can just send them a message as soon as I create them.
yes
get them to send a request to the master asking for their ID once they startup?
Idk if that's a good practice or not
But
i would like to do that but the issue is the master needs them to identify themselves
How many elements john?
the only way it knows which slave messages it is if they send their ID
im sensing something is wrong here
How are the IDs allocated
well I use the player uuid which the slave belongs to, as well as a number for the index of the slave for that player
does the console say anything?
Maybe theres some compile time optimization, otherwise very odd that o(logn) manages to execute faster than o(1)
each slave has a specific open port that the master keeps track of over which the master can send them messages
You can take a look at the code, I've tried to circumvent all optimisations that obfuscate the result that I'm aware of
ok yeah this is better, i was running it through IJ instead of console
Alrighty
So how would slave 1 differ to slave 2? Because if there's no difference you could just keep a queue of "uuids to allocate" and do it first-come first-serve
heck yea
Hmm
You making a master -> slave relationship?
Can't the slave store its own id somewhere
Wouldn't that make the most sense?
And if you're creating a new one, give it an id to store
i was thinking I could try to pass the ID in on creation of the slave, because that makes the most sense yeah
Seems like the best way
but i'll have to get a little... weird
i think
like, to the degree of having to put a text file into the slave's directory when launching it
if id is stored somewhere:
tell master what id is
else:
ask master for a new id # this implies it's a new instance with no user specific data
actually now that i think about it
putting a text file wouldn't be that bad
maybe...
I can kinda see why github want to discourage "master", this is getting a bit weird ๐
"please give me a new id master"
How is that weird
Lol
all of my slaves have user specific data from the moment they're created
We back in the ancient times
since i bind a specific world directory to them via docker
Hmm
just create them with the id then?
If you're using docker pass the id as an environment variable or something
Are you planning to have the slave provide its own id to the master?
yeah further down the line
when the slave talks to the master it needs to give it's id
is how i have it set up
this is a very good idea
There would be an issue with that tho
i have no idea how to use environment variables right now, so i'll need to look into that
actually wait
Can the player modify the slaves source? What if you receive a request from some other machine with the id of one of your slaves?
the way i have it set up is a request to the server consists of an action, and the target of the action
so whatever ID is passed in is what the server acts on, essentially
Yes but so anyone can act as any other slave
Isnt that a vulnerability?
why would it be
Because then the point of an identity is lost
Wouldnt you want some form of authorization instead?
well there's no risk of using an identity maliciously
these are all servers running in a private network
So it accepts only internal connections?
yeah
Alright
not to mention my messaging service uses RSA keys so you'd need that in order to send a valid message in the first place
ok even here it doesnt do anything ๐ฅฒ
it is running it tho so im really confused as to why its taking so long, its taking 10-30% of cpu

and yes i did add the includes.set(blah blah) in jmh block
Any good scoreboard library? the one i currently use doesn't appear to work :/
It should at least tell you what it's doing currently
are you up to date with the remote?
yeah i remember seeing that when i first ran it earlier
ah if u just updated then probably not
ill try that then
I didn't change anything special
better than nothing
๐ฅฒ
Or did I accidentally revert it
do you know how i'd get the environment variable from within a java plugin
Apparently I actually forgot it
is it a bona fide environment variable?
System.getenv or something
I would like to see java do this
๐ฎ
working now johnny lmao
takes incredibly long for me too
@Benchmark
public void benchmarkArrayList(ArrayListState state) {
state.arrayList.remove(randomIndex(state.arrayList.size()));
}
```this is literally it
It's called 1M times
arraylist what are you doing
lmao my server takes 110 seconds each iteration
pain
o wth????
Of all the elements that come after the index
Why
So that's a juicer with 1M elements
That's so fucking dumb
lmfao
for shifting
On arbitrary indexes or sequentially?
random indices
Ah okay it makes sense now lol
Idk what the persistent equivalents do but they're more than 20 times faster
bruh
that mightve been the failed test then ig
thought I'd caught them all
@lunar cypress
this is quite interesting
Ok can you try KotlinRemoval.benchmarkVector in isolation? Do you get any response?
For me it's stuck in warmup it seems
this may be one reason why this is taking so long
probably times out after 10 minutes... for 45 iterations....
wait no that can't be
probably over after the first one
ill leave it running while i have my dinner, hopefully it works
It's copying too much lmao
How do I add a dependency to a plugin with gradle and have it compile with it?
Set the dependency as implementation and use the shadow plugin
implementation & shadowJar
Oh Matt you are here, its for mf-gui lol
I tried that, and it says the class is not found
I'll show what I did
no u aren't
always
oh btw matt, any progress with the gradle plugin?
Oh, uh, hmm, going to do that now
may or may not have forgotten many times
repositories {
mavenCentral()
}
dependencies {
implementation "me.mattstudios.utils:matt-framework-gui:2.0.2"
}
apply plugin: 'com.github.johnrengelman.shadow'
shadowJar {
relocate 'me.mattstudios.mfgui', 'me.masterofthefish'
}
xD
show us entire build.gradle
also, relocate it to like me.masterofthefish.mfgui
And how are you building it?
gradle jar
I tried that
That's the issue
Oh
You need to do gradle shadowJar
@lunar cypress this is totally fine right? LUL
I've barely used gradle lol
:p
yeah kotlin one must be borked
Thank you
just maybe ๐ฅฒ
I think something else is definitely wrong though, it can't just be the bad implementation
can it?
Codacy and the passive aggressive smile
๐ฅฒ
c:
that looks like its gonna be hella slow johnny, but it should atleast run yeah
kotlin gets baby treatment
Use explicit scoping instead of the default package private level
But I want it to be package private ๐ฉ
lmao sounds good enough
But that's bad because we can't properly compare it to the others anymore
Make all of them 50k
idk how representative that is
still taking ages with 50k removals ๐ฅฒ
jfc
90 seconds
nah man
it works with 50k?
I think Kotlin's gotta sit this one out
yeah
You can try by changing the global constants in Global.java
But if the difference is that huge it will render the results practically useless
Well I guess there technically are only Kotlin, Java and PColl for this one
persistent
persistent
oh
๐ก
Benchmark Mode Cnt Score Error Units
KotlinRemoval.benchmarkVector ss 30 2311.979 โ 12.612 ms/op```
include PCollectionsRemoval.benchmarkVector and JavaRemoval.benchmarkArrayList as well lol
God damn kotlin really has to fix this function
Um
What should we use for normal discord emotes?
Like ๐ธ
in bots
The normal format used for the server specific ones dont seem to work
msg @compact perch
you need the raw unicode
johnny its not letting me run it with that โน๏ธ
ah
Kotlin bad :)
no
pcollections and java bad
wdym
includes.set(listOf(
"KotlinRemoval.benchmarkVector",
"PCollectionsRemoval.benchmarkVector",
"JavaRemoval.benchmarkArrayList"
))```
am i stoopid or what
verbosity.set("EXTRA")
it's time
oof
wtf is it doing
Excluding: com.github.johnnyjayjay.benchmarks.pcoll.PCollectionsRemoval.benchmarkVector, does not match PCollectionsRemoval.benchmarkVector,JavaRemoval.benchmarkArrayList,KotlinRemoval.benchmarkVector ???
Does it concatenate the includes??
lmao
unicode characters
put an | between them instead, single string
they get converted automatically by Discord to their respective emotes
Anyone have experience with protobuf?
Yea got it bard
also, initial pass on fixing block breaking is out btw ๐
Fastest, Reverse, Shortest
oh nice!
i feel like this might get annoying for more experienced users, maybe you can add a command to set everything immediately
slash command? poggers
lol
you could do it "The Hard Wayโข๏ธ"
btw
Yea, maybe later, should be a easy switch
new discord interactions with buttons dropped apparently
Benchmark Mode Cnt Score Error Units
c.g.j.b.java.JavaRemoval.benchmarkArrayList ss 30 48.370 โ 0.602 ms/op
c.g.j.b.kotlin.KotlinRemoval.benchmarkVector ss 30 2335.234 โ 25.243 ms/op
c.g.j.b.pcoll.PCollectionsRemoval.benchmarkVector ss 30 31.560 โ 2.741 ms/op
what in the fuck kotlin 
posted wrong ss before
lol holy cow
thats 50k ops still btw
wait what's this?
kotlin persistent collections
show me the way to this repository
Does anyone know why in chat deluxe chat shows the place holder as %player% etc
take a star
bardy arent u using kotlin collections lib in krypton too? ๐ฌ
not persistent collections, no
ah k
if you mean kotlinx.collections.immutable
i do mean that yes
is discord having a stroke with embeds or something?
Persistent collections are a part of kotlinx.collections.immutable
yeah ik
Yugi
Yea?
Suggest that to be included into barry
lol
I really gotta learn how JMH works lol
Ofc other languages as well but yea
this looks pretty cool bardy cant lie
It suppourts all languages frost
I actually gave cube a js lib for this
But he's busy
Bardy, quick question, how far/what stage is the plugin part of krypton at?
FJ to krypton when
ETA 2 hours
@quiet depot Could we get hasklash on here after update?
๐ฅฒ
it's growing with the server
you can make plugins that send commands and stuff
I want to debug/benchmark some plugins and krypton would be nice since I can add some methods to print execution time if I can access the current ticking plugins execution task
wdym by that last part?
Issue is I'd have to convert the existing one to krypton, which is yikes
theoretically they could run an instance themselves through the barry token if they don't want your bot
yugi put hacks in the bot
the one on dev den is hosted on bms vps
Basically I want to see how long an execution takes when a plugins task is ticked, if that makes any sense whatsoever
idk what you mean by "current ticking plugin's execution task"
ah right
Krypton doesn't have a sync scheduler btw
=clash
Its not here conc
Ah, not of much use then I presume
It'll work eventually con
what exactly do you want to test?
there's an async scheduler that is backed by an SES
Execution time for all tasks within a plugin
can Bukkit do that?
No clue man
Gonna make something better, and actually useful, might port to krypton eventually
And no, not world gen, something else
FJ is one of the rare plugins that might actually work in Krypton
since Krypton has a join event
called at a weird time though, and no way yet to set the actual message sent lol
Code is on gh if you want to test kek
maybe I should add a way to do that
I go now, one more day
is it actually in Kotlin?
Yes
I thought you converted it back
Idk, can't remember
also, the testing for plugins has been very, very minimal
and when I say that, I mean I made a test plugin once to test a few basic things and that's it
haven't tested block updating yet
or like 99% of the rest of the API
on that note actually, if anyone fancies trying out the API, be my guest, I could do with some test subjects xD
If it doesn't work, blame the user
exactly
oh hell yeah @onyx loom I got banned 30 minutes xD
switching it here so I don't break the chain
didnt ask
well I didn't ask either (if you asked)
can anyone help me with smth
it isnt exactly mc related tho
ayyy
no
ok
what is it
Let's not forget what our purpose in life is. To make Frosty a powerful man: #dev-general message
my main discord account got the verification thing
but i dont have a phone
number
i was wondering if someone could verify it for me
uh I really doubt anyone with more than 3 brain cells will give their phone number to a complete stranger lol
what is with people coming in here and asking this
yup
Does anyone here know datapacks?
what about them?
I need help getting a scoreboard to work
tellraw @a [{"text":"TNS Sapling Counter sucessfully loaded!","color":"aqua"}]
team add default
scoreboard objectives add current_sb dummy
scoreboard objectives add SaplingsPlanted minecraft.used:oak_sapling
scoreboard objectives add SaplingsPlanted minecraft.used:birch_sapling
scoreboard objectives add SaplingsPlanted minecraft.used:acacia_sapling
scoreboard objectives add SaplingsPlanted minecraft.used:jungle_sapling
scoreboard objectives add SaplingsPlanted minecraft.used:spruce_sapling
scoreboard objectives add SaplingsPlanted minecraft.used:dark_oak_sapling
scoreboard objectives add .SaplingsPlanted trigger
execute if entity @a[scores={.SaplingsPlanted=1..}] run scoreboard objectives setdisplay sidebar SaplingsPlanted
execute if score value current_sb matches ..-1 run scoreboard players set value current_sb -1```
I am trying to get one point added to the user if they place a sapling
hm
tbh you might be better off asking in #minecraft lol or in the fabric or minecraft discords themselves, I personally doubt many people in here know that well enough
I was thinking about giving prim my phone number, he left so nvm
Okay I need big brain help now.
Let's assume I make a combat log system which works like this:
People have the ability to pvp each other. Once someone pvp another player they both get into a combat status where they should not log out (if they do they lose their inventory). The combat status will be lasting for around 30 seconds. During that time the player who has it will not be able to go /spawn etc.
To implement it I thought about using epoch time and then compare between two different timestamps. Which would work good. Now let's say I want to also add a countdown on a sidebar scoreboard which would display how long time it's left till the combat status runs out. Of course in this case I would have to actually add some sort of repeating task. But then here's the two alternatives I could go with:
-
I only use the repeating task for the combat status and then keep the time comparison implementation to check whether the player is actually in combat status.
-
I don't use the time comparison implementation and instead we store a boolean for each player (or like in a set). Then whenever the player enters pvp we add them to the set and also start our repeating task. Once our repeating task is done, it will be responsible for removing the player from the combat status set. So here we would delegate all the work to that repeating task instead of depending on time comparison.
jesus
why did I write so much
it reading time
could you run a repeating task with a countdown builtin to it thatll disable itself and take them out of pvp mode when it hits 0
yeah that would be option 2
yeah it would remove awkwardness I guess
cba reading options, just make it a Set<UUID>, and in PlayerDeathEvent and PlayerQuitEvent check if the player is on the set, if it is, remove, and on quit, clear inventory.
When combat logged, make a BukkitScheduler#runTaskLater for 600 ticks, if the player is in the set, then "un-combat log", if not, then do nothing
oh for the countdown
thats option 2 as well
yeah but basically dont use time comparison
you said repeating task in option 2
yeah
yes its a repeating task/ rescheduling task
actually you can just do Map<UUID, Map.Entry<Long, BukkitTask>>
then cancel task if player leaves and stuff
in case they rejoin
and the task is still in queue
yeah though as of now I might go with a boolean per player or smtng
why not just runTaskLater
once
for 600 ticks later
I'm implementing a visual countdown
placeholderapi?
?
or ur own scoreboard
uh my own lol
oh
uh
Sensitive programmers are recommended to not accept this invitation
no i meant like the sharing reason
like r u sharing so i can see scoreboard or the combat log
๐
uh
lol
I thought of sharing gh repo
i need scoreboard lib ๐ฉ
ok
Kiteboard has an api I think
then we have spigot apis scoreboard interface
works fairly decent
isn't Kiteboard a plugin?
i dont want to force users to use a specific scoreboard plugin ;-;
true I guess
O
rip Niall
I mean it isn't that much different than making them with commands lol it's super reflective (in the sense that it's almost a 1:1 with cmds)
@ocean quartz
lmao very true
It's a bit eh though
you know him?
Might not, that's very old
extremely outdated
Oh wait
lol
https://github.com/MinusKube/Netherboard found this
woah
well else just ask Matt to do it
lol look at my computer science exam requirements
this is too funny
"No Penalty"
lol
;-;
"= instead of == and vice versa"
Dkim to a 6yo repository "extremely outdated"
Dkim to 1.8 (7yo) "Best version ever!!"
ok oof dkim
lolol
๐ฅฒ
How does that result in no penalty....
idk lmao
That is literally a cause of bugs
Lol did he get muted?
strangely, the exam is stricter about multiple choice
no
Smh
my mute wasn't even on purpose lmao
i used a command accidently
in the wrong channel
and discord wasnt registering the sending message
i was like wtf lmao
Yeah like right now
hes muted rn
Lol
lol
?
This kid is gonna get himself banned from discord...
Sorry Niall I didn't mean to ping you, was trying to do @Niall because they were talking about Kiteboard
Yes
Robi
No problemo
Well did you?
Why am I not surprised
doesnt codemc provide free maven hosting
I don't want to be dark blue
big boi now
.
mf-scoreboard
dkim-scoreboard
@ocean quartz ๐
๐ณ
wait
https://github.com/TigerHix/ScoreboardLib/ can't i just build this myself
no
I make libs based on things I'd use, doubt i'd ever use scoreboards, they are pretty annoying lol
kek
Lol

No, they are just awkward, who likes playing with a giant thing on the right size, it feels out of place
stfu pulse nobody asked you to talk lol
lmao
its not giant
maybe if ur gui scale is on auto
then yea
๐
but no one plays with that
what is wrong with Bukkit's scoreboard system btw?
everythings huge
I wanna know so I can fix it in Krypton
Sorry, humongous
I've seen it break 100 times over
d;spigot Scoreboard#registerEntry
@Nullable
Scoreboard getScoreboard()```
Gets the scoreboard for the associated objective.
the owning objective's scoreboard, or null if it has been unregistered
I never had issues with it though
d;spigot Scoreboard#getEntry
int getScore()
throws IllegalStateException```
Gets the current score
the current score
IllegalStateException - if the associated objective has been unregistered
๐คท
wait where is it
takes like a tenth of my screen
d;spigot Objective#registerEntry
void setRenderType(@NotNull RenderType renderType)
throws IllegalStateException```
Sets manner in which this objective will be rendered.
renderType - new render type
IllegalStateException - if this objective has been unregistered
just like my dick
ha!
I want a way that plugins such as KiteBoard and FeatherBoard could not have to use NMS
anyways it contains stupid shit like "oh this returns the score" when the method says getScore
I guess no surprise but still annoying as hell
do you guys javadoc getters/setters lol
Look how much cluster you have on your screen, giant scoreboard, giant bossbar, giant left thingy that is basically useless
its not giant
pulse if it needs
keystrokes mod kekw
and well yea the memory thing is useless idk why i have it
But it is, you lose like 20% of your screen with just hud
i need to see my own key strokes !!!
eh
lol
wym
when i see your roles
idea: make Tab, Teams, and Scoreboard be different things
i see like 20
oh right
Idea: remove scoreboards
also, you can say goodbye to BS like Bukkit.createScoreboard or whatever it is because I think I'm just gonna make all the scoreboard stuff data classes
always confuses me how scoreboards and tabs are the same thing sorta
oh lmao
im only missing guilds role โน๏ธ
its actually an instance method ScoreboardManager#getNewScoreboard()
jeez
lmfao
๐
โค๏ธ
Bukkit? instance methods? what are those?
lmao
Look at that beautiful jaw line
what a chad
๐ฎ
just not true
๐ฎ
johnny thats a thing?
o
wew
yes
sheeesh
PLEASE why are you trying to DENY the FACTS
nope
in denial
new api feature ๐ฎ
did they actually add buttons? nice
how
it's "components"
wat
how
how are those facts
{"content": "hi",
"nonsense": true,
"components": [{"type": 1, "components": [{"type": 2, "style": 1, "custom_id": "test", "label": "Test Button"}]}]}```
because KRYPTON bad NMS GOOD
https://gist.github.com/thehackerboi69github/1ac37938bafda5bf9bd3cb833d7b93dc also need to do this to see
You delete the project, change it to gradle and do gradlew shadowJar
even if Krypton is trash, at least it's not half obfuscated and filled with inconsistencies that make you go mad
Lol
ah
so it's a sticker?
๐ฎ
Krypton bad Kryptonite good
what is nonsense lol
If you click it the bot receives an event
oh that was to confirm it only registered correct params lmao
because I wasn't sure initially if this was real
does jda have that or is a beta feature?
what a name lol
'tis likely a beta feature
not even beta or alpha
It's live, but completely undocumented
also only available in dev mode
wait so normal users wont see a thing?
(not the regular dev mode)
so far yes
But they'll likely introduce it officially in the near future
very nice
@lunar cypress Can buttons be made by users or only bot accounts?
buttons ๐
@surreal quarry
what file?
;-;
do smaller commits
bots
How do I create the buttons through the bot?
it's in the same category as slash commands
I sent an example earlier
need to send it to the create message endpoint
Does this have to be done directly with the discord api or is there any wrappers that support it?
The feature is very new so it's unlikely that any big wrapper already implemented it
Imagine if that wasnโt the case lol
probably gonna begin implementing it for discljord soon
I think like 12-14 gbs
Atleast that was the consumed size on the usb
Altho rufus could have partitioned more than it needed, so not fully sure
Wait
no
only 2.6 Gb
There's the "dumb fixes" Fefo
And the "idek what this has anymore" Fefo
Holy
tbh i've been there
Holy
Also
dark blue johnny
lol
Fefo be typing a paragraph
I believe this is the commit with the most changes I ever did (basically some sort of rewrite)
5,136 additions and 2,360 deletions. https://github.com/Fefo6644/LuckyCrates/commit/3bbfed773bae9a92bee6b86aa52983cdf265b922
someone shoot me in the face lol
:/ so i just removed VCS and readded, but now its making be commit every file
it completely ignores gitignore
and I already googled
I think my file got corrupted because of my stupid computer bluescreening
๐ฆ
how do I get rid of all that from being committed?
Add the gitignore to the change list and try commiting
Remove them from your plugin
wdym
it already is
The gitignore file
ok that makes more sense, currently all image flash tools just write like one 140MB file though lol
for me
and idk why
makes me pull
Which one did you use?
and it fails
oh btw, I'm currently working on doing a major refactor to Krypton, and I was just thinking, if I want to switch to the style where you have no blank lines between the header and the first property (I'm keeping a blank line in there if the first element is a function), should this also apply to enums?
e.g. ```kotlin
enum class MyEnum {
VALUE_ONE,
VALUE_TWO
}
Ye
From https://github.com/dkim19375/Bedwars
- branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories
I just did git pull https://github.com/dkim19375/Bedwars.git master
is your local history different from your remote history?
used the latest image and tried with both rufus and etcher
i just deleted .git
I presume the usb drive is broken somehow
But idk how to fix it
It works normal outside of that
But after flashing it shows up as "Removable usb drive" or something
Try formatting it beforehand
Did
It does for me as well
Thats fine
That depends on the name you gave in rufus while burning
Did you check if it shows up in the boot menu?
I did not however I'm pretty certain that one 140MB file can't be valid
Where did you see the 140 mb from?
explorer
btw when I connected this usb on windows it didnt show me the whole drive
Just part of it
It only shows the whole thing on linux
I assume it has something to do with the filesystem type
Not really sure, but worth a shot I think
how do i commit my files to github? nothing on the changelist...
Is the gitignore file present?
open a terminal in the project directory and do git add .
lmao
now theres a new folder
called Bedwars

ill try pasting it
into the actual project dir
welp
uh
how do i change the git root
maybe
...
๐คฆโโ๏ธ
how do you not know
cloning creates a directory for the repository
smh
ok ima try again
so
what do i do
okay
ima delete the dir
um
ok it works now
argh
this was annoying
๐ฆ
aw cmon
hauisjkndwasdj
dkim u suck
legit
;-;
lmfao
pulls maven card
ew maven
Pulse
Tofpu you are an ugly bird!
๐
๐