#help-development

1 messages · Page 1535 of 1

main tangle
#

or cow

#

etc

sage swift
#

set the velocity of a new entity to the velocity of the arrow

worn tundra
sage swift
#

then remove the arrow

quaint mantle
#

does the blockexplodeevent fire when say tnt destroys a block?

sinful python
#

I'd bet it's more likely that it detects when a block causes an explosion - so like tnt

#

I haven't used it though and it doesn't specify on the docs

quaint mantle
#

Yeah, i tested it and it, it gives a list of blocks tnt blew up.

sinful python
#

Huh cool, nevermind

#

If I wanted to store how many times a specific player preformed an action, what would the best way to do that be?

sage swift
#

PDC

sinful python
#

Sorry, what does that stand for?

sage swift
#

?pdc

sinful python
#

Thanks

wraith rapids
#

if you don't need it to be persistent, you can just use a player -> value map

#

a weak hash map ideally

sage swift
#

youre weak

wraith rapids
#

weakness is strength

sinful python
#

I don't really need it to be persistent tbh, it can go poof once the server restarts

earnest sonnet
#

then yea, just use a map

sinful python
#

Yeah hash maps should work well for this

quaint mantle
#

Hey guys ! I have a new problem.

I'm using Gson with my Multimap that I have to turn into a Map<UUID,Collection> to paste it in json when server shut down. Then once server start up it does the reverse, json => Map=>Multimap.

The problem is that when server is online each value is added to the Multimap at the player's UUID entry, but when I restart, it doesnt recognize the UUID anymore and create a NEW UUID entry at the event. So I have a duplicate key in the Json, and once it return into a map it creates an error.

#

So I suspect the conversion of Json=>map=>multimap to not work, since it's impossible to have a duplicate key in a Map, right ?

#

It's really weird because when I have duplicate key in Json after 2nd shut down, the whole plugin gets a Error because it CANNOT creaate a map with duplicate key

#

so wtf

ivory sleet
#

What type parameter did u pass in Collection?

quaint mantle
#

Vector

#

it's Map<UUID,Collection<vector>>

#

turn into Multimap<UUID,Vector>

ivory sleet
#

Pretty sure Vector doesn't have a default TypeAdapter

eternal night
#

^^

#

Tho implementing it as a straight up 3 number array shouldn't be hard

quaint mantle
#

hmmm no idea what is it, is this a functioning of the multimap ?

quaint mantle
#

ah type adapter is from Gson !

ivory sleet
#

you can actually provide Gson a generated type adapter of vector

#

1 sec let me look up

quaint mantle
#

hmm interesting

#

thanks for the help dude you the man

ivory sleet
#
static final Gson GSON;

static {
  Gson gson = new Gson();
  GSON = new GsonBuilder()
    .registerTypeAdapter(Vector.class,gson.getTypeAdapter(Vector.class))
    .yourConfigurations()
    .create();
}

That might work (idr but it may actually scan the class and create an adapter from its scan) else you'll have to create a custom one.

quaint mantle
#

Okay will try, thanks

proud basin
#

Doesn't exist don't forget im on 1.8.8

sage swift
#

then too bad.

#

update from a 7-year-old version

proud basin
#

no

sage swift
#

then you don't get support.

proud basin
#

eat my dust

sage swift
#

very simple logic, we've told you this many times

earnest sonnet
dusk flicker
#

Lmao

proud basin
#

What to switch versions

wraith rapids
#

i will be rude

sage swift
#

do it anthony

ivory sleet
#

Rack I see no about me 😮

wraith rapids
#

there is no reason not to be rude

dusk flicker
proud basin
#

I won't

#

I don't care about your opinion gecko

sage swift
#

do not use sunrisenode the owner is rude and uses 1.8

dusk flicker
sage swift
#

i mean what

ivory sleet
#

ur profile

#

like check mine for instance Ig 🙂

dusk flicker
#

On mobile

ivory sleet
#

oh

#

rip

dusk flicker
#

Not a thing get

wraith rapids
#

heh

#

i can see it on ripcord

dusk flicker
#

On vacation so don't got a pc with discord installed

wraith rapids
#

i guess electron can't do everything after all

proud basin
#

NNY

wraith rapids
#

imagine lacking features on a specific platform despite using electron

ivory sleet
#

🥲

sage swift
#

8 is less than half of 17

dusk flicker
#

No

#

Well

#

Yes

#

I ignored a decimal shut the fuck up I'm smart okay

proud basin
#

👏

earnest sonnet
#

🤣

ivory sleet
#

Math.floor(17/8d) right

sage swift
#

only one of them needs the d

#

and that's 8

ivory sleet
#

Patched in v1.01.2231.32

dusk flicker
#

Haha

wraith rapids
#

Math.floor(13/52)

sage swift
#

14/56*

opal juniper
#

Hmm, anyone have experience with voice servers with java?

sage swift
#

no

#

not very much

opal juniper
#

Lmao

#

You know what - I’ll ask in a different pure java chat

quaint mantle
#

is there a way to get the entity that caused the BlockExplodeEvent?

#

Basically i want to check if the tnt that caused a block to explode has a specific key in its pdc

sage swift
#

wouldnt that be EntityExplodeEvent

quaint mantle
#

that doesnt tell me what blocks it breaks tho

sage swift
#

sure it does

#

blockList()

quaint mantle
#

wtf, im blind. thanks

muted idol
#

how would i go about always displaying a hotbar menu without using bukkit scheduler?

dusk flicker
#

By using the BukkitScheduler

#

Only real way I think you can

#

By hotbar menu I presume you mean action bar

muted idol
#

yea

#

so i'd just be looping this like every two ticks? player.sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message));

sage swift
#

cant you define how long it stays? or is that for titles

muted idol
#

im trying to display how many lives a person has

#

since im making a minigame

#

and not minecraft hearts

#

my own "lives" system

#

i could send you my class

quaint mantle
#

if i set pdc keys on the tnt item, do they not transfer over to the entity when its placed? cause its saying theres no pdc keys now

sage swift
#

nope

wraith rapids
#

they do not, no

#

also, the tnt item is a block item

#

it places a block

digital plinth
#

is there a way to skip a cycle in a runnable

