#dev-general

1 messages Β· Page 28 of 1

quartz lake
#

but probably

queen saffron
#

But it just got uploaded so it might take a bit for higher qualities

gilded granite
#

looks completely fine to me

queen saffron
#

If the video is higher than 1080p

gilded granite
#

Also got it, will lower the volume of them in future episodes

quartz lake
#

I'd send screenshoot but I can not here

#

the fonts are just

#

like polished

#

idk

queen saffron
quartz lake
#

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

queen saffron
#

Wdym?

quartz lake
#

well, I mean, you gotta understand what the Minecraft plugin does for you

queen saffron
#

It's a literally spigot tutorial.

quartz lake
#

so you can set up a project without it

quartz lake
#

that they use in the video

queen saffron
#

Rider makes it pretty easy to do, as he said in the video its not necessary to know 100% at the start

gilded granite
quartz lake
#

I mean

#

you pin them to IDEA this way

#

but as it is the most popular IDE rn I think that is fine

gilded granite
#

Wouldn't want someone converting them to eclipse

inner umbra
gilded granite
#

Just a circlejerk, nothing is actually wrong with eclipse

quartz lake
#

I was starting with eclipse

inner umbra
#

πŸ‘€

quartz lake
#

cause I had a bad PC and it was looking easier for me

#

altho moved to IDEA

#

with time

gilded granite
#

Makes sense

quartz lake
#

but we all know the top developers use neovim only

inner umbra
#

Never liked intellij. Have used eclipse for the past 6-7 years now.

quartz lake
#

xD

#

I mean their opensource licenses, all that kind of stuff

quartz lake
#

that plugin still uses maven

#

that is like

#

very sad

gilded granite
#

from what I've seen maven tends to be easier to understand for a beginner

quartz lake
#

yeah, but then they have hard times to move to gradle

gilded granite
#

I'll make an episode on gradle but I was gonna start off with maven

quartz lake
#

but yup

#

it is simpler

gilded granite
quartz lake
#

that is your case

#

There are people that still use maven

#

xD

#

because gradle is hard

#

it is what they say

inner umbra
#

I still prefer build path πŸ˜‰

quartz lake
quartz lake
#

what makes your guide different

#

to many others

inner umbra
#

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.

inner umbra
gilded granite
#

What else, do you code exclusively in NMS?

inner umbra
gilded granite
#

Are you a masochist???

quartz lake
#

bro not just got some eggs

inner umbra
#

To add to that... the NPCLibrary uses my ReflectionLibrary

quartz lake
#

he is THE egg

inner umbra
quiet depot
#

@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

wind patio
#

what

wintry plinth
#

πŸ˜‚

wind patio
#

since when managing discord server is a job πŸ’€

gilded granite
gilded granite
split niche
#

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?

potent nest
#

maven lets you easily test, debug and hot-swap your plugin as well

split niche
split niche
#

btw with ACF do I still need to define the commands in plugin.yml?

split niche
#

Ah nice!

distant sun
#

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...

β–Ά Play video
ocean quartz
#

Lol

pastel imp
#

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)

crude cloud
#

yeah they hate you

prisma wave
#

also known as "they hate you"

pastel imp
#

Trying to find out if y'all joking or not xD

wintry plinth
#

You didn't hear?

pastel imp
wintry plinth
#

About Discords new policy

pastel imp
prisma wave
#

they hate you

#

you, specifically

pastel imp
#

:-:

wintry plinth
#

If you use DN you're blacklisted

prisma wave
#

ok sorry

pastel imp
#

feels trolled

prisma wave
wintry plinth
prisma wave
#

i wouldnt like to say

wintry plinth
#

Who's gonna tell him kekw

prisma wave
#

domain name

pastel imp
#

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

prisma wave
#

well

#

guess that takes care of that problem

pastel imp
#

yeah I suppose lol

#

discord still hasn't fixed it lmao

#

that's funny

prisma wave
#

small indie company

pastel imp
#

10 days with the issue

static zealot
crude cloud
prisma wave
#

dont worry

#

they are harmless

civic pelican
#

If anyone is good with PlaceholderAPI please check my support ticket ❀️

split niche
#

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); }

distant sun
#

decoration(ITALIC, false) or something like this

