#help-development

1 messages · Page 2222 of 1

digital rain
#

ehy guys, any idea how would i get the amount of bookshelfs surrounding an enchanting table

tender shard
#

I think you'd have to manually check them

quaint mantle
#

mfnalex is gonna link his library

#

or a method from it

tender shard
#

no I don't have anything for that

#

YET

quaint mantle
#

!??!

echo basalt
#

uhh

tender shard
#

but I'll do it right now because it seems useful

glass mauve
#

👀

digital rain
#

👀

echo basalt
#

NMS just does checks for that

digital rain
#

ping me or something if you have created it

tender shard
#
-2 -2   -2 -1    -2 0   -2 1   -2 2

-1 -2                          -1 2

0 -2                            0 2

1 -2                            1 2

2 -2    2 -1     2 0     2 1    2 2

#

this are the offsets you have to check

#

same for Y+1

glass mauve
#

not that hard to check

tender shard
#

so I think I'll just throw this into an array and then check those blocks

#

but of course one would also have to check for "blocking" blocks

ocean lion
#

this did not work. gives error on the return

eternal oxide
#

well you are not supposed to "return"

#

its not code to just drop it, it tells you how to get the OfflinePlayer

#

?paste your listener class

undone axleBOT
crisp steeple
#

you're checking if the player is null but then proceeding anyways?

tender shard
#

okay this is getting a bit nasty

    private static final class EnchantmentTableBookshelfPosition {
        private static final Set<EnchantmentTableBookshelfPosition> POSITIONS = new HashSet<>();
        private final int x;
        private final int z;
        private final int blockingX;
        private final int blockingZ;

        static {
            POSITIONS.add(new EnchantmentTableBookshelfPosition(-2,-2, -1, -1));
            POSITIONS.add(new EnchantmentTableBookshelfPosition(-2,-1, -1, -1));
            POSITIONS.add(new EnchantmentTableBookshelfPosition(-2, 0, -1, 0));
            // ...
        }

        private EnchantmentTableBookshelfPosition(final int x, final int z, final int blockingX, final int blockingZ) {
            this.x = x;
            this.z = z;
            this.blockingX = blockingX;
            this.blockingZ = blockingZ;
        }
    }
crisp steeple
#

couldnt you just check the blocks around the enchant table

#

or does it need to be a specific pattern

tender shard
#

but you also have to check that there is no other block inbetween

#

for example when -1 -1 is a torch, then the shelves at -2 -2, -2 -1 and -1 -2 won't work

crisp steeple
#

hm

quaint mantle
tender shard
quaint mantle
#

latter

tender shard
#

yeah sure I could do that. but first of all I want it written down nicely before I worry about that

hexed rover
tender shard
hexed rover
#

but might be more efficient 🤷‍♂️

tender shard
#

no

quaint mantle
#

unnoticeably

tender shard
#

unless you check this 6 hundred thousand times per tick

quaint mantle
#

if you only ever cared about performance in java you'd code everything in one class

tender shard
#

yeah and call your classes and methods a.b()

hexed rover
#

I mean I agree, but on the other hand only cause not everything we do in Java is as optimized as it could be, doesn't mean we have to shit on everything else does it? 😂 (Not saying u should do it different here)
The only thing I'm just thinking is if everyone works in a way like this, it kinda adds up. (Even tho taking this as an example is prolly the worst I could do but you probably get where I'm coming from)

quaint mantle
#

use rust

#

never worry about object overhead again

hexed rover
#

smh

tender shard
#

Can someone please take a look whether this looks correct? lol

        static {
            // First row
            POSITIONS.add(new EnchantmentTableBookshelfPosition(-2, -2, -1, -1));
            POSITIONS.add(new EnchantmentTableBookshelfPosition(-2, -1, -1, -1));
            POSITIONS.add(new EnchantmentTableBookshelfPosition(-2, 0, -1, 0));
            POSITIONS.add(new EnchantmentTableBookshelfPosition(-2, 1, -1, 1));
            POSITIONS.add(new EnchantmentTableBookshelfPosition(-2, 2, -1, 1));

            // Second row
            POSITIONS.add(new EnchantmentTableBookshelfPosition(-1, -2, -1, -1));
            POSITIONS.add(new EnchantmentTableBookshelfPosition(-1, 2, -1, 1));

            // Third row
            POSITIONS.add(new EnchantmentTableBookshelfPosition(0, -2, 0, -1));
            POSITIONS.add(new EnchantmentTableBookshelfPosition(0, 2, 0, 1));

            // Fourth row
            POSITIONS.add(new EnchantmentTableBookshelfPosition(-1, -2, -1, -1));
            POSITIONS.add(new EnchantmentTableBookshelfPosition(-1, 2, -1, 1));

            // Fifth row
            POSITIONS.add(new EnchantmentTableBookshelfPosition(2, -2, 1, -1));
            POSITIONS.add(new EnchantmentTableBookshelfPosition(2, -1, 1, -1));
            POSITIONS.add(new EnchantmentTableBookshelfPosition(2, 0, 1, 0));
            POSITIONS.add(new EnchantmentTableBookshelfPosition(2, 1, 1, 1));
            POSITIONS.add(new EnchantmentTableBookshelfPosition(2, 2, 1, 1));
        }
#

first numbers are the bookshelf location, second numbers are the block that must be checked whether its empty or not

hexed rover
#

this looks like youre checking the very corner blocks arent u?

eternal oxide
#

Yeah I think corners are not counted as they are No LOS

hexed rover
#

Im not sure whether theyre counted or not, but if theyre bordering the others they are most likely irrelevant

tender shard
#

erm wtf

#

how is the middle enchantment more expensive than the lowest one

hexed rover
#

that happens sometimes for some reason

quaint mantle
#

wtf lol

eternal oxide
#

I've seen that happen and thought it odd

digital rain
tender shard
#

the corrner blocks are definitely checked too

#

this gets 8 levels

eternal oxide
#

good to know. I thought they were not

tender shard
#

without shelves its just 5

eternal oxide
#

oh yes, but place others and the corners get cut off

tender shard
hexed rover
#

cause then theyre out of sight

#

at least it should be

tender shard
#

as you see, it's now level 12 and 3 in the upper left corner

hexed rover
#

yea okay, minecraft wiki says the same thing

tender shard
#

without the corner block it's only 10

eternal oxide
#

so if you built it without corners and then add corners the level increases?

tender shard
eternal oxide
#

good

tender shard
#

but this is weird

#

the sand doesnt block those shelves

