#help-development

1 messages · Page 820 of 1

lost matrix
#

You can not imagine the pain i have been through after paper deprecated anything that looked remotely like a String.
There are external libs like the others suggested.

eternal night
#

And I mean, those methosd do make your life easier when you decide to use anything but simply colouring in your text kekwhyper e.g. translatable content, clickable text, score based values

lost matrix
#

Sonar was like, "Yeah, not gonna compile your code with problems in it. Fix 1k lines of code plox"

eternal night
lost matrix
#

I kind of like tolerate it now. Has its place.

eternal night
#

we are so close to perfection with string templates

#

like

#

urgh

lost matrix
#

21 has incubation for them, right?

eternal night
#

yeaa

#

but we haven't bumped yet

#

I guess you could make a separate MM module

#

but the days where everything can just be

itemMeta.displayName(MM."<red>Dangerous sword of \{player.displayName()}");
#

beautiful

young knoll
#

Paper is allergic to the words get and set

scenic onyx
eternal night
#

We cannot use them there

#

get and set would clash with spigots methods

eternal night
scenic onyx
eternal night
#

¯_(ツ)_/¯

scenic onyx
#

@eternal night what is the difference between MM. and STR.?

#

i dont read MM.

eternal night
#

a custom one

#

STR is implemented in the std library

#

MM would be an implementation that takes the string template and arguments and converts them into a Component via mini message

#

so you can easily create a component with placeholders etc

scenic onyx
eternal night
#

yea str templates are pretty damn powerful

#

given it can return anything

bitter rune
#

i have successfully added a dependency to my plugin, minimessage. it is the first time i added one, now i just need to fix about 300 instances when i used ChatColor

eternal night
#

you can also get a

YamlConfiguration yaml = YAML."""
key: "value"
bla:
  bla: 1
"""
#

or really, whatever the fuck you can dream up being a string

scenic onyx
#

I should update a lot

vague swallow
#

Thanks!!

young knoll
#

smh

eternal oxide
#

might be hard if it is assigned to a var

young knoll
#

var is cancelled

eternal night
#

but ehh

lost matrix
#

Doesnt matter. Imagine

Object result = someMethod();
young knoll
#

Then it just picks the first one I guess

eternal night
#

first one ?

#

The problem is that it has the same param types

#

just like

#

not exactly the same

young knoll
#

Ah wait I know

lost matrix
#

Oh yeah. I like having the order my methods where declared in, have an effect on the runtime execution.

young knoll
#

We index methods like arrays

#

someMethod1;

lost matrix
#

XDD

young knoll
#

Yeah idk there isn't really a good solution

#

both spigot and papers versions aren't ideal

quaint mantle
#

is there a way to get title without InventoryView?

#

i want to update open inventory every second

eternal oxide
#

open it again

#

or use new method of setTitle

lost matrix
#

Dont use the title of your inventory for identification. Just store your Inventory instance in code.

scenic onyx
#

what is this?

eternal oxide
#

unreachable code

scenic onyx
eternal oxide
#

its exactly what it says

scenic onyx
#

I know how to read too, I don't know how to fix it

dry hazel
#

you cut off way too much code for anyone to figure it out

eternal oxide
#

you have shown us nothing to comment on, other than to answer your first question

undone axleBOT
scenic onyx
#

this is the completed code

#

resolved

#

the } is plus

eternal oxide
#

you return before that line

scenic onyx
upper hazel
#

?paste

undone axleBOT
upper hazel
#

https://paste.md-5.net/urupozulef.java - I'm making a mini utility for reading a css file, everything seems to be going well, but for some reason the last class and its contents are always not readable in the file, what should I do?

#

For example
class 1
{
}
class2
{
}
class 3
{
}
class 3 unreadable

glad prawn
#

Doesn't look like the inner class

upper hazel
#

wdym

glad prawn
#

this is inner class

    Class B {
    }
}```
upper hazel
#

oh i see

spare hazel
#

if(!allowedBlocks.contains(e.getBlock().getType())) return;

#

is this a heavy task on the server?

upper hazel
#

for loop, as far as I know

zealous osprey
quaint mantle
#

Also, big O notation

young knoll
#

also depends on what the allowedBlocks is

quaint mantle
#

its O(N)

young knoll
#

If it's a hashset it can be pretty fast because yay hashcode

zealous osprey
spare hazel
young knoll
#

Yes but what type is the collection

spare hazel
#

List

young knoll
#

Ah

spare hazel
#

private static List<Material> allowedBlocks = Arrays.stream(new Material[]{Material.WHEAT, Material.MELON}).toList();

young knoll
#

I would use a set

#

But it's 2 entries so I doubt it matters much

desert marten
#

Yeah a set would be better here objectively performance wise

ivory sleet
zealous osprey
# quaint mantle

I wish I would comepletely comprehend that getNode function XD
It is very nested.

ivory sleet
#

But in this case an array backed list w 2 elements is prob faster

torn badge
quaint mantle
#

Jeez

torn badge
#

It’s hurting my eyes

quaint mantle
#

I hear this every day

torn badge
#

You should think about it

ivory sleet
#

Guy’s playing too much minecraft icl

dire marsh
#

that's the font that everyone at Mojang is forced to use

desert marten
ivory sleet
#

It just defines general scaling behavior of algorithms

#

For instance why we often end up in a merge sort using other algorithms when the sublists are small enough

charred blaze
#

how do i disable hover text (player list) in serverlistpingevent?

charred blaze
charred blaze
#

is this a bug or something?

west prairie
#

Hey

#

Some one now what is this import in 1.20.2?

import net.minecraft.server.v1_16_R3.PacketPlayOutWorldParticles;
import net.minecraft.server.v1_16_R3.ParticleParamBlock;
import net.minecraft.server.v1_16_R3.Particles;```
#

I didn't find documation

echo basalt
#

just remove the version

west prairie
#

I Already tried

#

Maybe I did the import wrong?

eternal oxide
#

why are you using NMS for particles?

shadow night
#

Fr

eternal oxide
#

Particles are client side and only generated by packets from the server. There is no server component

west prairie
shadow night
#

first look at the code, then do the things

bitter rune
shadow night
#

Sir, this is spigot

eternal oxide
#

?whereami

west prairie
shadow night
wraith dragon
#

is it possible to replace the scoreboard score numbers using team statuses?

#

in the new 1.20.3 update

west prairie
#

I could also actually, but it saves me a lot of time.

#