bronze olive
#

How can i configure my plugin right that i can use it as github repository?

rotund egret
#

I dont understand what you mean

agile galleon
#

I don't either

lavish notch
#

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.

rotund egret
#

Does Vault support multiple currencies even?

agile galleon
#

Vault is outdated and sucks though

wintry plinth
#

If it works why change it tho

agile galleon
#

Because it's no where near optimal?

rotund egret
#

Well does it support multiple currencies?

#

That would be one reason to change

agile galleon
#

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.

rotund egret
#

Looking at the api, it looks like a single currency system sadly. feelsbad

#

Sponge doesn't have these issues 😌

inner umbra
#

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)
prisma wave
#

it hangs the thread to print one line?

#

what is the input socket?

rotund egret
#

5gb line

sly sonnet
#

bruh

inner umbra
sly sonnet
agile galleon
#

what the hell

cinder flare
inner umbra
prisma wave
prisma wave
agile galleon
#

yeah

inner umbra
# prisma wave well yeah but whats the context? wheres the data coming from

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.

prisma wave
#

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

inner umbra
#
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...
prisma wave
#

you're never closing the output stream

#

it's just timing out

#

it still thinks there might be input to receive

inner umbra
#

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.

prisma wave
#

yeah well

#

think about it

#

you're doing these things synchronously

#

wait 80000 seconds for it to close, THEN close

#

need multiple threads

inner umbra
#

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.

prisma wave
#

erm

#

do you understand why it's hanging?

wintry plinth
#

Not using Hangar thats why

inner umbra
prisma wave
#

right

#

and you understand why you need multiple threads?

prisma wave
#

okay

#

so

inner umbra
#

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...)

prisma wave
#

probably

#

But then that would cause an issue of not knowing if I have a response...
i dont think this makes sense

inner umbra
prisma wave
#

yeah you'll have to do it "asynchronously" then

#

read 2 lines
write response
read 2 lines
etc

#

like mc does

#

with a "packet"

inner umbra
#

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.

wind patio
#

That's what you get you filthy non-casual-does-everything-on-his-own

inner umbra
hazy cape
#

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");
}
wintry plinth
#

ServerInfo target = ProxyServer.getInstance().getServerInfo("Hub");
player.connect(target);

hazy cape
#

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

pastel imp
#

We are doomed, someone opened an issue for hangar to add skript tag πŸ’€

#

(and some other stuff)

mental trench
#

Downvote it now!

#

(if possible xd)

distant sun
#

@pastel imp link so we can downvote

pastel imp
#

issue is... it's not only skript xd

#

and was already added to roadmap

#

:/

distant sun
#

F

hazy cape
#

How to authorize a crack player to connect to a bungeecord server in online mode, with all the other servers in offline mode?

stone linden
#

You would have to be using your own auth server

#

Or a forked version of bungee

pastel imp
#

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

wintry plinth
#

Uh..

hazy cape
#

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);
        }
    }
pastel imp
hazy cape
#

nobody know ?

pastel imp
#

not about knowing.

hazy cape
#

i just want make a jpremium clone

pastel imp
#

Β―_(ツ)_/Β―

hazy cape
#

but without the capcha shit and bugs

pastel imp
#

check their code, isn't it open sourced?

hazy cape
#

no

#

the code in unreadable

distant sun
#

I'm pretty sure is not only about setting the online mode to true/false

hazy cape
#

no its not

pastel imp
#

idk if we are allowed to give support to offline mode related stuff tbh Β―_(ツ)_/Β―

half harness
pastel imp
#

true

hazy cape
#

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

half harness
#

you should use offline mode if you want offline players to join

hazy cape
#

its 100% possible but my bungeecord knowledges sucks

half harness
#

πŸ€”

pastel imp
#

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

hazy cape
distant sun
#

Can you even allow cracked players on a premium bungee network?

distant sun
half harness
pastel imp
#

lol

half harness
#

that won't make it any more secure afaik

#

just introduces bugs/issues

hazy cape
#

Its less secured if you set offline mode on everytime, the premium players uuid are changed

pastel imp
#

you either accept cracked and have offlinemode or you don't.

hazy cape
#

and a lots a bugs a created

pastel imp
#

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

hazy cape
#

