#dev-general
1 messages Β· Page 28 of 1
But it just got uploaded so it might take a bit for higher qualities
looks completely fine to me
If the video is higher than 1080p
Also got it, will lower the volume of them in future episodes
Agree with sound effects, slightly too loud which causes distraction.
Also starting with a Minecraft plugin I'd not recommend
better to do a few times by hand
to understand what and how
but just my opinion
Wdym?
well, I mean, you gotta understand what the Minecraft plugin does for you
It's a literally spigot tutorial.
so you can set up a project without it
I mean the Minecraft Development plugin for IDEA
that they use in the video
Rider makes it pretty easy to do, as he said in the video its not necessary to know 100% at the start
That's reasonable, but I think that's mostly up to opinion
I mean
you pin them to IDEA this way
but as it is the most popular IDE rn I think that is fine
Is that reallyyy a bad thing π€£
Wouldn't want someone converting them to eclipse
What's wrong with eclipse?
Just a circlejerk, nothing is actually wrong with eclipse
I was starting with eclipse
π
cause I had a bad PC and it was looking easier for me
altho moved to IDEA
with time
Makes sense
Never liked intellij. Have used eclipse for the past 6-7 years now.
Intellij did almost everything to take off the part that Eclipse was holding
xD
I mean their opensource licenses, all that kind of stuff
Another thing
that plugin still uses maven
that is like
very sad
from what I've seen maven tends to be easier to understand for a beginner
yeah, but then they have hard times to move to gradle
I'll make an episode on gradle but I was gonna start off with maven
not really I used maven for years then learned gradle in like 20 minutes
that is your case
There are people that still use maven
xD
because gradle is hard
it is what they say
I still prefer build path π

another question
what makes your guide different
to many others
A few of my resources use maven because of the 1.17 file loading but I just have been to lazy to switch them back to build path. I use the spigot maven plugin on something I forget what though. And a resource I took over sometime ago used maven.
I see you like the pain