wraith rapids
#

you can't spawn the entity directly afaik

digital plinth
#

his wont work

#

this*

wraith rapids
#

learn java

muted idol
digital plinth
#

uhhh

sage swift
#

confine = false

digital plinth
#

lol

sage swift
#

hmmm

digital plinth
#

ohhhh

#

XDDDDDDDDDDDDDDDDDD

#

typo

quaint mantle
#

so how should I go about differentiating a regular tnt from a custom one?

hexed hatch
#

A lazy way that I used to keep track of custom entities was using scoreboard tags

wraith rapids
#

crying is a good way

#

a block is not an entity

#

you can't assign a tag to it

#

a tnt block is not a tile entity either, so it can't store any additional data

hexed hatch
#

I thought he was talking about tnt in entity form for some reason, my bad

wraith rapids
#

basically you are fucked

hexed hatch
#

Yeah I’m aware I just thought of the entity immediately lol

quaint mantle
#

Its been done before...

wraith rapids
#

you'll need to store the data externally

#

which is ass

#

you'll need to listen to all kinds of block breaks, moves, and places

hexed hatch
#

Another lazy solution specifically for tnt: use the unstable variant and check for that

quaint mantle
#

ree, thats what i was trying to avoid

wraith rapids
#

including withers, pistons, other explosions, players, physics, other plugins

quaint mantle
hexed hatch
#

I’m aware, I’m getting to that

#

Make all of your custom tnt the unstable variant, then in your events check if the tnt is unstable, then check a hashmap or something to see what type it is

#

That’s how I’d do it, but if you’re using different blocks for each custom tnt it will be more difficult

grand imp
#

int counting = 0;
if(cmd.getName().equalsIgnoreCase("add1")) { counting++; }
if(cmd.getName().equalsIgnoreCase("countingtotal")) { p.sendMessage("The counting total is" + counting); }
why doesn't that code work

#

