#help-development

1 messages · Page 1265 of 1

fathom fox
#

Oh, Okay, thanks

wraith dagger
#

?mappings

undone axleBOT
fervent gale
#

Can I ask whats the best way to see if a potion is water bottle

trim quest
#

I am designing a menu system that will be compatible between versions(1.17-1.21+). However, I am confused about how to achieve this in my project architecture.

1- Should I create a menu system for each version through abstraction and make it acceptable as a menu system in the core?

2- Should I pull the necessary dependencies for my menu system from the appropriate nms version according to the user spigot server version and use those classes for my menu system in the core?

eternal oxide
#

Why are you using NMS for a menu system?

trim quest
#

i think i dont need nms or obc for that

trim quest
eternal oxide
#

what?

trim quest
#

i will use my api for creating menus in my other plugins

blazing ocean
#

Okay?

eternal oxide
#

Still doesn;t answer why you think you need nms for a menu system

#

I'll assume your menu is just going to be an inventory?

trim quest
#

yes

eternal oxide
#

then there is zero need for nms

#

The ONLY thing you have to handle is the ItemMeta difference when using components

trim quest
#

so if i had to show different inventory for each player

#

i need nms right

smoky anchor
#

no

eternal oxide
#

no

blazing ocean
#

why would you need internals for that...

trim quest
#

im learning

smoky anchor
#

I don't think you should be creating multi-version projects at this point in time...

smoky anchor
#

exactly

eternal oxide
#

a simple menu system is ok for your first project as a method of learning

#

but start simple

#

create a working simple menu first

#

then expand it

trim quest
#

i used ?gui

#

i dont have any problem with java features or paradigm rules that we use. im just unfamiliar with API

#

i mean i just learned OBC / NMS stuff im not practical atm for their use cases.

smoky anchor
#

what is OBC ?

trim quest
#

bridge for minecraft internals

#

an implementation

#

for bukkit api

smoky anchor
trim quest
#

i did minigames before

#

with spigot

#

I created BukkitGames

eternal oxide
#

everything you are wanting to do is accessible via the API

trim quest
#

but i didnt use best practices

#

im just learning it clearly

#

at least im trying

trim quest
#

i will test my menu system now

#

i will type if it wont work via versions

#

i only used org.bukkit

jovial grove
#

Guys does anyone have a regular expression to check if a minecraft nickname is valid

eternal oxide
#

a quick search results in /^\w{3,16}$/i

jovial grove
eternal oxide
#

true, its only length

slender elbow
#

playerName.length() <= 16 && playerName.chars().filter(i -> i <= 32 || i >= 127).findAny().isEmpty()

#

glhf

lost matrix
#

There surely is an NMS Method for that. Maybe even in the Profile class

eternal oxide
#

its going to be [a-zA-Z0-9] or something like

jovial grove
#

Okay ChatGPT helped me
It's ^[a-zA-Z0-9_]{3,16}$

eternal oxide
#

I missed _

lost matrix
jovial grove
#

It's not a plugin

eternal oxide
lost matrix
#

Jeah my bad

jovial grove
#

There was some Python adaptation of Minecraft btw

#

Sorry for being off topic

lost matrix
#

?gui

lost matrix
trim quest
#

i loved your guide

slender elbow
#

you no longer love it?

eternal oxide
#

It loses its shine once you have read it once

trim quest
blazing ocean
narrow kraken
#

yo how can i make some1 full invisible like so you cant see armor arrows and main/offhand

chrome beacon
#

Trying to make a vanish plugin?

amber dawn
#

guys do you think that a plugin sort of like the broken skript mod could be a good plugin idea?
like an horror plugin
could be a thing?

amber dawn
#

in PacketEvents I'm trying to spawn a Player with WrapperPlayServerSpawnEntity but EntityTypes.PLAYER doesn't seem to spawn anything while any type if other EntityType, such as an Armor Stand, spawns... I'm working with version 1.21, what do you suggest? the code isn't throwing any errors btw
I think it is missing parameters such as the name and the skin? how could i fix that

chrome beacon
#

Need to send the PlayerInfoUpdate and Metadata packets as well

#

info -> spawn -> metadata

#

in that order

amber dawn
#

I don't really know how to do that, you sure? my class looks like this:

public class CreateFakePlayer { public static void spawnFakePlayer(User user, Location location, UUID fakeUUID, int entityId) { WrapperPlayServerSpawnEntity packet = new WrapperPlayServerSpawnEntity( entityId, fakeUUID, EntityTypes.PLAYER, location, location.getYaw(), 0, null ); user.sendPacket(packet); } }

it works for every EntityType besides player

chrome beacon
#

The client has no idea what player just spawned

#

so it cannot show anything

amber dawn
#

how could I do that?

chrome beacon
amber dawn
#

I'm new to these things, do you got any doc that shows how to do that

#

like a starting point idk

chrome beacon
#

I recommend you use Citizens

amber dawn
#

but it costs doesn't it?

chrome beacon
#

It does not

#

It's pay for support and the Spigot page has a link to the jar

amber dawn
#

ok thanks

pure dagger
#

if i have an entity as a variable, can i kill it if its not loaded? what to do ?

echo basalt
#

if you have an entity variable that isn't loaded I'm fairly confident you have a memory leak

pure dagger
#

i mean everyone is far away from it

#

?

#

im not sure how it all works

clever zephyr
#

iirc Entity#remove should do the trick

pure dagger
#

so if i spawn an entity in code, and everyone will get far away can i do all the things like killing it ?

#

i thought that entities like disappear when you get far

#

you know

#

how does that work

real lagoon
#

Maybe you need to LivingEntity#setRemoveWhenFarAway(true)

sly topaz
#

that's true by default

pure dagger
#

so do i spawn it and just do "setremove"

sly topaz
#

what is your issue, I just hoped into the convo lol

real lagoon
real lagoon
pure dagger
pure dagger
clever zephyr
#

they disappear in your view not erased from the memory (by default , really depends on the type of the living entity)
try removing it using the method Spinotto mentioned if its a living entity

real lagoon
pure dagger
#

no, i dont want it to despawn

pure dagger
#

just have acces to it, and be able to change its hp etc

#

i checked '.isValid()' and it returns false

real lagoon
pure dagger
#

yeah

pure dagger
#

they said this

#

now you say that its unloaded

#

;-;

#

what?

real lagoon
#

You have a memory leak because you are keeping a variable of an unloaded entity

pure dagger
#

ohh

#

oohohoho

real lagoon
#

So you have a variable of an entity that doesn't "exist" anymore

pure dagger
#

what if it has a nametag?

