#help-development

1 messages · Page 863 of 1

pliant topaz
#

When I have a 2D Integer array like this: ```Integer[][] test = {{1,2},{3,4}};``` How would I go about getting the first index of3`? Would i have to go through every array inside of it?

wet breach
#
test[1][2]
pliant topaz
#

no, not like that

#

I mean, how would I specifically search for the 3

#

when I don't know where it is

wet breach
#

depends which 3 you are looking for and its position

shadow night
#

Wait, can you not do an int[] or is there some disadvantage I don't know about

pliant topaz
#

Okay, wait

eternal night
#

can certainly do an int[][]

shadow night
pliant topaz
#

okay ig

wet breach
shadow night
pliant topaz
#

no, only one loop, second one I can index, eright?

shadow night
#

Index?

wet breach
#

how would you index it? you have no idea where the 3 is at

pliant topaz
#

Like get the index of it

#

if its only a int[] then

wet breach
#

I think you don't understand how multi dimensional array works?

shadow night
#

I feel like you are missing some basica of java or programming in general

pliant topaz
#

No wait

#

Im bad at explaining

#

Like, I go through every array of the entire one, so I only have a normal array. Then in this normal array i would index the thing I'm looking for

shadow night
#

Index?

pliant topaz
#

get the index of the thing I'm searching, pretty sure I've used hat before

wet breach
#

Let me see if this clarifies anything. If you have a 2D array, index 1, contains all the index of the second, and index 2 also has the same. So [1][1], [1][2]....[2][1]. [2][2] and so forth.

shadow night
#

@wet breach Can you count to 10 in binary

wet breach
pliant topaz
shadow night
shadow night
pliant topaz
#

Cannot it be converted?

shadow night
#

It can, yeah

pliant topaz
#

so I think I'll do that ig then, right?

shadow night
#

¯_(ツ)_/¯

shadow night
wet breach
#

but you seem to have it down, that it just basically keeps shifting left with the 1

pliant topaz
#

I learned that in 2nd grade lmfao

#

We called it '2 number system' back then

#

It was exam-relevant

shadow night
#

Damn, in 2nd grade I learnt the 100

shadow night
pliant topaz
#

ik

minor junco
wet breach
#

2 number system? Do you mean to say base 2 instead?

shadow night
#

We also have octal and hexadecimal a lot in computers iirc

wet breach
#

pretty weird to say 2 number system

shadow night
wet breach
#

no it isn't wrong technically lol

shadow night
#

Lol

shadow night
#

Counting up to 10 in hex is easier

#

1 2 3 4 5 6 7 8 9 A iirc

pliant topaz
wet breach
echo basalt
#

you're not alone

pliant topaz
#

:)

shadow night
echo basalt
#

I, too, pretend I know my stuff

minor junco
pliant topaz
minor junco
#

¯_(ツ)_/¯

shadow night
wet breach
#

so, 00 in hex is 0 and then 01 etc

shadow night
#

Such as 4F 5E 01 2A etc.

wet breach
shadow night
#

Doesn't 4 bits go up to like 15 unique numbers

pliant topaz
#

jep

#

but 0 counts to

#

so we got 16

wet breach
shadow night
#

Why is there a pair tho

pliant topaz
#

easier for representation ig

wet breach
#

because a byte is 8bits

shadow night
#

Ahh

wet breach
#

therefore, you can fit 2 hex digits in a byte

shadow night
#

Damn

#

In 32 bits I can fit a whole 2 billion unique numbers or something

wet breach
#

FFFF,FFFF power of 16 is the largest hexadecimal number in 32bits

minor junco
#

4 if you use a sign

shadow night
#

unsigned numbers are funny

wet breach
#

fun fact 4,294,967,295 is the largest known odd number of sides of a constructible polygon

hollow oxide
#

pom.xml: https://hastebin.skyra.pw/vixaziqalu.htm

the maven reload on the IDE seems to find it tho and this is my usage:

for (List<String> between:aa){
            String type = between.get(0);
            between.remove(0);
            Expression expression = new Expression(String.join(" ", between));
            String resu = "";
            try {
                BigDecimal result = expression.evaluate().getNumberValue();
                if (type == "int") {
                    resu = "" + result.intValue();
                } else if (type == "float") {
                    resu = "" + result.floatValue();
                }
            } catch (EvaluationException | ParseException e) {

                return "bad statement";
            }
            commande = commande.replace("£" + String.join(" ", between) + "£", resu);
        }

it's making operations between £ ||/tp £4+3£ 4 5 actually tp in 7 3 5 ||

wet breach
#

its factorization also happens to be exactly the 5 known Fermat primes 3 * 5 * 17 * 257 * 65537

hollow oxide
#

i'm better in pom and java but still dumb xDD

#

my remaping is now fckd

shadow night
#

Damn

remote swallow
#

?paste ur pom

undone axleBOT
hollow oxide
remote swallow
#

its this

#

dont change location in the shade plugin

#

If you’re using maven for your Spigot plugins (which you should do), it’s easy to make maven automatically save your plugin’s .jar in your plugins folder. There’s two ways of doing this: 1. The lazy way (not recommended) If you only work alone on one computer, you can just directly declare the output location in...

hollow oxide
remote swallow
#

no it isnt

#

maven-shade-plugin v maven-jar-plugin

hollow oxide
#

u right

elder harness
manic crown
#

Does someone know why sometimes the background color is not transparent?

TextDisplay t = (TextDisplay) damager.getWorld().spawn(interaction.getLocation().add(0, 1, 0), TextDisplay.class);
        t.setText(AdventureUtil.serialize(Component.text("-" + damage).color(TextColor.color(0xff0000))));
        t.setBillboard(Display.Billboard.CENTER);
        t.setAlignment(TextDisplay.TextAlignment.CENTER);
        t.setBackgroundColor(Color.fromARGB(0,0,0,0));
        Bukkit.getScheduler().runTaskLater(SillySMP.getInstance(), () -> {
            Transformation transformation = t.getTransformation();
            transformation.getTranslation().add(0, 1, 0);
            t.setInterpolationDelay(0);
            t.setInterpolationDuration(20);
            t.setTransformation(transformation);
        }, 4);```
buoyant viper
#

looks like in theory it should /just work/, idk

elder harness
#

It will work, but it is deprecated. I want to avoid any deprecation obviously

smoky anchor
manic crown
#

it does not appear always, it's rare, like 1-5 out of 20

smoky anchor
#