(i didn't copy the oncommand part etc.)

minor vapor
quaint mantle
minor vapor
grand imp
#

Do you have an idea how i could fix this?

summer scroll
wraith rapids
#

learn java

grand imp
grand imp
summer scroll
grand imp
#

In the plugin.yml , yess

lucid jacinth
#

yo so i made a class that broadcasts custom welcome messages whenever a PlayerJoinEvent occurs but the vanilla message still gets broadcasted. i put @EventHandler before the onJoin() method, but do i need to put anything else?

worldly ingot
#

So long as you've (a) put a PlayerJoinEvent in the method args and (b) registered it

lucid jacinth
#

yeah i put PlayerJoinEvent e as a param and used .registerEvents() in the class' constructor, but it still broadcasts my custom welcome as well as the vanilla one. am i missing something to block the vanilla message like an @Override or something?

sage swift
#

you broadcast the message; replace the original instead

quaint mantle
#

if i were to want to give a player a potion but like the potion effect itself and not the effect how would i do so?

sage swift
#

what

quaint mantle
#

like

#

i want to give players a splash potion of instant health

#

how would i do so

quaint mantle
#

ok

#

but

#

how would i actually get the potion itself but not with like the atributes

lucid jacinth
sage swift
#

you want the effect, not the potion item?

quaint mantle
#

i want the potion item

#

like

#

could i do like for example

#

like

steep nova
sage swift
#

and?

#

that's what he wants

steep nova
quaint mantle
#

yes

#

but how to do i get the potion item itself

#

i want to change the meta

sage swift
#

new ItemStack(Material.POTION)

#

crazy stuff, really

#

or splash potion, in your case

quaint mantle
#

ok

#

thank you

minor wraith
#

Hi can someone here say how to install buildtolls on windows?

#

Without git-bash?

sullen marlin
#

java -jar BuildTools.jar

cyan bluff
#

Basically when I type a command it shoots a laser stopping at an entiy or block

#

but the problem is that it doesnt consider 1.17 blocks for some reason, it considers them as air I suppose?

#

anyone know another method to detect if a block is/isnt air that accounts for 1.17 blocks

sullen marlin
#

did you define api-version in plugin.yml

cyan bluff
#

no

#

ill do that now

#

huh it works

#

thanks

hexed hatch
#

Gizmos are rare around here

cyan bluff
#

hmm

#

yeah its just me and you

granite stirrup
weary geyser
#

Why does setBaby(true) when extending EntityCreature not work?

rotund patio
#

so uh, i appear to not be able to dev craftbukkit stuff

#

so i ran java -jar BuildTools.jar, then ./applyPatches.sh

#

but some minecraft classes are missing

granite stirrup
rotund patio
#

well

#

if i dont run the command

#

src/main/java doesnt have net/minecraft stuff

#

im using the latest commit before 1.17

#

sooo

#

@granite stirrup ^

granite stirrup
#

¯_(ツ)_/¯

rotund patio
#

welp someone knows how to build it

#

here is exactly what i did

#
git checkout <hash>
java -jar BuildTools.jar
./applyPatches.sh
#

nothing else

quaint mantle
#

literally all you do is java -jar BuildTools.jar, you shouldnt need to fuck with anything else

rotund patio
#

buildtools builds it right

#

but i want to open it in intellij

#

like a normal person

#

@quaint mantle

#

and i also want to use srg2source to remap some stuff

quaint mantle
#

yeah i have no clue, the instructions say that you can just open it in intellij, are you trying to do craftbukkit or spigot?

rotund patio
#

craftbukkit

#

spigot is just a bunch of patches right

quaint mantle
#

yeah

rotund patio
#

and it should work w/ craftbukkit

#

here lemme delete everyfile, re-checkout and rerun builttools

full mulch
#

heyooo! (when ur done helping the other person xD) can someone explain to me how to change a villager type? Right now I'm trying to use setVillagerata but I am really confused how to use it :/

public class Sick_S extends EntityVillager
{
    
    public Sick_S(Location loc)
    {
        super(EntityTypes.VILLAGER, ((CraftWorld) loc.getWorld()).getHandle());
        
        this.setPosition(loc.getX(), loc.getY(), loc.getZ());
        
        // change the villager types and profession
        
        /*
        this.(VillagerType.PLAINS, VillagerProfession.NONE, 1);    // awk
        this.setVillagerData(getVillagerData());
        */
        
        // set the custom name
        this.setCustomName(new ChatComponentText(ChatColor.RED + "" + ChatColor.BOLD + "Sick (S)"));
        this.setCustomNameVisible(true);
    }
}
rotund patio
#

after i run buildtools

quaint mantle
summer scroll
#

I need help with code design for custom currency with mysql database, so I want to cached the player's balance but want to sync the balance with the database also, how can I do that?

eternal night
#

basically want to load onEnable/onJoin and store onDisconnect/onDisable

#

if you want syncs between that use stores like redis

summer scroll
#

And the players can buy the balance from a webstore too.

#

And I cannot think of any way, what happens when the plugin try to sync the balance and at the same time the player buy something from the in-game shop.

summer scroll
rotund patio
#

just running BuildTools, none of the imports work

quaint mantle
#

hmm, I got no clue. sorry

quaint mantle
rotund patio
#

i git it in CraftBukkit

#

i was running buildtools in a already pulled craftbukkit like an idiot

#

but still

#

opening CraftBukkit/pom.xml doesnt work

quaint mantle
#

oh, wait a sec

hardy swan
#

is your artifactId spigot-api

quaint mantle
#

they want to work in the craftbukkit project

#

its not a plugin

hardy swan
#

oh mb

rotund patio
#

actually i just want to map craftbukkit into mcp

quaint mantle
#

i think you need to use buildtools with extra parameters to install the dependencies

rotund patio
#

either way i need to source to be able to be built because yay Srg2Source

rotund patio
quaint mantle
#

can you copy them over?

rotund patio
#

humm, i will try

#

now we have random compile errors in minecraft's code

quaint mantle
#

is this minecraft code or craftbukkit? minecraft code is fucked in general usually

quaint mantle
rotund patio
#

ugh

#

then srg2source wont work

#

damnit

quaint mantle
#

decompiling minecrafts code back to runnable code is a real pain in the ass

#

I tried it, and theres so many damn errors from the decompiler

rotund patio
#

Forge's fernflower works

quaint mantle
#

i tried it also, same problem

rotund patio
#

😠

#

now i have to manually remap all the files

#

to mcp

quaint mantle
#

I wanted to decompile the code and get a runnable client so i could modify the client without any frameworks, but that died sadly cause i cant figure out how

rotund patio
#

oh

#

:pain:

quaint mantle
#

like, i tried so many decompilers, and shit, and nothing worked correctly /s

rotund patio
#

argh

#

srg2source wont work with broken mc

#

and i cant just use mapping mc jar

#

because yes

#

actually because patches

#

then classes wont exist

#

then i die

#

:(

#

how tf does md5 recompile the files tho

quaint mantle
#

I'll try again just for the hell of it /s

#

He doesnt decompile it back to a runnable client/server afaik

rotund patio
#

then how

quaint mantle
#

i really dont know tbh

#

i wish i knew

rotund patio
#

i guess ill have to use my janky source remapping tool

#

that doesnt care about the context of the file

#

yay for static analysis

crisp citrus
#

ok extremely beginner question but
what are the biggest changes in the spigot api between 1.16.5 andd 1.17? i want to port my plugin as soon as possible but after seeing everyone else having a lot of difficulties i feel i need to ask

quaint mantle
#

1.16.5/1.17

#

There are mappings btw to remap the code

#

yeah, ive done that

#

the problem is decompiling breaks the code

#

and yeah, I'm gonna try redis out, just had a situation were ill need it

#

I tried that program, still generated broken code

summer scroll
#

Can I call method inside the method itself?

public void someMethod(){
  if(something happens){
    someMethod();
  }
}
quaint mantle
#

You have every dependency and stuff right?

#

ye

quaint mantle
#

I open the code in intellij and theres tons of bs casts and other broken shit

summer scroll
quaint mantle
#

Ah there probably is a fair amount of fixing needed

#

I tried fixing the problems but theres just so many. theres also a few i dont even know how to fix

quaint mantle
hardy swan
#

most commonly you need a base case

#

where the if statement fails

summer scroll
hardy swan
#

recursion is actually the best of programming

#

wishful thinking

summer scroll
#

I'm basically creating a shop that choose random items by chance, and I don't want the shop to be empty.

hardy swan
#

guys, is there a rule whereby you shouldn't be running any ides or editors with code that depends on spigot when running buildtools

quaint mantle
#

not that i know of

proud basin
#

How would you guys go about to make a square zone. I'm able to do a circle but not sure how I could do a square

hardy swan
#

zone?

granite stirrup
hardy swan
granite stirrup
#

google has a sense of humour

#

:)

granite stirrup
hardy swan
#

oh that didn't happen to me lmao

proud basin
compact haven
granite stirrup
#

also in some programming languages recursion is actually worse than looping XD

granite stirrup
hardy swan
#

eh wait

#

SAME

#

wtf

#

lol i just got the joke

granite stirrup
#

did you know in some programming languages recursion is actually worse than looping XD

compact haven
#

no way

hardy swan
compact haven
#

did they actually

#

hardcode that into the engine

hardy swan
#

dun mind my font

granite stirrup
compact haven
#

thats actually hilarious

granite stirrup
#

its recursion

hardy swan
#

how is recursion worse than infinite loop

#

I bet those methods are like exponential space complexity

#

prob what they meant

granite stirrup
#

some how looping in same langs are better

hardy swan
#

yea but how are they worse in any langugage lol

granite stirrup
#

than recursion

granite stirrup
hardy swan
#

probably memory overheads?

#

interesting

granite stirrup
#

probs

#

it says this

#

but in some langs its actually faster

#

but most of the time it isnt

hardy swan
#

hmm, I stand towards the software design point of view then

#

fk performance

hardy swan
# granite stirrup it says this

maybe I had a different understanding of the word recursion, as in recursion just means calling itself, cuz if you have

method(int i){
  return method(i-1);
}

then it is a recursion that is pretty iterative.

granite stirrup
#

¯_(ツ)_/¯

compact haven
#

well no im just retarded

#

it would be 1/2 diameter, but you should be using radius

#

ill give an example

proud basin
#

lmao

granite stirrup
#

why is iterating y then x better than iterating x then y?

#

cuz thats what i heard some where

compact haven
#
method List<Block> squareRadius(Location loc, int radius) {
    val blocks = new list of Block
    val bx = loc.getX();
    val by = loc.getY();
    val bz = loc.getZ();

    for (int x = bx - radius; x <= bx + radius; x++) {
        for (int y = by - radius; y <= by + radius; y++) {
            for (int z = ...) {
                blocks.add(loc.getWorld().getBlockAt(x, y, z));
            }
        }
    }
}
#

its like that

#

just with actual code and not something i wrote in a java/kotlin/pseudo blend

compact haven
#

wherever u heard that from is an idiot

sage swift
#

bool == true ? bool : !bool

compact haven
#

thats always true

#

scam

#

scam scam scam

#

had to take a second to parse that in my head xd

compact haven
proud basin
#

is Location loc representing the spawn location?

compact haven
#

its the center location

#

so like player.getLocation() if you want it around the player

granite stirrup
# compact haven its not

oh i think it was something to draw to screen like a image or something so maybe thats why they needed to use y then x cuz it wouldnt be correct if it wasnt

compact haven
#

no

#

it makes no difference

proud basin
#

Ima have to change this a bit doing it in a event

compact haven
#

you dont need to change it at all

granite stirrup
#

¯_(ツ)_/¯

compact haven
#

just declare that as a static method in a utility class

#

or a private method in your event class

proud basin
#

hm

#

What the heck is val?

compact haven
#

well I used val since I'm currently coding kotlin for my project

#

but its also a thing in like java 11

#

or smth

#

its just a regular variable

proud basin
#

ah ok

compact haven
#

in kotlin its a final variable but same difference

granite stirrup
# compact haven it makes no difference

i dont know i swear i heard someone say that iterating y then x has more performance than iterating x then y Idk where i heard it from just from utube idk

compact haven
#

that makes no sense

#

they are both int's

#

y and x and just int's to the computer

#

it has no affect

eternal oxide
#

The only way that would possible have a difference in performance is if you were accessing blocks and iterating X first may cause a chunk load. However no matter what is first at some point the chunk is going to load.

digital plinth
#

how do you make a plugin compatible for multiple versions

#

delete api-version in plugin yml?

eternal oxide
#

using nms or not?

granite stirrup
proud basin
#

@compact haven why didn't you just do ```java
public void UrMomIsSad(Location loc, int radius) {
List<Block> squareRadius = new ArrayList<>();
final double bx = loc.getX();
final double by = loc.getY();
final double bz = loc.getZ();

    for (int x = (int) (bx - radius); x <= bx + radius; x++) {
        for (int y = (int) (by - radius); y <= by + radius; y++) {
            for (int z = (int) (bz - radius); z <= bz + radius; z++) {
                squareRadius.add(loc.getWorld().getBlockAt(x, y, z));
            }
        }
    }
}
lucid jacinth
#

nice method name lmfao

proud basin
#

Thank you

compact haven
#

use getBlockX() instead of getX()

granite stirrup
#

:)

