#help-development

1 messages Β· Page 983 of 1

grim hound
#

I know exactly what to do

#

I just don't know

#

how

#

xD

lilac dagger
#

not familiar either, i know i had a few encouters with classloader for my plugin's addons

grim hound
#

bruh I even had to use Unsafe

lilac dagger
#

i think you can look into how spigot handles material on plugin load

#

it uses asm

grim hound
echo saddle
#

Would there be a reason why putting lore on a spawner item would behave differently that on other items?

lilac dagger
#

i think it's called plugin class loader?

echo saddle
#

It seems like it's putting the lore in the block_entity_data under another components in it

lilac dagger
#

and it delegates to server unsafe asm

grim hound
#

?

lilac dagger
#

package org.bukkit.plugin.java;

grim hound
echo saddle
#

perhaps spigot isn't handling lore properly for spawner item?

grim hound
#

oh found it

lilac dagger
#

it's package private

crude fractal
#

Can't I just invoke getFlag()?

grim hound
crude fractal
#

Why would I need to get the DataWatcher for that?

grim hound
#

guess

lilac dagger
#

it's a magic number

#

it's not worthy of being an api

#

plus it's internal, can change how it works at any time

crude fractal
#

?? Why would I need to get the data watcher if I want to invoke getFlag() was my question

lilac dagger
#

it's probably processed different

lilac dagger
#

you're not using mojmaps, it can be harder to understand the whys

#

but i'm sure the livingentity get flag trickles down to the datawatcher

crude fractal
inner mulch
#

is the **perfomance **the same when having

a bukkitrunnable for **each **task
or
a bukkitrunnable for **all **the tasks?

(they all tick the same speed)

eternal oxide
#

depends on teh number

#

and how often you are creating/destroying them

crude fractal
#

Looks like the method got added in 1.9.2 lol

inner mulch
eternal oxide
#

generally, yes

quiet ice
# inner mulch is the **perfomance **the same when having a bukkitrunnable for **each **task ...

For sync tasks, by definition the latter will be more performant - unless you "stagger" the tasks (that is one group of task runs on one tick, the next group on the other, the rest on the next, etc. - even if they have all the same tick frequency, they may be out of phase).
However, for that I also assume there is no overhead by bundling the tasks together. If you were to use a list to collect all the ticking tasks and iterate over it (especially via foreach, which allocates an iterator object), then I count that as a overhead that may change the game (although it probably won't).

#

That being said, the perceived difference is next to 0 unless you are working with a enormous amount of tasks that are ticking very frequently.

eternal oxide
#

My answer was shorter πŸ™‚

rotund ravine
#

Nub

#

Elgar should have just wrote

#

Maybe

quiet ice
#

I have learned to use a lot of words for simple things. Makes it easy to write seemingly exhaustive documentation

eternal oxide
stiff sonnet
#

how would I remove a scoreboard after using player.setScoreboard(scoreboard)

quiet ice
#

Which is a habit I've been falling into a bit too frequently these days to the point that I'm starting to write a 5 paragraph javadoc for seemingly random internal API

inner mulch
eternal oxide
#

getMainScoreboard

stiff sonnet
#

oh neat thanks!

inner mulch
#

then there will be a sidebar again

lilac dagger
#

Before setting you can keep track of player's last scoreboard

#

Then bring it back whwn needed

tender shard
#

aha hm then ask it to solve this too

quaint mantle
#

Is there way to read incoming server logs?

patent quarry
#

Hello everyone,
for my plugin ExecutableItems I use since a longtime the method getItemMeta() to check if the itemstack has the a simple tag specified by my plugin.
I'm curious, someone know a better way to check if the item has just a tag ? meta crafting is not a trivial operation when used at high frequency.

slender elbow
#

if you want to get any information from the itemstack, you have to get its itemmeta, that is where all of the item data is stored; should note that getting the itemmeta should be far cheaper in 1.20.5

either that, or resort to nms to get the info directly from the nbt

young knoll
#

Because it’s already parsed from NBT into components

tender shard
#

Spigot uses Log4j to log console output, hence making it easy to listen to incoming console messages, or to block certain console messages from appearing. Prequisities You need to have Log4J on your classpath. We simply add the dependency to our pom.xml using the provided scope, as Spigot already contains those classes on runtime: Create...

#

^

patent quarry
slender elbow
tender shard
#

emily, do not pretend that I'm wrong when I'm technically right :p

slender elbow
#

so my plugin also uses log4j despite it not being in my classpath?

tender shard
#

idk any of your plugins

slender elbow
#

testplugin-5

tender shard
#

if it uses Bukkit.getLogger() or similar, then ofc it uses log4j too

slender elbow
#

but i am not using log4j, i'm using jdk logger

tender shard
#

explain pls

slender elbow
#

what if mojang decides to stop using log4j? then my usage of log4j depends on the mc version despite not having to recompile my plugin

#

does my plugin then use log4j?

tender shard
slender elbow
#

but i never used it

tender shard
slender elbow
#

but it works on versions that did have log4j

#

so it does but it also doesn't?

tender shard
slender elbow
#

if i slap you in the face

#

and you slap md5

#

did i slap md5?

tender shard
#

trolling me costs 350€ per hour

slender elbow
#

send me an invoice xoxo

tender shard
#

you rich bro. take it or leave it

slender elbow
#

fake street 123

grim hound
tender shard
#

I'm currently waiting for @slender elbow to send me her email address

grim hound
#

Mfo has no idea

#

Emily

#

Yes

tender shard
grim hound
#

You'll know

#

Since you're a fellow nerd

slender elbow
#

how about i do neither

#

actually i have work to do

#

lmao

tender shard
#

that's also okay, but in that case you must not complain

grim hound
#

Do you know why this happens?

tender shard
#

I would not get outta bed for anything less than 350e/hour

slender elbow
#

you are trying to get a mojang-named class in a reobf environment

grim hound
#

Cuz the class itself exists

grim hound
#

The context is below

tender shard
#

I'm just trying to pay my rent

still ridge
#

why getItemMeta do a copy of the item meta ?

slender elbow
#

yeah so, your issue is that you are not passing the parent classloader when creating that anonymous classloader

#

so it can't access mc classes

grim hound
tender shard
slender elbow
#

but that cl has no visibility over the server's classpath

grim hound
grim hound
#

that makes sense actually

#

how can I use the parent cl

#

and still use my bytecode

slender elbow
#

well, the class is gonna be defined before you could get a hold of it

grim hound
#

can I just use this

#

constructor

tender shard
slender elbow
#

you'd need to get the class bytes (getResourceAsStream("/net/minecraft/....class")), process it with asm, and then use methodhandles to define the class from the modified classfile on the server's classloader

slender elbow
#

but i would bet that the class will be already loaded by the time your plugin can do any of that

#

in which case you're fucked

grim hound
#

is there no 1.8 option?

slender elbow
#

crying

grim hound
grim hound
tender shard
#

oh wrong video

grim hound
#

I just need to change it's bytecode and replace a single instance

shadow night
grim hound
#

intercept

#

a single method invocation

#

in PlayerList

#

dassit

grim hound
#

wth

#

yep, my code is a copy of whatever gpt gave me

#

just gotta ensure everything works

slender elbow
#

because otherwise minecraft won't see that

grim hound
#

that's enough, isn't it?

slender elbow
#

just subclass it ?

grim hound
slender elbow
#

if you try to use the same class, something's gonna break because it's a different class definition

slender elbow
grim hound
#

gimme a sec to test it out

grim hound
#

is messed up

slender elbow
#

okay?

#

you can generate the subclass bytecode at runtime so it matches the package version

slender elbow
#

or have a java template for the package that you then compile at runtime

grim hound
#

how

slender elbow
#

i went over this last week

slender elbow
# grim hound uuuuuuh

with asm, you can get the package at runtime because when it runs it's the runtime and it's gonna have the correct versioned package at runtime

#

getClass getPackageName

#

not that you need the package anyway

grim hound
#

what about the method

tender shard
slender elbow
#

and that's what you get for using nms

#

regardless of package name, the method names and signatures can still change between versions

#

you'll have to do some fun introspection

#

or templates all over the place

grim hound
#

I don't get this error

slender elbow
#

i think the log is showing you do get that error

grim hound
#

I also noticed this game of words

slender elbow
#

also good luck setting static final fields

#

you need Unsafe for that

grim hound
#

simple

#

I don't get

#

why the every other field

#

set just fine

#

(other statics as well)

#

but not this

slender elbow
#

static finals the jvm is very protective about

#

they are constants

#

they are treated specially

grim hound
grim hound
#

oh wait no XD

#

what the fuq

#

I fucked up

#

I think I even know why

grim hound
slender elbow
#

if you aren't subclassing but doing that weird thing you were doing before, you need the offset of your field, not the field in the vanilla class

grim hound
#

ye

shadow night
grim hound
grim hound
grim hound
#

and only 1 field showed up

#

the logger in the subclass

lilac dagger
slender elbow
#

idk i just do

#

it started when i started to make fabric mods lol

shadow night
grim hound
#

bruh now java doesn't crash the server

#

but spigot does

#

xD

#

like you can't even see it disabling

#

it just kinda POOFS

quiet ice
#

yeah to be honest, knowing how to use the unsafe is general knowledge every programmer should have \s

grim hound
#
java.lang.NullPointerException: Cannot invoke "java.util.List.size()" because "list" is null
    at net.minecraft.server.MinecraftServer.bj(MinecraftServer.java:1239) ~[spigot-1.20.1-R0.1-SNAPSHOT.jar:3871-Spigot-d2eba2c-3f9263b]
    at net.minecraft.server.MinecraftServer.bi(MinecraftServer.java:1227) ~[spigot-1.20.1-R0.1-SNAPSHOT.jar:3871-Spigot-d2eba2c-3f9263b]
    at net.minecraft.server.MinecraftServer.a(MinecraftServer.java:1200) ~[spigot-1.20.1-R0.1-SNAPSHOT.jar:3871-Spigot-d2eba2c-3f9263b]
    at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1014) ~[spigot-1.20.1-R0.1-SNAPSHOT.jar:3871-Spigot-d2eba2c-3f9263b]
    at net.minecraft.server.MinecraftServer.lambda$0(MinecraftServer.java:303) ~[spigot-1.20.1-R0.1-SNAPSHOT.jar:3871-Spigot-d2eba2c-3f9263b]
    at java.lang.Thread.run(Thread.java:833) ~[?:?]



