#help-development

1 messages · Page 68 of 1

echo basalt
#

honestly I might not even need screens

#

it's cool for management but I can write my own system for logging

eternal night
#

spin up vms

echo basalt
#

what about cloudnet hmm

eternal night
#

firecracker style

echo basalt
#

would cloudnet be a viable solution

#

docker yucky

#

might go with it honestly

#

either that or I charge 1k$ and make my own

#

might charge 200$ to set it up tho

tender shard
#

just hire someone to spin up those servers for you

#

just get a butler

echo basalt
#

lmao yeah but

#

no

novel ocean
#

does anyone know how to repair an item bc something has changed and you can no longer cast an ItemStack to a Damageable
and casting ItemMeta to Damageable also doesn't work

tender shard
#

you imported the wrong Damageable

opal juniper
novel ocean
#

nope

tender shard
#

there is one for itemmeta and one for entities

#

and you can definitely cast it if it's the correct one

novel ocean
#

im using one for itemmeta

tender shard
#

what error do you get?

novel ocean
#

i dont get any errors it just doesnt work

tender shard
novel ocean
#
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.Damageable;
import org.bukkit.inventory.meta.ItemMeta;

public class RepairUtils {

    public static void repairall(Player p) {
        for (ItemStack items : p.getInventory().getContents()) {
            if (items != null) {
                ItemMeta itemsMeta = items.getItemMeta();
                Damageable item = (Damageable) itemsMeta;
                item.setDamage(0);
            }
        }
        for (ItemStack items : p.getInventory().getArmorContents()) {
            if (items != null) {
                ItemMeta itemsMeta = items.getItemMeta();
                Damageable armor = (Damageable) itemsMeta;
                armor.setDamage(0);
            }
        }
    }
    public static void repairHand(Player p) {
        ItemMeta itemMeta = p.getInventory().getItemInMainHand().getItemMeta();
        Damageable handItem = (Damageable) itemMeta;
        handItem.setDamage(0);
    }
}```
tender shard
opal juniper
#

^

novel ocean
#

omg true

opal juniper
#

yeah i really hate the whole item meta API

#

the whole item api honestly

#
  • material
novel ocean
#

its ass

opal juniper
#

god i wish i could re-write bukkit

#

wish i was about 10 years older

tender shard
#

i also dont like it but meh, it works fine

opal juniper
#

could have been there at the inception

tender shard
eternal night
#

I mean, item meta kind of stuff is okay in terms of API itself

#

what it does below the hood is trash

opal juniper
#

the backing is bad

#

yeah

eternal night
#

Well, its def somewhere on the paper goal thingy

#

there is always the decision on what is better as well, ye you could keep it all as a plain wrapper around a CompoundTag

#

but if you use a single item a LOT parsing its contents first might be nicer

quiet ice
#

If I had been there when it started I would def. have questioned the enchantment naming scheme severely

opal juniper
#

oh yes

#

like i understand the want to not tie things to vanilla naming, but errrr

#

DIG_SPEED my ass

eternal night
#

👀

quiet ice
#

The same goes for the material API

opal juniper
#

the material enum has just gotten too big, there should have been an attempt to split it out sooner than for it to get to here where accidently opening the source might crash your IDE

eternal night
#

that PR has been around for a while xD

#

maybe 1.20

#

🙏

quiet ice
#

Having it as an enum was an okay descision at the time (do note that back then mods were almost unheard of) but at least there should been enum entries for everything, including the things with the "magic" data values

opal juniper
#

i think it was implied in the last couple of updates to not use EnumSets anymore

tender shard
#

no idea why spigot decided to mix both

#

and imho they should also remove all those LEGACY materials

#

fuck old versions

eternal night
#

breaking backwards compat 🙀

#

you cannot

opal juniper
#

i think that 1.20 should be the fuck it version

#

like just break all compat

tender shard
#

I wish md5 would just say "fuck everything prior to 1.16"

opal juniper
#

with a big commumity re-write

vocal cloud
#

Then I can add my @since :D

eternal night
buoyant viper
#

fuck it we ball

tender shard
buoyant viper
opal juniper
#

what is 1.20? i forget

buoyant viper
#

we finally get copper golem and the yellow cow

vocal cloud
#

I still have to ping md_5 about it but I'm on vacay till tomorrow

quiet ice
eternal night
#

1.20, mojang adds a bunch of packets servers can use to make cool stuff

buoyant viper
#

1.20 mojang deletes the game

opal juniper
tender shard
#

1.20, people still use 1.8

#

smh

opal juniper
#

put kennytv at gunpoint to drop 1.8 for all the via* plugins

buoyant viper
#

i mean 1.8 > 1.2

paper bone
#

Minecraft 2.0 when

buoyant viper
tender shard
buoyant viper
#

what

paper bone
#

I think they are talking about server transfer packets

buoyant viper
#

plugin message packet there we go

#

thats what i meant to say

eternal night
#

I mean

paper bone
#

I wanna see via version hack their way through that

eternal night
#

gimme a proper interaction packet

#

give me change server packet

buoyant viper
paper bone
#

Bedrock already has server change packets

eternal night
#

shitty ones

#

but yea

paper bone
#

Then bungee won't cut it

buoyant viper
#

what can i say

paper bone
#

You need multiple bungee cords

buoyant viper
#

death to aussie pings

paper bone
#

And do DNS shenanigans

#

You can setup multiple bungee cords

#

And vaguely target players in the same region to nearby subpools

#

But that's overkill

#

It would allow for good ping though

#

Without server transfer packets

tender shard
#

funny name

paper bone
tender shard
#

what else did you mean then?

paper bone
#

Redirecting people to closest bungee cord

tender shard
#

oh that's what you meant

paper bone
#

Having multiple bungee cords all access the same pool of spigot servers

tender shard
#

I didnt read the prior chat

paper bone
#

And for the bungee to always prioritize servers closest to itself

tender shard
#

im watching "who wants to be a millionaire" and only spam my weird messages here inbetween from time to time

paper bone
#

But we're talking a 20+ dedicated machine setup for good world wide coverage

#

And there are no public solutions afaik

#

But some ANYCAST shenanigans might work

#

That or regional DNS

#

But that's beyond me atm

tender shard
#

K

river oracle
#

I'm starting to think he doesn't care he just keeps talking

tender shard
#

who?

river oracle
#

your mum

tender shard
#

no yours

river oracle
#

no yours

warm galleon
#

which of the explosion types is 6 blocks in radius? explosion, explosion huge, or explosion large?

glass mauve
tender shard
dry forum
#

how can i create a fallingblock using nms? using new FallingBlock it asks for a properties object, what is that and how do i make it

hasty prawn
#

Why would you want to make it using NMS?

dry forum
#

so only 1 person sees it

#

what api

tender shard
#

Bukkit

dry forum
tender shard
#

ooh ok

#

you can still do that

hasty prawn
#

Yeah but you don't have to make an NMS entity for that do you

#

Just send the packet to that single person

tender shard
#

use World#spawnFallingBlock and then do Player#hideEntity for all others

hasty prawn
#

or that

dry forum
#

uhhh

#

id rather use nms though since im already using nms armorstands also its less laggy

#

id be using quite a lot of fallingnlock

ancient plank
#

Kappa

hasty prawn
#

How is it less laggy

dry forum
#

idk it just is

ancient plank
#

API isnt any slower than nms

dry forum
#

oh?

hasty prawn
#

Even if it was it would be negligible

ancient plank
#

The API is legit just some code over the top of nms to make it easier to use

visual tide
#

unless youre dealing with setting millions of blocks the difference is negligible

ancient plank
#

?jd-s

undone axleBOT
dry forum
#

id be spawning like 100-200

ancient plank
#

Though #hideEntity() is still draft API so

hasty prawn
quaint mantle
#

Helo, I am making a signature plugin; Players can use a command so sign an item.
It adds a lore line to the item, and sets a value in the persistentState.
Now, when a player wants to remove that signature, cool, I can get rid of the entry in the persistentState, but, I cannot remove the line added to the lore, because I don't know which item in the lore list it is... ( also this can change in between )

#

This issue is for more stuff to do with custom items.

#

You don't have access to the individual ItemStacks, meaning everything has to be done from the outside.

jade roost
#

any recommendations for sites to learn java

ancient plank
#

?learnjava

undone axleBOT
jade roost
#

whats the best

#

in ur opinion

topaz cape
#

yk in new versions you can put water in the middle of some blocks which is annoying af for me because i now can't set the waterblock to air or it will remove the whole thing

is there any workaround to remove only the water?

young knoll
#

Yes

ancient plank
#

waterlogged

young knoll
#

BlockData -> waterloggable

#

(Waterlogged?)

#

One of those

ancient plank
topaz cape
#

can i just setWaterlogged false to when the block has only water?

#

🤨

young knoll
#

What

ancient plank
#

use your head

#

is water waterloggable

young knoll
#

Wouldn’t the question technically be is air waterloggable

topaz cape
#

yes

#

it's simply that

ancient plank
topaz cape
#

and i don't know if it's in Minecraft because dear god i can tell it's possible

ancient plank
topaz cape
#

ugh smh

ancient plank
#

2$ water & air isn't waterloggable

topaz cape
#

I'll just check if blocktype is air or water

#

and will set it to air

brave goblet
#

what is nms again?-

ancient plank
#

net minecraft server

#

the minecraft server source code

brave goblet
#

ah ok

brave goblet
ancient plank
#

there are some things which don't have an api in spigot but you should always use the api over nms

brave goblet
#

thanks makes sense

#

ty

ancient plank
#

since nms is per-version, it makes it harder to maintain your plugin across versions etc

feral sand
#

Hello. I'm trying to generate a block outline, however, right now, we are using an invisible shulker to get the outline. this works for most blocks, but for blocks like redstone, sugarcane, you see the shulker head. Is there another approach to get a block outline?

ancient plank
#

and nms isn't any faster than the api

sturdy frigate
#

What is the max inv GUI size?

agile anvil
#

I guess 6 lines

young knoll
#

54

wary harness
agile anvil
#

No

young knoll
#

Maybe

wary harness
#

because exception for size is in bukkit

#

part

#

before 1.13

young knoll
#

But they are visually a mess anyway

wary harness
#

I think it was worjubg

agile anvil
#

Well if you succeed ping me please

wary harness
#

well if is possible

#

you can use custom

#

texture

young knoll
#

It overlaps the inventory iirc

wary harness
#

thru RP

jade roost
#

link

sturdy frigate
#

I need an 8x8 inventory size

wary harness
#

time to do push up ladies

agile anvil
#

or try creating a slider

sturdy frigate
agile anvil
#

Well you'll need to do some code behind it to make it able to store things

agile anvil
sturdy frigate
#

What do I have to audit/change? Could you perhaps give me a rough guideline?

wary harness
agile anvil
#

My best advice is to create a scroll inv

#

or make multiple pages

#

And then just listen to inventories events to do so

sturdy frigate
agile anvil
#

well the easiest way is to create a paged gui
Create an inventory, put an item somewhere to change the page.
Listen to that item with InventoryClickEvent and whenever the player clicks, change the page.

For each page save the items as you wish, like a list or a map. And each time inventory is closed, save it

sturdy frigate
#

Ah I see, so it'll be like going through pages, thanks

agile anvil
#

right

#

good luck

sturdy frigate
#

my bad lol, i tried to react it

tender shard
#

GUIs are such a pain lol

tender shard
agile anvil
crimson scarab
#

how can i check how close to the players center of screen a given entity is

tender shard
agile anvil
daring lark
#

guys, how could i set max durability of an item?

crimson scarab
tender shard
#

do you still have your math book from school? lol

noble forge
#

this is exactly how rendering works

noble forge
#

transforming a 3d point to 2d space

tender shard
#

it definitely is faster

#

the question is "how much faster" it is, and whether it's worth it to worry about it

#

e.g. setting blocks can be done waaaaay faster using NMS

buoyant viper
humble heath
#

weard error any idea

buoyant viper
#

recursion issue

floral drum
#

uwu

tender shard
crimson scarab
#

wrong reply

#

mb

tender shard
#

what's line 206?

humble heath
floral drum
#

hi alex ❤️ ily

tender shard
#

I always reply to the wrong msg

tender shard
humble heath
#

how do i fix

crimson scarab
#

anywayi doubt i will be able to do the maths

buoyant viper
#

why do u keep calling getPlayer().getPlayer()

noble forge
#

this is a step by step guide

#

its for rendering but the math is the same

humble heath
#

that is how jobs do it

noble forge
#

treat the centre of your entity as 1 vertex

noble forge
humble heath
tender shard
buoyant viper
#

damn

floral drum
#

oh my-

buoyant viper
#

also what is the code for EnderliteMasyer.luck()

tender shard
floral drum
#

LOL

crimson scarab
#

so i treat the player as a vertex

#

step 1

humble heath
#

any idea i am trying to get when you join a job it puts them in the rank of luckerms that maches the job

floral drum
#

weird thing to say - but I think I just cracked my hip and it felt so FUCKING weird 👀 wtf monkaW

buoyant viper
#

and whats the code for EnderliteMaster.luck() method

humble heath
#

all in the picture i sent

tender shard
#

lemme send a video

floral drum
#

BET

buoyant viper
quaint mantle
buoyant viper
#

also u dont have the actual line numbers shown

noble forge
tender shard
humble heath
buoyant viper
#

theres ur issue

humble heath
#

what the issue

agile anvil
# crimson scarab so i treat the player as a vertex

Create a Vector between player and entity, create a vector in player direction, then find the vector to create an orthogonal triangle (pi/2 rad between the the one you create and the player-entity vector)

buoyant viper
#

ur calling luck inside luck

floral drum
floral drum
#

never seen anyone do that before

humble heath
#

it works in other classes

tender shard
#

lol

floral drum
agile anvil
tender shard
humble heath
#

it douse

tender shard
#

no

buoyant viper
#

not possible

agile anvil
#

Get the norm of the Vector, and compute the distance with the entity to find the length on screen

tender shard
#

public void luck() { luck(); }
this will ALWAYS cause a stackoverflow, I mean just look at it

quaint mantle
#

because line numbers can change

#

if you insert

crimson scarab
#

that seems so much lol i thought the api would have something

i just want to target entites that are closer to the crosshair

#

well i should learn some maths

floral drum
#

wrong ping

agile anvil
floral drum
tender shard
buoyant viper
#

isnt there a method for that

tender shard
#

no

noble forge
agile anvil
tender shard
#

yeah ubt that's kinda what they need

crimson scarab
#

lemme draw diagram

humble heath
#

how do i fix then

tender shard
agile anvil
noble forge
#

get vector between entity and player, use distance formula between line an point (look it up) ez pz

noble forge
#

guess we both misunderstood

tender shard
crimson scarab
#

i have a homing weapon

noble forge
#

u want the closest entity to the crosshair right?

proven falcon
#

do you know how i can create a building who can produce like a barrel of the plugin brewelry but changin bloks or givin the item in the owen or in a chest
im on the voice chanel

crimson scarab
#

i want to target the creeper in the middle rather than the skeleton on the right

noble forge
crimson scarab
#

programatically

tender shard
#

they want to get the entity the player is "trying to look at" even if they dont exactly look at it

floral drum
crimson scarab
#

THANKS

floral drum
#

❤️ ❤️

#

LMAO

noble forge
#

get distance and sort to the nearest entity…

humble heath
#

when i remove return luck it gives red line

tender shard
noble forge
#

distance to what target location?

agile anvil
#

Distance between a point and a Vector means nothing

floral drum
noble forge
#

why wouldnt it

humble heath
#

how

crimson scarab
glossy scroll
#

otherwise use world.rayTraceEntities in the direction of the player, and expand the entity hitbox by like 2 or so

agile anvil
#

@crimson scarab Do we agree on that statement: you want to get the entity the player is looking at, even if he's looking not directly at it ?

floral drum
glossy scroll
floral drum
#

just the closest one?

glossy scroll
#

and use that entity

glossy scroll
agile anvil
noble forge
#

compose a line coming out of the crosshair, basically a vector. For every entity get the closest distance to that line. Sort to the nearest and voila

#

dude

#

the distance between a line and a point is defined as the closest distance

#

its basic high school maths

#

Let me find a link for it

agile anvil
#

Then we're talking, be precise, we're in a tuff world 🙂

tender shard
#

Imagine both the jägermeister and my phones (the white box) are entities. In this case im trying to point at the phones. If you just go by distance, it would return the jägermeister which is the wrong entity

agile anvil
noble forge
# agile anvil Then we're talking, be precise, we're in a tuff world 🙂

In Euclidean geometry, the distance from a point to a line is the shortest distance from a given point to any point on an infinite straight line. It is the perpendicular distance of the point to the line, the length of the line segment which joins the point to nearest point on the line. The formula for calculating it can be derived and expressed...

crimson scarab
#

but not raytrace as i want to sort all the nearby entites

tender shard
crimson scarab
#

by how centered they are in the players vision

tender shard
noble forge
floral drum
#

beautiful toes

glossy scroll
#

i have an idea

humble heath
#

how will i do that because anything i put in there dont work

quaint mantle
#

Basically, we want distance in 2d space so time to math

glossy scroll
#

take the displacement vector of the entity to the player

agile anvil
glossy scroll
#

(entityLoc - playerLoc)

#

and then use the player's looking direction

#

and find the angle

#

smaller the angle, closer the entity to the crosshair

noble forge
#

to make it more performant just check for dot product

agile anvil
crimson scarab
#

so entity.getlocation - player.getlocation

#

what is the equation for angle

floral drum
#

fucking nerd

crimson scarab
#

im not a math guy

glossy scroll
#

Vector.angle()

#

ive taken 4 years of calculus so im a bit familiar lol

opal sluice
#

Hi, can someone help me understand hows that even possible?

Error: https://pastebin.com/fXe31NZ2
Code: https://pastebin.com/vfHCh9dY

How it can make an access violation when I encapsulate all :/

floral drum
#

ah fair enough mart ❤️

crimson scarab
#

that is some commitment

quaint mantle
glossy scroll
#

lol

#

ty

floral drum
#

martoph? more like marry me

noble forge
# glossy scroll Vector.angle()

actually checking the dot product between the player look at and the vector between entity and player could be better for performance, since no trig. The dot product closest to 0 is the entity you want

#

just make sure both vectors are normalized

#

like rolyn mentioned earlier

#

I think

glossy scroll
#

You’re absolutely right

#

Well

agile anvil
glossy scroll
#

Normalization is also pretty intensive

noble forge
#

fair enough

glossy scroll
#

sqrt

noble forge
#

its a cos vs sqrt

floral drum
#

just figure out a way to do it asynchronously!

#

LMFAO

noble forge
#

from my own testing a sqrt usually is less cycles than a cos

crimson scarab
#

"my own testing"

tender shard
#

sqrt is nothing to worry about unless you do it 10000 times per tick

noble forge
#

but who cares

#

this is minecraft

agile anvil
#

Complexity speaking it's slower x)

noble forge
#

its nothing high performance

agile anvil
#

Minecraft doesn't need to care about that kind of performance

daring lark
#
        setType(Material.IRON_SWORD);
        setAmount(1);
        ItemMeta meta = getItemMeta();
        meta.setDisplayName(ChatColor.WHITE + "Miecz z Wytrzymałej kości");
        meta.setCustomModelData(1000000000);
        AttributeModifier modifier = new AttributeModifier(UUID.randomUUID(), "generic.durability", 0.101, AttributeModifier.Operation.ADD_NUMBER);
        meta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, modifier);
        meta.getItemFlags().add(ItemFlag.HIDE_ATTRIBUTES);
        setItemMeta(meta);
    }``` why is this code not hiding attributes?