Then if there are public projects on Github, they are to collect and use them, so that they remain on display.

#

I've found, import net.minecraft.world.level.block.state.IBlockData; thanks anyway

kindred sentinel
#

How to summon entity in the center of the block location?

#

Like.. Block.getLocation is the corner of the block

shadow night
#
  • 0.5 ig
minor junco
#

xyz + .5 yh

#

but there should be a .center method in boundingbox

kindred sentinel
kindred sentinel
charred blaze
#

why doesnt this work?

minor junco
#

like it says

#

it is abstract

#

you need to implement it

shadow night
#

Wait

minor junco
shadow night
minor junco
eternal oxide
#

a Block location is bottom corner

minor junco
eternal oxide
#

so +0.5 to all for center

minor junco
#

yup

shadow night
minor junco
#

yeah

shadow night
#

Actually, doesn't paper make it abstract or something

#

Or is it just modern versions

charred blaze
#

can anyone give me an example how to use this method e.motd().hoverEvent().asHoverEvent();

rotund ravine
#

Greened @charred blaze

#

Are you using paper?

charred blaze
#

i dont care. how do i make it in spigot

shadow night
#

No, no, are you using paper?

charred blaze
#

ill change lib to spigot wait

#

not anymore

#

now will you help me?

#

so im trying to protect my server from some scanners. im trying to hide player list it is showing on the server list (motd).

#

it kinda works but when i check the hover text

#

it says "anonymous player" if player has server listing turned off (client side)

#

how do i hide that

eternal oxide
#

I guess it doesn;t expect a player list to be empty

charred blaze
#

So how do i fix that sir?

shadow night
#

what if you add a space to it

charred blaze
#

you didnt help me

charred blaze
charred blaze
west prairie
#

getHandle().playerConnection.sendPacket(packet); dosen't work ?

eternal oxide
#

it sets max players sent. as you want none

charred blaze
#

but ill try

eternal oxide
#

it will also hover no players

shadow night
#

3000 iq

charred blaze
#

just trying to display default server settings

eternal oxide
#

the only other way would be to reflect Bukkit and turn on HideOnlinePlayers

eternal oxide
#

what specifically to reflect I can;t tell you as I'm not in stash

charred blaze
#

you mean this?

eternal oxide
#

yes

#

check in stash where that is, reflect and change it

#

?stash

undone axleBOT
charred blaze
#

whats sta...

#

ah

charred blaze
#

is there like .setHideOnlinePlayers?

eternal oxide
#

no

#

you need to check in Server for where it reads/stores teh setting

charred blaze
#

how do i track that

charred blaze
#

to be honest, i dont know how

eternal oxide
#

looks like you have to dig deeper return console.hidesOnlinePlayers();

#

console is DedicatedServer

#

which is NMS

echo basalt
#

Would you like me to investigate

eternal oxide
#

find it 🙂

charred blaze
echo basalt
#

ezpz

charred blaze
#

i have like 0 knowledge in reading docs

#

if that is docs at all

echo basalt
#

server.properties

#

easy

charred blaze
#

i knew that already

#

but how do i change it

#

get the file open it and change it?

eternal oxide
#

no

glad prawn
#

yes wtf

echo basalt
#

You can do hacky shit and set the field with reflections

#

might need to use unsafe in later versions

eternal oxide
#

as the server is running you'd probably have to reflect into nms and change it's vcalue

charred blaze
#

Path path = Paths.get(getDataFolder().getParentFile().getAbsolutePath()).getParent().resolve("server.properties");
try {
List<String> lines = Files.readAllLines(path);
lines.add("test:test");
Files.write(path, lines, StandardOpenOption.TRUNCATE_EXISTING);
} catch (IOException e) {
e.printStackTrace();
}

#

wouldnt something like this work

echo basalt
#

No because you'd need to restart it

charred blaze
#

ah

#

yeah

eternal oxide
#

you have to reflect so you change it in memory

charred blaze
#

aaa

#

well restarting sounds easier?

#

how do i make plugin stop the server?

eternal oxide
#

messing with server settings file from a plugin woudl be naughty

eternal oxide
#

its not a plugins job. Security and all

echo basalt
#

wanna know something funny

charred blaze
echo basalt
#

while the fields in the properties thing are final

charred blaze
#

bruh

echo basalt
#

the assignment of the properties object is not

charred blaze
#

wha

echo basalt
#

you can change this

charred blaze
#

so i can change it right?

eternal oxide
#

lol so you could just replace the whole instance

charred blaze
#

it looks easy when you say it

echo basalt
#

create a new serversettings instance

#

Ah shit you gotta pass an optionset

#

OR

#

you don't

#

aha

charred blaze
echo basalt
#

you need nms

charred blaze
eternal oxide
#

Yeah you are not going to see any of what we are talking about without NMS

#

so Spigot not Spigot-api

eternal oxide
#

you can, but it's version specific

charred blaze
#

ah i dont want that

#

so how without nms?

eternal oxide
#

although, it's only settings so you would probably get away with it

charred blaze
#

So can i do it or not on multi-version?

eternal oxide
#

yes you could do it

charred blaze
#

so if i change the setting in the nms in onenable it will always be the value i set it in the code right?

eternal oxide
#

yes

charred blaze
#

where's nms

#

bruh

echo basalt
#
DedicatedServerSettings settings = dedicatedServer.settings;
DedicatedServerProperties currentProperties = getField(settings, "properties", DedicatedServerProperties.class);

Properties javaProperties = (Properties) currentProperties.properties.clone();
javaProperties.setProperty("hide-online-players", true);
OptionSet options = getField(currentProperties, "options", OptionSet.class); // found in DedicatedServerProperties' parent class

DedicatedServerProperties hackedProperties = new DedicatedServerProperties(javaProperties, options);
setField(settings, "properties", hackedProperties);
#

hacky :)

#

and easy

#

You can pass null as the option set

#

But we want to maintain functionality

charred blaze
#

hackedproperties xd

river oracle
#

@eternal night I like it personally. However, one gripe here

    public ItemStack createItemStack(final int amount, @Nullable final Consumer<M> metaConfigurator) {
        final ItemStack itemStack = new ItemStack(this.asMaterial(), amount);
        ... and so on
    }

Why are you creating a bukkit ItemStack vs a CraftBukkit ItemStack? Is there any specific reason imho should leverage the CraftItemStack where possible.
Otherwise I like the methods and think this method definitely leverages the Generics where they can be and kinda leaves them out to die otherwise. Very nice