a non premium guy can join with a premium nickname

half harness
hazy cape
#

and it sucks

pastel imp
half harness
#

using online mode does not make it any more secure - it only keeps the player data... and leads to actual bugs

pastel imp
#

there are ways to see if an user is cracked or not lol

hazy cape
pastel imp
#

yeah

#

cracked uuids change constantly I think

hazy cape
#

And why plugin like jpremium are not using this method ?

half harness
#

no

#

cracked uuids follow this format converted to bytes converted to uuid

#

iirc

pastel imp
#

confusion

half harness
#

1 sec

#

lemme find code

distant sun
hazy cape
#

im lost

half harness
#

got it

pastel imp
#

same

#

lol

half harness
#
UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8))
distant sun
#

Yeah

#

What are you trying to accomplish @hazy cape ?

half harness
hazy cape
#

its ok

#

i found the solution

half harness
#

🀨

hazy cape
#

I can allow crack player to join online mode bungee

pastel imp
hazy cape
#

Its not more secure but better for what i want

#

and less difficult

pastel imp
#

that sounds really counter productive and a mess to work with but you do you

hazy cape
#

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

pastel imp
#

Β―_(ツ)_/Β―

hazy cape
#

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

distant sun
#

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 kek

hazy cape
#

bro is owning 50 players servers and talking to me

#

lol

distant sun
hazy cape
#

i just don't want shity servers

agile galleon
agile galleon
#

then close yours?

#

now we wait until they leave

#

lemme find that awesome meme

distant sun
#

@agile galleon did you figure out the weird shit aurelium skills was doing with that skull?

agile galleon
#

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

distant sun
agile galleon
#

afaik its for the player or smh idk

#

ask them

#

idk worked flawlessly for me when i was using it

stone linden
#

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

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

stone linden
hazy cape
#

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

stone linden
#

Oh I didnt know that method existed

#

It does it for you

#

Nice

hazy cape
#

maybe its trash lol

#

i made it in 1h

#

without any knowledge lol

stone linden
#

There is a thing called bungee plugin messaging, but it's pretty insecure

#

I would use this

stone linden
#

It sends packets through player connections

hazy cape
#

hoo ok thx bro i'll check that

half harness
stone linden
#

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

half harness
#

hm, I never thought of that lol
I don't really use plugin messaging anyways since it requires a player

stone linden
#

Also plugin messaging sucks because you cant use it if no one is connected to the spigot server

#

Yeah

half harness
#

its just regular sockets

stone linden
#

I wrote my own little shell for the PluginQuery thing

#

Yeah, but it's designed with a similar interface

half harness
#

ohh ic

stone linden
#
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

half harness
#

interesting

#

although

#

for more complex data do you just use json?

stone linden
#

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

split niche
split niche
#

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"}]']}

hazy cape
humble prism
#

ouch

pastel imp
#

am I the only one that can't download anything from discord?

#

looks like discord's CDNs are down or smt

#

lol

split niche
split niche
agile galleon
split niche
#

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?

static zealot
#

don't save data in lore

#

easy

split niche
#

I'm not saving data in the lore, I am displaying information to the player using the lore

static zealot
#

So why do you need to check the lore?

#

or more specifically one line of the lore

wise kernel
#

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

split niche
#

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)

cinder flare
#

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

split niche
#

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

cinder flare
#

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

split niche
#

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

cinder flare
#

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

split niche
#

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

cinder flare
#

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

split niche
#

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

cinder flare
#

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

split niche
#

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

cinder flare
#

they sell support!

#

which is the best model for premium plugins

split niche
#

Ahh that makes sense, fair enough

cinder flare
#

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

agile galleon
#

Most of my premium plugins are Freemium too

#

I like it

rotund egret
#

Freemium is the gold standard

pastel imp
#

Freemium > ALL (okay, not all, just Premium)

split niche
#

Wait, I could just store a hash of the line of lore

static zealot
#

I love open source but it ain't always the best solution.

split niche
static zealot
#

In the context of minecraft plugins tho, sure

pastel imp
#

not all, but some

split niche
#

Open source isn't really a good idea for stuff where exploits are especially bad, like anything security or involving money

static zealot
#

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

pastel imp
static zealot
pastel imp
#

Linux for the win