real lagoon
#

It goes back to existence when the chunk is loaded again

pure dagger
#

it wont disappear but will it 'exist'?

pure dagger
#

different

real lagoon
sly topaz
#

i is just a counter, which is wronly using an AtomicInteger for

real lagoon
echo basalt
#

so many errors w that class

#

fun fact: you can use variables in anon classes to bypass the final issue

pure dagger
real lagoon
#

If you want the entity to vanish when unloaded setRemoveWhenFarAway(true) (if doesn't work try also setPersisent(false))

pure dagger
#

ill try that thin you said

pure dagger
#

i want to keep it and have acces

sly topaz
#

AtomicInteger isn't just a counter, it provides atomicity guarantees which are only necessary fo cross-thread operations

echo basalt
#
Bukkit.getScheduler().runTaskTimer(plugin, new Runnable() {
  int index = 0;

  @Override
  public void run() {
    index++;
  }
}, 20L, 20L);
real lagoon
sly topaz
#

if you want a counter, use a variable inside the anonymous class like Illusion demonstrated above or just an array with a single elem also does the job

real lagoon
#

So you need to check when the entity is unloaded and reloaded with event handlers

real lagoon
#

Or do you want to make the entity always loaded?

sly topaz
#
int[] counter = {0};
Bukkit.getScheduler().runTaskTimer(plugin, task -> {
  // do the thing
  counter[0]++;
}, 20L, 20L);
#

also works

echo basalt
#

ew

pure dagger
#

i dont know what you mena, ill say, lets say i want to spawn a mob, have always acces to its health, and kill it after 1 hour

#

@real lagoon

sly topaz
# echo basalt ew

it looks uglier but it's convenient if you access the counter outside of the task

#

you just need a wrapper around the variable so that the scope of the local variable gets expanded

real lagoon
#

Or does it remain stationary?

pure dagger
#

it can move

#

like its normal mob

real lagoon
#

Listen to EntitiesLoadEvent and EntitiesUnloadEvent to change the value of your variable to the new object when the entity is reloaded (save the UUID of the entity to distinguish it from others)

pure dagger
#

thats how you do it?

#

but how do i kill it if its unloaded?? hm?

real lagoon
#

Also save the position of the entity and when you want to remove it and it's unloaded get the chunk, addPluginChunkTicket to load it, kill the entity and remove the ticket

real lagoon
pure dagger
#

sorry

real lagoon
#

No problem

real lagoon
#

Anyway, now I'm going to despawn myself, tag me if you encounter some issue

sly topaz
#

you're dividing the step when you should be multiplying it

pure dagger
sly topaz
#

you seemed to have been saving entities references, which you shouldn't as most entities become invalid when the chunk gets unloaded

#

and holding a reference to them is what causes a memory leak, since there's nobody else but your code referencing it and it can't be freed

#

it happens lol

pure dagger
sly topaz
pure dagger
#

if its unloaded it always means its dead??

sly topaz
#

isValid checks whether:

  • the entity is alive
  • the nmsEntity.valid field is true
  • the chunk where the entity is at is loaded
  • if the entity is still in the world
#

if any of those is false, isValid returns false, the nms Entity.valid field gets set to false whenever the entity is despawned, and that happens when the entity stops being tracked

pure dagger
#

yeah so it could be alive but not dead

#

and when you come back its exists again

sly topaz
#

an entity cannot be invalid and alive

#

so you don't have to worry about that

pure dagger
#

uhm

#

so if i name tag it, it wont be invalid after getting far ?

#

im lost

real lagoon
# pure dagger thanks, i hope that will work, but im gonna do it tomorrow probably

Just a thing, effectively you don't need to have an EventHandler for EntitiesUnloadEvent, but only for EntitiesLoadEvent to update your variable value, and since the UUID is already stored in the entity you don't need to save it (same for the Chunk), but you only need to check if Entity#isValid and if not get Entity#getLocation()#getChunk() and then Chunk#addPluginChunkTicket to load it, do whatever you want with the entity (since the chunk will be loaded, EntitiesLoadEvent will be called and the variable will updated) and last remove the ticket from the chunk to unload it

#

In the EntitiesLoadEvent check if an entity has the same UUID as your Entity#getUniqueId() and update your variable

#

So you only need to use one variable for the entity

#

(I think getLocation will work even if the entity is invalid)

pure dagger
#

yeah i think

#

that will work

#

but javier said something

#

which i dont understand

sly topaz
#

I don't believe it is necessary for one to listen to the entities load event or load the chunk just to remove the entity

pure dagger
#

And if you remove it even if its invalidi it will actually remove it from the world?

#

How, invalid means its not in the world

#

Right?

sly topaz
#

invalid means what I said above, generally means the entity has been unloaded since the chunk is unloaded

pure dagger
#

And even if its unloaded i can kill it.

#

I mean remove it ?

sly topaz
#

I believe so, but if it doesn't then you can just remove them in entities load as Spinotto suggested

pure dagger
#

Okay thanls

smoky anchor
#

I don't think you can do anything to an unloaded entity. It would not save.

narrow kraken
#

but i dont know hjow to do that

smoky anchor
narrow kraken
#

yes so i want the player and their armor and arrows stuck iun therm to be invisble to other players whilst still be able to attack /keep armor

smoky anchor
#

So you don't want other ppl to see their armor ok.
You can either use packets to remove the items from the player for other players
Or some stupid solution like hiding the player and using a dummy entity instead of the player just for the hitbox and then transfer the hit :D (dont)

narrow kraken
#

ok thx

narrow kraken
#

i am new to coding sry

earnest girder
#

I'm encountering a visual bug where players launching a custom projectile see it go a little bit to the right or to the left of where they are aiming. This only occurs when the angle is close to being straight (North, South, East, West) but a little bit offset.

However, the actual projectile goes in the correct direction. It just LOOKS like it goes in the wrong direction, but it successfully makes contact with where they are aiming with their crosshair. Here is a video: https://youtu.be/vuQEm_PbzO0

Here is the code that spawns the projectile: https://paste.md-5.net/iyeyarafal.cpp

chrome beacon
#

Believe this is a protocol issue that's been around for a while
EDIT: Protocol not client

chrome beacon
#

it's clamping the velocity in the packet, so if you're using a high velocity it will desync

earnest girder
#

if I need it to go that fast, theres no fix?

grim hound
#

bruh

#

my github commit was rejected

#

and intellij now claims there are no more files to commit

#

can't even retry

#

like bruh

strange ibex
grim hound
#

who hallucinated this

chrome beacon
grim hound
#

why was it the commit link removed?

#

it was literally linked today and it somehow corrupted (I had a power outage, maybe that's why)

grim hound
thorn isle
#

remember when we used to put text on buttons?

#

MM YES, the circle with a line going through it, I can totally intuit what this button does

urban cloak
umbral ridge
trim quest
#

my command returns usage, im confused

#

i cant see anything wrong

umbral ridge
#

jesus christ

umbral ridge
#

im sorry but that is a mess

trim quest
#

i agree

umbral ridge
#

in your main class you can register commands with "this" as a parameter for registerEvents

umbral ridge
#

in your plugin.yml you also dont need to specify usage

#

usage text .. is what you should handle manually

trim quest
#

i will refactor these

#

i just want to know why this returns usage

#

there are no error

eternal oxide
#

it returns usage if you return false from your onCommand

umbral ridge
#
if (strings.length() == 2) {
  if (strings[0].equals("open") && strings[1].equals("piano")) {
    this.menuManager.openMenu(new PianoMenu(), player);
  }
}```
#

open and piano are arguments

#

what is your main command?

#

/<main command> open piano

trim quest
#

/menu open piano

#

/menu is my main command

#

i guess problem is different because this was work before

glossy wren
#

I've been comissioned to make a plugin for 1.7.10, but I have no clue where to begin with a version so old. Can someone point me in the right direction?

wet breach
#

just grab the api jar for it and you should be good lol

glossy wren
#

where do i find that is the question

wet breach
#

right, you will have to search for it because buildtools isn't going to provide it unfortunately

#

why don't you ask the ones who commissioned you for the server jar?

#

the server jar contains the api and you can just build against that

glossy wren
#

I mean "comission" as in a friend who is running a Mohist server and wants me to write a plugin for him

wet breach
#

and they have 1.7.10 server right?

glossy wren
#

i believe so

wet breach
#

then they can give you the server jar

trim quest
#

why i get this

 Fatal error trying to convert MenuPlugin v1.0:me/erano/com/menu/PianoMenu.class
org.bukkit.plugin.AuthorNagException: No legacy enum constant for WHITE_STAINED_GLASS_PANE. Did you forget to define a modern (1.13+) api-version in your plugin.yml?
        at org.bukkit.craftbukkit.v1_21_R4.util.Commodore$1$1.visitFieldInsn(Commodore.java:338) ~[spigot-1.21.5-R0.1-SNAPSHOT.jar:4491-Spigot-3dafb73-07a3b65]
        at org.objectweb.asm.MethodVisitor.visitFieldInsn(MethodVisitor.java:404) ~[asm-9.7.1.jar:9.7.1]
        at org.objectweb.asm.commons.MethodRemapper.visitFieldInsn(MethodRemapper.java:145) ~[asm-commons-9.7.1.jar:9.7.1]
        at org.objectweb.asm.ClassReader.readCode(ClassReader.java:2443) ~[asm-9.7.1.jar:9.7.1]
        at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1512) ~[asm-9.7.1.jar:9.7.1]
        at org.objectweb.asm.ClassReader.accept(ClassReader.java:745) ~[asm-9.7.1.jar:9.7.1]
        at org.objectweb.asm.ClassReader.accept(ClassReader.java:425) ~[asm-9.7.1.jar:9.7.1]
        at org.bukkit.craftbukkit.v1_21_R4.util.Commodore.convert(Commodore.java:218) ~[spigot-1.21.5-R0.1-
#

this is my other project

#

this works

wet breach
#

@glossy wren check your DM's 😉

eternal oxide
#

thats not the plugin.yml that is in your jar

trim quest
#

wdym ?

#

this is my demo project

#

and it is works

#

but when i move to my multi-module project

#

its done

eternal oxide
#

you did not specify an api-version in the current jar you are testing

#

open teh jar and look in its plugin.yml

trim quest
#

so i have to specify api-version in my multi module project right

thorn isle
#

your multi module build script is fumbling the resource packaging and including the wrong plugin.yml

trim quest
remote swallow
#

did you run a clean package

young knoll
#

You just don’t have an api-version in there

remote swallow
#

scroll up canada man

trim quest
#

im showing 2 different project btw sorry for that

#

i have to show that my code works

#

and i type command correctly ingame

remote swallow
#

on the project you just added api-version to

trim quest
remote swallow
#

did you clean package

trim quest
#

clean, install

remote swallow
#

check the project you are adding to right now, and do another clean package/install

thorn isle
#

the price we pay for legacy remapping nonsense still like a decade later

trim quest
#

i use these

eternal oxide
#

better to do package over instal else you fill up your local repo

#

however, you still need an api-version in the plugin.yml or it will try to use legacy mapping

#

even if you put 1.13

#

prior it will ignore teh version and still work

trim quest
#

but mfnalex didnt specify that, plus which version i have to add

#

for example

eternal oxide
#

the eraliest version you are building for

trim quest
#

i will support 1.17-1.21 so i have to choose 1.17 right

#

k

eternal oxide
#

then 1.17

trim quest
#

i also have this

eternal oxide
#

thats usualy META files you can ignore

trim quest
#

fk

#

this dependency was added 5 times

#

how i did that i dont know

#

i deleted

#

1.25 s

#

im idiot

umbral ridge
#

hey does anyone know how is this packet called? it's in SYSTEM_CHAT, but is there like a list of packet types or something?

eternal night
#

That toast is displayed if the server advertises itself as not enforcing secure chat

#

The journey of chat signing haters typing

slender elbow
#

just enforce secure chat

#

ez

eternal night
#

🗣️

young knoll
#

Tbf I don’t think I’ve seen any servers that do

#

Mostly because yknow, chat plugins

eternal night
#

Well

#

chat plugins should also work fine

trim quest
#

i have still same issue

buoyant viper
eternal night
#

proxies are a bit more annoying

#

they dropped previewing

trim quest
#

and other one is still works with the same code

eternal night
#

The server sends the original and the modified. So the client has a little warning if the server changed it and will notify that in the report screen

buoyant viper
remote swallow
#

help with what

trim quest
#

"/menu open piano" command returns usage, in my multi-module project
and other one (EranoMenu project) is still works with the same code.

#

im using exact same code

#

i changed api-version as elgarl said

sly topaz
#

your getCommand uses Menu while you're using menu to execute

#

ever since 1.19 or so, command labels are case-sensitive

trim quest
#

i changed after that

#

and still wont work

#

and there are no error code

#

it just returns usage

#

refresh the page

sly topaz
#

what did you change, the plugin.yml entry or the getCommand parameter? Because both have to be the same

trim quest
#

i make all of them lower case

#

except showTPS

sly topaz
#

can you push the jar you have in your test server right now to your github repository, that way I can check if there's anything wrong with the jar

trim quest
#

/Erano01/MinecraftRepository-Maven/tree/main/MinecraftPlugins/EranoAPI/Dist/target/EranoAPI.jar

#

i just pushed

#

to the github

#

i tilted to myself

#

now showtps is also dont work

trim quest
#

i literally type /menu open piano

#

i swear other project works

sly topaz
# trim quest

if this shows up then your plugin is probably disabled and that's why the command just shows usage

#

you have to fix your shading first

trim quest
#

its not disabled i guess

#

i only do clean, package now as elgarl said

thorn isle
#

error occurred while enabling
it's disabled

#

do /plugins and it'll show up red

trim quest
thorn isle
#

if any exception reaches up to JavaPluginLoader::enablePlugin without being caught, it will be disabled

sly topaz
#

it apparently doesn't show up red but it should

#

probably due to the reload, who knows

trim quest
#

k i will restart

#

i swear this is related to this structure

#

i feel like that

sly topaz
#

it's just the plugin being disabled

#

but your structure is in fact messed up if your shading isn't working, because you do have a 1_17_R1 module

trim quest
sly topaz
# trim quest

well, I don't know why it isn't being disabled properly, but it should be and that's probably what's happening anyway

#

fix that error first and then try the command again

trim quest
#

idk i didnt change anything related to tps

#

in core

#

i use latest spigot-api

#

other nms sub modules uses spigot - mojang remapping

#

for accessing obc & nms

#

and in core i setted api-version: 1.17 in plugin.yml

#

thats what i changed

#

mfnalex dont use api-version in plugin.yml in his tutorial

sly topaz
#

this has nothing to do with inventories tho

#

and they probably just forgot

trim quest
#

Hi there! Today I’m going to explain how to setup a multi-module project using maven to support different NMS versions. Important notes about this tutorial: Every step will have detailled screenshots using IntelliJ. I explicitly chose not to include everything as copy/pastable source code, but normal screenshots (you can click on them to show ...

eternal oxide
#

Its a tutorial not a copy/paste. He only shows what is important

trim quest
#

i even use design patetrns

#

abstract factory method

eternal oxide
#

are you testing on a 1.17 server?

trim quest
#

it was working except menu feature

#

yes

#

now im testing it on 1.17

#

at the first i was testing in 1.21.5

eternal oxide
#

then your shading is broken

trim quest
#

i didnt change my core pom.xml

#

how can i fix that

eternal oxide
#

from a quick look it seems an issue with yoru dist module/shading

trim quest
#

i dont see any issue

#

in pom.xml

eternal oxide
#

did you fix the path in the createNMSHandler ?

#

If you did, open your jar and check you have teh class at

#

I'm going to guess missing or a typo

trim quest
#

this class is actually exist

#

OH

eternal oxide
#

check the full path, case sensitive

trim quest
#

hell yeah

#

i just fixewd

#

im trying

#

thank you guys alot btw

fervent matrix
#

Is there a supported way of handling packets during the configuration phase or registering configuration tasks?
I found this message by @sly topaz which seems to imply there isn’t
So I was wondering if plugin channels also receive and respond to configuration-phase packets, or if I’m going to have to use reflection to replace the configuration task queue during PlayerLinksSendEvent?

trim quest
#

now there are no error message

#

everything works

#

Thank you to everyone who tried to help

#

how i didnt see that typo idk

#

i looked same place like x1000

#

before

trim quest
grand flint
#

How should I tag an item? Like an item that has a right click abilitiy, how should I tag it in the plugin to know it's the unique one

worthy yarrow
#

?pdc

grand flint
#

Is it possible to use the scale attribute client sided? So a player sees someone else a different scale but only they see it?

fervent matrix
grand flint
slender elbow
#

i wonder how that's gonna work with the hitbox

#

but sure it'll work until the entity or its attributes are resent

worldly ingot
#

I mean it'll use the server-defined hitbox

#

At least for any hitbox logic that's server authoritative

grand flint
#

It is for cosmetic purposes it's okay

#

Thanks that works for my needs :)

fervent matrix
grand flint
#

Yeah that's fine idc about the hitbox

#

But pretty sure the hit is server sided

fervent matrix
#

Yes, the server will check the target’s distance from the attacker

grand flint
#

Again I don't need a hitbox for the client

fervent matrix
#

But if you want people to be able to fight while seeing them scaled up you’re probably going to have some issues

#

If this is just for an NPC or something though that doesn’t matter

grand flint
#

I don't care about the hitbox bro 😭

fervent matrix
#

What’s your use case for this?

#

When it comes to combat:

  • If you scale up the target only a little bit, then the observer will have an easier time hitting them than if they were normal size
  • If you scale up the target too much, it’ll become harder for the observer to attack them at all (they’ll be pushed away by the scaled up hitbox - not the normal hitbox - and they’ll only be able to attack them if they’re within attack range of their normal hitbox)
  • If you scale the target down, the observer has a much harder time hitting them (because the target’s hitbox is smaller for them, and an attack is only attempted if it hits the client hitbox)
buoyant viper
#

a sign to stop building legacy versions

#

are u running buildtools through cmd, powershell, or Git Bash?

#

(im assuming windows)

#

do u have Git installed perchance?

#

try running from the Git Bash application instead maybe

eternal oxide
#

last I checked BT will not build 1.8 without building a later version first

#

its missing a dependency, if I remember

buoyant viper
#

at least i do think it can

eternal oxide
#

only if the dependency is already in your local maven

somber scarab
#

Hi guys, when it comes to making a bunch of inventory GUIs in my plugin, I need about 5 Inventories and around 20 or so buttons.

is there an easier way to make a gui with item buttons that each have a unique "action" when pressed?

#

I have not come across an api that does this in the way I want (really customizable)

#

is there no other way but to write my own lib for it?

sullen canyon
#

?gui

somber scarab
#

so far I actually kind of came up with the same structure but with some slight differences

#

ill read through it when im home ❤️

buoyant viper
#

which version first added custom Text Component colors

#

1.16?

umbral ridge
#

how do you spawn an entity like an arrow, and then shoot it at a specific direction, from location a to b

#

that sounds like pain in the ass to do. I'm trying to spawn an arrow and shoot in in between the stair

smoky anchor
buoyant viper
#

yes

smoky anchor
#

20w17a 1.16 yes

buoyant viper
#

Pog

smoky anchor
#

(wiki is great for this btw ;) )

buoyant viper
#

yeah i was in the process of reading changelog

#

figured id find it either there or thru spigot

smoky anchor
buoyant viper
#

picking minimum api vers i wanted to use

#

didnt want to deal with component coloring issues, figured id go with whatever version added hex support

#

ah well thats awkward

#

time to figure out multi versioning

smoky anchor
#

Gotta do that ugly protection I + hide enchantments for lower versions than like 1.21 or whatever added that :D
You're in for a treat if you're supporting so many versions haha

buoyant viper
#

i feel like supporting only latest and like latest-adjacent just wouldnt be fair for the simplicity of the plugins i have

#

this is for my common API stuff

buoyant viper
#

can a record class not be package-private?

eternal oxide
#

yes, but it would be restricted to that package

smoky anchor
#

what ? you can do public record
what am I missing

buoyant viper
#

ah, i had my access levels mixed up

#

i meant protected i think maybe

#

oh its still not allowed

eternal oxide
#

default IS package-private 😉

buoyant viper
#

oh package-private is NO access mod

#

i see

smoky anchor
#

oh I misread ok

buoyant viper
#

ah i just didnt actually realize classes only have 2 access mod states (public, or pkg-priv) lol

slender elbow
#

not that it makes sense for a record to be protected 🥴

buoyant viper
#

i had the wrong idea of what "protected" was tbh

#

i almost never use it

ancient plank
#

I've used it a couple times

slender elbow
#

I tend to use protected less than package private lol

buoyant viper
#

normally i dont care abt visibility but working on something i need to put a bit of actual effort into

#

so i wanted to restrict an internal api record

remote swallow
#

thought about modules yet

buoyant viper
#

like java9 modules?

remote swallow
#

no, maven/gradle modules

buoyant viper
#

oh

remote swallow
#

seperate out api into its own module

buoyant viper
#

separate api from impl?

remote swallow
#

yuh

buoyant viper
#

ehh

ancient plank
#

I was gonna do some modding so I need to figure out how to do that properly

#

but for spigot plugins I haven't had a need

buoyant viper
#

i dont think this is something that would benefit for modularity for me

#

theres not particularly meant to be /another/ way to implement said api

remote swallow
#

not a module in sense of people make their own impl, an api to interact with your stuff

buoyant viper
#

oh like i just provide them skeleton classes and have the implementation internal?

#

like spigor?

remote swallow
#

basically yeah

buoyant viper
#

meh

ancient plank
#

Hi there! Today I’m going to explain how to setup a multi-module project using maven to support different NMS versions. Important notes about this tutorial: Every step will have detailled screenshots using IntelliJ. I explicitly chose not to include everything as copy/pastable source code, but normal screenshots (you can click on them to show ...

young knoll
#

We stab modules

#

Stan

remote swallow
#

no stabbing them

buoyant viper
remote swallow
slender elbow
#

and each time think to yourself "wtf was I thinking, this is horrible"

tall dragon
#

That's so real

#

Done that more times than I'd like to admit clueless

thorn isle
#

spigor

grim hound
#

bruh where tf do I host gifs

#

(to embed on the spigot page)

wet breach
grim hound
#

its laggy

wet breach
#

believe google drive and one drive works too

grim hound
#

oh

grim hound
#

how

#

do I embed them?

wet breach
#

navigate to your gif on google drive and click on it, should give you a direct link

#

not sure how one drive works as I don't use it

grim hound
#

how

#

on the spigotmc page

#

can't embed as media

wet breach
#
Get a Shareable Link:

    Right-click: on the GIF file and select "Get link".
    Choose the sharing option: Ensure "Anyone with the link" is selected and "Viewer" access is granted.
    Copy the link: Click "Copy link"
grim hound
#

okay

#

but

#

how

#

do I

#

have it show

#

on the spigot page

wet breach
#

by putting it in the image tag

grim hound
wet breach
#

[img url= " "]Some text if you want in case it doesn't load[/img]

thorn isle
#

make sure you are copying the url of the actual image and not some webpage that just shows the image on it

#

you can't embed webpages

#

at least not with bbcode

wet breach
#

or it showed like a preview of links to websites

grim hound
grim hound
thorn isle
#

idk how google drive works, but typically unless the url ends in a .png or other image file extension, it probably points at a webpage rather than an image

wet breach
thorn isle
#

how about you paste that link here and somebody looks at it and sees if its an image or a webpage

kind hatch
buoyant viper
#

im 99.99% certain google drive wont let that be used as a direct url to an image

grim hound
buoyant viper
#

it may embed [on discord] but thats about all

buoyant viper
#

there was a hack to get a direct url for gdrive files but idr what it is

wet breach
#

its quite possible that spigot has restrictions in that the url must have a valid image extension in the url

#

which, if that is true then google drive would be more difficult to use

grim hound
#

<iframe src="https://drive.google.com/file/d/1H7cUug-Sm9Z83ik6fr7pdMKETAALsrpc/preview" width="640" height="480" allow="autoplay"></iframe>
This is what gdrive suggested for direct embed

kind hatch
#

I’m pretty sure spigot does require file extensions.

#

Imgur links need to have the .png extension for them to load correctly

grim hound
#

but uhhh

kind hatch
#

Wouldn’t be surprised if the same applied to other links.

wet breach
#

https://drive.usercontent.google.com/download?id=1H7cUug-Sm9Z83ik6fr7pdMKETAALsrpc&export=view&authuser=0

grim hound
#

hmm it tried to load for a sec but

grim hound
grim hound
slender elbow
#

have you considered using not google drive?

wet breach
grim hound
blazing ocean
#

literally any file host

#

you could also just host it from your server

grim hound
#

hmm

wet breach
grim hound
blazing ocean
#

oh right

#

I thought this was for an MC server

grim hound
blazing ocean
#

forgot

buoyant viper
#

just proxy thru cloudflare

#

let them handle the caching

wet breach
#

proxying through cloudflare still won't help with the traffic

thorn isle
#

break the image down into minecraft skin sized patches and hotlink them from mojang

#

free image hosting

buoyant viper
#

LOL

grim hound
#

its just not playable

wet breach
grim hound
#

brave

slender elbow
#

it also does not work on chrome fwiw

wet breach
#

that is why, I am using firefox

grim hound
#

anyhow

#

um

#

imgur

#

also doesn't work

wet breach
wet breach
grim hound
#

okay, why was this cut short

wet breach
grim hound
#

imgur you sucker

wet breach
#

turning your gif into an mp4

grim hound
wet breach
#

https://i.imgur.com/SPUNqCu.mp4

grim hound
wet breach
#

the link you gave takes me to the normal imgur site to view it

#

the link I provided is the direct link

grim hound
wet breach
#

don't believe spigot allows mp4

#

XD

grim hound
wet breach
grim hound
slender elbow
thorn isle
#

there are 14 competing standards

rotund ravine
grim hound
#

how are you all doing it then?

grim hound
rotund ravine
#

Mb?

grim hound
#

ekhem

#

MB

rotund ravine
#

Too large

wet breach
grim hound
#

noticed

thorn isle
#

at some point embedding a youtube video is the most viable option

grim hound
slender elbow
#

lol

grim hound
wet breach
rotund ravine
#

@vagrant stratus isn’t it like 5mb of smth or what was it. Think it was super low

vagrant stratus
#

@rotund ravine ?

#

context?

thorn isle
#

the thing with gifs is that they turn huge very quickly

rotund ravine
vagrant stratus
#

No idea

rotund ravine
#

Ah

grim hound
slender elbow
#

just embed a youtube video

grim hound
blazing ocean
#

which is good

rotund ravine
#

I usually just try to keep it as still images

wet breach
blazing ocean
#

auto-playing videos make me exit a page immediately

wet breach
#

my browser doesn't play stuff automatically

#

since I have it set to block anything that does

rotund ravine
pliant topaz
#

Me everytime I listen to music and some random news article starts autoplaying a video to the article and stops my music: nope

buoyant viper
#

i think u can just put .gif at the end of imgur url and be fine

rotund ravine
#

Still a 5mb limit

buoyant viper
#

theres a limit on external url file size? tf lol

wet breach
#

yeah I thought it was for direct uploading

#

I am pretty sure external linking didn't have a limit or was significantly higher

rotund ravine
#

I got yelled at it for my signature being too big once

#

Prolly different

#

Hopefully

wet breach
#

maybe too big as in it took up too much screen space?

#

not that its file size was too large XD

buoyant viper
#

i guess maybe its bc spigot proxys multimedia

wet breach
#

spigot has the bandwidth, just direct uploading consumes hard drive space

buoyant viper
#

proxying might involve caching which could also take up drive space

wet breach
#

not on the spigot site

#

webservers when they proxy something, don't actually save anything unless you actually setup caching for such things, otherwise its all bandwidth

#

bandwidth is easier to manage then an ever increasing storage XD

slender elbow
#

hence the words "might" and "could"

wet breach
#

yeah but spigot isn't caching that stuff from other places

slender elbow
#

i'd love to know how you are certain of it

#

not that i care ultimately but

wet breach
#

well, all the plugins currently on spigot easily fits on a 1tb hard drive

#

think last it was calculated from a couple of years ago, all the plugins take up like 300 or so gb of space

#

knowing that, there is probably 2 boxes for the site

slender elbow
#

and what does that have to do with the proxying configuration?

wet breach
#

go ask him if you really want to know

#

point is, the spigot site isn't caching stuff from other places because that would literally be dumb to do. Maybe cloudflare might do it on their end but that isn't spigot doing it

urban cloak
#

Discord does it too for external media

#

People could track the activity on their page if it wasnt cached

wet breach
#

not sure what you are talking about

urban cloak
#

If you send a link that is a video/image file, the data youre seeing as an embed does not come from that link, rather from discords servers

wet breach
#

ok we are not talking about discord

#

discord is hosted on google api servers

urban cloak
#

Well im just saying that it apparently does make sense, otherwise discord wouldnt be doing it that way

wet breach
#

discord does it that way otherwise loading times would take forever and some things would be broken when going back in history

#

also discord likes to save everything

urban cloak
wet breach
#

I wasn't talking about everyone else

#

you are the one that brought up discord, when the topic was about spigot website o.O

#

spigot has no interest in saving anything/caching. Like why would spigot care that your resource page broke because of some media links? The reason it doesn't make sense for spigot to cache anything that is external is because all it would take to bring spigot down would be to have enough visitors to hit the site to fill the entire hdd with caching, or at minimum break the proxying as it can no longer cache. I have no idea what the daily visitor count is for spigot but it is quite high. I wouldn't be surprised if the entire spigot site is hosted on a 500GB SSD with maybe a second 500GB ssd or 1TB HDD

thorn isle
#

but muh fingerprinting

urban cloak
#

and maybe it would make sense after 18 years to move away from the hard drive in your basement and embrace newer technology like object storage

#

it would probably even be cheaper than the ssd

warm mica
warm mica
wet breach
thorn isle
#

if it ain't broke don't touch it

wet breach
#

exactly

thorn isle
#

paper hangar learned that the hard way

urban cloak
#

then swap "your" for "someones" idc

urban cloak
wet breach
#

websites were serving millions of visitors long before this new tech just fyi

#

therefore that tech is super cheap to rent and sufficient

#

why spend more?

thorn isle
#

the guys were literally melting over the website shitting bricks due to some threading deadlock issue

warm mica
wet breach
thorn isle
#

the word for this is cache churn

wet breach
#

there we go

urban cloak
wet breach
#

I have never had a php website deadlock on me, maybe a experimental branch sure but you would need to also be using fpm

#

without fpm its impossible

warm mica
#

How is that even supposed to work, all requests get handled on a single thread with php

urban cloak
#

ye and its about as impossible to deadlock a jetty server

urban cloak
wet breach
#

hmm not so sure about the impossibility to deadlock a jetty server

urban cloak
#

did you read the thread? xd

warm mica
urban cloak
#

how?

wet breach
#

yes, they are complaining about their jetty getting deadlocked

#

which you said was impossible or nearly impossible to do

urban cloak
#

if you do Thread.wait() and never wake it up in php then you deadlock it too

slender elbow
#

it isn't jetty that is deadlocked

#

if you lock on a monitor without ever releasing it, that's your shit lol

#

not jetty's

warm mica
urban cloak
#

an ssd

warm mica
wet breach
#

yeah php will kill stuff, and same with apache and nginx

urban cloak
#

cool

wet breach
#

yep indeed

#

old tech for the win

urban cloak
#

until you need it to take that long

wet breach
#

you could tell it to allow it to take that long

#

its a parameter

urban cloak
#

cool

#

so i could implement that in jetty too

warm mica
urban cloak
#

SSE?

#

downloads?

wet breach
#

anyways seems redrhino is so desperate to prove new stuff is always better I guess and that spigot caches when its not necessary or needed

#

old stuff works plain and simple

urban cloak
#

yeah

#

but i think you shouldnt not use new stuff just because its new

wet breach
#

I don't use new stuff because it is rarely needed

thorn isle
#

it's WEB SCALE and on the CLOUD and scales HORIZONTALLY

wet breach
#

because no one does that

thorn isle
#

they need to invent a new dimension so they can write a new database engine that scales along that dimension

wet breach
#

lol

urban cloak
#

what even is the third dimension called?

thorn isle
#

i call it blurple

ancient plank
#

im hype to be able to chain entities with leads

urban cloak
#

depth?

wet breach
thorn isle
#

generally yes

urban cloak
#

how blurple?

#

i would call it blue

#

cause x and y are green and red

thorn isle
#

did they fix the infinite accumulation of falling damage when you suspend something with a lead

urban cloak
#

i think they did that a while ago

thorn isle
#

neat

thorn isle
#

would be a shame for me to float away my livestock with a ghast only for them to implode when they land on the ground again

wet breach
#

after seeing the cool images

#

to only try it out and just like have everything die in front of them

thorn isle
#

lmao

#

they should add it back because that would be kind of funny

wet breach
#

theres the ground lets go

#

You Died

wet breach
#

where you have to keep the ghast floating otherwise everyone dies

#

have to do certain things to ensure that

#

make a bedrock world with 1 block high lava

ancient plank
#

did they fix the fall damage with leads issue

wet breach
#

really I have no idea

#

but I would imagine so since I haven't heard anyone complaining

thorn isle
#

amazing

thorn isle
#

would be quite cool but i kind of doubt it

#

we could have benji jumping and grappling hooks and other cool things

wet breach
#

actually not sure about that

#

but I see it being doable though

thorn isle
#

it'd be a bit difficult to do on the server side, but if it's done on the client it should probably be as simple as copying some of the leash logic from entity tick

#

i have a feeling mojang didn't bother however and leads just go one-way

#

maybe not, i haven't started up .5 yet to take a look

somber scarab
#

I remember you

wet breach
#

well, I am quite popular

somber scarab
#

I told you I'll make the best Floor is Lava minigame out there

wet breach
#

so no surprise if someone remembers me

wet breach
somber scarab
#

:)

#

I made teh best floor is lava plugin out there

wet breach
#

so did you accomplish that goal?

#

nice

somber scarab
#

but I aint stopping here

#

I'll make it crazy. with guis and abilities and classes and chaos events in game

wet breach
#

interesting

thorn isle
#

make it have floating ghasts that players have to hang from with leads

#

and the floor is lava

trim quest
#

want to depend my other plugins to my multi-module (maven) api plugin, which module i should depend to my plugin?
core? dist ? or root?

somber scarab
#

I thought players are the ones who grab entites where they want, not the other way

ivory sleet
thorn isle
#

that's how you will want to do it, as if you depend on the root module, you will also easily be including all the transitive dependencies from all the child modules

#

and in your case that will be like 100 different versions of nms, making the dependent project practically un-buildable

chrome beacon
#

@ivory sleet

thorn isle
#

clown

#

are these generally compromised accounts or flat out bots?

quartz relic
#

would anyone happen to know how i would get the Statistic Playtime of a player? the old way dont work anymore

int ticks = player.getStatistic(Statistic.PLAY_ONE_MINUTE);

Is how i use todo it

chrome beacon
#

That hasn't changed

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.

quartz relic
#

the "Statistic" shows up red

thorn isle
#

what does the red say when you hover over it

quartz relic
#

cant resolve symbol ''Statistic''

chrome beacon
#

If you're using Intellij make sure it's up to date

quartz relic
#

ill see if it needs an update, been awhile since ive done minecraft stuff

thorn isle
#

this and make sure you've actually imported it at the top of the class file

quartz relic
#

So when i use to open intellij it would let me know if there was an update, it no longer does that so i assume its the correct version?

smoky anchor
#

Go to Help and About, see what that says

quartz relic
#

sorry for all the noob questions, it really has been a HOT minute since ive touched minecraft stuff

smoky anchor
quartz relic
#

update was there and it is now updating

chrome beacon
#

Might have to run it a couple of times

quartz relic
#

I appreciate you guys for helping, its all working now. spent like an hour trying different ways to get Statistics for nothing LOL

buoyant viper
#

i was gonna have it be just an interface but i just hate boilerplate of adding fields that would be present in all implementations (ie. the ConfigurationAdapter)

#

i might abstract it further and/or split it from my spigot commons lib but idk, and nor have i fully ruled out using maven modules to separate API from implementation..

stuck oar
#

Whats a good way to check if the inventory that someone clicked in is the inventory that you need?

chrome beacon
#

Compare the inventory instance

stuck oar
#

How do i do that? is there a feature for that?

chrome beacon
#

if(event.getInventory() == myInventory)

grand flint
#

If I have a coin that is in the same place for everyone and it dissapears for the person that picks it up, aka the others can still pick it up, should I add the coin with packets and remove it with packets, or should I add it to the server and remove it with packets

chrome beacon
#

Spigot has the Player#hideEntity method

#

No need to manually send any packets

rotund ravine
#

Yeah, just make it non pickupable as an item and hide it when a player “picks it up”

thorn isle
#

i'd spawn a separate item for each player, and then make it only visible and pickable by that player

#

since just hiding the entity won't display the item pickup animation, which can look a bit unintuitive for the player who picks it up

#

alternatively do what tan juck said but send an item pickup packet before hiding the item

misty oak
#

I forgot something very simple, help, how can I prevent the lava from spreading when I put lava with a bucket?

drifting bluff
#

This is my current openscoreboardcommand code but it doesnt show the player an scoreboard.

package de.constt.idleeClicker.commands;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scoreboard.*;

public class OpenScoreboardCommand implements CommandExecutor {
    @Override
    public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {

        if(commandSender instanceof Player) {
            ScoreboardManager manager = Bukkit.getScoreboardManager();
            assert manager != null;
            Scoreboard scoreboard = manager.getNewScoreboard();

            Objective objective = scoreboard.registerNewObjective("test", "dummy", "Scoreboard Title");
            objective.setDisplaySlot(DisplaySlot.SIDEBAR);

            Score score = objective.getScore("test");
            score.setScore(3);

        }

        return true;
    }
}
chrome beacon
drifting bluff
#

Oh I forgot that...

#

Now It works! Is there an way to set the scoreboard of an player automaticly when they join

stuck oar
chrome beacon
#

There are many ways of getting data from another class

#

?di is a common one

undone axleBOT
misty oak
#

I forgot something very simple, help, how can I prevent the lava from spreading when I put lava with a bucket?

somber scarab
#

is it possible to set a display name of an ItemMeta using adventure components?

#

Im not sure how to format a component so that it works with ItemMeta display title

restive mulch
buoyant viper
#

Spigot is strictly Strings only still

#

cough cough nudge nudge @worldly ingot

somber scarab
#

wait so you're telling me I can do it if I switch to paper?

buoyant viper
buoyant viper
remote swallow
#

or use the bungeee serializer that may or may not work still

buoyant viper
#

Spigot is getting there (cough cough nudge nudge @/Choco)

chrome beacon
#

in Spigot you'll need nms or unsafe

somber scarab
#

okay so how hard is it to switch to paper on a large project <.<

chrome beacon
#

however there's no method to use it with

remote swallow
#

ah true forgot that part

remote swallow
restive mulch
# somber scarab okay so how hard is it to switch to paper on a large project <.<
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import java.util.ArrayList;
import java.util.List;

public class ItemUtils {

    private static final MiniMessage MINI_MESSAGE = MiniMessage.miniMessage();
    private static final LegacyComponentSerializer LEGACY_SERIALIZER =
            LegacyComponentSerializer.legacySection();

    public static ItemStack setDisplayName(ItemStack item, String miniMessageInput) {
        if (item == null || miniMessageInput == null) return item;

        ItemMeta meta = item.getItemMeta();
        if (meta == null) return item;

        Component component = MINI_MESSAGE.deserialize(miniMessageInput);
        String legacy = LEGACY_SERIALIZER.serialize(component);

        meta.setDisplayName(legacy);
        item.setItemMeta(meta);
        return item;
    }

    public static ItemStack setLore(ItemStack item, List<String> miniMessageLines) {
        if (item == null || miniMessageLines == null || miniMessageLines.isEmpty()) return item;

        ItemMeta meta = item.getItemMeta();
        if (meta == null) return item;

        List<String> legacyLore = new ArrayList<>();
        for (String line : miniMessageLines) {
            Component component = MINI_MESSAGE.deserialize(line);
            legacyLore.add(LEGACY_SERIALIZER.serialize(component));
        }

        meta.setLore(legacyLore);
        item.setItemMeta(meta);
        return item;
    }
}
#
    <groupId>net.kyori</groupId>
    <artifactId>adventure-api</artifactId>
    <version>4.14.0</version>
</dependency>
<dependency>
    <groupId>net.kyori</groupId>
    <artifactId>adventure-text-serializer-legacy</artifactId>
    <version>4.14.0</version>
</dependency>
<dependency>
    <groupId>net.kyori</groupId>
    <artifactId>adventure-text-minimessage</artifactId>
    <version>4.14.0</version>
</dependency>

#

code util and pom

#

if u have gradle u can convert it easily im lazy

chrome beacon
buoyant viper
#

just change the Spigot repo url and ur spigot dependency to paper

buoyant viper
#

the API will still be the same (for like 99.99% of stuff) since Paper was built on Spigot

somber scarab
#

nice

grand flint
#

why do you always say some confussion shit

#

olivos solution was more than enough 🙏

thorn isle
#

does that pay the pickup animation? i don't think it does

grand flint
#

its a custom model

#

with modelengine

#

the player doesnt acutally pick it up

#

its a virtual coin

#

an animation plays if u pick it up

thorn isle
#

then yeah hiding it is the best option

grand flint
#

then how should i store the players who pickedit up on the server

#

should i check if its hidden if they try to pick it up

#

or store in a map who picked up which coin

thorn isle
#

how you want to persist it depends on how you want it to work, really

grand flint
#

its a minigame

#

so coins are one time per game

#

they are stored in a database later but that doesnt matter

thorn isle
#

you could have a database; you could store the set of picked up coin id's in the player pdc; you could store the set of players who picked up a coin on the coin's pdc

grand flint
#

no

#

coins are stored in a datbase but i wont store the session coins in a database

#

thast probs the most unefficient solution

#

ight look, i got a map, it has 5 coins, each player can pick up the coin and it disseapears for them

#

how should i check on the server if the player picked up that coin already

thorn isle
#

if it's a minigame and you don't need the data to persist across sessions, a player id -> set of picked up coin id's map in memory is the most straight-forward

#

then query that map and set to see whether the player has picked up the coin

grand flint
#

so map yeah?

thorn isle
#

Map<UUID,Set<Coin>>

#

where the UUID key is the player's unique id

grand flint
#

yeah oki dw

thorn isle
#

could also be a Set<UUID> if you want to refer to coins by entity uuid or something

grand flint
#

also scale thing works perfect

buoyant viper
#

Holy shit shes small

thorn isle
#

i think some nametag plugins have trouble with scale since the scale attribute doesn't change the riding entity height

worldly ingot
#

?softban @cyan kelp Spam bot

undone axleBOT
#

Done. Enough chaos.

young knoll
#

Smol

short pilot
#
    @EventHandler
    public void onBlockExplode(BlockExplodeEvent event) {
//        Block explodedBlock = event.getBlock();

        // Mistake here was assuming the block explode was for each individual block omg - 4/19/2025
        Iterator<Block> iterator = event.blockList().iterator();

        while (iterator.hasNext()) {
            Block block = iterator.next();

            if (block.getType() == Material.DRAGON_EGG) {
                System.out.println("Explosion detected dragon egg");
                EggData eggData = getKingdomEgg(block);

                if (eggData != null) {
                    System.out.println("Explosion detected kingdom egg");
                    iterator.remove();
                }
            }
        }

//        if (!(explodedBlock.getType() == Material.DRAGON_EGG)) {
//            return;
//        }
    }
#

does anyone know why my explosion listener isnt even picking up a dragon egg in the list of detonated blocks

#

ive confirmed there is indeed a dragon egg, but the first print statement will not fire

young knoll
#

Can dragon eggs even blow up

short pilot
#

im going to print the entire blocklist to see

young knoll
#

Huh yeah it can

#

It’s fairly blast resistant but it can

#

Are you causing a block explosion?

languid otter
#

Hi, I would like to know how to create an NPC, because according to what I found online, I need to use certain classes that are not present in my version of the Spigot API (1.21.R4).
For example: ServerGamePacketListenerImpl cannot be found.

short pilot
young knoll
#

?nms

young knoll
#

Since it’s an entity

short pilot
#

ah shoot you're right

#

the question must be asked then, what is blockexplodeevent for

#

can't think of any blocks that exploed without being converted to entity

young knoll
#

Beds

#

In the nether and end

short pilot
#

you're so right

languid otter
short pilot
#

yup that fixed it, thanks

grand flint
#

tombstone

#

no 😭

#

lodestone?

short pilot
#

respawn anchor

drowsy helm
grand flint
#

Does anyone have that clock icon that works in the scoreboard

#

#

found it

languid otter
remote swallow
#

follow

#

?nms

languid otter