#help-development

1 messages · Page 2289 of 1

noble lantern
#

can you not run it with more than Runtime.availableProcessorCores?

ivory sleet
#

What if you add System.out.println(Thread.currentThread());

#

or sth

topaz moon
#

can't you build it yourself?

ivory sleet
#

In the beginning of every task

noble lantern
#

Well i create a new Logger instance inside my task

#

so Logsl4j should pick up the thread

#

plus

#

its bricking the request handler

ashen quest
#

its not

noble lantern
#

so if i Thread.sleep() it wont use a new thread

#

it wants to run it on 115 still

#

let me try with only availableProcessorCore size

ivory sleet
noble lantern
#

Doing that makes it block on thread 19

ivory sleet
#

Try to print the thread in the beginning

noble lantern
#

kk

#

takes time to debug because thats the core lib

#

so i have to edit compile then import into gradle

#

T_T

ivory sleet
#

🥲

ashen quest
#

atleast not like linux

#

imagine compiling linux and then u forget to uncomment

ivory sleet
#

💀

noble lantern
#

?paste

undone axleBOT
noble lantern
#

current async thread = inside runAsync

#

server thread is outside of it

#

which is fine that thread can stay the same bc it needs to

#

i rly wonder if calling join() on CompletableFuture is messing with it somehow

#

but without it the threads never completed and hung on non complete status

#

maybe its broken locally

#

lemme upload to prod

ashen quest
#

bumpy pumpy

noble lantern
#

Packets

#

with fake blocks

ashen quest
#

nms?

noble lantern
#

Protocollib will suffice

ashen quest
#

ok

noble lantern
#

your just sending fake blocks to the player

ashen quest
#

ty

#

i wish i could send him fake friends and ruin his mental state

#

nah jk

noble lantern
#

yeah spammed the fuck out of it on prod and same results

#

this is weird asf

round eagle
#

specifically its a minecraft server. the response determines the status of the server eg. String online = true/false;. should it be safe?

ivory sleet
#

It starts at 115?

noble lantern
#

un using Runtime.availableProcessors now

#

on prod the requests always execute on worker 3

ivory sleet
#

Hmm

noble lantern
#

ignore warning thats just my schema validator popping off

ivory sleet
#

Ima write a test

noble lantern
#

Does calling join() on futures possibly have something to do with it?

ivory sleet
#

No

tardy delta
#

poor string class

ivory sleet
#

Wouldnt day that

noble lantern
#
public static void runAsync(Runnable runnable, Executor executor) {
        CompletableFuture.runAsync(runnable, executor).join();
    }

This is the runAsync code if needed

#

i just pass the executer code you showed me a bit ago

ivory sleet
#

Wair

#

This kind of defeats the point

#

Wouldnt it be better to just run it as is

#

join blocks

#

Its like await in javascript

noble lantern
#

wym?

#

lemme google join blocks

#

brb

ivory sleet
#

Why do u use a thread pool in the first place

noble lantern
#

Well its what you suggested

I was just using the normal runAsync() without the pool beforehand

#

but i would assume it would stop forking new threads after x amount of them

#

and then start blocking

#

well no futures queue dont they

iron glade
#

Does someone have a second to help me choose between 3 possible designs I made for a message?

ivory sleet
#

^

iron glade
#

1, 2 or 3?

noble lantern
#

hmmm

eternal oxide
#

1

noble lantern
#

1 imo

#

yee

ivory sleet
#

May I ask

#

Whats the point of the leave message

#

Should it draw attention?

iron glade
#

Not really, it's more like a Discord - Log thingy

ashen quest
# noble lantern your just sending fake blocks to the player

so now how do I exactly send packets in a way it shows the player that he is standing above void like this vid https://youtu.be/AVVQAU3lWZo?t=338

I Became a literal god on the Lifesteal Minecraft 1.18 SMP by exploiting its plugin...

Keep up with me on social media
★join the community on discord - https://discord.gg/SQqkenRwx4
★stalk me on twitter ➣『 @ashswagin 』
★follow my twitch ➣『 https://www.twitch.tv/ashswagin

THANKS TO THE PLUGIN DEVS FOR HELPING ME do this :- Abyss Development ...

▶ Play video
ivory sleet
#

The the last one

iron glade
noble lantern
#

wait join() is blocking

#

i only thought get() was

young knoll
#

Yes

noble lantern
#

So then calling join() is not necesary if you dont need return of the future?

iron glade
#

Thanks for your opinion btw guys

iron glade
ivory sleet
#

Burchard

#

Dont join en

#

That is awaiting

#

join awaits uninterruptibly

#

get does not

noble lantern
#

its just weird bc without wait earlier

#

i bricked my container

#

it was weird

#

the logger logged the threac count in increments of 1

#

then went to a high number, restarted back to 1

#

did it a few times then bricked at 60mb ram and 2% cpu

#

was rly weird....

#

ill try it again rn with new executor

#

wtfffff

#

still on same thread da fuq

ivory sleet
#

Yes

#

join() blocks

#

Dont join

vapid valley
#

It was the TAB plug-in

ivory sleet
#

join is just like awaiting

noble lantern
#

yeah i removed join()

#

ugh my damn json validator broke

#

nice

#

perfect timing

ivory sleet
#

Rip

noble lantern
#

oh

#

i think its time for bed

#

there we go

#

works now

#

need to do more testing if its bricks again tho

#

Thanks Conclure!

#

seems to be all good now

ivory sleet
#

Yeah doing a little testing here

noble lantern
#

weird it broke all of a sudden

ivory sleet
#

Nice

noble lantern
#

yep im doing same thing

#

im sending a request every 1ms to my test env rn

#

gonna upload to prod and spam tf out of it

ivory sleet
#

🥲

noble lantern
#

im honestly suprised no mem leaks in all of this sytem

#

i was spamming it earlier with 96 threads and it barely hit 80mb ram

ivory sleet
#

Garbage collector smart

#

O woaw

noble lantern
#

on fixed thread pool too

#

so it opened all 96 on start and i monitored in htop

#

wait i have netdata tf am i doing

#

lol lets watch my vps die

#

sec

opal juniper
ivory sleet
#

Its my school laptop lol