[16:36:44] [Server thread/WARN]: Failed to get system info for Player Count
java.lang.NullPointerException: Cannot invoke "java.util.List.size()" because "this.k" is null
    at net.minecraft.server.players.PlayerList.m(PlayerList.java:1106) ~[spigot-1.20.1-R0.1-SNAPSHOT.jar:3871-Spigot-d2eba2c-3f9263b]
    at net.minecraft.server.MinecraftServer.lambda$20(MinecraftServer.java:1441) ~[spigot-1.20.1-R0.1-SNAPSHOT.jar:3871-Spigot-d2eba2c-3f9263b]
    at net.minecraft.SystemReport.a(SourceFile:66) ~[spigot-1.20.1-R0.1-SNAPSHOT.jar:3871-Spigot-d2eba2c-3f9263b]
    at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1440) ~[spigot-1.20.1-R0.1-SNAPSHOT.jar:3871-Spigot-d2eba2c-3f9263b]
    at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1034) ~[spigot-1.20.1-R0.1-SNAPSHOT.jar:3871-Spigot-d2eba2c-3f9263b]
    at net.minecraft.server.MinecraftServer.lambda$0(MinecraftServer.java:303) ~[spigot-1.20.1-R0.1-SNAPSHOT.jar:3871-Spigot-d2eba2c-3f9263b]
    at java.lang.Thread.run(Thread.java:833) ~[?:?]
#

Nice πŸ‘

#

I get the feeling that the fields haven't been actually changed

grim hound
#

and the offsets were the exact same

quiet ice
#

which field do you want to alter and what are their access modifiers?

quiet ice
#

2 year old codebase coming in to clutch

grim hound
#

okay, java still crashes

quiet ice
#

what Java version are you using?

grim hound
grim hound
icy beacon
#

what are you trying to do? just tuned in

grim hound
#

this ain't right

grim hound
tardy mist
icy beacon
#

oh use kotlin

grim hound
tardy mist
#

do you know why that happens?

quiet ice
#

I've never tried it, but you might be able to abuse the new nest host attribute to syphon out the value

grim hound
tardy mist
grim hound
tardy mist
quiet ice
#