will relogging fix it perhaps ?

#

Try using the other spawn function with supplier (or consumer, I never remember)

manic crown
#

it's only for a short time there (2 seconds)

smoky anchor
#

what
Try the other method
But otherwise, you probably have something else interfering with the entity

manic crown
#

like here, it indicate damage

manic crown
smoky anchor
#

honestly did not expect that to fix it
Glad it did tho
Also, I learnt something new :D

manic crown
#

haha,
I also have to have at least a delay of 2 ticks, otherwise, it will teleport

quaint mantle
#

Guys... have these always existed?

chrome beacon
#

Maybe a bit longer

quaint mantle
#

Would this be faster?

#

Hmm

quaint mantle
elder harness
#

Finally managed to get some sort of "fake" enchantment through NBT tags, but it still shows. I'll be looking for an approach, unless someone knows how I can add an enchant to an item without it showing on the item

worldly ingot
#

but... why are you doing that?

elder harness
#

I want a fake glow effect

worldly ingot
#

I mean if you're already editing NBT tags, you should just be able to give it Enchantments: [{}] (or whatever the enchants tag is) and it should glow

#

Not that isn't a client quirk and you probably shouldn't 100% rely on it, but it should work

elder harness
#

It appears that since recently "empty" compound tags get stripped away automatically

worldly ingot
#

that's very possible lol

smoky anchor
#

I hope you tested that and not only relied on my word

elder harness
#

I was thinking of adding the flag to items that hide enchantments from the lore as long as it doesn't have Minecraft enchantments on it. Then, remove the flag when it does. However, the enchant event does not get fired when a plugin adds an enchantment through code (ItemStack#addEnchantment), rather than in-game

smoky anchor
#

Once I hacked the vanilla enchantment registry, created a fake enchant and added that to the item.
I do not remember if it showed anything in the lore tho :D
But those were the fun days when I just refused to use API for some things.
Also, please don't even try this, for your own sanity.

elder harness
#

With that come two downsides:

  1. Issues will arise as soon as you try to remove the enchantment from the item, since the object is casted to CraftEnchantment, causing a ClassCastException. You could also extend your custom enchantment class from CraftEnchantment, but then you are very far away from home, implementing all the overrides.
  2. One of the overrides from the Enchantment class is the getItemTarget method that has to return a EnchantmentTarget enum constant. I want to make it so the "fake glow enchantment" can be applied to all items, so I would simply use EnchantmentTarget.ALL, but that value is deprecated, limiting you to a specific type of item. You could make a custom class extending Enchantment covering all EnchantmentTarget values, but that will only cause more brain damage.
#

Honestly, there must be an easy way for this, no?

inner mulch
elder harness
#

I'm making custom enchantments, so I want the item to have a glow effect when one of my custom enchantments is applied to the item

#

As simple as that

inner mulch
#

okay, why dont you just apply some enchant and then apply itemflag.hidenechants?

tender shard
#

but it might get removed whenever an anvil etc is used, or whatever

elder harness
tender shard
elder harness
tender shard
#

oh that didn't happen in earlier versions

#

sad

#

well you could change the packet sent to the client whenever the item is updated or whatever... but that's also messy

#

why not just extend CraftEnchantment

elder harness
tender shard
#

don't ask me, 'm angry about it myself lol

#

not my fault kek

elder harness
slow dagger
#

do you guys know how can i type something and move them little to the left, i think something like (offset:-10)

elder harness
#

I'll see where extending from CraftEnchantment will lead me

shadow night
slow dagger
#

mfnalex

#

can u help me pls

elder harness
tender shard
# elder harness "Just" 😭

tbh isn't it only this?

    static class NmsGlowEnchantment extends Enchantment {
        
        static NmsGlowEnchantment INSTANCE = new NmsGlowEnchantment();

        protected NmsGlowEnchantment() {
            super(Rarity.COMMON, EnchantmentCategory.BREAKABLE, EquipmentSlot.values());
        }
    }

    static class CraftGlowEnchantment extends CraftEnchantment {
        
        private static final NamespacedKey KEY = NamespacedKey.fromString("whatever:glow")

        public CraftGlowEnchantment() {
            super(KEY, NmsGlowEnchantment.INSTANCE);
        }
    }
shadow night
#

which idiot decided relocating all this shit was a good idea

quaint mantle
#

me

shadow night
tender shard
#

which ones?

#

what I sent should compile fine I guess

#

craftenchantment already delegates everything to the NMS enchantment, and NMS enchantment has default values for everything

#

only problem is that you'll need one CraftGlowEnchantment and NmsGlowEnchantment per NMS version

elder harness
remote swallow
#

that enchantment class for nms glow enchant is the nms varient

#

not bukkit

tender shard
#

but you should override isCursed() because custom enchantments are cursed since 1.20.3

quaint mantle
#

Yo wait I had a question would it be possible to make some kinda system like this? For those lazy staff members to punish players through discord?

elder harness
#

Now creating an implementation for each version is quite a struggle

inner mulch
quaint mantle
#

It would be role specific though

#

are there any projects on this?

#

hallo deutscher freund

inner mulch
#

hallo :)

#

you german too?

quaint mantle
#

of course

inner mulch
#

you wanna go in a vc?

quaint mantle
#

okay... im not but I know german

inner mulch
#

oh

quaint mantle
#

betrayed 😭

#

I cant really say mutch can you post the whole thing?

inner mulch
inner mulch
#

but i want it to search through every request

quaint mantle
#

does the problem only appear when you do return instead of break?

inner mulch
#

yeah theres not much code above this, its just checking if player is null or if sender instanceof player

inner mulch
quaint mantle
#

Did this ever work, is it just the problem with return?

tender shard
#

you should make even more things static to avoid ever being able to reuse your classes kek

inner mulch
#

why should i reuse manager objects

tender shard
#

for example in case you want to have one manager per world later on, or similar

#

i mean you don't know what you wanna do in 3 months

#

or to be able to unit test your manager

inner mulch
#

yo one question does this static manager stay in memory for ever?

tender shard
#

as long as the classloader exists

#

when the classloader gets GC, your manager can eventually be collected too

inner mulch
#

ok good, i thought this i gonna steal all my ram

tender shard
#

huh

#

how would that happen?

inner mulch
#

i dont know objects in memory, take memory

#

to many objects = no memory left

quaint mantle
#

Anyways problem isn't solved yet :p

tender shard
#

yes but I bet that your manager only has like a static Map and that's basically all it stores i guess

