#help-development

1 messages · Page 1823 of 1

eternal night
#

The entire registration is done by the server in the background

#

You don't have to worry about it

worldly ingot
#

It will if you have a config.yml in your plugin's archive, which according to that stacktrace, you do not have

rough basin
#

oh i forgot stacktrace, Thanks :D

worldly ingot
#

It was the first thing you sent aPES_Laugh

#

Just make a config.yml in your resources directory so it's exported with your plugin

quaint mantle
young knoll
#

Why?

eternal night
#

You throw the instance at the registerEvents method ?

quaint mantle
young knoll
#

There are technically a few other register methods

#

But they aren’t used often

granite beacon
#

Is there any way to expand the inventory of a dispenser or store more items inside of it?

young knoll
#

There isn’t any magical method for it

#

But you could do stuff with databases or some other form of storage

granite beacon
young knoll
#

You could, in theory

#

Using PDC

granite beacon
young knoll
#

Not natively

#

But you can write a type for anything

granite beacon
#

I could also serialize the inventory into a string ig

smoky oak
#

net.minecraft.world.level.chunk.Chunk.a(BlockPosition, IBlockData, false) doesnt seem to actually change the block I'm targetting, even if i reload the chunk/relog. Anyone knows why?

quaint mantle
#

how to delay a for loop

#

i have some packets in a list

#

and i want to send it to a player

#

but every like 5 tick

quaint mantle
#

Or queue

#

oh ok

#

i dont know how, can you explain ?

#

@quaint mantle like this ?

#

else cancel();

young knoll
#

Looks good to me

quaint mantle
#

ok thanks

young knoll
#

Any reason for a delay of 1?

quaint mantle
#

just use delay 0

#

or delay 5, period 0

#

there are other Holograms

#

i want to optimize the packets

#

so the client wont decline them

young knoll
#

Yes but the delay is the initial delay before the first run

#

Is there a reason for using 1 over 0

quaint mantle
#

there are other holograms doing the same thing
its for a fake packet hologram keep alive thing

wild reef
#

Hey can anyone help me real quick. I have some problems with updating my maven project rn The POM for org.spigotmc:spigot:jar:1.17.1-R0.1-SNAPSHOT is missing, no dependency information available

quaint mantle
#

and it gets bolder

#

it is not nms related, im doing something wrong in the code & method call

#

that i cannot figure out

noble lantern
#

Hear me out, but if its spawning multiple armor stands wouldnt that mean it didnt despawn in the first place?

#

I had a stacker plugin i was working on that had armor stands as holograms and they never despawned for me even after i afked or spent a few hours in my IDE, or even after server restarts

noble lantern
#

never needed it, invisible armor stand set no physics and boom

#
  • referance to entity UUID
quaint mantle
#

wdym

noble lantern
#

as in

quaint mantle
#

is there a patch for lib4j?

noble lantern
#

You spawn ArmorStand.class

Set invisible, no physics, set custom name, set it to visible or invisible (Your preferance)

And store a referance to the spawned ArmorStands UUID so you can easily find it without needing to store a pesky Location

noble lantern
noble lantern
quaint mantle
noble lantern
#

I simply spawned ArmorStand.class into world and then it returns an Entity you can modify

quaint mantle
#

placeholder support

noble lantern
quaint mantle
#

for each player

#

the name is different

noble lantern
#

Then yes use packets

quaint mantle
#

for every player

quaint mantle
noble lantern
#

But for a basic Hologram you generally shouldnt need packets unless its things like this

quaint mantle
#

in this

#

method call or ...

#

that spawns duplicate holograms

noble lantern
#

You should store a referance to that ArmorStands UUID

#

and then get it by UUID

#

and see if it still exists before spawning another

#

World#getEntityById()

#

Entity#getUniqueId()

quaint mantle
#

dude it is nms

noble lantern
#

You should still be able to get the ArmorStands UUID

#

Wether its after you spawn it or getting the entity by location and then storing that entities UUID

quaint mantle
#

also does anyone have the resource for the mapped nms jar

#

how to get it in my maven project

#

i cant find it but could be googlign the wrong thing

ivory sleet
noble lantern
#

True but im not sure how theyre sending that custom name to the player

But i assume there could be a method to check if an entity exists clientside with packets?

#

either way the problem is with some type of check for seeing if that ArmorStand exists already

However if theyre rendered to the client wouldnt that mean theyre going to stay until server restart anyways?

ivory sleet
#

Yeah, well you’d have to send a packet to tell the client the entity died or smtng

#

Well I don’t mess with packets a lot so I shouldn’t say too much

noble lantern
#

Me neither but i feel like the general idea is still there

I really feel like that armor stand shouldnt be despawning though until restart if a type of meta deta gets set onto it, when i made just basic hologams with armor stands they never ever despawned on me

quasi kraken
#

I am following a tutorial that used getTitle()

but that was already deprecated then, and removed now, so it doesn't work. What should I use instead of getTitle?

quaint mantle
#

uhh

#

paper moment

#

use title() in paper

iron vector
#

Does the AsyncPlayerChatEvent
1 Fire when a Player runs a command?
2 Fire when a Player uses /say or /tell or /me to chat?

candid galleon
#

no and no

abstract surge
#

hey how can i detect when i break a block under a banner and the banner drops?

noble lantern
ivory sleet
#

It’s to not cause confusion and for possible removal of obsolete deprecated string methods in the future

noble lantern
#

ahhh i see fair enough

#

was always curious about things like that it got annoying sometimes xD

ivory sleet
#

Also I believe x() is an official accessor convention as opposed to getX()

#

For instance even Java uses that convention regarding records

noble lantern
#

so player() would be more acceptable rather than getPlayer() essentially? (If you made your own API methods for something?)

vivid lion
#

hi im trying to extend from EntitySpider but this is showing up. Can someone please help

vivid lion
noble lantern
#

Never extended an entity before, not sure if thats possible but ive seen other stuff

ivory sleet
vivid lion
#

tried to override boolean x() method and brought that error up

#

heres the code

noble lantern
# vivid lion

Your overriding a method with a incorrect return value it seems

vivid lion
#

so how do i fix that

#

because EntityInsentinent is a child to EntityLiving

noble lantern
noble lantern
vivid lion
#

ye i tried to place void too

#

but its doing an error line too

noble lantern
#