Don't ask.

icy beacon
#

half joking

grim hound
quiet ice
# grim hound

Do you accidentally try to use putObject for an int/float or other primitive?

grim hound
grim hound
#

I did

#

I should use the

icy beacon
grim hound
#

primitive equivalents, a?

quiet ice
#

probably so

grim hound
#

MMMMM

quiet ice
icy beacon
#

they do, does that matter in this case?

#

i might be misunderstanding the intentions

#

why are you trying to intercept a method

quiet ice
#

Because if it did what @grim hound intended, that'd be a feature deprecated for removal

#

Hell, the feature would already be removed by now :p

#

Unless you use the internal jdk unsafe (as opposed to the unsupported jdk unsafe - also known as sun.misc.Unsafe)

mortal hare
#

ah yes

#

i've spent 6 hours writing something promising

#

only to realise that i need to go back to square one

grim hound
#

new attempt

mortal hare
#

this looks sketchy af

grim hound
#

fuck

#

didn't work

grim hound
#

ain't work

#

do I just give up and use ByteBuddy?

#

I wanted to avoid that since it'll enlarge my jar file

#

by 1.5 MB

valid burrow
#

what if you shade it propperly

#

surely aint 1.5mb

quiet ice
grim hound
#

it's my 5th crash

grim hound
#

working

quiet ice
#

yeah, but how would ByteBuddy help where ASM doesn't work?

grim hound
#

with bytebuddy it's easy peasy

grim hound
quiet ice
#

Also, you might try asking this in the recaf discord - they are really savy about this kind of hackery.

grim hound
#

send me an invite on dm

icy beacon
#

like does it work

#

for some reason i feel like it does not

grim hound
icy beacon
#

kk

quiet ice
#

It's just GETFIELD java/lang/Byte.type Ljava/lang/Class; IF_ACMPNE

#

@grim hound told ya, those people are literal wizards haha

grim hound
#

do they just fuckin

#

code in assembly

#

that they know what RAX means

quiet ice
#

They make a lot of highly serious obfuscation, deobfuscation and JVM emulation.

grim hound
#

UHHHHH

#

I think some things might still be

#

um

#

broken

vast ledge
#

nah

#

average server

fast lodge
#

what do you guys use as a server? I have ubuntu on a digitalocean droplet

modern plank
#

anyone know which packet is used to spawn players in 1.20.2+

grim hound
#

depends what you wanna spawn of the player exactly

valid burrow
#

a server

fast lodge
#

does anyone know the plugin that shows the stats on screen like name of world, kills/deaths, money ect..? i'm a noob and this is one I cant find...

valid burrow
#

what do you want me to use my toaster?

fast lodge
#

cool Drvoss

#

I use a server too

#

That was very informative. Appreichate it πŸ˜‰

valid burrow
#

how about you install placeholderapi

#

and find plugins that support placeholderapi to display your stuff

#

like TAB for example

#

supports placeholderapi

fast lodge
#

TAB

#

Thanks.

modern plank
slender elbow
#

there's spawn entity and player info update packets

fast lodge
modern plank
#

searched in the EnumProtocol as well

grim hound
modern plank
#

tried that, does not work with players

slender elbow
#

it does

#

that's what the game uses

modern plank
#

did the ClientboundPlayerInfoUpdatePacket change since 1.19.3?

slender elbow
#

i think so?

modern plank
#

might have done something wrong there then

slender elbow
#

there are add/update/remove actions or smth, and you tell the packet what info to add/update/remove

#

idk if it was like that before

modern plank
#

yeah was like that

#

nope

#

no changes

slender elbow
#

oop, looks like there is PlayerInfoRemovePacket

modern plank
#

yeah always been like that

#

at least since 1.19.3

#

the thing is, i tried this code in 1.19.3, now ive changed the spawn named entity with spawn entity, it doesnt work anymore

slender elbow
#

just look what the game does in PlayerList#placeNewPlayer, you are essentially trying to replicate what it does

modern plank
#

nope something wrong with the add player info

#

cuz it aint appearing in tab

proud badge
#

Whats the difference between .dat and .nbt files?

valid burrow
fast lodge
#

I'm a PHP developer, but I'm looking at Java and it doesn't look that difficult to learn.

valid burrow
#

php and java indeed have similarities

#

the only differece is the depth

#

im no PHP dev

#

but ive never seen OOP on php for example

icy beacon
#

java is not hard to learn if you have a background in any other programming language

valid burrow
icy beacon
#

to me java is like "the" programming language bc it's super generic and combines like 100 paradigms and princpiles seen across other languages

#

i started with python but python doesn't feel like "the" programming language to me so i don't think i'm even biased that much

icy beacon
#

unless it's haskell

fast lodge
#

BTW @DrVoss, TAB was exactly what I was looking for thanks. I just started diving into the minecraft server world this past weekend. The most time consuming part so far is reading through docs for each plugin. I haven't even gotten to mods yet πŸ˜₯

#

I was debating if its worth trying to setup a server. Specifically, the cost to run a server vs money earned from server. The specs to run a server with 100 players online cost like 250$ a month based on some things I've read...I could be wrong though....

proud badge
#

Whats the method to get the main world?

vast ledge
#

There is none

proud badge
#

Rip

vast ledge
#

You can read it from the file

ivory sleet
icy beacon
#

It's just that like

#

Java feels like the central language that stuff stems from

#

Even though that's not true obviously

#

It just has the vibe

ivory sleet
#

yea fair

tardy delta
valid burrow
icy beacon
iron vine
#

Where can I download version 1.20.5

remote swallow
#

ew?bt

#

?Bt

icy beacon
#

?bt

undone axleBOT
icy beacon
#

sniped ez

remote swallow
#

me fingers ded

icy beacon
#

skill issue

ivory sleet
#

zbll

#

have you at least tried Haskell?

stiff sonnet
alpine urchin
alpine urchin
#

cafebabe listened to him

#

xd

valid burrow
#

pretty sure cafebabe doesnt respond to ?Bt

#

?Bt

icy beacon
#

so

#

πŸ˜‰

alpine urchin
#

well

#

it responded to him

#

immediately

icy beacon
#

no

alpine urchin
#

πŸ€·β€β™‚οΈ

#

sorry bud

valid burrow
#

its called delay

icy beacon
#

both of us sent the message almost at the same time

#

cafebabe didn't have time to process shit

