#dev-general
1 messages · Page 59 of 1
also that xD
Well, their HQ is in luxembourg so yeah
it was a cool experience going through their HQ
full paid meals and what not
their facilities there are really cool
they had a full blown gaming room with VR, etc.
no clue tbh
paid meals for workers? we only get free coffee and fruits in our office 😩
Noxcrew and Element Animation
not from scratch, but we use PrimeVue at my work and I've used shadcn-vue a bit
what are ya looking to ask?
just overall guidance, we are thinking on potentially creating a component library for Hangar and was thinking on what the standards are for those
I was planning on using RekaUI as a foundation
ooh yeah I would definitely recommend Reka!
if you're using Tailwind (which I hope!), tw-merge or cn or whatever is like a necessity, and it makes it super easy to style components
jokes on you, we were using tailwind
but mini wants to ditch tailwind
he wants to use scss
other than that, I'd say just look up some inspiration for each component as you go, like maybe PrimeVue and shadcn, maybe Vuetify, etc.
oh that's... interesting
SCSS is like, going out of style hard lol
normal CSS now has a bunch of stuff sass did well, so there's not really much point
but i mean, at least if you're using scoped styles I guess, it's not too bad with Vue
I mean, I know the design I will follow as I am working on Hangar's redesign so I'd just use the components I created there. It's mostly about project structure that I wonder about as it is not a normal vue project
yeah I moreso meant for the actual component design from a code perspective, like good props and slot usage, etc., not really the styling per se
yeah, we will still decide on whether to use vanilla or not but yeah
according to him he dislikes how tailwind pollutes html
which is a fair point I guess but I am so used to using tailwind I am gonna probably cry for the first few hours using vanilla css
but hey, he's the boss xD
i mean it's just something to get used to, in my head it's so so so so much easier to see what is affecting a component and apply small utility changes locally than try to find out which fucked up inheritance CSS selector is messing with stuff
and like, trying to make changes in a safe way without adversely affecting other things, etc.
a lot of that is mitigated with scoped styles, so please at least use those lol, but i just still kinda dislike it, it's much more wordy
but it's not like I do have much of a choice if the big man doesn't want to use it xD
than just like slapping class="flex flex-row items-center justify-center gap-3" etc.
I shall see if I somehow convince mini not to ditch tailwind xD
maybe if I just create classes but use @apply instead of vanilla css?
eh idk
that's like mega cursed lol
at that point there's not much to it, the whole point is the colocation
yeah indeed
but just spoke with mini
scss it is 
the boss has spoken
used nuxt ui, vuetify and shadcn-vue, prefer nuxt-ui the most.
yeah i definitely would choose Nuxt UI if i were making a personal project or something new
wish i had the drive to actually make something new lol, instead i just be sad about the state of my work's tech stack haha
yeah I feel you
we use angular at work and c# apis , prefer other languages and frameworks..
and so much tech debt
I was mostly speaking about creating a component library, not using one 🙂
but yeah, I have used Nuxt UI and schadcn-vue before
Nuxt UI is neat indeed, based on RekaUI too!
Just now learned that Material for MkDocs has entered maintenance mode in favour of a new SSG called Zensical and....
Well.... "tell me you're greedy without telling me you're greedy":
(To be clear, the SSG is open source and free to use. This is just what you pay for having the oportunity to propose features/ideas more directly to their team)
ngl, I hated squidfunk before for stuff he did, but this kinda makes my blood boil.
MinIO did something similar recently as well
they made it source only and dont provide builds for it. you either have to build it yourself or pay
Yeah, idk
I seriously have a bad feeling about that Zensical thing
On one hand is it nice that he made his own project to go away from the MkDocs dependency, which has become pretty much unmaintained, but at the same time is this from the same guy who had donation goals of 18k, 20k, 22k and 24k dollars a month, thinking he can reach them
-# And then also blocking me on Mastodon after asking why there was a sudden loss of sponsors and I replied it probs is people stopping to sponsor since the features they needed are now in the free version.
people saying java ? extends T and ? super T is confusing or bad is so strange to me
I think it shows that it's just not explained very well
yeah i think it's unintuitive and poorly explained
yeah
tbh I feel like it's more intuitive than kotlin's in and out though
at least if you were see it for the first time
and besides those, I'm not sure what other alternatives there are
i prefer use site variance but i understand why declaration site variance is preferred by many
Yeah Kotlin's isn't much better, but it does make more sense if you think about it like out for types you "produce" and in are types you "consume"
For example let's say you have a MutableList<out Number> if you try to list.add(0) (aka put "in" the list) you get a type error, but you can do list.get(0) (aka "out" of the list) to get a Number
And for in assuming you have MutableList<in Number> you can add list.add(0) just fine (put "in" the list) but list.get(0) returns Any because it can't guarantee the type when getting "out" of the list
its also like, type erasure makes things a bit goofy
i looked at part of the explanation for type erasure, from what i understand it's due to the nature of dynamic lookup and compatibility
yea
sec
okay nvm i can't find the vid i was looking for
but it makese sense in the context of java
i think C# tried to fix java's mistake of type erasure but they did what now? build the variance into their VM so apparently co/contravariance is a bit fkd in C# (I havent really touched much C# to tell how plagued this design caused C# to be)
yeah, and for example:
A Consumer should be <? super T> because: say T is our base class and A is a superclass of T, while B is a subclass of T. a Consumer<A> can obviously be cast to a Consumer<T> since Consumer<A> can handle a superset of T, while a Consumer<B> can only handle a subset of T (you can cast Consumer<A> -> ConsumerT>)
mean while for producers, a Producer<B> can be cast to a Producer<T> since B is subclass of T, so it can be cast to T. meanwhile a Producer<A> produces things that might not be castable to T, so it requires a <? extends T> (you can cast Producer<B> -> Producer<T>)
a man who can eat all food can fill the role of a man who can only eat vegetables (? super T)
a chef who can produce only onion rings can fill the role of a chef who needs to produce any food in general (? extends T)
yea but also its convenient/a-must to use the right variance once u start fiddling with complicated higher ordered types
saying type erasure was a mistake is an odd take, given that everything else would most likely have killed the language or at least cause far more problems
Ignorant question, but what about not having type erasure would have killed the language or caused more problems?
every single jar file would have to be recompiled if you wanted it to keep working after generics were introduced
is the explanation I saw in a video by one of the Oracle guys
type erasure is the way that dynamic linking works with stuff created before generics
yeah it would have been a python 2 vs 3 like breakage
and some of the problems that people pinpoint to type erasure are probably more complex than that too
I see, makes sense
https://homepages.inf.ed.ac.uk/wadler/gj/ also has some interesting information about how generics became a thing
I mean ofc at that time, it was probably the most logical thing to do, a presumably good compromise per se. Type erasure can work well just look at Haskell. If you compare Java to C#, C# were willing to break compatibility just to add reified generics where they support generic value types. Maybe type erasure itself wasn’t the mistake, but perhaps not supporting user-defined value types in the first place which could’ve impacted the later decision on type erasure when Java added generics? Though who knows how Java would’ve looked today and if it would have been as successful of a language etc. Java’s is still working towards adding generic value types and user-defined value types today, and type erasure doesn’t make it any easier for the first part, given that they are trying to come up with a solution that isn’t overly complicated. It’s of course hard to predict how software and hardware will change and evolve over time.
Ig cuz of langs like Scala as well
it is quite nice that the JVM is an excellent platform, so that we can have stuff like Kotlin's reified generics that are still interoperable with everything else in Java land
Yea, I suppose in that way type erasure can work in the jvms advantage
tbf it works better in Haskell because you very rarely even need to do any runtime type introspection, whereas it’s much more common in the jvm ecosystem with reflection and such
I don’t think type erasure in Java is that big of a deal though
It’s a headache when you’re a noob and then you realise how it works and what workarounds you have and it’s fine
I mean sure, yeah. Do I think type information during runtime (reified generics) would be really useful in certain cases? Probably, though I’m not against using TypeTokens for example, and it’s not a deal breaker either. I do wishfully think Java could’ve away with opting for another solution instead of type erasure, but that would’ve of course caused other issues and put the language on another path. Just more so looks like they could’ve done it like C# for example (break compat) and it would’ve been fine. But yeah Haskell has like (largely) a complete type erasure and it’s kinda an unfair comparison given that the language is completely different to begin with, but it’s a good example that shows type erasure can work really well.
Haskell is relevant because Philip Wadler worked on Haskell as well as on Generic Java :p
Didn’t say irrelevant but yea
Hmm yeah I thought I recognised the name
I think Haskell has some relevance because it’s able to achieve most of the tasks that we need type reification for in different ways, eg doing the introspection at compile time instead
I think it’s nice that more and more things in the Java ecosystem are also moving to the compile time (eg annotation processors) model
Because that gives you a lot more information in many cases and is also faster
Eg there’s Micronaut and Quarkus which do all of springs annotation magic at compile time instead
So I really don’t think fixing type erasure is a huge priority
Aside from for value types I guess
not sure what they’re doing about that
iirc that could be addressed today, it’s just that they were looking for a solution that’s not overly complicated to users
right
which makes sense
Not super related but I’m honestly quite surprised that given how much they care about LTS that the module system is so rigid wrt backwards compatibility
Honestly yea
hm wdym?
Like once you start using modules it becomes very difficult to use any Java 8 libraries I found
if they don’t have a module-info
I mean there are ways around that, but yeah it's a bit annoying
(but I guess build systems could fix that in theory)
There’s no official way I think right? They’re all workarounds
you can add an automatic module as requires just fine
or add to the module path to the java launcher too
as far as i know the only thing you can't do with automatic modules is using them in jlink, as it has to consume real modules
This seems like an interesting change
veri nice
Can't wait for resource packs that rotate every block by like 0.1 degrees
Lol
So true
all is good now I've turned it off
crisis averted
I lie, all is not good
new ij design sucks too
probably not new for you guys ik they changed it ages ago
Okay that one is a bit too far, the new design is great 😔
I mean it's functional
was it a necessary or beneficial change
no
maybe less buttons for newbies to get confused by
the islands beta thing looks insanely cool imo
uses up a bit more space but looks a lot nicer
why are you not in full screen
never really tried that tbh
i've always used macos like this 😭
Can't you disable the animations?
I have almost everything in full screen and swipe between my spaces
don’t use the dock at all
i recently discovered the power of desktops but only really use it to seperate uni from the other bullshit
using full screen sounds more efficient though
never have I ever used any other application in fullscreen except for games
I find this to be really inefficient, I use a window manager and key binds for my spaces
full screening stuff makes the windows interact weirdly with things
I have designated usecases for certain desktops so I never have to wonder or press a key multiple times even if I'm switching between lots of applications
actually in general I realize I don't ever use alt tab anymore once I organized my desktops
i dont even for games
normally windowed borderless
I technically look at it as fullscreen, since, well, you don't see the task title bars
but yeah, I rarely use non-borderless fullscreen
What a bold and controversial statement that totally nobody would agree on with you.... /s
movies showed us that AI would be our end, and yet we continue going forward for the short term gains it gives us.
Like, I am all in for AI, but not the way AI is being done atm.
https://streamable.com/vgf687
I have this one project that IntelliJ hates..... 😖
usually I can just cut the code and re-paste it in the same spot and it fixes itself, but it's still pretty annoying
am I the only one with this issue? 🥲
D:
which surprisingly tends to fix it
I also don't have this issue mainly because I don't like NPE so I don't use !!
what's !!? never seen that /s
I made myself a rule, if I ever see myself using !!, my code is shittier than usual
for context - in this project intellij just has a bunch of syntax errors (other than null stuff) that don't go away unless you delete and re-add the code
what happened was that I knew that it couldn't be null (the code would compile), but intellij was really persistent here even after re-adding the code so I decided to just add !! to get the error out of the way
but then because there actually was no null safety issue, intellij recognized that and gave the warning that the !! was unnecessary while keeping the error 🥲
so that's where the double error/warning came from lol
intellij being wonky
!! is just an assertion that an error should be thrown in a specific case. but in an enterprise level application then yeah it probably doesn't make much sense
The other week I was working on a new node proiect at work and we use visual studio. It was literally using copilot for creating new files and add some stupid template to it based on the name ig, and also for imports even if the context menu said "add missing import for <path>" so the editor knew what I wanted FFS.
ok guys
I need help from the braintrust
I'm adding components to papi, I was gonna have PlaceholderAPI.setComponentPlaceholders(OfflinePlayer, Component)
2 problems, we already shade and relocate adventure so the Component in that method is relocated and incompatible with the components you'd make in paper
other problem is that even if we somehow excluded PlaceholderAPI.class from relocation, the whole plugin would just fail on anything that isn't paper since that class wouldn't exist on spigot
do we change Component to Object and just check it reflectively to be the correct class, and have the actual replacement logic in another class that's only loaded when on paper to avoid reflective invokes on component methods
or we could just have the method in another class entirely, but like, that's kinda disgusting, PlaceholderAPI.class and PlaceholderAPIAdventure.class
or runtime bytecode instrumentation to add the method if the platform is paper 😎
I don't see a problem on this 
This might be a weird way to do it, but you could create some interface like
sealed interface MyComponent permits AdventureComponent
with an implementation
class AdventureComponent {
// stuff
public Component adventure() { /* ...*/ }
}
Then you can have PlaceholderAPI.setPlaceholders(OfflinePlayer, MyComponent)
I think either way though I think you're going to have to not shade adventure.
It is kind of an ugly way to do it
In Spigot?
paper
idk about spigot
I don't really care about that platform
lol
Well PlaceholderAPI does
I mean, was just stating
I am personally a huge fan of MiniPlaceholders
the advantage w this is that u could potentially support bungee chat components also, now dont get me wrong, idk if any1 uses it 2025 let alone likes bungee chat, but yea
The nuclear option would obviously be to only support paper servers... Tho obviously that would be an extreme solution.
The one given by Fisher probs works. I lack the info to verify this tbh.
Also, I noticed something odd: The bStats page of PAPI seems to have missing data. Server software and server location have no data to display, which is really strange...
I've noticed that bstats thing in numerous listings yeah
Seems to be happening everywhere
i love the nuclear option of only supporting paper
Does anyone have an iudea why this happens?
or rather to say, which dev to contact, from what i see 5 plugins could be an issue
@hushed prairie are you dev of PetNameFix?
seems to be CustomBiomeColors
you sure?
it's either that or ProtocolLib but most likely a mix of both, probably misusage of ProtocolLib or outdated one, lots of things can be
just contact CustomBiomeColors's author
he'll know what to do
I have no clue about its code, he does
well actually seems more protocollib
a bunch of plugins that rely on it are erroring
not fully sure, make sure its up to date
also this is not the place to ask this
try compiling PR https://github.com/Tanguygab/PetNameFix/pull/7
too busy with school atm though I should be able to look into it this weekend
actually nvm, it doesn't seem like the same error
.
Ayo? When did I get access back to this channel?
Wdym it has always been open 
Guess we aren't special anymore for this chat Q-Q
hey @latent relic I would be interested in working on this, I sent a friend request, let me know 🙂
Use to be. But then you had to link your GitHub
It changed from the GitHub?
Damn
man it was peaceful in here
🙈
Any minecraft dev here I want a small help , if someone interested pls dm me
It started already 
Doubt anyone will dm you for a problem you have, if you explain your problem in #development someone will help
lol that didnt take long
can we go back
Ban to the dead chat?
yes back to the dead chat please
preferred dead chat and the ocasional actual dev talks here
than the constant message notifications of this ^
real-dev-chat
can-hold-swe-job-at-a-reputable-company-for-longer-than-a-year
:^
yeah it was at least real conversations 😭
instead of this bullshit 😭
when #real-dev-general
#developer-chat 😔
wouldnt change much
people think developers includes configurators etc
that one was properly hidden though
I hate this so much fr
tho I mean it makes sense they are called "developers", but like it causes so much misunderstanding as people do not specify what they mean exactly, whether they want actual dev who codes or dev that sets up plugins
I still hate configurators or skripters beings called devs lol
they have their own titles
why use "dev"
because dev has already 0 meaning
"yeah i'm a developer"
"oh yeah? what district?"
I mean there's the title of programmer
And developer is just a broader term
software engineer 
programmer > software engineer
It was an old channel that required manual review to be added
There used to be one for server owners and I think builders as well
nice
"Software Architect"
@delicate marsh sir, DMs.
hi
@sly siren hey there! DMs
is including a pdf with your files peak documentation
Only if it‘s properly layouted
Based Typst user
typst is indeed epic
theres no way u'd do something like that request for $100 or similar 💀
respect if u can afford the time needed for that for only $100+
I had a guy that proposed to make me something similar when i was looking for a plugin like that for only $25, and he wanted me to pay after he finished.
and u got working plugin that stops freecam for $25?
I didnt accept the offer
Freecam and xray
Both in one for $25
😂
yeah thats crazy
But they wanted me to pay on some sketchy app
freecam cant be stopped fully at all, anti-xray already exists and is free
Maybe it was popular in their country idk
Yea
You can just make life harder for the hackers
probably yeah
I'm gonna be honest, I honestly have barely done any work on commission so I have no idea what the going prices are
I have done like 2 commission till now so yea-
yeah all good, its just that freecam anticheat is not really possible imo, so $100 doesnt make sense to me at all
same prices as any dev work, minimum of 20/h
and also, no, it is not just your opinion, it's not possible.
freecam is client side, server has no control over that
yeah right
guys know how to off defaulttags in plugin deluxetags on operator
Perfect example of why I preferred this channel being hidden
😩
Can we start like a petition 
maybe make it so you can only chat in this channel if you have GitHub added?
but can see it either way
and then have a pin/channel description or something that tells you to add GitHub to be able to chat
if not that, then go back to how it was but add a pin somewhere about its existence or something
@potent nest it loosk nice now
this is mostly for me, but i guess if anyone is ever reading it, i expect them to be able to understand it anyway so no need for more detail
typst is awesome 🙏
||yes i did fix the extra dot in the K matrix||
real
@pallid gale do it
or rename it to #dev-not-general
cuz #general is the first place people go to talk
😎
Call it #haskell-enjoyers
fake
and put it all the way to the bottom lol
and put it all the way to the bottom lol
we can do this
well when I say we I mean cube
he gets very angry when I touch the permissions
might make a faq command and put that in the pin
adding ur gh is ez, just the linking part ppl get stuck at
Correct
People would still use it since configuring and scripting are coding too
And ngl, love the idea of making this read only unless linked
Might actually solve the issue
Change has been made
mehhhhh
scripting yes, configuring no
java-chat
only valid language
To talk in this channel you must have your GitHub account linked with Discord directly and then shared with the server. To do this click the "HelpChat" server, select "Linked Roles" then follow the prompts.
Back to dead chat I guess 😔
how to add money requirement to deluxemenus @ocean quartz ?
wooooo
ayy dead chat we back
I'd rather keep it open to everyone than this xD
maybe not, cause now people will know this chat actually exists and that they can link their gh account, previously so many didn't know lol
the average Minecraft plugin dev is not prepared for this I fear
yes all the ops are hard coded rn, I am gonna test this same code performance and memory usage with Vector3f(); in theory EA should be able to make it identical? but haven't actually checked. also an improvement if EA doesn't like me is to use inline functions with a once invocation contract
yes!!!
I am making a TLS implementation in Haskell rn
It’s great
yea i also wanna do this..
😭
why da emoji
omg same
whats compiling
never buh!
ahh dead chat
it's better that way than people asking DM garbo and asking for custom lifesteal plugins or 20 hours a week for free
people ask for free plugins? uh
it has always been dead lol
no
wasnt that dead when you didnt need to link anything
precisely
Interesting definition of always ;p
go away
no u
up the telos stickers
when are we doing that in sunny
when custom textures
when pain
bedrocker moment
jithub
put it in #1434110119737692234 atp and say it's a passion thing 😭
oh yes I saw that in OU
he got clowned on
heavily
OU?
Owners United, shithole server
never heard of it 
Good
Friday 10AM EST on @Hytale for official reveal of the early access release date.
︀︀
︀︀Let me break it to you and reset expectations, the acquisition took just long enough to prevent us from doing a release before Holidays. That’s why it took us so long to announce the date, we tried to push as hard as we could but legally there is just too much to do and we would be cutting too close to Christmas.
︀︀
︀︀Go make your predictions. See you Friday for reveal!
good
dont be like this guy
wdym every open source maintainer loves something like that
Can't just cache the OfflinePlayer itself?
love how ur sharing that everywhere xD
thats like 3 lines of kotlin btw
not to be that guy
or make a dynamic proxy
for also about 5 lines
using by?
yep
ye I dont even know why's he needing that, ngl
bcs like he's using delegate in every overriden method, only the getName not
isnt this new?
no
I havent seen that b4
This feature is gradually rolling out!
Note: If you’re an admin looking to learn more about how to use this feature, check out the Connections & Linked Roles: Admins article.
Looking to learn m...
since 2024 March 15
spreading the love babez
I just havent ever seen the icon next to names
average kotlin sigma moment
god forbid new methods are added to OfflinePlayer
Yeah what is the point of the wrapper if all you're doing is delegating everything? (except getName i guess)
reducing IO calls
- Each call to {@link Bukkit#getOfflinePlayer(UUID)} results in a call to
- net.minecraft.world.level.storage.PlayerDataStorage#load()
no it doesn't lol
I mean that's the point of the cache not the wrapper itself, could just cache the OfflinePlayer directly
well, OfflinePlayer#getName() is the one that does IO, not Server#getOfflinePlayer(UUID)
i presume they wanted to operate with OfflinePlayers but caching the name
which is very silly because clearly they aren't using the OfflinePlayer as an OfflinePlayer anyway
ye I was thinking abt the same thing
like why would it call IO operation while the OfflinePlayer is the loaded op from IO
what
oh wait what, okay am too tired for that lol
Ive misread something
why getName calls an IO operation? Like
whats the reason behind that
Probably to get the updated name, it could be outdated from an offline player
all the methods in CraftOfflinePlayer load directly from storage
idk the whole thing stinks
CraftOfflinePlayer stinks and that code stinks, and the reason why that code exists stinks
xDDD
ye Ive actually never used OfflinePlayer instance
Ive been just reading 6yo article abt the #getName and people say that it just always returns null
OP class getting stranger and stranger 
when anyone of you are selling a plugin to a client, do yall send the source code or keep it for private use only unless they pay for the source code as well? (source was not included in the price in the first place and was not mentoined at all)
^ talking about a unique plugin, not something thats already opensource
for longer term projects I always share the GitHub with the client
if someone is paying you for something, why not give them everything they need to keep using it? unless you want them to always come back to you for any changes (because reverse engineering is annoying and most devs don't want to do it) then there's no harm in sharing the GitHub with them. I personally don't want to be attached to any project forever which is why I would never want to keep the source private from those using it
by "using" here I mean as in maintaining, adding features, etc
yeah i made a deal with a client in which i fix any bugs if there are any for free and they pay additionally if they want features added or something like that
so maintaining it except bugs is paid by the same client if they want to have it maintained
so me being stuck with it forever is kinda not an issue, thats why im questioning should i send the source
dont know
I usually always provide source
same
I was once commissioned to decompile a plugin the customer had commissioned previously and add some features/change some stuff
Legitimately turned a 20min job into 1h+ because of weird missing libraries etc etc, not providing source just makes everything more complicated with little benefit
If you think that they're going to hire a different dev to work on it, then you aren't providing an adequate customer experience
true dat
Github
i've been using this/sharing it with people for pc deals https://www.pcgamer.com/black-friday-pc-gaming-deals/
🐐
Technically speaking - and from my understanding - would you be required to provide the source at no extra cost, at the very least on request, if you use the spigot API as its original license demands that for any modification, extension and plugin iirc
strictfp is useless nowadays I think also
yes but I would think it would be an annotation or something
Annotations don’t affect behavior
annotations did not exist back then
oh yeah true I forgot that they're not supposed to do that
hm
oops didnt realize the channel
I've always just used merge without really giving it another thought
however, now I'm going to be creating a repo to be used by other collaborators, and all the code would be worked on via other branches, then merged/rebased into main through PRs (rather than committing/pushing directly to the main branch)
At first, I thought rebase would be the way to go, but I found that commits are rewritten (with new commit hashes), which not only invalidates commit signatures, but it also makes it a little messy to update other not-yet-merged branches (I assume it'd require a force pull or smth?)
but everywhere I see online, people still recommend rebasing because no merge commits, making the git log cleaner... so what should I do? 🥲
asking since I assume some people here have some experience working on codebases with other developers :))
rebasing can be incredibly annoying when you have conflicts in my experience
you have to fix the conflicts multiple times
I think squash and merge is a decent best of both worlds?
But idk honestly I’ve always just gone with a vibe check
yeah I was looking into squash, and while it'd fix the issues, then you lose the details of each commit
what-
oh what
like switched based on whichever seems more appropriate at the time haha
ohhhh
this is probably bad advice
yeah im not sure, when you pull with rebase and there are conflicts it often makes me fix the conflicts multiple times
which is probably fixed by pulling often but idk
idk but I think I'm just gonna opt into just merging
¯_(ツ)_/¯
what issue are you trying to solve/avoid?
the project hasn't really started so I'm more trying to pick the best overall approach rn
and so far, it seems like rebase doesn't really have many real advantages
even though everyone seems to love it
_ _
maybe to answer your question better - I also want to prioritize simplicity/ease of use (while having all code worked on outside of main branch)
no "do x y z in order to merge"
you are going to have merge conflicts at some point one way or another, but I dont think rebase is going to really help you, rather would make things more complicated
rebasing imo is only good if you are working on personal projects
yeah that seems to go along the lines of what mr mitten said as well
why does the internet love it so much tho D:
but yeah I think I'll go with just merging
you could also do squash and merge instead of merge commit
I looked into that but squash gets rid of the details so I decided that I generally want to avoid that
I saw you wanted "cleaner" log, so that's why I recommended it
ah
also easier to revert, no messy in-between "wip" commits, and only one commit per feature
but yeah individual commits and signatures are lost this way
also to avoid merge conflicts, feature branches should be generally up to date with main, basically every time a feature gets merged into main every other feature branch has to pull those changes
thats what I had at my previous workplace
although in order for other feature branches to pull those changes, you'd have to perform a merge (with a merge commit), right?
so I guess that's where people's annoyance with merge commits come in?
yeah but i think it's a silly thing to care about personally
I would rather avoid merge conflicts
before applying this workflow I once had to spend around 2 hours solving merge conflicts with my colleague on screen share because we had huge new features
2 hours??
maybe a bit less but sure left like it, it was hell lmao
obviously this is an extreme example, but solving merge conflicts is generally very annoying and time consuming
especially when you don't know anything about other features
ohh wait this would mean that if a developer was very active in keeping their branch up to date with main
there'd literally be a merge commit after every normal commit
I think
although the only real issue with this would just be clutter
although if all branches actively stay up to date, then wouldn't there be little conflicts at the end?
and I generally dont look at history tbh
yeah true
so I personally dont really mind the clutter
and if I need to use it I can just filter those merges out
I really enjoy how we do it, feature/ is the branch you work on (doesn't have to be feature ofc, chore, fix, etc)
Then there are update/ which is the current branch update everyone is working towards
Then develop the final place before going into main to go into production
Feature branches are always rebased on the update branches, once your features are done it is then squashed into the update as a single commit
Update branches are rebased and then merged into develop without squashing
This keeps the git history quite clean, no merge commits, etc
Rebasing is not that bad at all, unless you don't rebase often enough
yeah I think a lot of GitHub features are not explained well and developers end up thinking they're scarier or more complicated than they are
when they're actually really useful
ye, I 100% agree w ixume
tell me you at least force push
in my current workplace we mostly just rebase from feature to main, though there are not that many features going around, so conflicts are not an issue
same
Send er’ or don’t do it at all
exactly
no half measures
when I commit, I fully commit
no fucken around with these branches n shit
y'all not ready for this i fear

i might look into log4j just so I can make a logger that outputs typst files
what is a typst file
because I have so many times I am outputting a matrix or variables related to formulas I have open and it would be much easier to see the relation with proper formatting
modern LaTeX
that reminds me, not sure if there are nice java bindings for typst already
but you probably just want plain text to throw into typst
unironically been very helpful for reasoning out some of this stuff
yes
oh wwo
there is java-typst already
and typst is so fast i dont think it'll be much of a problem compiling large files
jni 💀
lord
I just yesterday implemented Typst PDF generation in the Browser (client, not server) with QR-Codes, that was fun
already done this, they said i could try with PetNameFix dev
no worries, it has been some time, i was absent too
did you maybe look? should i still compile this and use?
Just to mention i deleted the world that got this issue because i was not able to join at all, so i doubt i will be able to replicate this soon (this happened after a lot of time)
hi, didn't have access to the channel anymore lol
I did look into the PR, it was mostly ChatGPT bullshit that added unnecessary null checks where values couldn't be null
there were one or two things that seemed like they could be useful and added, here's a jar if you want to try for yourself, but I don't know if it'll actually fix anything
oh wait do they actually work
I thought I tried using them before and IntelliJ just didn't care so I didn't see any point
but that's pretty neat
yes
maybe it's been updated now
never seen these, gtg check what they even are
they provide some guarantees about how functions behave that lets the compiler do extra optimisations or more QoL features
they're pretty useful for casting, you can do your own smart casting with them
I tried convincing mini to change hangar's backend to kotlin....
I wasn't convincing enough... he wants to keep it easy to contribute, so java is the clear choice
for example if you have some Animal, you can create a function that you could use like
if(isServer(animal)) { ... (animal smart cast to ServeAnimal or whatever }
and here isServer could do something beyond just a type check
there's lots to it
this is how checkNotNull works
that sounds rlly nice yeah
I'm a big fan of how a lot of stdlib is truly just functions, not hard coded (how let is just a regular function, not some keyword)
yeah it's cool
might be stupid from my part to say this but I think it shows how flexible and well done kotlin is
it's a nice consequence you get from inline functions and the contracts yeah
Oh my god, simon is still pinned 🥹
I didn't know a channel of this kind was possible but really cool
no spamming
not configuration help
I'm at a loss again, shadowJar with .gradle build file produces different jar than with .kts. wtf
I double-triple checked, the .gradle/.kts files are pretty much identical, apart from syntax
META-INF\resources\webjars\swagger-ui\ has completely different versions for some reason as well
Hard to say anything about that without actually seeing the complete files and also other gradle-related files
yeah I understand, I changed quite a lot of things recently, might have messed up something myself, but can't seem to figure out what lol
you can probably run a gradle scan, maybe that provides any useful information
in a not-so-shitty world a build tool would be able to explain what it is doing, but well, it's gradle
(time for a nix-based java build system)
trying to go back to previous commits to see if I made some unintended changes in any of them
but I remember I had a similar issue previously as well, with .gradle -> .kts conversion
yeah, this.
I mean, I haven't added implementation() for sqlite, but for some reason build.gradle includes it, build.gradle.kts does not
so for whatever reason .gradle and .kts work differently, i dont fucking know lmao
I mean you have some kind of plugins added
not using version catalogs shaking my head 
cba

is there anyone here that has done tebex store setups as a comission before
if so, what are prices for that usually?
Considering the ones on tebex are like 25-30 USD, Id imagine a fully custom one would be 2x-3x that
the ones on tebex are shit ngl
is it convention to put NonNull annotations before the inner class instead of before the whole stuff? intellij keeps doing Foo. @NonNull Bar
Well only what IntelliJ does actually refers to the type
In many cases only that is correct, but due to the history of annotations, you might be able to wrongly annotate the field or the method instead of the type
Makes a lot of sense, thanks!
Completely agree.
You are absolutely right!
What I suggest is, instead of having to do all the work/setup on tebex
Use their Tebex Checkout API
They have Tebex JS package for its integration
So a decent web dev can do it easily
So all the payment is still handled by it, and you get to make your own web
Not a terrible idea, but out of my leauge lol
flashbacks to llm chats
@hot grove DMs sir.
i'm sure this is very obvious to many of you but union types + state machines are a very useful way of thinking about certain parts of your program
makes me see the value of a CS education
why is there no state machine oriented Minecraft inventory framework?
thought someone would have done something like that for now, given how annoying and buggy so so many inventory stuff is
and representing things this way would allow for very very clear structure; essentially just fully remembering that the inventory is only a render and storing the state of the menu in code, where you can much more easily make stronger guarantees about the state. then the gap is just bridged with events
Wdym by this?
.
basically just not treating the inventory gui as any sort of holder of information
which is probably obvious to many but i see it being done a lot nonetheless
and in some cases it works
but lots of time it's not the right approach
I still have no clue but have you checked triumph guis v4?
no that's not the same
i guess it's more of a mindset than something you'd have in a library
a simple example would be the Furnace GUI. let's say you were trying to implement a similar thing. instead of checking the burn time or checking validity of whether you can put an item into the fuel slot or whether somethign starts cooking by checking the item data, you would update some state variable for that furnace with canonical representations of what's in that furnace, and you would only ever interact with the actual ItemStacks on events such as placing, or picking up items
and for all your checks you would deal with that canonical state instead of checking item stacks
or let's say you have an inventory where the player can move around 5 swords in the chest
instead of reading the item stack data whenever you need to interpret what's going on in the chest or to validate its contents (dupe bugs and whatnot), you instead keep something like an object which stores the canonical representations of your items (which, to be fair, could be ItemStacks, but not always, if those items are meant to represent something else) and where they are
and in this way you would always be forced to update the state with something that must be valid, and thus you could also reconstruct the inventory from your canonical state at any given time
basically it's about moving the data to your code where you have more control over what it represents and how it can be represented via types
idk noone cares that much to make it a whole lib
though I use something similar for a trade system
I thought you were going to talk about fsm but what I'm reading rather screams "abstraction" (keep the frontend separated from the backend) instead of a fsm system
in which case, abstractions like that are in my experience very case-by-case dependant, you can probably make a generic library but then you need to ensure it's a one-size-fits-all rather than custom tailoring
this has been on my to-do list for a while
i was going to make it follow the Elm architecture (essentially how redux works)
i dont think this works yet but this was my basic initial design
it's about fsms in that you treat the gui as a pure render of the current state
yes ...
welll....
maybe you can release the whole series tomorrow?
Hola people!
i was thinking about it the other day and im not even sure if theres an audience for that kinda thing anymore
true!
surely after all this time it's ready now
people just ask "chat gpt"
i will ask bristermitten.ai
it's only 72$ a year
just feed java & spigot docs into notebook lm and ask it to generate tutorial
😔 no gif perms
Wow, [user], that's a great question — by asking "what does extends JavaPlugin mean?" you're tapping into some really advanced concepts.
spigot docs probably the worst possible reference material haha
that poor llm
ok feed it helpchat #development message history
oh dear
that's... torture
as soon as it reaches 2021 it kills itself
yes
we seem to have issues with ai's trying to kill people
or create worms
this one will kill itself
worms?
worms
i have no source for worms i'm sorry I just heard it in a video yesterday
I can't remember what video
just a video
lots of videos
who up creating worms
the ai
what are you talking about brother
good think
that's a lie
Thanks for explaining the word "many" to me. It means a lot.
holding on...
zoo wee mama
🔥
sadly no i am unemployed and broke as hell
smh
sorry
are you still studying (when does it END?
omg!
phd in what
Programming language research
(or doesn't)
havent started it yet but the idea is to make one of those live coding music thingies but for vector graphics instead with animations and stuff
yeah my university has a pretty sick research group i can hopefully join but it's hard...
ive been working on my research proposal rn and I think my idea is quite cool though, basically I wanna investigate if it's possible to make like "reversible optimisations"
is ur thesis related to the research they're doing
I was under the impression most phd students were given their topic by their supervisor
yeah similar
youre probably correct
the proposal is apparently just part of your application to show that you have some ideas and know the field and arent an idiot
but most people dont end up actually doing it
https://www.youtube.com/watch?v=GWXCCBsOMSg&themeRefresh=1 like this but for graphics
Full Narrated! Song here by popular request: https://soundcloud.com/switch_angel/coding-trance-full-narrated
my music etc: https://linktr.ee/switchangel
#trance #electronicmusic #algorave
kinda like desmos almost
it's very cool yeah
so basically a language that describes graphics and animations that isn't a python library
that would be interesting
yeah and ideally the interactivity bit too
right right
theres a yearly conference about programmatic art which im fully investing into trying to being able to present at, and if i cant then im kinda cooked cuz it's not actually a very researchy project
bro needs funding
yeah 😭
you mean the live part, yes?
like the slider I think
Yes
And maybe this too
Hopefully
Depending on how hard I can lock in
So tutorial might have to wait another 6 months sorry guys
sob
yes I started it kinda badly, but the reason I said fsm is because the canonical state wouldn't just be like, a list of item stacks that should be corrected to, but should represent what the menu actually does, and this should be stored as one of a few possible states via union types, such that you have type safety to enforce certain conditions. you would have a different type for these cases, and you would be able to register actions and handlers that depend on the state and only on that state.
yeah i mean you can achieve that with a fsm but you cannot only achieve that with a fsm
it definitely helps
these states could still be hierarchical though, the point of them is to simply separate everything that requires different behavior handling
yeah and there are many formulations of fsms anyway
so this is already quite a broad thing for me to say
and canonical equivalence does not mean they're the same in quality for usage
was the code example i gave similar to what you were imagining?
I'm gonna check it out later and lyk!
👨❤️💋👨
woah 😳
Off topic, BM's name is so long that on mobile is displayed as "Bri... 💠 DVDN 🛡️ 🔗 GitHub"
Too much bloat tbh
for me it’s Brister…
rip tf2 soldier
Awesome
same
Replaced with ai generated mitten image
how much r u zoomed in bro
or rather how big is ur font
or how small is your screen
on mobile
nooooo
i miss soldier
I despise you‼️
Zoom level 100%
Clasic chat size enabled - uses smaller font size for messages
Speaking of font size, anyone else noticed that font sizes for threads in post channels seem smaller?
yep
How are you guys future-proofing your version checking systems for the new versioning schema?
idk
Future proofing by letting future me worry about it
I don't have to care about the version string if all I care about is the data version
or better yet, nothing regarding a specific version
I use like 5 main colors in my plugin, but now I mostly write the colors manually, for example:
...("<#E33939>Some text here")
Does anyone have some/use sort of global color palette system?
I was thinking about two options, passing every string (whether it's from config, sending message to a player, etc.) to some sort transformer, which parses for example:
...send(Colors.parse("<color.primary>Some text here"))
to
"(<#E33939>Some text here")
(maybe use TextReplacementConfig from adventure)
or use constants, like:
...(Colors.PRIMARY + "Some text here")
though constants would be quite annoying for texts that have multiple colors in it.
i'd just slap them as minimessage tags tbh
and how is the usage of constants any different than having the "name" on the string lol
string concatenation ugly
and would probably be a little more difficult than just find & replace from <#E33939> to <whatever>
Yeah just minimessage custom tags
what
um, I mean, if I have a string like:
("<#hex1>some text <#hex2>" + somevar + " <#hex3>more text...")
I could just search & replace each hex color, say <#hex1> to a, for ex., <color.primary> and then let the replacer handle it
for constants I would have to
find "<#hex1>
replace to "Colors.PRIMARY + ",
find <#hex2>" +
replace to "+ Colors.SECONDARY
or something like that
and not every string is equal by any means, maybe the hex color has a space after, maybe it doesn't, maybe it has a concatted variable after them, maybe not
not sure if I explained clearly
and how does the parse part look like?
just MiniMessage w/ custom color tags?
like, MiniMessage.miniMessage().deserialize("<foo>foobar", Placeholder.styling("foo", TextColor.of(0x123456))) or whatever
no I meant like, um, I find it really annoying since there are a lot of cases to cover (sending messages, replacing in commands, in configs, in actionbars, titles, bossbars and whatever), I basically have to pass the component to a replacer everywhere I use any color, no? or is there MAYBE some sort of easier/magic way to do so
No parsing at all, it's just minimessage like Emily said
MiniMessage is a component serialization format, the MiniMessage class is a serializer/deserializer to convert a Component to a String in the MiniMessage format and vice-versa
you can have custom simple tags like shown above, or more complex tags like shown in the papermc docs
alr
I mean, I know what MM is, I was meaning to ask a different question, but that's fine, I'll figure it out, I've just been slowly migrating the codebase to use components since I didn't really have the time to do so and it's been PITA
You can create a minimessage instance with your tag resolver MiniMessage.builder().tags(myTags).build()
Then just myInstance.deserialize("<my-tag>Hello!")
yeah I am aware about that part, I was asking more about using that instance throughout the whole codebase, maybe there is something I don't know and I don't have to wrap every sendMessage("blah") to sendMessage(ColorUtilsOrWhatever.deserialize("<tag>blah")) and what not
how are you sending the messages/whatever right now?
you said you have something like ("<#E33939>Some text here"), surely you are using MiniMessage for that, yes? you'd replace the usage of MiniMessage.miniMessage with whatever custom instance you want to use
If only you didn't hate Kotlin 
fun Player.sendMiniMessage(message: String) = myInstance.deserialize(message)
player.sendMiniMessage("<tag>blah")
honestly it's a very shitty way of doing it and I've been meaning to re-do it, that's why I am also planning to use a global palette system as well
and it varies from where it's used
some parts use an old lib of mine that also transforms old color tags (&c) to MM, some parts use a local transformer class, some go through a few different steps, anyways
I got the answer, thanks
Paper has a built in method for this
declaration: package: org.bukkit.command, interface: CommandSender
Not with a custom instance of MiniMessage, either default or passing your tag resolvers every time, it isn't the same
oh if you need something custom, then yeah
A friend of mine does
operator fun String.not() = mm.deserialize(this)
to be able to do player.sendMessage(!"<red>Hello")
That is very unreadable, bad usage of operator overloading 😔
Matt's version isn't significantly longer but is immediately understandable
wouldn't say the operator thing is horrible but definitely worse than the sendMiniMessage approach
cough runway
quite literally meant for these use cases xD
although I just noticed this is in dev general, so using a plugin probs not the answer
xD
why not just like
make a sendMM method
fun CommandSender.sendMM(message: String) {
this.sendMessage(mm.deserialize(message))
}
That was quite literally suggested before lol
He was just stating that his friend did it that way
If you scroll up the exact same thing you showed was sent xD

component caching!!!
wut?
how would one even implement component caching in this case?
caching string to components
fun format(string: String): Component =
simpleComponentCache.get(string) {
miniMessage.deserialize(string)
}
we do various layers of component caching
but for basic caching its ideal for the commonly used strings
because MM is awful for allocations and cpu usage when you're at higher player counts
now do it with placeholders
we do that
simpleComponentCache, singlePlaceholderComponentCache, complexComponentCache
on release they were an issue because we had an oversight in our locale object parsing
so we were OOMing every couple of hours

yeah but that has nothing to do with MM
our main coroutine executor was doing 900+gb of allocations in minutes thanks to adventure
I see a few issues with that lol
hm?
for instance, dynamic placeholders
that's not even that much
that's why it's a simple component cache
for ex. a placeholder that show money
yes it was a snippet of our entire formatting class
caching that would not display the actual money
well my question is rather how do you solve that issue
and how would you detect "simple" components from "non-simple"
but most likely it also just means that you're doing far too much, which can be "fixed" with a cache but is still wasteful
String lookup is faster than parsing MM first so while it's an... interesting solution I could see why they did it. since it has some real advantages
imagine 300 players, each with tab, scoreboard, actionbar, chat, commands all doing adventure
its a get, not getOrPut
it doesn't modify the map
its hard coded
yeah see, if you update all of that far too frequently, you'll obviously get problems
With things like balance where it differs for every player it's not very efficient because it's always entered into the cache, but it's still an advantage for the wide majority
the update interval is a big factor sure
but it's still an issue as player count increases
you have tab header, tab player list, and tab footer to process for hundreds of players
imagine doing that without caching
with every single one having placeholders
i feel like you're underestimating how fast java is and the power of good code
hundreds of players aren't the limitation there
your solution is a bandaid over a much larger issue. that doesn't mean you shouldn't have it, because sometimes the bandaid is just good enough, but you're describing this as if it's an impossible thing to manage without a cache
unlikely
I'll see if i can dig out a spark
java GC is REALLY fast
like this shocked me
the performance difference between code that was allocating hundreds of GB and 0 allocations was not gigantic
like if you achieve >1GB/s allocation rate just with adventure/MM, you're just doing far too much
I discovered this as I was optimizing my physics engine
why would that be hard coded?
because they're not updating it
so it must be set somewhere else
FYI from benchmarks I did, MM is not as slow as you think, even at scale
and they obviously can't have it cache just every generic string
that code snippet i sent is for purely regular string -> minimessage conversion
parsing strings with placeholders are another function which is not in that snippet
our 900+gb allocations were as a result of an issue with our code itself (1 line fix)
it's much better now
I'll start an alloc profiler
oh it's absolutely not slow
MM is fast
so apologies if i misclarified that
Over 3 minutes our MM allocations are about 2.5gb, just checked
That's with 251 online
just checked and ALL of the collision detection for my physics engine for 2000 objects in a pile takes just 1.7ms. that's crazy
that's nothing
Yup
well ig that's with your caching
you must have a lot of commonly used components. why not hold the components themselves instead of strings
our messages are fully localized
rip, the placeholder part was where I was curious
using mm?
I was planning on potentially adding caching to Runway but not sure how I will do it as nothing is hard coded xD and I still can't afford showing wrong data
nah, we have our own localization system which gives us the MM string to parse for us
i've heard adventure's localization system is nice but it's not very well documented (iirc) and we liked our own system more
Indeed
"Object-oriented programs are offered as alternatives to correct ones", do people here agree or disagree with said quote? Just out of curiousity
stupid
i mean yea, it might be pointless or stupid, still would you rather agree or disagree, or just abstain?
I don't understand
🤔
well, the quote isnt all that relevant today, but it used to be said as a critique against OOP, favoring other alternatives like FP, PD (and Data Oriented Design i think?)
is this for like, some kind of research or class assignment or something? lol
yeah i don't agree lol
nooo not really, but the quote was brought up to me not too long ago, I have kind of forgotten abt it, but i know it was discussed in helpchat like years ago, was more curious on people's takes on it today ^^
TRUE
SO TRUE
lol, u might even remember parts of the discussion back then, i think sxtanna was still here at that time
I mean formal proofs of correctness are basically unheard of in the OOP world so…
good lord
who said that?
I don’t remember it
he never gets anything wrong
yeaa right...
this is using a very specific definition of "correctness"
given that it's from dijkstra




