#dev-general
1 messages Ā· Page 57 of 1
Nope
~~ it uses Nova~~
Bossbar and fonts
Also no
Yeah. It's my own implementation of a WAILA.
ahh fair enough
Tho, I did use the textures of Nova here
But I had to edit the block icons... all 991,
Because of how MC creates fonts.
Since it only makes them as wide as the furthest non-transparent pixel of an image (from left to right) did I had to add a semi-transparent background to all the images for a consistent size.
oh man
Good thing there was a batch option in Gimp
What is Nova?
a plugin
thanks..
I see interesting
It's quite cool
Its own WAILA is really cool (Especially since it also supports textures of blocks from like ItemsAdder) and was the inspiration for doing this myself.
Haha.... Just found out some characters force a Right-to-left direction and it resulted in this xD
no bedrock support though :(
thatās what I donāt like about nova
It makes sense though
Bedrock support would be hell
I personally don't like plugins trying to support BE if they are made for JE
The class I am taking now used Dafny for the beginning part of the semester
The loop invariants are pretty much just look at the post condition
fireeee
sometimes, we had some more complex ones though which needed a bit of wrangling
Little teleport thing
To whoever in the past talked about my plugin sending too much text: At least it isn't Iris....
god that must be in debug mode
I hope so too
I'm really that lazy that I made this:
public class FunctionKeyMap<K, K2, V>{
private final Map<K2, V> values = new HashMap<>();
private final Function<K, K2> function;
public FunctionKeyMap(Function<K, K2> function){
this.function = function;
}
public void put(K key, V value){
values.put(function.apply(key), value);
}
public V get(K key){
return values.get(function.apply(key));
}
public Map<K2, V> map(){
return values;
}
}
So that I can do this:
FunctionKeyMap<Material, String, String> texturePaths = new FunctionKeyMap<>(material -> material.key().asString());
...and have a map with String, String from a Material and String...
(Probs could be made better too... idk)
why not just EnumMap?
Because I need a String key as I use that for identfication and don't wanted to do the Material#key().asString() 20+ times
for identification
bit vague but okay
I get the block's namespace:id key later and check for it in the map.
Tho, my current system is a mess and I need to find a better setup...
Spent some time making a section on my website for my ecloud expansions...
Kinda shows how the Formatter expansion is the most complex/large one.
https://andre601.ch/expansions/
Would be cool to show the download count if thereās an api or something for it
I noticed an interesting behaviour with fonts that have been shifted using negative space widths
If the font has its shadow disabled is ir rendered behind content following
Like f.e. I disabled the shadow for the block icon and here it's gone.
But when I re-enable the shadow is it displaying properly
Really interesting behaviour
The ecloud API doesn't expose such a thing.
(Also didn't know that there was a v3 lmao)
Thatās such a shame..
We could probs suggest it. Tho unless it's tracked internally already would the stats probs not be accurate
Published the source and wouldn't mind feedback: https://codeberg.org/Andre601/IAWAILA
Command system will use cloud in the future, so I'll change it.
why no spaces between () and {}
White space price is too high nowadays gotta save up a bit
MD5's parenthesis style is hoarding all the spaces 
Just my personal style
i would suggest some improvements, but i cant look at it due to missing whitespaces
š š«°
mood
It is tracked
And ig the data comes from here https://bstats.org/plugin/bukkit/PlaceholderAPI/438#expansions_used
wohoo! My expansion is on the first page
right above itemsadder (img is from itemsadder)
There we go... added some stats to the expansion pages (fetches from bstats)
Need to push it now
Looks dope
Of course when I want to update the site are the actions runners causing issues... Have to wait I guess
Okay, it's now live
Since I started using the ItemsAdder API have I found various issues... Really hope LoneDev will fix them.
nexo on top
Meh...
I don't bother because A) Don't want to spend money and B) don't want to support something that is part of some stupid drama
calling it a stupid drama is plain stupid
lol
but oh welp
keep hoping for your fix then
I mean, I am in direct contact with Lone...
And he's always open to improve stuff
Ah yes, Thanks IntelliJ...
Not sure what I can or should do here honestly...
Want to try out a library, but it only has a single Event class with a method. All other ones only extend it... And I don't want to do countless instanceof checks in a row here...
generics are a pain
Basically, each instance of ? is a new one, incompatible with all other ones
Thatās not IntelliJās fault
i think he meant intellij doesn't help handle the error
Yeah, and the "expected capture of ? but got capture of ?" doesn't help much there
Yeah you have to understand Java for that I guess
any recommended DI libs? Guice, dagger, spring?
yes
idk they all kinda just work, requiring scaffold and setup of different kinds to varying degrees
it also depends on how complex your project it, i don't often find myself needing a DI framework or in a situation where it would make things easier or something, but i like dagger personally; if i were to be doing something with spring i'd use spring di ofc, or if i'm making a velocity plugin i'll be using guice since it's built-in, but eh
just try whichever and see what you like i guess
https://github.com/hakan-krgn/spigot-injection
this seemed interesting
omg it's john tesla
currently trying out guice
the inventor of tesla
ah that tries to be more than just di but a whole spring framework 
kinda yeh
I have a hard time understanding the purpse of DI here... Tho I also never had any need to use it, so it's just lack of experience for me I would say.
wdym by "here"?
or by here you mean you dont understand the purpose of it
ye
well, in a typical rest api scenario (for ex. Spring app), you would have a controller, which handles the request/response, a service, which handles validation and data fetching from repository and a repository, which does the actual database queries
in this example controller has a service dependency, which is "injected" into the controller, service has a repository dependency.
a DI library would make your life easier in a way where you would not need to do the usual "new ObjectService()" and then pass it to the controller "new ObjectController(objectService)" (same for repository)
also for singletons, you dont need all the "instance = this / getInstance" boilerplate, since a DI library can usually handle that for you too via a single annotation
well that's just from my experience, someone can correct me if Im wrong
It depends what youāre trying to explain exactly
I think thatās a good explanation of dependency injection as a process but not necessarily why youād want to use a DI library
DI libraries like guice handle the basic boilerplate but they also move even more away like binding interfaces to implementations, calling factory classes where necessary, and they encourage you to compartmentalise your code a lot more
yeah that was a part of the explanation, but yeah, DI libs basically just reduce boilerplate
for DI lib ex. I don't need to manually instantiate and store VouchersRepository as a field/variable and I can just "inject" as a parameter anywhere I would need
||oops thats a service and not a repository, but the idea is the same||
when wrapping text, does it look better to have the last word wrap if it goes over the length limit, or to allow that word and then on the next word wrap over?
cus im trying to figure that out
The answer is probably very subjective haha
How would you even do the second option though, without overflowing the view area?
^
I feel like it depends also in what context it's used
For example: Javadocs.
I want to keep a consistent width for the comment, but when a method or class link goes beyond that am I accepting this (or worst case put that entire thing on a new line, but that usually makes the other line look really short and cut off.)
i probs shouldve said the context, this is for an item's lore
I feel like a hard limit is needed here, especially since if it gets too long it can become hard to read on certain GUI scales and screen resolutions
Kinda sad that Mojang doesn't have automatic wrapping of long text in lore... I mean the Figura Mod has it!
Is possible to track user interaction and link clicks in a CSR app? I want to see how many clicks I get for each url from my site that sends the user to another website.
just started messing about with nbt data on itemstacks again. interesting that they have made some hella changes to how that works, very interesting
i havent touched them since i was working on 1.19 and its just a few extra lines to modify it it seems
only a little different. you call for CUSTOM_DATA rather then calling the tag directly from the nms itemstack object
probably yeah, have you looked into GA4 or GTM?
or Posthog, Plausible, Mixpanel
or use backend proxy
Posthog is pretty nice
via posthog you can probably do something like:
document.addEventListener("click", function (event) {
const link = event.target.closest("a");
if (link && link.href.startsWith("http") && !link.href.includes(window.location.hostname)) {
posthog.capture("outbound_click", { url: link.href });
}
});
Umami is lightweight and great
Ill probably use google analytics. Thanks.
Wdym?
why not use PDC for custom data? https://docs.papermc.io/paper/dev/pdc
well instead of
<a href="https://someurl.com">Blah</a>
you would use a backend
<a href="/redirect?to=https://someurl.com">Visit Example</a>
Where you would "capture" the click
Yeah my question was more about where can I track the data
i just like trying to do stuff outside of the api. if i was actually making a product then id use the api for it like pdc
oh, well, original message said "is it possible" š
Fair
Vouch for Umami, I switched to self-hosting it. So awesome
And, additionally, blockers like uBlock don't block your own domain when you self host it
When the hell did OfflinePlayer have PDC?
I swear to god it didnāt have that before :/
Do you happen to know when they added OfflinePlayer to support PDC holders perchance
I last used PDC with the 1.21.1 API
For fuckās sake
I remember being like
āMan, I wish I could access offline player PDCā while being too lazy to check the OfflinePlayer methods
Maybe it was just the docs that didnāt reflect the change? I was using the api last year 
I really wish I could use something other than citizens for NPC libraries
Thereās npc-lib but even that is nothing but using citizens is annoying because I feel like I encounter a bug for every fresh buildā¦
And itās like the only NPC plugin out there
time to create a new competitor - "Foreigners"
what are you trying to do with them
are you using citizens traits
Well, there is ServerNPCs but that one is limited in features I would say
Good you shouldn't be using anything lower than that
I might hate vue more than react rn...
updating the whole frontend of hangar is gonna be SUCH a pain
good thing I don't touch either I guess
xd
HELP
whenever I click print screen button
Intellij opens?!
like tf
out of a sudden
Sounds like a nice feature
win + shift + s?
oh wth that works for screenshots
but why is the print screen assigned to opening god damn intellij
Did you setup some macros or something?
I did not
this suddenly happened
lmao
hella weird
I just read that HashMap isn't synchronized. What would that affect, if anything?
Because I want to ensure keys are not duplicated (I did encounter such an issue in the past funny enough, which shouldn't be possible?), so not sure if synchronization here is important or not...
if you want to use a map with multiple threads, don't use HashMap
That isn't a concern of mine really.
ConcurrentHashMap?
well, you can get duplicate keys if multiple threads are putting values in it
keys might be duplicated also if hashCode or/and equals are improperly implemented - u prob alr know that tho
what is then?
a synchronized hashmap is only ever really helpful when you are dealing with multiple threads
if you are not dealing with multiple threads, then the fact it isn't synchronized does not matter to you
yeah what is the concern?
duplicate keys. But since that only happens on multiple threads, which I'm not having here should this not be an issue.
Although... the method is executed by Cloud's Paper command manager
And it's set to use async command handling, so there probs could be such an issue
well, do you need async command handling?
what is the method in question
You mean the method used on the hashmap or the method it's used in?
used on the HashMap
Does it hurt to have it?
I just use the async coordinator of Cloud itself
put
multi threading is not the kind of thing you throw to the wall and things just work
data structures and operations need to be specifically designed for it
otherwise completely unexpected effects might happen
anything from an outdated field read to a jvm crash, deadlocks, etc
so yeah it does hurt to have simply because the option is there
it makes things harder to reason about and work with, so you need to evaluate if running things across separate threads is an improvement to your system and how much of an improvement
Usually the āless timeā benefit from parallelization doesnāt make a big difference for things like commands
In fact, there might be more overhead sometimes by just creating extra threads itself rather than just running them sequentially on the main thread
Also from a developer standpoint, you have to handle now that everything is going to be possibly called not on the main thread, and if youāre accessing the Bukkit API, well.. wouldnāt that be a bit annoying?
You would need something thatās intensive that would ideally be able to be mostly independent so you donāt have to worry about syncing information as much or anything like that
Well, looking at the docs, the asynchronous stuff is apparently the command suggestions stuff and uses Paper's own async API for it alongside Brigadier
(Or well, Brigadier is used first if available, followed by Paper's async API from what I can decypher here)
if you're explicitly using the async coordinator, everything related to cloud will run on its own thread pool
parsing, execution, suggestions, exception handling
not just brigadier suggestions
it is best to use the simple coordinator
unless you have a reason otherwise
anyone interested in hiring CodeBreaker_ShadowScript
bro went with a Pinterest hacking pfp š
i love hacking
who stole the punctuation
The hacker
Feel like that was a bot because they tagged me for a unrelated thing lol
There seems to be some sort of exploit on SpigotMC that allows users to change the currency at checkout when purchasing a premium plugin - someone bought ShopGUI+ for 20 czech crowns instead of 20 USD - has anyone heard about this?
isn't the transaction entirely handled by paypal or something like that?
I've just managed to replicate the exploit, this is nuts.
I'll wait for Spigot to hopefully fix it and then disclose exploit steps.
You know you can trust me :))
so probs never
I have my honest doubts it will be fixed, unless they really work on the xenforo thing
....or you know.... remove paid plugins
MD_5 has already replied to my email believing there to not be an exploit and that he has messaged BRC about it. So I'll wait to hear from BRC about the details MD_5 has given him.
Btw who's brc?
ShopGUIPlus developer.
He's the one who initially discovered someone paid 20 CZK instead of USD for his plugin and still got added to the buyers' list.
Oh
Maybe it wasn't the best idea to publicly announce that there is an exploit
well didn't you hear, md5 said there's not bro
If that what I'm looking at is the exploit then it's very easy to find (i hope it isn't)
Ah yeah sorry šš„
Does it still work? I don't want to be poking around myself in these dangerous waters
cant believe Id ever have to do this, but lets ball
.
joe
Bruh
yeah, it really is
Then that's the stupidest fucking thing I have ever seen
I pray for md5 to have disabled automatic verification or something
that's what no server-side validation gets you
like, lmao
this can be abused so easily
Iām more shocked at how this has only been discovered now
I knew md_5 was stupid, but didn't know he was THIS stupid
like, it's just a matter of time until this spreads
This isnāt even like.. a minor exploit
Which makes it even worse
I think automatic verification is disabled, so not much use
yeah
this is going to affect many people
but tbf, in the bright side, maybe people will move out of spigot because of it
I am down for that
donāt worry! md_5 says thereās not an exploit so we can all move on with our day :)
yeah exactly!
does that mean I can tell all my friends and their families about the exploit?
should probably ask md_5 that
oh wait
itās not an exploit!!!!
smh
gonna try to see if I can contact anyone that has some type of influence/contact with md_5 to make him see things clearly
lol
tbh
cough

it affects a lot of pissed off developers
(which tbf, their own fault they chose to use spigotmc)
wanna know something even funnier?
you can change both amount and currency LMAO
@lavish notch ^^
yeh
Does it verify you automatically for the download of the resource? Or has he disabled it
didn't purchase anything
I don't want to abuse it...
so idk
Same same
@agile galleon @pastel imp So it turns out the user wasn't added to the buyer's list with the cheaper purchase.
They made a full payment aan hour later under a different PayPal email and was added then.
Ah great, false alarm then
Based
based?? based on what
I'm kinda curious about it....
You would be surprised how many exploits don't get found out for a long time.
Honestly it's very easy to find and it doesn't seem like it is an actual exploit
It's just you sending the developer a donation, as you don't get the plugin according to Mackenzie
Would you be okay to share the details with me in DMs?
I would like to make some devs of premium plugins aware of this, so they know and can possibly take meassures.
Measures against what exactly?
š¤·āāļø
Just want to make them aware, so they aren't confused why some random user sends them like 1 cent in a random currency or smth
Wait so it lets you purchase yet it doesnt add to the buyer list if you modify currency or price?
It would seem so.
Okay that is better
:,) whats ur opinion on prolog btw?
so good
prolog is really interesting
conceptually
but who would ever actually write that lmao
wtf š
import static me.clip.placeholderapi.libs.kyori.adventure.text.Component.empty;
intellij importing the wrong one
Lol
I have a weird problem with IntelliJ - my "test sources" for a module are not being recognized.
I tried marking them as "Test sources root" via the IDE, but it gets reverted after reimporting the gradle project.
tried various things, for ex. my root project build.gradle:
subprojects {
idea {
module {
testSources = files("${project.projectDir}/src/test/java")
}
}
sourceSets {
test {
java {
srcDirs = ["${project.projectDir}/src/test/java"]
}
}
}
}
and module build.gradle:
sourceSets {
test {
java {
srcDirs = ['src/test/java']
}
resources {
srcDirs = ['src/test/resources']
}
}
}
idea {
module {
testSources.from(sourceSets.test.java.srcDirs)
}
}
any ideas what might be wrong? can't seem to figure it out at this point
I don't use the idea plugin and never specify any source set directory (unless it's custom stuff) and it works wonders 
I had the test dir before, then I removed it completely (somehow), and now I cant get it back lmao
Just java or java-library plugin, don't touch sourceSets and by default both main and test work just fine
the key is to not touch anything
true that
alright, well, the issue was .idea/workspace.xml had the <module>.test in "unloaded modules" section
Well the paypal email is public so you could've done that all along
https://i.imgur.com/vc6iBvR.png
mmmm
Android Studio + Material Theme UI = beautiful
ok I imported the settings from intellij and it's much better now š
i hate this game
one is blended and the other is occluded in thsi screenshot
the difference?
SPAWN ORDER
fucking SPAWN ORDER makes this difference
that's so stupid! this is garbage graphics programming!
this is why I avoid anything to do with rendering or similar lmfao
Mojang makes this shit unbearable enough without touching that
Using build.gradle my output jar was around 20mb, I migrated to build.gradle.kts and the jar dropped to ~13mb.
Is it normal or did I miss something when migrating?
nvm I see org/sqlite is for some reason excluded or just straight up missing
lmfao
these should never make a difference
yeah I dont understand why, there are no changes anything regarding sqlite
the one on the left is when I built after migrating to .kts
org package does not contain sqlite for some reason
I mean, I haven't added implementation() for sqlite, but for some reason build.gradle includes it, build.gradle.kts does not
i mean, i would need to see both scripts side by side
I'll try to see if I can post it tomorrow, gtg sleep
but yeah, a very weird issue
also if I do include sqlite jdbc in build.gradle.kts, the output jar is ~28mb, which is higher than build.gradle output jar (reobfJar)
my only guess is that shadowJar's minimize option is more strict/aggressive in kotlin dsl and sqlite is being removed due to being brough transitively
I suppose I can try to debug minimize, see what it removes
that does not make any sense
a plugin can't know the dsl used for writing the script
also minimizing is cringe
you could just look at the file
just decompile the jar
you don't have to guess
uon even gotta decompile it
legit just unzip your jar
and you can see what's in there
I'm guessing that the issue lies in an mistake while migrating from groovy to kts
especially if it was your first time
not a shadow issue
#ad - Shop Gfuel sale: https://creator.gfuel.com/pewdiepie
š§#Subscribeš§
š° Get "The Kjellberg Mail" (family newsletter w Mertz): https://the-kjellberg-mail.beehiiv.com/p/july
Stock Up On ā”ļøš„¤Gfuel (affiliate): https://affiliateshop.gfuel.com/pewdiepie
#Code #Pewdiepie
Get exclusive NordVPN deal here āµ https://NordVPN.com/pew...
so based
yeah I did, checked and saw sqlite missing
why is that
I finally got my own repo set up š
it took me like 3 hours lmao
trying to get nginx to work
What are you using for it?
reposilite
this was my first time
but isnt this url great https://repo.brandonli.me/#/
oh nah
i wanted my own repo because it'd look nice
and also i cba publishing to central
I personally just use the repo host's packages thing, which thankfully allows anonymous access unlike GitHub
Yeah
Tho, there are some problems, like that it doesn't display the groupId on the page.
https://codeberg.org/Andre601/-/packages/maven/ch.andre601.asl-api-api/4.1.0
Why are you making an api for the api of american sign language?
Because:
Yeah. Just how Codeberg (or rather Forgejo) handles names for packages... <groupId>-<artifactId>
Huh..... Just made an update for the API and this time it was processed without any real issues.
The past times I always had a timeout with a "bad request" error.... Only thing I really changed was adding a <groupId>...</groupId>, to the individual pom.xml files of each module (which is redundant as they inherit it from parent)... So I guess forgejo doesn't like the pom not having a missing groupId, or the generated metadata file was messed up....