echo basalt
#

up to you to make

#

Think I'll make a nice reflection util at some point

charred blaze
#

and optionset?

echo basalt
#

more nms

#

actually it's joptsimple

charred blaze
#

what?

echo basalt
#

I said it

eternal oxide
#

Once you get the class you want you call getField on that

west prairie
#
        if(this.players == null || this.players.length == 0)
            return;
        
        final Random r = ThreadLocalRandom.current();
        
        for(LeafSpot s : this.spots) {
            if(r.nextInt(100) > plantChance)
                continue;
            
            final PacketPlayOutWorldParticles packet = new PacketPlayOutWorldParticles(
                    new ParticleParamBlock(Particles.FALLING_DUST, s.getData()), false, s.getX() + r.nextFloat(), s.getY(), s.getZ() + r.nextFloat(), 0, 0, 0, 1, 0);




            for(int i = 0; i < this.players.length; i++)
                if(this.players[i] != null)
                    if(this.players[i].getWorld().getName().contentEquals(this.worldName))
                        this.players[i].getHandle().b.a(packet); <- Here
                    else
                        this.players[i] = null;
        }
        
        
    }```
I have an error on the b.a(packet). For what?
echo basalt
#

something to send packets

#

no clue why you'd do that rather than just using the API

chrome beacon
#

so why are you sending particles with packets

eternal oxide
#

lol

chrome beacon
#

Jus use the API?

#

It already does that for you

river oracle
#

sure, but using NMS makes them look cooler

eternal oxide
#

We already told him to use the API but he seems to be against it

river oracle
#

well its cuz the API sucks guy which is why I just fucking go raw on the server I don't even use spigot anymore

west prairie
#

I try to add realism to the trees.

river oracle
eternal oxide
#

Particle packets are all in the API

#

World#spawnParticle

river oracle
#

oh I just realized that's not even mojmaps too

#

rough life

west prairie
#

The particles are not from Minecraft, they are added via a texture package.

eternal oxide
#

doesn;t matter

west prairie
#

And I'm trying to make this compatible with a custom block engine.

chrome beacon
#

Still doesn't matter

eternal oxide
#

still doesn;t matter

charred blaze
#

why isnt this working

west prairie
#

But why not use NMS even if the API already offers it?

river oracle
#

this gave me a good fucking laugh

eternal oxide
#

lol

river oracle
#

@west prairie why are you using the API at all just patch the server if you don't want to use it so much

west prairie
#

I'm trying to learn lol

river oracle
#

you'll learn a shit ton by patching the server

eternal oxide
#

NMS changes so you have to update your code for whichever version you are running on. API is teh same on all versions.

river oracle
#

trust me its very fuin

west prairie
#

Okay, but if let's imagine I want to continue with my "stupidity", what is the error in my loop?

river oracle
#

if its NMS you're on your own

#

I think everyone here could help witht eh API tho

charred blaze
rotund ravine
echo basalt
river oracle
echo basalt
#

oh shit

rotund ravine
echo basalt
#

I'll go back to writing this reflection util thing

charred blaze
echo basalt
#

I already gave you all you need

#

Just finished writing my reflections library

#

:)

opal carbon
#

reflection yucky methinks

echo basalt
#

:)

charred blaze
#
  1. what is reflections
  2. how do i make all those missing variables
  3. how do i import joptsimple library
vast raven
#

how to detect when a player hitten by an egg was protected by a shield? since the damage of the egg is 0 I can't apply the damage modifier

#

I want to exclude "the direction check" way

echo basalt
#
String result = Reflect.aMethod(MyObject.class, "toString").invoke(myObject);
#

:)

eternal oxide
#

clean

echo basalt
#
ReflectedClass<MyObject> reflectedClass = Reflect.aClass(MyObject.class);
String toString = reflectedClass.invoke(myObject, "toString");
#

also works

#

It parses parents and stuff

opal carbon
#

i think my most fun reflection project i did was changing blast resistance of diff blocks

charred blaze
#

is this that reflections?

echo basalt
#

And caches fields and stuff for invocation

#

It's really basic

chrome beacon
west prairie
#

But how do I send the procedure to spawn the particles if the player connects instead of sending him a packet?

charred blaze
echo basalt
#
int number = Reflect.aField(MyObject.class, "myNumber").getValue(myObject);
echo basalt
#

It's like 150 lines of code

#

nothing special

charred blaze
torn badge
echo basalt
echo basalt
#
Reflect.aField(MyObject.class, "value").setValue(myObject, 123);
west prairie
# opal carbon what
                if(this.players[i] != null)
                    if(this.players[i].getWorld().getName().contentEquals(this.worldName))
                        this.players[i].getHandle().
                    else
                        this.players[i] = null;
        }
        ```

I mean it doesn't solve my problem of how to spawn the particle when the player logs in.
echo basalt
#

You just don't need to use nms to spawn particles

#

or to check for world names

west prairie
#

I understood not to use a package. So I define another procedure, and how I connect it to my loop

charred blaze
#

is there any tutorials for reflections explaining what that is?

eternal oxide
#

getWorld().spawnParticle(...

echo basalt
charred blaze
#

because i have no clue what your code does

#

thanks

echo basalt
west prairie
eternal oxide
#

much

west prairie
#

I had set false without knowing much to test. I don't see it in the docs of the API

eternal oxide
#

there are various spawnParticle methods. Depending on what you need

#

look at teh API I linked and see which bool it is and its effect

#

force - whether to send the particle to players within an extended range and encourage their client to render it regardless of settings

low marlin
#

I'm trying to run a for loop in an on disable but it only detects the first person in a list, how can I do so it detects everyone?

eternal oxide
#

?nocode

undone axleBOT
#

It’s hard to answer a programming question without code
Oh no! You ran into a problem. But no worries, people are willing to help, but first they need to see your code. This is because otherwise, they would be providing help based on guesses instead of concrete knowledge. Whether it be a compile error, runtime error, or an unexpected output, I'm sure that if you were to provide code, you'd receive a quick solution.

low marlin
#
public void onDisable() {
       for (int i = 0 ; i < names.size(); i++) {
            killArmorStand(armorStands.get(names.get(i)));
            barmorStands.remove(names.get(i));
            names.remove(names.get(i));
  
        }        
    }
#

nothing much to explain

#

if the list contains 2 names it only gets the first one

eternal oxide
#

because you remove the name at the first iteration you have one less on the next

torn badge
#

Lists are iterable, you don’t need to count i

eternal oxide
#

just clear names after teh for loop is finished

low marlin
#

ah I'll try

#

thanks

eternal oxide
#

so delete names.remove(names.get(i));

west prairie
eternal oxide
#

location

#

its just x,y,z

west prairie
#

Yes but I was doing a s.getData() to get the positions, can I use it in the API function?

eternal oxide
#

in your code you have s.getX() etc

#

those would be your x,y,z for the particle

#

just plug in the data to teh API call the same as you created the packet before

west prairie
# eternal oxide just plug in the data to teh API call the same as you created the packet before

I directly put it in the loop. But there's something I don't understand.


(The Old) new ParticleParamBlock(Particles.FALLING_DUST, s.getData()), false, s.getX() + r.nextFloat(), s.getY(), s.getZ() + r.nextFloat(), 0, 0, 0, 1, 0);