#

(I am a windows 11 user)

split niche
#

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

static zealot
#

we were talking about security tho

split niche
#

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

split niche
static zealot
#

but that's not true.

pastel imp
#

feel offended

#

TAKE IT BACK

#

😠

split niche
#

lmao

static zealot
pastel imp
static zealot
#

if it were true, I doubt they'd risk the loses for the performance and customisability gains

pastel imp
#

if you account all linux servers and devices, etc using linux, it's way more than windows

static zealot
#

both, open source and closed source have their advantanges and disatvantages.

cinder flare
#

yeah for security ideally you'd want transparency and contributions from other smart people

cinder flare
static zealot
#

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.

split niche
#

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

cinder flare
#

🀨

static zealot
#

that's not how it works

pastel imp
#

guess what, Android uses the Linux kernel, and guess what, Android has a 42% global market share on devices lol

cinder flare
#

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

static zealot
cinder flare
#

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

pastel imp
#

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.

split niche
cinder flare
#

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

split niche
#

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 πŸ˜…

hazy cape
humble prism
#

+... your using it for offline-mode connections no?

#

so bot attacks is gonna destory your server even harder

#

destroy*

hazy cape
#

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 ?

white kettle
#

Is there a way to actually download an ecloud placeholder in a plugin without having to execute /papi ecloud download? (Player, Luckperms).

crude cloud
#

yeah, just gotta do the http request and download it into the right folder

pastel imp
wind patio
#

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

wind patio
# hazy cape But i don't understand how async task work

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.

hazy cape
#

ok thanks

prisma wave
#

we're not really addressing the root issue here

prisma wave
#

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

crude cloud
#
  • ratio
agile galleon
#

idk if it fits but

rose wing
solemn laurel
#

weird, you assert region != null right before the NPE and it still gives that error?

#

or was the assertion added later on

solemn laurel
#

whats the point of it then

half harness
#

it's used for quick testing - if you enable a JVM flag, it'll throw an AssertionError, if not, it'll do nothing

solemn laurel
#

i thought it was supposed to throw an assertion exception

#

oh

half harness
#

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

solemn laurel
#

i dont even see 'region' in this scope... where is it defined

half harness
#

line 19

solemn laurel
#

oh, i did a bad ctrl + f

half harness
#

I've barely used worldguard regions before but I assume that the issue is on line 44 - 47 🀷

rose wing
#

the world guard api 😦 is very bad and many people say the same

pastel imp
rose wing
pastel imp
#

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?

rose wing
#

he said it was for a boxpvp and a survival

#

I added a sout in each if to check

#

and reaches 7.1

solemn laurel
#

like scratch said, the problem is in the getRegion() method, it's returning null

#

are you sure there is an actual region defined?

humble prism
#

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

inner umbra
humble prism
inner umbra
#

Ah. Only read your message.

inner umbra
#

πŸ‘

humble prism
#

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

boreal needle
#

is there a name for a trie that works on words instead of individual characters?

prisma wave
#

Why do you need that

boreal needle
#

i'm playing with permission stuff

crude cloud
prisma wave
#

^

#

and again, I’m fairly sure setOfflineMode is just gonna change a single flag rather than doing any heavy networking stuff

prisma wave
inner umbra
#

Online mode has authentication packets too. Offline doesn't. (I could be wrong though)

wind patio
rose wing
#

Is it very difficult to make a licensing system?

humble prism
#

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

pastel imp
solemn laurel
#

why do bukkit vector methods modify and return a reference

#

so everything needs to be cloned, super annoying

wind patio
#

yes

solemn laurel
#

if i just see Vector X = A.add(B) i automatically assume A is unmodified

crude cloud
#

bukkit

hard dagger
#

Real

long dagger
#

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.

distant sun
#

different color / opacity ?

long dagger
#

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.

distant sun
#

Also, lower opacity for the highlight looks better imo, as you can see the outline too

long dagger
#

yeah, I like it a lot better. maybe I could go with like a orange or something to contrast for the pecs.

half harness
#

instead of blue border

#

in both hover and selected

long dagger
long dagger
#

the forarms are currently highlighted

#

I prefer this:

#

I think I will settle for this for now.

distant sun
#

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.

rotund egret
#