Wasn't there a website that had all mc items / blocks and you could embed them on a website? I need something for a project.
I think I found one: https://assets.mcasset.cloud/1.21.5/assets/minecraft/textures/item/acacia_boat.png, but they might be a bit too small to display them on a website
https://minecraftallimages.jemsire.com/ these might work if the ones youāve found donāt scale nicely
cool, thanks!
(Probably)
random question but, does anybody have some good resource for mc sounds?
making a plugin/gamemode and good sounds (pitch/vol/sound combinations) are really hard to get right 
Tbf what Iāve done on my project is play sounds I think may fit in-game, since you can mix with pitch and stuffs
That's what I do too lol
Like you'd be surprised how good pufferfish blow sounds are for picking up / dropping items š¤
Maybe can use this site to help mess around with 'em, since you can select multiple and test/play them at the same time https://minecraftsounds.com/
oooh that's a good shout
thanks y'all ^^
i'll go stalk 8 year old spigotmc forums too 
Does anyone know how / if it's possible to dynamically unregister a command on startup?
Basically looking to have a command that can be disabled via a config property and I'm having difficulty unregistering it - so far managed to get it to produce the usage message defined in the plugin.yml but no further... looking for a unknown command output and thus another plugin will be able to take priority should it have a command with the same name registered.
could you register them manually instead?
We have dynamic commands for DeluxeMenus. The code for it is here: https://github.com/HelpChat/DeluxeMenus/blob/main/src/main/java/com/extendedclip/deluxemenus/menu/command/RegistrableMenuCommand.java
I had ran into the problem with commands not unregistering as well. The problem is I don't think you can completely unregister them. There is always some fragments of it remaining until a server restart. If I remember exactly, it's actually the bukkit:help command which has no way of unregistering a command. But other than that, it is unregistered from all other places.
I was hoping to avoid dynamically registering them as I wasn't too sure what impact it would have on their function.
I did consider referencing DeluxeMenus but I wasn't too sure if it was appropriate for my use case. š
shouldn't change much. When using paper-plugin.yml, that's even the only way to register commands at all
Somehow that worked - mindlessly copied some of that.
I hope so. I spent more time than I would like to admit on getting it to work somewhat good
š
Something I noticed in the past with DM (And that afaik is still present) is that such commands may not execute, depending on how they are executed.
I remember that setting a command for a ItemsAdder Item didn't run it, if it was registered via DM, as I got the vanilla "incomplete or unknown command" response thing.
And afaik does IA execute the command using performCommand(String)
And the command was registered? You had tab completion for it and all that?
From what I recall, no. It appeared red when typed, but entering it still executed it, if I did so via chat, not via the item.
Well then the command wasn't actually registered. To do that you have to add register_command: true inside the menu and restart the server.
I think if the command isn't registered, it simply listens for the command process event or whatever it is called and executes the code then
Seems a bit weird
what exactly?
that you would need to separately configure it to register the command to begin with.
I guess? The option wasn't always there and even after it was added, it was quite buggy. We had a bug going on for years and it was only recently solved for example. /dm reload didn't properly unregister the aliases and didn't let go of the old menus so you would be able to open menus without changes being applied to them.
And not everyone wants tab completion for all commands. Sometimes they want the commands to be used by other plugins and such
Correct me if Iām wrong, but setting the order of a ByteBuffer using ByteBuffer#order never actually changes the contents, but only influences the read and write methods correct?
Iām supplying a byte[] from a native application that always provides the order in native endianness
Since I use ByteBuffer#wrap and ByteBuffer#array a lot, if I were to wrap my native endianness byte[], then set the byte order using ByteBuffer#order, and then call the array function back, itās not like any of the values are actually converted. Since in the wrap function they assume that your data is already in big endian format and it only actually uses the order in the read and write methods
yes
just make sure that when you read from or write to the buffer, the ByteOrder matches that of the underlying data
the data itself is untouched unless you explicitly modify it
Yes exactly
Actually that makes entirely sense, because endianness only affects the bytes in the data type and not an array. An array of bytes in small and big will have the same corresponding bytes in order
Cool people use VarHandles instead anyway
Itās 100% bug free (besides some bugs)
it bricked my firmware
Must be a Kotlin bug
#1367769665346207744 message "you won't be paid very well" at least they're honest!
So our "team lead" insists (since we have an "agreement" (which I don't even recall) to prefer to use Stream API instead of for loops) that I should change this for loop (for a dynamic query building):
for (var data : maskedData) {
var field = table.field(data.columnName(), String.class);
var value = data.maskedValue();
updateStep = updateStep.set(field, value);
}
into Stream API, which would look something like:
updateStep = maskingOperationResults.stream()
.reduce(updateStep,
(step, data) -> step.set(table.field(data.columnName(), String.class), data.maskedValue()),
(step1, step2) -> step1);
public void update(/* ... */) {
// ...
var updateStep = dslContext.update(table)
.set(table.field(DATE_MODIFIED_FIELD), Timestamp.valueOf(now))
.set(table.field(USER_CREATED_FIELD), adaUserCreated);
for (var data : maskingOperationResults) {
var field = table.field(data.columnName(), String.class);
var value = data.maskedValue();
updateStep = updateStep.set(field, value);
}
// ...
}
to which I told I don't see any advantages of using Stream API here and it just makes it less readable. thoughts?
i mean i would be in favour of the stream api in principle there since it's a textbook fold/reduce but reduce is kind of an annoying method i guess
i think you should prefer whatever is more readable
and as much as i love fp, in most complicated cases imperative programming is more readable
Yeah I sometimes use for loops over stream api because I have more control over the flow and the code is more readable that way (imo).
"must be done today" š
it's hilarious
would argue this isnt actually very complicated but sure
I mean, personally if it makes things easier and more readable - I'm all up for it, but in this case I would argue that the stream api is more confusing than just the plain old for loop
imo for reduce specifically, unless you can pointfree the perfect method it usually gets out of control quick
I would understand if its a bad implementation, difficult to read or poor performance, but I am sure none of these apply in this case
generally I would just "fix" it and go on with my day, but it's not the first time I get "change this but it will not have any effect whatsoever I just want it to be this way" code review comments and it's getting annoying lol
probably an indicator to look for a new job
Only because most people donāt know what reduce means
ts really is art. beautiful
perhaps .set is a bad name for this kind of method because it implies a mutable update
i'd love to interview one of these people and know their train of thought in this
and this lol
$80-100 bucks for a sub-24h deadline for a complicated plugin
i completed that commission. honestly, it wasnāt anything huge they just wanted some basic mechanics modified, I'd say $80 isnāt too little for that, at least in my opinion
eh fair enough, although the deadline was a little ridiculous, glad you got round to it though
awesome, i'm surprised they found smth with that quick of a deadline
yeah i would definitely do the for loop there, i love folds in theory but in this scenario it's just calling methods on a builder over and over again
if you had to use streams, honestly i would probably prefer a .map().forEach(), so it's clear that you're mapping to a pair of columnName -> data, then setting that in the query builder or whatever
now if you could pass in a hashmap already populated with that data to the query builder, then you could just map().toHashMap() or whatever and pass it in and that would be pretty nice
yeah its kind of a weird case
in a typical scenario I would go with a .map or something like that as well, but I just don't see the need for stream api here
anyways, my tech lead is annoying as fuck sometimes
always with this back and forth, we talk, we come to a conclusion that what I did is "good", but then he comes back and tells me to re do it lol
"SOLID", "OCP" blah blah blah
bro I don't care, it works, it does the job, its readable, the performance is fine, its not that difficult to maintain, just fuck off already
so yeah, see yall next monday
the managers just gotta keep you working for no reason
egh
hate people that follow those "principles" like they're bibles
even calling them principles makes me gag
guidelines :)
god forbid you make a class that does TWO THINGS
oh no no no young buck that aint gonna fly
Does anyone know like some website that provides compiled dummy shared libraries across Linux platforms for like different arch
I'm using a Java library that uses OpenCV which loads a library functionality that's not even used, but only the name is used for linking if that makes sense
it uses libgtk but its not even needed for my usecase cause i have nothing to do with ui
and im just trying to load a fake dummy lib so it thinks that it exists
Actually wait Go cross compile is perfect for this so I don't have to get into docker mess
Currently thinking about adding support to my plugin for merging multiple images into a single one to use as the favicon, but I'm not too sure how I should implement this into my FaviconHandler...
To not break pre-existing configuration (And to also not having to deal with checking for what type the option is) would I probs go with a semi-colon separated String to determine the invdidual parts.
Difficult part is - as mentioned - the FaviconHandler. Would apreciate ideas for it:
https://codeberg.org/Andre601/AdvancedServerList/src/branch/master/core/src/main/java/ch/andre601/advancedserverlist/core/profiles/handlers/FaviconHandler.java
To clarify: The F generic is the Favicon instance the server/proxy is using. and the createFavicon(image) method simply uses whatever method the server/proxy provides to create a Favicon from a BufferedImage.
Made this stuff now.... Not too sure if that is any good honestly
https://paste.helpch.at/jihenilaxu.java
Cloudflare is blocking GitHub actions from accessing my Reposilite instance, any ideas on how to fix this?
Currently using that, but it doesn't add the IP address to the WAF and then kills itself... I have recreated the API token twice and copied the correct Zone ID, I don't know what else to do since it doesn't say if the request was successful or not
Recreated it a third time but now custom building that and now it works, apparently the Edit Zone template isn't correct anymore
Yoo any volunteers to get tagged on a tweet? Appwrite doing a giveaway and I gotta tag 3 devs... thing is.. me not use twitter at all soo me have no one there š„ŗ
Eh.... idk
forget it
the winners would get a custom hoodie with a contribution graph
which mine would be 0
which seems unfair to others
Looking for opinions, I can't decide if this Java warning message is obvious/big enough for the below average (or average at this point) SpigotMC server owner... what do you guys think?
I'm going to pop it as an on-join message for server operators as well but I'm contemplating adding line breaks above and below or something similar to emphasis it more.
For context, I have a feature release pending (Folia Support to be specific) which requires Java 17 and the plugin is currently Java 8 based. I want to avoid the negative reviews and sentiment from idiots not be able to read basic error messages like 'Compiled with a newer Java version'.
*also ignore the typo in the warning message lol, just noticed as I posted this
I assume you are only printing the warning when using <17?
What warning message? 
Yup.
I mean I guess it can't be any clearer than that
For example, there are people who run servers with 100s of error/red messages in their console and just wouldn't read that somehow. Not sure how to better target those people... I guess you could call them edge-case people.
if they complain because they're bad at managing their servers, there isn't much you can do
If someone runs the server with hundreds of errors on startup then they deserve to not see the message
But they'll then leave a 1 star review because of their incompetence. 
Beginning to wonder if this is too much text for an on-join warning and if I should include like a Java X detected, please update so the reader gets the idea that the message will go away when they update the server Java version past 17.
you can send a warning in chat to people with elevated perms
- add a config option to disable that ig
since someone will always complain
For a second thought it was stopping support for spigot but sad
BRC doesn't really have the time to pick up Paper's new features sadly. Even then, if we were to leave Spigot, we'd also likely leave 1.8 to maybe 1.12?
The point is to force people to update as well, we're increasing the minimum java version from 8 to 17 in July.
The sad thing is, people will still complain.
You cannot avoid this
I know...
Bruh, Barry being mean
Even Barry is after me. š¦
I f.e. have this, but I'm sure people will ignore it
It's just sad how stupid people can be.
And lazy
That too.
Not to long ago did someone ask for support while using v3.3.0-b1
Which is the latest version I have on Spigot
...where I have this big text at the top of the page
Ouch
don't bother, those who read console/logs - will see it, those who don't - wont
at least you did your part
also personally I would log with WARN level, not INFO š¤
It's not actually done via Logger - did it via ConsoleSender so I could ensure colour shows in all kinds of consoles.
yeah personally it bothers me every time I see any red/yellow lines
gimme like 2 hours and I am rewriting that shit to paper
š
lol Paper 1.19+ is the way to go
that's still like 95% of servers and is a massive upgrade
so from this chart 1.8 is lower than 0.5%, whats the point of supporting it
you are just holding yourself back lol
yeah I stand by my assessment lol
that's even better than i thought it would be tbh
I would happily jump to 1.19+, it's just ShopGUI+ is such an old plugin that many still use it on say 1.8.
then they can still use all your older versions lol
Bare in mind, the graph I sent is from an addon which not all SGP people use and also some people turn bstats off.
it's not like you're deleting it, just not actively updating it
I don't think old server versions that you would drop support for would even need any "new" features, given there would be any
yeah exactly, if they want to use an 11 year old minecraft version, they can use a 1 year old addon version or whatever
as Star said, they can continue using old versions
you deprecate old stuff and tell the users to move on and update or use unsupported versions
The negative reviews though. 
who cares lol
Me sadly. 
imo the plugin is popular enough, people can also have their own opinions without looking at the reviews
Fair enough.
usually I just ignore version/update or outlier complaints since they don't bring any value
May I suggest leaving up till 1.20.x? š
Why you only releasing in codeberg? Does hangar link to it too?
1.16-1.19 still kinda popular
Kinda does not mean it is relevant lol
Majority is 1.18+ at least
1.18 should be the lowest anyone should go
(Totally not because of minimessage being included on paper)
Tbf my opinion is biased af
Afterall, I am the one losing countless hours redesigning Hangar lol
So ofc I will be biased towards paper
And newer versions
š„
confusion
If you would check the repo, you would see links to modrinth and hangar
Also, any of you good with python and pip?
I've reset my PC and now installed python again (Via their Python install manager) and now want my pip install s to be stored on the D: drive instead of C:
I changed the --target via PIP_TARGET environment variable, but now installed packages that add a command - in my case MkDocs - don't have the command installed and working... Not sure what else I can/should do.
Yeah, it can be
Well, on a bus and on my phone, not really ideal to check anything, no need to answer passive aggressively lol
All I really want rn is have packages be installed on D: instead of C: as the later is mainly for the OS itself
iirc the issue is that the entrypoint is wrong
you could try using virtual environment
well, you can do this:
Install on another drive:
pip install --prefix=D:\python-packages mkdocs
Modify your PATH environment variable, add:
D:\python-packages\Scripts
Create a new environment variable PYTHONPATH, set the value to:
D:\python-packages\Lib\site-packages
uh....
I feel like we have some differences here?
Like where does the Scripts folder come from?
when you install via pip install --prefix=D:\python-packages mkdocs it creates it
That's.... annoying
I probs just bite the sour apple and have packages on the default drive until I find a fix...
well, if that makes any difference I have Pip v24.3.1 and Python 3.10.6
why is that?
Well, mine is python 3.14
did pip install --prefix=D:\python-packages mkdocs not create a D:\python-packages\Scripts dir for you?
I didn't bother with this as I don't see this as the right aproach here
Because having to do this for mkdocs would mean I have to do it for every other python project that adds commands
Tho, even resetting package stuff to the default does have the issue
So I start to believe this is a general python issue
you would just install other packages via:
pip install --prefix=D:\python-packages <package-name>
the rest of the steps are one time set and forget
the difference here is I use --prefix instead of --target. Target is used to install packages into a flat, standalone dir and does not use the standard python directory layout
I think the primary issue was either the install manager or the 2.14 version, which apparently is beta
(Not sure why the default is to install a beta, but whatever)
oh you said you are using 3.14, not 2.14
deinstalling all python stuff and then re-installing 3.13 via an installer seems to properly add pip as a standalone command
I mentioned that
Yeah, the mkdocs command works
So it was related to the Python installation or the way it was installed.
Tbh if you can afford to, using uv for Python package management has been a dream
Itās basically Cargo from Rust but for Python
Fixes all my issues with their horrible package management and stuff
oh it's a conda thing?
uv is basically a replacement for normal pip/pipenv/virtualenv stuff, not conda related or anything
yeah i mean from what i saw it doesn't really seem that comparable lol
and uv is like at least 10x more popular, so i would recommend uv
does anyone remember the name of the development collaboration platform website that's kinda like jetbrains space
it had a like black and silver theme
i think either star or matt was talking about it ages ago but i cant find it anywhere
it's quite a new one, not a well established thing like Trello or Jira
nvm i found it lmao it's called Linear
was in my bookmarks this whole time my eyes just glossed over it
classic
thanks iOS for the autocorrect
Was about to say xd, I use it
Really need to find a good way of merging multiple BufferedImages in an async fashion (i.e. in a CompletableFuture.supplyAsync call).
The one I tried doesn't work, probably due to a logic failure on my end.
what do you mean by merge
like in a pipeline?
Combine them into a single image. Like treat each as a new layer to add
how would the combining work
My idea is, that the user can define multiple sources separated by a semicolon (To still support the current String option)
I would go through each part, obtain the BufferedImage for each and then combine them one by one.
The annoying part is, that I want to keep this async, so that it doesn't delay the Event this is called in too much... I already do that with the current setup for a single image where local ones are pre-made at enable and URL or Name/UUID ones are created asynchronously.
combine them how
^
putting them side by side?
I did say I treat them as layers right?
Like I don't think there is much guessing here
But yes, overlaying them
My current nightmare code: https://paste.helpch.at/ufebokabuf.java
I see like templates
The one I tried doesn't work
in what way
The image it has to fetch doesn't get added
Only the local one, which already exists
what does the debug output show
Like I tested with ${player uuid};vanillaplus.png which effectively would be converted to https://mc-heads.net/avatar/286f8d0c-b571-4720-b7ab-f2929cb38120/64;vanillaplus.png
And the output is just the vanillaplus.png image.
does it work with 2 local images?
https://paste.helpch.at/upuragezop.md
I separated the two ping event calls.
First one is with no cached image and second is with cached.
Layer 1 was null! Skipping...
alright well this is why
the web requests takes a while so it isn't completed in time
future.getNow(null); this is probably not what you should be doing
Yeah its not enough time
in fact composeFavicon should probably take a List<BufferedImage> instead
use CompleteableFuture.allOf and then you know when all the results are completed
Can't think of another aproach that wouldn't delay the event unessecarely
well yeah...
if something takes 5 seconds it takes 5 seconds, asynchronous or synchronous
doing it async doesnt make it faster it just avoids lagging the server
Handling allOf is annoying tho, as it returns a CompletableFuture<Void>, so I need to handle the individual CF in a different way
yeah its a stupid method but you can then safely use .join() on all of them
instead of getNow
I did try something like that
and?
Well, it didn't seem to actually receive the stuff. Tho, I didn't use join() then, so that was probably the issue
But looking at this, I think I can throw a lot of the CF stuff away.
The only method used outside the class to make a Favicon is the favicon(String) method. So I can probably just make a CF there.
It does seem like youāre misunderstanding/misusing them a bit, yeah
one day we'll have structured concurrency š and then we can say good bye to allOf() (not really but kinda :D)
Seems to work now
i mean virtual threads are a thing now
but structured concurrency is still in preview
virtual threads are nice but thats different
Any info on that?
They reworked some stuff, I didnāt followed it too closely so not sure what changed and why
But I guess theyāre getting there slowly
Looked at it a bit and eh....
idk honestly
Yea- theyāre cool and in combination with gen zgc we can get insane performance, tho iirc virtual threads still have some issues w thread pinning like blocking inside a class initializer due to a native frame on the stack or resolving symbolic references (think there were some other small issues that cause unnecessary pinning)
yeah uh VTs don't really solve the need for CFs, lol, they're completely orthogonal
iirc there are some allocation issues for virtual threads?
something along those lines
it was fixed in java 24 iirc?
but
virtual threads are amazing yes

not allocation issues I think- but as said pinning issues- one major issue was pinning due to synchronized, but thatās been fixed there are still some small pinning issues tho
Would any of you have experience with OpenAPI and fetching its JSON in Java?
I have a JSON file for an API and want to extract its paths values to return a different, more simplified JSON like this:
{
"paths": [
{
"url": "https://api.example.com/v1/some/path",
"method": "GET"
},
{
"url": "https://api.example.com/v1/some/other/path",
"method": "POST",
"request_body_schema": "https://docs.example.com/api/#post-schema"
},
{
"url": "https://api.example.com/v1/yet/another/{path}",
"method": "GET",
"parameters": [
{
"name": "path",
"location": "path",
"required": true,
"type": "string",
"supported_values": [
"value1",
"value2"
]
}
]
}
]
}
...assuming the paths JSON of the openapi file is like this:
"/some/path": {
"get": {
"...": "Unrelated JSON"
}
},
"/some/other/path": {
"post": {
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/post-schema"
}
}
}
},
"...": "Other unrelated JSON"
}
},
"/yet/another/{path}": {
"get": {
"parameters": {
{
"name": "path",
"in": "path",
"required": true,
"schema": {
"type": "string",
"enum": [
"value1",
"value2"
]
}
}
},
"...": "Other unrelated JSON"
}
}
I could probs use the parser they offer for Java to make POJO's, but at a first look does it seem a bit complicated in structure.
Yeah I mean parsing to a pojo then mapping to another pojo and serializing is as good as youāre gonna get probably
nothing that couldn't be done with a simple jq tramsformation
lol when are they rewriting jq in Java, it already has j in the name!
jq4j
Why not use openai's api java wrapper?
Like, as you said, it could make your life easier
Why are you choosing to go the "manual" route?
I mean, I guess complicated structure is fair
Although you are probably more prone to error by using json
Holy crap, people didnāt like that
#showcase message
Why is it produced like a YouTube short
I can't even see what's happening through the frantic zooms
just gen z stuff
itās the most downvoted showcase Iāve seen so far lol
Tbh the edit is terrible
feels like what i would expect some ai powered video editing program to come up with
i don't understand the edit
he just points to the italian brainrot at the end but i dont understand it
me neither
showcases something that has been done tons of times already
like it's something wow
with a very bad edit
and then shows some random text at the end
idk
lol
Does anyone know if it's against Spigot's rules to promote off-site payment methods on a plugin page? (Eg. Bank Transfer or Crypto)
This would be an option for individuals who don't have access to PayPal due to regional restrictions.
Ew crypto
ew banks
From what I know and saw is it allowed, if you get permission first
I'm not doing crypto, was just an example since I've seen it's semi-common.
Hi! Anyone here a CSS nerd?
I have managed to add a backdrop-filter of blur to a <dialog> element, but I cannot seem to figure out how to fade it in. One StackOverflow thread mentioned using opacity() but the below CSS just snaps in the blur (And it seems that Safari doesn't support the :open tag so that isn't great). Any help would be appreciated :)
dialog::backdrop {
transition: backdrop-filter 2s;
backdrop-filter: blur(4px) opacity(0);
}
dialog:open::backdrop {
backdrop-filter: blur(4px) opacity(1);
}
Here's a minimum reproduction Codepen that I've set up, most of this is just copy paste from the mdn docs, my real code is quite different - although the CSS is identical.
https://codepen.io/Zax71/pen/MYwvLwd
Welp.... Tried to use the Swagger parser now and.... It complains about required not being an array?
For a schema component that doesn't have such a thing? Like.... it's weird
i have found those errors to be super unhelpful
probably just some json somewhere being wrong in some way that has very little to do with that error message
The JSON is valid, as I'm using it to generate content for an API page and it would otherwise raise errors there if it wouldn't parse to valid JSON.
when i say the json being wrong i mean it probably doesnt adhere to json schema, not that its not valid json
I found the issue
Apparently does required inside schema objects resemble a list/array of properties that are required to be included in the schema
So if I f.e. have
{
"text": "hello world",
"something": true
}
and I want to define that text is required, then I would have "required": ["text"] set in the JSON schema
have you tried making a keyframes rule?
@keyframes fadeInOpacity {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
then you could make a css class called whatever (e.g. fade-in)
.fade-in {
opacity: 1;
animation-name: fadeInOpacity;
animation-iteration-count: 1;
animation-timing-function: ease-in;
animation-duration: 1s;
}```
and apply that class to the dialog element in HTML :P
Ooh, I have found a solution but it uses some new CSS features that arenāt in Firefox yet so Iāll give that a go as well
Oh right sorry, didnāt realise that.
Dw, it was in a different server, you had no way to know xD
implementing a simple-shape rigidbody physics solver over the next week or so and quickly got this hunkered down; demonstration of angular velocity and why your phone always flips sideways when when you try to spin it
(basically just copied code from here: https://www.youtube.com/watch?v=4r_EvmPKOvY&ab_channel=blackedout01 but gonna see about re implementing this with quaternions because there are some things that seem to be easier with them than rotation matrices)
I explain all the derivations necessary to understand the basics of 3D rigid body physics intuitively and show how I implemented them from scratch in C/C++.
Links to the listed references
Physically Based Modeling
https://graphics.pixar.com/pbm2001/
or for a combined pdf
https://graphics.stanford.edu/courses/cs448b-00-winter/papers/phys_model....
quaternion rotation. no more orthonormalization issues
- faster
awesome paper for learning more about quaternions in general too
explains a lot of the basic stuff well
Does one of you guys know an easy way to create a site that accepts a /api/webhooks/<id>/<token>/<bitmap> URL, takes the <bitmap> to determine the set of events to forward and based on the received info send a Discord Webhook with the <id> and <token>?
Kinda want to make a sort of webhook filter for Gitea/Forgejo, as their Discord webhook sends webhooks for all events, even ones you may not want (i.e. I enable releases and they send webhooks for release creation, edit and deletion when I only want the first)...
Kinda want to make it a thing others could use if they want to, hence the bitmask, as I think assigning a unique number to each event type could be the best aproach...
Main issue I see right now is get a setup to host on vercel AND to also determine what kind of event a received POST request is, as f.e. release contains the same event type header, but has a action in its JSON body afaik.
Got something basic that actually works....
Tho, now I need to find out all the individual event types a webhook can trigger AND also sent the apropriate JSON.... fun.
day #2 of working on this... rk4 integration method for super a stable system, raycast and physically accurate linear and angular momentum from impulse application
after this it's collision solving + generalizing to ellipsoids + optimization... and then it goes into Comet!
collision detection+ response
Is there any website to see packet definitions and how they have changed over time, I can't figure out for which versions I need to make a seperate definition...
linkie for packets when 
Minecraft protocol wiki history LMFAO
something used for mappings
absolute godsend of a website
lets you move your code between different mappings and/or versions
Is there a way to see the constructor of classes on that website?
You used to be able to view the mapped class code but it just returns 500 errors now
yeah
tbf this channel kinda indeed died a tiny bit after the GH linked roles thing
but at least convos here are actually relevant
bob and vagene
ngl I don't mind
#development fills the same role of shitposting
xD
Live album "XX Years Of Steel" out this Friday!
Order here: https://lnk.to/NoS-XX-YearsOfSteel
Mixed by Christian Ice at Temple of Noise Studios
Video by LyricVids.com
Official HelloWorld Repository: https://github.com/NanowarOfSteel/HelloWorld
NANOWAR OF STEEL LIVE 2025
European Tour 2025
Co-Headline Tour w/ Dynazty
21.02.25 AT - Vienna / ...
standalone Kotlin lsp SOON
this a gem for me and my fellow neovim users š
You gotta love stuff breaking without any known reason :/
LSP crashout
intellij has this thing where it can't function at all if it's in a project which is lacking a build system
even the semantic highlighting is worse than what treesitter gets you in neovim
so if you decompiled something or you're looking at open source with private build configurations, it becomes way less useful
Fixed it. Thanks
tho, this happens every single time I reload maven/resolve dependencies
So something else must be broken
I get the feeling that the MC dev plugin may be a possible cause here, as I just encountered an IDE error and everything hints at the dev plugin being the cause.
tbf you can highlight with different colours a package vs an interface vs an abstract class vs a non-abstract class vs a static method vs an instance method vs ...... on and on
so it kinda needs to have all classes indexed
i'm not saying that it's for the colour highlighting alone
but if you want anything more than a bitch basic "hmm yes this looks like a method and this looks like a keyword" syntax highlighting, you need that info
i have it set up so every thing is highlighted differently, and it's very nice and easy to read!
you're right, i have a proper semantic colorscheme setup for nvim and that makes the bigger difference
cursor trails in intellij btw!
very annoying
personally, the less visual clutter & animations the better
Way too distracting.
helps keep track of cursor position
Not for me tbh
feature a lot of terminals have that I enjoy and it was fun to implement
do you use ideavim
it not then yeah I can see why it wouldn't make much sense for you
https://i.imgur.com/NxD20cQ.png
btw what is this?
-# not a mac user
Window Manager with way too many desktops lol
mac has desktops you can use
basically like
diff workspaces
there's 16 max
no actually
default thijg
and this isn't even being displayed by a wm
I use ~10 currently
different one for each application
mostly
or just the most that would make sense to have on one screen
Youāre telling me thatās not like yabai or something?
I use yabai but you don't need yabai to have that
diff desktops are vanilla thing
sketchybar for that display
ik aerospace has their own thing but yabai works so I have no reason to switch
nah they don't have that
Damn
I got cmus integration for the music display widget :>
Broās living the like arch Linux lifestyle on macOS lmao
Why does the line number change .. like that?
relative line numbers
ideavim thing
like if I need to go to a line, I can glance at the relative like number and then type like 29j or 8k (j and k move cursor down and up, respectively)
tho you just have it by intuition after a while
Ok ig
mfs would rather remember 30 different shortcuts than use 3 mouse clicks
omg how big is your .ideavimrc
i recently added a bunch of shit to mine lol, still trying to get myself to adopt stuff slowly
i recently "discovered" % hops between bracket pairs, shit is so nice in like huge SQL functions or whatever to find what's matching what
cause i would just like click on it and scroll down to find the matching highlighted bracket, but that shit is hard to find lol
to be fair, it's a lot less about remembering once you get into the habit
and you don't take your fingers off of home row most of the time so it's super quick
I have no opinions on vim because well use what you like, but I always find funny to see people using it like for example ThePrimeagen and pressing a bunch of keys just to have the cursor move a bit lol
this is it
set mini-ai
set functiontextobj
set multicursor
set scrolloff=10
set ignorecase
set smartcase
set incsearch
map Q gq
Plug 'machakann/vim-highlightedyank'
map <Space>r <Action>(ReformatCode)
map <Space>e <Action>(GotoNextError)
map <Space>E <Action>(GotoPreviousError)
map <Space>1 <Action>(GoToTab1)
map <Space>2 <Action>(GoToTab2)
map <Space>3 <Action>(GoToTab3)
map <Space>4 <Action>(GoToTab4)
map <Space>5 <Action>(GoToTab5)
map <Space>6 <Action>(GoToTab6)
map <Space>7 <Action>(GoToTab7)
map <Space>8 <Action>(GoToTab8)
map <Space>9 <Action>(GoToTab9)
map <Space>s <Action>(SplitHorizontally)
map <Space>v <Action>(SplitVertically)
set number relativenumber
set clipboard=unnamedplus
it's extremely easy to remember
literally muscle memory
yea idk i just think it's cool
and it's really nice to just move the cursor around really quick instead of like holding the arrow keys for 5 seconds or whatever
especially when it's smart and you can do better than just simple cursor moving, like the matching brackets thing i mentioned, or like editing basically any textobject (ci(, ciw, etc.)
i would say most useful things for me:
- space + number for going to tabs, but i eventually will replace this with my own intellij plugin so i can navigate around things just like how i do in neovim
- relative line numbers is the best way 90% to quickly go to some arbitrary line that you can see
- space e for gotonexterror is awesome
- macros are awesome and have been a huge timesave for me; learn to use them intuitively, that's how they get fast
- for navigating inside a line, searching with / + n is pretty great
- i often find myself replacing parts of words, so learn f, F, t, T ; it's really common to do some motion like ct<something>
it's legit just enjoyable
btw you can download mini-ai intellij plugin to get text objects around functions and classes
but it doesn't work 100% of the time at least in kotlin
i'll fork it and fix it eventually?
cause it's really cool in theory
i set up custom text objects in neovim for yaml stuff
use cib instead of ci(
easier to type
well usually i'm specifying which bracket i want to edit in a lot of nested ones
ah yeah makes sense
like () in a function surrounded with {}
B for { btw
oh wait actually? i have a bunch of the textobject ones but they kinda suck iirc
and also big thing @cinder flare try to get into habit of using your right shift more if you don't already
yeah š i'ma fix them when i have the time
i've noticed that there's a lot of situations where it's really unergonomic to use left shift
like hurting my hands typa thing
oh my right pinky is just not trained on that lol, that's gonna take a while to get used to
oh yo why do i have double c-w binds lol
yeah those are really nice, i usually use gd and gu a lot
also a really nice one for me has been <leader>ga to show Git Blame gutter annotations
yes i use gd and have been neglecting to do other ones
cause idk if there's normally a keybind but i had been right clicking, hovering over git, clicking on annotate
and that shit is slow as hell
cause i always wanna know which one of my coworkers wrote a fucked up function or something lol, so that's been a huge timesaver for me
and yeah i recently learned more about the jump list, so c-o and c-i, which has been sweet with like gd and stuff
i'm gonna try and clean up my intellij from some stuff
cause
i don't use vast majority of what's on screen
minecraft plugin dev is just not that intense
but yk what really pisses me off, gj and gk don't work in the non-modal commit message editor
and it's like a known issue that they only work in the main editor window and not in any other text box
i don't use intellij for git stuff atp, i use lazygit, but i don't even think it has vim impl for commit msgs
but i always write long git commit lines cause the formatting on those is weird, then i try to navigate up/down cause it wrapped it, but it doesn't work š
tho it def supports external editor so really easy to get nvim setup there if i wanted to
oh i have really come to love IJ git stuff working at my current job, it's so nice to see inline commit histories and diffs and shit, to review my changes before committing, stashing changes when i have to swap branches to work on a random ticket or something, it's been really nice
biggest thing missing from intellij for me is nvim-style undotrees
i hate local history
oh yeah i never really got into them, i just press u a lot lol
all that exists outside intellij ofc but yeh it's not the same
and i've slowly been getting myself to use buffers more, it's just so unergonomic to me to press "a or whatever all the time
well from what i understand the stash stuff is not like base git and that shit saves my life i stg
er
not stash, shelf
which saves like context and a bunch of crap, and you can have multiple changelists and it separates them nicely in-editor, idk i just have really grown to love it
i rewrote the rendering for an nvim plugin, and this is ofc an exaggeration but i find it genuinely useful in work when there's multiple branches for a file like this from complex undos, it also marks when you saved it so you can easily go back to saved states
stash is in base git
yea yea i meant shelf
that's just non-commit work saving right
yeah it's just like doing partial saving for when you want to swap branches or whatevs
yea you can select certain files
but yes it's super useful
stash is every uncommitted change
shelf is you can pick and choose into multiple separate stashes really easily and stuff
i've been working on physics stuff and that can't exactly be broken up into atomic commits
yeah lazygit has allat
ah well maybe i should get into it lol
stash has been super useful
but tbh i just love IJ stuff
nah
if intelij works don't bother
recently discovered how to use the IJ profiler and SQL Query Plan analysis, holy shit it's been a gamechanger
i have 0 experience with any of that shit
i'm working on a huge commit right now to just optimize a million things that i never would've known without nice flamegraphs and stuff
yeah my only profiling experience before this was like Spark Minecraft reports lmao
does this work with mc dev š
that seems way more useful than spark
yeah theoretically it should, i mean it's probably just using the same Async Profiler that Spark uses
but it does show you like gutter annotations for long methods and stuff
ah yeah that's definitely important
probably Ultimate onyl?
but yeah it shows you the flamegraph super nice, you can click on stuff to navigate, sort it by CPU Time, Real Time, or Memory Used
super impressive shit i gotta say
(for ultimate + ai)
yeah does seem to be!
but awesome shit from them
it's nice when enterprise level software is actually enterprise level
oh nvm $270
yeah no it's like, superb
i always loved IJ, but since i've started my job i've really come to appreciate all it does and why it is truly the best JVM IDE experience you can get
oh shit they have free student shit
and yeah that shit is pretty cheap tbh, i'm probably gonna get just the yearly Jetbrains All Products plan once my student discount runs out
applied for that
yea it's amazing
maybe they'll accept it?
i've been using it for like 6 years lol
and then you get like a 30% discount when you graduate or whatever
it's like amazing
I'm a highschool student so I hope they accept that
I should have been on this earlier wtf š
dawg I been using inferior software since 7th grade in this case
this is crazy
haha lol