for(int i = 0; i < this.players.length; i++)
    if(this.players[i] != null)
        this.players[i].getWorld().spawnParticle(Particles.FALLING_DUST,s.getX() + r.nextFloat(), s.getY(), s.getZ() + r.nextFloat(), 0, 0, 0, 0, 1,false);```
eternal oxide
#

looks good

young knoll
#

Do I even want to know why we are using packets

eternal oxide
#

youy only need to send the packet once

#

you only need to spawn teh particle once, not per player

#

as it was a packet before you sent it to each player

#

now you are using API it decides who to send it to

#

so no more for loop for player count

west prairie
#

Oh yes, okay, that changes a lot. just need the spawn function then

#
        if(this.players == null || this.players.length == 0)
            return;
        
        final Random r = ThreadLocalRandom.current();
        
        for(LeafSpot s : this.spots) {
            if(r.nextInt(100) > plantChance)
                continue;

            this.players.getWorld().spawnParticle(Particles.FALLING_DUST,s.getX() + r.nextFloat(), s.getY(), s.getZ() + r.nextFloat(), 0, 0, 0, 0, 1,false);

But now there is an error on the getWorld()

eternal oxide
#

can you get teh world from your LeafSpot ?

#

it must be some Lib class or something

young knoll
#

You can't get the world from an array of players

#

You need just a single player

charred blaze
#

reflections is so cool thing

eternal oxide
#

yep, if you can;t get it from your LeafSpot (which would be cleanest) just do this.players[0].getWorld()

#

it may be players.get[0].getWorld()

#

not sure what your players field is

west prairie
#

How could I add it to my LeafSpot?

eternal oxide
#

?paste your LeafSpot class

undone axleBOT
west prairie
#

If it's better I'd like to change that ahah

charred blaze
west prairie
young knoll
#

MyObject.class

charred blaze
smoky oak
#

whats the maven name for 1.20.2?

#

its saying 'cant find artifact org.spigotmc:spigot-api:jar:javadoc:1.20.2-R0.1-SNAPSHOT'

river oracle
river oracle
#

make sure you have the repositor too

smoky oak
#

yea thats what i did i clicked that -U thing

#

also shouldnt it load from .m2

young knoll
smoky oak
#

i ran --generate-docs

clever lantern
#

i thought about a way to switch item state and had an idea that clicking an item with shift would do that, is it possible?

young knoll
#

In an inventory? yeah you can detect that

clever lantern
#

yeah

charred blaze
young knoll
#

what

charred blaze
#

what

river oracle
#

they were given an example on how reflection works and can't apply it

eternal oxide
# charred blaze what
package net.minecraft.server.dedicated;

import java.nio.file.Path;
import java.util.function.UnaryOperator;

public class DedicatedServerSettings {

    private final Path source;
    private DedicatedServerProperties properties;

    public DedicatedServerSettings(Path path) {
        this.source = path;
        this.properties = DedicatedServerProperties.fromFile(path);
    }

    public DedicatedServerProperties getProperties() {
        return this.properties;
    }

    public void forceSave() {
        this.properties.store(this.source);
    }

    public DedicatedServerSettings update(UnaryOperator<DedicatedServerProperties> unaryoperator) {
        (this.properties = (DedicatedServerProperties) unaryoperator.apply(this.properties)).store(this.source);
        return this;
    }
}```
young knoll
#

What are we reflecting

eternal oxide
charred blaze
eternal oxide
#

yes, you want the properties field

west prairie
charred blaze
#

why is reflect not resolving. i thought it came with java

eternal oxide
echo basalt
#

it's literally the gist I sent you

smoky oak
#

bleh it is in the .m2 folder, and the -U thing doesnt work

#

how do i force intelliJ to reread .m2

eternal oxide
west prairie
charred blaze
river oracle
eternal oxide
#

level is the NMS world

#

you need to know what world your particle is to spawn in

smoky oak
eternal oxide
#

so s.getData().getLevel()

#

or something close

river oracle
#

idk its like File > Invalidate Caches

smoky oak
#

hm this is weird it finds one of em

#

also imma try that

charred blaze
#

is reflect supported in java 8?

echo basalt
#

Reflect is that class I made because the reflection API is a pain

charred blaze
smoky oak
echo basalt
charred blaze
echo basalt
#

Yes

charred blaze
#

wher

#

e

umbral ridge
#

what is gist

eternal oxide
#

scroll up

smoky oak
charred blaze
#

ok

#

only the first class?

umbral ridge
echo basalt
#

It's literally like a pastebin but for multiple files

charred blaze
#

so i just need to import that code?

#

ok

echo basalt
#

Pretty much

clever lantern
young knoll
#

InventoryClickEvent

west prairie
eternal oxide
#

it shoudl be available in there somewhere

#

it may be getLevel or just level

#

or something close

clever lantern
west prairie
#

But would it be to replace getWorld()?

eternal oxide
#

else you'd be spwning yoru particles in every world

#

level is the NMS version

#

you'd get teh Bukkit world from it

charred blaze
#

why isnt this working again?

west prairie
#

this.players.getData().getLevel().spawnParticle(Particles.FALLING_DUST, s.getX() + r.nextFloat(), s.getY(), s.getZ() + r.nextFloat(), 0, 0, 0, 0, 1,false); ?

eternal oxide
#

no

#

does getLevel() show an error?

west prairie
#

Yes

eternal oxide
#

also no, you shoudl be doing this on s not players

charred blaze
#