alpine urchin
#

ik

#

nah its your wifi's fault

valid burrow
#

maybe cause cafebabe cant bend space and time

icy beacon
#

so in-between replying to me and sending a message, epic was able to send his own

#

why would cafebabe reply to ?Bt but not ?bt lmao

#

?bt

undone axleBOT
icy beacon
#

?Bt

ivory sleet
#

zbll do u do haskell?

icy beacon
#

no

#

but i've seen it

ivory sleet
#

tried it?

alpine urchin
#

did you guys know there's no time delay when you shine light on a metal to release electrons.

ivory sleet
#

haskell is actually good

icy beacon
#

and i've done some reading up and watching about pure functional programming

ivory sleet
#

oh yea

valid burrow
#

even light need time to travel

icy beacon
#

it looks like it's very cool but i did not experience any joy while learning about it

#

only despair

ivory sleet
#

fair

valid burrow
#

how r u conclube

ivory sleet
#

I mean, monads and that stuff is maybe a bit overly theoretical

icy beacon
#

what are some actual use cases for haskell

ivory sleet
#

im gucci :)

alpine urchin
ivory sleet
icy beacon
alpine urchin
#

welcome to quantum physics

icy beacon
#

rn

ivory sleet
#

yeah tho monads is like the first more "advanced" concept

valid burrow
ivory sleet
#

lol fibonacci was so annoying since there is like so many ways to do it

icy beacon
#

write one πŸ˜›

alpine urchin
#

that is not the delay i am talking of @valid burrow

icy beacon
#

write all of them

alpine urchin
#

once the light travels to the metal

#

the release of electrons has no delay

valid burrow
#

well then theres still delay xd

#

did you know playing minecraft with 0 ping is possible if you ignore the time the internet travels

ivory sleet
#

fib :: Int -> Int
fib = (map fib' [0 ..]!!)
where
fib' 0 = 0
fib' 1 = 1
fib' n = fib (n - 1) + fib (n - 2)

#

altho thisis like a really awful impl

#

but eh

alpine urchin
#

that is not a good analogy

alpine urchin
#

whatever voss if you wanna be annoyin and difficult

icy beacon
#

now write a function that outputs N first digits of pi

valid burrow
icy beacon
#

you got it

alpine urchin
#

you may read more about it here @valid burrow

valid burrow
#

but your statement was just factually wrong. β€žwhen you shine lightβ€œ indicating we measure from that point in time

alpine urchin
ivory sleet
#

i mean doesnt that also depend what you define as time lag

alpine urchin
#

and you continued

alpine urchin
alpine urchin
#

so i hope there's no misunderstanding now

icy beacon
worthy yarrow
#
@Override
    public void onPacketSending(PacketEvent packetEvent) {
        if (packetEvent.getPacketType().equals(PacketType.Play.Server.ENTITY_SOUND)) {
            PacketContainer packet = packetEvent.getPacket();
            System.out.println("Listener test");
            for (Sound sound : packet.getSoundEffects().getValues()){

                switch (sound){

                    case ENTITY_WITHER_AMBIENT:
                    case ENTITY_WITHER_SPAWN:
                    case ENTITY_WITHER_BREAK_BLOCK:
                    case ENTITY_WITHER_DEATH:
                    case ENTITY_WITHER_HURT:
                    case ENTITY_WITHER_SHOOT:
                        if (SuppressorToggleCommand.getInstance().getPlayersToggledWitherSound().contains(packetEvent.getPlayer())){
                            packetEvent.setCancelled(true);
                            System.out.println("Wither noise cancelled");
                        }
                        break;

                    default:
                        System.out.println("Not wither sound");
                        break;
                }

            }
        }
    }```

Sigh I still don't get it D: (none of the debugs are printing nor are the sounds getting cancelled)
valid burrow
#

?paste

undone axleBOT
valid burrow
#

please

#

for the sake of my eyes

#

and brain

worthy yarrow
#

Did it not parse to java?

valid burrow
#

im on phone

worthy yarrow
#

Oh same

valid burrow
#

doesnt work on phone

icy beacon
#

it's just that code walls are rly annoying

valid burrow
#

i dont care about the colors

#

i could code in text editor if i have to

icy beacon
#

sorta same

valid burrow
#

but if its across multiple lines

icy beacon
#

but tbh it'd be annoying

valid burrow
#

thats where i draw the line

icy beacon
worthy yarrow
tired star
#

I dunno, i wouldn't dare stop using my beautiful vscode theme

ivory sleet
tired star
#

I have no idea

valid burrow
icy beacon
#

im

#

addicted to jetbrains ides

valid burrow
#

me2

icy beacon
#

bulky but get the job done very very well

#

brb

ivory sleet
#

mmmyes, the copy pasted ide, goland, webstorm, intellij, pycharm etc

icy beacon
#

probably

tired star
#

Vscode is easy for me. Started using it in school

ivory sleet
#

fair

#

I mean its just if u use java in particular u're likely to outgrow vsc

#

at some point

#

i suppose kotlin also

#

but yea

tired star
#

Could be

#

Not in the near future though

tardy delta
#

Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly
heehee kotlin

worthy yarrow
#

Do people use kotlin for spigot dev simply because it’s basically free form java?

valid burrow
#

my only concern with vs code is that its empty by itself

#

its community carried

#

which is not necessarily bad

#

but too much of a hassle for me

tired star
#

I see that as a plus

icy beacon
tardy delta
#

java is too verbose

ivory sleet
icy beacon
#

i can't recall the last time i had an npe

icy beacon
#

kotlin helps with boilerplate

valid burrow
#

all my homies hate kotlin

worthy yarrow
icy beacon
#

i love it

#

i'm a sucker for kotlin

worthy yarrow
#

Idk I’m a sucker for java

tired star
#

Ive used kotlin for a total of 30mins

worthy yarrow
#

It’s quite fun

icy beacon
worthy yarrow
#

Just don’t ever put me on a jfx project again

icy beacon
#

lol

worthy yarrow
icy beacon
#

i've got no experience with packets so i'm out

worthy yarrow
#

shit

ivory sleet
#

i havent touched plib

#

im sorry

worthy yarrow
#

shit x2

#

All good haha, that's the point of me messing around with it haha

#

Do you use retrooper's instead? @ivory sleet

#

Or just don't do packets

ivory sleet
#

tbh im mostly on fabric in which I just use their api or mixin

#

but else ya

worthy yarrow
#

Oh gotcha

ivory sleet
#

id rather also inject netty yk

worthy yarrow
#

Yeah, I'm just using plib since it's already on the server this noise suppressor is for

#

I just need to get ahold of packet concepts so I can do cool stuff with the seasons plugin + biome manipulation

worthy yarrow
ivory sleet
#

the listener isnt even called right?

worthy yarrow
#

Nope

#
@Override
    public void onEnable() {
        protocolManager = ProtocolLibrary.getProtocolManager();
        protocolManager.addPacketListener(new SoundSuppressor(this));
        getCommand("wm").setExecutor(SuppressorToggleCommand.getInstance());
    }```

As per the jdocs, I'm registering the listener correctly... (or at least I think)
mortal hare
quasi gulch
delicate lynx
#

show code

quasi gulch
#

itemMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS, ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ADDITIONAL_TOOLTIP);