I remember some people up above saying having custom entities like this was a huge pain

#

Whats that error say? and ide just make the method body empty, and maybe ctrl + click that method

#

if you ctrl + click it should take you to the class file and it may or may not have a java doc

vivid lion
#
java: x() in com.DominateMonsters.Plugin.AbstractSpider cannot override x() in net.minecraft.world.entity.EntityLiving
  attempting to assign weaker access privileges; was public
#

oh the void issue

#

is this

chrome beacon
#

Use mappings

vivid lion
#

mappings?

chrome beacon
#

Use the mojmaps to avoid two methods with the same name like that

viral temple
#

guys, what am I doing wrong?

chrome beacon
#

Show the entire method

viral temple
#

also, its a big method

#

is my logic broken or something???

rotund falcon
#

Anyone know how to cancel/allow falling through powdered snow?

rotund falcon
chrome beacon
viral temple
#

it should be an if-else

vague oracle
#

How can you say “I don’t have too” when we are trying to help :/

vague oracle
#

No, was just stating a point

viral temple
#

it isn't small tho

#

so that's why I didn't paste it 🙂

noble lantern
#

May i reccomend helper classes xD

vague oracle
#

The reason we ask is because somewhere off screen you are already saying if Args is > 2 so when you get to the line you show, it will ask ways be true

noble lantern
#

^

viral temple
#

anyway, I'm compiling it

chrome beacon
#

Yeah you're checking > 1 and == 2

#

So value will always be > 2

viral temple
chrome beacon
#

Next time if someone asks for the entire method send the entire thing instead of arguing

chrome beacon
#

Empty would end up at the bottom of the method

#

In the else statement

viral temple
#

ohhhh that's right

quaint mantle
#

what method gets called when somebody places a minecart ?

viral temple
#

is > 1 and == 2

#

so the else if is unnecessary

noble lantern
chrome beacon
#

PlayerInteractEvent would also be fired

noble lantern
#

^ that too

chrome beacon
#

Won't work for dispensers though

quaint mantle
chrome beacon
#

Check item in hand. Anyway don't use it

quaint mantle
#

so what should i do

chrome beacon
#

Use EntitySpawnEvent

quaint mantle
#

wont work

#

i cancel it

#

should i remove the entity instead of cancel ?

chrome beacon
#

Show how you cancel it

hybrid spoke
quaint mantle
hybrid spoke
#

the code

quaint mantle
#

both cancel & remove

hybrid spoke
#

?paste

undone axleBOT
chrome beacon
quaint mantle
vivid lion
#

to use it

quaint mantle
#

what event gets called when a player throws a potion ?

ivory sleet
#

Probably the projectile launch event

chrome beacon
ionic hatch
#

Hey, I am currently trying to experiment with GUIs. I was wondering, could I store an inventory as a primitive so i can store it using YAML, and then convert it back to an inventory to use again?

#

( or is this a really stupid and not-gonna-work idea? )

quaint mantle
#

is there anyway to listen for hotbar loading ?

#

and cancel it i guess

chrome beacon
ionic hatch
#

Convert inventory to ItemStack array, then loop trough the array, save each item, then store?

chrome beacon
#

Yeah

#

Use getContents to get the item stack array

ionic hatch
#

I can loop trough itemstack arrays normally, I'd have to see what i need to change using yaml

ionic hatch
rustic mica
#

Did spigot remove the jars for pre release 1.8 from the maven?

ivory sleet
#

Possibly

#

1.8 is ancient anyway

spiral light
#

@ivory sleet can you try to test PrepareItemCrsftEvent and set some random stuff to get a new result ( place 3x3 stones and get 1x obsidian for example) and then try to cancel it with the CraftItemEvent ... I believe it is not working because it does not know the recipe

#

Also items get somehow duped with not registered recipes and custom result in prepareitemcrsftevent

vale ember
chrome beacon
#

Just compile it or use jitpack

vale ember
chrome beacon
vale ember
#

but it's not my repo

chrome beacon
#

And?

paper viper
#

Jitpack works for most GitHub repos

ivory sleet
#

Hehe

paper viper
#

Lol

round iris
#

.

#

How to enslave villages so they trade mine custom items?

tardy delta
#

which file is this?
new File(Bukkit.getWorldContainer().getAbsoluteFile(), "bukkit.yml")

ashen agate
#

Does anyone know if there's an easy way to create an API jar from your original jar file? Same structure, but with empty method bodies (returning null, 0, etc.)

ivory sleet
#

A Uber jar which contains all the interfaces, then just copy the resource write it somewhere else

maiden briar
#

remap biome IDs on MC 1.18 Somebody told me not to know how to get the biome id in 1.18 from the packet

#

I don't know either, so that is why I am asking

young knoll
#

That’s a neat little system

atomic violet
#

so the PlayerRespawnEvent isn’t working, and i’ve /killed myself, it should be triggering right? i’ve tried it with other events and the code works just fine, it’s just not detecting the event

maiden briar
#

Then you did not register the listener

atomic violet
#

you mean import the listener? as i’ve said, i’ve replaced the event with another one and it worked, and i have both of those events imported

#

it shows red if you don’t have it imported

maiden briar
#

Show me your code

quasi flint
#

main class

#

and listener class