Am i making some progress?

        String toString = reflectedClass.invoke(myObject, "toString");
        DedicatedServerSettings settings = dedicatedServer.settings;
        DedicatedServerProperties currentProperties = getField(settings, "properties", DedicatedServerProperties.class);

        Properties javaProperties = (Properties) currentProperties.properties.clone();
        javaProperties.setProperty("hide-online-players", true);
        OptionSet options = getField(currentProperties, "options", OptionSet.class); // found in DedicatedServerProperties' parent class

        DedicatedServerProperties hackedProperties = new DedicatedServerProperties(javaProperties, options);
        setField(settings, "properties", hackedProperties);```
smoky oak
#

imma restart and see if that fixes it

west prairie
#

Same error with s.getLevel()

eternal oxide
#

s.getData().getL...

west prairie
#

Same

#

error

#

s.getData().getLevel().spawnParticle(Particles.FALLING_DUST, s.getX() + r.nextFloat(), s.getY(), s.getZ() + r.nextFloat(), 0, 0, 0, 0, 1,false);

eternal oxide
#

what is available after getData(). ?

charred blaze
west prairie
#

is, equal, hashcode, block, tick.. lot of things x)

eternal oxide
#

use block and see if you find level

charred blaze
#

why

west prairie
#

No level

eternal oxide
#

look for one, its in there somewhere

echo basalt
smoky oak
#

ffs maven
i invalidated caches, restarted the system, and verified that the files is in .m2, nothing is working

smoky oak
#

is javadock just fucked in general

charred blaze
west prairie
eternal oxide
#

there has to be a world element somewhere in the original code, else you would be spawning the particle in teh same place in any world the player was in

#

it has to be in the IBlockData somewwhere

echo basalt
#
ReflectedClass<DedicatedServerSetting> settingsClass = Reflect.aClass(DedicatedServerSettings.class);
ReflectedClass<DedicatedServerProperties> propertiesClass = Reflect.aClass(DedicatedServerProperties.class);

DedicatedServerSettings settings = dedicatedServer.settings;
DedicatedServerProperties currentProperties = settingsClass.getField(settings, "properties");
Properties javaProperties = currentProperties.properties.clone();
OptionSet options = propertiesClass.getField(currentProperties, "options");

DedicatedServerProperties hackedProperties = new DedicatedServerProperties(javaProperties, options);
settingsClass.setField(settings, "properties", hackedProperties);
#

type beat

smoky oak
minor junco
#

@sullen marlin idk if you remember my issue where RED_DYE wasn't shown in API version 1.13. Well I get an exception on the server too, which uses 1.13, that XXX_DYE isn't a valid enumeration field. Is that normal behaviour, am I missing something?

charred blaze
charred blaze
#

but doesnt work

west prairie
eternal oxide
#

its not, you shoudl move away from it too

#

how are you sourcing these Leaf things?

#

LeafSpot

#

where do they come from?

west prairie
#

okay i'm fucking idiot

#
        world = chunk.getWorld();
        worldName = world.getName();
        x = chunk.getX();
        z = chunk.getZ();
        rx = x * 16;
        rz = z * 16;
        
        setPlayers(chunk.getPlayers());
        
        spots = new ArrayList<LeafSpot>();
    }
eternal oxide
#

ok, so the spots belong to a LeafChunk

west prairie
#

Actually no, I can't use chuck.getWorld()?

eternal oxide
#

so you should be able to get teh world from teh chunk

#

yes

charred blaze
#

@echo basalt

#

how do i import joptsimple

#

it just doesnt work

#

can you show me your gradle file

echo basalt
#

no chad_vibe I gotta go soon

west prairie
#
        if(this.players == null || this.players.length == 0)
            return;
        
        final Random r = ThreadLocalRandom.current();
        
        for(LeafSpot s : this.spots) {
            if(r.nextInt(100) > plantChance)
                continue;

            chunk.getWorld().spawnParticle(Particles.FALLING_DUST, s.getX() + r.nextFloat(), s.getY(), s.getZ() + r.nextFloat(), 0, 0, 0, 0, 1,false);```
#

So i can do that

#

But i need to define the chunk for each function call

eternal oxide
#

yes

#

it seems a bad way to do it by tracking players in a chunk

west prairie
#

Yes no I don't think it's a good idea

#

I don't even know how to define each chunk for function calls

eternal oxide
#

is this an existing plugin?

west prairie
#

Yes basic, I retrieved the source and I want to use the base

eternal oxide
#

um, what is the class this is in?

west prairie
#

But he is old

eternal oxide
#

as it refers to this.spots, it looks like it's already in a chunk class

west prairie
#

the Spots is on the same class of void plant

rotund ravine
#

spots

eternal oxide
#

so you should be able to this.getWorld()

west prairie
#

Nop, error

eternal oxide
#

this.world

west prairie
#

YEAR

#

Is working

#

(In the IDE)

eternal oxide
#