compact haven
#

and the same for the other 2

#

and discard the casting

#

and the reason I didnt is because

#
  1. im lazy
  2. u can do it urself
#

I gave u enough of a hint with the pseudo code xd

proud basin
#

I believe getBlockAt requires integers

compact haven
#

use getBlockX

#

and make the type int instead of double

proud basin
#

Yea

compact haven
#

then discard the casting in the for loops

proud basin
#

I saw that

proud basin
quaint mantle
granite stirrup
#

camelCase is best

proud basin
#

UrMomIsSad is best

granite stirrup
#

jtxPleaseUseCamelCase

proud basin
#

NoSir

granite stirrup
#

whyJtxWhy

proud basin
#

BecauseUrMomIsSad

granite stirrup
#

fuckYou

proud basin
#

I need a test dummy

granite stirrup
#

for what

quaint mantle
#

idkidk volunteers as tribute

proud basin
#

to test square

granite stirrup
minor wraith
#

why can't i get buildtools on one drive?

granite stirrup
#

it isnt supported

#

idk

#

just drag it into one drive when your done

minor wraith
#

then how do i do it on windoes

quaint mantle
#

wtf do you want it on onedrive?

proud basin
#

so do you volunteer idkidk123123

granite stirrup
proud basin
#

aw well your lost

minor wraith
proud basin
#

wait hold up what was the point of the method @compact haven

compact haven
#

to loop blocks in a square

#

you literally asked how to

#

omg

quaint mantle
#

uh, not at all close to what i meant to do, but sure

proud basin
#

lmao

#

So then all I gotta do is ```java
if (squareRadius.contains(radius)) {
e.setCancelled(true);
}

granite stirrup
#

¯_(ツ)_/¯

proud basin
#

oh wait

eternal oxide
proud basin
#

Trying to make it so people can't pvp in the square

#

so spawn

eternal oxide
#

then use a BoundingBox

proud basin
#

What's that?

eternal oxide
digital plinth
#

why not 1.9

eternal oxide
#

create a BoundingBox from the location of two corners that cover the area

#

If you need to test a location is inside teh area you simply use box.contains(Location.toVector())

quaint mantle
digital plinth
#

ohh

#

okay

#

so if i put 1.13 there

dusty herald
#

if you run a 1.13-1.16 server and set the api-version to 1.17, the plugin will only run on 1.17 servers

digital plinth
#

can i still use it on 1.12

granite stirrup
#

should

dusty herald
#

api-version was introduced in 1.13, it wouldn't make a difference

digital plinth
#

okay nice

quaint mantle
#

you can set it to 1.17 and still use it on anything below 1.13 afaik

dusty herald
#

yeah

granite stirrup
#

but use 1.13

#

if u want to support every version

digital plinth
#

okay

dusty herald
#

yes

proud basin
#

Is this even available to 1.8.8?

dusty herald
#

no

proud basin
#

well that doesn't help

dusty herald
#

api-version means nothing to versions under 1.13

proud basin
#

im not talking about that

dusty herald
#

oh

proud basin
#

Talking about BoundingBox

dusty herald
#

what are you talking auot

eternal oxide
#

If you are on 1.8 implement your own BoundingBox. Its not hard and there are plenty of examples out there.

quaint mantle
#

there we go, took a few tried 😂

dusty herald
#

what is that

quaint mantle
#

wool box

#

trying to detect dispensers in a certain radius

granite stirrup
#

XD

quaint mantle
#

oh im an idiot

#

i didnt add it to the list

granite stirrup
#

@quaint mantle someone on here said to me i cant use add on a list?

quaint mantle
#

yes you can..

granite stirrup
#

lol

quaint mantle
#

are they talking about like String[], or List<String>?

proud basin
#
I'm 19, I like cats and technology, especially coding, Server Administration and robotics. I also have 7 Microsoft MTA Certifications
I use ubuntu btw```
quaint mantle
proud basin
#