noble forge
#

just use whatever is easiest honestly

glossy scroll
#

Dot is tricky cuz itta hard to visualize what it means

noble forge
#

the dot product tells you how similar two vectors are

glossy scroll
noble forge
glossy scroll
#

Wait

#

I think to use angle

noble forge
humble heath
#

can any one plz help me

glossy scroll
#

You also need to normalize anyways… it takes the magnitude of the two vectors

noble forge
#

no you dont

#

lookat is already normalized

glossy scroll
#

Well i mean

noble forge
#

and converting vector to angle doesnt require normalization

agile anvil
#

In all case angles and dot are linked

glossy scroll
#

The angle function

#

Honestly just use dot

#

Im almost certain its “faster”

agile anvil
#

In term of simplicity use dot

noble forge
#

at this point were nitpicking lol

#

weve handed them 2 different ways of solving it

#

they can decide what to use as either of them have pros and cons

agile anvil
#

Hope we haven't got him lost

noble forge
#

a little high school vector math doesnt hurt

glossy scroll
#

if theyre still paying attention that is lol

#

angle is definitely more intuitive

noble forge
#

i agree

crimson scarab
#

entity.getLocation().subtract(player.getLocation()).toVector().angle(player.getLocation().getDirection())
does this look ok mathmatically wise