I can do one better... my plugins support 1.8.8 - 1.19.4 π Minions-Revamped is backwards compatible so it supports 1.19.4 down to 1.8.8
What else, do you code exclusively in NMS?
My npclib will be xD well maybe not all but the majority.
Are you a masochist???
bro not just got some eggs
To add to that... the NPCLibrary uses my ReflectionLibrary
he is THE egg
@gilded granite honestly the content of the tutorial is mostly fine, not really too much wrong with the video, just little nitpicks
the oracle java thing is just a bit iffy
we're all meant to hate oracle according to the hivemind
so generally openjdk is preferred over it
I didn't know what corretto was but seems it's openjdk so that's probably fine
personally I've been using temurin (and prior to that, adoptopenjdk)
I did notice a legitimate quality issue, text is blurry when fullscreen
idk if that's on my side or not
but the vid was set to 1080p
the gradle/maven thing, honestly, probably doesn't really matter too much, and that's coming from a hardcore gradle advocate. I do think gradle is easier for beginners, but knowing both tools is useful, and starting with one over the other won't effect how good of a programmer you'll become in the long run
what
π
since when managing discord server is a job π
Thank you, but yeah the 1080p thing I'll have to look into
It's a service team lol
I'm wanting to use IntelliJ IDEA build artifacts to easily test, debug and hot-swap my plugin. However, I'm wanting to use aikar's commands library, so I need to shade that into the JAR. I am using Maven, and when I use mvn package, the JAR works fine. However, if I use the build artifact, even though I have checked Delegate IDE build/run actions to Maven, it doesn't seem to use Maven and the JAR produced is not shaded. How can I hot-swap a shaded JAR?
maven lets you easily test, debug and hot-swap your plugin as well
Oh, I was just following this tutorial because it seemed the simplest way https://youtu.be/AWsiQIZVU5s How do I do so with Maven?
btw with ACF do I still need to define the commands in plugin.yml?
don't think so
Ah nice!
The web platform is evolving quickly, with UI features to improve developer experiences, create new responsive capabilities, and enable more accessible interface defaults. Get a high level overview of what you can get excited about in the UI space and look out for on the web platform for CSS and HTML.
Speaker: Una Kravets
Watch more:
Watch al...
Lol
any ideas why discord doesn't show the thumbnail of my image which is an image from hangar's cdn? (logo of viaversion, for instance)
yeah they hate you
You've been blacklisted
also known as "they hate you"
Trying to find out if y'all joking or not xD
You didn't hear?
what exactly?
About Discords new policy
which is? can you send a link?
:-:
If you use DN you're blacklisted
ok sorry
feels trolled
a valiant attempt
I'm not sure if @pastel imp uses DN tho
i wouldnt like to say
th is dn
Who's gonna tell him 
domain name
OH
lol
no, I don't, I am just trying to get the logo of the project from hangar's cdn :-:
works if I open it in my pc but stupidly, it doesn't work on embeds
I am lost
lol
jokes on you, it has been a known issue for the past 2 days
small indie company
10 days with the issue
so true
π¦
I am using the Paper API so I am supposed to use the Adventure Component API for most text but I can't figure out how to reset styling/decorations. I am adding lore, which is italic by default, and the bold I apply to the first text component applies to the entire componentjava Component loreToAdd = Component.text("Drops: ", NamedTextColor.YELLOW, TextDecoration.BOLD); boolean addComma = false; for (ItemStack newDroppedItem : getNewDropsFor(itemStack.getType())) { if (addComma) { loreToAdd = loreToAdd.append(Component.text(", ", NamedTextColor.DARK_GRAY)); } loreToAdd = loreToAdd.append(Component.translatable(newDroppedItem.translationKey(), NamedTextColor.BLUE)); if (newDroppedItem.getAmount() != 1) { loreToAdd = loreToAdd.append(Component.text(newDroppedItem.getAmount(), NamedTextColor.WHITE)); } addComma = true; } final List<Component> currentLore = itemStack.lore(); if (currentLore == null) { itemStack.lore(List.of(loreToAdd)); } else { currentLore.add(loreToAdd); }
decoration(ITALIC, false) or something like this
How can i configure my plugin right that i can use it as github repository?
I dont understand what you mean
I don't either
wtf
I swear it's kids who don't know how to make plugins make this shit up.
Soon enough with this logic, they'll decide PlaceholderAPI is outdated.
Does Vault support multiple currencies even?
Vault is outdated and sucks though
If it works why change it tho
Because it's no where near optimal?
The biggest issue is the non-existant flexibility. No actual async stuff that could use CFs and all of the functions that can be called are predefined, from which many modern economy plugins make no use at all.
Looking at the api, it looks like a single currency system sadly. feelsbad
Sponge doesn't have these issues π
Any reason reading an input stream would be hanging a thread for so long? The input should just be 2 lines but it hangs the thread for a good 10-30 seconds...
BufferedReader inputReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while((line = inputReader.readLine()) != null)
System.out.println(line);
```Reading the bytes directly takes even longer... `socket.getInputStream().readAllBytes()` (I have a method that converts the byes to string)
5gb line
Just Socket socket = new Socket(<address>, <port>);
found this in a plugin that fixes unbreaking 3 breaking items too fast
what the hell
yeah to be fair, lack of async is kind of a real problem
2 lines but yeah it will print those 2 lines and then hangs the thread. I have no clue why.
well yeah but whats the context? wheres the data coming from
i mean... the socket read is gonna be blocking. if the other end doesn't send an EOF for 30 seconds then it's gonna keep blocking for 30 seconds
yeah
So let me add more context cause I did multiple tests if I just use the sockets input stream it takes forever to provide the data. If I use DataInputStream it takes less time but still takes awhile, with the bufferedreader it's instant... the second part of the issue is after reading the data the thread hangs for 10-30 seconds before moving to the next line of code.
I'm also not at my PC currently so can't supply the code.
that doesnt actually tell me anything
it's not about you reading, it's about the other end writing
if the other end takes 30 seconds to write a line, no different class is gonna change that
start = System.currentTimeMillis();
System.out.println("Outputting to socket...");
output = new PrintStream(socket.getOutputStream());
output.println(<string>);
end = System.currentTimeMillis();
System.out.println("Took "+(end - start)+"ms to send output to socket.");
start = System.currentTimeMillis();
long perLine = System.currentTimeMillis();
long perEnd;
inputReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while((line = inputReader.readLine()) != null) {
perEnd = System.currentTimeMillis();
System.out.println(line);
System.out.println("Took "+(perEnd - perLine)+"ms to read line.");
perLine = System.currentTimeMillis();
}
end = System.currentTimeMillis();
System.out.println("Took "+(end - start)+"ms to pass while loop.");
``````Outputting to socket...
Took 1ms to send output to socket.
<Reponse Line>
Took 56ms to read line.
<Reponse Line>
Took 88ms to read line.
Took 82111ms to pass while loop.
```Added some times to show what I mean.
I could be misreading your answer though...
you're never closing the output stream
it's just timing out
it still thinks there might be input to receive
If I close it, it throws a socket closed error.
One sec testing it again. Should it be placed before or after input read?
yeah running it before the inputReader throws the error... Adding it after the while loop still hangs untill timeout.
yeah well
think about it
you're doing these things synchronously
wait 80000 seconds for it to close, THEN close
need multiple threads
Yeah I was gonna make call back functions and multi thread but never had it hang a thread before.
I actually use a very similar method for capturing skull textures in a few of my plugins.
Not using Hangar thats why
Yes... the timeout for awaiting future response
Yes.
So would the best option be creating a new thread per input(response from socket) because I need to send more data to its output after I receive a response. (But then that would cause an issue of not knowing if I have a response...)
probably
But then that would cause an issue of not knowing if I have a response...
i dont think this makes sense
So... what I output to the socket sometimes includes the data from the response... But if the thread hangs I don't technically know if the data was retrieved or not.
yeah you'll have to do it "asynchronously" then
read 2 lines
write response
read 2 lines
etc
like mc does
with a "packet"
Yeah figured that. Will just copy my servers methods then xD
Thanks for the help.
Maybe I'm just to tired for this shit right now.
That's what you get you filthy non-casual-does-everything-on-his-own
π€· I'm fine with that xD
Hi, is that possible on bungeecord join teleport a player to a server ?
something like that:
public void onPostLogin(PostLoginEvent event) {
ProxiedPlayer p = event.getPlayer();
p.sendServer("Hub");
}
ServerInfo target = ProxyServer.getInstance().getServerInfo("Hub");
player.connect(target);
Nice thanks !
i'll try
It doesn't work for what i want π’
If someone know how to bypass the bungeecord onlinemode to true tell me
here is an example of what i want to do
public void onPostLogin(PostLoginEvent event) {
ProxiedPlayer p = event.getPlayer();
if (p.getUUID().equals(getProxiedPlayerUUID(callApi(p)))) {
p.sendMessage(new TextComponent("Β§apremium"));
}else {
ServerInfo target = ProxyServer.getInstance().getServerInfo("Hub");
p.connect(target);
}
}
I wanted to detect player uuid on the bungeecord (online mode), and connect corectly to the server if the player is premium, else teleport to the hub (Offline mode) the cracked player
but idk if i used the good way
We are doomed, someone opened an issue for hangar to add skript tag π
(and some other stuff)
@pastel imp link so we can downvote
issue is... it's not only skript xd
and was already added to roadmap
:/
F
How to authorize a crack player to connect to a bungeecord server in online mode, with all the other servers in offline mode?
I wonder how many mb of ram would it take to store objects of all Hangar Projects π€
if it isn't that much, I would probably just cache them all
Uh..
How do i force the cracked player to join the server ?
public void onPreLogin(PreLoginEvent event) {
PendingConnection p = event.getConnection();
if (isCracked(p)) {
System.out.println(p);
event.getConnection().setOnlineMode(true);
} else {
event.getConnection().setOnlineMode(true);
ServerInfo target = ProxyServer.getInstance().getServerInfo("Hub");
((ProxiedPlayer) p).connect(target);
}
}
pretty sure we don't give support for offline mode here (I think, someone correct me if not)
nobody know ?
not about knowing.
i just want make a jpremium clone
Β―_(γ)_/Β―
but without the capcha shit and bugs
check their code, isn't it open sourced?
I'm pretty sure is not only about setting the online mode to true/false
no its not
idk if we are allowed to give support to offline mode related stuff tbh Β―_(γ)_/Β―
why not use offline mode?
This could break other plugins that use UUIDs for other purposes than just storing data/as a unique identifier
true
with the preLoginEvent i successfully kicked the player before the "This server is in online mode message"
the problem is i d'ont want to kick the player
but accept it on the serve
you should use offline mode if you want offline players to join
its 100% possible but my bungeecord knowledges sucks
π€
pretty sure jpremium just sets the offlinemode to false and for those who are cracked, just don't give them direct access
doesn't look that big of a deal
no its less secured
Can you even allow cracked players on a premium bungee network?
They why do you care about redirrecting them to another server?
then why are you allowing offline mode users...?
so let me see, you want to allow offline players to connect to an online server without making the server offline?
lol
Its less secured if you set offline mode on everytime, the premium players uuid are changed
you either accept cracked and have offlinemode or you don't.
and a lots a bugs a created
there's nothing about more secure lol, more secure is just not allowing cracked at all
only way it's secure
otherwise, it's useless
a non premium guy can join with a premium nickname
oh so you're trying to convert an existing server to offline mode?
and it sucks
then just check it?
using online mode does not make it any more secure - it only keeps the player data... and leads to actual bugs
there are ways to see if an user is cracked or not lol
how bcs uuid are changed ?
And why plugin like jpremium are not using this method ?
confusion
No it doesnr
im lost
got it
UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8))
i think hes trying to make his offline server cracked without losing playerdata (since uuids would change)
edit: idk anymore
π€¨
I can allow crack player to join online mode bungee
actually not, he's trying to let cracked players connect to their onlinemode server cause it's "more secure"
that sounds really counter productive and a mess to work with but you do you
i don't need to create or install a plugin to recover on the bungeecord the skin of the premium player bcs their uuid changed
and premium player can still change their username
Β―_(γ)_/Β―
without losing any items on the server
a mess to work with me ?
i was asking for help, and everyone here helped me with the opposite of what i want
If you hate yourself that much and want to allow cracked players on your premium network we aren't going to stop you, but that doesn't mean you will get help to do so 