Thank you, thank you

#

You know what screw box thing

summer scroll
quaint mantle
#

whoever told you that is full of shit

summer scroll
#

yeah lol

quaint mantle
#

List<String> isn't an String list, it's an array of Strings

#

you can't even add an additional string to a string list though

#

what are they on

eternal oxide
#

Yes you can, unless you created an immutable List

proud basin
#

should I Do spawnLoc.getBlock().getLocation() or spawnLoc.getBlock()

dusty herald
#

it depends

#

are you trying to get the location of the block or a block

proud basin
#

location

dusty herald
#

then getLocation

eternal oxide
#

spawnLoc IS a Location

dusty herald
#

oh it is? 😂

#

im blind

granite stirrup
#

im starting to use
List<Object> something = new ArrayList<Object>();
since someone said to use that

dusty herald
#

what

#

why

proud basin
#

this shit doesn't work

#
@EventHandler
    public void onEntityDamage(EntityDamageEvent e) {
        List<Block> squareRadius = new ArrayList<>();
        int radius = 30;
        Location spawnLoc = new Location(Bukkit.getWorld("world"), 118.500, 86, -108.322);
        //Location loc = e.getEntity().getLocation();

        final int bx = spawnLoc.getBlockX();
        final int by = spawnLoc.getBlockY();
        final int bz = spawnLoc.getBlockZ();

        for (int x = (bx - radius); x <= bx + radius; x++) {
            for (int y = (by - radius); y <= by + radius; y++) {
                for (int z = (bz - radius); z <= bz + radius; z++) {
                    squareRadius.add(spawnLoc.getWorld().getBlockAt(x,y,z));
                }
            }
        }

        if (squareRadius.contains(spawnLoc.getBlock())) {
            e.setCancelled(true);
        }
    }
granite stirrup
# dusty herald what

yeah someone said its better practice than doing
ArrayList<Object> something = new ArrayList<Object>();

eternal oxide
proud basin
#

Why not

quaint mantle
eternal oxide
#

all you want to know is if a location is inside an area. you literally need to compare x,y,z

#

no loops nothing

proud basin
#

bruh'

#

you know what I'm trying to do right

eternal oxide
#

trying to prevent pvp within an area?

proud basin
#

yea''

granite stirrup
#

i think someone named Charlie said that its better to use
List<Object> something = new ArrayList<Object>();

eternal oxide
#

one sec I'll write you a method

granite stirrup
dusty herald
#

bruh they said to use List<String> and not ArrayList<String>

#

😂

#

I don't know though, it seems counter-productive to make an Object list when you are going to only store strings in it

granite stirrup
summer scroll
granite stirrup
#

also this is the guy who said this

#

but hes saying not use .add on a list?

#

and idk why

#

but that was ages ago

granite stirrup
#

i made two custom events :)

eternal oxide
# proud basin ```java @EventHandler public void onEntityDamage(EntityDamageEvent e) { ...
    private boolean cancelPVP(Location area, int radius, Location target) {
        
        if (!area.getWorld().equals(target.getWorld())) return false;
        
        int areaXMin = area.getBlockX() - radius;
        int areaXMax = area.getBlockX() + radius;
        int areaYMin = area.getBlockY() - radius;
        int areaYMax = area.getBlockY() + radius;
        int areaZMin = area.getBlockZ() - radius;
        int areaZMax = area.getBlockZ() + radius;
        
        if (target.getBlockX() < areaXMin || target.getBlockX() > areaXMax) return false;
        if (target.getBlockY() < areaYMin || target.getBlockY() > areaYMax) return false;
        if (target.getBlockZ() < areaZMin || target.getBlockZ() > areaZMax) return false;
        
        return true;
    }```
proud basin
#

that’s all i had to check for…

eternal oxide
#

yes

proud basin
#

😠

compact haven
#

w

#

yes, thats all

#

u would only use the method I sent to loop

eternal oxide
#

in yoru listener you use java if (cancelPVP(spawnLoc, radius, event.getEntity().getLocation())) event.setCancelled(true);

proud basin
#

That's what I put

#

oh great didn't work 😢

#

fix it

#

it's the other way around

eternal oxide
#

?

hardy swan
hexed hatch
#

Falling block entities don’t support that kind of meta I believe

proud basin
#

jesus

#

christ

#

I just noticed my map isn't squared

eternal oxide
#

Nope, what I sent should be correct

proud basin
#

ti's a GOD DAMN RECTANGLE

#

I switched it around and it worked fine

ionic reef
sullen marlin
#

that's not spigot

distant topaz
#

hello can i get some help?

granite stirrup
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.

sullen marlin
#

?ask

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.

distant topaz
#

org.bukkit.plugin.InvalidPluginException: Cannot find main class `com.culleystudios.provotes.ProVotes

#

whats this mean?

granite stirrup
sullen marlin
#

it means your plugin is set to use a main class that doesnt exist

distant topaz
#

its a premium plugin i purchased

granite stirrup
#

you got scammed then

distant topaz
#

the author isnt helping

granite stirrup
#

;-;

sullen marlin
#

then ask the author

ionic reef
#

wt

#

do u mean error isnt caused by spigot orr

sullen marlin
#

I mean you're not running spigot

ionic reef
#

sigh

#

paper causing chaos again

#

sorry man

granite stirrup
#

lol its cuz ur trying to divide by 0

#

try and catch the java.lang.ArithmeticException so it doesnt happen again

quaint mantle
#

what the fuck no