#

ItemFlag.HIDE_ADDITIONAL_TOOLTIP is just marked red like it doenst exist

worthy yarrow
#

?paste the method

undone axleBOT
quasi gulch
#

What should i paste?

worthy yarrow
#

Uh just do the class actually

quasi gulch
young knoll
#

It doesn’t exist on 1.20.4

icy beacon
#

It's HIDE_something else

young knoll
#

It’s called HIDE_POTION_EFFECTS instead

icy beacon
#

Your autocomplete should tell you though

#

Oh right

#

1.20.5+ it's ADDITIONAL_TOOLTIP

#

Below that is POTION_EFFECTS

quasi gulch
#

Ok i see Hide_Potion_effects

worthy yarrow
quasi gulch
#

But i clicked on the 1.20.4 docs why did it show me 1.20.5

icy beacon
#

What link did you go to

worthy yarrow
#

1.20.5

icy beacon
quasi gulch
#

But it says on google search 1.20.4

#

but cant paste images

icy beacon
#

?img

undone axleBOT
#

Can't send images? That's because you're not verified! Use !verify to complete verification.
Alternatively, you can upload screenshots to any image hosting site and share the link.

Here's some screenshot utilities that you can use to upload images.
Lightshot: https://prnt.sc
Imgur: https://imgur.com/upload
Flameshot: https://flameshot.org

icy beacon
#

Unless it says otherwise in the URL, it's always newest

worthy yarrow
#

spigot api will / should always be most recent

tardy delta
#

wondering who wrote that

icy beacon
worthy yarrow
#

Fourteen do you know packets? πŸ˜„

icy beacon
#

Holy shit

#

Check git blame

quasi gulch
#

Thats the Link i followed

icy beacon
#

It might be something something google cache

quasi gulch
#

Is there another way to get to 1.20.4

icy beacon
tardy delta
worthy yarrow
#

So no plib experience?

tardy delta
#

no

icy beacon
#

Not sure

worthy yarrow
#

Boo, no worries

quasi gulch
#

Ok

#

Is the HIDE_POTIONS_EFFECTS there to hide Armor Trims stuff under the lore or what would i need?

icy beacon
#

?tas

undone axleBOT
worthy yarrow
#

Dunno if that's available in 1.20.4 but @quasi gulch

quasi gulch
#

Ahh yeah i see it was just blind

worthy yarrow
#

I wonder why it's description is hide trim on leather armor lol

warped mauve
#

Does anyone know what is the protocol number of 1.20.5 and 1.20.6?

iron cave
#

766

clear elm
#

player.getInventory().addItem(new ItemStack(Material.TOTEM_OF_UNDYING, 37));
how can i give 37 totems one per slot withh offhand

clear elm
#

1.20

native ruin
#

with setItem you can specify a slot if that's what you mean

worthy yarrow
#

He wants the totems to stack to 37

#

in the same slot

clear elm
#

no i dont want them to stack

worthy yarrow
#

?

clear elm
#

thats waht currently happens

native ruin
#

loop over the slots you want

worthy yarrow
#

Oh

#

then yeah

native ruin
clear elm
#

ty

native ruin
clear elm
#

how can i give item to specific slot?

worthy yarrow
#

setitem(slotNum, item)

native ruin
#

nah idk

#

you'll figure it out, trust

iron cave
#

0-8 is the hotbar, 9+ for inventory

young knoll
#

0-8 is hotbar, 9-35 is the inventory

clear elm
#

what is offhand?

slender elbow
#

36-39 is armor slots and 40 is offhand

clear elm
#

ty

golden tulip
#

[BungeeCord] Can I convert the Protocol Version to Version name? Like 766 = 1.20.5/1.20.6

worthy yarrow
remote swallow
worthy yarrow
#

D:

icy beacon
#

not to be confused with indated

remote swallow
#

@young knoll what version do you use

young knoll
#

For what

remote swallow
#

i was going for mc but fuck it

#

everything

young knoll
#

For what

remote swallow
#

minecraft

alpine urchin
#

you guys heard the new ice spice track

young knoll
#

You aren’t good at answering this question

alpine urchin
#

wrong channel

proud badge
#

Anyone know why OfflinePlayer.getLastLogin() is returning 0 despite the fact that the player has definitely played before? (notice this only happens if the player hasnt joined after the server reboots)

#

Nvm its supposed to be getLastSeen

valid burrow
#

offlinePlayers dont get stored indefinitely

#

therefore to retrieve data about them you sometime need to do some fancy stuff

#

u could cache it yourself for example

quasi gulch
#

The Method offlinePlayer.getPlayerProfile().isComplete() doenst return true. But i can see that Playername, uuid and Texture are all there because i got the playerhead with the same OfflinePlayer. When i switched from Paper API to Spigot API that sudenly broke

valid burrow
#

dont dont do that

#

you are blocking the main thread

#

of your server

quasi gulch
#

Its in a Async Scheduler

#

I know that

valid burrow
#

ah alr

quasi gulch
#

But the Problem is that somehow it doenst return true

#

But it should normaly

valid burrow
#

i didnt even know it returns a boolean

#

what

#

why would it return a boolean

#

shouldnt it return well

#

a profile?

quasi gulch
#

you talk about .complete that complets the PlayerProfile but i mean .complete that shows if the profile is complete

valid burrow
#

ooooh

#

isComplete

#

i thought you meant .complete

#

big difference xd

#