i just don't want shity servers

@agile galleon did you figure out the weird shit aurelium skills was doing with that skull?
The dev said it was to cache the skull so it doesnt lag when opening the gui
the issue was arclight, a forge bukkit hybrid and it had incredibly slow chunk loading times
just told the server owner, bruv, if you use a hybrid expect bad performance and I can't help ya
that's the weirdest way for doing so I've ever seen tbh, what's wrong with creating the skull as an item π€£
afaik its for the player or smh idk
ask them
idk worked flawlessly for me when i was using it
You would want to keep the server in offline mode and do the authentication API call yourself. Then add whatever custom auth solution you have if it comes back false
@hazy cape
Yeah that is what im trying to do
I managed to connect premium and cracks without removing the online mode
know im trying to make a login system in the hub
How did you do this?
but I've never done bungeecord suddenly I'm lost and idk how to comunicate with a spigot server
public void onPreLogin(PreLoginEvent event) {
PendingConnection p = event.getConnection();
if (isCracked(p)) {
event.getConnection().setOnlineMode(false);
} else {
event.getConnection().setOnlineMode(true);
}
}
isCracked use api call
You usually need to use a third party tool to do this
There is a thing called bungee plugin messaging, but it's pretty insecure
I would use this
insecure? wdym?
It sends packets through player connections
hoo ok thx bro i'll check that
ye but it doesn't actually send it to the player.... right?
or does it? π
Well if it's going through the player's connection
Its interceptable
And more importantly, editable
The resource I linked emulates bungee plugin messaging but with a secure connection
hm, I never thought of that lol
I don't really use plugin messaging anyways since it requires a player
Also plugin messaging sucks because you cant use it if no one is connected to the spigot server
Yeah
although
isn't this one completely separate from bungee
its just regular sockets
I wrote my own little shell for the PluginQuery thing
Yeah, but it's designed with a similar interface
ohh ic
public static void sendOutpostData() {
PluginMessage message = new PluginMessage().writeString("OUTPOST DATA");
message.writeString(controllingGuild == null ? "null" : controllingGuild.uuid.toString());
message.writeBoolean(isActive);
message.send();
}```
Thats my custom thing
But it comes out pretty nice
And then I just have a bukkit event listening for them
No, but I probably should
The largest thing I use it for is serialized itemstack playerdata
So the proxy can load playerdata onto game instances
I just add a new string for each itemstack
But Json would probably have been a better way to do that
public void sendToServer(ServerInfo server, boolean viewOnly) {
PluginMessage message = new PluginMessage()
.writeString("PLAYER DATA")
.writeString(uuid.toString())
.writeInt(defaultOverworldSet)
.writeInt(defaultDarkzoneSet)
.addServer(server);
for(String itemString : inventory) message.writeString(itemString);
for(String armorString : armor) message.writeString(armorString);
for(EnderchestPage enderchestPage : enderchestPages) enderchestPage.writeData(message);
for(Outfit outfit : outfits) outfit.writeData(message);
if(viewOnly) message.writeBoolean(true);
message.send();
if(!viewOnly) Objects.requireNonNull(PitSimServer.getServer(server)).addProfile(this);
}```
If I were to do this again, I would certainly use something like redis
But I had to design the entire multi-instanced item saving system on a time crunch since the developer we hired to do it flaked out
And I didn't want to have to learn a complicated new lib
I can't find any function which takes a TextDecoration and a boolean. I have discovered TextDecoration.withState(...) but this returns a TextDecorationAndState which can't be applied as a TextDecoration
If it helps, here is an example of the resulting NBT/JSON data{Lore:['{"bold":true,"color":"yellow","extra":[{"color":"blue","translate":"block.minecraft.cyan_wool"}],"text":"Drops: "}']}and this is what I want it to be{Lore:['[{"text":"Drops: ","italic":false,"color":"yellow"},{"translate":"block.minecraft.cyan_wool","color":"blue"}]']}
is that even async?
ComponentBuilder https://javadoc.io/doc/net.kyori/adventure-api/latest/net/kyori/adventure/text/ComponentBuilder.html#decoration(net.kyori.adventure.text.format.TextDecoration,boolean)
Component https://javadoc.io/doc/net.kyori/adventure-api/latest/net/kyori/adventure/text/Component.html#decoration(net.kyori.adventure.text.format.TextDecoration,boolean)
The text is italic because that's how the game works
No
ouch
am I the only one that can't download anything from discord?
looks like discord's CDNs are down or smt
lol
I've not had any issues and nothing has been reported on downdetector so probably just you
Oh I'm dumb, I thought decoration was supposed to be a static method π€¦ββοΈ Thank you!