#

don't do that

granite stirrup
#

why not

eternal oxide
#

don't divide by zero

quaint mantle
#

don't suppress and silence the error, fix it instead

ionic reef
#

aha

#

also ChatPaginator isnt my code...

#

so isnt really much I can do until paper sorts it out

quaint mantle
#

ik, and you're passing 0 as pageheight

granite stirrup
ionic reef
#

think thats whats happening

#

wait

#

yeah

#

how the hell did my pageheight go bye bye

quaint mantle
#

this dude will try catch Throwable and do nothing about it

#

smh

granite stirrup
#

i mean you could check if its not 0

#

f

#

:(

ionic reef
#

cheers

quaint mantle
#

👏

lucid jacinth
#

is there a kill() method in Player.class or not i cant find it in the spigot library

quaint mantle
#

Player#setHealth(0.0D)

quaint mantle
fleet comet
#

has any1 made a skyblock plugin that willing help me make 1 ? dm me

quaint mantle
summer scroll
silver wadi
#

I'm having some trouble with mainly java but spigot related

#

I save my config in the main class file as per the wiki guide

quasi flint
#

Yes

silver wadi
#

But how do I access the config in another class?

quasi flint
#

Make an instance of ur main class

silver wadi
#

I'm allowed to do that?

quasi flint
#

Public static MainClass instance;

#

Yes

#

instance = this; in on Enable

#

U then call MainClass.instance.getConfig

silver wadi
#

sorry, a little confused

silver wadi
quasi flint
#

On the top of ur class

#

It's a global variable

silver wadi
#

public class App extends JavaPlugin {

#

change this you mean?

#

probably not I'm just misunderstanding

quasi flint
#

Under that line

summer scroll
#

Dependency injection

quasi flint
#

?

silver wadi
#

App.instance.getConfig().getInt("teleport_distance")

#

does this look right?

summer scroll
#

Create constructor that passes the main class instance

silver wadi
#

in the other file

#
App myConfig = new App();

myConfig.getConfig().getInt("teleport_distance")
#

does this work?

quasi flint
#

I directly call the main class instance

#

So MainClass.instance.getConfif

#

If u get better at java u can also use this

silver wadi
#

thanks

quasi flint
#

So I can check please send me ur main class via a dn

#

dm

hazy rock
#

how do i prevet invalid plugin errors like this [06:13:56 ERROR]: Could not load 'plugins/SolarUtils-0.3.3b1.jar' in folder 'plugins'> org.bukkit.plugin.InvalidPluginException: java.lang.ExceptionInInitializerError at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:141) ~[server.jar:git-Paper-414] at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:397) ~[server.jar:git-Paper-414] at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:305) ~[server.jar:git-Paper-414] at org.bukkit.craftbukkit.v1_16_R3.CraftServer.loadPlugins(CraftServer.java:389) ~[server.jar:git-Paper-414] at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:206) ~[server.jar:git-Paper-414] at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:935) ~[server.jar:git-Paper-414] at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:173) ~[server.jar:git-Paper-414] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_212] Caused by: java.lang.ExceptionInInitializerError at java.lang.Class.forName0(Native Method) ~[?:1.8.0_212] at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_212] at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:79) ~[server.jar:git-Paper-414] at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:137) ~[server.jar:git-Paper-414] ... 7 more Caused by: java.lang.NullPointerException at the.suncorp.solarutils.SolarUtils.<clinit>(SolarUtils.java:46) ~[?:?] at java.lang.Class.forName0(Native Method) ~[?:1.8.0_212] at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_212] at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:79) ~[server.jar:git-Paper-414] at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:137) ~[server.jar:git-Paper-414] ... 7 more

sage swift
#

fix the error?

eternal oxide
#

SolarUtils.java:46 null error

hazy rock
#

fuck

#

tf its just public static FileConfiguration config = instance.getConfig();

eternal oxide
#

instance is null

granite stirrup
#

how to fix Some problems were encountered while building the effective model for org.gstudiosx:MyPlugin:jar:1.0 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 105, column 21 It is highly recommended to fix these problems because they threaten the stability of your build. For this reason, future Maven versions might no longer support building such malformed projects.

hazy rock
#

ah ffs i put it before declaring instance = this

#

time to yeet myself off a building

hazy rock
granite stirrup
#

oh wait i think its cuz i didnt specify a version

#

cuz i did xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>8</source> <target>8</target> <encoding>UTF-8</encoding> </configuration> </plugin> and now it works but weird that it didnt need it before ?

hazy rock
#

how do i make something like loginsec's PlayerProfile class? basically i want to store a bunch of data relating to the player that i access from somewhere and then store it to a json when the player logs out

eternal oxide
#

how much data are you needing per player?

hazy rock
eternal oxide
hazy rock
#

and their usernames and stuff

#

how do i store it to a player though

#

its not mentioned anywhere in the docs

hazy rock
#

oh

#

ok

#

thanks for the help

opal juniper
#

You can do this ElgarL

#

?pdc

opal juniper
#

If you didn’t know

eternal oxide
#

handy

granite stirrup
#

tho if you want your plugin to support versions under 1.14 you shouldnt use it since it doesnt work on versions under 1.14 i think

hazy rock
#

im planning on porting it to 1.17 anyway, i doubt any of my users will be on 1,14

hazy rock
#

so i do not need to store in json or yaml or sql or whatever

eternal oxide
#

yes, you can only access it when they are online though

#

it gets saved whenever the player data is saved.

hazy rock
#

well crap, guess i will still need to mess with storing it to a file

#

i need some data to still be accessible afetr the player goes offline

eternal oxide
#

You need it when offline?

hazy rock
#

yeah, im making a /login cmd

#

and i need to store the player's logout spot so i can teleport them there

#

and a /userinfo cmd that returns the logout spot

#

idfk

#

may not actually implement them

opal juniper
#

I mean you could probs just use yaml for that

hazy rock
#

true lol

eternal oxide
#

It sounds like the only part of that which would need access offline would be if you wanted to check their set location

opal juniper
#

^^

#

That is true

hazy rock
#

all players have a pdc by default right?

eternal oxide
#

yes

hazy rock
#