opal juniper
#

ok that’s fine then

ivory sleet
#

Been camping in my bag 😅

opal juniper
#

fuck school property

ivory sleet
#

Lol honestly

opal juniper
#

you are lucky tho - i got given a school chrome book angryeyes

ivory sleet
#

Arent those the latest fad?

#

Like super good

opal juniper
#

it’s just an internet browser

ivory sleet
#

Oh

#

Lmao

opal juniper
#

it runs chromeOS

grim ice
#

im dead bored

opal juniper
#

and can’t do shit

ivory sleet
ebon arrow
#

They use to be like tablets then chrome os updated :(

noble lantern
#

not horrid

#

oop

ivory sleet
#

God

#

Burchard

#

My laptop died

#

Tf

noble lantern
#

check this out

#

my auto clicker only does 1ms per click

#

wish it went lower

ivory sleet
#

Dam

#

Write some code to stress test it

#

Also

#

You should add rate limiting

noble lantern
#

oh yeah i defo am

ivory sleet
#

To avoid dos

noble lantern
#

my server will never even handle that many requests even just on a normal game 💀

#

ide be amazed if it did

ivory sleet
#

🥲

noble lantern
#

client will probably get about 120-240 rqp

ivory sleet
#

Ah yeah

noble lantern
#

also not sure how much more stress testy i can do other than a fore loop

#

WAIT

#

i literally have a websocket stress tester

#

lmfao

#

oh

#

rest

#

nvm

ivory sleet
noble lantern
#

watch

ivory sleet
#

“Watch me fail”

#

Basically

noble lantern
#

i did

#

my auto clicked fucked up

#

it jsut opened like

ivory sleet
noble lantern
#

5000 chrome tabs in a seconds

ivory sleet
#

Lol

noble lantern
#

and froze my pc lmfaao

#

there we go

#

not bad 12%

#

i assumed it would take more thats a shitloads of threads

ivory sleet
#

Shesh

noble lantern
#

wonder if i set it to 1000

ivory sleet
#

:0

noble lantern
#

oh uh

#

thats a weird error

ivory sleet
#

Ugh

#

You probably wanna lower the parallelism

noble lantern
#

oh yeah im just doing thise for testing

ivory sleet
#

Ah

#

Well

noble lantern
#

ill prolly only run about *2

#

maybe *3

ivory sleet
#

There can still be more threads

#

Than the parallelism

noble lantern
#

oh wtf

ivory sleet
#

Its just the amount of active threads the pool should try to maintain

noble lantern
#

thought it was limited to the long provided

#

is there an option to set max?

#

well

#

eh

#

i assume it would start blocking at that point

noble lantern
#

oooo

#

i like those settings

ivory sleet
#

Yeah

noble lantern
ivory sleet
#

Yeah

noble lantern
#

just slightly more ram

ivory sleet
#

Because

noble lantern
#

i expected like 500mb usage

ivory sleet
#

The tasks you do seem to be cpu bound

noble lantern
#

ye they are

#

math calculations are the main part of most things

ivory sleet
#

Then you dont even need to multiple the parallelism with anything

small current
ivory sleet
#

Processor amount*

small current
#

💀

ivory sleet
#

Maybe with 2

#

or sth

lost matrix
#

What tasks are you doing? Because a big part is just efficient partitioning so that the threads dont have to wait for each other

noble lantern
noble lantern
ivory sleet
#

I meanr available processors times 2

noble lantern
#

ohh

#

yeah thats what ill run on prod

#

i have 6 cores on my deployment machine

noble lantern
small current
#

looks complicated

ivory sleet
#

You can use sth like the blocking coefficient if you wanna be precise

noble lantern
#

Currently each request doesnt really need to interfere with one another and i dont beileve they will

#

Each socket action executes as its own task

#

only interaction is the player data between threads

#

which ill have handled thanks to you :))

small current
#

i remember making the socket extremely simple
just for transfering data like bungeemode for a gamemode

tall dragon
small current
#

a thread made for each server connecting to the lobby

#

sends string

#

i split the string

#

read the message

#

but realised its a mess

noble lantern
# tall dragon what kind of game u makin

Itll be a hacking game, you can create your own botnet, destroy other peoples machines, break into them etc

I have a list of features written but the base of it is basically a botnet simulator

tall dragon
#

oh wow, sounds interesting

#

will you be releasing it anywhere?

noble lantern
#

android

tall dragon
#

would love to give it a try when its done

tardy delta
#

sounds difficult to make too 😂

noble lantern
#

i did it as a discord bot once

#

was really cool

#

