#help-development

1 messages · Page 2252 of 1

maiden thicket
#

ike reminscing abt manhunt rn

lost matrix
#

Also checking equals like that will randomly fail.

maiden thicket
#

multiply the vector by direction

#

i believe

rough drift
snow compass
#

The issue is when bukkit/spigot do the look up of the class or more precise when it "look up the method via reflections" So don´t this way stop with only the method bu also read whole class.

maiden thicket
#

vector.multiply(direction.multiply(whatever))

lost matrix
#

Check the diff between the inventory during and one tick after the event.
You can also go through all the click actions of the event and predict the outcome. This however is very labour intensive and error prone.

maiden thicket
#

so like i.e. when u wanna send a player forward in the direction theyre facing

eternal oxide
charred blaze
#

do it please

maiden thicket
#

it would be

#

player.setvelocity(player.geteyelocation.getdirection.multiply(...));

#

sorry parentheses too annoying on mobile

#

cba

#

😭

lost matrix
rough drift
#

not moving the player @maiden thicket

maiden thicket
rough drift
maiden thicket
#

just a location in general?

rough drift
#

Just need for particle spawning, I got everything apart the movement for that lol

maiden thicket
#

ah yeah try elgar's then

#

are u doing something for foolish lmao

rough drift
#

once the movement is done then yeah i am finished

rough drift
#

Messing with particles

maiden thicket
#

ahh

#

i had my particle fun for 10 minutes every 2 months

#

its fun kinda

rough drift
#

Well and making a shape renderer :D

maiden thicket
#

i used the tutorials all over spigot's page

#

theres this one guy

#

who has like so many helpful resources abt vectors and particles

rough drift
#

ye it's been a while since I did vector maths

maiden thicket
#

this broski

rough drift
#

well I almost got it working

#

I am encountering some issues with my particle spawner, but that's fine

#

I know how to deal with it

maiden thicket
#

ah

#

W

rough drift
#

This needs to be cleaned up lol

quaint mantle
#

Never say that again.

rough drift
#

Messed something up somewhere

old sail
#

Can I put the local file as url parameter?

#

It doesn't seem to work
p.setResourcePack("root/server/texture.zip")

quiet ice
#

I do not think so because that would not be recieveable by the client

ornate heart
#

If I were to set it to false would it just give them 5 hearts? I don't understand this at all. I just want the player to have 5 hearts.

#

I've done this before and I haven't had to mess with health scale at all.

#

just the attributes.

red sedge
#

how would i set the drops of a entitydeathevent

ornate heart
#

I think you can manipulate e.getDrops

lost matrix
ornate heart
rough drift
#

it needs to be a url

charred blaze
#

:<

rough drift
#

the client downloads it

old sail
#

Just created a direct download link and it worked

lost matrix
hidden kestrel
#

I'm still seeking potential solutions to this, should there be any takers 😁

hidden kestrel
golden turret
#

is there a way to simulate the EntityDamageByEntityEvent to get the final damage?

ivory sleet
#

Technically you could call it manually altho that could be dangerous

maiden thicket
#

the internals

red sedge
#

entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).getBaseValue() * 5);
why doesnt this work?

#

like the health doesnt change

ivory sleet
#

believe you need to update it manually perhaps?

#

(basically use setHealth as well subsequently (if its higher))

red sedge
#

Oh

#

I also need to set health?

#

i guess it makes sense lol

sterile token
#

How i can fix the issue between Mongo codec and shity Location object?

sterile token
quiet ice
#

For whatever reason

hexed rover
#

BungeeCord Setup:
Server 1:

[16:16:54 INFO]: WitheredToast lost connection: Disconnected
[16:16:54 INFO]: XXXXXXXXXXXXXXXXXXXXXXXXXXX QUIT time in ms: 1656778614347
[16:16:54 INFO]: WitheredToast left the game```
Server 2:
```console
[16:16:54 INFO]: XXXXXXXXXXXXXXXXXXXXXXXXXXX PRE-LOGIN time in ms: 1656778614198
[16:16:54 INFO]: UUID of player WitheredToast is cfc65be8-0293-468a-a8d9-c7a52202bb5f
[16:16:54 INFO]: XXXXXXXXXXXXXXXXXXXXXXXXXXX JOIN time in ms: 1656778614293```
Hey, is this just some inaccuracies with System.currentTimeMillis() or is the join even on the 2nd server actually calling before the quit event on the 1st server, when switching servers on a bungeecord?

I'm essentially just trying to figure out what the best way and event would be to save and load data again inbetween server switching, AsyncPlayerPreLoginEvent wouldve been my preferred option as it makes the other stuff wait while async loading the data, but that seems to call way before the quitevent, which kind of makes sense.
Now back then without thinking about it i had a redis - sql setup which was saving data to redis on quit and loading it on asyncplayerpreloginevent again but according to this logic, the data loaded from redis on asyncplayerprelogin event shouldnt have been the most up to date one, but it always was
echo basalt
#

redis has a better latency than mysql

#

like

#

it's faster

sterile token
#

😂

hexed rover
#

Yea i know that, that was the entire point of that setup back then, but if we're looking at this, the quit event is called after the asyncplayerprelogin event, which does make sense

quiet ice
#

Yep - join is called before quit

hexed rover
#

so how would the data have been up to date?

echo basalt
#

prelogin -> fetch data -> quit -> save data -> fetch data request received -> response

quiet ice
#

I am not too sure if the PlayerJoinEvent is called after quit though

quiet ice
hexed rover
#

what i did back then was loading the data on asynclogin and saving it to redis on quit
when switching inbetween servers like this, it was working without any issues.
But since quit is called after asynclogin this doesnt quite make sense to me anymore

echo basalt
#

latency

#

I have a data syncing plugin that does that redis + mysql stuff

sterile token
hexed rover
#

Is there any recommended event to save/load the data in then? cause im honestly not confident in using any of the Quit/Login/Join events if quit is seemingly called after the joining ones

echo basalt
#

autosaves and caching data on other servers is ideal

sterile token
echo basalt
#

I have a cache that makes it so that all the connected servers receive the data and hold it for 30 seconds, so that it's pre-loaded when the player joins

hexed rover
#

but when do they hold them for 30 seconds?

#

when do they receive the data?

echo basalt
#

Whenever I save any data

#

including autosaves

sterile token
#

I forward recommend something like Redis cache and pub-sub for doing that

hexed rover
#

hm, issue with that is low key, i would most likely only ever be saving any data to redis like every minute for redundancy, and when someone leaves after a save has been made but inbetween their data has already changed again, then it would still be off

sterile token
echo basalt
#

Save operation:

send packet to all servers saying: <player uuid> is saving
save data
send packet to all servers saying: <player uuid> is done saving, followed by the saved data

Load operation:

Check if the uuid is still saving, if so, await for the following packet and use its data
If it's not being saved, safely fetch

If we're still fetching, and receive the save packet, we cancel the fetch operation and go back to load step 1

echo basalt
#

It's kinda wonky but it accounts for delays and all

dim palm
#

Hello, i have a question, im recoding my StaffMode plugin Items, i want create a class for all strings, i want to automatic add the lore in the same class without creating a "public method" (Im new to java and spigot api)

hexed rover
#

This all seems good and all, but i still wonder what happens when a save has happened, the other servers cache the data
the data on the server the player is on changes, now he switches servers, and the data on the other servers would be wrong, no?

echo basalt
#

the autosave isn't the only save operation

tall dragon
hexed rover
#

when do you save then

echo basalt
#

onPlayerQuit

#

and on an autosave every like 5 mins or something

hexed rover
#

yea, but as we learned quit is called after asyncpreloginevent

#

apparently

charred blaze
echo basalt
#

ehh

echo basalt
#

I'm doing PlayerJoinEvent instead of prelogin

#

prelogin can still be cancelled

hexed rover
#

yea i can account for the cancel tho, thats not really the issue, but i need some of my data on join already

echo basalt
#

then uhh

#

timestamp everything

#

your problem is that you're doing it too fast

#

You can delay it a bit on the proxy side or something to account for that delay

eternal night
#

or you delay moving them from server a to server b on server a until write is done 🤔 not like they can get to server b without server a initializing it

hexed rover
#

since asyncplayerpreloginevent is called before quit tho, the save wont be happening until the preloginevent is done

eternal night
#

Well you don't save on quit

hexed rover
#

when would i save then

echo basalt
#

before moving

eternal night
#

you save when server a initializes a move to server b

hexed rover
#

is there an event for that?

eternal night
#

wherever you start that ?

#

e.g. if you have a server selection gui

#

or /leave commands

#

or whatever

hexed rover
#

I don't, happens when they switch servers using /server or any GUI that might not even be from my plugin

echo basalt
#

usually it's a bungee plugin message

#

so PluginMessageEvent

hexed rover
#

does /server also call the PluginMessageEvent

echo basalt
#

uhh

eternal night
#

Hmm, I mean PluginMessageEvent is proxyside

echo basalt
#

bruh

#

add a plugin message listener

hexed rover
#

the only practical idea i could think of to make it "easier" is to save the data to redis everytime a change happens to the data

#

that would keep it up to date

#

but would also seem like a bit of waste

echo basalt
#

how to spam database 101

hexed rover
#

yes

echo basalt
#

all of that magic because you can't wait that extra tick

eternal night
#

that is the wrong way around tho. That listener is run on recieve

#

not on sent

hybrid spoke
#

lynx

eternal night
#

mhm ?

hexed rover
echo basalt
hybrid spoke
#

you are pretty familiar with the internals of craftbukkit arent you?

#

do you know a way how to access the palettedcontainer async?

eternal night
#

on spigot ?

hybrid spoke
#

yup

#

or to avoid it and still get chunksnapshots async

eternal night
#

Well, I'd give you the "use paper and be happy"

#

I don't know what spigot does 😅

hybrid spoke
#

meh but thanks

eternal night
#

Yea sorry I cannot help here

#

paper mangles around the paletted container a bit so eeh

#

don't think the code looks similar enough

hybrid spoke
#

do you have a reference?

#

anything i can look at?

eternal night
#

for paper ?

#

or how to use it on spigot

hybrid spoke
#

how paper handles it and what we could try on spigot

eternal night
#

iirc paper syncronizes the write access to the internal data ? Like synchronized

#

Where vanilla and spigot used to call a lock / error on double lock

hybrid spoke
#

so we have to take down spigot to do our stuff and then allow it to access it again

#

got it

eternal night
#

yea, just have your plugin download paper 5Head

#

I presume, you could hack your way into the lock ?

opal juniper
#

now that is geenious

eternal night
#

btw @opal juniper the "accessing paletted from multiple threads" thing, is that on paper ?

hybrid spoke
opal juniper
#

no lol, i didn’t realise that god was running spigot at that point

#

that’s what you get on spigot

eternal night
#

Ah xD Yea I was looking through paper and was confused 😅

hybrid spoke
#

^^

opal juniper
#

i dev on paper so never encountered this issue lol

eternal night
#

Well, let me open the forbidden texts, my spigot workspace

#

But yea, the ThreadingDetector is the lock used by the PalettedContainer to basically error on any access from multiple threads

#

instead you might be able to either completely yeet the lock or replace it with a waiting lock

#

with a bunch of reflection and a child class of the ThreadingDetector you write yourself

#

Could also just try to unlock forcefully

hybrid spoke
#

that sounds kinda aids

eternal night
#

it will be

#

I mean, paper's synchronized will also just forces the thread that wants to write data to wait if the data is already locked

opal juniper
#

get to it god ^^^ :))

hybrid spoke
#

its your lib ¯_(ツ)_/¯

opal juniper
#

:))

eternal night
#

I mean, in the end you can also just wait on the underlying lock

#

which might be better anyway

opal juniper
#

should have brought my school provided laptop away with me for the weekend

#

chrome book PES_Cry

eternal night
#

like, internally it just a Semaphore with a single unit of capacity

#

Tho

#

that won't work, minecraft would then error

opal juniper
#

🎉

#

i think getting rid of the lock is probably a bad idea, so yeah waiting is probs the only way

eternal night
#

Yea, but waiting is kind of fucked too

tardy delta
#

think i finished it

eternal night
#

you'd have to lock it manually again while you write off main thread

#

but if that shit is locked while minecraft wants to write, that shit will blow up again

opal juniper
#

we aren’t writing

#

only reading

hybrid spoke
#

but all of that isnt guaranteed to work, isnt it?

golden turret
#

guys, i need a help in this logic

eternal night
#

oh

golden turret
#

i thought in using recursive

#

reveal(x - 1, y)

#

etc

#

but it throws StackOverflow

eternal night
#

you would want to not reveal neighbours if your field is already revealed

#

else your fields keep revealing each other

golden turret
#

oh yea

#

i have that info

sterile token
#

org.bson.codecs.configuration.CodecConfigurationException: Property 'x' in Vector, has differing data types: TypeData{type=Integer} and TypeData{type=Double}.

Please what i can do?

golden turret
#

i will try again

vague drift
#

Hi, has anyone here used Kyori? I can't find a solution for this...

example
String text = "&a&lExample text <gradient:#5e4fa2:#f79459>with gradient</gradient>" TextComponent serialized_message = LegacyComponentSerializer.legacyAmpersand().deserialize(text);
and send to player audience.sendMessage(serialized_message);
the problem is that it encodes the legacy text but doesn't send the gradient so I need to pass that to the MiniMessage.miniMessage()... but minimessage only accepts String as input.
How can I pass TextComponent (inherited from legacy) to MiniMessage (also encoding <> tags)?

sterile token
sterile token
sterile token
eternal night
#

👍

sterile token
sterile token
# agile anvil Code ?

Please let me know if you understand what happening

Here is the exception:

org.bson.codecs.configuration.CodecConfigurationException: Property 'x' in Vector, has differing data types: TypeData{type=Integer} and TypeData{type=Double}.```
agile anvil
sterile token
#

