#dev-general
1 messages · Page 101 of 1
orrrr, use Pair<Integer, Integer> xd
or Friendship<A, B> from niallLib
niallLib
The three L's of death
what happened to /papi parse me?
I was thinking of having a custom chunk object which would be stored in a set, (containing the collector object)
array[0] / array[1]
what if you have just the hashcode after saving
saving to file?
Btw, I assume saving the data as json would be cleaner right?
I just thought cantor was the way to go since its a reversible function
I mean what all are you saving?
sqllite maybe?
Is a db really worth it since it's only to persist restarts?
How many itemstacks are we talking about?
Do you need all of them loaded at the same time always?
I will seriosuly make NiallLib
i am scared of no man
but that thing NiallLib it scares me
Nia666ib
☠️
You've got 3 L's in it, so you should be scared
hehe
NiallLib should never see the light of day
@heady birch i don't really get what your idea is supposed to achieve
What is the idea?
Hopefully nothing
!!!
@prisma wave Let me explain
so KiteBoard would have its AnimationService
my placeholder api expansion would have its own as well
but
If two are running on the same server, they should share one
so external plugins interacting the AnimationService that is shared between both plugins
why can your expansion not use kiteboard's?
it's a seperate expansion from the plugin
like not revolving around placeholders for kiteboard?
yeah
ah alright
but why do you want them to share the same animation service
like what would matter
it's animations
third party plugins registering an animation
it would work in everything using the animation service
just have a plugin for it then I guess.
^ Would make more sense
hehe
just like papi
I could make a plugin within papi
or vault
it would be a vault kind of thing
I could make a plugin within papi
don't
😂
I still dont understand what you are tryin to solve
nevermind
my goals are beyond your understanding
I will make a diagram
But yeah, their is absolutley no way it would work without a seperate plugin
Well
Im not going to share that idea...
@frigid badge Thank you, I'll look into it
docker scares me, i need to actually learn this stuff xD
i'm back to doing data managers 
docker isn't that hard to be fair
just requires a bit of reading
and understanding the concept
@heady birch cant you just
public static void tryRegister(Plugin pl) {
ServicesManager servicesManager = Bukkit.getServicesManager();
if(!servicesManager.isProvidedFor(TestService.class)) {
servicesManager.register(TestService.class,new TestService(), pl, ServicePriority.High);
}
}```
I think he mentioned its supposed to be the same
how will he make it exactly the same if it's different plugins
He just has the same class with the same package in there
he could make a library
Yea
which registers itself
Yea and shade it
Yeah I was thinking that
But if the library is shaded into two plugins wouldn't it crash?
Since they have the same fully qualified class name
Nial you can just have it shaded into all your plugins, only one of them with the same fully-qualified class name is loaded
@old wyvern Do you know how it determines which one? probably based on the plugin load order
I guess yea, updating that service is going to be insanely weird and you may find situations where different plugins use difference versions of the service
You should probably have a separate plugin to handle that, that would be the cleanest possible way I guess
or hmm
I mean you can just check if the registered version is lower than yours
then unregister it and register yourself
but I'd still recommend a seperate plugin lol
I mean you could try fiddling with it
but then.. I wonder what happens if you made two interfaces (same qualified name) but with different methods?
no such method
[22:29:10 INFO]: [PluginTwo] Enabling PluginTwo v1.1
[22:29:10 INFO]: AnimationsService provided by: PluginTwo
[22:29:10 INFO]: [PluginOne] Enabling PluginOne v1.0
[22:29:10 INFO]: AnimationsService provided by: PluginTwo
👀
Well.. it worked 😄
is there a plugin that makes an npc, and when click on it, it redirects you to another server ip, without bungeecord?
why is it impossible?\
connecting to a different server is handled by the client, not the server
Well kind of
The Minecraft client has no support for changing server without an explicit disconnect
Bungee acts as a proxy so it can send and receive packets from the server they are currently connected to
Without bungee, it's a direct connection to the server. You can't change that without explicitly terminating the connection and making a new one
can someone make me a bungeecord server? i have the lobby server, the kitpvp server, and the survival server. i just need help putting it all together
how do you do it with bukkit?
BUKKIT??????
ye
lol.
what
ok
big yikes
:/
opinions?
guys, i need a couple more ports to open, but they wont
i have 25565
25566
open
i need 15567
i mean 25567
ok?
and 25568
and on my router
it says there both port forwarded
but when i check
there noti
why?
- Why would you host this on your computer
its on my other one
Because you just need to port forward the main proxy’s ip (25565)
Okay why don’t you use a host?
what do you reccomend?
I don’t own a server
oof
I just program
ok
I just got a vps from contabo, they seem to be pretty good
Don’t use vps’s for Minecraft hosting 🤦
yeah
they're*
But yeah I didn't really read what this was about, any particular reason why you shouldn't use a vps for a minecraft server?
Yeah
...mind elaborating on it?
Serious question, I'm not very knowledgable in that area
I would imagine just because you're sharing resources
so could potentially have lag
hosting a big network on a VPS would be dumb
a small server, fine imo
Yeah that's for sure, for a small network your budget wouldn't be as low anyway I suppose
Big*
Damn it's late
You might run in IO read and write bottlenecks
(if you have multiple servers all writing data to the disk. yoou might notice a slight delay)
i would personally recommend https://helpch.at/host
Idk if that’s a troll
@ocean quartz ayudame
What's up?
Why does reflection have to be so fucking slow
Ikr
What are you doing?
reflective lookups
o
I can either have the type resolve the functions, or the evaluator resolve it
Simply adding that single line clazz.kotlin.members
takes 5 fucking. hundred. milliseconds.
Oh wow, why is it Kotlin's so much slower?
Its probably all of the mapping
all functions have to be mapped to kcallable, all the types have to be resolved and converted
kinda poop, wish it were lazy
How much would it cost to pay someone to make a full basic text adventure game?
Text adventure?
Text adventure
I mean, what is that
Like imagine old school DnD on a computer
Where people just played through text on brick computers
Basically just a game where there's only text
Yeah
And your desired programming language is?
Python
i swear pascal is so old now
@obtuse gale pascal > python
kotlin >>>
😂
i can do up to $100 worth of sexual favours
as long as those favours are limited to foot rubs
@quiet depot based on the popularity, Py is the most common used up until now than pascal 
popularity doesn't mean anything
it's popular because it's "easy" to learn (there's easier languages, cough lua, however python is too mainstream now)
that's the only thing python has going for it
everything else about the language is bad
it's slow, and terribly designed
on a scale of terrible design choices, I'd say python is on par with javascript
hah, javascript is also an extremely popular language
what's with all these terrible languages being so popular
I should probably say that I've never actually used pascal, I just did a quick google search for some samples (hello world, etc), along with some brief paradigm research, and concluded that pascal is better than python.
Time to start a productive day of jumping out the window
lmao
that's an interesting way of being productive
Maybe
Yugi, about that topic, CollectorChunk should be a formidable name ye?
Yus
Basically a chunk hopper
Just realized that
yea that should be fine frost
Only 20?
Yes big poopo with a 5 star
wdym, I did?
:))
Now all we gotta do is convince Gian to switch from DeluxeJoin to FJ
u should let me implement guice into fj @hot hull
Managed to get this to work.. now is it worth implementing it
My animations are used in 3 active projects currently, 1 requires a little modification
I mean it makes sense to make it a separate library doesnt it?
yes
Seems eh, just more to maintain I guess
fuck you gaby
Dont laugh at him
The lexer first has to collapse the individual tokens cur,+,+ into cur,++
Then the parser expands that into (, cur, =, cur, +, 1, )
Which it then parses normally
I had to change the lexer and parser to use multi-pass evaluation
They both do 2 passes
it just doesn't look that hard tho
print("Lexing took: 41.2ms")
print("Typing took: 20.7ms")
for i = 1,10 do
print(i)
end
print("Evaluation took: 7.39ms")```
see
ez
ur just overthinking it sx
youre ugly
lol
public interface AnimationService {
List<String> setAnimations(final List<String> text, final Player player);
List<String> setAnimations(final String text, final Player player);
void registerAnimation(final Animation animation);
boolean isDynamic(final List<String> text);
boolean isDynamic(final String text);
Animation getAnimationByName(final String name);
Collection<Animation> getAnimations();
static AnimationService getInstance(final Plugin plugin) {
AnimationService animationService = Bukkit.getServicesManager().load(AnimationService.class);
if (animationService != null) {
animationService = Bukkit.getServicesManager().load(AnimationService.class);
} else {
animationService = new AnimationManager();
Bukkit.getServicesManager()
.register(AnimationService.class, animationService, plugin, ServicePriority.Low);
}
return animationService;
}
}```
Please use a paste service to share configs, errors, code and long logs.
• HelpChat Paste
do you approve my getInstance
smh
Our uni sent us a mail to attend coursera for open electives 💀
Null in kotlin sure does is sensitive, isn't it?
Should I include the papi expansion as a library
Or make the library, then papi expansion depends on that
you always come with the oddest questions
@topaz bay that sounds painful
whats poppin logangsters
wassup boi
my teacher told me ive gotta make my website work on mobile and its due tommorow so imma just half ass it and if they are on mobile they get redirected to a site that says they cant access it lol
YIKES
i wish i knew enough HTML to help you lol
Just starting to learn website developnment next year
oh its not fun
Dudeeee but can you imagine gathering with ya homies and making a website
lmfao
also, im gonna be learning c#, HTML, CSS, JS AND Assembly... yay...
lucky
assembly is useful purely for understanding concepts
frontend web is hell @waxen marsh
you'll regret it
^^
Frontend is nice imo
Ries you're lucky to learn all those languages through your school. They started us off on python and then just kind of left us, so I had to self teach python, java, html, can you call CSS a language?
Assembly looks cool but apparently is a pain in the ass to use
Frontend bores me
Something that interests me is databases
And algorithms
Shit u no get in frontend
databases?
Yes
base for data
Data storage
intrigue me on why they interest u
Idk
It just does
Nah
How yo store billions of records in a scalable and efficient manner
Thats what interests me
k
Don't get me wrong, I prefer backend
But I don't get why everyone shits on frontend
Ok so I won a year of free web hosting
With redis and mysql databases
Gimme suggestions on shitty shit to host on there
Nah
Idc bout a helpchat knockoff lmao
Idijot
Maybe mess around with xenforo again lmao
Hey! atleast you aren't in the negatives!
!!!
$600/month for candles
@prisma wave it was
But I'm actually quite excited about this addition
It means I can collapse and expand any construct into whatever I want
@topaz bay Wanna see some beautiful arrow code 
congrats
@remote goblet why do I care
Wanna talk about performance
@topaz bay because you're done being petty about that and i wanna torture you with it :)
👍 Good work
https://paste.helpch.at/xegazegiru.java i'll put it here just incase
That's not bad considering
=paste
Please use a paste service to share configs, errors, code and long logs.
• HelpChat Paste
It render in under 500MS on a raspberry pi
Like 250ms
Not the feat of engineering I wanted
The one I needed
I'm getting: Cannot read property 'react' of undefined, but I don't really know why?```js
async function messagePrompt(message, author, time, reactions) {
time *= 1000;
for (const reaction of reactions) {
await message.react(reaction);
}
const filter = (reaction, user) => reactions.includes(reaction.emoji.name) && user.id === author.id;
return message.awaitReactions(filter, { max: 1, time: time }).then(collected => collected.first() && collected.first().emoji.name);
}
I would guess it's because message is undefined
Blame it on JS
imagine not having compile time undefined checking
Imagine not having compile time at all
😮
How do I loop through a directory?
File#listFiles
for (files in directory) ez
eh what? I'm already checking if the dir exists, and if it's length is 0
listFiles can return null
ah okay
empty would imply its an empty directory
it returns null when its not a directory
Would be great if it was a result, cause ya know...
BETTER
Well then dir should be null, not the listFiles
That's fair yeah, though it'd make more sense to have a directory type
That would be kinda messy though
file.getName().split(".")[0].split(";");
The [0] is throwing an NPE, the file name being -16;27.yml
you'd need an abstraction either way
its regex right?
what would listFiles() return for example? File? Directory? or an abstraction of the 2
That is a pretty bad name for a file Frosty xD
It's chunk coords Matt
@prisma wave well it would only be defined on directory?
And good point yeah, it'd be quite messy
@hot hull use kotlin
No
wdym @topaz bay
@hot hull use kotlin
@hot hull use kotlin
@prisma wave list files wouldnt be abstract
peer pressure
flawless
oh I see what you mean
but I mean
what would it return
given that a directory can contain both files and directories
So anyone got any clue as to why it's throwing an NPE?
If file and directory were implementations of some type, you would have file specific things on file, and directory specific things on directory
It would contain the abstract type?
Frosty use common's getNameWithoutExtension
so you'd still need an abstraction which was my point
making a specific Directory class wouldn't achieve much as most of the time you'd just use the abstraction
I was mainly saying that to Matt
uh what Matt
You could also just like name.substring(0, name.lastIndexOf(".")).split(";")
ew
Or in kotlin, name.substringBeforeLast(".")
😍
this is why kotlin is the greatest @hot hull
The lib com.google.common.io.Files hsa the getNameWithoutExtension to remove the extension, then you can split by ; but Sx's solution is better
kotlin would be even better though
haskell is best
Its kind of crazy how our brains just file away literally hundreds of thousands of things
Not trynna convert 7 plugins to kotlin, so nty
y not
You don't need to convert anything
:what:
You can have Java classes mixed with Kotlin
And like 1.5mb higher jar size ye? :p
well that's why you convert everything
1.3 ;p
but you have the option
youre complaining about jar size when youre merging 7 plugins?
:kek:
pea. brain.
what goes on in that pea brain of yours?
+1.3mb won't hurt
imagine caring about file size
Anyone got any suggestions as to how I could increase performance on this? (Well if there's anything that should be done differently)
public void run() {
final CollectorStorage storage = plugin.getCollectorStorage();
new BukkitRunnable() {
@Override
public void run() {
for (Chunk chunk : storage.getCollectorChunks().keySet()) {
final CollectorChunk collectorChunk = storage.getCollectorChunk(chunk);
for (Entity entity : chunk.getEntities()) {
if (entity instanceof Item) {
final ItemStack item = ((Item) entity).getItemStack();
if (!collectorChunk.getValidMaterials().contains(item.getType())) {
continue;
}
collectorChunk.addMaterial(item.getType(), item.getAmount());
entity.remove();
}
}
storage.updateCollectorChunk(chunk, collectorChunk);
}
}
}.runTaskTimer(core, 1, 5);
}
Why in gods name would you iterate over the keyset and do a lookup, instead of iterating over the entryset
Anything else?
Kinda same for Kotlin and Java
very true
extremely true
Sx, anything else, or is that all?
(also changed it to forEach, since that made more sense)
@hot hull theres nothing else I see from that single snippet
Only that snippet that I need to know for :p
does chunk not have a method for getting specific entity types?
like world does?
If not, I would say to invert that instanceof check
because gross
public void run() {
final CollectorStorage storage = plugin.getCollectorStorage();
new BukkitRunnable() {
@Override
public void run() {
storage.getCollectorChunks().forEach((chunk, collectorChunk) -> {
for (Entity entity : chunk.getEntities()) {
if (!(entity instanceof Item)) {
continue;
}
final ItemStack item = ((Item) entity).getItemStack();
if (!collectorChunk.getValidMaterials().contains(item.getType())) {
continue;
}
collectorChunk.addMaterial(item.getType(), item.getAmount());
entity.remove();
}
storage.updateCollectorChunk(chunk, collectorChunk);
});
}
}.runTaskTimer(core, 1, 5);
}
This is the refurbished one
does collectorchunk not hold a reference to it's chunk?
No since that'd be meh, cause I can just get the collector from the player's chunk
Also, oof only
@hot hull weak shit
No u
DarkReader
ew no
???????
I already use the Stylish dark theme for GH
gross
@prisma wave what should I add to odin?
hmm
a terminate system method
what's the paradigms of it?
with my new collapse and expand
Which wipes everything :))
I can do string interpolation
absolutely fucking not
The thing is, these words directly define whats happening
collapse is transforming many tokens into one
and expand is transforming maybe 1 or 2, into many tokens
shut up yugi
Not sure where to actually ask but this will do.
I'm editing the "online members" XenForo template to change the check to see if a user is marked as a staff member to see if they inherit a secondary group instead. Purely doing this so I don't have to go and mark every staff member as a staff member and just have their ranks automatically sync. I just have no clue about the XF syntax.
The following statement checks to see if a member is a staff member. I want to change this to check if a member inherits one of the staff groups as a secondary group.
<xf:if is="$user.is_staff">```
Not sure how many XenForo users there are in here, but worth a shot. Any help would be massively appreciated!
Hey guys i have a question, i try to block all bungeecord related commands on a specific server. And it works for everything to block commands except bungeecord commands like server command is not getting blocked. anyone know a fix
You need to process those on the bungee side
Spigot doesn't even know bungeecord commands exist
😬
regex is so crazy
simply collapsing those two groups into one
reduces the matcher steps, from 100+ to 36
Hello world in piet 👀
@prisma wave just realized
I'm going to have to lex
each interpolation
individually
The lexer and typer dont hold state
theyre objects
fucking
I hate this bot
well that was easy
And since its an expression in {}, stuff like that works
frigga could honestly fucking never
be real
come onnnnn dude
thats fucking HOT
👏
If anyones bored and up for a quick code review, some ways I can improve this unfinished project would be appreciated (My coding sucks lol there probably is loads) 🙂
https://github.com/Aj3douglas/AJ-Bedwars
how?
you're creating files, registering commands, printing shit to console, in your program's entry point
that's a whole lot of irrelevant
should I have like a file manager class?
yes
How about for the commands?
redundant, private val gson = Gson();
gson can also be constant so keep that in mind
yes for commands
LocationUtils.from(int, int, int)
that pattern might not apply in kotlin, not sure, but I highly doubt a data class is the best option for what you're doing there
Its so gson can understand it
oh
https://github.com/Aj3douglas/AJ-Bedwars/blob/master/src/main/kotlin/org/aj3douglas/ajbedwars/core/Generator.kt use a field naming policy in your gson builder instead of all these serialized name annotations
GsonBuilder#setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
https://github.com/Aj3douglas/AJ-Bedwars/blob/master/src/main/kotlin/org/aj3douglas/ajbedwars/core/StoreEntityManager.kt "fuck" generally isn't considered to be a descriptive debugging message, unless it's an acronym for something?
lol its just temp
That being said I think its quite descriptive
Really gets your point accross
Gson 🤢
what's wrong with gson?
Well
it's way less understandable than Json.simple for me
I mean
Json.simple is efficient
By the way PiggyPiglet, are you the dev of @compact perch ?
no
gson is so much more than simple json parsing (which is what json-simple provides)
Hmm
gson isn't limited to just json, albeit that's it's main purpose
it's a fully functional object mapper, an extremely configurable one at that
I'll try it in a different way next time
I really would like to know what Library they used to write informations on an image
for the =rank command
barry is written in nodejs, he uses canvas for the images
I see, thanks for the information :o
I literally have the same registerListener() and setupCommands() methods
4.86 ms 😮
Main class looks neat now lol
😮
just realised I named my gson object gsonBuilder as well but shush
@obtuse gale this is jus a whole bunch of irrelevant
Until you fix the spacing it's trash
I was doing plugin.fileManager.wahtever.stuff, i should probably do that stuff in my file manager class now right?
DI
im using DI to pass my plugin instnace round
that should be the last thing you need to pass around
^
Are you happy Piggy?
private final Map<String, ConfigurationSection> sections = new HashMap<>();
public void load(final DistrictCore core) {
final FileConfiguration config = core.getConfig();
for (String sectionString : config.getDefaultSection().getKeys(false)) {
if (sectionString.equalsIgnoreCase("messages")) continue;
sections.put(sectionString, config.getConfigurationSection(sectionString));
}
}
public ConfigurationSection getSection(final String key) {
return sections.get(key);
}
Pass whatever you need around, rather than coupling with the plugin
why?
Injecting your plugin creates tight coupling
the only time you ever need an instance of your main, is for bukkit functions that specifically ask for it. That's basically just the scheduler
ah
alright
I was doing plugin.fileManager.wahtever.stuff, i should probably do that stuff in my file manager class now right?
if you're using your main for anything else, there's a 99% chance you're violating srp
yes aj
there should be no plugin prefix
fileManager.whatever.stuff
not plugin.fileManager.whatever.stuff
yeah but like
So Piggy, good enough or?
I was doing this in my generators class, i should probably move this method to the file manager
@hot hull no, I think you've completely missed the point
Why?
I would have that function take a JSON string
Rather than caring where the JSON is coming from
and consider making that type a constant, so it doesn't have to use reflection every time
Mostly the lack of a space after a :
there is a space after it
In the function signature I mean
oh we're looking at different colons
Yeah
couple of proctologists here?
Piggy, remove all accessing of config during runtime
So if i wanna use like saveResource() in my manager class I would still pass through the main class right??
Yes and no
Iirc saveResource is protected
So you'll either have to do it in your main class, or copy it manually (it's a 1 liner in kotlin)
Nvm
just pass my main through?
have your file manager take a JavaPlugin I'd say
Sounds a bit petty but you never know
why javaplugin specifically
Reusability
lsp
^
Internet service provider?
liskov subtitution principle
Piggy, remove all accessing of config during runtime
@hot hull ah ok
ew why you use lower capital L then
consider doing object mapping instead
Was Liskov a person?
yes
Huh
"robert" comes to my mind, but that's the guy who compiled the principles, not necessarily authored LSP in particular
the first person to get annoyed at public HashMap<Player, Int> myMap = ew HashMap<>();
Huh
1987 kek
robbie
Older than I imagined
Probably
I'm completely guessing but I imagine that's when higher level typed coding really started to kick off
perhaps
That's true, since we're talking about subtypes
Piggy, that's effort
it's actually not
Would there be a benefit?
I mean this is fairly clean
not imo
I wanna know why the Enginehub repo has the whole of JideSoft on it
I dont think the license permits that..

jidesoft?
Reloading the plugin should be done async ye?
as async as possible
reloading a config?
async
remapping a map?
In theory there shouldn't be any
Better safe than sorry
true true
The synchronization overhead is pretty small
How do you setup a simple maven repo?
no such thing
I use Nexus
Kind of just looks like a web server
it uses tomcat iirc
I got tired of bothering with nexus, so I'm trying something called CloudRepo.io
It's free if you're hosting open source projects
codemc.io is also an option for mc projects
avoid jitpack at all costs
ah ok
@heady birch it uses jetty
Jitpack isn't that bad
it's aweful
Just the dependency declarations are ugly
yeah I tried that, it's pretty convoluted
it's actually hilarious
😫
how a company completed devoted to open source, could mess up something like that so badly
I guess they were trying to make it language agnostic
and ended up overcomplicating everything
idk about that
my problem with it is that it requires authentication
you can't access a github package publicly
which is a terrible idea
Oh yeah that's stupid too
Now lets see if this works
account's make sense for private projects
for public though? it's not just a hassle, it's literally not worth it
Strange that you don't need an account to clone a repo, but they didn't do something similar with packages
Blame Microsoft
microsoft has no influence on that
I believe it was just a major oversight on their behalf, perhaps their team is a bit out touch with how things work
Idk... Actions come about shortly after Microsoft purchase GitHub. Coincidence?
no, it was most certainly funded by microsoft, suggested by microsoft, but the final implementation was entirely up to the github team
Probably just based off their own integrations and tools they were already using?
perhaps
The conspiracy theorist in me says that they intentionally made it bad to sell more Azure machines
2002 lookin logo
is there an alternative to jide niall?
I'm confused, for some reason my messages keyword got replaced with configurations
:what:
I never did cos I assumed their company died like 10 years ago
But they are still posting updates
But yeah- each product is about 200$
How would you rate organisation on this? @quiet depot
i'd give it an eh out of meh
commands and config maybe in a common module
Niall, it's the plugins name
Otherwise it wouldn't be plural
I believe plural is better there
Now I wanna make a system which allows me to register the command within it's own class
But not sure how I'd approach that
why should a command register itself
Maybe it shouldn't
Remember when I tried to do that for Events and got shat on for SOLID
Probably shouldn't try it
NiallLIB
How long have you been working on that?
I havnt started yet
:kek:
@hot hull it's super ez
See but is it smart tho?
👀
Can I get a verbal example of how I should approach it?
most people use classpath scanning, which involves molesting the classloader to see what classes it has cached, iterating through them, and finding ones that smell nice
however that's quite yucky
I use a more legal way
Also, imagine actually having null checks, pfft what's that? https://paste.helpch.at/voducopaqa.cs
which is essentially just recursing through the jar (look into a jarinputstream/zipinputstream), getting all the files in a particular package, and loading them through the classloader
"molesting the classloader" 👀
Okay yea not trynna use classpathscanning
seems like effort
it's not lol
Any benefits, or just "easier" registration
idk inflated ego ig
kek
N<String> string = new N<>("Hello");
Friends<String, String> friends = string.friend(new N<>("Friend"));
System.out.println(friends.getone()); System.out.println(friends.getSecond());
NiallLib
Replacement for Pair<>
uh
why not just use Either
it's bundled in spigot
just add the datafixerupper dep
Add kotlin support and I'll use it
Can you guys help me make a decision
Absolutely
not
So I got my animations stuff
D:
Used in kiteboard, papi expansion, and holographic extension
It would make sense to make it a seperate project and import it into maven on all three right?
Yeah
I don't know what's so special about it
Each plugin has the animations shaded in
oh and it automatically detects that another plugin has it?
Piggy btw, currently I've got this which I implement in every plugin, how can I make it so that both methods aren't required since some plugins don't use a onDisable
public interface CorePlugin {
void onEnable();
void onDisable();
}
abstract
default void onDisable() {}
🙄
Danke
@heady birch interface, abstract, they're not really a replacement for each other
very different uses
I guess
Who knows how I can quickly query thousands of shapes in a geospatial context within a certain area
Spatial index?
anyone here ever worked with jfrog?
...funny you mention that
why,
I was just looking at Artifactory, but no I havnt worked with it
Then change them to the right ones <o/
Hows this lol?
@obtuse gale not good
There needs to be spaces around this
This has 0 ordering logic
You usually want to separate public and non public declarations
And then sort the order by at least something
maybe lexicographic, maybe name length
This entire class has no use
And in a general sense, util classes should not hold state
wdym
This is kotlin
great observation
?
this is kotlin
So whyd you ask "wdym"?
oi, fancy message
You dont do that by holding state in a util class
A util class that shouldnt even exist
where should i put said variable hten lol
Why do you need a variable for this?