atomic violet
#
        public void onRespawn(PlayerRespawnEvent e) {

        Player player = e.getPlayer();

        for (Player p : Bukkit.getOnlinePlayers()) {
            player.addScoreboardTag("1");
            player.setGameMode(GameMode.SURVIVAL);
            player.setAllowFlight(true);
            player.hidePlayer(p);```
maiden briar
#

......

quasi flint
#

bruh

atomic violet
#

the wrong part?

quasi flint
#

the whole class

atomic violet
young knoll
#

That’s some weird code

quasi flint
#

like implements

atomic violet
#

i can send later cause i’m not at my computer rn

quasi flint
#

¿

maiden briar
atomic violet
#

but i’ve implemented everything correctly, like i’ve said, ive literally replaced PlayerRespawnEvent with PlayerDropItemEvent (whatever it is exactly can’t remember) and it worked

quasi flint
#

how can you see it does not work?

atomic violet
#

oh and i also don’t have the online players bukkit thing in my new code cause i don’t need that

quasi flint
#

like a sysout

atomic violet
#

and tested it

maiden briar
#

NO that is not how it works

#

You put a sysout

quasi flint
#

or logger

#

whatever

maiden briar
#

Or throw an exception

atomic violet
#

what’s that

maiden briar
#

We got 3 possibilities here

maiden briar
atomic violet
#

i’m sorry, i’m new to coding so i might not understand everything

quasi flint
#

however an exception is rather dumb

#

gotcha homie

#

?learnjava

undone axleBOT
atomic violet
#

like very

maiden briar
quasi flint
maiden briar
#

Good idea throwing an exception in PlayerMoveEvent.........

#

But I meant, SOMETIMES it is handy, not for everything. But it is still a possibility

quasi flint
#

😂

maiden briar
#

........

atomic violet
#

i just need to know if there’s something i need to do to make the respawn event work?

#

cause other events work

quasi flint
#

guide on hoe to fuck up users / admins

maiden briar
#

Registering????

atomic violet
#

i did

#

beuh

maiden briar
#

Throw an exception on PlayerMoveEvent

atomic violet
#

nvm i’ll google

maiden briar
atomic violet
maiden briar
#

No please don't

#

This is just a joke

quasi flint
#

System.out.println(„String“);

maiden briar
#

Hahahaha

quasi flint
#

thats your debugger my god

maiden briar
#

No but the first " is wrong

quasi flint
#

nah german keyboard

maiden briar
#

Achso du bist Deutsch

quasi flint
#

well in england it is

#

jawohl mein Kamerad

maiden briar
#

😄

quasi flint
#

well back to english

maiden briar
#

Yes

pallid forge
#
@EventHandler
  public void chunkLoadEvent(ChunkLoadEvent chunk) {
    if (chunk.getChunk() == location.getChunk()) {
      
    }
  }
``` is there any better way to listen to when a certain chunk loads?
quasi flint
maiden briar
quasi flint
#

prob not

quasi flint
maiden briar
#

Yeah boy, google will fix it in seconds

pallid forge
maiden briar
#

Imagine If I could fix my packet problems with that, that would be amazing

quasi flint
#

whats wrong with ur packets??

#

¿¿

maiden briar
#

The packetlistener doesn't work, I am currently writing one myself

#

And NMS is pretty hard

#

Oh shit have to go bye

quasi flint
buoyant viper
#

cant u use protocollib or somethin?

quasi flint
#

prob has reasons

atomic violet
#

is this what you meant by registering

quasi flint
#

no

#

in your onEnable bruh

atomic violet
#

oh

#

i did that too

quasi flint
#

well that is registering

atomic violet
#

wait, maybe i didn’t

#

i cant check rn tho

quasi flint
#

please learn java my god

atomic violet
#

my b

quasi flint
#

no that is importing

atomic violet
buoyant viper
#

i think this is a ?jd moment

quasi flint
#

a package / class

buoyant viper
#

?jd

quasi flint
atomic violet
#

i just got the two terms mixed up jeez like chill

buoyant viper
#

actually is there a cmd to link to spigots how to make a plugin, that would suite this better

#

pretty sure it goes over events

quasi flint
#

yea

#

learned by that one

buoyant viper
#

kinda lazy to catch myself up2speed on this so, do u have access to ur source rn @atomic violet

atomic violet
#

no, i’m not home

buoyant viper
#

rip

atomic violet
#

wait source of where i learned code or my actual code

quasi flint
#

actual code

atomic violet
#

no

buoyant viper
#

when u get home take a look at ur plugins entry class (the one that extends JavaPlugin), see if u have a getServer().getPluginManager().registerEvents or w/e in onEnable()

buoyant viper
atomic violet
#

yeah i think i might’ve forgotten that and added it for the new event i was testing, i can’t remember tho cause my short term memory is shit

vapid tulip
#

Hi, I'm having a problem with the Spigot dependency, I have my maven dependency like this:

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

But my code is giving me some compilation errors in methods and attributes that do appear in the documentation but don't appear in the classes that Maven downloaded, for example:

#

i cant send images, damn

glossy scroll
#

Have you run buildtools for that version

#

Have you tried compiling with maven

young knoll
#

Don’t need to

glossy scroll
#

Ik

buoyant viper
#

do u have the maven repository added?

vapid tulip
#

yes

#

the rest of my maven dependencies are working, and many spigot things are working

glossy scroll
vapid tulip
#

for example, all the materials are working, except Material.CROSSBOW

vapid tulip
glossy scroll
#

No

#

Run mvn clean install

vapid tulip
#

okey, gonna try that

young knoll
#

Define not working

#

Is it a compile error or runtime error

glossy scroll
vapid tulip
#

Compile error

young knoll
#

Interesting

#

Do newer materials work

#

Like amethyst

glossy scroll
vapid tulip
#

Im trying, im getting an error because Im using MythicMobs dependency, and it cant find ProtocolLib INSIDE the folder of that dependency

#

I need to do some errands, once i get it to build with maven I'll let you know if it solved the problem

#

thank you !

next robin
#

hello, I would like to make plugins in 1.18.1, but when I put the spigot that I have downloaded in my project, it does not work, extends JavaPlugin is unknown and the rest too

young knoll
#

Read the update post

next robin
young knoll
next robin
#

thx

rough basin
#

How do I save the config.yml in the outside of Main class?

#

I thought calling a method from Sentry, but goddamn static blocked my way.

next robin
fathom cobalt
#

it should be stored in the resources folder of said plugin

young knoll
#

It does say the path

next robin
young knoll
#

Why are you looking in the jar

fathom cobalt
# rough basin Thanks

fwiw the getPlugin() method wants a string name of the plugin, so if you named your plugin Sentry it's getPlugin("Sentry")

young knoll
#

Look in your buildtools folder

young knoll
fathom cobalt
#

I probably should

next robin
young knoll
#

Then where did you get the jar

next robin
#

on internet

young knoll
#

?bt

undone axleBOT
young knoll
#

Stop using illegal rehosting sites

next robin
#

mmh

#

i try

fathom cobalt
#

that's the one I was talking about anyway

young knoll
#

Forgot about that one

#

But it's really janky anyway, use proper DI

#

Or a static getter if you must

fathom cobalt
#

well, that's if you can (in his case he can), in my case I use it for Vault

#

for my own plugins I just use static stuff 😟

ivory sleet
#

Wut

fathom cobalt
#

wym wut?

ivory sleet
fathom cobalt
#

it isn't

#

but it works

ivory sleet
#

🥴

fathom cobalt
#
lateinit var plugin: HomesPlugin```
#

I call this one

#

which I assign in the onEnable() method

ivory sleet
#

You use kotlin?

fathom cobalt
#

yeah

#

I was considering looking into Koin

ivory sleet
#

Well in that case you technically don’t use static

#

Or well "companions"

#

But yeah

fathom cobalt
#

yeah, true

#

but I can't imagine this is much better than a static in Java 😛

ivory sleet
#

Koin is cool

fathom cobalt
#

not sure what it compiles to (bytecode)

fathom cobalt
#

compared to a static

#

but I imagine something similar to the java static

ivory sleet
#

Tho something like
companion object const X = 10 would be cool

#

So without the {}

#

Indeed

fathom cobalt
#

I tried looking into Guice before, but I absolutely hate it

#

I love Spring's DI though

ivory sleet
#

Idk

#

I always end up with guice

fathom cobalt
#

Spring is definitely not ideal for a Spigot plugin though

ivory sleet
#

Even if I try to use something else

#

Yeah lol

fathom cobalt
#

yeah, my problem with Guice probably mostly revolves around me not knowing it at all

#

and every time I touch it, I have issues

#

I'm in the Spring DI mindset whenever I try

ivory sleet
#

Yeah well it’s somewhat too complicated arguably so in that angle, spring di is probably better

fathom cobalt
#

yeah, when I last tried it (followed some tutorial for Spring Plugin with Guice), it just felt like I was doing just as much work as before

#

so the gain was probably better code, not more efficient way of writing it

ivory sleet
#

Yeah

next robin
# young knoll ?bt

I cannot recover the files from the BuildTools: the error is that I must have java 17 but when I do javac --version, I have 1.17 ... someone can help me

ivory sleet
#

And well to be fair, normal explicit dependency injection isn’t always that bad

#

Like in worst case, extract a function and have a builder derp

fathom cobalt
#

not entirely sure I follow, have very little experience with DI outside of Spring

ivory sleet
#

Well

#

Just passing objects to constructors and functions

#

Without using a framework to help you bind everything together

fathom cobalt
#

so just reflect the stuff yourself and call their constructors/methods?

buoyant viper
#

run java -version instead

ivory sleet
#

More just like
record A(B b){}

new A(new C());

#

(Given that C derives B)

next robin
buoyant viper
#

F

fathom cobalt
#

ahh

next robin
#

how i can change it ?

ivory sleet
#

Just normally passing an instance of C to a new instance of A (;

young knoll
#

Google how to change JAVA_HOME

buoyant viper
#

edit environment variables or temporarily run from the full path

fathom cobalt
ivory sleet
#

Every object you pass as an actual argument to a function is a dependency of that function

buoyant viper
#

ex:

path/to/java_17_jdk/bin/java -jar buildtools.jar

ivory sleet
#

Function/constructor

fathom cobalt
next robin
#

Ok, thanks everyone

fathom cobalt
#

np, good luck 🙂

next robin
#

i'm select java 1.17

#

but

#

java 1.8 still running

chrome beacon
#

Did you restart git bash after changing java

next robin
#

i restart my computer

smoky oak
#

theres a good chance its because the JAVA_HOME path is still pointing to java 1.8

next robin
#

there are 2 path

#

and just java 17 and enable

#

"Activé" in french

#

i wanna die

smoky oak
#

maybe setting the java paths to java 1.17

#

on another tangent

#
        int x1 = x, x2 = x+16;
        int z1 = z, z2 = z+16;
        for(;x1<x2;x1++){
            for(;z1<z2;z1++){
                for(int y = 127;y<255;y++)
                    setBlockInNativeChunk(world, x1,y,z1,Material.NETHERRACK);
            }
        }```
For some reason this does not iterate over the increasing x coords and i dont know why
#

result's a wall instead of a block

#

anyone knows why?

#

the loops are the same

eternal oxide
#

That code looks fine. look elsewhere for your issue

smoky oak
#

i doubt it's the method call

nms_1_set(chunk.getWorld(),chunk.getX()<<4,chunk.getZ()<<4)```
That should get me the 0/0 coords of the chunk, right?
eternal oxide
#

isn;t that bit shifting the wrong way to get a world coord?

smoky oak
#

multiply by 16

#

and it works you know

eternal oxide
#

ok

smoky oak
#

i get the chunk i need

#

lemme try something

eternal oxide
#

Yep I was thinking world coord to chunk

smoky oak
#

so doing -15 on the x coord is just causing it to fail completely

#

its not that part

#

okay i tested the setblock method. It works on other x values too

#

so wth is up with the loop causing it to not work

eternal night
#

They ask in a spigot support discord

split panther
smoky oak
#
int x1 = x+16;
int z1 = z+16;
int i = 0;
for(;x<x1;x++){
  for(;z<z1;z++){
    i++;
  }
}

i = 16
WHAT?

golden turret
#

wtf is that

smoky oak
#

idk

#

its what it spits out

quaint mantle
#

Is it possible to show a custom recipe in the recipe book? 🤔

#

discoverRecipe does nothing

onyx shale
#

afaik yes in newer versions

quaint mantle
#

So not in 1.17? :/

young knoll
#

You can

onyx shale
pastel arrow
#

when i do for(Player all_Players : Bukkit.getOnlinePlayers()){ all_Players.damage(final_damageamount); } it goes through the online players like thousands of times. how can i do it that in only goes through once?

young knoll
#

Is it in the damage event

smoky oak
#

it gets better

int x1 = x+16;
int z1 = z+16;
int i = 0;
int j = 0;
for(;x<x1;x++){
  i++;
  for(;z<z1;z++){
    j++;
  }
}                          }}

i = 16, j = 16
someone explain this
r/blackmagicfuckery
ur supposed to initialize z in the inner loop

pastel arrow
young knoll
#

That is why, .damage will call the event again

#

Set a boolean to true before your loop and back to false after, then return at the start of your event handler if the boolean is set

pastel arrow
young knoll
#

if (bool) return;

#

That way you don't execute the loop

noble spire
#

iirc there's a way in spigot to create custom music disks then use a resource pack to add sound files - Could anyone direct me to a forum post / method with infio?

#

(or do you need to use a mod)

golden turret
#

well

noble spire
#

well?

#

Have I gone somewhere I shouldn't have

lunar schooner
#

I could use some opinions, I'm having a lot of fun with Java JNI from Rust, and I am considering writing a Bukkit abstraction layer so that one can essentially write plugins in Rust for Bukkit without looking at JNI's ugly head. Would this be a good plan, an entirely crap one? Do you think people would be interested in such a library? Thanks

hasty prawn
#

You'd just need to add some tag to the music ItemStack and play a custom sound when they right click with the disk instead of playing the normal song.

noble spire
#

Do you have to override a music disk and store metadata in a persistent data container then on play events play the custom sound?

#

yeah ok

quaint mantle
#

You also would have to reimplement some jukebox stuff

robust forge
#

Hey is there a way to detect if arrow hits a block that it doesnt collide with? For example grass

coral valve
#

Hey, when creating spigot commands via implementing the CommandExecutor class, I have a slight issue.

In a number of my command classes there are variables that every method in my class uses, playernames, etc.

How would I store these so their accessible across all methods without doing something like this:

`onCommand(CommandSender sender, Command command, String alias, String[] args){
Player player = (Player) sender;
a(player);
}

a(Player player){
b(player);
}

b(player){}`

If I were to do something like create a public Player field and assign it, to the sender when onCommand is executed, would that feild not be changed when its run by another player?

robust forge
#

Ye whats the issue with passing variables to other methods?

coral valve
lunar schooner
#

You could use a Record class?

#

Though you should probably rethink your design once you go past ~7 parameters I'd say

coral valve
#

your saying I make the class that implements CommandExecutor a Record?

#

maybe if I write a custom CommandExeutor class that could work

quaint mantle
#

no

coral valve
#

well how would I do it

#

its not possible at all>

#

?

#

thats a shame

quaint mantle
#

Thats your design problem

coral valve
#

okay, well i'll prob jsut do it that way. it would probably be possible to create a custom object with all the variables you need.
make a public Map<Player, CustomObject> and add the player to the Map when onCommand is run. Then all variables will be editable and accessible, but also wont be messed with by other player running the command?

misty current
#

how can I check if a player is moving, but not forwards?

quaint mantle
coral valve
#

depends on what type of command im implementing. If i remove the player from the map when I know the command is done, how will that lead to a memory leak

#

if its something longer I cant do that

#

but im making a shop gui

#

I can check when the player closes the gui and remove them from the map

#

also its more beautiful if you have like 10 variables

quaint mantle
#

that's just annoying to keep control of it. Command execution context wasnt meant to be persistent

coral valve
#

Im not saying thats what I'm going to do, I jsut said it was possible

#

what about just using that custom object to store everything and parsing that through each method?

quaint mantle
#

yeah thats definetly better

coral valve
#

cool I may do that. I can just make that custom object a private nested class.

paper crest
#

i cant import 1.18 spigot on eclipse

#

same

quaint mantle
#

Are you using maven

paper crest
#

same

paper crest
quaint mantle
#

use maven

paper crest
#

i just want to import the jar only

#

i dont want maven

shadow night
#

Maven is cool

paper crest
#

ikr

quaint mantle
#

No no

#

You want maven

paper crest
#

but i dont want to use it

quaint mantle
#

no you want

shadow night
#

Gradle?

paper crest
#

no

shadow night
#

What do you use

paper crest
#

i want to umport it like on other versions

quaint mantle
#

not possible smh

paper crest
#

but why?

#

is on 1.18 only

quaint mantle
#

because now spigot is bootstrap jar

#

See spigotmc news

#

Anyways you should use a proper build tool like any sane developer

paper crest
cloud current
#

If I do a plugin in 1.8 will it be compatible with versions up to 1.17

quaint mantle
#

yes unless you use nms

#

but damn just dont support 1.8

cloud current
#

no problem with Java version used ?

quaint mantle
#

no i believe

cloud current
quaint mantle
#

oh

misty current
cloud current
quaint mantle
#

Java is backwards compatible so

young knoll
#

How does one use NMS with a project that supports 1.8-1.18

#

Is it actually possible?

paper crest
#

where i can find this jar?

#

Spigot/Spigot-API/target/spigot-api-1.18-R0.1-SNAPSHOT-shaded.jar

young knoll
#

In the buildtools folder

quaint mantle
#

Use. Proper. Build. Tool.

shadow night
#

In programming not everything

#

But most

young knoll
#

Okay well, yeah

#

But I would like to know how (Not that I intend to)

quaint mantle
paper crest
#

cant import this

quaint mantle
#

use. Proper. Build. Tool

shadow night
#

I hope java ide's for mc plugin/mod development on mobile devices would be possible, as I can't access my pc always

young knoll
#

API does not have NMS

paper crest
young knoll
quaint mantle
#

run buildtools and add spigot artifact

paper crest
quaint mantle
#

you put in depenencies in pom.xml

paper crest
#

i dont use maven

#

i just want to import a jar

quaint mantle
#

So you will develop against java 17 but plugin to going to be built to support java 8

shadow night
quaint mantle
#

use. Maven

wicked lake
young knoll
#

No it won't?

wicked lake
#

I went from 60k kb to 40kb

shadow night
paper crest
#

dont tell me again to use maven

#

i know how to use maven

quaint mantle
#

Maven is the official way

olive lance
#

nah but fr tho maven is some hype train stuff

paper crest
#

i have 200 plugins i not have the time to convert them to maven

quaint mantle
#

You're on your own

quaint mantle
paper crest
#

i fixed import by import this jar

#

original-spigot-1.18.1-R0.1-SNAPSHOT

waxen plinth
#

You can very easily set up some kind of template for a project

#

I have a script I run that prompts me for the name and version of the plugin and creates the project with the main class, build script, and plugin.yml

quaint mantle
#

ok

young knoll
#

Since when is maven dying

ivory sleet
#

Idk it’s just that gradle is becoming way more popular from what I can tell

#

And it’s for some quite powerful reasons also

olive lance
#

i cant verify the source but this is from wikipedia projects on maven central repo overtime

olive lance
#

well its clearly not dying is it

waxen plinth
#

Even gradle projects pull from maven central

olive lance
#

so its being used

quaint mantle
#

Gradle uses maven repositories as well

young knoll
#

Gradle still has no first party shading

#

smh

#

0/10 unplayable

waxen plinth
#

A project being on maven central doesn't mean it uses maven as its build system

quaint mantle
#

wha

ivory sleet
#

It kinda does

waxen plinth
#

smh

young knoll
#

That's 1 too many!!!!11111

ivory sleet
#

iirc using java-application plugin will shade in runtimeOnly and implementation

olive lance
#

ye but like maven is being used

waxen plinth
#

Maven repositories are definitely not going anywhere

atomic violet
#
                        feather.setDisplayName(Color.YELLOW + "Change Flight Speed");```
#

this isnt changing the color

waxen plinth
#

Maven as a build system might be falling out of favor

atomic violet
#

its just doing the color id for yellow

#

how do i make the text yellow

waxen plinth
waxen plinth
#

Wait no lol

olive lance
#

ChatColor no?

waxen plinth
#

ChatColor

atomic violet
#

its just showing the color id in game

waxen plinth
#

Yeah

atomic violet
#

ohhh

#

not color?

#

its chatcolor?

waxen plinth
#

I didn't see it was Color instead of ChatColor

olive lance
#

ye

waxen plinth
#

Lmao

atomic violet
#

ok

ivory sleet
#

Set the item meta also

quaint mantle
young knoll
#

Shhh

ivory sleet
#

Hehe

waxen plinth
#

💀

quaint mantle
#

And that is definetly more than one line 🤠

ivory sleet
waxen plinth
#

Maven is just so overly verbose

#

Fuck XML all my homies hate XML

olive lance
#

What even makes maven necessary for anything

ivory sleet
#

I mean

olive lance
#

ive never had an issue without but im just a nub

ivory sleet
#

What do you use if you can’t use maven / gradle?

olive lance
#

intellij

atomic violet
#

one last thing if (player.getScoreboardTags().contains("1")) how do i make the code execute if the scoreboard tag is not "1"? i know it has to do with ! but idk where to put it

#

or maybe its somethign different idk

quaint mantle
#

Have you heard about using libraries

atomic violet
#

im stupid

ivory sleet
#

Oh well but if you use ant, eclipse people can’t work on the project or maybe eclipse does in fact support ant

olive lance
#

Oh yea ive never even heard of ant so idek

quaint mantle
#

I cant live without

  1. Jdbi
  2. Adventure
  3. MiniMessage
  4. Hikari
  5. Caffeine
  6. DazzleConf or Configurate
#
  1. Cloud command framework
opal juniper
#
  1. RedLib
quaint mantle
#

common libs are boring!

waxen plinth
#

@olive lance build systems mean you can press one button and build your project exactly the way you need

ivory sleet
#

Cloud command framework is cool but a bit too verbose sometimes imo, like the asynchronous command coordinator

waxen plinth
#

And anyone else can too

#

You just download the project and run the build script

olive lance
#

Why would someone want to build a plugin a diff way tho

waxen plinth
#

What

olive lance
#

I mean just for the purpose of spigot

#

Idrk what a different way means i guess

waxen plinth
#

If you're working on a project with someone else a build script makes it much easier

ivory sleet
waxen plinth
#

If your code is open source anyone can clone and build it locally

quaint mantle
#

guava is built-in in spigot so!!

ivory sleet
#

What if its not spigot derp

quaint mantle
#

I use it very oftenly ngl

waxen plinth
olive lance
#

Yeah mine is open source so if I used maven then people could contribute easier?

quaint mantle
#

Yup

waxen plinth
#

Or gradle, yes

ivory sleet
#

Oo redempt what are you thinking of?

waxen plinth
#

I wonder what it could possibly be

atomic violet
olive lance
#

If my only dependency is spigot api then is it still easier or no?

ivory sleet
#

I mean your command file thing?

#

Yeah that’s quite nice

waxen plinth
#

Just put a ! in front of the boolean expression

atomic violet
#

ah ok, so how do i check if they dont have the specified tag

#

oh

#

ok

waxen plinth
#

!player.getScoreboardTags().contains("1")

quaint mantle
atomic violet
ivory sleet
atomic violet
#
                        ItemMeta compass = (ItemMeta) item.getItemMeta();
                        compass.setDisplayName(ChatColor.RED + "Teleportation Menu");
                        item.setItemMeta(compass);
                        player.getInventory().addItem(item);

                        ItemStack item2 = new ItemStack(Material.FEATHER);
                        ItemMeta feather = (ItemMeta) item.getItemMeta();
                        feather.setDisplayName(ChatColor.YELLOW + "Change Flight Speed");
                        item2.setItemMeta(feather);
                        player.getInventory().addItem(item2);```
#

its giving the first compass with the custom name, but its only giving the feather with the default name, not my custom name

#

and they are exactly the same (except the variables to distinguish them)

young knoll
#

What's with the pointless cast to ItemMeta

atomic violet
#

idk, its how someone told me to do it a while ago

#

i figured i didnt need it but they told me i did :/

#

anyways how do i get the feather with the name, cause it wont do it even tho it works for the compass

young knoll
#

That should work fine

#

I have no idea why it wouldn't

atomic violet
#

yeah thats why im confused

#

its just "Feather" not the change flight speed

young knoll
#

Hmm, you are calling item.getItemMeta instead of item2.getItemMeta

atomic violet
#

oh bruhhhh

#

i shouldve looked harder

#

my b

#

thx

waxen plinth
#

This is why you should use a builder, or make them constants defined externally

#

Or at least scope them differently, like make functions that return these rather than defining them in the middle of some other function

mortal hare
#

quick question

#

if i subtract from itermstack

#

for example by 1

#

will the itemstack get removed automatically if the amount < 0

#

or i need to manually check and remove it

chrome beacon
#

Yes at least in newer versions

mortal hare
#

neat

young knoll
#

And it's so nice that it does

tardy delta
crisp arch
#

does anyone know any resource that helps locate NMS methods?

#

for example,

#

ServerGamePacketListenerIMPL

#

im watching a tutorial for 1.17 but im using 1.18

#

and 1.18 doesnt have this method/it was renamed

tardy delta
#

use reflection

#

stuff like Class.forName("craftbukkit.stuff" + classname)

crisp arch
#

?

young knoll
#

That won't help you find the method name...

#

You should use Mojang mappings to avoid this issue in the future

quaint mantle
#

A better one

crisp arch
#

wait, how do i apply those mappings?

young knoll
#

Check the 1.17 release post

crisp arch
#

is there a way to apply those mappings in intellij so i can use the mojang mappings in code?

young knoll
#

Yes

crisp arch
#

Ok, i read that it says i have to add <classifier>remapped-mojang</classifier> and reload maven pom, but i got this error

Could not find artifact org.spigotmc:spigot:jar:remapped-mojang:1.18.1-R0.1-SNAPSHOT in spigotmc-repo (https://hub.spigotmc.org/nexus/content/repositories/snapshots/)

young knoll
#

It gives you a maven example

#

Run buildtools with --remapped

crisp arch
#

ok

#

damn time to run build tools again

#

my slow laptop takes 5 years to finish

dusty sphinx
#

Is there a way to have multiple config files using the configuration API?

young knoll
#

Yes

#

You can load any yml file with YamlConfigration.loadConfiguration

dusty sphinx
#

How about saving defaults?

quaint mantle
#

ello how do i resolve this error? ```[ERROR] Failed to execute goal on project crazycrates-v1_18_R1: Could not resolve dependencies for project me.badbones69:crazycrates-v1_18_R1:jar:1.10.1: Could not find artifact org.spigotmc:spigot:jar:1.18-R0.1-SNAPSHOT -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <args> -rf :crazycrates-v1_18_R1

crisp arch
#

can @young knoll confirm?

#

Could not find artifact org.spigotmc:spigot:jar:1.18-R0.1-SNAPSHOT i think that means they dont have CraftBukkit

eternal oxide
#

spigot

crisp arch
#

but spigot means the code uses CraftBukkit & nms

#

im pretty new to NMS so i cant really confirm this is correct

sullen dome
#

spigot-api uses the api that comes from the maven repo i guess?.
spigot is taken from your local .m2 repo, what means you need to have ran bt before

wicked lake
#

Pretty sure both come from buildtools but may be wrong. If you want to use NMS definitely recommend --remapped flag

young knoll
#

api is not from buildtools

fair sand
young knoll
#

It's online

wicked lake
wicked lake
#

Had the same issue yesterday but proper config is the fix

fair sand
#

Ok thx i will check...

#

Ok ^^ ty

young knoll
#

Heh?

fair sand
#

i download intellij today so i'm not good at it for now

wicked lake
#

Rename the 1.18 references to 1.18.1 and run buildtools with the --remapped flag, and --rev 1.18.1 as well :)

fair sand
#

i need to take the lastest version ?

wicked lake
#

It's recommended because of the log4j patch coming in with 1.18.1

fair sand
#

ok ^^

hexed hatch
#

Anyone know a good way to get the item entities a player drops on death?

#

I see the PlayerDeathEvent has a method for accessing the ItemStack, but not the Item entities

wicked lake
#

The event is triggered upon the death but before dropping the items, there would not be any item entities at this time

hexed hatch
#

That would make sense. I tested PlayerDropItemEvent, it does not trigger for items dropped on death either

#

Is there no clean way to access the dropped entities?

noble spire
young knoll
#

Interact event I guess

wicked lake
noble spire
#

Oh well I guess you can cancel the interact event never mind

hexed hatch
#

Seems too janky. My end goal here is to make any item with an enchantment take much longer to despawn by just changing the age of the item to a negative value, but now I realize that I might be able to listen to an entity spawn event and listen for items spawning

wicked lake
#

That might work as well :)