Im having troubles with bukkit one

golden turret
#

hmm

sterile token
#

Also wait i will see the location class

golden turret
#

how are you reading the vector?

sterile token
#

Maybe its using the java one

#

Im not using vector

#

I explain

golden turret
#

you are

#

but

#

maybe

#

you are reading 1 instead of 1.0

sterile token
#

My Claim class, contains locations object references. So if i dont add Location to codec then i get an issue "that a codec for location is not found"

agile anvil
#

Let us see everywhere there is a variable 'x'

sterile token
#

So once i add Location to codec i started to get tha exception

#

Maybe Location doesnt use bukkit Vector so that the issue

#

🤔

#

I ill check that now

wild reef
#

Hey guys, is there a way to check if a block for example is able to drop xp or a mob? For example I would iterate through a list of entities or blocks and would be able to check if they would drop xp when I kill/break them?

sterile token
eternal oxide
#

Location uses Bukkit Vector but it doesn;t store any Vector. The error is not from Location

#

unless you used a Vector in your TypeAdapter

sterile token
#

Elgarl i dont know what happening

#

Because i never use Vector

eternal oxide
#

?paste your type adapter for Location

undone axleBOT
sterile token
#

TypeAdaptor

#

?

#

He

#

Im using Mongo codec

#

Explain that please

eternal oxide
#

mongo 😦

sterile token
wild reef
sterile token
eternal oxide
#

I've not used Mongo, but I do know for Gson to serialize Locations it requires a TypeAdapter

sterile token
#

Yeah but im neither using Gson

eternal oxide
#

Mongo uses Gson

sterile token
#

But im using Mongo codec!!

eternal oxide
#

org.bson.codecs.configuration.CodecConfigurationException: Property 'x' in Vector, has differing data types

sterile token
#

BSON != GSON tho

eternal oxide
#

ah I read wrong, sorry

sterile token
#

Na dont worry

#

I just trying to discover what happens

#

Because i never using vector lmao

#

Claim contains references:
-> Location
-> Cuboid

Cuboid contains references:
-> Location (Corner 1)
-> Location (Corner 2)

#

So im really 🤡

wild reef
eternal oxide
#

?paste your two clases

undone axleBOT
sterile token
snow compass
# snow compass The issue is when bukkit/spigot do the look up of the class or more precise when...

Seams you can´t even have missing classes Inside that class you shall use #deserialize(). I think it have to do with the methods bukkit use to find #deserialize() method inside the class. #serialize() don´t have same issue.

Of some reason, don´t know if they add some ignore to that method so you don´t get java.lang.NoClassDefFoundError if you add classes some not exist in older minecraft versions in that method, because if you add other method in the class (you implement ConfigurationSerializable) you directly get java.lang.NoClassDefFoundError (don´t test if order of method matter).

sterile token
eternal oxide
#

Is this error when you make a query to Mongo?

sterile token
eternal oxide
#

You'll need an expert with Mongo I guess

crimson terrace
hidden kestrel
#

How do I set a player's sleep ticks so that the night doesn't skip??

sterile token
# eternal oxide You'll need an expert with Mongo I guess
org.bson.codecs.configuration.CodecConfigurationException: Property 'x' in Vector, has differing data types: TypeData{type=Integer} and TypeData{type=Double}.
        at org.bson.codecs.pojo.ClassModelBuilder.validatePropertyModels(ClassModelBuilder.java:325) ~[Claims-1.0.jar:?]
        at org.bson.codecs.pojo.ClassModelBuilder.build(ClassModelBuilder.java:294) ~[Claims-1.0.jar:?]
        at org.bson.codecs.pojo.PojoCodecProvider.createClassModel(PojoCodecProvider.java:219) ~[Claims-1.0.jar:?]
        at 