then all you need is this.world.spawnParticle(...

west prairie
#

But then I no longer need to target this.player?

eternal oxide
#

no

west prairie
#

Okay perfect so

#

But i have one error on the particle now

#

this.world.spawnParticle(Particles.FALLING_DUST, s.getX() + r.nextFloat(), s.getY(), s.getZ() + r.nextFloat(), 0, 0, 0, 0, 1,false);

eternal oxide
#

yes

west prairie
#

What the different with Particle and Particles ?

chrome beacon
#

Two different classes

west prairie
#

with Particle i didn't have error

#

and with Particles i have

eternal oxide
#

Particles is an Enum

chrome beacon
#

The Particles class is nms I assume

eternal oxide
#

you shoudl be using Particle not Particles

west prairie
#

Okayyy perfect so

#

I love you @eternal oxide

eternal oxide
#

be sure to clean up your imports so you get rid of the unused ones

west prairie
#

but i didn't try in game for the moment lol

charred blaze
#

Can anyone PLEASE help me importing joptsimple in gradle

west prairie
#

Year he become gray in IntelJ

#

It's easy to remove

charred blaze
#

i tried this but it didnt work

chrome beacon
#

?notworking

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.

charred blaze
charred blaze
#

i dont get any error

chrome beacon
#

ok than I say it work and so it works

#

what do you expect me to do here

charred blaze
#

import joptsimple.*

#

doesnt work

#

theres nothing

#

is this info enough?

eternal oxide
#

the import shoudl be net.sf.jopt...

charred blaze
#

oh..

west prairie
#

I have last question @eternal oxide

        return CraftMagicNumbers.getBlock(material).getBlockData();
    }```

Possible to do this without NMS?
eternal oxide
#

I can;t help you on Gradle. If it was Maven you didn;t update/refresh

obsidian drift
#

Is there an asynchronous event that is called after a player has been authenticated?

west prairie
eternal oxide
#

don;t bother with IBlockData and just store teh material

#

unless you need something from IBlockData

#

does the plugin use IBlockData anywhere?

west prairie
#

just two times

eternal oxide
#

to do what?

west prairie
#

just that

#
        types.clear();
        
        types.put(Material.OAK_LEAVES, getIBlockData(Material.OAK_LEAVES));
        types.put(Material.BIRCH_LEAVES, getIBlockData(Material.BIRCH_LEAVES));
        types.put(Material.SPRUCE_LEAVES, getIBlockData(Material.SPRUCE_LEAVES));
        types.put(Material.JUNGLE_LEAVES, getIBlockData(Material.JUNGLE_LEAVES));
        types.put(Material.ACACIA_LEAVES, getIBlockData(Material.ACACIA_LEAVES));
        types.put(Material.DARK_OAK_LEAVES, getIBlockData(Material.DARK_OAK_LEAVES));
        
        val section = Leaves.getInstance().getConfiguration().getSource().getConfigurationSection("colors");
        
        if(section != null) {
            for(String key : section.getKeys(false)) {
                Material leaf = Material.valueOf(key);
                Material color = section.isString(key) ? Material.valueOf(section.getString(key)) : null;
                
                if(leaf == null || !types.containsKey(leaf)) {
                    Leaves.getInstance().getLogger().warning("Leaf type \"" + key + "\" does not exist");
                    continue;
                }
                
                if(color == null) {
                    Leaves.getInstance().getLogger().warning("Material color for leaf type " + leaf.name() + " does not exist");
                    continue;
                }
                
                types.replace(leaf, getIBlockData(color));
            }
        }
    }
    
    public IBlockData data(Material material) {
        for(Map.Entry<Material, IBlockData> e : types.entrySet())
            if(e.getKey().equals(material))
                return e.getValue();
        return null;
    }
    
    public IBlock create(Material material) {
        return CraftMagicNumbers.getBlock(material).getBlockData();
    }

}```
#

Afterwards there is only an error on the getBlockData(), maybe it would be easier to fix

eternal oxide
#

I don;t see why it's using IBlockData at all

#

all the plugin does is spawn particles under the leaves?

west prairie
#

Yes x)

#

It was developed in 1.16

eternal oxide
#

in that case there is no need for IBlockData at all

#

just store teh color mapped to the leaf

#

so Material, Material by the looks

west prairie
#

Hmm, I don't see how

eternal oxide
#

instead of Material, IBlockData

west prairie
#

what is ellooks?

eternal oxide
#

what is in yoru colors section of your config?

west prairie
#
# by default all colors are set to the leaf block they originated from
# example usage:
#   BIRCH_LEAVES: YELLOW_WOOL````
eternal oxide
#

I don;t see anywhere you set teh color of the Particle

chrome beacon
#

It would be yellow wool

#

It's spawning dust particles

west prairie
#

val section = Leaves.getInstance().getConfiguration().getSource().getConfigurationSection("colors"); ?

eternal oxide
#

which means you need to create a DustOption to set to the T value in spawnParticle

rotund ravine
eternal oxide
#

not kotlin

rotund ravine
#

dafuq val?

chrome beacon
#

Lombok

eternal oxide
#

yeah tell me about it

chrome beacon
#

has val

eternal night
#

Yea LOOL

#

It could 100% yield a CB stack

west prairie
#

start by adjusting the plugin and maybe then use the configuration haha

eternal oxide
#

yes

west prairie
#

So I change all IblockData to Material?

eternal oxide
#

for now, yes

smoky oak
#

hey elgar can u help me with this?

#

im losing my mind over maven

west prairie
# eternal oxide for now, yes
        for(Map.Entry<Material, IBlockData> e : types.entrySet())
            if(e.getKey().equals(material))
                return e.getValue(); <--- Here
        return null;```

Okay so, for the return, what can we put since we no longer use IblockData
chrome beacon
undone axleBOT
#

If you have a question, please just ask it. Don't look for staff or topic experts. Don't ask to ask or ask if people are awake or available. Just ask the question to the channel straight out, and wait patiently for a reply. Make sure you use the right channel regarding the topic of your question. Create a thread in case the channel is already in use!

smoky oak
#

i already did that earlier but i can repeat myself if that helps

#

i ran buildtools for 1.20.2 and am trying to get the .m2 stuff to get recognized by maven

#

it works for the spigot-api, but not the javadoc

obsidian drift
#

If I am using BungeeCord, could I assume on my Spigot instance that every call to AsyncPlayerPreLoginEvent is about a user that is definetely authenticated?

smoky oak
#

i have invalidated the caches and restarted my system

chrome beacon
#

Did you build the javadoc

smoky oak
#

yes i checked that specifically

#

the file is there

rotund ravine
smoky oak
#

wait what

#

why is the file not a jar file

chrome beacon
#

because it doesn't exist

smoky oak
#

did buildtools mess up again?

#

no i ran --generate-docs

#

and it said build success

#

dafuq

frigid latch
#

wondering if it was possible to create a plugin that turns the mc moon red once a real life day. we can assume all players use a specific texture pack that includes the red moon texture. i mean apparently its not possible to change textures but what if we somehow could create two alternating sky textures

chrome beacon
#

You can do that

#

Assuming you're on a modern version where core shaders are supported

frigid latch
#

thats great, ty

smoky oak
#

oh olivio is there a way to only build the jd?

chrome beacon
smoky oak
#

how? do i have to open the generated files and install it from there?

#

also this is weird, i def ran this in this directory before

#

but its saying 'no previous run found, generating jd'

#

alright now its just messing with me

#

logs say 'javadoc generated successfully' but the .m2 folder aint got that file

#

ah yes i see

#

it copies the spigot file to m2 but not the javadoc

#

wtf

charred blaze
#

does anyone use gradle here

chrome beacon
#

probably

west prairie
#

@eternal oxide Can i create topic for helping with IBlockData ?

eternal oxide
#

give me a few, coking dinner

west prairie
#

Okay

charred blaze
#

switched to maven

#

cannot access nms now

rotund ravine
#

?nms

charred blaze
charred blaze
rotund ravine
#

cool stuff

eternal oxide
#

@worldly ingot No one did a PR for this?

worldly ingot
#

For?

west prairie
#

@eternal oxide Ping me when you finish eating, enjoy your meal

eternal oxide
#

forgot the link 🙂

worldly ingot
#

Not that I'm aware of

eternal oxide
#

bummer

#

this woudl have been perfect for Sheikins

west prairie
eternal oxide
#

It was a method to obtain a blocks color from the BlockData

#

but it never got written/added

smoky oak
#

howd u define block color? do you mean the values it has on a map?

eternal oxide
#
    public static Color getColor(Material material) {
        net.minecraft.world.level.block.Block block = CraftMagicNumbers.getBlock(material);
        net.minecraft.world.level.material.MaterialColor mc = block.defaultMaterialColor();
        return new Color(mc.col);
    }```