young knoll
#

Yeah if that is the goal that should work

wicked lake
#

Even better

smoky oak
#

the chunk data sent to the player is taken after the chunk has ran through generation and onChunkLoad, right?

fair sand
smoky oak
#

it is already out

paper viper
#

^

wicked lake
#

:)

fair sand
#

i mean spigot

smoky oak
#

restart game and launcher, rerun build tools

#

thats it

young knoll
wicked lake
#

java -jar BuildTools.jar --rev 1.18.1 --remapped here's my buildtools command

smoky oak
#

wait what does --remapped do

wicked lake
#

Remaps NMS so it's actually usable

smoky oak
#

do you mean simpler to use or same to use over different versions?

young knoll
#

Somewhat both

wicked lake
#

I mean instead of a() it's registerGoals()

young knoll
#

Mojmap is fairly consistent

#

And much more readable than a

wicked lake
#

Deobfuscating

smoky oak
#

ah not much use for me then... i need consistency not readability

#

the only reason i found to use nms is the abysmally slow setBlock bukkit function

young knoll
#

I mean it should be more consistent

#

Anything is better than obf for consistency

smoky oak
#

I'll take a look at it later thanks

young shell
#
bukkit-1.13.1-R0.1-SNAPSHOT.jar, spigot-1.8.8-R0.1-SNAPSHOT.jar define 679 overlapping classes: 
[WARNING]   - org.bukkit.Achievement
[WARNING]   - org.bukkit.Art
[WARNING]   - org.bukkit.BanEntry
[WARNING]   - org.bukkit.BanList
[WARNING]   - org.bukkit.BanList$Type
[WARNING]   - org.bukkit.BlockChangeDelegate
[WARNING]   - org.bukkit.Bukkit
[WARNING]   - org.bukkit.ChatColor
[WARNING]   - org.bukkit.Chunk
[WARNING]   - org.bukkit.ChunkSnapshot
[WARNING]   - 669 more...
``` How can I fix something like that
exotic echo
#

Hey ! Do you guys know of there is some kind of database that would allow direct communication from one server to another (redis allows you to create a channel but I'm looking to be able to chose which server I send info to)

young shell
#

I think thats what your looking for

#

Some kind of Messaging Queue

smoky oak
#

cant u just use normal sockets?

ivory sleet
#

well redis got a more vulgar mq tho it works still

young shell
ivory sleet
#

normal sockets is basically just creating your own ducttaped mq

sullen marlin
smoky oak
#
<dependency>
  <artifactID>Spitog-api</artifactID>
  <scope>Provided</scope>
  ...
```like that
ivory sleet
young knoll
#