tender shard
#

so it basically has 1 downside and 0 advantage

tender shard
inner mulch
#

oh i deleted it

#

wait

quaint mantle
#

send library classes too

inner mulch
#

all the tpa accepting stuff works. all the system have worked, just this loop to distinguish doesnt work

tender shard
#

and what does it actually do?

quaint mantle
#

Wait whats here
case TPA_HERE:
continue;

inner mulch
#

if wrong type continue searhcing

#

so it loops more

quaint mantle
#

switch is unnecessary

tender shard
#

so what's the issue exactly?

inner mulch
tender shard
#

also you continue if TPA_HERE, and you return if TPA

inner mulch
#

its just skipped

tender shard
#

yes because you continue if it's TPA_HERE, and you return if there's any TPA in the list

#

the only possibility that ht emessage is sent if there's any TPA in the list that is neither a TPA_HERE nor a TPA, and if that happens to occur before TPA

#

btw very bad idea to name the enum class the same as one of its constants

quaint mantle
#

i don't even understand this thing, can you send more tpas to one player or what

tender shard
#

it should be sth like TpaType { TPA, TPA_HERE }

inner mulch
#

and player's can send each other both types

quaint mantle
inner mulch
#

i guess i could split everything up

#

but i didnt want to have so many hashmaps

quaint mantle
tender shard
#

show your TPA class

quaint mantle
#

you are just duplicating code

#

I guess you do the exact same for tpahere

quaint mantle
inner mulch
#

?paste

undone axleBOT
tender shard
quaint mantle
tender shard
#

show your TPAType class

inner mulch
#

theres not much

tender shard
#

yeah in that case, what I said earlier is true

#

you continue if it's TPA and you return if it's TPA_HERE

#

so it can never leave the switch

inner mulch
#

oh thats true there is not break statement

tender shard
#

unless the last element in the list is TPA

quaint mantle
inner mulch
#

switch is always faster

#

than if

tender shard
#

no

inner mulch
#

no?

tender shard
#

also who cares whether it's technically faster

quaint mantle
tender shard
#

if you want your stuff to be faster yo ushould use one letter method names and classes lol

#

totally not worth it

shadow night
inner mulch
#

so im guessing splitting the tpatypes in 2 different hashmaps would be better?

tender shard
#

haha if only you could be able to simply instantiate a second manager class now

inner mulch
#

or i can create a tpaheremanager

shadow night
#

🇩🇪🤯

inner mulch
#

(static)

tender shard
#

TpaManager tpaHereManager = TpaManager();
TpaManager tpaManager = TpaManager();

#

would be so easy if not everything would be static 😛

inner mulch
#