hexed rover
#

low key always lived in a lie

tender shard
# tender shard

the sand in that picture would ONLY block the missing corner shelf

ocean lion
undone axleBOT
ocean lion
eternal oxide
#

nothing wrong with that code

ocean lion
#

yet when I open with /target, and click the head it does not take me to the next gui and just says "specified player is not online"

eternal oxide
#

well that would say the player is not online

tender shard
# tender shard

it seems like a shelf can have more than one "blocking position" and it's only blocked when all those positions are occupied

echo basalt
#

that's how they check internally

#

probably easier to read the original loop

tender shard
#

erm why does it have a random number in it?

echo basalt
#

honestly I'm an idiot

#

it's for the particles

tender shard
#

what class is that from?

echo basalt
#

BlockEnchantmentTable

tender shard
#

thx

echo basalt
#

this is how they check for the blocks iirc

tender shard
#

ah

echo basalt
#

bruh

tender shard
#

it's EnchantmentTableBlock

#

and it has a method isValidBookshelf

echo basalt
#

the bookshelves are check usually done in the container class

quaint mantle
#

otherwise we know why updates take so long

echo basalt
#

obfuscation only renames the fields

quaint mantle
#

oh god

echo basalt
#

you should see the warden code

#

0 pathfinders

#

purely behaviorcontroller

quaint mantle
#

show

echo basalt
#

gotta open 1.19 holupo

quaint mantle
eternal oxide
#

so they got new devs then?

echo basalt
#

because they're idiots

quaint mantle
#

i need to become a minecraft dev

echo basalt
#

go work at mojang lol

#

add transfer packet

tender shard
#

i once tested bitshifting vs multiplication and it was basically equally fast

quaint mantle
tender shard
#

I then googled and found out that the CPU itself will simply use bitshifting when possible

brave sparrow
#

Because realistically it’s getting optimized at a lower level yeah

hexed rover
tender shard
#

so whoever thinks "Hm should I replace this with a bitshift instead for performenace" is just wasting their time

echo basalt
#

pain in the ass

quaint mantle
#

i really hope that the code really isnt that bad.

tender shard
quaint mantle
#

they gotta have a team of people to make the code look like shit

echo basalt
#

pain in the ass to setup

river oracle
#

why is minecraft code so bad

echo basalt
#

I just can't bother

quaint mantle
#

AngerManagement

echo basalt
#

they sure need some

#

it's just a fancy map

#

this pains me

#

so doesthis list

river oracle
#

Object2IntMap

echo basalt
#

welcome to fastutil

#

I just wonder why the key is an Entity and not a uuid

quaint mantle
#

well if the entities are still used outside of this class for the

#

ykw ill just use rust to explain

echo basalt
#

bruh the angermanagement class is purely made for the warden

#

AngerLevel has warden sounds hardcoded

river oracle
#

what the hell

#

0 abstraction 💀 and you wonder why it takes them so long to make updates

#

if the entire codebase is that bad

echo basalt
#

They used to use PathfinderGoals

brave sparrow
echo basalt
#

had nice abstraction but it was janky

river oracle
#

does mojang need devs?

echo basalt
echo basalt
quaint mantle
#

it was slower by 15 seconds

#

wanna know why? because i didnt bitshift

echo basalt
#

let's pull a dinnerbone move and apply at mojang

river oracle
tender shard
# quaint mantle wanna know why? because i didnt bitshift

shit, yeah that's a rookie mistake. You should get an AbstractBitShiftingStringBuilderGeneratorFactory to get a BitShiftingStringBuilderGenerator that you can use to create a BitShiftingStringBuilder, then use that to append your character a million times

quaint mantle
#

true true

echo basalt
#

then went to mojang

brave sparrow
#

StringBuilder gets a lot of its code replaced at runtime by native code in the JVM anyway

echo basalt
#

y'all are seeing it from the wrong perspective

#

gpu-optimized stringbuilder

#

512 bit string manipulation

brave sparrow
# echo basalt

Which class is this, I wanna see how much the obfuscation changed it lmao

river oracle
brave sparrow
#

Which class though

echo basalt
#

probably WardenEntity or EntityWarden

#

idfk I'm not a fancy tool user

brave sparrow
#

I’ll take a look

#

I’m not a fancy tool user either I’m on my phone lmfao

#

It’s just Warden, I found it

karmic sapphire
#

What’s the game rule to disable elcytrafly check?

echo basalt
#

we just code the gamerules ourselves

tender shard
#

I THINK it works like this btw. The gold block has to be free for the gold ore to work, and the lapis block has to be free for the lapis ore to work

crisp steeple
#

dreamwastaken code 💀

river oracle
#

wait

#

sumo_sex_plugin what the fuck

crisp steeple
#

yea

river oracle
#

this gotta be fake

crisp steeple
#

he made a really weird plugin a while ago

#

there was a whole twitter thread about it

river oracle
#

huh

#

where did he post it

echo basalt
#

I have some contacts that used to work for Invadedlands and work with dream

crisp steeple
#

let me see if i can find it

echo basalt
#

they don't go that low in terms of quality

crisp steeple
#

apparently he sent this sex plugin to a minor or something

river oracle
#

what the hell

#

doesn't surprise me anymore tho

tender shard
#

lol who are you talking about

#

and wtf is a sex plugin lmao

#

and why didn't i have the idea to do a sex plugin

brave sparrow
#

Let’s go shift in this corner step bro

river oracle
crisp steeple
river oracle
crisp steeple
tender shard
#

I don't understand how the enchantment table bookshelf thing works

#

so fuck it

humble tulip
#

And try it

tender shard
#

well the funny thing is

#

one bookshelf doesn't do shit lol

#

both, no shelf or one shelf results in max level 5

#

when you add a second shelf you're up to level 7

digital rain
#

lmfao

brave sparrow
#

Should just be in the table code no?

digital rain
#

at least you tried, not sure if you gave up yet

tender shard
humble tulip
tender shard
#
    public static boolean isValidBookShelf(Level var0, BlockPos var1, BlockPos var2) {
        return var0.getBlockState(var1.offset(var2)).is(Blocks.BOOKSHELF) && var0.isEmptyBlock(var1.offset(var2.getX() / 2, var2.getY(), var2.getZ() / 2));
    }
#

like WTF is the offset between var1 and var2

#

how can the offset between the enchantment table and the bookshelf also be a bookshelf

brave sparrow
#

Let me check rq

#

What class is that in

tender shard
#

EnchantmentTableBlock