You can also elect to not update physics with spigot

ivory sleet
#

^

exotic echo
# young shell Take a look at RabbitMQ

Can I chose specific servers to send a message to ?
The annoying thing about pub/sub is that you create topics and the info gets sent to every server that follows that topic.
I want to be able to send stuff to specific servers

smoky oak
#

considering im making one cube of netherrack i dont really need that

sullen marlin
#

lower case p

paper viper
#

moterius, why didn't you just use workers

smoky oak
#

less work this way

paper viper
#

arent you the same guy that asked about updating a ton of blocks at once

sullen marlin
ivory sleet
#

SolverSelf

young shell
ivory sleet
#

you can just use different channels? ^

sullen marlin
#

the bukkit method, especially in World literally just calls nms

smoky oak
#

world edit was just as slow

#

its the updates thats a problem but as i said before

paper viper
#

Theres literally no other way...

sullen marlin
#

physics=false then

paper viper
#

its settled here

young knoll
#

setType(type, false)

young shell
# sullen marlin Mark the depends as scope provided

What about dependencies I don't have access too that are in multiple Libs I use tho```[WARNING] hamcrest-core-1.1.jar, junit-4.10.jar define 22 overlapping class and resource:
[WARNING] - LICENSE.txt
[WARNING] - org.hamcrest.BaseDescription
[WARNING] - org.hamcrest.BaseMatcher
[WARNING] - org.hamcrest.CoreMatchers
[WARNING] - org.hamcrest.Description
[WARNING] - org.hamcrest.Factory
[WARNING] - org.hamcrest.Matcher
[WARNING] - org.hamcrest.SelfDescribing
[WARNING] - org.hamcrest.StringDescription
[WARNING] - org.hamcrest.core.AllOf
[WARNING] - 12 more...