weary cobalt
#

What would the prepared statement be for creating, and adding to an array in SQL? I've found ARRAY_APPEND, but not sure how to use it in this context.

Example of how I'm setting integers: setInt(String uuid, String category)

PreparedStatement ps = connection.prepareStatement("UPDATE " + table + " SET " + category.toUpperCase() + "=? WHERE UUID=?");
ps.setInt(1, value);
ps.setString(2, uuid.toString());
ps.executeUpdate();

Any sort of help would be appreciated

agile anvil
#

Depends on the level, 3D angles need to introduce a plan so can be harder sometimes for some...

glossy scroll
dense geyser
#

I'm using a DAT file to save data, how can I clear the data in the file to save it again without erasing the file? Or is there a way of editing lines of those files with data already in it without just making more lines?

glossy scroll
#

DAT... as in nbt?

crimson scarab
glossy scroll
#

i mean

#

you could expand it

#
o -> {
    return true;
}```
#

or make it a function

buoyant viper
#

not scientifically posible

glossy scroll
#
private boolean myPredicate(ObjectInPredicate) {
    return true;
}```
#

and then this::myPredicate

crimson scarab
#

is it possible to use multiple min statements in an optional

agile anvil
#

Show your code

river oracle
#

just use null checks the only reason you should ever really deal with them is in java streams