but static is better :(

shadow night
quaint mantle
#

why?

tender shard
#

util classes are fine to be not-static, which is if they require an instance or access to any instance members

shadow night
#

This is Schnitzel: schnitzel. Schnitzel uses static only for utility classes, the singleton pattern and nowhere else. Be more like Schnitzel.

inner mulch
#

but why use instances if static is simply better?

shadow night
#

Static is always bad besides singleton pattern ig

tender shard
#

if static stuff would "simply be better", then sure, you should do it like that. but that statement is based on a false assumption

south elm
#

i made a spigot/bukkit plugin but my server cant run it can someone help me

tender shard
#

?noerror

#

hm

#

whats the command

inner mulch
#

?nocode

undone axleBOT
#

It’s hard to answer a programming question without code
Oh no! You ran into a problem. But no worries, people are willing to help, but first they need to see your code. This is because otherwise, they would be providing help based on guesses instead of concrete knowledge. Whether it be a compile error, runtime error, or an unexpected output, I'm sure that if you were to provide code, you'd receive a quick solution.

tender shard
#

?notworking

undone axleBOT
#

"Does not working" is a useless statement. Please describe what exactly is not working, what you expect it to do, and what actually happens. If you get any console errors, also ?paste the entire stacktrace.

shadow night
#

Is there ?nolog

tender shard
#

?nocommand for that

shadow night
south elm
#

where can i send the code to

tender shard
#

?paste

undone axleBOT
quaint mantle
shadow night
quaint mantle
inner mulch
#

yeah

shadow night
#

Usually for managers you'd use a singleton pattern

inner mulch
#

singleton = static

tender shard
shadow night
south elm
#

i pasted it

tender shard
shadow night
inner mulch
#

no

shadow night
#

Yes

south elm
#

i used the shortcut crtl + s

shadow night
#

The singleton pattern is probably the only thing you can use static for

tender shard
south elm
#

sorrty

inner mulch
shadow night
quaint mantle
#

Lol what is this monstrosity org.bukkit.event.Listener

inner mulch
#

static but exactly the same

shadow night
#

It still allows you to extend or instantiate the class without running into stupid static problems

shadow night
inner mulch
#

i guess thats true

shadow night
tender shard
# quaint mantle Oh

I'll give you an easy example. Imagine that you made a CooldownManager used to keep track of people's cooldowns for a /tpa. It has a method "hasCooldown(Player)". Works fine.

Later on, you add another command to your plugin: /spawn. Spawn also should have a cooldown, but a separate one. Now you add a hasSpawnCooldown(Player) to your cooldown class.

If your CooldownManager would not be static, you could just do it like this:

// In your TpaCommand class:
private final Cooldown tpaCooldowns = new Cooldown();

// ANd i nyour SpawnCommadn class:
private final Cooldown spawnCooldowns = new Cooldown();

You can now create as many instances as you want, they are all indepent and you don't have to expand your class ever. If however the "hasCooldown" method in your cooldown manager is static, you are never able to reuse it, and you'd have to write nasty spaghetti code that gets unmaintable as soon as you added the third command

quaint mantle
tender shard
shadow night
tender shard
south elm
#

give me one sec if u can send me an other paste ill send u what happens when i startup the server

shadow night
#

Am I high

quaint mantle
#

why is this openTrixEnchantingGUI
not static?

tender shard
shadow night
#

Damn

tender shard
south elm
#

i have copied the startup in the terminal can i paste it to u

quaint mantle
#

paste it here :p

south elm
#

?paste

undone axleBOT
south elm
quaint mantle
#

com.example.TrixEnchantingPlugin...

south elm
#

yeah but it is compiled with it so i dont get it

quaint mantle
#

you need to set your main class in the plugin.yml

#

Is this your package?

south elm
#

i only have this

quaint mantle
#

Well it seems like you put everything in the resources folder?

shadow night
#

🇩🇪schnitzel

south elm
#

if u want to i can zip the plugin folder so u can checl

quaint mantle
#

i mean before it is compiled

south elm
#

yeah

tender shard
quaint mantle
tender shard
#

are you using maven? @south elm

#

or gradle?

south elm
#

maven

tender shard
#

you do know what packages in java are?

south elm
#

not exactly no this is my firt time working with java to this extent i made a sort of memory with it in school but i went more to web dev

#

this do i get when i pres the button reload all maven projects

#

@quaint mantle i send u the full project prived

wintry lynx
#

Anyone know a good way to stop a projectile from breaking on hit? Like a snowball, ender pearl, egg, etc? I'd prefer not to create another projectile as well.

south elm
#

@tender shard can i send the project to u mabye you can see what i did wrong mabye i place some shit wrong

tender shard
#

no sorry, your whole project is messed up

#
  1. You have declared a different package than your class is actually in. And you even used "com.example" wwithout changing it
  2. You have declared listeners / eventhandlers in your main class which does not implement Listener and also isnt registered as listener

It looks like you blindly copy pasted code from random places, through it into a java file and changed things until it compiled

tender shard
shadow night
#

And you should also learn java if you don't know it yet

south elm
#

can i ask for assistanse for example by chat gpt or someting if i dont know or is it beter to ask here

wintry lynx
#

Use both Java docs and Spigot API docs.

#

You have to learn Java before you can code a plugin

#

But there are plenty of good tutorials online

shadow night
#

?learnjava

undone axleBOT
south elm
#

because i wanted to recreate the mod enchantment plus but than in the form of a plugin and than on the normal enchantment table itself

shadow night
south elm
#

i have learned java in school but that wasnt mutch i now the basics but thats all

wintry lynx
tender shard
#

that's why I'd suggest you to create a new project from scrathc, then FULLY read the blog post I sent, and follow it, and then feel free to come back here again if you got any specific questions (or questions about the blog post)

south elm
#

i just dont know where to start anymore that the point java isnt my strongest side but i need to program it because the server we creating is going live i prob think its beter to pay someone to do it for me than do it myself because i have a 40 hour job beside it but i dont know anyone who will

shadow night
#

I'd do it for free if I had experience in enchants

wintry lynx
tender shard
wintry lynx
tender shard
#

not really

#

java is poor OOP

shadow night
#

I love the java oop

#

It's just so mmm

#

Amazing

wintry lynx
#

I use like 12 code languages and Java is by far the most finicky

tender shard
#

primitives are not objects so I'd rather say java is OOP--

wintry lynx
#

"You can't case this to this"
THEY ARE BOTH NUMBERZ!

shadow night
wintry lynx
#

Lol

tender shard
#

blocks of arbitrary code are also not objects

tender shard
wintry lynx
#

Python is better xD

tender shard
#

yeah I guess everything has its own advantages and disadvantages... even lua lol

shadow night
#

caseesac

#

I've been told go is the superior programming language

tender shard
#

talking about shell hate: try working with arrays or maps in bash

wintry lynx
#

I use Lua too. Its... basic?

shadow night
wintry lynx
#

I don't have a better description

tender shard
shadow night
#

What about php

tender shard
#

myobject:somemethod vs myobject.somemethod

molten hearth
wintry lynx
#

Well yea, but in Java you have "&&" instead of just "and" so they all got their quirks

shadow night
tender shard
molten hearth
#

i love the standard library

#

it has so many useful functions

shadow night
tender shard
wintry lynx
tender shard
shadow night
wintry lynx
wintry lynx
tender shard
#

there's also a difference between & and &&, and | and ||

wintry lynx
#

And that

orchid trout
#

1 can be a mathematical function and the other cannot

shadow night
wintry lynx
#

It just acounts it based on context

orchid trout
#

i meant like

#

the graph

#

if you put it on a graph

shadow night
#

I just thought, couldn't you maybe somehow force gradle into auto-replacing "and", "or", etc. by "&&", "||", etc.

wintry lynx
shadow night
#

Ig

tender shard
#
if(a == null | a.getType() == Material.AIR) // Null pointer if a is null because | checks both arguments, eve nif first one is already true
#

and || just skips executing the right part if the left is already true

wintry lynx
#

May I ask, why that would ever be needed?

shadow night
#

Why would you use an or there anyways

tender shard
#

I confused true and false in my answer

shadow night
tender shard
#

have edited it

tender shard
#

e.g. if the method is pure = false

wintry lynx
#

Anywho! I was here to ask a question and got distracted.

shadow night
#

I'm pretty sure you could use bitwise operators to like add or subtract bits

tender shard
wintry lynx
#

How does one stop a projectile from breaking when it collides with an object?

#

Like a snowball

tender shard
#

i think you can cancel the ProjectileHitEvent

wintry lynx
#

I did... But it. Doesn't work?

#

I don't know what it cancels tbh

#

If not the breaking of the entity itself

tender shard
#

show your code pls and also which projectile have you tried it with?

#

iirc fireworks also use FireworkExplodeEvent

wintry lynx
#

Primary snowball as I can control item texture easy

tender shard
#
@EventHandler
onHit(ProjectileHitEvent event) { event.setCancelled(true); getLogger().info("Don't break!"); }

Just do sth extremely simple like this, does the snowballs still break?

wintry lynx
#

Yes lol

#

I had it broadcast a message of "STOP"

#

And it did

#

And it broke

tender shard
#

hm in that case you'll probably need to create a custom NMS projectile entity and override whichever method is reponsible for the projectile to "hit"/"break"

lost matrix
#

EntityRemoveFromWorldEvent when?

wintry lynx
#

Problem is I have no clue what's responsible for its breaking

wintry lynx
tender shard
#

yeah some1 PR it

lost matrix
#

downstream has this

tender shard
#

unfortuantely they're afraid of creating pull requests

tame wolf
#

How does adding new events to spigot even work?

#

Prettu curious about this

wintry lynx
#
    public void projectileCollision(final ProjectileHitEvent event){
        Projectile ogProjectile = event.getEntity();
        if (ogProjectile.getType() == EntityType.SNOWBALL) {
            Snowball projectile = (Snowball) ogProjectile;
            ItemStack item = projectile.getItem();
            String oHandItem = OraxenItems.getIdByItem(item);

            if (oHandItem != null) { //Find Oraxen ID in Config
                String configSearch = "item_rclick_events.throwable." + oHandItem;
                if(config.get(configSearch) != null) {
                    if (config.get(configSearch + ".ricochet") != null) {
                        Double force = (Double) config.get(configSearch + ".ricochet");
                        event.setCancelled(true);
                        if (force != null) {
                            if (event.getHitBlockFace() == BlockFace.UP || event.getHitBlockFace() == BlockFace.DOWN) {
                                projectile.teleport(new Location(projectile.getWorld(), projectile.getLocation().getX(), projectile.getLocation().getY() + 5, projectile.getLocation().getZ()));
                                //projectile.setVelocity(new Vector(projectile.getVelocity().getX(), projectile.getVelocity().getY() * -force, projectile.getVelocity().getZ()));
                            }
                        }
                    }
                }
            }
        }
    }```

I know there are a LOT of nested 'if' statements. I plan to organize them better later.
lost matrix
tame wolf
#

Like, does spigot use NMS? How does a server implementation even work?

tender shard
# tame wolf How does adding new events to spigot even work?

you simply take the vanilla code and search for the code that you want to change. for example imagine there's something like this in entity's tick method:

// runs every tick
if(thisEntity.getHealth() < 0) {
  thisEntity.removeFromWorld();
}

Now you could add an EntityDeathEvent like this

if(thisEntity.getHealth() < 0) {
  EntityDeathEvent event = new EntityDeathEvent(thisEntity);
  getPluginManager().callEvent(event);
  if(!event.isCancelled()) {
    thisEntity.removeFromWorld();
  }
}
#

just an example ofc

tame wolf
#

Huh, that doesn't actually look that complicated, looks pretty similar to plugins actually

tender shard
#

obviously that patch is huge but that's just because so many things were changed there

obsidian drift
#

Is there any way through NMS to make an Armor stand have pathfinder goals?

shadow night
lost matrix
# tame wolf New PR

Ah ok.
NMS = net.minecraft.server
It refers to the server implementation of mojang.

Spigot is pretty much just a bunch of interfaces, which lets people write code and keep it the same
for multiple versions, because the interfaces dont change. (NMS changes often)

But those interfaces (obviously) dont do anything on their own. They need to be implemented.
This implementation is CraftBukkit. It is a link between Spigot and NMS.

Additionally, spigot creates changes in Mojangs code to interweave functionality.

An example could look like this:
Originally

public void damage(double amount) {
  this.health -= amount;
}

Patched:

public void damage(double amount) {
  EntityDamageEvent event = new EntityDamageEvent(this, amount);
  Bukkit.getPluginManager().callEvent(event);
  if(event.isCancelled()) {
    return;
  }
  double dmg = event.getFinalDamage();
  this.health -= dmg;
}
tender shard
tender shard
tame wolf
#

Might become a contributor 😁 doesn't sound too complicated, before I was pretty frightened by it

lost matrix
#

Its really not that bad. The most difficult part is understanding mojangs shenanigans.

tender shard
#

second one explains how to setup your IDE and create actual changes

#

first one is a tiny form you have to fill out to contribute to spigot, it's basically just a promise that you say "Whatever code I contribute to spigot, I wrote myself and haven't stolen somewhere else"

eternal night
#

the more fun promise being that you grant spigot permission to use your code indefinitely

kindred valley
#

👍

tender shard
eternal night
#

that is indeed how open source works most of the time yes

#

tho I guess undertsandable after the bukkit DMCA drama

tender shard
eternal night
tender shard
#

idk it's a valid question

eternal night
#

I mean, that is what you got licences like MIT for

tender shard
#

if people don't want to give away the rights to their contributions, they just shouldnt contribute imho

eternal night
#

I mean, you yield people the right to use it via an open source licence ?

quiet ice
eternal night
#

which is what supposedly happened in the wolverness case

quiet ice
#

yeah, bukkit's license was violated by craftbukkit from the get-go, people warned the original authors about that, original authors called that senseless scaremongering and the rest is history as they say

#

Which is why only craftbukkit got nuked, but not bukkit

tender shard
#

I could also just release something under a "anyone may use this, no questions asked" license, then accept a contribution from someone else and someone else ofc still has the urheberrecht about their contribution

eternal night
#

cat_what the github TOS specifically state your contributions to projects are licenced under the same licence as the project

tender shard
#

idk what github says but nobody had mentioned github until now

eternal night
#

I mean, that is where it is at

tender shard
#

idk spigot is definitely not on github

eternal night
#

not anymore because it can't xD

#

but I mean, even if not

#

You'd fork the repo, the code in there is MIT licenced, you add your own code and don't adjust the project wide applying licence.
You then publish your changes to PR stuff, gg you just published an MIT licenced repo

#

sure its a fork of the one you contribute to

#

but the upstream you PR into can just pull your work, they are MIT licenced after all

quiet ice
#

However if the license is something like CC0, re-licensing is basically allowed by the license

eternal night
#

like, idk, given giant companies with lawyer groups larger than half of spigots discord have open source projects that don't require a CLA, I'd guess its legal for them to pull stuff and they don't have to worry about you yanking it after as long as they don't break your licence

wintry lynx
#

#

I'm enjoying this convo lol

quiet ice
#

HOWEVER, CC0 is not a thing in all countries

tender shard
eternal night
#

yes

#

I am not saying I don't get why its there xD

#

it is certainly the more legally robust way

#

I mean, you grant spigot the right to change the licence on your work

#

for all intends and purposes spigot could just go paid and closed server software tomorrow and you can't do shit

#

bit of that pufferfish++ vibe kekwhyper

civic sluice
shadow night
eternal night
#

pufferfish++ ?

shadow night
#

what that thing

eternal night
#

fork of pufferfish

#

which is a fork of ehhh paper ?

shadow night
#

damn

eternal night
#

or purpur

tender shard
#

a good solution to avoid problems with smallprints in contracts, like AGB, is to simply not read them

shadow night
#

I'm pretty sure purpur forks pufferfish

eternal night
#

spoken like a true laywer

#

yea I think they include some patches

#

but yea, pufferfish++ is pretty ehhh

#

interesting on a copyright level

tender shard
#

all this "using mojang code" stuff is a huge mess anyway. all the patch files contain original mojang code

shadow night
eternal night
#

like, it would need someone with the balls to challange microsoft kekwhyper

shadow night
#

yes, challegene

eternal night
#

but yea, pufferfish+ iirc has downloads availalbe and you can run it locally ?
At which point like, GPL says you better be supplying the source code on request

#

which, its a closed fork so they don't

tender shard
#

i don't think so. However they must be a derivative, they don't have any purpose without the original stuff, and their only purpose is to be used on the original stuff. however what they actually contain are such small parts usually that they're worthless. There should be a proper law written about that, preferably as AS Verordnung instead of Richtlinie, but they got more important things to do like raising their own salaries D:

shadow night
#

why does spigot not have some jar that auto downloads the vanilla mc and then patches it and then also runs the patched one

#

like paper

eternal night
#

das called paperclip

#

I mean

#

the project is open source kekwhyper

#

its just a bit of a gray area

shadow night
#

wait, I can make papaclip run spigot?

eternal night
#

sure

shadow night
#

CAN I MAKE IT RUN CRAFTBUKKIT?

eternal night
young knoll
#

You could but I'll ban you

#

:D

tender shard
eternal night
#

huh ?

shadow night
#

who tf needs this goofy ahh spigot stuff when we have craftbukkit

eternal night
#

how so

#

I mean, paperclip contains a binary patch, which is like another piece of maybe derivative work

young knoll
#

Runs server with craftbukkit

Every plugin using components explodes

shadow night
eternal night
shadow night
#

why can't components be a bukkit feature

tender shard
#

I have not looked at how paperclip works. BUT I assume paperclip works like this:

"take the mojang jar and replace bytes 92715-192274 with this: (..) and bytes 12756182 up to 2957 bytes later with this: (...)"
contains 0 mojang code.

buildtools uses patch files which at least party contain moj code

young knoll
eternal night
tender shard
#

yeah I meant the stash repo

eternal night
#

well yea but papers repo does too

#

you have to in the end

shadow night
# young knoll Soon™️

why must it be player.spigot().sendMessage() and not player.components().sendMessage() or even just player.sendComponentMessage()

young knoll
#

Doesn't the paper repo also have patch- yeah

tender shard
eternal night
#

the github repo has patches

#

like PaperMC/paper

young knoll
eternal night
#

the CraftBukkit repo has patches

tender shard
slender elbow
young knoll
#

Uh it's called PaperSpigot

shadow night
eternal night
#

yea

#

so like, BuildTools itself has nothing

#

paperclip has a binary patch

shadow night
young knoll
#

Idk

tender shard
#

if mojang would hire me I'd say what spigot and paper do is illegal, if paper or spigot would hire me I of course would think it's legal. so yeah

young knoll
#

Who founded paper

tender shard
#

egyptians

#

papyrus

young knoll
eternal night
#

given how close peeps are with mojang over this xD

#

I doubt they want to consider this illegal

shadow night
#

considering how many libraries you made and stuff lol

young knoll
#

I don't think that counts

tender shard
young knoll
#

Technically no one works for spigot except MD

eternal night
#

Someone ping CMarco to pretend they are hired at Spigot Ltc

shadow night
tender shard
tender shard
young knoll
#

Still not employeed by SpigotMC Pty. Ltd.

tender shard
#

I am like 99% sure that leguernic and cmarco are the same person

eternal night
#

idk, i barely remember CMarco, I have most idiots shoved into the same corner of my brain

orchid gazelle
#

Wtf is a leguernic

shadow night
eternal night
#

probably an idiot

tender shard
#

i dont remember, i dont think so. but from what I know, cmarco also started with this jesus shit only a few months ago

molten hearth
#

Bro got enlightened

shadow night
young knoll
#

hey sometimes people find faith

shadow night
#

I've never seen CMarco before he started causing drama

young knoll
#

Sometimes people make shit up

#

¯_(ツ)_/¯

eternal night
#

They renamed

#

idk what they were called prior

shadow night
#

damn

molten hearth
#

Sometimes people find faith in shit that was made up

shadow night
#

@solar musk who are you

#

who are you

young knoll
shadow night
#

FendiTony777?? what does that mean

young knoll
#

Tfw name history is public

eternal night
#

righttt TheViperShow

sullen canyon
#

why are you so rude to Jesus

tender shard
#

all I know is that leguernic had the same overly unjustified superiority complexas cmarco does. both are praising old versions (1.4.6 for leguernic who claimed to be the "most popular spigot 1.4.6 coder as of today", and beta 1.7.3 for cmarco). both have / had a spigot resource list full of totally useless plugins that nobody wants to use and are coded like shit but both claim that their work is "obviously superior, totally optimized, bla bla". Both consider themselves to be way better than everyone else, cmarco e.g. calling himself poet, designer, etc bla bla all the time. the similarities to identity-stealing leguernic are definitely there. I don't wanna claim that it's him but it's definitely not far-fetched to at least think about it

eternal night
#

dat name rings a bell

shadow night
shadow night
full laurel
#

Every time i come here there's some drama going on XD

#

What's up now ?

tender shard
#

iirc leguernic got banned from spigotmc after he stole some french college professor's identity. that dude, whose actual name was Madeg Leguernic, joined my discord and I talked to him a bit and a few days later leguernic got actually banned from spigotmc and I haven't heard of him ever since

sullen canyon
full laurel
tender shard
#

you're just an anonymous class extending human like everyone else here does

shadow night
#

say that like a normal person and not like you just read 600 pages of shakespear

echo basalt
#

you're an interface with no implementation

tender shard
orchid gazelle
#

Guys we might go to #general just saying

shadow night
civic sluice
tender shard
#

what the heck is a photography exam

full laurel
#

The funny thing is this channel has more unrelated drama than actual help 🤣

tender shard
#

sorry lol

sullen canyon
#

I wish there was a way to download all the messages as a txt from some specific dc channel

echo basalt
#

either cmarco is a huge fucking troll or he's actually clinically insane

full laurel
young knoll
full laurel
#

Maybe between two dates

#

Then yea

orchid gazelle
eternal night
#

@young knoll did you see that we are now a joint duo for implementing BlockType kekwhyper

civic sluice
tender shard
orchid gazelle
#

I have never seen a troll investing more than 1000 hours just for one troll

eternal night
shadow night
young knoll
#

Okay so lynx does all the work

#

got it

tender shard
#

how does the Material class get created anyway? does md have a secret php4 script that he runs when a new version comes out to generate it?

echo basalt
#

clinically insane it is

shadow night
young knoll
full laurel
tender shard
eternal night
#

after that I'll probably just PR my changes to your branch

#

if you can rebase them onto current master, that would be great (like your branch xD)

shadow night
sullen canyon
orchid gazelle
#

What does Question.class consist of?

sullen canyon
#

easy logic

shadow night
eternal night
full laurel
tender shard
#

okay then you should be able to answer this within 1-2 small sentences: what's the correlacne between dof, aperture, focal length and focal distance?

shadow night
#

I'm just not fully implemented my friend

civic sluice
orchid gazelle
full laurel
shadow night
slender elbow
tender shard
#

if you knew you would have needed 1.5 sentences at most

slender elbow
#

I am the best photographer

full laurel
shadow night
tender shard
#

bigger aperture = less dof
more focal length = less dof
bigger distance = more dof

tender shard
#

not really that complicated, is it

#

depth of field

#

tiefensch#rfe / schärfentiefe

full laurel
shadow night
#

damn, isolating my map just saved me like twenty minutes of work

#

well, hashmap

tender shard
orchid gazelle
#

Isn't that just focus?

tender shard
#

no. focus is the distance at which the focus point lies. which is at my hand in both pictures

orchid gazelle
#

Hmmm

tender shard
#

the difference is how far the distance spans that one can consider to still be sharp

sullen canyon
tender shard
#

which in the first pic is up to my monitor, in the second only a few centimeters

orchid gazelle
#

Well my smartphone has exactly one issue. The camera has insane DoF

shadow night
#

I only know the german word "doof"

tender shard
orchid gazelle
#

Tell me how to fix plz

tender shard
#

you don't even know the basics about photography nor anything else. everything you ever did or showcased here is either shit or stolen from chatgpt marco

shadow night
#

of course you can't, maybe that's because that's not true

tender shard
#

no thanks, i dont want to see it

full laurel
#

Damn

tender shard
#

you can send it in #bot-commands and have cafe babe take a look at it

shadow night
#

lmfao

tender shard
#

small number = "big hole" ( lol ) = large DOF

orchid gazelle
#

@tender shard may I send you some picture in private to show you? dm

tender shard
#

big number = small hole/aperture = narrow dof

south mason
#

Hello, I want to integrate into my plugin a site consisting of two parts frontend and backend. I connected the backend without difficulty. But I have some problems with the frontend since it was written in React + NPM was used. And I can't find a way to run the frontend part from Java code. For npm I use the "Frontend-Maven-Plugin" library. The build system is Maven. Do you have any idea how to run the front-end part from the plugin code?

tender shard
shadow night
#

to me this just sounds like combining two things you shouldn't combine

orchid gazelle
#

Everything else blurred out

#

Perfect example

obsidian drift
#

If I built paper locally, how can I use access mojang mappings?

orchid gazelle
#

Sir

obsidian drift
#

I tried compileOnly("io.papermc.paper:paper-server:1.20.4-R0.1-SNAPSHOT") but it did nothing

orchid gazelle
#

This is spigot

obsidian drift
#

oh no

#

sorry

orchid gazelle
#

Lmao

#

No worries

tender shard
#

for paper you want to use the paperweight plugin for gradle

tender shard
#

check the docs of paperweight o ngithub

slate crown
#

I have a menu and inventory. how to make it so that when the menu is open, it is forbidden to drag items into the menu using the keys 1-9

help pl

inner mulch
#

or do you need the player to click the inventory and take something out?

slate crown
glad quail
#

good afternoon guys
does anyone know how to make a scoreboard without numbers on the right side of screen?

glad quail
#

1.20.4

#

i refer to a several servers where on 1.20.4 theres no numbers on scoreboard

#

and i have searched for like several hours and have found nothing similar

chrome beacon
#

Are you trying to make a plugin or are you looking for one?

glad quail
#

Trying to make a plugin

#

I've seen one that removes these numbers on right side of screen but i have no idea how to do this

lean pumice
#

What is the difference between "Bukkit.getServer().getName()" and "Bukkit.getServer().getServerName()"???

chrome beacon
carmine mica
lean pumice
glad quail
chrome beacon
lean pumice
chrome beacon
#

You're using something else

lean pumice
#

Bukkit.getServer().getServerName()

#

in 1.8.8

chrome beacon
#

You're probably using Paper

lean pumice
lean pumice
grave plover
chrome beacon
#

Which one?

grave plover
#

1.20.3+

chrome beacon
#

Mojang added support for scoreboard lines with components and without a score

#

So you'll have to use the nms scoreboard system

glad quail
chrome beacon
#

Just read the release notes when a new game version releases uwu

glad quail
#

okay ty

upper hazel
#

i dont remember what the event need for check player in water

#

associated with an air bubble

chrome beacon
upper hazel
#

thf

#

Why doesn't an enchanted sword with a sharpness of 10 kill mobs in 1 hit? Minecraft logic?

quaint mantle
#

Enchants broke after 5 lvl

upper hazel
#

i was use 13

quaint mantle
#

You should use attributes

upper hazel
#

lvl

upper hazel
#

and how i shold add

quaint mantle
#

ItemEditors should have

upper hazel
#

if the ratio of level to damage is not known

quaint mantle
#

Attributes does fixed amount

upper hazel
#

i mean what the damage need for 13 lvl

#

or 14

#

or 15

#

etc

#

what kind of addiction

young knoll
#

Isnt the sharpness math pretty simple

#

In Java Edition, Sharpness adds 0.5 * level + 0.5 extra damage.
In Bedrock Edition, each level of Sharpness adds 1.25 extra damage.

upper hazel
#

thf

inner mulch
#

if a player leaves the server (player object gets deleted) does all its hashmap entries get deleted as well or do i need to handle that?

shadow night
#

You need to handle that unless you use weak references or whatever

inner mulch
#

ok

#

thank you :)

crisp arch
#

trying to change the glow color of a shulker by adding their uuid to a team, doesnt seem to work

chrome beacon
#

?nocode

undone axleBOT
#

It’s hard to answer a programming question without code
Oh no! You ran into a problem. But no worries, people are willing to help, but first they need to see your code. This is because otherwise, they would be providing help based on guesses instead of concrete knowledge. Whether it be a compile error, runtime error, or an unexpected output, I'm sure that if you were to provide code, you'd receive a quick solution.

chrome beacon
#

Do make sure the player can see the team

inner mulch
upper hazel
#

wth? why weakness effect != WEAKNESS

grim hound
#

can I somehow just send raw text to the player using netty?

eternal night
#

PotionEffectTypeWrapper is not instance equvilant

#

use .equals

grim hound
upper hazel
#

oh

grim hound
#

uh

#

@eternal night Explain this

#

it works fine on bukkit

#

or rather spigot

#

but breaks on paper

river oracle
#

Paper issue 😎

solid cargo
#

then the issue is paper

grim hound
#

since I'm banned on their discord

river oracle
#

Make a github issue

eternal night
solid cargo
#

what did you do to get banned on paper?

eternal night
#

the paper man xD

grim hound
#

yes

eternal night
#

I mean, we rip out some console stuff so ehhh

grim hound
river oracle
eternal night
#

how are you doing the warn ? just plain logger.warn

rain cloak
#

Hi question, is caching a SQL table (like playerstats) in a HashMap a good idea? I'd assume any file storage is too slow (JSON)

grim hound
#

this is the code

#

just like spigot's

solid cargo
#

try changing the library to paper

grim hound
#

uh

solid cargo
#

on pom.xml, if you havent done that

grim hound
#

I don't use such sophisticated things

solid cargo
#

you probably do

eternal night
#

lemme see if I can replicate 👍

solid cargo
grim hound
solid cargo
#

do you use gradle?

grim hound
#

no

eternal night
#

intellij library man

grim hound
#

my compiler does yes

eternal night
#

my condolences

celest notch
#

Is it possible to modify the draw speed of a bow without mods

eternal night
#

pls switch to a build system as soon as you can xD

grim hound
solid cargo
#

imo intellij artifact builder is only good for quick stuff

#

eg an olympiad, where you dont use exterior libraries

grim hound
solid cargo
#

then do it your way

grim hound
#

That's what I'm doing

solid cargo
#

we are just recommending you to hop on to an easier life

grim hound
#

I will not make a pact with the devil

solid cargo
#

you are not using vim

grim hound
#

many people have said many things to me, and it turned out that most of them were wrong

#

that is, on programming terms

grim hound
#

is superior

solid cargo
#

i can see

solid cargo
#

thats my point, intellij was made to make your life easier

grim hound
#

And I'm utilizing it

eternal night
#

in the wrong way skully

grim hound
eternal night
#

works on my machine

grim hound
eternal night
#

is your terminal shitty

#

what do you run this in

grim hound
river oracle
grim hound
eternal night
grim hound
grim hound
eternal night
grim hound
#

I tested it accross 2 terminals

#

and it's not possible for the terminal to show something it wasn't told to

#

meaning paper for some reason made it harder

eternal night
#

Yea probably

lethal knoll
#

Anyone experience with Jackson? I get the following error after trying to load a specific file (not happening with all files)

'void org.yaml.snakeyaml.parser.ParserImpl.<init>(org.yaml.snakeyaml.reader.StreamReader)'
[12:55:12] [Server thread/ERROR]: Error occurred while enabling bloodmoon-advanced v2.0 (Is it up to date?)
java.lang.NoSuchMethodError: 'void org.yaml.snakeyaml.parser.ParserImpl.<init>(org.yaml.snakeyaml.reader.StreamReader)'
grim hound
#

I thought of one way but the colors get mixed up

eternal night
#

might just be a jline 3 thing

#

¯_(ツ)_/¯

grim hound
#

how would that even makes sense?

#

and what even is that

eternal night
#

JLine is a Java library for handling console input.

sullen marlin
#

?whereami

eternal night
#

True that tho ^

#

Idk I mean, feel free to open an issue, maybe someone feels like debugging it for ya

sullen marlin
eternal night
#

paper fucks around there a lot, not too related to spigot

solid cargo
grim hound
river oracle
#

I said earliers u shud make a girhub issue

eternal night
#

Well try github I guess ?

sullen marlin
#

your problem not ours

eternal night
#

or appeal kekwhyper

grim hound
solid cargo
#

HEY MD5

river oracle
#

😂

grim hound
#

You got a fanbase

lethal knoll
grim hound
#

md

#

skid some code from paper

zealous osprey
#

Heya, hopefully, quick question:
How does one use the IntelliJ profiler with async function calls?
I have a function being called by an event and the profiler just doesn't show it, even when checking in other thread contexts in the profilers result

grim hound
#

and use your great knowledge to surpass paper

#

ez

eternal night
#

🤯

sullen marlin
river oracle
#

Sounds like a legal violation

grim hound
grim hound
lethal knoll
grim hound
#

some people on Netty's official discord server scolded me for "distributing code" when I showed them how minecraft handles channel intialization

sullen marlin
#

this says "jackson 2.14.2 has a fix that let's you use snakeyaml 2.0 -"

#

so make sure you use at least jackson 2.14.2

#

what jackson version are you using?

lethal knoll
#

Checking now

#

2.14.1 -_-

#

so updating to the latest should work?

sullen marlin
#

yep

lethal knoll
#

checking right now

#

updating to 2.16.1

#

java.lang.NoSuchMethodError: 'me.mrgeneralq.bloodmoon.jackson.core.StreamReadConstraints me.mrgeneralq.bloodmoon.jackson.dataformat.yaml.YAMLParser.streamReadConstraints()'

sullen marlin
#

I think you'd have to share your build file

#

make sure you did a clean recompile and all jackson related dependencies are updated

#

you could also just try 2.14.2 for the minute as maybe the jump to 2.16 is introducing other issues

lethal knoll
#

I think I might have missed a dependency

#

I guess I got a conflict now with the shade plugin, because it no onger compiles (Unsupported class file major 61)

half arrow
#

does spigot have anything for anti-piracy tools? to stop leakers or na?

lethal knoll
#

@sullen marlin , that solved it, you are a legend!

#

thank you man

solid cargo
#

another day another md_5 W

stoic kiln
#

Algum br?

eternal night
#

Yes

#

ususally a good idea

#

becomes challanging with when to invalidate the cache

valid burrow
eternal night
#

pls stop spamming

valid burrow
#

just make a request when you need it

#

@austere cove advertising aint allowed is itr

rain cloak
#

Because i have a scoreboard with stats displaying for every player online, and i dont what to querry the db everytime

stoic kiln
rain cloak
#

scoreboard updates every second

valid burrow
#

theeeen cache it in a hashmap? you dont need to save it in a file

#

a simple hashmap would do the job

undone axleBOT
rain cloak
#

thanks

valid burrow
stoic kiln
#

It's not advertising, I'm looking for people to be part of

eternal night
#

deepl supremacy

stoic kiln
#

Thank:)

eternal night
#

portugese

river oracle
#

Ahh it spicy Spanish no wonder it looked familiar