exotic echo
sullen marlin
ivory sleet
sullen marlin
#

and also its lowercase P, the example someone gave above was wrong

ivory sleet
#

but that's not an issue solverself?

young shell
sullen marlin
#

yes, mark the epends the correct scope

#

you have the wrong scope

exotic echo
ivory sleet
#

well what would be a more clean solution to you then? out of curiosity derp

young shell
sullen marlin
#

is the library the correct scope

#

share your pom

young shell
sullen marlin
#

if it is, then its the library that's broken. You can work around it with an <exclude> but you need to be sure that the library doesnt actually need those for whatever reason

#

also what is this on line 132' <!-- <dependency>

#

how is that not blowing things up

exotic echo
ivory sleet
#

hmm yeah

young shell
ivory sleet
#

have you peeked at LuckPerms (altho they use jedis which is a bit meh)

sullen marlin
#

but the comment is never closed?

young shell
#

It is

#

end of line 157

sullen marlin
#

oh

jagged bobcat
#

Oo md_5

sullen marlin
#

syntax highlighter was weird

exotic echo
#

I'll take a look, though I would have imagined that all servers would sub to the same channel but could be wrong

sullen marlin
#

but anyway you need to find what dependency is incorrectly including junit/hamcrest and exclude it

#

assuming the dependency doesnt actually need them