org.bson.codecs.pojo.PojoCodecProvider.access$100(PojoCodecProvider.java:41) ~[Claims-1.0.jar:?]
        at org.bson.codecs.pojo.PojoCodecProvider$Builder.build(PojoCodecProvider.java:119) ~[Claims-1.0.jar:?]
        at dev.alex.net.manager.StorageManager.open(StorageManager.java:33) ~[Nasgar-Claims-1.0.jar:?]
        at dev.alex.net.ClaimsPlugin.onEnable(Main.java:38) ~[Claims-1.0.jar:?]```
golden turret
#

what is happening

lost matrix
sterile token
#

Smile

#

Im not using Vector

#

That the issue

lost matrix
sterile token
sterile token
eternal oxide
#

is that all?

sterile token
#

😂

eternal oxide
#

that can;t be the whole line

sterile token
#

So how i can solve it?

wild reef
sterile token
lost matrix
#

First the data

sterile token
#

Data?

#

The claim right?

lost matrix
sterile token
#

There you have smile the manager and the claim

lost matrix
sterile token
#

Allright

wild reef
lost matrix
lost matrix
sterile token
#

Im just trying to understand why im getting that eception

eternal oxide
#

which line is StorageManager.java:33

sterile token
lost matrix
eternal oxide
#

thats different to what you just pasted

sterile token
#

I also try adding Vector to codec because i thought that was the caused

eternal oxide
#

ah ok

#

you definitely use teh Bukkit vector there?

sterile token
#

Lmao shity mongo

ornate patio
#

what is a bounding box?

sterile token
sterile token
ornate patio
#

so will block.getBoundingBox().getHeight() > 1 return true for something like a fence?

ornate patio
#

alright

sterile token
#

Smile so what i can do?

#

:sad:

lost matrix
sterile token
wild reef
sterile token
lost matrix
sterile token
#

So i need to implement a pojo for location

#

Allr

lost matrix
sterile token
#

Simile do you have lot of experience with mongo?

#

Smile also what do you mean by a location codec?

lost matrix
# wild reef thank you

This is really hard. The dropped experience is dependant on the ItemStack that is being used to break the Block.
You wont get any if you break the Block with silk touch for example.

lost matrix
sterile token
#

Yeah

#

So how i would register a pojo?

lost matrix
lost matrix
crimson terrace
lost matrix
#

Im this far:

#

But there is no easy way to get this unless you specify more information

ornate patio
#

@lost matrix For the blockfinder, do I instantiate a new HorseBlockFinder every time the horse moves?

agile anvil
lost matrix
ornate patio
#

yeah its inside a goal

lost matrix
#

So on SUCCESS -> goal should change to moving. On FAILURE -> just instantiate a new BlockFinder.

ornate patio
#

alright

lost matrix
#

There are a lot of ways you can achieve this. Up to you.

ornate patio
#

oh ok yeah i get it now

lost matrix
sterile token
#

Is there a big diff between Location#getX() and LocatioN#getBlockX()?

eternal oxide
#

double and int

sterile token
#

Oh ok

sterile token
# lost matrix Yes thats the nms block. ```java getExpDrop(BlockState iblockdata, ServerLevel w...

Something like this?

public class LocationPojo implements Codec<Location> {

    @Override
    public Location decode(BsonReader reader, DecoderContext decoder) {
        return new Location(Bukkit.getWorld(reader.readString()), reader.readDouble(), reader.readDouble(), reader.readDouble(), Float.parseFloat(reader.readString()), Float.parseFloat(reader.readString()));
    }

    @Override
    public void encode(BsonWriter writer, Location location, EncoderContext encoder) {
        writer.writeString("world", location.getWorld().getName());
        writer.writeDouble("x", location.getX());
        writer.writeDouble("y", location.getY());
        writer.writeDouble("z", location.getZ());
        writer.writeDouble("yaw", location.getYaw());
        writer.writeDouble("pitch", location.getPitch());
        writer.flush();
    }

    @Override
    public Class<Location> getEncoderClass() {
        return Location.class;
    }
}```
lost matrix
sterile token
#

Allright

#

But is it okay?

#

I cannot find info about this specific

lost matrix
sterile token
#

Okay

silver pulsar
#

how do you deconnect a variable form a file configuration.
public static List<List<Object>> oreList = new ArrayList<>();
oreList = FileHandeler.getFile().getObject("oreTypes", oreList.getClass());
the problem is when im editing oreList it also edits the file.

sterile token
mighty pier
#

how do i use unicode characters?

eternal oxide
#

?paste

lost matrix
# sterile token Okay
  @Override
  public void encode(BsonWriter writer, Location value, EncoderContext encoderContext) {
    writer.writeStartDocument();
    
    // Your stuff
    
    writer.writeEndDocument();
  }

The rest looks fine

undone axleBOT
prime kraken
#

Hi, little question, there is my code ```@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

    Player p = (Player) sender;

    String nickname;

    if (cmd.getName().equalsIgnoreCase("name")){

        changeName(p, args);
        nickname = p.getDisplayName();

        if (dataConfig.contains("player." + p.getUniqueId().toString() + ".nickname")){
            nickname = dataConfig.getString("players." + p.getUniqueId().toString() + ".nickname");
        }
        dataConfig.set("player." + p.getUniqueId().toString() + ".nickname", nickname);
        saveConfig();

        return true;
    }

    return false;
}``` this code drop an error : ```org.bukkit.command.CommandException: Unhandled exception executing command 'name' in plugin Valdara vBETA``` anyone had an idea ?
mighty pier
#

send the full errorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr

sterile token
eternal oxide
lost matrix
mighty pier
prime kraken
#

?paste

undone axleBOT
silver pulsar
lost matrix
sterile token
thorn crypt
#

Hi, I'm sorry to disturb for something who look stupid for me but I wanted to know how I can make my plugin available for version who go to 1.8 to 1.19

mighty pier
#

what that mean

eternal oxide
lost matrix
sterile token
#

I dont know why

#

😡

#

shty mongo

eternal oxide
#

whatever is appropriate for Bson

sterile token
lost matrix
eternal oxide
mighty pier
#

it just converts to unicode3

silver pulsar
eternal oxide
#

lol, no clue then. I've not used Bson nor Mongo

sterile token
#

Smile BsonWriter doesnt contains that methods

#

Im using mongo 3.12.5

#

Sth mongo

#

Lmao i stay with javascript mongoose. That yes it amazing

sterile token
lost matrix
silver pulsar
sterile token
lost matrix
quiet ice
#

I feel like a 2D-array would be better there but idk the context

sterile token
lost matrix
#

Ive seen the config. Its something else...

sterile token
#

send his config

#

I want to see that

#

?jd-s

undone axleBOT
sterile token
#

20 long = ?

On taskTimer

eternal oxide
#

1 second...probably, depending on server performance

crude loom
#

Where can I install the 1.8 R2 craftbukkit?

lost matrix
eternal oxide
#

you don;t you use Spigot

upper vale
#

Bro what 💀

#

naw

eternal oxide
#

?bt

undone axleBOT
upper vale
#

ain’t no way

sterile token
upper vale
#

I do not

sterile token
#

So what you want...

#

😂

upper vale
#

when did I ask for anything

#

what

lost matrix
upper vale
#

wrong person dude

gritty urchin
#

How do I add an enchantment on an item higher than the normal limit

#

equipment.addEnchantment(Enchantment.DURABILITY, 100);

#

for example

lost matrix
gritty urchin
#

thx

#

does anyone know how to apply another mobs AI to a mob

#

e.g. a zombie to a regular villager

wild reef
lost matrix
wild reef
eternal oxide
#

For what reason do you want to know if a block can drop exp?

wild reef
iron glade
#

Why a list?

eternal oxide
#

Yes, but for what reason?

#

Why do you need a List of blocks that can drop exp?

pastel relic
#

how do I check if the plugin folder exists?

eternal oxide
#

plugin.getDataFolder.mkdirs()

#

or plugin.saveDefaultConfig()

eternal oxide
wild reef
#

I have custom amounts of xp for some blocks. To make the check simple I want to check if block X drops xp, if yes I will get the value just from a map where the custom xp for the block would be stored in

wild reef
#

ah alright

#

thank you

eternal oxide
#

just get the Block there, see if it's in your list, if it is, get the value and set it

wild reef
#

but there is nothing overall right? cause I maybe want to check for stuff like breeding xp as well

eternal oxide
#

No

pastel relic
# eternal oxide or plugin.saveDefaultConfig()

I made a reload command for the config file and i ckeck if the config.yml exists, if not it creates one but if the entire folder is deleted i get an error so i need a way to check if the folder the plugin is in exists and if not again create one.

pastel relic
#

I know how to check for the config file

#

i need to check for the folder thhe config.yml is stored in

kind hatch
#

Use the same method. A file can also be a directory. You can use the additional File#isDirectory() method to check that.

pastel relic
#

something like this?

File pluginFolder = new File(main.getDataFolder());
kind hatch
#

Yep. Then you just check if it exists.

pastel relic
#

okay

gritty urchin
#

How do I apply a mob's AI to another mob
e.g. a zombie to a giant

eternal oxide
#

as I already said, just getDataFolder().mkdirs(); will guarantee the folder exists. If they do it does nothing

sterile token
#

Hey please give menu libraries name please

gritty urchin
#

Giant does not have any AI by default

sterile token
pastel relic
#

how do I create a folder named Test in the plugins folder?

serene fractal
gritty urchin
#

I knew NMS was involved

#

but cant find any documentation

serene fractal
#

hmm

gritty urchin
#

its either outdated or not relevant

serene fractal
#

i could find this

sterile token
pastel relic
#

okay, thx

kindred valley
#

guys im using so much statics, sets, lists and im getting confused for seeing so much sets and lists so it is being complicated how can i pass this?

golden turret
#

nms experts

#

where this is called?

#

from CraftEventFactory

crimson terrace
pastel relic
# sterile token File = new File(JavaPlugin#getDataFolder(), "folder-name"); file.mkdir();

I get this now...

[21:33:42 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'dw' in plugin DeluxeWelcomer v1.0.1

Caused by: java.lang.IllegalArgumentException: Cannot translate null text
        at org.apache.commons.lang.Validate.notNull(Validate.java:192) ~[commons-lang-2.6.jar:2.6]
        at org.bukkit.ChatColor.translateAlternateColorCodes(ChatColor.java:354) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?]        at me.krzheski.deluxewelcomer.Commands.dw.onCommand(dw.java:90) ~[DeluxeWelcomer.jar:?]
File pluginFolder = new File(main.getDataFolder(), "DeluxeWelcomer");
if (pluginFolder.exists()) {
// do stuff
}

else{
pluginFolder.mkdir();
}
golden turret
#

could you show the full log pls

pastel relic
crimson terrace
#

can you show us the full command implementation?

golden turret
#

show this line

pastel relic
#

ooh

#

lmao, that would be my bad

crimson terrace
#

youre trying to get a color for a message from an empty string I believe

pastel relic
#

i forgot to set a permission message in the config

onyx fjord
#

does java have something similar to canvas js?

lost matrix
lost matrix
onyx fjord
#

create canvas, set some background, some text all thru code

kindred valley
lost matrix
onyx fjord
#

😵‍💫

#

thx

crimson terrace
lost matrix
crimson terrace
#

or private static final

lost matrix
crimson terrace
#

they did also ask about constants

lost matrix
#

Ah didnt read

lavish folio
#

can i force disable player gamma?

onyx fjord
#

no

lavish folio
#

and with resource pack?

lost matrix
lost matrix
lavish folio
#

ok thanks

onyx fjord
#

its not a cheat

lavish folio
#

yes but i want to disable

eternal oxide
#

can't be done

onyx fjord
#

purely client side

gritty urchin
#

By default mobs have a max HP of 100

#

is there a way to make this higher?

lost matrix
gritty urchin
#

max*

lost matrix
agile anvil
ornate patio
#

@lost matrix just wanted to say the blockfinder works flawlessly, thanks so much man

lost matrix
ornate patio
#

alright

lost matrix
#

You can increase this in the spigot.yml

gritty urchin
#

Health must be between 0 and 100.0, but was 150.0. (attribute base value: 100.0)

gritty urchin
#

one you dont like

#

1.8.8

lost matrix
#

Well... too bad i guess.

#

Did they already have attributes back then? I thought you would have to use nms for that.

onyx fjord
#

they didnt

#

at least i think so

gritty urchin
#

how do I set health in NMS

onyx fjord
#

why do you do this to yourself

gritty urchin
#

not my choice

#

someone else wants 1.8.8

#

cant see any other way to do it

lost matrix
gritty urchin
#

thanks mate

hybrid spoke
gritty urchin
#

above 100

#

yes

pastel relic
#

anyone know why?

onyx fjord
#

arent plugin folders auto generated once theres some config file?

pastel relic
#

they are

crimson terrace
pastel relic
#

and?

crimson terrace
#

is that the name of your plugin?

pastel relic
#

it is

hybrid spoke
#

you are creating a folder inside your datafolder, which is named like your plugin

crimson terrace
#

welp

hybrid spoke
#

the datafolder is not the plugins folder

#

its the plugins/YourPlugin

#

at least the plugin you are calling getDataFolder from

crimson terrace
#

first is the folder the file is in, then is the file name in the File constructor

pastel relic
#

yes but i need to create that folder if it doesnt exist

crimson terrace
#

mkdirs()

#

that does what you want

lost matrix
# pastel relic and?
      File pluginFolder = plugin.getDataFolder();
      File subFolder = new File(pluginFolder + File.separator + "subFolder");
      if(!subFolder.exists()) {
          subFolder.mkdirs();
      }
      File file = new File(subFolder, "data.yml");
      // save to file here
crimson terrace
#

mkdirs() creates all folders needed for the requested path

pastel relic
pastel relic
#

I dont want it to do that though

crimson terrace
#

then tell us what exactly you want to do please, I am also confused

pastel relic
#

i need to create the folder for the plugin where the plugin config is

quaint mantle
#

in the plugin folder?

eternal oxide
#

new File(getDataFolder(), "subFolder")

quaint mantle
#

that should be where the config is

crimson terrace
#

that gets auto created when making a config afaik

pastel relic
pastel relic
quaint mantle
#

now im confused and i just want help with my question 😵

quaint mantle
#

i feel like maybe learn a little more about java file stuff idk

pastel relic
#

ur not helping

quaint mantle
#

¯_(ツ)_/¯

crimson terrace
#

the getDataFolder() is the folder youre looking for. thats where the config file will be. I think youve been trying to go one level too deep

quaint mantle
#

^

lost matrix
# pastel relic ur not helping

Do you want

/plugins
    /YourPlugin
       config.yml
       somedata.yml

Or do you want

/plugins
    /YourPlugin
       config.yml
       /CustomData
          somedata.yml
quaint mantle
#

your config should be made there

eternal oxide
#

If your config gets deleted just call saveDefaultConfig() It will create teh folder if its missing and save your default config from the jar

quaint mantle
pastel relic
#

the default folder that gets created with your plugin that contains the config files

lost matrix
quaint mantle
#

^

crimson terrace
#

^

lost matrix
#

Unless you have a default config.yml because then you can just call saveDefaultConfig() and it will create the plugin folder.

quaint mantle
#

^

#

anticheat question w/ speed check
how should i use Material#getSlipperiness() so i dont have to cancel the check entirely if the player is on ice, or a block that messes with the default friction?

lost matrix
quaint mantle
#

so if they haven¨t jumped recently, or glided, etc. nto inside vehicle but they are in the air and their Y isn't going down

#

then fly (theres more than that, i simplified that a lot)

lost matrix
#

So statistical. This just means you need to find out how much faster they are on slippery surfaces and increase the threshold accordingly.

quaint mantle
#

in that case, should i determine threshold on event

#

or get a threshold from sprinting, and adjust accordingly if they have a speed potion, etc.

lost matrix
#

Wait... you are writing an anti cheat on event level?

quaint mantle
#

handle(PlayerMoveEvent e)

if(booleans){ return; }

player.flag(check)

#

it seems to work?

#

im willing to improve it beyond 1000% if anyone has better ideas than just a handle() method

lost matrix
#

You wont come far with this approach...
A good anti cheat needs a very deep understanding of the protocol it is currently on and handle
the packet transactions between server and client. Relying on events wont cut it for many many checks.

quaint mantle
#

should ibother making an anticheat for 1.19 or will Microsoft block hacked clients too because they want control? 🤣

lost matrix
quaint mantle
#

😭

agile anvil
#

I got too much with anticheat... I prefer way more to rely on the other players to detect someone cheating and having mods

#

(while your server is < 150 players it's ok)

#

But I had really good time making anticheats back in 1.8

lost matrix
#

Every server with a half decent anti cheat i worked with had a dedicated team of at least 2 devs that did nothing else but
perfect their anti cheat. Its quite the task and you need a ton of knowledge beyond minecraft/spigot as well.

quaint mantle
#

well thanks for the wisdom and advice because it does mean a lot and it helps, i think i'll try out some values while sprinting with various effects to see if i can make up some thresholds and mess around with .getSlipperiness()

subtle folio
#

lmfao

sterile token
#

HI

#

I having Intellij isues

#

I doesnt show all the modules on the project

#

😡

#

The module exists, but isnt displayed on intellij

agile anvil
#

Did you import a project!

sterile token
#

As you can see it doesnt detect the project Test

#

I have invalidated cache, reload all from disk

#

Everything

#

Neither re importing nor creating a new project

sterile token
eternal oxide
#

Is the test module added to your main project pom?

sterile token
#

yes

#

I can compile it

#

All is perfect but is not display on the visual structure

#

Taken from parent pom

eternal oxide
#

no clue if its a valid module with its own pom

sterile token
#

Also i can add module Test as dependency and compile the project

eternal oxide
#

turn around 3 times and turn your PC off and on again

sterile token
#

Idk what shit happened

sterile token
#

Maybe caused of git plugin?

#

🤔

#

Lmao its so crazy this

quaint mantle
#

Is there a way to copy the config and save it in a different file path ?

For example:

File file = new File("path goes here");
YamlConfiguration config = YamlConfiguration.loadConfiguration(file);```
sterile token
eternal oxide
#