brave sparrow
#

package?

humble tulip
#

That's actually weird

tender shard
#

net.minecraft.world.level.block

brave sparrow
#

Kk

humble tulip
#

Cuz id assume that will be near 0 0 0

tender shard
#

I don't understand this whole offset thing at all

humble tulip
#

The offset that is

tender shard
#

I mean the offset between the shelf and the bookshelf should be sth like 0,0,-2

#

but they directly check the block at the offset position, makes no sense to me

humble tulip
#

It's checking 0,0,2 for a bookshelf😂

tender shard
#

like i have a table at 100,64,100 and a shelf at 100,64,102. the offset would be 0,0,2?!

#

why are they checking the block at 0,0,2?

#

or am I missing sth here

humble tulip
#

Cuz realistically it's never a bookshelf

brave sparrow
#

Ok here’s how it works

dreamy idol
#

What would be a good service for Bungee <-> Spigot communication?

eternal oxide
#

go place a bookshelf at 0,0,2 ans see if it affects the level

brave sparrow
#

The enchantment table is checking for a valid bookshelf at (x, y, z), you understand that so far right @tender shard ?

kind hatch
#

I mean, an offset of 2 makes sense. There's a block of space inbetween the bookshelf and the enchanting table, so....

brave sparrow
#

var1 is the position of the enchanting table

humble tulip
#

Does offset get the offset

#

Or add it?

brave sparrow
#

var2 is the offset from the table to each bookshelf being checked

humble tulip
#

Ahh

tender shard
#

wtf

humble tulip
#

So it adds iy

tender shard
#

why are they using a BlockPos for an offset, that's just confusing

brave sparrow
#

It then computes whether the block at var1 + var2 is a bookshelf

tender shard
#

yeah that makes sense now

#

I of course thought that a BlockPos is a block position in the world and not just the offset

brave sparrow
#

Lol

tender shard
#

alrighty then I can just translate this to regular bukkit code, and lets see whether it works lol. thanks

brave sparrow
#

BlockPos is basically Vector rather than Location

tender shard
#

yeah the name is so stupid

#

because it's literally block POSITION

#

should be called just Vector3

dreamy idol
tender shard
brave sparrow
#

That would’ve been a pain to figure out without the variable names

dreamy idol
humble tulip
#

Oh u wanna use netty

#

U can ig

#

It'll be more difficult than redis tho

#

Depends on ur usecase

dreamy idol
#

just short time information like updating server states and money for players

tender shard
dreamy idol
#

in that case each server requires its own channel doesn't it?

#

or should i use a channel for a specific kind of information?

tender shard
#
    private static final int[][] BOOKSHELF_OFFSETS = new int[][]{
            {-2, 0, -2}, {-1, 0, -2}, {0, 0, -2}, {1, 0, -2}, {2, 0, -2},
            {-2, 0, -1},                                      {2, 0, -1},
            {-2, 0,  0},                                      {2, 0,  0},
            {-2, 0,  1},                                      {2, 0,  1},
            {-2, 0,  2}, {-1, 0,  2}, {0, 0,  2}, {1, 0,  2}, {2, 0,  2},
            {-2, 1, -2}, {-1, 1, -2}, {0, 1, -2}, {1, 1, -2}, {2, 1, -2},
            {-2, 1, -1},                                      {2, 1, -1},
            {-2, 1,  0},                                      {2, 1,  0},
            {-2, 1,  1},                                      {2, 1,  1},
            {-2, 1,  2}, {-1, 1,  2}, {0, 1,  2}, {1, 1,  2}, {2, 1,  2},
    };

Finally this looks fancy lol

quaint mantle
#

i thought new Type[]{}

#

was redundant for declarations

tender shard
#

yeah it is

#

typed it out of habit

humble tulip
tender shard
#

he means you can do this