I would use yellow as the selector, but I like the color scheme

#

err
yellow highlight
blue selected

half harness
long dagger
rotund egret
long dagger
#

I am not sure what to do for the selector color. Might just stick with the yellow.

wind patio
#

Should all database queries be done async? Or fetching 1-10 rows is generally fine on main thread?

agile galleon
#

An orangy hover would fit better imo

agile galleon
#

Even if it's just 4ms, can be the difference between 20tps and less

#

Especially if multiple have to run each tick

wind patio
#

It's on command

agile galleon
#

Who can run it?

#

But commands are pretty easy to make async

wind patio
#
// call
database.getData(params)).thenAccept((blah) -> {

});
// getData

return CompletableFuture.supplyAsync(() -> { ... }

would this suffice?

#

haven't really done much CompletableFuture stuff, mainly used Bukkit schedulers

prisma wave
#

whenComplete is preferable if it’s a β€œterminal” operation

#

Less likely to swallow exceptions

prisma wave
#

You never know when something might fuck up and suddenly a single network connection takes 2 seconds

wind patio
distant sun
#

whenComplete as he said, that will run the consumer you provide when the data is available

wind patio
#

Oh, I read that wrong

manic vector
#

Yo guys

#

Why every number pass trought the if?

wind patio
#

Wtf is this

#

Phpython?

manic vector
inner umbra
manic vector
inner umbra
manic vector
#

check the define

humble prism
#

^^

manic vector
manic vector
wind patio
inner umbra
#

Discord lagging for anyone else?

#

Finally! god damn!

manic vector
#

same for me

inner umbra
#

Sent that 2 minutes ago

humble prism
inner umbra
#

🀦 lagging again

inner umbra
humble prism
inner umbra
#

Anyways.... @manic vector I am surprised its not throwing errors to tell you you're asking if a string is >= and vice versa

manic vector
#

check the define

inner umbra
inner umbra
manic vector
#

i sent that message 5 minutes ago

#

Okay it's lagging a lot

wind patio
#

Yeh it is

inner umbra
#

Yeah my messages are spamming now too 🀦

wind patio
#

I sent an abomination of a message to my friend and its now spamming his dms with the same message

inner umbra
solemn laurel
#

Discord broken? Or fixed now

inner umbra
#

And you can't edit the messages while they are sending

inner umbra
solemn laurel
#

Ah

manic vector
#

i sent that message 5 minutes ago

inner umbra
#

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

hazy cape
#

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

inner umbra
hazy cape
#

ok ty i'll try

hollow cradle
#

hi

#

any devs intrested to help foir a minecraft client?
or ui makers

#

for my friends client

wind patio
#

no Im not

remote goblet
agile galleon
#

Nah

pastel imp
#

πŸ’€

pastel imp
#

for a top 3 leaderboard, what's easier, NPCs (with zNPC) or armorstands?

distant sun
#

NPCs look better

hard dagger
#

isnt zpncs like very buggy

rotund egret
#

You are thinking of bugs

distant sun
#

Probably, just use sigh Citizens and call it a day 🀣

pastel imp
#

costumer uses znpcs

#

and ngl, might just go with armorstands xd

hazy cape
#

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

#

========================================

hazy cape
#

My mysql db is on my vps and it is the same than my bungee

#

i tried with my vpn ip

#

and localhos

#

t

half harness
#

no i mean the error has a random ) right parenthesis

hazy cape
#

the user work perfectly and the db name is the same

#

)localhost

#

is the reel error message

half harness
hazy cape
#

idk

half harness
#

are you sure u didn't accidentally leave it in ur code/config

hazy cape
#