ivory sleet
#

Yeah Idk if you use jedis but personally I use redisson which is on a whole-nother level

#

so might wanna look at that also 😛

ivory sleet
#

🙏

young shell
sullen marlin
#

good thing json-simple was removed from the API in later versions 😉

#

but it isnt the API

#

because <scope>provided would fix that

#

so it must be pulled in from a different depend that you havent set to scope provided

#

JScoreboards, TitleAPI, Mysql, or RabbitMQ

young shell
#

Okay

#

Thanks for the help tho

sullen marlin
#

mvn org.apache.maven.plugins:maven-dependency-plugin:3.2.0:tree

#

or I'm sure your IDE has something

#

maven graph plugin is also fun

#

mvn org.fusesource.mvnplugins:maven-graph-plugin:RELEASE:project

#

I love it

young shell
#

Yeah just used the IntelliJ tree tool, sadly I can't set those Dependencies to provided since they won't be in the classpath otherwise

young knoll
#

You have an interesting definition of fun

sullen marlin
#

one of the 4 above I mentioned

young shell
#

What is the syntax for those excludes

#

Saw them online but never could get them working

young shell
#

thx

young shell
olive lance
#

there should be a channel that relays irc messages to discord and back

ivory sleet
#

yeah that'd be nice

olive lance
#