#
    public static final int[][] BOOKSHELF_OFFSETS = {
            {-2, 0, -2}, {-1, 0, -2}, {0, 0, -2}, {1, 0, -2}, {2, 0, -2}, ...
#

without new int[][]

humble tulip
#

Wait really?

#

Sonce which java ver?

quaint mantle
#

since always

humble tulip
#

👀

brave sparrow
#

^

humble tulip
#

Wow

crisp steeple
#

swear i tried it before and it didnt work

tender shard
#

this will not work in expressions though.

for(String name : {"mfnalex"})

will not work

brave sparrow
quaint mantle
brave sparrow
#

You can’t do it in assignments

tender shard
#

this only works like this

for(String name : new String[] {"mfnalex"})
#

also why is this idiot using an array if he only stores one name

#

what a jerk

quaint mantle
#
@NotNull
public static String camelToKebab(@NotNull String name) {
    StringBuilder result = new StringBuilder(name.length() << 1);
#

@tender shard

#

cry

#

im pretty sure one of your blockdata methods had like 8 bitshifts

tender shard
#

yes CustomBLockData #getKey

#

someon PRed that IIRC

humble tulip
#

Why would you bitshift the length of a string?

quaint mantle
humble tulip
#

I'm not good enough to understand that

quaint mantle
#

a stringbuilder keeps an array of bytes

#
byte[] content;
humble tulip
#

Ye that's the bytearray of the string right?

quaint mantle
#

yeah

#

this content has an initial size of 15 bytes

humble tulip
#

Ok but why do you shift by one bit?

quaint mantle
#

I ♥ bytes

#

thats 9 characters

#

18 bytes

#

the stringbuilder will have to grow the internal array, because this wont fit

humble tulip
#

See i told you I'm not good enf😂

quaint mantle
#

just listen

quaint mantle
#

so the stringbuilder creates a new array and uses that one instead

humble tulip
#

Ohh

quaint mantle
#

bitshifting once to the left just means multiplying by two

#

its so much faster tho

humble tulip
#

Won't the compiler fix that?

quaint mantle
#

nope

humble tulip
#

I thought it made optimizations like those

quaint mantle
#

dude i made a stringbuilder and appened a million characters
it was slower by 15 seconds
wanna know why? because i didnt bitshift

humble tulip
#

If u divide by 16, it can bitshift 4 times

quaint mantle
#

java doesnt optimize shit

humble tulip
#

Wow

#

Nice

#

1char=2bytes?

quaint mantle
#

for utf-16

humble tulip
#

Utf8 is 1char =1byte then

quaint mantle
#

yeah

humble tulip
#

Ohh the number after uts is num of bits

#

😂

#

Utf

quaint mantle
#

utf-16 = unicode transformation format, 16 bits

#

utf-8 = unicode transformation format, 8 bits

#

2^16 = 65536 possible characters

humble tulip
#

Utf16 has emojis 8 does not?

quaint mantle
#

i guess

humble tulip
#

Ah

quaint mantle
humble tulip
#

That makes sense

eternal oxide
#

8 has emojis. It uses control codes to double up bytes

quaint mantle
#

whatever elgar says is right

humble tulip
#

So basically 2 chars is one emoji in utf8?

eternal oxide
#

yep

#

well 3

quaint mantle
#

char != byte

eternal oxide
#

control code and 2 bytes

humble tulip
#

Hm

brave sparrow
quaint mantle
#

JVM optimizes

#

most java compiler do not

brave sparrow
#

It doesn’t matter if the compiler does if the JVM optimizes the bytecode

humble tulip
#

I swear the jvm is magic

quaint mantle
#

how

brave sparrow
#

The JVM optimizes like a beast

humble tulip
#

It just seems to do its own thing

#

I dont understand it thus magic to me

brave sparrow
#

Any sufficiently advanced technology is indistinguishable from magic

quaint mantle
#

rust

#

wanna know something cool about rust

#

String is an owned, growable string, like a stringbuilder in java
Box<str> is a non-growing string, with ownership

humble tulip
#

Is string+= faster than stringBuilder.append?

quaint mantle
#

hell no

humble tulip
#

Intellij tells me to use stringBuilder.append whwn I use the former

quaint mantle
#

string += toAppend means string = new StringBuilder(string).append(toAppend)

humble tulip
#

Oh wtf

#

So it creates a new stringbuilder

quaint mantle
#

strings are immutable

#

it has to

#

dont worry its optimized

#

its just a warning that your code is bad

brave sparrow
#

Uhhh

#

I’m not sure about it allocating a new StringBuilder

#

String += is significantly slower than using a stringbuilder

quaint mantle
humble tulip
#

What abt something like "sql statement stuff here" + some variable + " more sql stuff there"

brave sparrow
#

That’s why people use stringbuilder

humble tulip
#

Is stringbuilder append faster?

quaint mantle
#

no difference

brave sparrow
humble tulip
#

Ok

brave sparrow
#

Specifically in the case where you’re appending to a string in a for loop or something similar

ornate patio
#

how do i force a wheat seed into a brewing stand

tender shard
#

mojang's code is so weird

#

if you set the maxStackSize of an item to > 1, it is not enchantable anymore

humble tulip
ornate patio
#

oh is it that easy

humble tulip
#

Idk have u tried?

#

I dont see why it shouldn't

ornate patio
#

well

#

would it also be possible to be able to have the user directly put the seed into the brewing stand

#

like a normal drag and drop

brave sparrow
#

You can’t let the client do that

#

But if it fires the appropriate event, you could allow it to happen

ornate patio
#

can i abuse inventoryclickevent?

brave sparrow
#

Potentially

ornate patio
#

alright time to do some experimenting

#

it actually seems very possible

ornate hollow
#

is it possible to retrieve the url from the plugin.yml of another plugin
I need it so that i can expose the plugin list and the links to theme on server webpage (aka i am building a rest api)

tender shard
#

JavaPlugin#getPluginDescriptionFile() -> #getWebsite()

ornate hollow
#

thank you

ornate patio
#

is there an alternative to this

worldly ingot
#

No. Just be aware of that notice

#

You notice that a lot more when the player is in creative mode, but you will notice it in survival mode too

ornate patio
#

well

#

damn idk if i should use it then

humble tulip
#

R u setting it to null?

ornate patio
#

i'm removing one item from the itemstack

#

which could potentially lead to null

humble tulip
#

Ah

#

Might be messy

#

Try it and see tho

unborn kiln
#

How would I go about making an armor stand go up and down smoothly a specified amount of blocks in a loop? If anyone could help that'd be greatly appreciated. Sorry if I come across a bit rude.

humble tulip
unborn kiln
#

I know that

#

and I know to use a sinus function

#

but I don't really know how

humble tulip
#

Lets say from y=0 to y=5

#

Over 100 ticks

#

U divide the distance by 100

ornate patio
humble tulip
#

Then u tp it up the increment each tick

unborn kiln
#

kk, tysm

humble tulip
ornate patio
#

sick

#
@EventHandler
@SuppressWarnings( "deprecation" )
public void onClickBrewingSlot(InventoryClickEvent event) {
    if (event.getInventory() instanceof BrewerInventory) {
        BrewerInventory inventory = (BrewerInventory) event.getInventory();
        // If the slot is one of the three potion slots
        if (event.getSlot() >= 0 && event.getSlot() <= 2) {
            // If the item is a seed
            if (event.getCurrentItem().getType() == Material.AIR && event.getCursor() != null && SEEDS.contains(event.getCursor().getType())) {
                ItemStack droppedItem = event.getCursor().clone();
                droppedItem.setAmount(1);
                event.getCursor().setAmount(event.getCursor().getAmount() - 1);

                inventory.setItem(event.getSlot(), droppedItem);
                event.setCursor(event.getCursor());
                event.setCancelled(true);
            }
        }
    }
}
#

I'm trying to allow the player put seeds into the brewing stand

#

and it works and all

#

problem is if I try to put seeds in slots 0, 1, or 2 of my OWN inventory with the brewing prompt open it'll just make the seeds on my cursor disappear

#

trying to put it here makes the item teleport to the brewing stand slot, and if it's already full it'll just delete items from my cursor

tender shard
#

?paste

undone axleBOT
sterile token
#

Is possible to hide a block and unhide it?

tender shard
#

Player#sendBlockChange

ornate patio
# ornate patio

basically how do I distinguish between the brewing part and my own inventory

sterile token
#

Atm in using an oddy way, setting the block to air and then by the location setting up to the old block

tender shard
sterile token
ornate patio
tender shard
sterile token
tender shard
#

or from Player#getOpenInventory

sterile token
#

Also remember we have the javadocs which tell all the events

#

?jd-s

undone axleBOT
ornate patio
#

I'm trying to check if the slot clicked is between 0 and 2
event.getSlot() >= 0 && event.getSlot() <= 2
but like- how can I make sure its slots 0-2 in the brewing stand and not in the player inventory

kind hatch
#

Get the top inventory

tawny jay
#

need a manhunt plugin asap

kind hatch
#

?services

undone axleBOT
sterile token
ornate patio
tender shard
#

quick, you need it asap!

ornate patio
#

!!!

ornate patio
#

event.getInventory() instanceof BrewerInventory && event.getClickedInventory() == ???

kind hatch
#

InventoryClickEvent#getView#getTopInventory()

ornate patio
#

ah

#

so like this I'm assuming
event.getView().getTopInventory().equals(event.getClickedInventory())

tender shard
#

yeah that checks if you clicked the top inventory

ornate patio
#

great

tender shard
#

but you also must always think of the InventoryDragEvent too

ornate patio
#

true

#

i mean actually idrc that much

#

its just 3 items

quaint mantle
#

I was wondering if it is possible to make a gui that is bound to a keybind in bukkit or I need to make it as a mod?

kind hatch
quaint mantle
#

thx so bassicly it could be made with an item

#

or a command

kind hatch
#

The only “keybinds" you can really use are the Drop Key or the Swap Hand Key. I’m not sure if there are other ones that have events tied to them, but if there isn’t an event, you’ll have to rely on mods for whatever functionality you are looking for.

quaint mantle
#

well thx for responding to me

wet breach
echo basalt
#

it sends a packet for whenever you press F

#

small price to pay in some servers

wet breach
#

I forget what the F key does

echo basalt
#

offhand

wet breach
#

ah, well for most things key presses are sent

echo basalt
#

even if you're not holding anything, packets still get sent

wet breach
#

for instance, opening the inventory for example

#

or moving

echo basalt
#

that's the best part

#

you can cancel the packet / event and it's smooth

#

No client-side 1 tick item bullshit

sterile token
#

Your welcome

wet breach
#

key presses are in packets too or can be lol. Point being, is you generally can't listen for specific key presses rather just events/actions from packets

sterile token
#

If need extra help just dm me or ask it here

echo basalt
#

I wouldn't say verano is the most helpful guy out here

wet breach
#

it is handy to have the packets that way, but sometimes it is better to listen for key presses, for example when moving 😛

echo basalt
#

so just ask here

sterile token
#

You always saying bullshit about me

#

Im not idiot i could be dum but not ...

echo basalt
#

Just a ask / reply ratio

echo basalt
#

We got no beef, I'm neutral

sterile token
wet breach
#

They are chaotic neutral

sterile token
#

Lmao dont play with someone smoked

#

Smoked i can be really agressive

#

So maybe i would have to take a relax and not hurt anyone

wet breach
#

doubt you will hurt me

sterile token
#

lmao i cannot smoke Marihuana anymore

wet breach
#

I lift tires for exercise 🙂

echo basalt
#

I don't smoke or drink

wet breach
#

so you are no fun then

#

got it

echo basalt
#

just angry by default because I hate myself

#

👍

sterile token
wet breach
#

I got a job recently where I change out semi tires off trucks and trailers 🙂

#

my fastest time on a truck, is 33 minutes changing out all 10 tires 😄

echo basalt
#

Sounds fun

hybrid spoke
echo basalt
#

By day I'm an intern at a school

#

jobs include passing ethernet cables through walls and replacing projectors

#

by night I'm coder man

wet breach
#

they pay me $20.50 an hour to change tires, I don't even have to take the tires off the rims either

echo basalt
#

I don't get paid 👍

wet breach
#

that is illegal then

echo basalt
#

nope

#

they call it on-the-job training

wet breach
#

using interns to replace skilled labor is illegal in the US

echo basalt
#

and it's mandatory for my type of education

sterile token
echo basalt
#

I only get paid for my coding stuff at night

wet breach
#

in the US it is illegal to have interns do work on their own that isn't for the purposes of teaching

echo basalt
#

ehh

#

I abuse the system a bit

#

by doing coding stuff whenever classrooms are busy

#

and leaving early on sunny days when the shawty feels like going for a swim

wet breach
#

now while although most interns are paid in the US, companies can pay them a significantly lower rate

#

so there is that

#

but they still for the most part get paid lol

echo basalt
#

interns by law must be unpaid in my country lol

#

but companies are obligated to pay for food and transport costs

#

which ends up to like 200$/mo

#

except since I work at a school, and live across the street, I get nothing

wet breach
#

well in the US there is a way to not pay interns, but its a very fine line that is easy to get in trouble for, so most businesses just pay interns so they don't get in trouble

echo basalt
#

Ehh

sterile token
#

what the heck are interns?

echo basalt
#

the amount of cuts I go through during work days would not make it worth the money I'd receive if I were in the US

#

my hands end up getting scratched / cut like 2-3x per day

wet breach
# sterile token what the heck are interns?

they are people that not certified or possess the skills for the job, and they are used to teach them the skills or help them get certified. So they get to learn with someone who is skilled.

sterile token
#

In technic school we have some people known as "assistants" which repair computers, do internet staff

echo basalt
#

went into a programming course with 5 years of experience just to get a degree

wet breach
#

there is no degree for programming

echo basalt
#

Well I'm getting an associates

wet breach
#

in what?

#

I am certain it doesn't say Associates in Programming

echo basalt
#

IT programming / management

sterile token
sterile token
echo basalt
#

> Internship in programming
> mounting electrical and network sockets for 6 hours straight

#

caught covid midway, gotta work 9 hours / day now 👍

#

system made to fuck me over but nothing I can do

wet breach
# sterile token Allright, but they must be paid for what they do. Because they are also learning...

well typically because they don't have those skills or certifications their work typically tends to be of lesser quality or it takes twice as long to complete a job. So there is ways to not pay an intern, however in the US too many businesses kept getting in trouble for abusing this system so most places that hire interns typically pay them, but they get to pay them significantly less for some fields

sterile token
#

also sorry for chaging topic, but is the same this?

  1. if (!condtion-1 && !condition-2)
  2. if (!(condition-1 && condition-2))
sterile token
#

I dont think

#

Because im doing:

echo basalt
#

not-one and not-two is the same as not-(one and two)

sterile token
#

if (!(argument.getPermission().isEmpty() && sender.hasPermission(argument.getPermission()))) {}

And is returning true

sterile token
echo basalt
#

uhh

#

wtf

#

if it's empty then you can't really get it

#

I guess it returns true by default

sterile token
#

Hmn its actually dumb, because it shouldnt be returning true

echo basalt
#

drop the ()

sterile token
echo basalt
#

no its not

sterile token
#

Because dropping the (!(condition-1 && condition-2)) ill make the code negate only the first condition

vale stag
#

Hello! I'm new to plugin and resource pack development and wanted to know if this is a good way to do this.
OK so I wanna add an a set of items and mechanics attached to those items (scuba gear that allows one to breath for a bit longer underwater), I don't wanna make a full on mod, just a resource pack to add the items with their recipiew, and I think I need to add stuff to a plugin to make the items have the effect (a bunch of setRemainingAir calls to manually set the "higher" oxygen capacity)
Is this approach a good idea? Or is this massively overkill and can be done just with the resource pack?

sterile token
#

Because the texture pack only is used to give a texture to that custom recipe

quaint mantle
quaint mantle
#

?

quaint mantle
#

resource pack != texture pack

sterile token
#

They are diff

#

I didnt know my bad

vale stag
#

yeah that's why I'm asking, can a resource pack do something like player.setMaximumAir()?

#

I legit can't find much documentation on resource packs, most I get is from Microsoft for bedrock edition

paper viper
#

Please only use the resourcepack only for textures, and do everything else in plugins

quaint mantle
#

do you mean datapacks?

paper viper
#

it will save your time

sterile token
quaint mantle
#

you cant code through texture packs

quaint mantle
vale stag
#

oh they are called datapacks, sorry

sterile token
#

Using texture pack, you only give textures to items

paper viper
#

please no 💀 datapacks are literally a million chained commands

quaint mantle
#

yeah use plugins

vale stag
#

ok, thanks!

sterile token
#

How do you make texture packs?

#

And where i can download the base for 1.19?

paper viper
#

you could extract it from the client jar ig

sterile token
#

The jar i obf

paper viper
#

?

#

obfuscation doesnt do anything

#

its resources

sterile token
#

Yeah the jar sources are obfuscated

paper viper
#

oh...

sterile token
#

I have already tried

#

I think it because i use a moded 3rd party client

#

I ill try extracting from the original one

paper viper
#

do the original one

#

lmao

sterile token
#

Dont be rude...

#

Its not necessary

quaint mantle
#

lol

sterile token
#

Sounds like you are trolling

paper viper
#

dude its a joke i stfg

sterile token
#

Dont joke its not a good momment

paper viper
#

i feel like everyone here has their sarcasm sensors burnt out

quaint mantle
#

its just verano

#

ignore em

sterile token
#

shut up who ask you?

#

wait wait im just trolling

#

Dont ban me

#

Its was all a joke

#

I never get mad when someone is rude

#

I just ignore them

quaint mantle
sterile token
#

i was trolling

#

If not i would just ignore him

#

😂

dusk flicker
#

ban them

#

trolling

#

boom gone

sterile token
#

No why

#

Lot of people trolls and no one do anything to them

dusk flicker
sterile token
dusk flicker
#

lol didnt realize this is in helpdev

sterile token
sterile token
#

I thought i were on general

#

My mistake

paper viper
humble tulip
#

gui lib to make something like this easily?

#

^^

#

paginated

#

the heads are the "page contents"

#

and orange glass

#

i know but rn i dont wanna work on making something

vocal cloud
#

Yeah there are pagination libs out there

humble tulip
#

i tried spigui

#

i dont understand how to do this with it

#

ah wait

#

i figured it out 😂

vast raven
#

How to get the ID of a task inside that task?

quaint mantle
#

super.getTaskId()

tender shard
#

it sends a ClientboundPlayerInfoPacket

ocean lion
humble tulip
#

there;s a stickSlot method

#

that makes that slot permanant thru pages

kind hatch
#

It's the opposite method for hidePlayer so it makes sense.
You may want to look into how some vanish plugins handle this. Because, if you want players to not be hidden on the tablist, but invisible to other players, you may need something a little more advanced.

Alternatively, you could overwrite the tablist, but then you run into issues with interfering with other tab plugins.

tender shard
#

the serialize() method on CraftPlayer is a joke lol

    public Map<String, Object> serialize() {
        Map<String, Object> result = new LinkedHashMap();
        result.put("name", this.getName());
        return result;
    }
#

it's working exactly as intended

kind hatch
#

^

#

What you want is not possible with the methods you are currently using.

tender shard
#

you hide a player, then show it again. what did you expect to happen lol

tender shard
#

check out how all those vanish plugins do it

#

for example, first thing that comes to my mind: send all players a packet that you changed the gamemode to spectator

tender shard
#

oh wait then the name in tab is italic

kind hatch
#

And at the bottom of the tablist

wet breach
#

what do you mean not shown?

kind hatch
#

On the tablist.

#

You may want to also look into scoreboard teams and add the player to one when they are "invisible" That way it may not entirely screw up their position in the tablist.

crude loom
#

How can I change the color of potions in 1.8?

wet breach
#

might want to try that

crude loom
#

The setColor method doesn't exist in 1.8

wet breach
#

1.8 is also not supported anymore either

kind hatch
wet breach
#

yep officially hasn't been supported for like a decade

kind hatch
wet breach
#

yes here by spigot

river oracle
#

lol the last update to 1.8 was the log4j fix

#

yea super supported guys

wet breach
#

the reason it is an exception is due to the fact that many people use 1.8 and has to do with security. Spigot could have chosen to not do that, but that was MD's decision. Support for 1.8 does not exist and hasn't for a decade or round about

kind hatch
#

Perhaps I misunderstood. I thought you meant there was an announcement or something that said 1.8 will no longer be supported on the forums or something.

river oracle
tender shard
#

omg log4j is already 7 months ago

river oracle
wet breach
#

just because people choose to use an outdated software does not mean other people are obligated to provide support for something they purposely chosen to use despite it being outdated. That is just ignorant

river oracle
#

new resource guys

#

🥳

tender shard
kind hatch
#

Can't wait to implement it in my projects.

river oracle
#

I've already added it

#

though I keep gettin g an ArrayIndexOutOfBoundsException

#

I hope I'm not doing anything wrong

#

or if this is intended functionality

kind hatch
#

I believe it's intended.

#

Must be doing something right then.

tender shard
#

why did you copy paste my answer?

wet breach
# crude loom The ``setColor`` method doesn't exist in 1.8

point being from the above conversation for you, is you can wait till someone chooses to help but you also might not get help at all due to the fact it is really outdated. Typically it is up to you to figure it out with whatever problems you have because some of us here don't even use those versions anymore and don't remember all the various API's that exist or don't exist for that version.

hexed rover
river oracle
kind hatch
#

Don't question it. He's a world class developer.

zenith gate
#
ShapedRecipe tpBow = new ShapedRecipe(new NamespacedKey(getPlugin(), "Teleport Bow"), new ItemStack(BowUtils.createTeleportBow()));
        tpBow.shape("AAA", "ABA", "AAA");
        tpBow.setIngredient('A', Material.ENDER_PEARL);
        tpBow.setIngredient('B', Material.BOW);
        Bukkit.addRecipe(tpBow);

What is my error here?
I get nothing from the build console, nor the game console.

river oracle
#

true he just released the most useful resource i've seen in a while

kind hatch
#

He went out of his way to make it public!

river oracle
tender shard
zenith gate
#

I mean it's in on Enabled.

tender shard
#

you cannot use spaces

#

it'll automatically turn the uppercase letters to lowercase

zenith gate
#

oh in the key

tender shard
#

so that's no problem, but a space in the key is a problem

zenith gate
#

Nope still not getting my item when trying to craft it..

river oracle
kind hatch
#

Also share your full code.

#

?paste

undone axleBOT
zenith gate
river oracle
#

server log and full code

zenith gate
kind hatch
#

Code related to the recipe.

sterile token
#

If not solve it alone

winged anvil
#

if i have multiple plugins for just my own use connecting to a mongo database, would it be beneficial to just make one plugin to connect with and have my other plugins use that plugin to access the database?

sterile token
zenith gate
kind hatch
river oracle
sterile token
hexed rover
#

Would also most likely come at the cost of not being able to use different databases per plugin

sterile token
kind hatch
hexed rover
# sterile token Why not? You can do that anyway

Depends on how your api handles it, but if it was just going to connect to 1 database then you're stuck to that one. If you allow access to different databases then it doesn't seem much different to me than just having a connection per plugin

zenith gate
sterile token
hexed rover
#

I've thought about this myself once, I don't really think it's really worth it though, as being able to run things standalone sometimes really is a blessing

kind hatch
#

^ this.

quaint mantle
#

ive never seen arrow kotlin code

#

i thought kotlin was for good programmers

sterile token
#

Also people, if you need to deploy some databases for testing you can use https://railway.app it allow you to create multiple project with database services, enviroments, webhooks, add members, etc

Railway

Railway is an infrastructure platform where you can provision infrastructure, develop with that infrastructure locally, and then deploy to the cloud.

#

Keep in thoguht im not doing spam, just trying to help people

vocal cloud
#

kek Just run your own local DBs

sterile token
wet breach
#

love how the cloud is still being advertised even though there isn't anything special about it for developers

sterile token
wet breach
#

nodejs is just javascript

#

no real deploying needed

sterile token
#

In the case of using that website, i didnt figure how to deploy a nodejs app

wet breach
#

but in regards to developers, the cloud doesn't mean anything. It is still a server

sterile token
#

But idk i see useful for some people, but its not amazing

wet breach
#

what annoys me with places that use the cloud to advertise as a developer is not telling me the hardware specs

sterile token
#

it would be really useful them telling you have x bandwith for limit (before your app goes down), x cores and threads, etc

winged anvil
#

well really all i need it for is a currency, i have a currency for each player but need the currency in multiple different plugins

#

so i thought having a core plugin for getting players coins would do

#

all the plugins i make are strictly for my server

sterile token
#

Did you have any concurrency problem?

#

For example, player leaves lobby server, and he joined a new server but his data was not udpated, because he joined a minigame server faster than the process of saving data from lobby and loading it into minigame

wet breach
#

this is one of the reasons for using caching mechanisms. Specifically expiring caches

#

with an expire cache you would solve that problem @sterile token

sterile token
#

Oh

#

I always used redis to solve that problem

#

Im so idiot

wet breach
#

redis is a cache server that does have expiring cache features

sterile token
#

For saving concurrency problem i load only 1 global cache and them work over it

wet breach
#

however you don't need redis for this

sterile token
#

Can u send an example?

#

So i can understand better :D

wet breach
#

well spigot has guava shaded in which has expiring cache mechanisms

sterile token
#

Yeah i know

#

But i dont know how to run code when it expire

wet breach
#

the cache handles it

#

you just tell the cache handler what to do when it encounters an object not in cache

#

IE where to pull it from

#

then everything else accessing the cache just uses the cache methods to get the object. If it is expired, cache handler goes and pulls the object to put in the cache

#

if its in the cache already not expired yet, it just gives that instead

sterile token
#

Allr

#

Frost one last thing

wet breach
sterile token
#

Is it async?

wet breach
#

you should be able to use it async

#

async doesn't automatically mean multi-threaded

sterile token
#

I mean in the way of how it pull

#

If he pull the data async or how

#

Because non async database things can make the main thread slower or even block it

#

or im wrong?

wet breach
#

you can create a custom method to return stuff from a db and then have that cache handler call that method

ocean lion
#

org.bukkit.plugin.InvalidPluginException: java.lang.NullPointerException: Cannot invoke "com.yanesagrybnow.colornickname.ColorNickname.getConfig()" because "com.yanesagrybnow.colornickname.ColorNickname.instance" is null

#

why does it give me this when my config is not null ?

kind hatch
#

Probably because you are using a static instance of your main class to access a config.

wet breach
#

instance seems to be null

#

I am assuming you are not instantiating an object you are trying to use

ocean lion
#

    public ColorNickname() {
        instance = this;
    }
kind hatch
#

Why? Just use the class itself as it's own instance at that point.

sterile token
wet breach
#

why are you using a singleton pattern here?

wet breach
sterile token
sterile token
ocean lion
#

What should I do or replace?

sterile token
wet breach
#

you can have a method that spins up a thread to fetch DB stuff

sterile token
undone axleBOT
sterile token
wet breach
#

synchronized void getDBInfo() {
    Thread something = new Thread();
    //override run method put code in the run method, then call something.start() return db stuff etc.
}
sterile token
#

Hmn

#

Frost

#

I just realized there i a mongo-java-driver async

wet breach
#

you don't have to use the synchornized key word

#

but you might depending on how it is done and what is accessing it

sterile token
wet breach
#

I don't use mongo so wouldn't know

quaint mantle
kind hatch
#

I thought that keyword made the code run on the main thread. (If it's already on another one)c

sterile token
#

Allr dont worry frost

wet breach
#

very handy to use for things like lists in other threads

#

or when needing to access a list in another thread

ocean lion
#

    public static ColorNickname getInstance() { return instance; }

    @Override
    public void onEnable() {
        instance = this;
#

I change it to this, still same error

wet breach
#

stop using statics

#

also read up on dependency injection as told up above

ocean lion
#

am I a static abuser

wet breach
#

?di

undone axleBOT
wet breach
#

read that

ocean lion
#

But I dont understand, I have been using this method for configs for some time now

#

Never given me an error

wet breach
#

while true it is unnecessary in the way you are using it

#

singleton pattern isn't for to be used with everything

sterile token
#

If you dont read it carefully you wont understand it

kind hatch
wet breach
#

in this instance

#

singleton pattern is screwing them over 😛

kind hatch
#

Static has a time and a place. However, for spigot plugin development, you will seldomly use it.

wet breach
#

they been told how to resolve it, they are just refusing to do it a different way which that is beyond the scope of this discord if they refuse to do what was stated 😛

quaint mantle
#

Can i use JDA with in Spigot?

So can i make something similar to DiscordSRV like that? with JDA though?

kind hatch
#

Yes

quaint mantle
#

like what im tryin to ask is can i combind jda and spigot into 1

kind hatch
quaint mantle
#

thanks

proper notch
#

BTW discordsrv is made with jda

ocean lion
#

Could not initialize class error

#

at Colorize.sendMessage(player, Message.NO_PERMISSION);

#
 Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.yanesagrybnow.nicknamecolor.Message

at com.yanesagrybnow.nicknamecolor.Command.onCommand(Command.java:17) ~[?:?] 
sterile token
ocean lion
#

No

kind hatch
#

?learnjava

undone axleBOT
ocean lion
#

So that means you cant help me with my question or

sterile token
#

LMAO you shouldnt be doing plugins without being learned the basics of java

ocean lion
#

LMAO

#

I can do if I want to or?

kind hatch
sterile token
#

If you dont know basic java, its impossible to help because its like talking to you in chinese

kind hatch
#

You gotta learn to walk before you can run.

ocean lion
#

Great comparison. Java and chiense

#

chinese

#

It's just, it does not require me to learn java before just making some basic plugins. And the question still remains about the error, if you cant solve it or dont want to just say that instead

winged anvil
#

i mean you still wont understand until you apply but

#

better than not having any idea

sterile token
#

if he dont want to learn it, the best is to go and do our things

winged anvil
#

word

kind hatch
#

Read the first 25 pages of the Java book by Oracle and so much will make sense.

ornate patio
#

How do you check if a BlockPos is reachable by an entity in NMS? This horse is programmed to go next to the nearest source of water but the idiot just faces the wall. If I get rid of the water behind the wall the horse will go to the water farther away instead

sterile token
ocean lion
#

Must be pretty hard for you Verano

sterile token
#

He?

golden turret
#

noooooooooooooooooo

#

I always read "Veterano"

ocean lion
#

You read a book and now you are educated yet when someone who knows less asks for help with a matter he is not familiar with, you laugh

wet breach
ornate patio
winged anvil
#

wow

wet breach
#

hence you will need to make your own thing to detect that

winged anvil
#

take a week and do it

ornate patio
#

damn

sterile token
#

I dont know why people nowadays are like crystals lmao

#

You just say something and they get mad

ocean lion
#

Crystals?

kind hatch
#

I think he meant snowflake.

ocean lion
#

Obviously

golden turret
#

Hey guys. I'm using Player#setSpectatorTarget to set the player to spectate another player.
The problem is that the target is a passenger of another entity and when I set the player to spectate, it simply refuses to spectate and starts to teleport the player instead of spectating.
It only spectates if I dismount the entity. I can't show a lot because I have NDA

kind hatch
golden turret
#

real nda

kind hatch
sterile token
#

Oh ok

#

A contract basically

golden turret
#

yea

#

If it wasn't the NDA I would record a small video showing the problem

ocean lion
#

A contract basically he says

#

Pff

kind hatch
#

Tbh, as long as you don't give out details about the project, you should be fine. When it comes to code, it'll depend on the NDA, but you could likely get away with sharing what you have here.

#

Or take that specific part and make a standalone plugin out of it.

golden turret
#

Well, it happens literally in the place the NDA says to not leak

winged anvil
#

then how people gonna help

golden turret
#

I said what is the problem

kind hatch
#

Well it's a little hard to take an explanation at face value without seeing the code.

sterile token
golden turret
#

The code is literally I setting the player to spectate another player

#

but the target is mounted in another entity

#

So instead of spectating, the player starts to teleport each x blocks to the target

kind hatch
#

Maybe try making the player spectate the target first, then have them mount the entity.
Or if they are already mounted, dismount them, add the player, then remount them.

golden turret
#

🤔

#

lets see

fathom cobalt
#

is it a common problem not to be able to find anything with ClassGraph in Spigot plugins?

wet breach
#

but just because something says it can do something, doesn't necessarily mean it actually can. Big difference between saying such things and actually testing such things

#

it isn't feasible to test all possible scenarios 😉

#

much easier to say it can though

fathom cobalt
#

well, I suspect that Spigot might not load all the classes inside my plugin into the classpath

#

namely the classes that aren't referenced anywhere apart from reflection

wet breach
#

that is because it doesn't. It loads the main class you specified in the plugin.yml hence why it is necessary to specify it there

fathom cobalt
#

yeah, that makes sense

wet breach
#

and then from there, it is on your plugin to load the classes it uses

golden turret
fathom cobalt
#

that's what I'm trying to do, but I'm not entirely sure how I can in this scenario

golden turret
#

Now, how can I make a chunk not to unload like the spawn chunk?

fathom cobalt
#

would I have to look up the classes from the JAR files myself? assuming I even can

wet breach
#

depends on how you are trying to do something really. I haven't used classgraph before, and it makes some bold claims in everything it says it can do. Obviously it has never encountered a custom class path loader though

#

so...it seems it can't do everything 😛

fathom cobalt
#

yeah, but the same story goes for trying Class.forName(...) as well

#

but that again also does make sense

#

because afaik, neither of these implementations will scan another JAR file than that of the running application(?)

wet breach
#

can't find something if it doesn't get loading onto the path until it is needed

#

as I said, only thing that spigot loads is the main class specified by the plugin.yml. everything else loaded is done by the plugin not spigot itself

fathom cobalt
#

yeah, so when I do a new instance of these same classes, it'd work fine

wet breach
#

yep

fathom cobalt
#

but then all of my boilerplate abstraction stuff will be useless

wet breach
#

well I can't help you with that problem 😛

restive mango
#

What is the denominator of entity velocity? Is it meters per second? Is it meters per 500ms? Per 100ms?

fathom cobalt
#

so I need to find a way for Spigot to register unreferenced classes somehow

#

or another way of doing it perhaps