(new DatabaseCredentials("localhost"

#

no i don't think

half harness
#

Β―_(ツ)_/Β―

rotund egret
hazy cape
#

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

half harness
#

you do

#

sb.append("jdbc:mysql://)")

#

look at that closely

hazy cape
#

im

#

fucking

#

stupid

#

thanks bro

half harness
#

lol

#

np

hazy cape
#

i need glasses

hazy cape
#

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

mental trench
hazy cape
mental trench
#

append ?useSSL=false

#

at the end

hazy cape
#

Nice thanks

wind patio
#

No ssl???

#

Not secure ⚠️

prisma wave
#

I’m gonna hack you now

wintry plinth
#

SSL? Who needs that

sly sonnet
#

What is an SSL? 😎

agile galleon
#

Exactly

crude cloud
#

it's a kind of hot dog

hazy cape
#

How to send titles in bungeecord ?

wind patio
#

if you don't obfuscate your code with secret spaghetti its not secure

oblique heath
#

true

#

spagetti security by lobscurity

#

🦞

tame compass
rotund egret
#

Why not

#

Hmmm

tame compass
#

😝

agile galleon
#

Timings are disabled in paper-global, but still:

distant sun
#

πŸ’€

potent nest
#

doesn't mean the overhead comes from timings

hard dagger
agile galleon
#

ah pain

#

true true

pastel imp
#

Investigation about the CF and Bukkit malware

agile galleon
#

I think that was sent like twice already

pastel imp
#

oh xd

rotund egret
#

Pretty sure it's just Men's Health Month

agile galleon
#

Whut

rotund egret
#

Just seemed super specific

#

Also just having come from Mental Health Month, the timing could be better

pastel imp
#

yeah fk

#

true

agile galleon
#

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

hard dagger
#

Bro what

prisma wave
#

It ain’t even this month dawg 😭😭

wind patio
#

why can't it be whenever

prisma wave
#

well

#

thats just not how things work generally

wind patio
#

I wanna be aware now

pastel imp
prisma wave
#

awesome

wind patio
#

am I allowed to be aware now

prisma wave
#

no

wind patio
#

🦧

prisma wave
#

you're allowed to be healthy though

wind patio
#

I'm not

prisma wave
#

sucks

pastel imp
#

L

pastel imp
#

bro what

#

they say these

#

but then announce bots will stay on the current system?

#

I am confused

rotund egret
distant sun
pastel imp
#

and current for non verified?

distant sun
#

Or that, maybe

#

Though a badge to show that the bot is verified would be enough

pastel imp
#

that already exists

distant sun
#

Ah yes

manic vector
#

Yo guys

#

Is there any way to disable villager ai but still make it affect by gravity?

distant sun
#

gravity as jumping?

manic vector
#

Never mind

#

I ended up switching to a player alike npc

#

But now i'm having this problem when i try to compile it

sweet cipher
distant sun
#

what

half harness
worthy violet
#

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

wind patio
#

what

worthy violet
#

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)

bronze olive
#

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?

slate elk
#

are armor points calculated on cliient side?

#

or i can use packet to fake the amount?

drifting aspen
#

If yes, you will also have to cancel/modify relevant packets from the server, so it doesn't get overwritten

half harness
#

also note that there are more than just 'armor points' - take into protection enchantment for example

drifting aspen
distant sun
#

Nah attributes exist in mc by default

pastel imp
#

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 πŸŽ‰)

wintry plinth
#

It's a Systematic approach

wind patio
#

Fundamentals

pastel imp
pastel imp
#

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

wind patio
#

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

wintry plinth
wind patio
prisma wave
#

what about "Essential"

wind patio
#

EssentialZ

rotund egret
#

EssentialS

#

New Sponge essentials plugin 😌

pastel imp
pastel imp
pastel imp
rotund egret
#

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.

pastel imp
#

you could always download it from the cloud like papi

pastel imp
#

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

rotund egret
#

spigoot users and their silly jar size concerns

pastel imp
#

not my concern rn, just not being organized

#

imagine having a built in chat, economy, discord bridge and whatever lol

rotund egret
#

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.

wind patio
#

it's hard to go above the 8mb limit with the plugin itself imo

#

unless you're shading jda

half harness
#

Β―_(ツ)_/Β―

wintry plinth
pastel imp
#

true and true

#

will go with a configuration based one

humble prism
#

whats the size limit on hangar?

pastel imp
#

think I remember seeing kenny saying they should add one

wintry plinth
#

I think these days file size is less of a worry than years ago

#

I mean paper is what 80mb now or something

half harness
#

u can also load stuff at runtime

pastel imp
#

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)

wind patio
#

real

forest pecan
#

Hi guys!

#

How to give players items when they join i want that the armor is already enabled.,

sly sonnet
#

essentialsx

untold slate
#

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.

prisma wave
#

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