agile anvil
river oracle
crimson scarab
#
Optional<Entity> optionalEntity = nearbyEntities.stream()
                .filter(entity -> entity instanceof LivingEntity && ((Projectile) arrow).getShooter() != entity)
                .filter(entity -> ((LivingEntity) entity).hasLineOfSight(arrow))
                .min(Comparator.comparing(entity -> entity.getLocation().distanceSquared(arrow.getLocation()) * entity.getLocation().subtract(player.getLocation()).toVector().angle(player.getLocation().getDirection())));
#

graphs

river oracle
#

holy my eyes

#

?paste

undone axleBOT
river oracle
#

discord formatting really fuckeed that

agile anvil
river oracle
#

so all your doing is creating another object to do the null check for you

agile anvil
#

Yeah I understand, more memory, more time to allocate memory, and (little) time to do checks

river oracle
#

if you use Optional's all the time its going to be creating lots of Optional objects for every var to manage nulls that stacks up

candid shoal
#

How to I delay a function in ticks

river oracle
candid shoal
crimson scarab
#
Bukkit.getScheduler.runTaskLater(plugin, task -> {
     do stuff
}, 20L, 1L);

Thats how its done i think

river oracle
#

Bukkit.getScheduler().runTaskLater(Plugin, task)

crimson scarab
#

sorry for spoonfeed but i found scheduling difficult when i started it out

#

it just takes time to understand i think

candid shoal
#

Thanks

crimson scarab
#

private Location playerLocation;
is this bad naming

agile anvil
#

No

#

Why would it be ?

crimson scarab
#

i assume i am wrong

#

most of the time

#

personal opinion:
should targeting for homing projectiles be:
100% closeness to crosshair
100% distance to potential target
50% distance 50% crosshair
other ->

humble heath
#

how do i uncapitalise messages

eternal oxide
#

.toLowercase()

crimson scarab
#

learn java message incoming

crimson scarab
#

so i have a homing weapon how should the automatic targeting for entites be based off

#

like should the closest enemy be targeted

#

or should the enemy most visible by the player be targeted

agile anvil
#

I'd say the player should select the entity at launch, and then it will keep the same entity

vocal cloud
#

Well, if you want frustrating make it closest. If you want a more enjoyable mechanic it should be targeted