Turns out, in recent versions of Minecraft, each Component in Lore is automatically placed on a new line, so I'm still having to use .append(...) and "extra". However, I'm also needing to be able to identify and remove this line of lore from items, so I need to check if a given Component starts with another (the "Drops: " prefix). I believe that if I take a line of lore and remove all its children (the "extra"), it should be equal to that "Drops: " prefix, but I can't find a way to compare two components without taking into account children, without just removing the children before I even know if it's one of my plugin's lines of lore. If not, is there some other way to add a unique identifier to a line of lore which can't be seen by players but can be used by my plugin to know that the line was made by the plugin?
I'm not saving data in the lore, I am displaying information to the player using the lore
use the PDC to store the indices of specific lines of lore
lore is basically write-only, don't try to save any state there
To be able to remove it. Pretty much, I'm making a game and part of it is that block drops are randomized. When a game is ongoing, and once a player has already 'learned' the items dropped by a block, I want to show the item(s) dropped by that block as part of the lore. However, I don't want these changes to be permanent, so once a game has finished (and in several other cases) I want to remove this lore. Since the drops are randomised, if a game ends (or if the server restarts or something) the drops will change, meaning I can't just use the same code which generates the lore to be able to exactly match that line of lore. However, I don't want to just blindly clear the lore of all items, so I instead want to identify if a line of lore starts with the "Drops: " prefix I put before the list of items (it's probably safe to assume no other plugin would use that exact same prefix with the exact same styling)
yeah it would probably be smart to just save all the metadata of an item in the PDC and then wipe and recreate the lore lines whenever you want to change it
the React approach lol
Honestly never heard of the PDC so I'ma have to do a bit of research. Looks promising though! Thanks π
This is probably a stretch, and I doubt it would be a problem but if it's easy to solve I feel I might as well. Is there a way to identify the line of lore in a way that would be consistent even if the index changed? For example, if my plugin's lore was added first, but another plugin added a line of lore and pushed it to the top, the index of my lore would change from 0 to 1, meaning if I used the index to identify it my plugin would later remove the other plugin's lore instead of mine.
Wait I've just realised what you were meaning Star- instead of storing the index, I store the items dropped (or, more likely, the random seed used) and re-calculate the line of lore and find it that way
yeah I don't think there's any good way to actually figure out what lore lines are yours and which ones aren't
maybe like zero-width characters in your resource pack?
idk, at that point i'd just say fuck it to all the other plugins, your plugin should just be fully in charge of all the lore for these items
Haha fair enough lol. Storing the random seed should work, it would just mean any updates to how the plugin decides the items dropped or how the lore is styled would be breaking changes unless I also add a version identifier to all the items lol
yeah something like a generation scheme should probably be well planned out and stable anyways, so storing the seed and the generation version wouldn't be bad
Honestly, such a scheme sounds really hard to maintain, so I'll probably just clear all the lore if there is a version mis-match. I don't know how so many plugins use a config version scheme cos that sounds even more complicated
or I mean, even just generate all the stats and then store them in the PDC and recreate the lore from that
don't need to remake the pipeline and everything
i know that's what stuff like MMOItems does for their stuff, store all the stats in NBT/PDC and then just create the lore based on those stats
I suppose it would mean changes to how I decide the items dropped wouldn't be a breaking change, but lore styling still would be
yeah but how often are you gonna be changing lore styling?
to be honest I would look at like MMOItems for inspiration
we use their stuff for all our custom items and it's great
I'll have a look!
I was about to say it is Premium but it's still open-source which seems a bit counter-productive but I shouldn't complain lol
Ahh that makes sense, fair enough
as people can contribute (for instance, I have) and smart people can look at the code and figure things out, while you still get the money!
and you don't have to support people who don't pay so it's a win win
Freemium is the gold standard
Freemium > ALL (okay, not all, just Premium)
Wait, I could just store a hash of the line of lore
I love open source but it ain't always the best solution.
tbf I'd imagine Premium would be better for stuff like AntiCheat, any security stufff or stuff like Tebex
In the context of minecraft plugins tho, sure
explain
ehhh, open sourced Anticheats have proven to be decent
not all, but some
Open source isn't really a good idea for stuff where exploits are especially bad, like anything security or involving money
well unless you have a license that doesn't let other resell your stuff. If I have a million dollar idea I won't just let people that have more resources than me steal it lol
it is just the opposite
bruh okay, yeah, in that sense it's understandable
easy comparison: windows vs linux.
Linux is better for professional users, but there's a trend where closed-source stuff like Windows and iOS are usually easier to use for the average user. I remember someone explaining why but I can't remember the reasoning
we were talking about security tho
Probably something to do with the fact that open-source stuff is made by a bunch of computer nerds so the software is targetted more towards computer nerds
I'd say Linux is more secure, only because it's less popular and those who use it usually know what they're doing meaning attackers are less likely to target it
but that's not true.
EYOOO
feel offended
TAKE IT BACK
π
lmao
because linux is used by big enterprises where the big bag is at
Linux is probably more used than windows lmao
if it were true, I doubt they'd risk the loses for the performance and customisability gains
if you account all linux servers and devices, etc using linux, it's way more than windows
both, open source and closed source have their advantanges and disatvantages.
yeah for security ideally you'd want transparency and contributions from other smart people
this trend is less related to the closed-source nature and more related to the walled gardens and popularity that create an ecosystem such as Windows or Apple's
If we go back to the anticheat solution, one of the most popular anticheats to this day for spigot is NCP which is open source.
I was referring to for an average user. For enterprises, I'd say Linux is more secure because there's so many different ways it can be configured to fit an enterprises needs, meaning there's lots of edge-cases for attackers to have to think about
π€¨
that's not how it works
guess what, Android uses the Linux kernel, and guess what, Android has a 42% global market share on devices lol
yeah that's not really what it's about lol
linux is the vast vast majority of server OSs
generally people who setup linux servers know at least a bit about how computers work and keep it tight and make it less vulnerable
the "user-friendliness" factor is mostly becuase for Windows, they have been the market leader for a long time and have one unifying API and GUI framework and everything, and everyone just works around them
similar for Apple, they enforce lots of guidelines on how GUIs work and what apps are allowed to even run that it makes for a very neat and unified ecosystem
and they make a lot of money. that also helps them a lot
Linux isn't owned by one company and it means they don't have a unified set of UI utilies or anything, everything is like build your own
there is a simple answer to why windows is more user friendly lmao, and it's very simple, it's a company trying to profit. Simple as that, things gotta look fancy and work nicely to catch the consumer's eyes.
Fair, but I think most phone manufacturers use their own closed-source versions of Android, or use closed-source software for anything security. For example, Samsung has Knox for lots of security stuff, and that's closed-source
but there are plenty of beginner friendly linux distros that most people could easily use, especially if they don't know anything more than "i open google chrome and that is the computer"
moral of the story, the open/closed nature of the source code doesn't really dictate much about software
it's a correlation rather than a causation
I was about to ask if this should be in #dev-general then I realised we were already in here and that I was asking questions in the wrong channel π€¦ββοΈ Oh well π
chromebooks π
Why should it be async ??
because you want the least amount of things to be done on the main thread?
+... your using it for offline-mode connections no?
so bot attacks is gonna destory your server even harder
destroy*
Yeah but i can create or dl antibot for that problem
But i don't understand how async task work
Like, it never end before a return from the task ?
And when i have to use it ? When i call the api check ?
Is there a way to actually download an ecloud placeholder in a plugin without having to execute /papi ecloud download? (Player, Luckperms).
yeah, just gotta do the http request and download it into the right folder
I mean, to be fair, I don't think you should be messing around with connections, etc without even knowing how an async task works π
Personally I hate it when people try to tackle complex topics without having mandatory knowledge
And usually it's also difficult to explain it to them
In very simple terms,
A blocking task:
// code here
// your complex task here, it must finish for the program to move on to the next line
// following code will only run after the task
Async:
// code here
// async call, for ex. is created on another thread, will get a result eventually
// this can run immediately creating the task
Might not be the best example and not sure if you wanted an explanation how and when the result is returned.
ok thanks
we're not really addressing the root issue here
this is not true at all
plus it's a bungee plugin lol
plus im pretty sure those methods are going to be cheap as hell
far cheaper than switching to a different thread, if i had to guess
plus you have potential for concurrent modification issues if you just blindly make things async
- ratio
idk if it fits but
I am using these two methods to clear the blocks that a player puts inside a region
https://paste.learnspigot.com/hitoleniva.java
But it gives me this error
https://paste.learnspigot.com/xesogowosa.rb
weird, you assert region != null right before the NPE and it still gives that error?
or was the assertion added later on
assert does nothing by default
whats the point of it then
it's used for quick testing - if you enable a JVM flag, it'll throw an AssertionError, if not, it'll do nothing
the purpose is that it doesn't always throw an AssertionError - only if it's being tested
you can also do like ```java
assert isThisWorking(); // true/false
im pretty sure
i dont even see 'region' in this scope... where is it defined
line 19
oh, i did a bad ctrl + f
I've barely used worldguard regions before but I assume that the issue is on line 44 - 47 π€·
the world guard api π¦ is very bad and many people say the same
what's the end goal here? Is this for like a Box server, to clear map or what?
I don't know, it's a commission :c
lmao, what's it supposed to do? clear blocks placed by players in a region?
(also, I suggest using lowerCamelCase or kebab case for config.yml, usually the convention)
Also, have you just tried debugging if it's getting the right region?
Yep
nope, now i'll try π
he said it was for a boxpvp and a survival
I added a sout in each if to check
and reaches 7.1
like scratch said, the problem is in the getRegion() method, it's returning null
are you sure there is an actual region defined?
its offline-mode, so bot attacks would cause insane issues with every connection going on the main thread?
no?
if you have 10-50k bots joining a second with every one of their connections going on the main thread
that doesnt sound like a great idea
PlayerConnections are async if I remeber correctly.
he was using the non-async preloginevent
Ah. Only read your message.
this
π
so yeah it might not be that expensive
for like a few players joining
but when a bot attack can go to over 50k bots a second
is there a name for a trie that works on words instead of individual characters?
?
Why do you need that
i'm playing with permission stuff
there is no "main thread" on bungee, all events "are async"
^
and again, Iβm fairly sure setOfflineMode is just gonna change a single flag rather than doing any heavy networking stuff
Tries can already have more than 1 character as leaves so this is kinda sufficient already
Online mode has authentication packets too. Offline doesn't. (I could be wrong though)
as far as my knowledge goes, you're correct sir
ah i see mb!
Is it very difficult to make a licensing system?
well license system technicly wouldnt matter if u follow gpl3 rules (which you are required to be if u use spigot/paper api etc iirc?) cause a enduser could just remove the licensing part, i might be wrong tho
to do it properly? yes. But as said above, by doing so, you would in theory be going against the spigot/paper license.
why do bukkit vector methods modify and return a reference
so everything needs to be cloned, super annoying
yes
if i just see Vector X = A.add(B) i automatically assume A is unmodified
bukkit
Real
I have this diagram used to show where a specific muscle is located, here is what it looks like for the chest. It is interactive, and can redirect the user to other pages if they click on the corresponding muscle. It highlights them when hovered in the same cyan used to highlight the pectoral muscles. I feel like there is a better way to highlight it, as it conflicts with the hovering and interacting.
different color / opacity ?
I tried different colors, didnt fit the theme well. I have this, which is a different opacity. I also highlighted the forarms to show what it looks like when hovering.
That just doesnt feel right.
Also, lower opacity for the highlight looks better imo, as you can see the outline too
yeah, I like it a lot better. maybe I could go with like a orange or something to contrast for the pecs.
what if you have the light gray border
instead of blue border
in both hover and selected
that doesnt look good, as the light gray and the blue are close enough to where it sort of blends.
wdym?
can u show image?
the forarms are currently highlighted
I prefer this:
I think I will settle for this for now.
Tbf I would just keep the hover the same color as the highlight, since it is visible only as long the user has their mouse over another part.
I would use yellow as the selector, but I like the color scheme
err
yellow highlight
blue selected
ah ic
yeah, its just that everywhere else on the site blue is the highlight color.
Interesting choice, but fair enough
I am not sure what to do for the selector color. Might just stick with the yellow.
Should all database queries be done async? Or fetching 1-10 rows is generally fine on main thread?
An orangy hover would fit better imo
Do everything async as much as you can
Even if it's just 4ms, can be the difference between 20tps and less
Especially if multiple have to run each tick
It's on command
// call
database.getData(params)).thenAccept((blah) -> {
});
// getData
return CompletableFuture.supplyAsync(() -> { ... }
would this suffice?
haven't really done much CompletableFuture stuff, mainly used Bukkit schedulers
whenComplete is preferable if itβs a βterminalβ operation
Less likely to swallow exceptions
And the answer to this is a hard yes
You never know when something might fuck up and suddenly a single network connection takes 2 seconds
What else should I use for simple fetch ops?
whenComplete as he said, that will run the consumer you provide when the data is available
Oh, I read that wrong
?
$tipo2 isn't even a number...
it's 4
Its a string
check the define
^^
.
Yo
Didnt know php had 'and' operator
same for me
Sent that 2 minutes ago
https://imgur.com/a/MOeO9XD + api issues atm
π€¦ lagging again
π
hey
Anyways.... @manic vector I am surprised its not throwing errors to tell you you're asking if a string is >= and vice versa
check the define
Its a string...
Its a string...
Yeh it is
I sent an abomination of a message to my friend and its now spamming his dms with the same message
I think I sent this 1 five times xD
lol
Discord broken? Or fixed now
And you can't edit the messages while they are sending
API is slowly going down
Ah
i sent that message 5 minutes ago
Ah I see what you mean about "define" I read that wrong.
MAX_NUMERO is defined as "k" and MAX_TIPO is defined as "PICCHE" which are both strings not the variables
Hi, how do i export a project with externals jar in eclipse ?
bcs i have ClassNotFoundException when i start the server
im using HikariCP and slf4j-api
Pretty sure you check a box that says include libraries or something.
However with Hikari you have to relocate which means you have to use maven or another dependency manager.
ok ty i'll try
hi
any devs intrested to help foir a minecraft client?
or ui makers
for my friends client
no Im not
Nah
π
for a top 3 leaderboard, what's easier, NPCs (with zNPC) or armorstands?
NPCs look better
isnt zpncs like very buggy
You are thinking of bugs
Probably, just use sigh Citizens and call it a day π€£
Hi, where this error in HikariaCP come from ?
Caused by: java.net.UnknownHostException: )localhost: Name or service not known
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[?:1.8.0_362]
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:867) ~[?:1.8.0_362]
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1302) ~[?:1.8.0_362]
at java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:815) ~[?:1.8.0_362]
at java.net.InetAddress.getAllByName0(InetAddress.java:1291) ~[?:1.8.0_362]
at java.net.InetAddress.getAllByName(InetAddress.java:1144) ~[?:1.8.0_362]
at java.net.InetAddress.getAllByName(InetAddress.java:1065) ~[?:1.8.0_362]
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:188) ~[Flamecord.jar:git:Travertine-Bootstrap:1.16-R0.4-SNAPSHOT:4d67d99:unknown]
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:299) ~[Flamecord.jar:git:Travertine-Bootstrap:1.16-R0.4-SNAPSHOT:4d67d99:unknown]
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2187) ~[Flamecord.jar:git:Travertine-Bootstrap:1.16-R0.4-SNAPSHOT:4d67d99:unknown]
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2220) ~[Flamecord.jar:git:Travertine-Bootstrap:1.16-R0.4-
SNAPSHOT:4d67d99:unknown]
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2015) ~[Flamecord.jar:git:Travertine-Bootstrap:1.16-R0.4-SNAPSHOT:4d67d99:unknown]
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:768) ~[Flamecord.jar:git:Travertine-Bootstrap:1.16-R0.4-SNAPSHOT:4d67d99:unknown]
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) ~[Flamecord.jar:git:Travertine-Bootstrap:1.16-R0.4-SNAPSHOT:4d67d99:unknown]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_362]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_362]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_362]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_362]
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[Flamecord.jar:git:Travertine-Bootstrap:1.16-R0.4-SNAPSHOT:4d67d99:unknown]
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385) ~[Flamecord.jar:git:Travertine-Bootstrap:1.16-R0.4-SNAPSHOT:4d67d99:unknown]
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:323) ~[Flamecord.jar:git:Travertine-Bootstrap:1.16-R0.4-SNAPSHOT:4d67d99:unknown]
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:112) ~[?:?]
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:118) ~[?:?]
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[?:?]
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) ~[?:?]
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:443) ~[?:?]
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:514) ~[?:?]
... 10 more
========================================
)localhost?
My mysql db is on my vps and it is the same than my bungee
i tried with my vpn ip
and localhos
t
no i mean the error has a random ) right parenthesis
the user work perfectly and the db name is the same
)localhost
is the reel error message
but why is the ) there
idk
are you sure u didn't accidentally leave it in ur code/config
Β―_(γ)_/Β―
Me either
DbName(new DatabaseCredentials("localhost", "NAME", "PASSWORD", "NAME", 3306));
sb.append("jdbc:mysql://)")
.append(host)
.append(":")
.append(port)
.append("/")
.append(dbName);
here my code where i connect to the db
i need glasses
signs
holograms

I made a db connection using HikariMc for my bungee but i have this message
Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
How do i remove it
Show the code where you create the url for connection
public String toURI() {
final StringBuilder sb = new StringBuilder();
sb.append("jdbc:mysql://")
.append(host)
.append(":")
.append(port)
.append("/")
.append(dbName);
return sb.toString();
}
Nice thanks
Iβm gonna hack you now
SSL? Who needs that
What is an SSL? π
Exactly
it's a kind of hot dog
How to send titles in bungeecord ?
Secret Spaghetti Language
if you don't obfuscate your code with secret spaghetti its not secure
I recognize you! Iβve joined your discord before.
π
Timings are disabled in paper-global, but still:
π
doesn't mean the overhead comes from timings
thats because the check for whether to perform the timing is inside the executor https://imgur.com/a/tIUM4Yd
Investigation about the CF and Bukkit malware
I think that was sent like twice already
oh xd
Pretty sure it's just Men's Health Month
Whut
Just seemed super specific
Also just having come from Mental Health Month, the timing could be better
Yeah wtf is that status Afonso?
We know you can't accept people that think differently but you don't have to be a bitch about that
Bro what
β
It ainβt even this month dawg ππ
I wanna be aware now
as said, it was my mistake, it's not mental health, it's just health
awesome
am I allowed to be aware now
no
π¦§
you're allowed to be healthy though
I'm not
sucks
L
Table of Contents
How Apps are Affected
How to Prepare
FAQs
Discord has announced updates to our username system, and this article aims to provide details concerning app developers. Take time to ...
bro what
they say these
but then announce bots will stay on the current system?
I am confused
Oh I couldn't even find this lol
That would be great tbf. Imagine that you can create a high number of bots for free and they would share the same username system as normal users, keeping the current system for bots might be the only good idea they had for this update
or maybe usernames only for verified bots?
and current for non verified?
Ah yes
Yo guys
Is there any way to disable villager ai but still make it affect by gravity?
gravity as jumping?
I know there's this option https://docs.papermc.io/paper/reference/world-configuration#spawner-nerfed-mobs-should-jump
Never mind
I ended up switching to a player alike npc
But now i'm having this problem when i try to compile it
You could just give it slowness
what
if it's slowed (max) then it can't move
hey there is there a tool where I can paste my procedure code and it will show me a db diagram and show the relations between the different tables?
All the sites seem to be using some specific format instead of sql query code
what
https://paste.gg/p/anonymous/299e63749cd84b79a048c18cf717c1cd
nvm I got it translated but there a few errors that I cannot quite figure out it. I am having problems with the references to UserBan/UserMute and the User Table they both have a reference to eachother which makes the procedure fail. Any ideas tips what I can change (I'm fairly new to this)
I need help i want to make a custom enchanting gui with an Inventory but when i put the item in the slot where the item gets checked the enchantments will only apear when the item is put outside of the slot.
This is My Main.java code:
https://mclo.gs/zdwqvML
And this the EnchantingTableGui code:
https://mclo.gs/8WE29W5
can someone say whats wrong/help me pls?
There's a field for armor in the update attributes packet: https://wiki.vg/Protocol#Update_Attributes
However, I'm not sure whether will it work when you put in the client id
If yes, you will also have to cancel/modify relevant packets from the server, so it doesn't get overwritten
Note: just a guess
The damage reduction and stuff is probably calculated server-side, but the points itself is probably client-side
also note that there are more than just 'armor points' - take into protection enchantment for example
Oh, that appears to be the Bukkit way of doing this ^
Nah attributes exist in mc by default
Thoughts on the name "Systematic" for an essentials/core type plugin? (another one of those essential remakes but less bloated and with actually useful features, AND not in skript π)
what about
It's a Systematic approach
confusion
eh idk, doesn't sound that good imo, unsure, although it does describe exactly what it does
what sucks more is that I will probably have to make a discord server for people to get support
unless, after I get enough downloads, I try to join MOSS server?
idk
this was the plugin name I was thinking about when creating essentially essentials copy
but my motivation burned out quickly
the idea was to create a somewhat modular plugin, configuration-vise, so the server owners could choose what to use and not be overwhelmed with the sheer amount of things the plugin provides from the start
you could also go for something like SrvCore/SrvCrux, ServerFoundation, ServerEssence (synonyms)
what about "Essential"
yeah I am still deciding if I want an actual modular plugin (with actual jar modules) or if I just make it configuration-vise like you just said
big bruh
now that I think about it, which is more user friendly?
Nucleus used a module loader https://github.com/NucleusPowered/QuickStartModuleLoader, my plugin I planned on using the service loader and just disabling the modules configured off.
I find the idea of having to manually download a bunch of "modules" a little frustrating especially for updating, but Sponge also has a plugin(s) that do this too. https://github.com/CubeEngine/core Which is another "essentials" toolset, but split like I think you're talking about.
you could always download it from the cloud like papi
might just go with configuration-vise modules, although jar will get big. Probably not as big as essentials though, altough there are modules that shouldn't be present in a single jar.... AAAAAAAHHHH
spigoot users and their silly jar size concerns
not my concern rn, just not being organized
imagine having a built in chat, economy, discord bridge and whatever lol
If you're going kitchen-sink I would probably do a mix then
configurable modules for the smaller sink, and then outside jars for stuff like the discord bridge.
it's hard to go above the 8mb limit with the plugin itself imo
unless you're shading jda
discord bridge
shouldn't this be kept in something like DiscordSRV tho
Β―_(γ)_/Β―
Yeah max I've hit is 4mb and thats with a few shaded libs
whats the size limit on hangar?
apparently none for now
think I remember seeing kenny saying they should add one
I think these days file size is less of a worry than years ago
I mean paper is what 80mb now or something
u can also load stuff at runtime
like spigot's libraries?
OH HELL I gotta also look into the paper plugin system, cause fk spigot I am not supporting that
lol
it will only support paper and its forks. And only latest versions oficially
Aka the right way to do things
(and no messing with NMS hehe)
real
Hi guys!
How to give players items when they join i want that the armor is already enabled.,
essentialsx
Compiling plugins from GitHub, have never understood under my 10 years in hosting minecraft servers.
Is it the same everytime? If yes, does anyone have a good video which shows how you do it?
From Scratch -> getting the plugin .jar file.
that depends on how the plugin is built
if itβs maven or gradle it should be the same every time, except maybe you need to get a few jars (like nms or premium plugins) from somewhere
If notβ¦ youβre in for pain
imo any self respecting repo should have instructions for compiling it in the readme
of course that is very rarely the case
I would say it also depends, premium plugins often don't have it on purpose
just cause code is public doesn't mean you shouldn't make it harder to compile lol
if that makes any sense
and then theres songoda that the instructions are so easy even an 8 year old could compile it
im not saying songoda is good
And also some repos have public code, but donβt have a license meaning you technically canβt use it
Is there any super-simple self-host software that allows me to create files and edit them in the browser?
what kind of "files"?
like, text documents?
text yeah
you can host VSC in the browser super easy
hmm
would that cause a performance impact tho? especially since im sharing this with everything else on the oracle vps
and I probably won't really be editing the files on the browser, more like having one link to access a file that can be changed
if that makes sense
is this just for you?
yeah
just setup SSH in VSC
uhhhhhh
it should also be accessible from a regular plugin
although that plugin will likely be private
like a regular pastebin but editable
wait sorry what lol
wait
a plugin is editing a file?
waitwaitwaitnonono
https://textbin.net/
Like this (I can edit the file, and there's also a raw url) but selfhosted so I don't encounter any ratelimits or anything
Have the plugin access data that can be changed remotely
so I decided that something like this would be the best approach?
so the plugin is reading this data?
yeah, json data
Currently, the most I have for selfhosting is setting up nginx file directory thingy (I did it like 7 months ago I don't remember exactly what) but I have to ssh into the vps every time I want to change it
and https://textbin.net/ for example might encounter ratelimits
oh
uhhh
I mean for convenience π π π π
if you have it setup right, it should take like 3 seconds to open an ssh
if you have the ssh setup in VSC, it should take 2 seconds to open it and be able to directly edit the files you want to
wb intellij?
IJ isn't great about the remote experience in my experience
ah
especially for just editing a JSON file, VSC is way faster and easier
I only have vsc bc of the copilot thingy lol so I have very little experience in it but I'll take a look
it's very simple!
that's its biggest accomplishment is being super easy to pick up and simple while also having a ton of plugins and ecosystem
true
VSC has like a trillion plugins
i use VSC for every editing task that's not a full project, and IJ for full projects
so looking at a log file, or editing a yaml file, or a json file, or looking at a quick java class, etc. i use VSC
oh yeah sublime might have a remote dev thing
i dunno, vsc opens quick enough for me
and has an absolutely massive ecosystem
github 
has ratelimit βΉοΈ
but star it works! ty
took longer than it should've to figure out how to run commands
also I didn't know that ~/.ssh/config was a thing
ohhhhhhhhhhhhhhh i remember someone in helpchat saying that before
for some reason I never looked into it more
I've always just typed in domains and memorized the ip of my raspberry pi
lol
it was probably me lol
lol has rate limits?
i use it as api xD
wdym
even just restarting my test server a couple times triggers it
unless im doing smth wrong
I mean i use it to get data for some of my plugins xd
Didnt know it had rate limit xd

anyone knows a good config library?
kotlinx.serialization π
I heard sponge configurate was pretty good, never used it tho
Configurate is lovely π
I would've recommended triumph-config but RIP π
F
i havent used it, but https://github.com/A248/DazzleConf looks alr
Looks exactly likr what I was searching for, thanks
From what I have seen, prefer it over configurate
if you're using kotlin, this one https://github.com/sksamuel/hoplite has been absolutely amazing for me
just maps everything to a data class super easy
i dont think he is
Configurate does that too π
can you point me to where Configurate does that? all the stuff I've seen on the wiki looks like you access things with methods like root.node("messages", "count"), etc.
yeah not using kotlin
Hoplite just lets you define data class hierarchies and it gives you them straight up
super super nice
your loss π
Β―_(γ)_/Β―
Yeah not sure if the docs cover it super great, lemme see
does paper already includr snakeyaml? (btw)
yes
yeah i dunno, i just love the mapping to data classes
i'm surprised nobody has done similar for Java records
yeah same
the only right ways to do smth like this imo is like what dazzle does with proxies or by instantiating a record
mutating private fields is just no
even with javabeans still no cuz too much illegal state
yeah the way hoplite does it is just a one way kinda thing, to refresh your config you just throw away the old data class setup and generate a new one
no state at all, it's all immutable
So the annotation gets touched on here https://github.com/SpongePowered/Configurate/wiki/Object-Mapper
ie. @ConfigSerializable
and https://github.com/SpongePowered/Configurate/wiki/Kotlin
toches on how to set the mapper.
As far as retreving objects.
I usually set some sort of reference to the Config https://github.com/DrZoddiak/ZoddJoin/blob/74833f5b652188fa93df2b4c036942705bc42bf5/src/main/kotlin/me/zodd/zoddJoin/ZoddJoin.kt#L55
and then I just call the value I need. FooConfig#value
I'm honestly not sure, maybe not
I could give it a whirl, but I don't imagine it'd work without being directly supported
yeah i have just had super great experience with hoplite
much better documentation, etc.
oh wow
That's fair, I haven't tried many others mostly because Configurate works so well for what I've needed it for
efficent way to store player locations so ii can later send packets?
lets say i have scale of 400 players online at one world
maybe wait
i should just iter from an locaton instead
bruh only noticed now, DazzConf is 2 years old lol @hard dagger
unsure if it's a good idea to use something that doesn't get updated anymore
they guys still responding to prs n stuff so it should be fine