you can get any resource in you jar

quaint mantle
#

Inside of the resources/config.yml

serene fractal
#

got that from a quick google search

#

btw

quiet ice
#

that will not work

#

Files.copy does not copy directories

#

You need to walk the tree for that

serene fractal
#

what are you on about

quiet ice
#

Now that I think about it it could also have been an issue with Files#move that I had in mind

serene fractal
#

yeahhhhhh idk what ur on about man

quiet ice
#

Throws:
[...]
DirectoryNotEmptyException - the REPLACE_EXISTING option is specified but the file cannot be replaced because it is a non-empty directory (optional specific exception)

#

Got a little bit confused with the REPLACE_EXISTING option

serene fractal
#

ah alright

quiet ice
#

Though I believe it throws a similar exception if you try to move a directory into something that does not yet exist or something

#

But whatever

serene fractal
#

could just check if the file exists in the target directory, if it not then create. to counter that but sure.

#
  • it doesn't throw the exception if the file doesn't exist, it just simply "copies".
#

although I am exception handling, so you are partly correct

serene fractal
quiet ice
#

Ah I now get why you were confused

#

I thought you copied entire folders, but apparently you just copied a file-file

serene fractal
#

yea, as TheBigDonggggggg only said the config.

#

not the whole folder.

lime moat
#