well maybe cause it isn’t complete xd

quasi gulch
#

but i know it must be

valid burrow
#

you need to await the result

valid burrow
quasi gulch
#

Why should it run fourter? It need to wait before the OfflinePlayer is complete?

valid burrow
#

no it doesnt

#

it doesnt wait

#

why would it wait

#

you didnt tell it to wait

#

you can tell it to wait with for example a while loop

#

or .complete not .isComplete

quasi gulch
#

but shouldnt it wait thats the reason it blocks the main thread? What does it wait for when not the rest of the Player Profile?

valid burrow
#

it doesnt block the main thread

#

i misread your code

#

i thought you are using .complete

#

not .isComplete

#

.complete is a void that would block the thread and await the data

#

.isComplete just asks β€žis it there yet?β€œ

#

which it obviously isnt cause its literally 1 line above it

quasi gulch
#

I know that getOfflinePlayer(UUID) doenst block because it doenst send a web request but getOfflinePlayer(name) sends a web request

#

So its like .complete

valid burrow
#

just because you are sending a web request doesnt mean it blocks the thread

#

its async

valid burrow
quasi gulch
#

yeah its async because its in the scheduler but in the scheduler it need to wait before the OfflinePlayer was recieved? I mean i get the UUID and the only way to get that is to wait that the Web Request send it

valid burrow
#

no

#

the uuid is probably cached

young knoll
#

It will only do a web request if it isn't cached

#

It'll be cached after the first call

valid burrow
#

it will only send a web request if thr player wasnt on your swrver for a long time

quasi gulch
#

Its not i use different names all the time i know that they arent chaced

valid burrow
young knoll
#

(Or if said player has joined before)

quasi gulch
#

I use random names that never joined

valid burrow
#

you need to await it

#

just do that

#

theres a million methods for that

#

you could use lambda

#

you could do a while loop

#

you could block the thread completely

#

everything works

quasi gulch
#

ok i think that worked

young knoll
#

Well it's based on SnakeYAML

#

which you can use

#

You can probably use the api from spigot if you shade just that part

acoustic pendant
#

Hey, I have a doubt i cannot figure out for my self...

So i'm trying to make a grid for creating islands something like this:

X X X
X X X

#

the thing is, I don't know to organize it like this...

#

could someone give me some advice?

eternal oxide
#

Minecraft is already a grid (of Chunks)

#

just decide your spacing

slender elbow
#

1

#

1 spacing please

#

2 spacing if dangerous is your middle name

eternal oxide
#

Get off my island!

acoustic pendant
#

I can just think on doing it like a row

#

but not a symetrical grid

eternal oxide
#

its just Math. Space them 10 chunks apart or 100. You decide

acoustic pendant
#

hmm

worthy yarrow
#

Where are the packet knowers at??

acoustic pendant
eternal oxide
#

what do you mean?

acoustic pendant
#

Like if i space them 10 chunks

#

ok it will be something like this

#

X X X X X

#

right?

#

but for making this:
X X
X X

#

X X X
X X X
X X X

eternal oxide
#

what are these islands for?

acoustic pendant
#

just skyblock

eternal oxide
#

then why do you care if its grid or not?

acoustic pendant
#

uuh

#

space optimization? xd

eternal oxide
#

who cares

lilac dagger
#

there's nothing wrong doing this right?

eternal oxide
#

a chunk is a chunk is a chunk

acoustic pendant
#

so just make an offset?

eternal oxide
#

It doesn;t matter if they are in a grid or not. Surely the only requirement is they can;t reach eachother

young knoll
#

But what if you reach the world border!

acoustic pendant
#

don't be ironic

#

xd

young knoll
#

kek

acoustic pendant
#

but wont the server overload that way? or just me being silly?

eternal oxide
#

server doesn;t care where a chunk is

worthy yarrow
#

Coll do you know packets / plib?

young knoll
#

Don't use plib much anymore

#

but yea

worthy yarrow
acoustic pendant
young knoll
#

Have you tried sysouting the type of any outgoing packet

#

See if the sound ones even occur

worthy yarrow
#

No, I will try that

ivory sleet
tidal kettle
#

hey i want to use the command /fill by the console but not in the basic world, do you think this is possible

young knoll
#

The first question would be

#

Why

#

Fill the area with code instead

tidal kettle
#

because

eternal night
#

NODDERS facts

worthy yarrow
young knoll
#

Uhh

#

Make sure you are registering your packet listener correctly

worthy yarrow
#
private ProtocolManager protocolManager;

    @Override
    public void onEnable() {
        protocolManager = ProtocolLibrary.getProtocolManager();
        protocolManager.addPacketListener(new WitherSoundSuppressor(this));
        getCommand("wm").setExecutor(SuppressorToggleCommand.getInstance());
    }``` is this correct?
eternal oxide
#

Any console errors at startup?

worthy yarrow
#

nope

#

It's so weird everything enables correctly, it's just the listener doesn't fire it seems

worthy yarrow
lilac dagger
#

ah, thank you

worthy yarrow
#

no worries

tight compass
#

How can you be sure it's not firing if your print statement isn't at the very beginning of the method?

#

You have an if check before it, move the print statement to the beginning so you can be sure it's not being called

#

I'm curious, why is your cmd a singleton?

worthy yarrow
worthy yarrow
tight compass
#

Okay

#

Uh yeah, I'm not to familiar with ProtocolLib, sooooo

worthy yarrow
#

bruh

#

No worries lol

tight compass
#

Yeah, sorry to disappoint lol

worthy yarrow
#

It's ok, I just don't get why it's not even firing

eternal oxide
#

have you added a sysout at teh very top of your method, above the if statement?

worthy yarrow
#

Yeah

#
    public void onPacketSending(PacketEvent packetEvent) {
        System.out.println(packetEvent.getPacketType());
        System.out.println(packetEvent.getPacket().getSoundEffects());```
tight compass
#

onPacketSending, is that when the server sends a packet to the client?

worthy yarrow
#

yep

eternal oxide
#

you sure you want packet sending?

tight compass
#

Okay so are you sending a sound packet to the client and seeing if you get messages in the console?

#

-yeah

worthy yarrow
worthy yarrow
tight compass
#

Yeah so it should be when the server is sending packets

#

Uhh

worthy yarrow
#

It's goofy D:

eternal oxide
#

in console type protocol listeners