so i can call PersistentDataContainer pdc = p.getPersistentDataContainer(); without it returning null

#

oh

eternal oxide
#

yes

quasi flint
#

quick question: would this code work?

#

public static void createDatabase() {
try{
PreparedStatement query = Connector.con.prepareStatement("CREATE DATABASE IF NOT EXISTS coins");
PreparedStatement database = Connector.con.prepareStatement("SHOW DATABASES LIKE LIBRARY3");
if(database.getResultSet().wasNull()) {
query.executeUpdate();
}
}catch (SQLException e) {

    }
}
sage swift
#

quick question: why don't you try?

quasi flint
#

because i am dumb lol

#

gimme a min

#

nop it does not work

#

ima let the user do some work too

quaint mantle
quasi flint
#

😦

heavy mason
tardy delta
#

?paste

undone axleBOT
heavy mason
#

or that ^^

tardy delta
#

when i interact with something "this works" shows up

opal juniper
#

Just add more sysouts to test what isn’t working

#

Also, are you locking entire chunks?

tardy delta
#

no i'm just saving the lock in the pdc of the chunk

opal juniper
#

Hmm, ok

#

That seems like a bad way to go about it. I would recommend something like redlibs persistent block data but it’s up to you

#

Pdc could work

tardy delta
#

redlibs?

#

oh

eternal oxide
tardy delta
#

its ||

eternal oxide
#

You are also only allowing ONE lock per chunk due to your NamespacedKeys

#

yes it's ||, if it doesn;t satisfy all of those tests it returns

#

if any one of those three fails it returns

#

so if its not a tilestate or not lockable or not openeable it returns

tardy delta
#

ah if i would put a ! before it it would work

eternal oxide
#

a gate would pass as its openable but it would fail both the first two tests

#

no

#

I'm 100% certain I already gave you working code for this a month back.

#

It looks like you broke everything in it 😦

granite stirrup
#

Lol

tardy delta
#

im trying another way

eternal oxide
#

That first quick return is wrong, Your code only allows one lock in the whole chunk by a single player.

tardy delta
#

which one do you mean?

eternal oxide
#

You are calling blockState.update() for some unkown reason

tardy delta
#

owh i left that there

#

smh

eternal oxide
#

This line java private final NamespacedKey keyOwner = new NamespacedKey(Main.getInstance(), "Owner");Will be identical no matter what player it is

#

and as thats your key in the PDC its only ever going to allow a single entry in the PDC.

crisp citrus
#

is it better to have everything static or everything non-static

dusty herald
#

imo non-static, but it is needed sometimes

eternal oxide
#

lastly, once a single lock has been placed, anyone with perms can remove that lock or set a new lock on anything in the chunk

dusty herald
#

i only use static in utility classes

crisp citrus
#

welp time to unstatic everything

opal juniper
#

👏 RedLib Block Data 👏

#

Fourteen Brush ^^

tardy delta
#

oh idk never used it 🤔

opal juniper
#

It’s super easy

#

Just go to the wiki

#

And look for persistent block data

eternal oxide
#

look at the code I sent you originally (a month ago)

#

that line is in it