agile anvil
#

I imagine a kind of cool glow effect to select the entity to reach

crimson scarab
#

thats a really good idea actually

agile anvil
#

Free ideas tonight

crisp forum
#

Can I make a unenchantable item enchantable on enchanting table

rough drift
vast raven
#

How to add a default configuration section?

rough drift
#

so not likely to be targeted in red

#

basically the target in 0xff0000

#

using colored glow

#

anyways gtg

crimson scarab
#

cya

agile anvil
vast raven
#

Really funny

agile anvil
#

I love this website

vocal cloud
#

If you've searched it how did you not find it

vast raven
vast raven
#

A sec

#

None of these answers can help me, except the last one, that suggested instead to create the section if it doesn't exist.

agile anvil
#

So now, step 2 if you didn't find your answer, explicit it more clearly, more precisely

vast raven
#

You should skip on 3rd step since I've already done that, but I'll do it again so: "How do I create a default section in a config?".

agile anvil
#

That's exactly the search you've done, so you're still on step 1

#

Open your mind, try to think more deeply

eternal oxide
#

What do you mean by "default section"? Do you mean set default values? or simply create a section via code?

vast raven
agile anvil
vast raven
torn shuttle
#

how else would the waves travel?

agile anvil
torn shuttle
#

thanks rolyn

eternal oxide
sturdy frigate
#

how do i rename item stacks?

onyx fjord
torn shuttle
#

this is fantastic, we really managed to empty our minds thanks to Rolyn

vast raven
eternal oxide
#

yes

torn shuttle
#

next I think everyone should move their projects to Kotlin

vast raven
#

So it's not what I've asked for..

agile anvil
vast raven
#

So it's the same thing on that page, but I think there is a way of doing it without checking the existence of the section.

#

Like using one of this method.

torn shuttle
#

oh yeah has anyone played around with setComments already? I noticed that was added semi-recently

onyx fjord
#

yesterday i made so complex if statement that my muscles legit started to hurt

torn shuttle
eternal oxide
#

No, that will still overwrite an existing section

young knoll
#

The defaults system for configs is weird

vast raven
young knoll
#

I’ve never actually used it

torn shuttle
# onyx fjord No.

then you'll have to suffer me flexing on you for the rest of your life. I'm doing it right now, I just came home from the gym

onyx fjord
#

real men use boostedyaml

torn shuttle
#

no one used setComments?

onyx fjord
#

too big? just use plugin.yml libraries

torn shuttle
#

guess I'll try it out myself

vast raven
young knoll
#

Yes

eternal oxide
vast raven
#

Thanks, that helped, it did the opposite someone else. (coff coff)

eternal oxide
#

ie, you can define a whole yml as the Default and its values will be returned unless you set your own

crisp forum
#

Should I open a thread about my question?

eternal oxide
#

I didn;t see any question, sorry

agile anvil
eternal oxide
#

an example item?

#

as you can apply any enchantment to any ItemStack

quiet ice
eternal oxide
#

you can addUnsafeEnchantment

crisp forum
#

I don't want to enchant it, I want players to be able to enchant it on enchanting table

#

Like a steak that is enchanted by a player will give more saturation

young knoll
#

Yes

#

PrepareItemEnchantEvent and manually create offers

crisp forum
#

Oh, I'll listen the event and change it's content?

bronze night
#

I have been playing with some code and wanted to use one entry from stringList #1 and add the entry from the stringList #2 to it and i used 2 for loops and got the output i wanted, but there's an issue that it pastes 4 messages instead of 2. Could someone give me a tip how can i fix it? (codes is below)

crisp forum
undone axleBOT
crisp forum
#

If I have lots of event & command handler classes I do the plugin static, it works Fine

grim ice
#

do u mean public static?

#

i didnt assk u

#

i asked him

#

lol

#

mb

#

but well

#

i asked him

#

and btw

#

di isnt better than that

#

theyre seriously the same. except that a singleton pattern is better in this case

coral oyster
#

Hi when I set a displayName for an itemStack, the intellij linter says method invocation for"setDisplayName" may produce "nullPointerException"
its not really affecting my plugin as it is working as it should, but out of curiostiy, what could this mean?

grim ice
#

since a plugin main class is a singleton in the first place

grim ice
#

itll return an error

#

e.g

#

ItemMeta meta = null;
meta.setDisplayName("hello");

#

this will throw an npe

coral oyster
#

ah ok, thanks!

buoyant viper
tame bay
#

Hey there.
Im trying to add a command that gets the displayname and lore of an item and saves it to a config

#

However since the displaynames are colored using & they get replaced in my yaml file.
In order to make yaml not replace those reserved symbols I would need to escape them using ' at the beginning and end of the string

#

How can I add those ' plugin sided?

#