worthy yarrow
#

[15:48:12] [Server thread/INFO]: Packet listeners:
[15:48:12] [Server thread/INFO]: - nuclearkat.withersoundsuppressor.WitherSoundSuppressor@b9ade00
[15:48:12] [Server thread/INFO]: Asynchronous listeners:

eternal oxide
#

I haven't seen any examples using a PacketListener. They all register a PacketAdapter

worthy yarrow
#

Ok I'll try that, thank you!

median tusk
#

I accidentally sent my plugin in a free version, and I wanted a paid version, but I accidentally released it and I want it to be deleted urgently!

#

what do i do?

eternal oxide
#

report it and explain

median tusk
#

omg

quiet ice
#

Does anyone happen to know any good software for reading very large files with (16.4 GB, might not be 100% ascii, so it be nice to be able to see both hex and normal data).
hexdump is ... decent I guess, but not the most optimal of all approaches

eternal oxide
#

hexworkshop

#

I bought a lifetime key for it a few decades ago

#

Its my favorite

quiet ice
#

Yeah that is what I have been thinking of too

#

Also I might be the dumbest man alive: I seriously ran hexdump verylargefile -C | more.

I should really look into properly configuring the OOMKiller one of these days, power cycling on OOM isn't the greatest of all things out there

sterile axle
#

you could use hexdump's -n and -s options to limit how much it reads and from where while working through a large file

#

i.e. hexdump -n 16384 <file, read first 16 kb. finish up with that, hexdump -s 16384 -n 16384 <file, read next 16kb

#

whatever you gotta do, ig

worthy yarrow
#

?paste

undone axleBOT
worthy yarrow
#

https://paste.md-5.net/suvabewuki.cs

After trying #Server#EntitySound still no prints, so I switched to #Client#EntityAction, now it prints the test A messages but they are not much help:

[17:15:02] [Netty Server IO #1/INFO]: ENTITY_ACTION[class=PacketPlayInEntityAction, id=34]
[17:15:02] [Netty Server IO #1/INFO]: StructureModifier[fieldType=interface net.minecraft.core.Holder, data=[]]```
Nothing past test A fires
eternal oxide
#

packet play in? I thought you were listenign to outgoing?

worthy yarrow
#

I was, but nothing had been printing so now I tried incoming

young knoll
#

Some sounds are client side

eternal oxide
#

I was going to ask if you are actually playing sounds

worthy yarrow
#

No I'm not trying to play any, just cancel any that are of a wither

#

Listener gets registered, and test a passes but there are no sounds found inside the packet so now I'm not sure how to figure what sounds are being played

eternal oxide
#

Sounds like you can;t They are client side and can only be silenced with a resource pack

worthy yarrow
#

Erm

#

That's not fun

eternal oxide
#

are you just trying to stop them being world wide?

worthy yarrow
#

rather for players who've toggled it

#

/wm

young knoll
#

You can use packets to send a fake metadata update for the wither

#

Which sets the silent flag

worthy yarrow
#

How would I do this?

#

As well as figure if the packet is from the wither? is it just that packetPlayerInEntityAction, id=34?

young knoll
#

It’s apparently index 4 in the entities metadata

#

And it just takes a Boolean

worthy yarrow
#

Where/how am I applying this?

young knoll
#

Entity metadata packet

worthy yarrow
young knoll
#

Probably

shut canopy
#

Yo I need help with a minecraft server

DM me ASAP

$$$!

young knoll
#

?services

undone axleBOT
remote swallow
#

omg @eternal night are you home

eternal night
#

After 5 weeks of vaca and visiting my dear parents yes πŸ₯³

young knoll
#

Wtf on vacation during an update?

#

Making the rest of the πŸ“„ team do all the work

eternal night
#

Yea I was rather sad to see it drop and I couldn't help much

#

but hey, paper 1.20.6 is out now πŸ˜‰

worldly ingot
#

Yeah okay, whatever you say, double agent

young knoll
#

Mom Lynx said the P word

remote swallow
young knoll
#

Hey I didn’t name it

rough ibex
#

unicode consortium my beloved

remote swallow
young knoll
#

Okay nitro man

remote swallow
#

you literally have cat ears

young knoll
#

Not a subscription

#

Also I didn’t buy them

remote swallow
#

which makes you better than me

wet breach
#

Lol

tight compass
#

Does anyone know where PlayerCommandPreProcessEvent and ServerCommandProcessEvent (or whatever it's called) is called?

young knoll
#

Player would be for any player running a command

#

Server is for console/command blocks

novel meteor
#

Can someoen help me I am confused with how to add dependencies

#
  <repositories>
      <repository>
          <id>spigotmc-repo</id>
          <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
      </repository>

      <repository>
          <id>sonatype</id>
          <url>https://oss.sonatype.org/content/groups/public/</url>
      </repository>
      <repository>
          <id>sk89q-repo</id>
          <url>https://maven.enginehub.org/repo/</url>
      </repository>
  </repositories>

  <dependencies>
      <dependency>
          <groupId>org.spigotmc</groupId>
          <artifactId>spigot-api</artifactId>
          <version>1.20.4-R0.1-SNAPSHOT</version>
          <scope>provided</scope>
      </dependency>
      <dependency>
          <groupId>org.bukkit</groupId>
          <artifactId>bukkit</artifactId>
          <version>1</version>
          <scope>provided</scope>
      </dependency>
      <dependency>
          <groupId>com.sk89q.worldguard</groupId>
          <artifactId>worldguard-bukkit</artifactId>
          <version>7.0.0</version> <!-- Replace with your WorldGuard version -->
          <scope>provided</scope>
      </dependency>
  </dependencies>
</project>
#

Trying to get worldguard to work

slender elbow
#

mfw bukkit version 1

rough ibex
novel meteor
#

I cant get it to find a bukkit version for 1.20.4

#

I dont really know how to do the APIs and stuff and was trying to use worldguard

novel meteor
#

But I cant figure out how to get my plugin to have worldguard as a dependency

rough ibex
#

you only need to depend on spigot-api

#

you shouldn't need bukkit

novel meteor
#

Im not sure, I assumed I needed the bukkit one too since the worldguard API isnt showing up, but showed up when I had bukkit there even with the version wrong it just wouldnt compile anymore

plucky rock
#
package org.randomroomgen.ItemAbilities;

import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Display;
import org.bukkit.entity.ItemDisplay;
import org.bukkit.entity.Player;
import org.bukkit.entity.TextDisplay;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Transformation;
import org.randomroomgen.ItemManager.Items;
import org.randomroomgen.RandomRoomGen;

public class Nine implements Listener {

    @EventHandler
    public void OnNineRightClick(PlayerInteractEvent event) {
        Player player= event.getPlayer();
        ItemStack ClickedItem = event.getItem();

        if (ClickedItem != null) {
            ItemMeta ClickedItemMeta = ClickedItem.getItemMeta();
            if (ClickedItemMeta.equals(Items.Nine.getItemMeta())) {
                if (event.getAction().equals(Action.RIGHT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {

                    player.getInventory().addItem(new ItemStack(Material.STICK, 1));

                    ItemDisplay item = player.getWorld().spawn(player.getLocation(), ItemDisplay.class);
                    Transformation tansform = item.getTransformation();

#
                    Location loc = player.getLocation();
                    loc.add(0D, 1D,0D);

                    tansform.getScale().set(2D);
                    item.setTransformation(tansform);
                    item.setItemStack(new ItemStack(Items.Nine.getType()));
                    item.setViewRange(25F);
                    item.setBillboard(Display.Billboard.CENTER);
                    item.setBrightness(new Display.Brightness(15,15));

                    loc.add(0D, 1D,0D);
                    TextDisplay text = player.getWorld().spawn(loc, TextDisplay.class);
                    text.setBillboard(Display.Billboard.CENTER);
                    text.setText("Β§aCrafting " + Items.Nine.getItemMeta().getDisplayName());

                    Bukkit.getServer().broadcastMessage(player.getName() + " is crafting " + Items.Nine.getItemMeta().getDisplayName() + " at " + player.getLocation());
                    
                    for(int i = 0; i > 60; i++) {

                        int finalI = i;
                        new BukkitRunnable(){
                            @Override
                            public void run() {
                                Integer time = finalI;
                                text.setText(time.toString());
                                player.sendMessage(time.toString());

                            }
                        }.runTaskLater(RandomRoomGen.getPlugin(), 20);
                        
                    }

                }
            }
        }
    }
}```
#

im trying to chance the name of the textDisplay every second why doesnt this work?

#
                   loc.add(0D, 1D,0D);
                    TextDisplay text = player.getWorld().spawn(loc, TextDisplay.class);
                    text.setBillboard(Display.Billboard.CENTER);
                    text.setText("Β§aCrafting " + Items.Nine.getItemMeta().getDisplayName());

                    Bukkit.getServer().broadcastMessage(player.getName() + " is crafting " + Items.Nine.getItemMeta().getDisplayName() + " at " + player.getLocation());
                    
                    for(int i = 0; i > 60; i++) {

                        int finalI = i;
                        new BukkitRunnable(){
                            @Override
                            public void run() {
                                Integer time = finalI;
                                text.setText(time.toString());
                                player.sendMessage(time.toString());

                            }
                        }.runTaskLater(RandomRoomGen.getPlugin(), 20);
                        
                    }```
#

this bit

#

doesnt send the message either

quaint mantle
#

can you put it in a paste service

#

do you call the class listener?
As in define it as a listener somewhere outside this class?

plucky rock
#

yea the event happens

worldly ice
#

your loop header is wrong

#

why are you trying to register 60 runnables?

#

that all run after 1 sec

plucky rock
#

ah

#

would i use runTaskAsyc for this?

quaint mantle
#

What are you trying to do

plucky rock
#

try and change the name of the textdisplay to a number counting down from 60 to 0

#

or 1 to 60

worldly ice
#

runTaskTimer

#

iirc

plucky rock
#

ty ill try it

quaint mantle
#

Yeah you can use a runTaskTimer to run every second and editting a value of i and then just display that i

worldly ice
#

and get rid of the loop

plucky rock
#

k

#

got rid of loop alrdy

worldly ice
#

it would be much easier to store the starting timestamp and calculate how many seconds has passed since the loop was started

#

instead of having to deal with atomic integers

plucky rock
#

i was just gonna have the int set to 60 at the start then subtract 1 each loop

worldly ice
#

yeah but you'd have to use an AtomicInteger for that

plucky rock
#

ic

real ridge
#

Can someone help me with this? I am trying to download 1.20.5 remapped jars, but its installing 1.20.6

lilac dagger
#

1.20.5 is 1.20.6

#

it's just a hotfix or something

young knoll
#

^

#

1.20.5 was replaced

real ridge
#

bruh

real ridge
lilac dagger
#

indeed

#

i tried it earlier

carmine mica
#

so is 1.20.6 a valid API version?

autumn ingot
#

is there an up-to-date guide on using dcevm in the latest version of spigot for hotswapping? i know there are some online but they're relatively dated, just wondering if there's a tutorial or anything on it

lilac dagger
#

what does that mean?

carmine mica
#

use the jetbrains runtime for hotswapping

lilac dagger
#

the revision is the same

carmine mica
#

the api-version field in the plugin.yml

lilac dagger
#

as far as i know the minor is never used in plugin.yml

#

only 1.19, 1.20 and so on

autumn ingot
#

which if im understnading correctly is only java 11

carmine mica
#

I see a jbr for 21 linked on the root README of that repo

dry hazel
#

I think all releases have dcevm nowadays

real ridge
#

maven wont make the jar file anymore with the compile command

lilac dagger
#

if you want a jar you need to use at least package

#

i recommend install if you want to place it in local repo as well

echo saddle
#

What's the replacement for ItemFlag.HIDE_POTION_EFFECTS?

river oracle
#

?jd-s

undone axleBOT
river oracle
echo saddle
#

ty

lilac dagger
#

compile only generates the classes

#

package packages them into a jar

novel meteor
real ridge
#

I have no idea where it is pulling this number from, and IDK how to fix it

rough ibex
#

65 is java 21

#

you're running java 21 compiled code with a JRE < 21

buoyant viper
#

female gender mod plugin

rough ibex
#

this isnt your searchbar

#

oh wait yeah wtf

buoyant viper
rough ibex
#

What is dawg doing

real ridge
buoyant viper
#

wild.

real ridge
#

to be fiar

#

*fair

#

this isnt my plugin

#

im helping maintain it

rough ibex
#

uh huh

real ridge
#

but it isnt my plugin