#
    /**
     * Is this Block a type we want to lock.
     * 
     * @param state
     * @return
     */
    private boolean canLock(BlockState state) {

        return (state instanceof TileState || state instanceof Lockable || state.getBlockData() instanceof Openable);
    }```
Use ```java
if (!canLock(blockState)) return;```
hazy rock
#

pain

#

PersistentDataType.BOOLEAN

#

doesnt exist

eternal oxide
#

(byte)0 or 1

hazy rock
#

w

tardy delta
#

lemme test

#

ah the 3 tests are passed

hazy rock
#

so byte 0 returns false

#

fuck im a dumbass

tardy delta
#

lock part works

eternal oxide
tardy delta
#

only something stupid i did

eternal oxide
#

also you can only have a single lock

#

try locking two blocks

#

by different people

tardy delta
#

it says locked and immediatly you cannot open it

eternal oxide
#

your locks will be overwritten

tardy delta
#

so i've to make a list or something that stores the locks?

eternal oxide
#

?paste

undone axleBOT
eternal oxide
tardy delta
#

but why can there only be one lock in the chunk?

eternal oxide
#

Because thats how you wrote it

#

your key is the same no matter who places your lock and you have nothing indicating the location

eternal oxide
tardy delta
#

owh yea i forgot to change that i used it before it saved the owner on the block itself and there could be only one lock

#

what should i put there then?

#

the players uuid?

eternal oxide
#

You really need to read the original code I gave you, and understand it. It does all that. You literally just need to copy the sections you want.

tardy delta
#

and why working with locations?

eternal oxide
#

what do you mean?

tardy delta
#

String s = block.getX() + "/" + block.getY() + "/" + block.getZ();
NamespacedKey key = new NamespacedKey(MagmaBuildNetwork.getPlugin(), s);

eternal oxide
#

so the key corresponds to the block location

tardy delta
#

and are you using that location any further?

eternal oxide
#

yes, read the code. you use it to check if there is a lock on that block

tardy delta
#

well i was using this but i have to modify it so it checks for the location

if (container.has(keyOwner, PersistentDataType.STRING) && CommandHandler.getPlayersWantingLock()
                .contains(p.getUniqueId())) {
            p.sendMessage(ChatColor.RED + "This block is already locked!");
fiery inlet
#

What does everyone in here prefer?

Java 16.0

Java 1.8

?

summer scroll
#

For spigot development now, still java 8

tardy delta
#

8

eternal oxide
fiery inlet
#

Isn't 16.0 better though is my thought process xd

eternal oxide
#

java 16 is required for MC 1.17

fiery inlet
#

So getting used to it is a good idea

eternal oxide
#

yes

summer scroll
#

It is better, but for plugin development Java 8 still the best.

fiery inlet
#

but why

#

is the good question

summer scroll
#

Compability

tardy delta
#

so i have to check if the location is the same as the one saved in the key and then fix the key will be different for each player?

eternal oxide
#

the key shoudl be different for every block

tardy delta
#

uh yes

summer scroll
fiery inlet
#

but it does lol?

#

i wrote in java 16 yesterday, worked fine

summer scroll
#

Plugin java 16, but your server is java 8, then it won't work.

fiery inlet
#

im java version 16

#

and its localhost

#

so it should

summer scroll
#

If the server is java 16, but you're compiling plugin in java 8, it should work.

#

Sorry, I mean if the plugin is java 16 and the server still java 8, the plugin won't work.

tardy delta
#

im completely stucked now

fiery inlet
#

im only developing to learn atm anyways

#

im not publishing anything xd

chrome beacon
eternal oxide
#

Yes a plugin written in 16 will work on 8, IF you set the compatibility to be 8

fiery inlet
#

wdym "set the compatibilty to be 8"

tardy delta
tribal holly
#

Pure java question : is the form builder of intellij bugged ? or work everytime ? i'm trying to show a jlist with element but don't work

fiery inlet
#

How do you get the player in a jump event... ?

tribal holly
tardy delta
#

lol

earnest sonnet
tribal holly
#

you have to determine your self with getfrom and getTo on playerMoveEvent

fiery inlet
#

there is JumpEvent

#

whatever that is

summer scroll
fiery inlet
#

ohh

tribal holly
#

i'll be glade to know what is the name of the event your talking

tribal holly
earnest sonnet
fiery inlet
#

can u change from spigot to paper after making the project

#

without changing 100 dependencies

fiery inlet
tribal holly
#

google

earnest sonnet
fiery inlet
#

well it only says how to make a paper plugin not how to change to damnit

tribal holly
#

take your brain and use it

#

you juste have to change maven dependencies

summer scroll
#

Just change the dependency from spigot-api to the paper api, you can google the repo

fiery inlet
#

yeah found it ty

#

oh it cant find it graet

#

f you intellij

#

out of magic it works ok

tardy delta
earnest sonnet
fiery inlet
#

how does everyone in here do colors

#

i feel like doing ChatColor.translateAlternateColorcodes gets a bit too long

tardy delta
#

i have that method in an utils class

#

and every time i need it i just do Utils.color("")

weary geyser
#

Does anyone know why setBaby(true) does not work when extending EntityCreature? (NMS)

quaint mantle
weary geyser
#

Alr

quaint mantle
#

or cast it to Bukkit entity

earnest sonnet
weary geyser
fiery inlet
tardy delta
#

i did this

public static String color(String args) {
        return ChatColor.translateAlternateColorCodes('&', args);
    }
quaint mantle
fiery inlet
#

it doesnt recognize the chatcolor function

quaint mantle
tardy delta
#

import org.bukkit.ChatColor; ?

fiery inlet
#

i did

quaint mantle
#

not bukkit

tardy delta
#

smh

fiery inlet
#

whats even the difference of those

quaint mantle
#

import net.md_5.bungee.api.ChatColor;

#

That's more useful

fiery inlet
#

it still wont let me use it

quaint mantle
#

and support 1.16+ HEX

fiery inlet
#

oh thats why lol

#

i called my class ChatColor

tardy delta
#

lol

fiery inlet
#

and whenever i did ChatColor.
it referenced to the class

weary geyser
#

@quaint mantle The key's "isBaby" right

fiery inlet
#

so good

#

it doesnt even have to import it its part of api

#

ok good md_5

quaint mantle
weary geyser
#

Yup

#

Thanks

quaint mantle
#

IsBaby with upper I

weary geyser
#

Yeah

#

Gotcha

quaint mantle
#

i'm datapacker

#

and know a lot of about nbt)

#

but nms scared me

weary geyser
#

Lol

quaint mantle
#

and nbt-api is more comfortable to use for me

weary geyser
#

Do you just do (Entity) this to cast to Entity from EntityCreature

#

Yeah

#

I'm new to NMS

quaint mantle
weary geyser
#

Create a NBTEntity

quaint mantle
#

Why are you need this?

#

for what

weary geyser
#

To change the NBT

#

IsBaby

quaint mantle
#

you can use simply bukkit entity + NBT-API instead NMS EntityCreature

weary geyser
#

Yes but I'm using custom pathfinder goals too

#

So I need to use NMS too

quaint mantle
#

ah

#

fucking shit, fucking pathfinder, fucking nms

weary geyser
#

Lmfao

quaint mantle
#

i don't use EntityCreature most of the time

#

i can't help you

weary geyser
#

Is there any way to convert it to a bukkit entity

#

So EntityCreature -> org.bukkit.entity.Entity

chrome beacon
#

Convert with UUID?

quaint mantle
#

but you need already convert it

quaint mantle
fiery inlet
#

anyone know why this happens

tardy delta
#

yes

chrome beacon
tardy delta
#

are you using maven?

fiery inlet
#

yeah

quaint mantle
weary geyser
#

And check?

#

Or how?

quaint mantle
#

if you upload it in dependecies

chrome beacon
#

No Bukkit has a method for getting entity with uuid

fiery inlet
#

i added to libraries

weary geyser
#

Thanks

quaint mantle
tardy delta
#

put this in your pom.xml

<repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
quaint mantle
#

use pom.xml

tardy delta
#

and this

<!--Vault API-->
        <dependency>
            <groupId>com.github.MilkBowl</groupId>
            <artifactId>VaultAPI</artifactId>
            <version>1.7</version>
            <scope>provided</scope>
        </dependency>
#

and reload 🙂

quaint mantle
#

you shouldn't import any thing in libraries if it isn't your api or spigot/paper core.

fiery inlet
#

ty

#

ok ill take note of that

#

my bad

#
public void onJump(PlayerJumpEvent event){
        Player player = event.getPlayer();

        //Random prize between 0 and 90.000
        int prizeWinnings = new Random().nextInt(90_000);

        // Title
        String main = ChatColor.color("&7[ &cPRIZE&7: " + prizeWinnings + " &7]"); //Main title
        String second = ChatColor.color("&7Congratulations, you won " + prizeWinnings + "$"); //Subtitle
        player.sendTitle(main, second, 10, 40, 10); //Outputting title to player
        //

        plugin.eco.depositPlayer(player, prizeWinnings);

        plugin.eco.depositPlayer(player, 20.0);
    }

Any improvements here to be made?

quaint mantle
#

what is 90_000?

tardy delta
#

bruh i fcked up my chunks