i lost the code to it tho :((

#

plus it uh

#

99% sure not allowed as a bot haha

#

discord rly picky about those things

small current
#

not worse than microsoft

noble lantern
#

ide have to do hybrid but god damn

#

i suck balls at html

tall dragon
#

who even uses iod

#

android superior

noble lantern
#

im not even sure tbh

#

but ios support would be nice but at same time i dont wanna put that work into something thats a maybe rn

#

cause i heard swift is AIDS

ivory sleet
#

Little bit

#

Better than objective C

tardy delta
#

this reader not complaining to be not closed and the other one does?

round eagle
#
[14:24:02 ERROR]: Thread Craft Scheduler Thread - 4 - BungeeHandler failed main thread check: player kick
java.lang.Throwable: null
        at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:15) ~[paper-1.19.jar:git-Paper-59]
        at org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer.kickPlayer(CraftPlayer.java:517) ~[paper-1.19.jar:git-Paper-59]
        at com.rewskaia.bungeehandler.BungeeHandler$1.run(BungeeHandler.java:65) ~[BungeeHandler-1.0-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.v1_19_R1.scheduler.CraftTask.run(CraftTask.java:101) ~[paper-1.19.jar:git-Paper-59]
        at org.bukkit.craftbukkit.v1_19_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) ~[paper-1.19.jar:git-Paper-59]
        at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[paper-1.19.jar:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
        at java.lang.Thread.run(Thread.java:833) ~[?:?]
ivory sleet
#

It assumes the parser closes it

#

Because that might be the case

noble lantern
tardy delta
#

looked thro the code and this doesnt

ivory sleet
#

Myeah well IntelliJ doesnt know

round eagle
ivory sleet
#

But also

noble lantern
#

are you developing on bungee

#

or spigot

ivory sleet
#

FileReader 7460sadanime

noble lantern
#

FileReader scares me

#

menolike

ivory sleet
#

BufferedReader anime

noble lantern
#

wait

tardy delta
#

idk lol i have never really been busy with file based io stuff

noble lantern
#

does that close itself??

ivory sleet
#

Idk

noble lantern
#

i just realized i had a reader in there lmao

ivory sleet
#

Check the method lol

round eagle
# noble lantern Any more info?
public static void async_run(JavaPlugin instance, PlayerJoinEvent event) {
        new BukkitRunnable() {
            @Override
            public void run() {
                Player player = event.getPlayer();

                String ip = "ip";
                int port = 11111;


                try {
                    Socket sock = new Socket();
                    sock.connect(new InetSocketAddress(ip, port), 400);

                    DataOutputStream out = new DataOutputStream(sock.getOutputStream());
                    DataInputStream in = new DataInputStream(sock.getInputStream());
                    out.write(0xFE);

                    StringBuffer str = new StringBuffer();

                    int b;
                    while ((b = in.read()) != -1) {
                        if (b != 0 && b > 16 && b != 255 && b != 23 && b != 24) {
                            str.append((char) b);
                        }
                    }

                    String[] data = str.toString().split("§");
                    int onlinePlayers = Integer.parseInt(data[1]);
                    System.out.println(onlinePlayers);

                    player.chat("SERVER IS ONLINE. TEST1");

                } catch (Exception e) {
                    System.out.println("Under maintenance");
                    player.kickPlayer("server offline");


                }
            }

        }.runTaskAsynchronously(instance);
    }

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {


        System.out.println("Player joined. Will run async now.");
        async_run(this, event);

    }

this is my code

round eagle
noble lantern
#

You need to kick players on the main thread

#

not async

#

you should be able to synchronize and object to lock and then call that method sync, or just remove that runnable all together

#

and handle socket connections in a diff runnable

round eagle
round eagle
noble lantern
#

Not sure if you can do this in Bukkit but IIRC you can pass a sync task inside the async one and it will run back to main thread

But typically you use synchronized to shove onto the main thread providing a object lock (Hopefullly explained that right)

#

Store the boolean as AtomicBoolean on the main thread not a standard boolean

ivory sleet
#

Wait

#

No

noble lantern
#

no?

ivory sleet
#

BukkitScheduler

#

runTask

hybrid spoke
#

or just a CF and accept the boolean

noble lantern
#

runTaskAsync(() -> runtask(())); works?

ivory sleet
#

Ye

noble lantern
#

@round eagle ^

ivory sleet
#

Might introduce a callback hell

noble lantern
#

indeed but should be fine if only doing it once

ivory sleet
#

But shrug

#

Yee

round eagle
noble lantern
#

Your running an async task with BukkitRunable

#

You can call a sync task insde of that current async task

#

sec

#

This code block here (And any code that interacts with bukkit/bungeecord) needs to be run in sync

round eagle
tardy delta
#

lemme close the reader in a try with resources :'(

noble lantern
#

so you can just do the same thing you did with the async task, but use runTask

#

instead of runTaskAsynchronusly

round eagle
tardy delta
#

please dont make a new bukkitrunnable :(((

noble lantern
#

You quite literally have a runnable in your code haha

tardy delta
#

use the scheduler method

noble lantern
#

schedular method do be nicer

tardy delta
#

im confused people keep instantiating bukkitrunnables when theres no need for it

noble lantern
#

Bukkit.getSchedular().runTask(() -> {}, plugin);

noble lantern
round eagle
#

gawh damn i started learning java two days ago. this is too complicated 💀

noble lantern
#

two days ago and your doing async stuff?

tardy delta
round eagle
#

well i have experience with python

tardy delta
#

snek

round eagle
#

it wasnt a problem until i got in a mess with the syntax

noble lantern
#

async in java is a different world of hell

#

i thought nodejs async was hell

#

until i saw javas

tardy delta
#

await, promise :(((

noble lantern
#

i promise :((

round eagle
#

sad

noble lantern
#

reject(true)

#

resolve(false)

#

chaotic neutral

#

ngl i hate the reject/resolve system for promises

#

like take a return value like a normal person

ivory sleet
#

await is basically Future::get PepeHappy and ComplerableFuture is basically async in JS

#

🌞💀

noble lantern
#

im working on my own future engine rn

ivory sleet
#

For JS or Java?

noble lantern
#

rewriting CompletableFuture from the ground up

ivory sleet
#

CF is fairly optimized

#

Like really optimized

noble lantern
#

and im only accessing java methods via reflection to remake it

ivory sleet
tardy delta
#

:/

noble lantern
#

i wanna see someone do that with spigot

#

instead of using spigot api you use reflection upon spigot api

#

would be total cancer but funny asf

ivory sleet
#

I did that once

#

For a factions plugin

#

Which sucked

sterile grotto
#

guys how can I know which plugin is sending msg in the chat at the current moment

noble lantern
#

well

#

if it did that i would assume so kek

ivory sleet
noble lantern
#

or logging

#

or chat

#

like in-game chat

sterile grotto
#

player chat

#

in-game

noble lantern
#

dont think theres a way to unless to listen for stdout Logger's and find the packages of the plugin you want to find

#

Not even sure if thats a thing tbh

#

might be

#

sounds like it would

#

wait

#

im

#

fucking stupid idk why i said logger

#

im going to bed im sorry

#

gnight guys

ivory sleet
#

Gn

frosty tinsel
ivory sleet
#

14:56

#

And for you?

frosty tinsel
#

Same

ivory sleet
#

Yeah well Im in germany rn

frosty tinsel
#

I thought that

ivory sleet
#

Altho I live in Sweden

#

(:

frosty tinsel
#

I'm in Czech Republic

ivory sleet
#

Ooo

#

I was in prague not long ago

frosty tinsel
#

Cool

#

Me too 😆

ivory sleet
#

Very nice city ngl (:

plucky cliff
#

Hello ! i'm a little sad that i need to ask but i need help, i need to add potion effects to player when they equip armor and remove the potion effects when they remove it. BUT when the player doesn't have anything equiped and we throw potion on it the effect is removed, so idk what to do

eternal oxide
#

what kind of effect?

plucky cliff
#

strength

eternal oxide
#

Put Attribute modifiers on the Armor piece

plucky cliff
#

For speed too ?

plucky cliff
#

i'll try it out !

round eagle
#

until the code is fully executed

eternal oxide
#

?paste code

undone axleBOT
eternal oxide
#

event first

supple elk
#

Ok I have a class like this

#

And in the constructor of GameMap I'd like for it to take a GameType which takes that GameMap as a generic

#

can I do this?

river oracle
#

Idk can you

supple elk
#

I'm asking if it's possible within java

quiet ice
#

You'd need to do it a bit like the enum class does it

#

So GameMap<..., M extends GameMap<..., M>

#

And for the constructor you'd have GameMap(String, GameType<M, ?>) then

supple elk
#

is ... the same as ?

tardy delta
#

whats ...

#

no

quiet ice
#

Uh people

#

I meant: GameMap<[...], M extends GameMap<[...], M>

supple elk
#

right

#

ok yeah

#

it's weird

#

but it does work

#

thanks geolll

thorn beacon
#

What are the golden I; numbers? If anyone happens to know

eternal oxide
#

UUID

thorn beacon
#

Oh just in number format instead?

tardy delta
#

a uuid are some longs right?

eternal oxide
#

yep

thorn beacon
#

Ah fab, cheers 👍

ornate mantle
#

bruh ive been on this for hours now

#
deaths:
  '1':
    - effect: speed
      multiplier: 12
    - effect: haste
      multiplier: 10```
tardy delta
#

"how to find a girlfriend"

#

ah no

ornate mantle
#

assuming i dont know how many items are inside deaths.1

#

how do i parse through each of them and return each value as a PotionEffect

ornate mantle
eternal oxide
#

deaths.1 is a List, each element of that list is an Object which is a Map<?,?>

tardy delta
#

hmm good

ornate mantle
#

lemme show you the code im using

tardy delta
#

iterate over deaths

#

then get the list underneath it

ornate mantle
#
        potionEffectList = new ArrayList<>();
        this.config.getList("deaths." + deathNumero).forEach(__effectList -> {

            LinkedHashMap effectList = (LinkedHashMap) __effectList;

            for (Object o : effectList.keySet()){
                potionEffectList.add(
                        new PotionEffect(
                                PotionEffectType.getByName((String) effectList.get(o + "effect")),
                                Integer.MAX_VALUE,
                                (Integer) effectList.get(o + "multiplier")
                        )
                );
            }
        });

        return potionEffectList;```
tardy delta
#

tf

ornate mantle
#

yeah

#

i know

ornate mantle
#

is it like an undefined datatype

tardy delta
#
for (String deathNumberOrSmth : config.getSection("deaths")) {
  List<?> list = config.getList("deaths." + deathNumberOrSmth);
  String effect = ...
}```i lost it at the list part lol
ornate mantle
#

deathnumero is a value given when calling the method

#

public List<PotionEffect> getEffectsFor(int deathNumero){

tardy delta
#

then dont iterate

#

idk what type the list is cuz its some weird structure i have to agree

ornate mantle
#

some guy here gave me that format

eternal oxide
#

this bit os wrong new PotionEffect( PotionEffectType.getByName((String) effectList.get(o + "effect")), Integer.MAX_VALUE, (Integer) effectList.get(o + "multiplier")

#

o is your KeySet element, so its either effect or multiplier

#

which is not how you want to do it

#

effectList is is actually a Map not a list. Carefull with naming

tardy delta
#

teacher elgarl

#

kek

eternal oxide
#

so effectList.get("effect") will get you the effect

#

and best to drop the __ on variables. Its not normal for java

drowsy harness
#

How would you modify a entity’s pathfinding so it doesn’t go into certain regions? Is it possible with pathfinding goals?

plucky cliff
#

Elgar i was thinking a thing, can you change Id or Name of potion effect ? Like that we can remove then better later

eternal oxide
#

Sorry you are going to have to use better English for me to understand

plucky cliff
#

Can you change the ID or the Name of a PotionEffect ?

dapper ether
#

yes

plucky cliff
#

To create a custom potion

#

How ? 😮

dapper ether
#

.cpot

#

!cpot

#

?cpot

eternal oxide
#

cpot is not a command on this server

#

I've not played with custom potion effect. I believe you can but its not easy as registration is locked once the server is running

plucky cliff
#

@dapper ether how

heady spruce
#

Hey! Does anybody know how to generate an empty room with 2 locations, so I have 2 locations, there are 2 corners. And I want to generate a room thats empty. Thanks for every help!

vocal cloud
#

Man that's generic asf. If you want to generate a box that's easy just create a box. If by a room you mean a server then that's a little difficult but if you search here there's plenty of people who've done that before.

heady spruce
vocal cloud
#

👍

ornate mantle
plucky cliff
#
itemMeta.setUnbreakable(true);

That ?

#
itemMeta.addEnchant(Enchantment.DURABILITY, levels, true);

Then that ?

zenith gate
#

This is probably simple but I can't think right now, how would I make this per player instead of it being global for everyone?

public static double MAX_ArcanePower = 100;
hasty prawn
hasty prawn
zenith gate
#

ah yes

zenith gate
#

yes I got it.

#

I got max Mana, now working on individual mana regen.

zenith gate
tall dragon
#

obviously not no

zenith gate
#

mhm...

earnest forum
#

how do i change the build directory of my maven project

zenith gate
#

edit the configuration

earnest forum
#

wheres that

#

module settings?

#

wait nvm i havent added the artifact yet

tall dragon
#
<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <finalName>YourFinalName</finalName>
                    <outputDirectory>${project.basedir}/../out/</outputDirectory>
                </configuration>
            </plugin>

i do it like this

earnest forum
#

what have i done wrong

tall dragon
#

you have to edit your pom.xml if you are using maven

#

and include any libraries, dependencies you need in there

earnest forum
#
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>dev.yada</groupId>
    <artifactId>SuperVaults</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>18</maven.compiler.source>
        <maven.compiler.target>18</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.spigotmc</groupId>
            <artifactId>spigot-api</artifactId>
            <version>1.19-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>

    </dependencies>
</project>
#

what do i need to add

tall dragon
#

well idk what ur tryna do right now

earnest forum
#

build my jar to my test server's plugin folder

#

im clicking build

tall dragon
#

well add what i sent you

#

what ru clicking to build

earnest forum
tall dragon
#

ye thats not how that works when you use maven

#

double click left ctrl

#

and run mvn package

earnest forum
#

this is how i used to do it

#

and it worked fine before

#

im coming back to development after a couple months idk what im doing wrong

tall dragon
#

well the way ur compiling now is just using intellij's system

#

not maven

earnest forum
#

ok i did the mvn package thing

#

and it built to target folder in my project folder

tall dragon
#

exactly

tall dragon
earnest forum
tall dragon
#

what ids

earnest forum
#

group and artifact

tall dragon
#

no

#

that belongs to the maven plugin needed

frozen cedar
#

how to Component.text() + Component.text() ?

earnest forum
tall dragon
# earnest forum

plugins are added like this

<build>
  <plugins>
    //your plugins
  </plugins>
</build>
earnest forum
#

got it thanks

smoky oak
#

just to verify: This does return entries in a single string, each value separated by a linebreak, right?

ArrayList<String> entries;
//init entries
String.join("\n",entries);
tall dragon
#

yep

smoky oak
#

k thx

wary harness
#

any one can help how would I do this

#

in 1.18.2

#

with mojang mapings

#

this is code from 1.16

#

my try with 1.18

eternal night
#

what is 16 in 1.16

wary harness
#

up is 1.16

#

mc

#

this is

eternal night
#

no, what is the id 16 for the synced data

wary harness
#

doing update

#

to 1.18

eternal night
#

Well you better find out xD

#

what is that code meant to do

earnest forum
#

anyone know how to copy default text from a resource to yaml file

dusk shell
eternal night
#

what do you mean "run a java file" xD

#

you run methods

#

not files

dusk shell
#

what is a method?

smoky oak
#

?learnjava

undone axleBOT
dusk shell
#

nvm

wary harness
#

do you maybe know xd

eternal night
#

Eh-

#

I mean it is server internals

shell wraith
drowsy harness
#

How would you modify a entity’s pathfinding so it doesn’t go into certain regions? Is it possible with pathfinding goals?

opal juniper
#

no

drowsy harness
#

Is there a way to do it?

ivory sleet
#

Idr the name

small current
#

This stupid plugin set the cancelled to false

And i cant cancel the command preprocess in my own plugin
I tried lowest priority and ignoreCancel

#

The code is from the plugin setting cancelled to false

#

I dont want to edit that

ashen quest
#

what event is triggered when a tree grows, BlockGrowEvent?

zenith gate
#

My recipes are being shown in the recipe book, but when I go to craft them I don't get the result. What could be causing this?

crisp steeple
small current
#

O

#

H

vocal cloud
#

Lmfao other people's code sucks. For example there is a plugin called Thirst where I told the owner he did a fuckup he said thanks then never fixed it. Bugs still there kek

small current
#

lowest means after all the event

vocal cloud
#

Could you depend on their plugin then do lowest and get below theirs?

small current
#

Idk

vocal cloud
#

Or byte code edit theirs?

small current
#

The plugin is normal

#

I will try highest

small current
crisp steeple
#

or just fork the plugin if you really have to

young knoll
#

Highest will run later and let you uncancel it

crisp steeple
#

yea

small current
#

Oh so i should do highest

#

My bad

ashen quest
#

hey guys, whats the best method to deploy my plugin for testing purposes

I have a server, but dunno if theres a tool that could auto deploy for me to the server everytime i build

vocal cloud
#

Yup intellij has multiple tools to deploy

crisp steeple
#

EventPriority.LOWEST = first in line to be called
EventPriority.HIGHEST = last in line to be called
kind of confusing

vocal cloud
#

Or you can setup your own Jenkins pipeline KEKLEO

ashen quest
vocal cloud
ashen quest
#

What tab is that

vocal cloud
#

tools

ashen quest
#

Ty

plucky cliff
#

Hello guys i'm back again 🙂 i need help to add and remove attribute modifier when entering water the event i did (and it doesn't give attribute to my boots ) :

@EventHandler
    public void inWater(PlayerMoveEvent e){

        ItemStack waterBoots = new ItemStack(WaterArmor.waterBoots());

        Player p = e.getPlayer();
        Location loc = p.getLocation().subtract(0.0,1.0,0.0);

        if(p.getLocation(loc).getBlock().getType() == Material.WATER){

            ItemMeta changeMetaWB = waterBoots.getItemMeta();

            changeMetaWB.addAttributeModifier(Attribute.GENERIC_ATTACK_DAMAGE, new AttributeModifier("SpeedEffect", 1, AttributeModifier.Operation.ADD_NUMBER));

            waterBoots.setItemMeta(changeMetaWB);
        }
    }
vocal cloud
#

Do you set the boots to the player? I don't see that here just creating a pair of boots and setting it's attribute?

plucky cliff
#

i have the boots on me

terse panther
#

is there a library or API to customize mobs easy?

terse panther
vocal cloud
#

How do you have the boots on you?

plucky cliff
#

Crafting it

zenith gate
#

?paste

undone axleBOT
vocal cloud
#

Okay? But how are they going to get the meta from your method here?

#

You create a new itemstack and set it's attribute and then that's it

plucky cliff
#

OH I'M DUMB

#

WAIT I KNOW WHY

vocal cloud
plucky cliff
#

tell me if i'm wrong but, i need to check if the player have the boots and then if it have the boots get the player inventory and boots slot to add attribute to the boots

vocal cloud
#

Bingo

plucky cliff
#

Thx !

chrome ferry
#

Anyone know if i can find some old mappings? Im not sure what this is from 1.16.4 to 1.18.2

vocal cloud
# plucky cliff Thx !

However, you might want to be careful cause if it gets the attribute and then they leave the water with them off they keep the effect. Make sure to add a remove as well.

plucky cliff
#

Yes ! I'm not forgetting about that !

zenith gate
#

https://paste.md-5.net/oquyujujij.java
I have a flyingFeather here for when player right click it they can fly, but it also drains their mana, there is a problem I am having where if they disable their flying, and re-enable it, the runnable runs twice, and drains double the amount then what it should be. this goes the same for the combat log when they turn flying on again.

any ideas on how to make the runnable only go once if they decide to fly again?

chrome ferry
#

i have the mapped mojang, i just wanna know what it is as that variable doesnt exist in 1.18

plucky cliff
vocal cloud
#

Check if it has it to begin with. Use PDC or something.

plucky cliff
# vocal cloud Check if it has it to begin with. Use PDC or something.

i did that :

if(p.getLocation(loc).getBlock().getType() == Material.WATER && !(p.getInventory().getBoots().getItemMeta().hasAttributeModifiers())){

            ItemMeta changeMetaWB = p.getInventory().getBoots().getItemMeta();

            changeMetaWB.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, new AttributeModifier("SpeedEffect", 0.2, AttributeModifier.Operation.ADD_NUMBER));

            p.getInventory().getBoots().setItemMeta(changeMetaWB);
        }

but now i have another problem it give the attribute 6 times

celest thunder
#

i have a plugin simulating walking by setting the npc's velocity every tick, but i noticed that its interfering with the npc's knockback
how would i go about fixing this problem while still being able to make the npc walk

this is my code atm (sorry its kotlin)

private var motionX: Double
        get() = player.velocity.x
        set(value) {
            player.velocity = player.velocity.setX(value)
        }
    private var motionY: Double
        get() = player.velocity.y
        set(value) {
            player.velocity = player.velocity.setY(value)
        }
    private var motionZ: Double
        get() = player.velocity.z
        set(value) {
            player.velocity = player.velocity.setZ(value)
        }
    fun move(strafe: Float, forward: Float); // move method (run every tick)
zenith gate
#

?paste

undone axleBOT
ocean lion
#

is Playerpoints still a good api

vale ember
marble copper
#

question how do i make my server allow bedrock players and will allowing bedrock players break any plugin on the server?

ocean lion
alpine urchin
#

in line

crisp steeple
alpine urchin
#

use with caution kids

#

dont go to the very extreme if u dont need to

#

to still allow plugins to get infront andbehind you easily

chrome ferry
#

Whats the method to get entity slices in 1.18.2? I can see it in 1.16.4

opal juniper
#

perhaps it doesnt exist lol

chrome ferry
#

is there not an alternative

celest thunder
#

but im trying to just make it walk in a direction based off some external input

#

it works fine atm except for it negating knockback

vale ember
inland axle
#

get the current velocity

#

decay it

#

apply gravity velocity

#

apply path finding velocity

plucky cliff
eternal oxide
plucky cliff
#

not but it give me 1 time the attributes but

#

like that

eternal oxide
#

you didn;t set a slot on teh attribute

plucky cliff
#

you can ??

#
addAttributeModifier(@NotNull Attribute attribute, @NotNull AttributeModifier modifier) 
plucky cliff
#

oh

#

i was using the first one

#

ty

#

Elgar ?

#
public AttributeModifier(@NotNull
UUID uuid,
@NotNull
String name,
double amount,
@NotNull
AttributeModifier.Operation operation,
@Nullable
EquipmentSlot slot)

"Double amount" when i put 0.2 it give me A LOT of speed, do you know why ? i need to be like the effect of speed 1

eternal oxide
#

which operation did you use?

plucky cliff
#

Add

eternal oxide
#

0.2 is quite a lot to add. Its a quater block per tick

plucky cliff
#

How to get the speed of speed 1 potion ?

eternal oxide
#

well 1/5

#

how much effect does a speed potion do?

plucky cliff
#

Oh yeah

#

Dumbass me

#

20% so 1/5

#

but 1/5 is 0.2

#

wut

eternal oxide
#

if you use MULTIPLY_SCALAR_1 and set 0.1 it will increase your speed by 10%

#

so to match a potion use MULTIPLY_SCALAR_1 and 0.2

plucky cliff
#

oohhh

#

So i need to use MULTI_SCALAR and not ADD

#

Ty !

eternal oxide
#

yes, add is a fixed speed increase

#

scalar is a percentage increase

#

you don;t sort them, you add them as scores

plucky cliff
eternal oxide
#

yes

zenith gate
#

how do you stop a runnable? I have an event and when it triggers twice the runnable triggers twice

plucky cliff
#

?paste

undone axleBOT
sweet elbow
#

Hello, Could you send me a link where I can download bungeecord 1.16.5? Please

tall dragon
#

hay fellas so i got a question here. i have worked with holograms multiple times and each time it has just been such a humongous pain in my ass. they were always either despawning, not spawning at all, duplicating like crazy?. can any1 here tell me what a good approach would be to have a hologram in the game that is easily editable?, thanks in advance

plucky cliff
#

You don't.

#

Holograms are hell

#

Leave before it's too late

tall dragon
#

yea kinda noticed that

tall dragon
#

but there like has to be an acceptable way of doing it thats not bugging like shit

#

well yea

#

i got that far

hasty prawn
#

For holograms you might just cave and use HolographicDisplay's API, it's really easy to use.

hybrid spoke
#

armorstand as packets

tall dragon
tall dragon
#

how would that work

hybrid spoke
tall dragon
#

right so probably just need to sent a packet to every online player to show the fake armorstand then right?

hybrid spoke
#

that would be a good start

tall dragon
#

is there not a way to only show if the players are in certain range

#

though that would probably require checking if players are near on a certain interval

tall dragon
hybrid spoke
#

well, it isn't

ocean lion
#

Hello i was wondering if there is any good and clean way to make alot of itemstacks with itemmeta or if I just have to make a void for each one

tall dragon
zenith gate
hybrid spoke
tall dragon
#

hmm yh good point

hybrid spoke
#

but that shouldnt be needed

tall dragon
#

i guess we will see

#

will do some stress testing or something

zenith gate
#

is there a limit on the amount of recipes i can add?

tall dragon
#

technically yes

tall dragon
#

but indeed pretty much no

lost matrix
tall dragon
#

;0

lost matrix
#

Technically 2.1 billion

#

bit more

tall dragon
#

^

zenith gate
#

mhm... well I can't get one[4] of my recipes to craft

#

the recipe shows but the result doesn't come out...

#

so i thought there would've been a limit... guess not tho.

tall dragon
#

show some code

zenith gate
#

ItemStack or the Recipe?

tall dragon
#

show the recipe

zenith gate
#
public class HolyBootsMythicRecipe {
    public static void HolyBootsManaRecipe() {
        ShapedRecipe HolyBoots = new ShapedRecipe(new NamespacedKey(Wired.getPlugin(), "HolyBootsMana"), new ItemStack(HolyGrailBootsMana.createHolyGrailManaBoots()));
        HolyBoots.shape("BBB", "BDB", "BBB");
        HolyBoots.setIngredient('D', new RecipeChoice.ExactChoice(HolyGrailBoots.createHolyGrailBoots()));
        HolyBoots.setIngredient('B', new RecipeChoice.ExactChoice(ManaFragments.createManaFragments()));
        Bukkit.addRecipe(HolyBoots);
    }
}
sterile token
tall dragon
#

and what does HolyGrailBootsMana.createHolyGrailManaBoots() do

zenith gate
#

that's the itemStack for the item

tall dragon
#

show that too

oblique wigeon
zenith gate
#

?paste

undone axleBOT
zenith gate
oblique wigeon
tall dragon
tall dragon
#

since its a new item it has no item meta

zenith gate
#

oh shoot forgot to change that to an if statement

#

been meaning to stop doing that as well..

hybrid spoke
tall dragon
#

will getItemMeta not return null on new items?

hybrid spoke
#

nope

zenith gate
eternal night
#

getItemMeta only returns null for air

tall dragon
#

huh

#

the more i know i guesds

#

i always created the itemmeta for items

zenith gate
#

ah alrighty... back to the drawing board..

#

everything is done the exact same as all my other recipes I copied and pasted changed everything that needed to be.. the NameSpacedKey and the recipe+result. so like idk what could be going wrong

rare flicker
#

alright i'm a bit late to the party but i've just worked on a few recipes, what's the prob here?

zenith gate
#

result not coming in

#

but recipe being shown

#

code is above...

rare flicker
#

lemme read up for a bit

zenith gate
#

👍

tall dragon
#

u did change the namespaced key from ur other recipes tho right?

zenith gate
#

yes

#

Before: HolyBoots
After: HolyBootsMana

rare flicker
#

not what he meant

#

every namespaced key should be unique

zenith gate
#

yes it is

#

these boots are a copy, they just have more health, armor, and give more mana

rare flicker
#

so if i'm understanding correctly, you put the items in the crafting grid and it just does nothing?

zenith gate
#

so i added Mana at the end of the namespae

tall dragon
#

are you sure ur imputting the exact correct items then?

zenith gate
#

yes

#

because in the recipe book it shows the correct items as well

tall dragon
#

can you click the recipe and do the items go in?

rare flicker
#

recipe book isnt so most reliable afaik

zenith gate
rare flicker
#

at least for me i have some issues

zenith gate
#

the recipe book showss that the recipe exists...

rare flicker
#

that is reliable

#

the ingredient it shows when you dont have them as well

zenith gate
#

yep

#

and they show but I have them in my inventory..

rare flicker
#

but if you have the "real" materials the book will fail

#

like, your recipe will prefer to grab vanilla boots for the recipe instead of the actual "modded" ones

#

also

#

try removing the "new ItemStack(holy grail)" to just holy grail in the shaped recipe creation

zenith gate
#

alright im restarted and trying it

rare flicker
#

would you be willing to get in a vc ? might end up being faster than messages back and forth

zenith gate
#

yeah give me 1 min

plucky cliff
#

Hi ! I need to check if player equipped or not a custom armor, how can i do that the better way (without 1000 if else)

tall dragon
#

by checking if the equiped itemstack has a certain pdc tag

plucky cliff
#

Pdc ?

eternal night
#

?pdc

tall dragon
#

PersistentDataContainer

plucky cliff
#

Wow how can i use that ?

eternal night
#

read the guide ?

plucky cliff
#

Did read it i'll try if it doesn't work i'll come back, thanks

eternal night
#

good luck 🙂

plucky cliff
eternal night
#

Hmm, basically you might wanna do stuff like

#
NamespacedKey itemIdentifier = new NamespacedKey(pluginInstance, "customItemIdentifier");
#

or smth

#

if you can about identifying different items down the line

#

that way a) each item can have a unique string id under that key and b) if an item has anything under that key you know it is a custom item

plucky cliff
#

Ye but for each piece should i use different key or same key ?

eternal night
#

Well in the case of a key like customItemIdentifier

#

you'd reuse the key

#

and change the value

#

you need to know the key to lookup the value in the end

#

so a unique key for each item doesn't make much sense

plucky cliff
#

but same key with different value make sense, right ?

eternal night
#

Yea

plucky cliff
#

Wait when you said (pluginInstance, "customItemIdentifier"), pluginInstance refer to what ?

lost matrix
#

*JavaPlugin that is

plucky cliff
#

The main ?

frozen thorn
#

Hello, I got an encoding error -> in console, "é" are "├", any idea please?
my start.bat -> java -Dfile.encoding=UTF-8 -jar paper-1.8.8-445.jar
i have also compileJava.options.encoding('UTF-8') in my build.gradle

undone axleBOT
frozen thorn
#

it's not a plugin for me

lost matrix
#

Search in old forum posts from half a decade ago

frozen thorn
#

no

lost matrix
#

And make sure you have utf-8 file encoding

eternal night
plucky cliff
#

?paste

undone axleBOT
mellow pebble
#

can someone help me with custom inventory
i cant set itemstack to inventory slot

quaint mantle
#

provide code

humble sonnet
#

CAn someone help ne whit nexengine i cant find it for 1.19

eternal night
#

what ? xD

quaint mantle
#

@mellow pebble ?paste

humble sonnet
#

Is there nexenngine for 1.19

quaint mantle
mellow pebble
#

?

quaint mantle
mellow pebble
#

ye done

lost matrix
rotund pond
#

Hello !
I have a little question about Maven

Can I use it to write things in a YAML file by himself ?

Something like plugin's name and plugin's version 🤷‍♂️

Example:

# Configuration file for ${plugin.name} ${plugin.version}
mellow pebble
humble sonnet
#

Nexengine is a plugin

#

Is it for 1..19 ?

mellow pebble
#

maven is used to add dependencies and repositories to your project

#

for example if you are making minecraft plugin

river oracle
mellow pebble
#

you use maven or gradle to add some plugin as dependency

rotund pond
mellow pebble
#

like LuckPerms or Vault or something like that

lost matrix
rotund pond
#

aaaaaaaaaah

rotund pond
hybrid spoke
#

well, "maven himself" wont give you much

rotund pond
#

Alright xD

#

Ty

#

Gonna search somethings so

lost matrix
#

A hacky way would be using the surefire plugin

mellow pebble
#

why would you write things to YAML file when you have already plugin name and version in "written" in POM with maven

hybrid spoke
#

f.e.

name: AntiAC
author: Luziferium
version: ${project.version}
rotund pond
#

Thank you

mellow pebble
#

@quaint mantle did you find what is wrong

quaint mantle
#

No

#

I didnt look

rotund pond
mellow pebble
#

take a look pls

mellow pebble
#

i made custom inventory and itemstacks and added meta and lore and everything

hybrid spoke
#

repost your problem

mellow pebble
rotund pond
mellow pebble
#

or as item in minecraft diamond chestplate sword and potion

hybrid spoke
rotund pond
#

For this i think

mellow pebble
hybrid spoke
#

yep

rotund pond
#

Remove these 2 lines

#

and try again

mellow pebble
#

wow

#

im a dumbass

#

ty

rotund pond
#

👍

outer loom
#

What is the name for the packet that is send when a block is moved by a piston? Basically I want a group of blocks to be pushed by a non-existent piston.

tall dragon
#

well sorting can be done like this where map is your hashmap

        List<Map.Entry<UUID, Integer>> list = new LinkedList<>(map.entrySet());
        list.sort(Map.Entry.comparingByValue());
        
        HashMap<UUID, Integer> temp = new LinkedHashMap<>();

        for (Map.Entry<UUID, Integer> entry : list) {
            temp.put(entry.getKey(), entry.getValue());
        }
        
        //temp is now sorted
outer loom
lost matrix
# outer loom danke

You will probably have to replicate this movement by using FallingBlocks to be honest

granite burrow
#

is it possible to register a custom enchant so that it can be used in an enchantment table?

lost matrix
granite burrow
#

alright, Im gonna try to look more into it

vague berry
#

So I got an issue, I made a merchant.
And I spawn a villager with custom trades, the trades work,
but for some reason when I open the village it immediately closes the menu.


                Merchant villager = (Merchant) p.getWorld().spawnEntity(loc, EntityType.VILLAGER);
                List<MerchantRecipe> recipes = new ArrayList<>();
                MerchantRecipe bread = new MerchantRecipe(new ItemStack(Material.BREAD, 3), 10);
                bread.addIngredient(new ItemStack(Material.EMERALD, 10));
                recipes.add(bread);
                MerchantRecipe tntStick = new MerchantRecipe(ItemManager.CreeperGun, 10);
                tntStick.addIngredient(ItemManager.Wand1);
                recipes.add(tntStick);
                villager.setRecipes(recipes);

        }```
vague berry
noble forge
#

like what is his profession

#

I believe villagers need a profession to have trades

sterile token
#

WHo tagged me?

vague berry
#

wel non its a non profesion village but if i click him like i wanna trade i see te gui with the custom item but it closes automaticly 0,1 sec later.

noble forge
#

yeah

#

give him a profession

#

r u in creative mode?

lost matrix
noble forge
#

in survival mode u cant even get a menu

vague berry
#

how could i spawn him with profestion

#

yes

#

okey 11 sec

#

1*

noble forge
#

no clue u need to look at docs

vague berry
#

when i give it a proffesion it gets the normal trades

noble forge
#

first add the profession then add the trades

#

or u mean like it has ur trades AND normal ones?

vague berry
#
 @EventHandler
    public void onClick(PlayerInteractEntityEvent e) {
        Player p = e.getPlayer();
        if (e.getRightClicked() instanceof Creeper) {
            if (p.getInventory().getItemInMainHand().getType() == Material.STICK) {
                Location loc = e.getRightClicked().getLocation();
                ((Creeper) e.getRightClicked()).remove();

                Merchant villager = (Merchant) p.getWorld().spawnEntity(loc, EntityType.VILLAGER);
                List<MerchantRecipe> recipes = new ArrayList<>();

                MerchantRecipe bread = new MerchantRecipe(new ItemStack(Material.BREAD, 3), 10);
                bread.addIngredient(new ItemStack(Material.EMERALD, 10));
                recipes.add(bread);

                MerchantRecipe tntStick = new MerchantRecipe(ItemManager.CreeperGun, 10);
                tntStick.addIngredient(ItemManager.Wand1);
                recipes.add(tntStick);


                villager.setRecipes(recipes);


                p.spawnParticle(Particle.END_ROD, e.getRightClicked().getLocation(), 30, 0, 1, 0, 0.2);
            }
        }
#

what i want to do when a player clicks a creeper with a stick it summons a villager with custom trades

noble forge
#

where do u set the profession

vague berry
#

i dont

#

does it need a proffesion>

#

if so how can i o that

noble forge
#

it does

#

theres a method

#

called literally setProfession

#

I recommend looking at the docs for a villager entity

#

u should cast to a villager btw

#

not a merchant

noble lantern
#

heyoo

rare flicker
lost matrix
rare flicker
#

items are both brand new

#

we tried to also give the item straight out of the recipe choice and manually call the Predicate's test method, and although it returned true, it still wouldn' tcraft it

#

the recipe shows up correctly in the recipe book

#

and storing the armor piece in an inventory and retrieving it makes it now fail the predicate's test

sterile token
noble lantern
lost matrix
#

@sterile token

sterile token