I already tried adding "'" before and after it but that only resolved in this ''' in my yaml file

iron glade
#

Can I simplify this even more?

String singularPlural = newDelay == 1 ? newDelay + " second" : newDelay + " seconds";
String finalOutputMessage = newDelay == 0 ? "none" : singularPlural;```
grim ice
#

String outputMessage = newDelay == 0 ? "none" : (newDelay == 1 ? newDelay + " second" : newDelay + " seconds);

quiet ice
#

Pft, how inefficent

grim ice
#

just do

#

newDelay + "s"

#

tbh

iron glade
#

That would be an easy solution I guess, but I want "seconds" to be spelled out

grim ice
#

then do what i sent

#

thats the shortest way u can do it

iron glade
#

Yeah, looks a bit ugly but ur right, thanks!

tame bay
#

2Hex? Do you by any chance have a solution to my question aswell? 😄

grim ice
#

well

#

the string ur trying to save

#

has "&" in it, right?

tame bay
#

Yup

#

It grabs the displayname of the item. So it has &6Displayname in it

#

for example

iron glade
#

What's the problem with the config?

#

& symbols saving fine for me in yaml files

grim ice
#

same

#

is it that german SS symbol?

#

ß

#

this?

tame bay
#

no 😄

iron glade
#

§?

valid folio
tame bay
#

wait

#

let me check

grim ice
#

§

valid folio
grim ice
#

this?

#

or is it "\xa7"

eternal night
#

looks like you fucked with the jar while the server was running

iron glade
#

Use ChatColor#translateAlternateColorCodes in that case before saving to config I guess

grim ice
#

if its so then do replaceAll("§", "&"); to the string before saving

iron glade
#

ahw ait ur right

grim ice
#

u should do the opposite of that

#

ye

iron glade
#

yeah I confused them for a sec lel

grim ice
#

lol

desert frigate
#

How do I make two chests connect to a double chest?

#

Cause I tried and they don't connect

iron glade
#

Usually I just take them and place them next to each other funny

tame bay
#

yup

#

my bad

#

displayname returns with §

#

instead of &

#

thanks 😄

grim ice
#

did u do what i told u to

iron glade
grim ice
#

replaceAll("§", "&");

#

to the string

#

before saving

tame bay
#

thx for the hint ❤️

bronze night
#

anyone got a clue why the output is being doubled when i use for loop inside of a for loop?

grim ice
#

ok yall gn

bronze night
dense geyser
iron glade
#
displayName.length() == ChatColor.stripColor(displayName).length()```
Does this make sense to check if a string contains a chatcolor?
worldly ingot
#

It won't be equal

iron glade
#

Or is there some method I'm missing

worldly ingot
#

Oh you're checking if it has any colour

#

Yeah in theory that would work

young knoll
#

Can’t you just use .equals

worldly ingot
#

I'd personally opt for an equals() check too

iron glade
#

alright then I'll try that

desert frigate
desert frigate
rough blaze
#

how would I play a sound a player's location?

night torrent
#

does thread.sleep work as a timer

#

why

young knoll
#

And most of the server runs on that thread

night torrent
#

ohh

#

so i have the use schedules?

#

Im trying to make a slight delay between click and check

#

because when you equip the helmet in game its not registering

#

you have to click somewhere in your inv

#

alr, ill check it out!

crude charm
#

Why not just use #runTaskLater

#

...

night torrent
#

thats fine

#

thanks

#

is it possible to add items to the creative inventory?

young knoll
#

No

night torrent
#

ok

#

and could i get a little help intergrating runTaskLater into this code?

#

I want a delay before the check is done so it waits a little and then sees if he has a helmet

crude charm
#

Why so many plugins

halcyon pumice
#

got it thank you wasnt sure :D

night torrent
crude charm
#

It's not

night torrent
#

difference?

crude charm
#

In java you don't place the bracket on a new line

#

In c# you do

night torrent
#

so prefrence

crude charm
#

No

night torrent
#

???

crude charm
#

Practice

quaint mantle
#

it's all just personal preference

night torrent
crude charm
#

wait...

young knoll
#

As long as you keep it the same throughout the project

#

Then meh

desert frigate
#

how can i get the killer in PlayerDeathEvent

crude charm
#

Ah yes

night torrent
#

yeah i usually do capital method names i just didn't for that one

crude charm
night torrent
#

?

desert frigate
#

alrught

crude charm
#

Yup

young knoll
#

Java names are meant to be lowerCamelCase

night torrent
crude charm
#

and packages are all lowercase

#

classes are CamelCase

young knoll
#

Variables and method names

crude charm
#

^

young knoll
#

Except for static final variables

crude charm
#

yup

#

then it's STATIC

#

all capital

rough blaze
#

How would I play notes at a player?

crude charm
night torrent
crude charm
#

like a piece of music?

crude charm
night torrent
#

ok but runTaskLater isn't recognized

crude charm
#

what does it say

#

^ unless thats what you defined "scheduler" as

#

then it should work

#

as well

rough blaze
young knoll
#

Don’t sleep the main thread

crude charm
#

^

night torrent
#

        scheduler.runTaskLater(Main.getPlugin(), () -> {

        }, 20L, 20);```
#

this is the code you gave me

crude charm
night torrent
#

yeah, got that now

#

Thanks!

eternal oxide
#

runTaskTimer

crude charm
eternal oxide
#

I'm so tempted to write a plugin all uppercase just to be a prick

#

Then watch it get accepted into teh Github code vault 🙂

crude charm
#

PUBLIC VOID METHOD() {
IF (PLAYER.HASPERMISSION)
PLAYER.SENDMESSAGE
//WHY IS IT NOT WORKING?????
}

crude charm
#

I thought it was done and everything was stored

eternal oxide
#

No idea, they keep taking mine for some reason.

#

I keep getting these silly award badges for it

night torrent
#

how do i make it so commands can only be run by operators?

#

nvm

rough blaze
desert frigate
#

so im trying to make a death chest where when a player dies, their items get put in a chest but i get null from inventoryItems in onRightClick

crude charm
rough blaze
#

im getting this error

drowsy helm
#

what does it say when you hover over it

iron glade
#

Show some more of your pom

near night
#

can i have a pointer on how to make a rest api pls

#

that exposes placeholders

outer river
#

hello, i'm searching for a way to display all strings of an arraylist<String> in one and unique message, is that possible ?

#

like a list but in one message

flint coyote
#

You just wanna add all entries of a list to a string?

rough blaze
rough basin
#

?paste

undone axleBOT
near night
#

is player in PlayerQuitEvent a offline player?

boreal seal
#

FAlse

#

It’s like pre event

near night
#

thanks

rough basin
#

https://paste.md-5.net/yodejedima.cs
I'm trying to change PersistentDataContainer(), and this happend.
The first time Events runs, the value normally increases from 0 to 1.
However, when the next event is triggered, it does not work from line 24.
I checked the ItemMeta of the item in hand, but I don't know why the if statement doesn't work although CWname exists and value "nasus" exists.
What should I do? or Does some knows why this happen?

drowsy helm
#

what do you mean "Does not work"

#

does it throw an error

#

also please just use early returns instead of nested if statements and variables instead of inline checks

#

makes oyur code more readable

coral oyster
#

hi, is it not possible to use maven placeholders in my plugin code like ${project.version} ? I have tried using them but they don't seem to work. is this normal?

drowsy helm
#

i dont think maven affects .java files on compile

coral oyster
drowsy helm
#

you can use maven to set the plugin version in plugin.yml

#

just sync that and read it

coral oyster
#

how could I sync that?

boreal sparrow
#

If I set default: false in Plugin.yml, will the console still be able to execute it?

#

*how to allow console to execute command but not players, even if they are op

tulip nimbus
#

if (sender instanceof ConsoleCommandSender) {

boreal sparrow
#

oh yea, thanks!

#

sorry but I just don't get what is wrong here

@EventHandler
    public void onPlayerChangeWorld(PlayerChangedWorldEvent event) {
        Player player = event.getPlayer();

        //WORLD PLAYER WENT TO
        World world = player.getWorld();
        
        if (world.getName().equals("world")) {
            for (Player p : player.getWorld().getPlayers()) {
                p.sendMessage(player.getName() +" JOINED!");
            }
        }
    }

Even in a server with only one player, it sends the welcome message for that player twice, as in
name JOINED!
name JOINED!

tulip nimbus
#

Why do it that way? You can do Bukkit.broadcastMessage("");

#

Unless you're purposely only broadcasting to the players in that world

boreal sparrow
#

Yea

#

I am

#

But I don't get why it executes twice

tulip nimbus
#

You can avoid the loop entirely if you're not on older version of Java, maybe world.getPlayers().forEach(player -> player.sendMessage(""));

boreal sparrow
#

ok, ill try that, thanks!

drowsy helm
#

just use Bukkit.broadcastMessage

tulip nimbus
drowsy helm
#

ah didnt see that

boreal sparrow
frosty tinsel
boreal sparrow
#

I though so too, but how? ChangeWorld event only fires once when a player changes worlds?

frosty tinsel
#

Haven't you registered it twice or smth

boreal sparrow
#

I'll check ty

#

I did...

#

Damn I really need to be more careful thanks!

crude charm
#

I have a really odd error;

The following code works fine after I restart the server BUT if I save then try to get the new save without restarting the server then it doesn't work and prints this error

public class InventoryUtility {
    private final FileConfiguration config = Survival.getInstance().getConfig();

    public void saveInventory(Player p) throws IOException {
        Configuration config = Survival.getInstance().getConfig();

        config.set(p.getName() + ".inventory.armor", p.getInventory().getArmorContents());
        config.set(p.getName() + ".inventory.content", p.getInventory().getContents());
        Survival.getInstance().saveConfig();
    }

    @SuppressWarnings("unchecked")
    public void restoreInventory(Player p) throws IOException {
        Configuration config= Survival.getInstance().getConfig();

        ItemStack[] armour = config.getList(p.getName() + ".inventory.armor").toArray(new ItemStack[0]);
        ItemStack[] content = config.getList(p.getName() + ".inventory.content").toArray(new ItemStack[0]);


        p.getInventory().setArmorContents(armour);
        p.getInventory().setContents(content);

    }
[16:46:42 ERROR]: Could not pass event AsyncPlayerChatEvent to Survival v1.0-SNAPSHOT
java.lang.NullPointerException: Cannot invoke "java.util.List.toArray(Object[])" because the return value of "org.bukkit.configuration.Configuration.getList(String)" is null
        at me.zoibox.survival.utils.InventoryUtility.restoreInventory(InventoryUtility.java:31) ~[Survival-1.0-SNAPSHOT.jar:?]
        at me.zoibox.survival.listeners.ChatListeners.onChat(ChatListeners.java:27) ~[Survival-1.0-SNAPSHOT.jar:?]
        at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor3.execute(Unknown Source) ~[?:?]
        at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:75) ~[purpur-api-1.19.2-R0.1-SNAPSHOT.jar:?]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[purpur-api-1.19.2-R0.1-SNAPSHOT.jar:git-Purpur-1761]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[purpur-api-1.19.2-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:678) ~[purpur-api-1.19.2-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.adventure.ChatProcessor.post(ChatProcessor.java:381) ~[purpur-1.19.2.jar:git-Purpur-1761]
        at io.papermc.paper.adventure.ChatProcessor.process(ChatProcessor.java:96) ~[purpur-1.19.2.jar:git-Purpur-1761]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.chat(ServerGamePacketListenerImpl.java:2500) ~[?:?]        at net.minecraft.server.network.ServerGamePacketListenerImpl.broadcastChatMessage(ServerGamePacketListenerImpl.java:2681) ~[?:?]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.lambda$handleChat$18(ServerGamePacketListenerImpl.java:2325) ~[?:?]
        at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:718) ~[?:?]
        at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:482) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
        at java.lang.Thread.run(Thread.java:833) ~[?:?]
cobalt thorn
#
            @Override
            public void onPacketSending(PacketEvent event) {
                PacketContainer packet = event.getPacket();

                List<WrappedChatComponent> components = packet.getChatComponents().getValues();

                for (WrappedChatComponent component : components) {
                    //component.setJson(component.getJson().replace("Swear", "*****"));
                    packet.getChatComponents().write(components.indexOf(component), component);
                }
            }

Hi i made this code with protocollib one thing how i can get the message sent by the server?

sturdy frigate
#

How do i change spawn point orientation?

ornate zinc
#

hello . i want to make a plugin when i kill a zombie summon a nother zombie and when i kill secend one , do an action

#
public class spawn implements Listener {

    @EventHandler
    public void onDeath(EntityDeathEvent event) {
        if (event.getEntity() instanceof Zombie) {
            if (event.getEntity().getKiller() != null) {

                World myWorld = Bukkit.getWorld("world");
                Entity entity = event.getEntity();
                Location spawnLocation =entity.getLocation();
                Entity spawnnedZombie = myWorld.spawnEntity(spawnLocation, EntityType.ZOMBIE);
            }
        }
    }
crude charm
#

Rename ur class

brave goblet
ornate zinc
#

tnx

boreal sparrow
#

How can I get the numbers of players in a given world?
I use this but it's giving me problems

public static int getPlayerCount(String world) {
        World converted = Bukkit.getServer().getWorld(world);

        assert converted != null;

        int count = 0;

        for(Player p : Bukkit.getOnlinePlayers()){
            if(p.getWorld() == converted){
                count++;
            }
        }
        return count;
    }
#

wait im dumb

#

(Bukkit.getServer().getWorld(world)).getPlayers().size();

boreal sparrow
#

is there a better way to get the amount of players in a world?

crude charm
#

Does it work or not?

#

It shoulkd

boreal sparrow
#

no

crude charm
#

Why not?

boreal sparrow
#

the first player that joins it says 0

#

the second player 1

crude charm
#

so add 1

boreal sparrow
#

and the third player zero again

crude charm
#
Bukkit.getServer().getWorld(world)).getPlayers().size() + 1; 
boreal sparrow
crude charm
#

Huh

boreal sparrow
#

i know it makes no sence

#

this is the method:

public static int getPlayerCount(String world) {
        World converted = Bukkit.getServer().getWorld(world);
        return Objects.requireNonNull(Bukkit.getServer().getWorld(world)).getPlayers().size();
    }
#

Called like this:

//Player World Change Event
Player player = event.getPlayer();
World world = player.getWorld();

//Send join message to everyone
for (Player p : world.getPlayers()) {
  p.sendMessage(player.getName + Handlers(Dumb class name i know).getPlayerCount() + " has joined the world!"
}
manic ice
#

getPlayerCount needs a world argument, doesn’t it?

boreal sparrow
#

i passed in the wrong arguments

#

XD

manic ice
#

anyways instead of using the world name use the actual world object

#

also you should probably use Bukkit#broadcastMessage instead of sending all the players a message manually

keen obsidian
#

Hey folks, I'm having some difficulty with raytracing.

The goal is to raytrace from a block to a nearby player and see if the raytrace hits the player rather than a block in the way.

I've been testing the following code to do this, however, the RayTraceResult is always null for some reason:
https://hastebin.com/ujazatozap.kotlin

Any advice on where I'm going wrong would be much appreciated! ❤️

stoic vigil
#

Hey there! 👋
How to get the id of an entity the player is looking at? (like if you do /kill while looking at something you can tab the id of it)
thy already ❤️

ashen quest
#

how do i check if a server is on hardcore mode?

ashen quest
azure hawk
#

how can i dispatch a command with argmuments

glass mauve
#

prob remove the /

glass mauve
#

or performCommand(); prob better

azure hawk
#

ok

#

ill try

#

it works thanks

glass mauve
#

👍

ashen quest
#

how do i check if a server is on hardcore mode?
.

paper bone
#

look down?

#

like at your hearts

ornate zinc
#
     @EventHandler
     public void onZombieDeath(EntityDeathEvent event) {
       if (event.getEntity() instanceof Zombie) {
         if (event.getEntity().getKiller() != null) {
           Zombie zombie = (Zombie) event.getEntity();
           World myWorld = Bukkit.getWorld("world");
           Entity entity = event.getEntity();
           Location spawnLocation = entity.getLocation();
           zombie.setCustomName("ghost");
           if (zombie.getCustomName() == "ghost") {
              Entity spawnnedZombie = myWorld.spawnEntity(spawnLocation, EntityType.ZOMBIE);
              zombie.setCustomName("dead");
              event.setDroppedExp(100000);
           } else if (zombie.getCustomName() == "dead") {
           return;
           }
         else return;
      }
   }
}
#

help !

ashen quest
#

is there a method in the api?

undone axleBOT
#

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

knotty cloak
#

Bukkit.getWorld("world ").isHardcore();
(example)

ashen quest
#

ou

#

ty fam

#

xdd

glass mauve
#

is there a properly way to indicate optional arguments for a command in plugin.yml

ivory sleet
#

not really

#

Ig u could do it with command usage

glass mauve
#

yea but how do I show that it's optional?
like /<command> argument doesn't show it as optional

azure hawk
#

how can i get the Integer out of the Hasmap (ik ?learnjava im on it xd)

glass mauve
ivory sleet
#

usage: /<command> [optional] <required>

glass mauve
#

ok ty

ivory sleet
#

tho I personally use brig directly as that has good support for arguments and literals

glass mauve
#

but it makes sense to put all optional at the end right?

ivory sleet
#

hmm I believe so

#

or use command flags

#

if you have a lot of optional stuff

#

like

ivory sleet
#

-something=value

glass mauve
#

so you get the iNteger mapped to the player

azure hawk
#

ohhh ok bruh

glass mauve
#

also learn Java before api's

azure hawk
ashen quest
#

pickup item is a string

#

not an int

glass mauve
glass mauve
azure hawk
#

BRUH

glass mauve
#

but not enough information

azure hawk
#

I TABBED THE WRONG

#

HAHHA

#

shit

#

lol

#

sry

#

and now i wanna put the value back into the hashmap

#

but how

tardy delta
#

If the player is not present in the map you Will get a nullpointer

chrome beacon
#

You put the value in there once

#

It's the same the second time

sturdy frigate
#

how can i stop magma block damage? & deny ice slipperiness?

chrome beacon
#

Also please learn Java instead of wasting our time here with Basic Java questions

agile anvil
chrome beacon
#

^^

sturdy frigate
chrome beacon
#

You need mods to register new blocks

agile anvil
#

You'll need a resource pack

sturdy frigate
#

Oh really

#

Okie thanks

agile anvil
#

But resource packs are great, use it!

sturdy frigate
#

Sure!

#

Wait, since you said i need mods, can i not do it serverside?

#

Or is my only option to set a random/unused block textures to look like ice

agile anvil
#

What's your version ?

sturdy frigate
#

1.19

chrome beacon
#

You cannot add new blocks

agile anvil
#

Then with custom model data you can use a block and change it's texture without affecting others

chrome beacon
#

Blocks cannot have custom model data

agile anvil
#

Oh my bad

sturdy frigate
#

Geez okay

agile anvil
#

I'm not sure but you should check datapacks. I think they allow you with resource packs to add blocks

chrome beacon
#

They don't

agile anvil
#

Ok I stop talking

#

lmaoo

sturdy frigate
#

:(( it's okay, thank you guys

noble lantern
#

easiest too

#

mushroom blocks are next easiest, but theyre more annoying since breaking adjacent ones change block states (Which is whats used to change the texture)

marble copper
#

Guys anyone know how to make a rotatinf shop with stock using deluxe menu?

sturdy frigate
noble lantern
#

its subjective, but overall its a lot less overhead to work with

sturdy frigate
#

Ah I see

#

thanks 👍

chrome beacon
#

Did you modify the config file?

#

And not reload it

chrome beacon
#

It's null when it doesn't hit anything I believe

tender shard
#

what's the repo for authlib, brigadier etc again?