oblique heath
#

imo any self respecting repo should have instructions for compiling it in the readme

#

of course that is very rarely the case

pastel imp
#

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

obtuse gale
#

im not saying songoda is good

wintry plinth
#

And also some repos have public code, but don’t have a license meaning you technically can’t use it

half harness
#

Is there any super-simple self-host software that allows me to create files and edit them in the browser?

cinder flare
#

like, text documents?

half harness
#

text yeah

cinder flare
#

you can host VSC in the browser super easy

half harness
#

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

cinder flare
#

is this just for you?

half harness
#

yeah

cinder flare
#

just setup SSH in VSC

half harness
#

uhhhhhh
it should also be accessible from a regular plugin
although that plugin will likely be private

#

like a regular pastebin but editable

cinder flare
#

wait sorry what lol

half harness
#

wait

cinder flare
#

a plugin is editing a file?

half harness
#

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

cinder flare
#

okay this is a very much x y problem

#

what are you trying to do at a high level

half harness
#

Have the plugin access data that can be changed remotely

#

so I decided that something like this would be the best approach?

cinder flare
#

so the plugin is reading this data?

half harness
#

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

cinder flare
#

oh yeah that shouldn't be hard

#

why is sshing a problem?

half harness
#

oh

half harness
cinder flare
#

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

half harness
#

wb intellij?

cinder flare
#

IJ isn't great about the remote experience in my experience

half harness
#

ah

cinder flare
#

especially for just editing a JSON file, VSC is way faster and easier

half harness
#

I only have vsc bc of the copilot thingy lol so I have very little experience in it but I'll take a look

cinder flare
#

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

half harness
#

true
VSC has like a trillion plugins

cinder flare
#

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

half harness
#

ah

#

I currently use sublime text since it opens instantly but i might switch

cinder flare
#

oh yeah sublime might have a remote dev thing

#

i dunno, vsc opens quick enough for me

#

and has an absolutely massive ecosystem

mental trench
#

github xd

half harness
#

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

cinder flare
#

oh yeah dude

#

that makes ssh easy as pie

#

literally just ssh destination

half harness
#

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

cinder flare
#

it was probably me lol

mental trench
half harness
#

πŸ˜”

mental trench
#

i use it as api xD

half harness
#

wdym

#

even just restarting my test server a couple times triggers it

#

unless im doing smth wrong

mental trench
#

I mean i use it to get data for some of my plugins xd

#

Didnt know it had rate limit xd

half harness
#

Β―_(ツ)_/Β―

#

i mean if you don't send a lot of requests you don't trigger it

mental trench
pastel imp
#

anyone knows a good config library?

half harness
rotund egret
#

Configurate is lovely 😌

half harness
#

I would've recommended triumph-config but RIP πŸ˜”

pastel imp
#

F

hard dagger
pastel imp
#

From what I have seen, prefer it over configurate

cinder flare
#

just maps everything to a data class super easy

hard dagger
#

i dont think he is

rotund egret
#

Configurate does that too 😌

cinder flare
#

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.

pastel imp
#

yeah not using kotlin

cinder flare
#

Hoplite just lets you define data class hierarchies and it gives you them straight up

#

super super nice

cinder flare
pastel imp
#

Β―_(ツ)_/Β―

rotund egret
pastel imp
#

does paper already includr snakeyaml? (btw)

cinder flare
#

yes

pastel imp
#

ok ty

#

yeah will probably go with the one sparky sent

cinder flare
#

yeah i dunno, i just love the mapping to data classes

#

i'm surprised nobody has done similar for Java records

hard dagger
#

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

cinder flare
#

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

rotund egret
cinder flare
#

i see, hadn't read that section

#

does it work with like sealed classes and stuff?

rotund egret
#

I'm honestly not sure, maybe not

cinder flare
#

this shit is amazing

#

sum types 4 lyfe

rotund egret
#

I could give it a whirl, but I don't imagine it'd work without being directly supported

cinder flare
#

yeah i have just had super great experience with hoplite

#

much better documentation, etc.

half harness
#

oh wow

rotund egret
#

That's fair, I haven't tried many others mostly because Configurate works so well for what I've needed it for

slate elk
#

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

pastel imp
#

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

hard dagger