How could I use something similar to if (target.getAllowFlight()) { but using the Invulnerable method? Player#setInvulnerable()

lime moat
#

Oh, thank you!

ornate patio
#

how hard is this to implement:

#

the horse can't seem to figure out how through the opening in the wall

#

instead it just stares at the wall indefinitely

#

it's trying to reach the feeder (brewing stand) on the right

lost matrix
ornate patio
lost matrix
#

So its a problem with the vanilla pathfinder you are using?

ornate patio
#

the thing is while the blockfinder can successfully detect whether a target is reachable, it doesn't really help the horse find its way

ornate patio
lime moat
#

Another thing, how would I set the durability of an item?

#

I see setDurability is deprecated

lost matrix
#

Make sure to set the ItemMeta back on the ItemStack afterwards.

ornate patio
#

I have a pathfinder goal which makes horses attack other horses, which uses the vanilla pathfinder

#

and it knows how to walk around walls and everything to reach the target

#

do you think it might be a good idea to spawn a marker entity on the target block?

mortal hare
#

man its been almost 3 days but I still cant believe technoblade is gone

#

its not as if I was a fan of him or something

#

its just that deadly feeling that such a disease can end person's life so quickly

ornate patio
#

i never really watched him either but i had mad respect for him

#

ok I've noticed the blockfinder actually returns a success here

#

but I figured out why

#

if I make the wall 1 block higher, it returns failure

hidden kestrel
#

I'm getting a NoSuchMethodError when using Advancement#getDisplay() - anybody know why??

ornate patio
sacred mountain
#

wrong channel

lost matrix
hidden kestrel
mortal hare
#

inside gradle or maven

#

or you're running older version of minecraft server

hidden kestrel
#

It compiles fine, and I'm using the latest version of paper

mortal hare
#

can you post the whole stack trace via ?paste ?

hidden kestrel
#

Yeah one minute

quaint mantle
opal juniper
mortal hare
hidden kestrel
#

How does ?paste work

#

?paste

undone axleBOT
mortal hare
#

just ctrl v

hidden kestrel
lime moat
#

Hello, I have this code for a wild command: https://paste.pythondiscord.com/ukiyasiviw

I'm trying to make the Y value be 1 than the safe location and also have the X and Z value be 0.5 more as I spawn inside the ground in the center of 4 blocks right now.

mortal hare
#

CommunityEventManager line 93

hidden kestrel
# mortal hare can you show your code snippet

    @EventHandler
    public void onAdvancement(PlayerAdvancementDoneEvent e) {
        for(Entity loopPlayer : e.getPlayer().getWorld().getPlayers()) {
            if(e.getAdvancement().getDisplay().getType() == AdvancementDisplayType.TASK || e.getAdvancement().getDisplay().getType() == AdvancementDisplayType.GOAL) {
                loopPlayer.sendMessage(ChatColor.of("#ffad1f") + "- " + ChatColor.of("#ffec42") + e.getPlayer() + " has completed " + ChatColor.of("#ffad1f") + e.getAdvancement().getDisplay().getTitle());
            } else if(e.getAdvancement().getDisplay().getType() == AdvancementDisplayType.CHALLENGE) {  // line 93
                loopPlayer.sendMessage(ChatColor.of("#b22deb") + "- " + ChatColor.of("#ff88ff") + e.getPlayer() + " has completed " + ChatColor.of("#b22deb") + e.getAdvancement().getDisplay().getTitle());
            }
        }
    }
chrome beacon
#

I recommend going to the Paper discord or trying with Spigot

quaint mantle
#
RankLoader.config.save("" + GioxRanks.getPlugin().getResource("asdf"));```
#

Would this save the asdf.yml copied from the resources/?

mortal hare
hidden kestrel
hidden kestrel
mortal hare
#

it seems like a linking issue

hidden kestrel
#

Wdym a linking issue

mortal hare
#

from paper's side

hidden kestrel
#

Owh

mortal hare
#

Your plugin tries to access method which does not exist at runtime

#

but it should

#

since its paper bukkit api method

sterile token
#

Its possible to check a boolean condtion uisng Optional but when the result is true run something, if false run another thing

mortal hare
#

Maybe Predicate functional interface?

sterile token
#

Allright

#

Can i get an example

ornate patio
#

i have a question on how to implement the logic of something

sterile token
#

?as

#

ask

#

?status

mortal hare
#
Predicate<String> predicate = (string) -> {
  return string.equalsIgnoreCase("yes") ? true : false;
};
boolean test = predicate.test("yes");
boolean testFalse = predicate.test("noooo");
#

im not sure if syntax is correct but that's how predicates work

#

they're mini blocks of code which can be dynamically allocated to test some condition

sterile token
#

Dovidas i need the thing for my menu api, so if the handler contains the player -> open the menu if not stop execution

ornate patio
#

I'm trying to make a function to see whether a block is able to be stood on given only the Block object of the target (in this case, the diamond block)

on the right, it is possible to stand on top of the diamond block. So the function should return true

on the left, it is not possible to stand on top of the diamong block, so the function should return false

How would I go about doing this? I thought it was simple at first but its actually a lot hard than anticipated

sterile token
#

Looks like you are coding custom things

ornate patio
sterile token
#

I just want to optimize it a bit more

opal juniper
mortal hare
#

you can even remove code block braces and return in this case

opal juniper
#

:)

sterile token
#

So its possible to do that code better?

hybrid spoke
#

except for the namings, what do you imagine?

mortal hare
sterile token
hybrid spoke
#

we would need more context for that

#

more code

ornate patio
hybrid spoke
#

and with that, what is "professional" for you?

mortal hare
#

how would you then know if player can jump on it

#

if you dont know its location

ornate patio
#

hmm

#

well

#

this is gonna be much harder to implement than i thought

kind hatch
#

Doesn't the Block object have a #getLocation() method?

mortal hare
#

in my opinion without knowing player's coords you cant know if you can stand on it

#

unless you're comparing blocks

kind hatch
#

I beg to differ. You could figure it out, it just depends on your criteria.

sterile token
hybrid spoke
#

well, "can stand on it" - do you want to know if there is any block in the way on the top or if the block is just a regular one you can stand on?

hybrid spoke
mortal hare
#

i would just create method which compares that block location to the anchor location you specify in the method args

sterile token
#

so its not neccesary as you said

#

So its just me that want something well look

hybrid spoke
#

yes

sterile token
#

Thanks

ornate patio
mortal hare
#

is it possible to apply generic types to fields

#

without applying it to class level

kind hatch
ornate patio
mortal hare
ornate patio
#

it'll just make it a pain

mortal hare
#

if you're doing pathfinding you will still have second location which defines current pathfind location

ornate patio
#

its just the way its set up right now makes it difficult

mortal hare
#

go architectural refactoring go

sinful rapids
#
                        if (isDouble(args[1])) {

                        }

How do I check if args1 is an integer?

mortal hare
#

i might be wrong

#

its out of my memory

sinful rapids
#

if Integer.valueof?

mortal hare
#

Integer.parseInt(args[1])

#

If the string does not contain a valid integer then it will throw a NumberFormatException.

#

Integer.parseInt()

#
try {
  Integer.parseInt(args[1]);
} catch (NumberFormatException exception) {
    
  // If this code block executes, then its not an integer.
  // Handle the error by either printing the stacktrace or sending back the message
}
sinful rapids
#

ok

lime moat
quaint mantle
#

?paste

undone axleBOT
quaint mantle
#

pythondiscord lol

lime moat
#

lol, I'm a python boi

sterile token
lime moat
#

xd

sterile token
#

Sory man

lime moat
#

'tis not python

sterile token
#

I have a question

#

Why do you use static methods?

#

When its recommend to use DI (Dependency Injection)

lime moat
#

I don't really have a good explanation besides for the friend I'm working on this plugin with started that :P

mortal hare
#

is factory class constructing concrete builders a good idea?

sterile token
mortal hare
#

lets say i have a builder implementation that is dependant on the implementation classes i dont want for the client to construct them since it belongs to implementation package

#

i am decoupling interfaces and implementation as far as I can here

sterile token
#

dovidas

mortal hare
#

?

sterile token
#

They still can do it via Reflection

mortal hare
#

but that's way harder

#

im trying to encapsulate

#

to prevent that at least

lime moat
sterile token
undone axleBOT
mortal hare
#

It lets you run tests of your code way much easier

#

since you dont have any static getters inside your class

lime moat
#

Ah, okay, I use that for literally all of my commands lol

mortal hare
#

also it allows for the client to extend that particular class you're using

lime moat
#

I'll alter my code to make it work with DI then

mortal hare
#

for example to modify the behaviour

#

it can basically act as a composition

sterile token
#

Also statics methods are heavy to proccess rather than DI

mortal hare
#

I call it plug and play 😄 since it does the same, you plug it, what you're plugging into class, you class will gonna use in runtime

lime moat
#

Ahh, I see

sterile token
mortal hare
#

and by using static getter you're hardcoding that functionality

lime moat
#

Is it quite easy to alter it to be DI or would I need to change a lot?

mortal hare
#

its annoying to deal with DI tho

#

you need to add the objects you're using inside constructor

#

and add fields for them to store inside the class

sterile token
#

Im needing diff menus apis that allow pagination for testing pupouses

mortal hare
#

Strategy design pattern is very great example of DI (kinda)

mortal hare
sterile token
#

Allright i wil ltake a look

#

I have seen many menus apis but they are shity for me

#

Its like i dont like how they are coded

sterile token
#

Holy shit look that

#

Sorryforping

dire marsh
#

inventoryframework

sterile token
dusk flicker
#

PaginatedGUI is another one

#

Prior ver of SpiGui iirc

#

I use it a lot

iron glade
#

works great

sterile token
#

oh thanks people

torn oyster
#

(bungeecord) how do i get a file in the \resources folder and add it to the plugin's dataFolder

sterile token
#

You can use it on main plugin class

torn oyster
main dew
#

Hi I think Packet UseItem can be spoofed. How check it?

#

How to validate this packet?

#

and is it possible that a player playing without any modifications without external factors will spoofed this packet?

mortal hare
#

he cant spoof packets if he didnt have any mods on

#

Vanilla minecraft client doesnt provide you a way to manipulate packets

main dew
#

however, can ping cause something to break

mortal hare
#

No matter the ping, vanilla client sends packets correctly

#

even if gets delayed for the server

#

the worst case scenario would be that the server handled those packets incorrectly

#

and desync issues would occur

#

but that's very rare, unless you use some kind of plugins which manipulate packet handling incorrectly

#

protocollib (with its dependant plugins), viaversion, protocolsupport etc.

main dew
#

Oke but maybe do you know how validate this packet?

mortal hare
#

NMS ServerGamePacketListener class validates those packets

main dew
mortal hare
#

do you want to modify protocol of minecraft by supporting mods or what?

main dew
#

I have problem with spoofed packet from modified Minecraft version

#

my server doesn't check them and it causes undesirable results

#

@mortal hare could say I'd like to do a little anti-cheat

vocal cloud
#

Well you have to describe the issue and exactly what you think is being done.

ornate patio
#

how do I download the spigot-api jar and input it to jdgui

buoyant viper
#

why do u need it in jdgui @ornate patio

ornate patio
#

trying to decompile and search for keywords in the entire jar

#

for reverse engineering nms

buoyant viper
#

then ur not gonna get far with spigot-api i reckon

#

use buildtools and sift through the decompiled output

#

?bt

undone axleBOT
ornate patio
#

i have buildtools

#

wait hold up

buoyant viper
#

look in the work folder

ornate patio
#

net.minecraft isn't here

buoyant viper
ornate patio
#

so how do i look through entire nms code then?

#

i do have a built in decompiler in vscode but I can only control-click on existing classes

#

i wanna search for a specific keyword in the entire project

buoyant viper
#

iirc, run BuildTools with the --remapped argument, and then check ~/.m2/org/spigot/spigot/

ornate patio
#

whats the full command again?

buoyant viper
#

java -jar BuildTools.jar --rev <version> --remapped

#

the jar youre looking for will be in ur maven local repository

buoyant viper
#

'~' denoting your user home directory

#

like C:\Users\Username\

#

or /home/username/

ornate patio
#

is there an env variable for the path

#

i dont see it

buoyant viper
#

not sure and not on pc to test

ornate patio
#

is it spigot-api-1.18.1-R0.1-20220228.150432-81-shaded.jar?

buoyant viper
#

no

ornate patio
#

spigot-1.18.1.jar?

buoyant viper
#

bingo bongo baby

#

that should be what ur looking for

ornate patio
buoyant viper
#

oh

#

uh

#

wait that wasn't supposed to happen

#

there is supposed to be a lot more there

ornate patio
#

yeah

lost matrix
#

?bootstrap

undone axleBOT
#

Bootstrap Jar
The main spigot-1.18.jar is now a bootstrap jar which contains all libraries. You cannot directly depend on this jar. You should depend on Spigot/Spigot-API/target/spigot-api-1.18-R0.1-SNAPSHOT-shaded.jar, or the entire contents of the bundler directory from your server, or use a dependency manager such as Maven or Gradle to handle this automatically.

Please read the release notes for further information: https://www.spigotmc.org/threads/9-years-of-spigotmc-spigot-bungeecord-1-18-1-18-1-release.534760/#post-4305163

buoyant viper
#

oh it IS spigot-api shaded?

lost matrix
#

There is no uber jar

buoyant viper
#

trying to find the NMS jar for them

#

should it not have been something like ~/.m2/<something>/org/spigot/spigot/spigot-<stuff>.jar ?