smoky oak
#

huh

west prairie
eternal oxide
#

its the internal map color for a block

eternal oxide
west prairie
#

Okay

#

But i didn't find color

#

It's a NMS import ?

eternal oxide
#

its an md5 import

#

import net.md_5.bungee.api.ChatColor;

west prairie
#

I can use and Bungee import on a Spigot plugin?

eternal oxide
#

yes

weak meteor
#

i have a ExplosionPrimeEvent and some Blocks coordinates

west prairie
#

With the import he didn't find Color

weak meteor
#

obviously this blocks will not explode

west prairie
#

oh fuck

weak meteor
#

and i want to make those specific blocks not explodable

west prairie
#

i need to import bungeecord so?

weak meteor
#

but the other ones yeah

eternal oxide
weak meteor
#

and i cant cancel event cause some blocks are not this special blocks

#

how can i explode some blocks and another ones not?

#

oh nvm

#

think i solved it

west prairie
#

There are several errors

#
        net.minecraft.world.level.block.Block block = CraftMagicNumbers.getBlock(material);
        net.minecraft.world.level.material."MaterialColor" mc = block."defaultMaterialColor"(); "Error"
        return new ChatColor(mc."col"); "Error"
    }````
eternal oxide
#

no, ignore me

#

I'm still cooking so distracted

west prairie
#

x)

#

I m waiting you

eternal oxide
#

correct method is java public static Color getColor(Material material) { net.minecraft.world.level.block.Block block = CraftMagicNumbers.getBlock(material); net.minecraft.world.level.material.MaterialColor mc = block.defaultMaterialColor(); return Color.fromRGB(mc.col); }

#

or should be

#

Color is Bukkit.Color

west prairie
#

Hum

#

Finish eating, we'll see afterwards, it's very sympatic

#

But, same error

eternal oxide
#

its fine in my IDE

#

what version spigot are you building against?

west prairie
#

1.20.2

eternal oxide
#

I'm on 1.19.4 so shoudl be close enough

#

you shoudl have no error in that with the correct imports

#

oh I bet you are not setup properly for nms

west prairie
#
import java.util.Map;