not sure why i put that in this channel whoops

peak granite
#
            public void onPacketReceiving(PacketEvent event) {
                if (event.getPacketType() == PacketType.Play.Client.TAB_COMPLETE && (!event.getPlayer().hasPermission("nucleus.*") && event.getPacket().getStrings().read(0).startsWith("/") && (event.getPacket().getStrings().read(0).split(" ")).length == 1) && blockedCommands.contains(event.getPacket().getStrings().read(0).toLowerCase().substring(1))) {
                    event.setCancelled(true);
                }
            }
        });```
#

doesn't work

#

trying to block tab complete

#

for /about

sullen marlin
#

WHY

#

Just take away the permission

#

Jeez

paper viper
#

lol

peak granite
#

why?

paper viper
#

event.getPacketType() == PacketType.Play.Client.TAB_COMPLETE && (!event.getPlayer().hasPermission("nucleus.*") && event.getPacket().getStrings().read(0).startsWith("/") && (event.getPacket().getStrings().read(0).split(" ")).length == 1) && blockedCommands.contains(event.getPacket().getStrings().read(0).toLowerCase().substring(1))

#

wtf lol

sullen marlin
#

-bukkit.command.version

#

done

peak granite
#

what

sullen marlin
#

just set the permission to false....

#

you dont need packets to stop /about

#

jeez

peak granite
jagged bobcat
#

Why stop /about let people have info 🙄

young shell
#

can relocating the classes in a dependency fix the overlapping classes thing

ivory sleet
#

Yes

sullen marlin
#

ye but your issue is just dodgy dependency

ivory sleet
#

That’s actually one of the motives for avoiding LinkageErrors

sullen marlin
#

so exclusion is the way to go

#

I highly doubt your dependency needs junit at runtime

ivory sleet
#

Yeah

paper viper
#

junit is for testing really

fathom cobalt
#

junit is a unit testing library, if your plugin needs that at runtime, you're doing something wrong

young knoll
#

You just don't understand the higher level of programming my plugin is on

sullen marlin
#

not their plugin, one of the depends

young shell
#

I know that Junit is for testing

ivory sleet
#

It’s even weird one of their depends has it as a transitive dependency for the non test classpath

young shell
#

Yeah it's json-simple which has it defined as a transitive dependency and it's used by spigot in that ancient version that is 1.8. I'll have to work with excludes

sullen marlin
#

yes but that spigot is not being included by spigot