import net.minecraft.world.item.Item;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_20_R2.util.CraftLegacy;
import org.bukkit.craftbukkit.v1_20_R2.util.CraftMagicNumbers;
import net.md_5.bungee.api.ChatColor;```
rotund ravine
#

gj

west prairie
#

I'm missing an import for minecraft.server I guess

eternal oxide
#

?nms follow this to setup correctly to use NMS

west prairie
#

No it's correct setup

#

I already did all the buildtools

#

Afterwards I didn't do it in this project specifically

#

I've done it in other projects

#

But my .m2 is all Mapped

#

I don't use Meaven on this project either, I imported it manually with the .jar

eternal oxide
#

ah

#

then you are depending on a full spigot jar?

west prairie
#

On several yes

eternal oxide
#

that make it difficult

west prairie
#

I have the mapped

#

the spigot snapshot

#

the minecraft_server

#

I should go through Meaven do you think?

eternal oxide
#

it would be better

west prairie
#

Afterwards it will not change anything in the code normally

#

There will always be this error

#

All my imports are correct, if you have an import that I didn't send it to me but I don't think the problem comes from that

eternal oxide
#

show the full method you have

west prairie
eternal oxide
#

there shoudl be no error on your getColor method

#

you will have errors elsewhere due to your Map type

west prairie
#

He cannot resolve MaterialColor

eternal oxide
#

its possibly changed since 1.19 then

#

do . after material and see what choices. It's likely changed name

west prairie
#

MaterialMapColor

#

MapColor

river oracle
#

seems like not a very hard addition

eternal oxide
#

that would be cool

eternal oxide
west prairie
#

and for defaultMaterialColor i use defaultMapColor?

eternal oxide
#

probably

west prairie
#

All line was in error

river oracle
glad prawn
west prairie
#

Because with the IBlockData there was only one error

eternal oxide
#

no

#

we are pulling color from it

#

so as to not need IBlockData

west prairie
#

Yeah, but with Color it doesn't seem to work

eternal oxide
#

I'll have to run BT to test on 1.20

west prairie
eternal oxide
#

running it now

west prairie
#

okay big thanks

eternal oxide
#

This works for 1.20.2java public static Color getColor(Material material) { net.minecraft.world.level.block.Block block = CraftMagicNumbers.getBlock(material); MapColor mc = block.defaultMapColor(); return Color.fromRGB(mc.col); }

river oracle
#

@eternal oxide 👍 made a PR wasn't that bad surprisingly

eternal oxide
#

nice

river oracle
#

just a one liner :P

eternal night
#

😵

weak meteor
#

i have a question

#

i have an explosion like this

#

i got a List of blocks that can be broken, how can i modify the explosion to make the blocks of the list not to dissapear without modifying the explosion form itself?

river oracle
# eternal night 😵

today is a great day. Did you know? the 8th of december is an important day? Its the day of the Inventory PR (just like every other day), but that is what makes it so special

weak meteor
#

cause i tried and well:

#

isnt the idea

eternal night
river oracle
# weak meteor

if you don't want the blocks to disappear don't remove them from the list?

river oracle
eternal night
wide coyote
river oracle
weak meteor
#

i refer like

#

List<Blocks> block;

#

then iterate in that list, and in the affected blocks

#

if the affected block is in the list, dont make it dissapear in game

river oracle
#

all affected blocks will be in the list

wide coyote
#

if i remember correctly

river oracle
#

that's how the event works

west prairie
weak meteor
#

like made by myself

river oracle
#

then use EntityExplodeEvent

wide coyote
#

what I said should work then

weak meteor
#

okay

#

and that "list" of affected blocks

#

is?

wide coyote
#

yes

weak meteor
#

yea

wide coyote
#

check the javadocs for that event

#

event.blockList();

weak meteor
#

thanks

eternal oxide
#

yes its mutable

weak meteor
#

thankss

#

ig my codes wrong

#

cause if all the coords and the world is the same, block should remain equal

#

if not

#

air

#

and cancel the event, right?

eternal oxide
#

just remove protected blocks from the BlockList

weak meteor
#

OH

#

okay

weak meteor
#

?

glad prawn
#

dude remove blocks from your list

wide coyote
#

event.blockList().removeIf(b -> list.contains(b.getLocation()))

#

idk if it would work just wrote it through discord

weak meteor
#

it worked

#

BlockIgniteEvent is when blocks fired literally no?

#

like

#

with flint and steel?

wide coyote
#

why not just check the javadocs?

#

instead of asking everything here and waiting for a response

#

trust me, your life would be a lot easier

river oracle
#

?jd-s

undone axleBOT
river oracle
weak meteor
#

oh

#

yeah thanks

weak meteor
#

yk

noble adder
#

can't execute this from console '/execute @p[r=5] ~ ~ ~ playsound random.orb @p'

#

error: The entity UUID provided is in an invalid format

river oracle
#

there are no near players to nowhere

noble adder
#

how do i tell them the player?

umbral ridge
#

@e maybe

#

and type= param

noble adder
#

can you please type full im dumb

#

/execute @e[r=5] ~ ~ ~ playsound random.orb type= param ?

#

not workin btw

umbral ridge
#

what is ~ ~ ~ supposed to be when executed from the console

#

console isn't a world entity, it does not know about ~

chrome beacon
#

What version are you on

umbral ridge
#

i dont know much about console commands but /execute @e[type=player,r=5] could work

noble adder
chrome beacon
#

._.

umbral ridge
#

:(

noble adder
#

what ? 😂

weak meteor
#

1.8.8 is legacy!

noble adder
#

ok...

smoky oak
#

?1.8.8

smoky oak
#

?1.8

noble adder
undone axleBOT
umbral ridge
umbral ridge
#

but i dont know how ~ works via console

noble adder
weak meteor
#

can i change a block blastResistance()?

eternal oxide
#

not really

weak meteor
#

can i tell you what i want to do and maybe get an idea?

smoky oak
#

wellllll

#

you can cancel the explosion and simulate it yourself

green plaza
#

I have server in offline mode. My proxy retrieves mojang uuid from every player that has premium account simulteniously allowing non-premium join the game. But in that case i have 2 diffrent uuid's of premium player on proxy and server. Any option to change this?

eternal oxide
#

no, other than using an auth plugin that allows premium accounts

smoky oak
#

ive no idea how offline uuids work

eternal oxide
#

they are based on name

umbral ridge
#

thats interesting, how do these auth plugins check if player is a premium one?

eternal oxide
#

so to support both online and offline you need a bungee auth plugin to replace teh ids

smoky oak
#

sounds terrible

eternal oxide
#

it is

smoky oak
#

and like youre in brazil

green plaza
eternal oxide
#

you need to forward your id to the server

green plaza
#

And then then set it into gameprofile using reflection?

eternal oxide
#

no, so long as your proxy correctly replaces teh ID it should be the same on proxy and server

green plaza
#

Wdym correctly?

green plaza
eternal oxide
west prairie
#

Cannot resolve symbole "MapColor"

eternal oxide
#

net.minecraft.world.level.material.MapColor

west prairie
#

It's good

#

Thanks @eternal oxide

#

I go try ingame x)

#

@eternal oxide ```public class LeafTypes {

private final HashMap<Material, IBlockData> types;

{
    types = new HashMap<Material, IBlockData>();
}

public void reload() {
    types.clear();

    types.put(Material.OAK_LEAVES, getColor(Material.OAK_LEAVES));
    types.put(Material.BIRCH_LEAVES, getColor(Material.BIRCH_LEAVES));
    types.put(Material.SPRUCE_LEAVES, getColor(Material.SPRUCE_LEAVES));
    types.put(Material.JUNGLE_LEAVES, getColor(Material.JUNGLE_LEAVES));
    types.put(Material.ACACIA_LEAVES, getColor(Material.ACACIA_LEAVES));
    types.put(Material.DARK_OAK_LEAVES, getColor(Material.DARK_OAK_LEAVES));```

Last problem, how to make this compatible with getColor?

eternal oxide
#

this needs to be HashMap<Material, Color>();

#

same in the definition

smoky oak
#

hm, is there a way to scan your source code for possibly problematic areas? Like loops that will run unreasonably often?

eternal oxide
#

run a profiler

eternal oxide
smoky oak
west prairie
#

Line red

eternal oxide
#

change the definition of it above too

west prairie
#

Okay no sorry

#

I m fuking idiot

#

Oh but he create an another error

#
        for(Map.Entry<Material, Color> e : types.entrySet())
            if(e.getKey().equals(material))
                return e.getValue();
        return null;``` With this
eternal oxide
#

change return type from IBlockData to Color

frosty relic
eternal oxide
#

Not in this instance

#

this is to take different material Map colors to apply to particles

trim lake
#

Is there some event called when player equip arrmor or its only interact event (on righclick with item in main hand)/inventory click event?

eternal oxide
#

its also an existing plugin he's updating.

noble adder
#

trying to have /playsound work from console im using spigot 1.8.8

#

can anybody help?

frosty relic
#

Yeah but literally put it in this way doesnt affect nothing and prevents compatibility problems between versions...

ImmutableMap.<XMaterial, Color>builder()
            .put(XMaterial.OAK_LEAVES, Color.RED)
            .build();
eternal oxide
#

yes, but at this point it's no use adding complexity

upper hazel
#

what lengths can inventory have?
54, 9 what next

eternal oxide
#

multiples of 9

upper hazel
#

18 for example can be?

jagged bobcat
#

(1-6)*9

west prairie
eternal oxide
#

Leaves.java:29

river oracle
#

Does anyone know what IBlockAccess is in NMS/ what it does

west prairie
#
    public void onEnable() {
        configuration = new Configuration("config.yml", this, true); <- 29 This
        configuration.load();
        
        map = new LeafMap();
        
        getCommand("leavesreload").setExecutor(new CommandExecutor());
    }```
eternal oxide
#

which is line 29?

west prairie
#

This sorry

minor junco
#

I guess it's load

#

Mhn

eternal oxide
#

does your jar have a config.yml in it?