#help-development

1 messages · Page 2176 of 1

eternal night
#

and well, does not scale too well with growing player counts

#

if you had like 2000 players that ever joined your server

#

the method would loop over all of those (and load their data from the disk)

summer scroll
#

hmm

#

alright then, thanks

#

i'll decide what's best

vocal cloud
#

Use a database to store the data you want to?

tender shard
#

so yeah it does IO by checking the files inside the folder but it doesn't actually read any of those files

summer scroll
#

I just want their uuid

eternal oxide
#

for scalability you could always read all offline players name/UUID at startup and store them in a BiMap

eternal night
#

I mean, if it does not read their profile you won't have their name

#

in which case, the entire concept is useless

#

but it does look like you are right, it only uses the file name, so this is completely useless

#

I mean, if you already store player data in an SQL or something

#

just add their last known username to the table

#

and use that or something

tender shard
#

it looks like it indees only uses the file name as UUID and then creates a new GameProfile with "null" as name

humble tulip
#

u can also use a map<String, OfflinePlayer>

eternal night
humble tulip
#

that u generate on startup

#

for faster lookups

tender shard
#

I'd just store a Map of UUID <> last known name somewhere myself

eternal night
#

I mean, I still don't see how a potential mojang api lookup is an issue

#

the server already has that to some degree

quaint mantle
#

public void Blockremove(PlayerMoveEvent e){
Player p = e.getPlayer();
p.chat("It!:)");
Block replace = p.getWorld().getBlockAt(p.getLocation().subtract(0, 2, 0));
replace.setType(Material.SAND);
}

why is not it working?

tender shard
#

?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.

summer scroll
#

i'm just gonna store the last known name of each uuid

humble tulip
#

do you see It! show in the chat?

quaint mantle
#

i chane 2 in 1 and it also does not work

tender shard
#

?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.

humble tulip
#

do you see It!:) in the chat?

quaint mantle
#

?notworking
@EventHandler
public void Blockremove(PlayerMoveEvent e){
Player p = e.getPlayer();
p.chat("It!:)");
Block replace = p.getWorld().getBlockAt(p.getLocation().subtract(0, 1, 0));
replace.setType(Material.SAND);
}

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.

humble tulip
#

LOL

quaint mantle
#

why??

tender shard
#

can you read?

humble tulip
#

Is english your first language?

tender shard
humble tulip
#

@quaint mantle

  1. do you see any error messages?
  2. Do you see It!:) in chat ingame?
quaint mantle
#

no

quaint mantle
humble tulip
#

ok well I'll try to help you, you can translate my messages to your native language

humble tulip
#

huh?

#

I asked 2 questions

#

did you replay no to question 1 or question 2?

tender shard
vocal cloud
#

Did you register the event?

quaint mantle
humble tulip
#

Well then your event is probably not registered

quaint mantle
vocal cloud
#

Mhm

quaint mantle
#

I forgot this😅

humble tulip
#

Also when you register it, make sure to subtract 1 instead of 2

quaint mantle
#

Ye

humble tulip
#

another thing u can check ebfore you set the block type is if the player moved a full block

quaint mantle
#

Hoiw?

tender shard
#

check whether getFrom() and getTo() are the same block, or not

quaint mantle
#

What?

#

You can send this as a code

#

?

tender shard
#

PlayerMoveEvent has two methods: getFrom and getTo.

Both return a Location. Location has a method getBlock().

If both locations' getBLock() method return the same block, the player did not move a full block

quaint mantle
#

You can send a example code? I not really understand

tender shard
#

you should really learn basic java if you don't know how to check if two objects are equal

quaint mantle
#

I know i think

quaint mantle
tender shard
#
    @EventHandler
    public void onMove(PlayerMoveEvent event) {
        Location from = event.getFrom();
        Location to = event.getTo();
        if(isSameBlock(from,to)) return;
        
        // Player has moved a full block
    }

    private static boolean isSameBlock(Location from, Location to) {
        return from.getBlock().equals(to.getBlock());
    }
quaint mantle
#

U dont need !isSameBlock

#

?

tender shard
#

no. If it's the same block, you don't wanna do anything, so you return if isSameBlock is true

quaint mantle
#

Ok

#

Thanks guys

crude cobalt
#

Maybe someone knows how to add your own scale using a plugin and a resource pack? For example, a thirst scale

dark arrow
#

Is there any event related to moving?

#

for entitiesa

humble tulip
#

1 sec

#

negative font and title

crude cobalt
#

OHHHHHHHH

thorny dawn
#

"the process cannot access the file because it is being used by another process"

crude cobalt
dark arrow
#

ok

#

but i have made my most of the project in spigot

rotund pond
#

Why?

thorny dawn
#

paper is faster

trail pilot
thorny dawn
#

idk if its the paper process cause im trying to duplicate a world

onyx fjord
trail pilot
#

well

#

depends of spigot because its an fork of it

onyx fjord
#

that rly doesnt fix anything, all plugins must work with spigot

twilit pulsar
onyx fjord
#

entitymoveevent probably doesnt exists cuz of the lag it might cause

twilit pulsar
vocal cloud
#

Sighhh

river oracle
#

Uhm

vocal cloud
#

Because you don't understand java I assume

twilit pulsar
river oracle
#

!learnjava

#

Wrong command

#

Lmao

onyx fjord
#
  1. do not use println in spigot
  2. its Events not Event
#

?learnjava

undone axleBOT
twilit pulsar
#

noice

noble spire
#

is there a reliable way of getting a PersistentDataContainer from a world object? Casting a World to a PersistentDataHolder seems like a bad idea

humble tulip
chrome beacon
humble tulip
noble spire
river oracle
#

What the

#

Lmfao

noble spire
#

ikr :|

river oracle
#

World#getPersistentDataComtainer

noble spire
#

yeah it just acts as if that method doesn't exist

river oracle
#

If you cast it you'll get an error xD but you can try

desert loom
#

what* version are you using?

#

that's weird that it doesn't show and wants you to cast maybe you're using the wrong spigot version somehow?

noble spire
#

just updating it now, I was using 1.17.1

#

ah that was it my bad

lone jacinth
#

World got the persistent data container in 1.18.1

noble spire
#

I see, thanks

twilit roost
#

What is the new name for entity path finding
in NMS Remapped 1.18.1?

opal juniper
onyx fjord
humble tulip
#

Yeah but for debugging you're removing it anyways

opal juniper
#

and, just attaching a debugger

humble tulip
#

Intellij bebugger is the way

#

Debugger*

lone jacinth
opal juniper
humble tulip
#

Remove it from the list?

#

Like when u add something, remove it from the list so u can't get that item again

#

?paste your code please

undone axleBOT
sterile token
#

For keeping custom data on blocks exists only NBT right? Its for a 1.12 plugin that why I dont use PDC

#

Thanks

humble tulip
#

I'd guess so

#

Can u just paste your actual code

mortal cedar
#

is it possible to set the title of the bossbar and the name of an entity to BaseComponents without using nms?

humble tulip
#

Also you're generating numbers from 0-9 but removing items from the list

twilit roost
#

emm what?

humble tulip
#

Also paste your error

#

?paste

undone axleBOT
humble tulip
#

Use that to paste ^

#

Really?

#

You just said you get an error

#

Are all itemstacks in the list different?

sterile token
#

Mi ion he is another troll as usual

sterile token
humble tulip
#

Then u don't need to check if the inventory contains that item

twilit roost
humble tulip
#

He's calling you a troll

#

Not me

sterile token
humble tulip
#

Can you actually post your code

#

I feel like the edits you made changed something crucial

twilit roost
sterile token
#

Yeah that why I guess he is trolling, he doesnt paste the code Where you told him and he said he has an error and then said not. So that my clue

humble tulip
#

You said it here

twilit roost
humble tulip
#

@twilit roost

#

That's the nms import

mortal cedar
#

is it possible to set the title of the bossbar and the name of an entity to BaseComponents without using nms?

humble tulip
#

Import the bukkit one

twilit roost
#

right thx

humble tulip
#

Well let's see your console

kindred valley
#

how to cancel i task we usedas lambda

twilit roost
humble tulip
#

Np

humble tulip
kindred valley
humble tulip
#

Think it returns the taskid

#

U can store the id and cancel task

#

With Scheduler#cancelTask

#

Yes

#

?paste

undone axleBOT
humble tulip
#

But here

sterile token
#

@humble tulip He is trolling

#

I already told u

kindred valley
#

it was on runnable iirc

humble tulip
#

You get an int

#

That's the taskid

#

If you're using bukkitrunnable you get a bukkittask when you schedule

sterile token
#

What better for Spigot? BukkitRunnable or Runnable?

#

I always have that dought

humble tulip
#

Doesn't really matter

#

I use bukkit runnable when i wanna cancel tho

#

:/

#

The code u sent

#

Isn't your code

sterile token
#

Ctrl + s for saving

humble tulip
#

?paste your actual code please

undone axleBOT
sterile token
#

Mi ion thanks for the answer

#

I really apareciste you

#

This days you are helping a lot

humble tulip
#

Mi ion

#

Haha

sterile token
#

Its my Spanish corrector

humble tulip
#

Just oaste your code dude

#

Don't change it before you paste

#

Or else i won't help

#

I'm supposed to believe youre compiling your plugin with a list of integers as a list<ItemStack>

sterile token
#

He is trolling mi ion!

humble tulip
#

Yeah I'm gonna give up helping

slate mortar
#

what did i miss

vocal cloud
#

Heavy drug usage

slate mortar
#

nooooo

#

man, you gotta go for one moment, and you miss the best things

crimson terrace
#

we also had tacos

slate mortar
#

:( why you do dis to me

sterile token
#

I just smoke marihuana

#

Because here they considere it as medicinal

slate mortar
#

that's not heavy enough

crimson terrace
#

weed doesnt count... only tacos and actual drugs

slate mortar
#

gonna get that h pumping

crimson terrace
#

like alcohol

sterile token
#

So you can buy it in farmacy as buyimg another medicine

#

I buy it with 15y imagine

humble tulip
#

Here it's legal to use Marijuana but illegal to buy it

#

So u can give someone some money and they can give u some weed

sterile token
#

Here is legal but as medicine pupouses

humble tulip
#

But u can't buy weed from them

vocal cloud
#

Weed legal here in Canada Kek only 4 plants per household tho 🤡

humble tulip
#

Lmao

#

"only"

sterile token
#

So there no PDC alternativa for 1.12x?

eternal oxide
#

no

tender shard
#

no

#

1.12 sucks

slate mortar
#

agree

#

everything pre-1.13 completely sucks ass

tender shard
#

the alternative to pdc in 1.12 is NBT or external databases or json files or whatever

#

or upgrading

#

upgrading is probably the proper solution

slate mortar
#

upgrading please

humble tulip
#

why would a server use 1.12.2 and not 1.18?

tender shard
humble tulip
slate mortar
#

it'll never change probably

golden kelp
#

same

visual tide
eternal oxide
silent topaz
#

hey.. I'm spawning multiple entities and like multiple of them spawn

#

custom entities

#

last time they kept spawning

#

there was 71k endermen

eternal oxide
#

Yes. Your Entity extends Enderman.

#

Every time an Enderman spawns you spawn one of Your entities. It is detected as an Enderman and the loop continues

visual tide
#

^

silent topaz
#

How can I fix this?

#

Wait

#

nevermindd

#

Oh I see

#

Thanks

warm saddle
#

Would player.getItemInUse() return the item that is in the players hand

summer scroll
#
Gets the item that the player is using (eating food, drawing back a bow, blocking, etc.)
flat olive
ivory sleet
warm saddle
#

How would I get the current slot that a player has selected in their hotbar

#

So the command gets the current item in their hand, how would i find out which slot that item is in

flat olive
#

It just prints a new line to the console

onyx fjord
flat olive
#

Why? It’s good for debugging

warm saddle
#

use Bukkit#getLogger()

eternal oxide
#

Its not depreciated as its just Java. Paper give you a BIG warning to use the logger

flat olive
#

I hate that dumb logger

#

It throws so many warnings

#

I have to turn off all warnings and make it SEVERE only

summer scroll
onyx fjord
onyx fjord
eternal oxide
#

Only Paper

onyx fjord
#

paper screams tho yea

flat olive
kind hatch
flat olive
#

MongoDB for example

warm saddle
flat olive
#

Throws tons of exceptions, have to mark the severity as severe instead of warning level

onyx fjord
#

lemme ask paper

flat olive
#

that way your console isn’t stacked

#

println is a good way of debugging

summer scroll
#

You don't need the slot on the inventory

warm saddle
# summer scroll You just need to modify the item meta

so this:

currentItem = p.getInventory().getItemInMainHand();

        ItemMeta currentItemMeta = currentItem.getItemMeta();

        newName = args.toString();
        currentItemMeta.setDisplayName(newName);
        currentItem.setItemMeta(currentItemMeta);```
kind hatch
#

I wouldn't worry too much about it. No one is forcing you to use the built in logger. Besides, the only reason to use the logger is for formatting purposes.

eternal oxide
summer scroll
#

Will getItemInMainHand return the copy of the item?

warm saddle
summer scroll
#

If so, you need to set the item back on player main hand

onyx fjord
#

paper says:

not using your own logger is a pretty common anti-practice which often creates a huge number of headaches for server admins due to plugin devs failing to use their own loggers, it makes it hard to work out where something is coming from and there is generally very little sane reason to do so

long term intent is that all plugin logger usage should be directed to the correct place to limit the side-effects of this anti-practice which just poses many headaches for server owners and us
#

i think sysout doesnt include plugin name

warm saddle
kind hatch
onyx fjord
#

yea but imagine it doesnt and some plugin screams some stuff

summer scroll
thorny dawn
#

how do i get the parent directory (aka the one the server files are in from my plugin)

onyx fjord
#

annoying i guess

warm saddle
onyx fjord
#

also built in logger is less code to write

#

and has more functions to it

summer scroll
warm saddle
#

ok thank you :)

kind hatch
#

Who cares if it's not formatted with the plugin name in the front. Oh wait, it wouldn't to begin with since it's an error. ¯_(ツ)_/¯

warm saddle
#

Also, if a player was to make the name something like &4Name would it make the item the colour of &4 or would i need to make a method that does that?

kind hatch
#

You need a method to convert that to the actual color symbol.

#

Spigot has a method for this already. ChatColor#translateAlternateColorCodes()

summer scroll
warm saddle
real fable
#

Hey ! I'm a minecraft mod developer and I want to start creating plugins.
Does anyone know a place/documentation I can use to learn how to create a plugin ?

kind hatch
thorny dawn
#

you will learn more as you go

kind hatch
thorny dawn
#

Getting "The system cannot find the path specified error"

#

i dont know whats wrong, i think both of the paths are correct

humble tulip
#

idk kotlin so

#

if you do new File("hello.txt")

thorny dawn
#

the new keyword is redundant in kotlin

humble tulip
#

itll be in the server directory

#

basically you never have to get the server directory

thorny dawn
#

so when u create a file it gets put automatically in the server directory?

humble tulip
#

try removing ./

#

yes

kindred valley
#

how can i control if a player sent a message

kind hatch
#

Also, to move up a directory, you should use ../whatever instead of ./whatever. The latter one is indicative of execution.

humble tulip
humble tulip
#

if u wanan get a world folder you jsut do new File("worldname")

thorny dawn
#

alright thanks

thorny dawn
humble tulip
#

wdym?

thorny dawn
#

i basically want to duplicate the folder, and i want it to be put in the same directory

humble tulip
#

yep i think u can copy it to an empty file path

thorny dawn
#

and when using CopyRecursively() it requires for me to pass a path parameter via the file constructor and some other stuff

humble tulip
#

not 100% sure

thorny dawn
#

Apparently it goes to level.dat

kind hatch
#

You can't copy a file that is in use.

thorny dawn
#

its basically a world, do i have to unload it first?

kind hatch
#

Yes, you would need to unload it first if you wanted to copy the file contents.

thorny dawn
#

and then load it again before its ready for use?

kind hatch
#

It's because of the file lock.

#

Alternatively, you could have the level.dat file stored elsewhere and copy it in where needed.

#

But, that may be problematic, depending.

thorny dawn
#

alright

#

ill try it now

humble tulip
#

@thorny dawn this is how you get the current directory in regualr java

#

i tried "" as the path and it didnt work

kindred valley
#

I have a thing like this i want to control if player texts "evet" or "hayır"

#
@EventHandler
    public void onMessage(AsyncPlayerChatEvent e){
        Player p = e.getPlayer();
        Location arenaLoc = new Location(p.getWorld(),78,94,144);
        if(Arena.playersWhoSentMessages.contains(p)) {
            p.sendMessage("1.if");
            if(e.getMessage().equalsIgnoreCase("evet")) {
                p.sendMessage("2.if");
                p.sendMessage(String.valueOf(Arena.playerWhoInvited));
                for(Player c: Arena.playerWhoInvited) {
                    c.teleport(arenaLoc);
                }
            }else if(e.getMessage().equalsIgnoreCase("hayır")) {
                p.sendMessage("3.if");
                for(Player c: Arena.playerWhoInvited) {
                    c.sendMessage("kabul etmedi");
                }
            }
        }
    }
humble tulip
#

maybe kotlin's fileis different

#

do you see 1.if?

kindred valley
kindred valley
#

and can enter for too but not teleporting

humble tulip
#

you're teleporting from another thread

#

try using a bukkitrunnable and go to the main thread before teleporting

#

or the scheduler

#

but use a sync task to teleport the player

thorny dawn
#

getting ''IllegalArgumentException(): location.world`` error

slate mortar
#

you're supposed to initialize Location

thorny dawn
#

?

slate mortar
#

sender.teleport(new Location(<your-params>));

crude cobalt
#

Does anyone know how to protect UI elements like in this photo?

slate mortar
undone axleBOT
slate mortar
#

highly suggest this to you

kind hatch
thorny dawn
slate mortar
#

ah

thorny dawn
#

the "new" keyword is redundant

slate mortar
#

i see

#

ok in that case my bad, ignore it

eternal oxide
#

show the full error, but my guess is an invalid world

crude cobalt
thorny dawn
ivory sleet
#

world might be null from Location::getWorld

kind hatch
ivory sleet
#

and from Bukkit::getWorld

eternal oxide
#

your world is wrong. Not loaded or doesn;t exist

thorny dawn
#

odd

slate mortar
#

yea, just a custom bossbar, you can pretty much see that by the size of it

crude cobalt
slate mortar
#

when people have the resourcepack accepted, most likely

thorny dawn
slate mortar
#

god, kotlin looks that different?

humble tulip
#

yeah i cant read it properly lol

slate mortar
#

same

#

i can't read like anything that doesn't come from the api directly

kind hatch
crude cobalt
#

Got it, thanks, I'll think about what I can do now

humble tulip
#

comparing strings with == jist looks so wrong

#

even though it makes more sense

ivory sleet
#

btw ceryth you can use ConfigurationSection::getString so you dont have to cast

thorny dawn
#

think i might have found the source of the issue, one of the worlds is unloded when im entering the foreach loop so i need to break out of it if it matches its name

quaint mantle
#

so I wanted to make a bow which instantly shoots arrow I got the base could u check if this is alr?

#
@EventHandler
    public static void onRightClick(PlayerInteractEvent event) {
        if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
            if (event.getItem() != null) {
                Player player = event.getPlayer();
                player.getWorld().spawnEntity(player.getLocation(), EntityType.ARROW);
            }
        }
    }
}```
#

or do I need to define that the item is a bow?

kind hatch
#

Wouldn't you want to check if they right click air since they will likely be aiming at someone and not the ground? Also yea, where is the check to see if they are holding a bow?

quaint mantle
#

Is there a method that can tell if a player is out?

quaint mantle
#

Quit

humble tulip
#

wat

kind hatch
#

?

eternal oxide
#

dead?

humble tulip
kind hatch
quaint mantle
# humble tulip check if the item is the bow u created
public class Terminator implements ToolStatistics, BowFunction, Ability {
    @Override
    public String getAbilityName() {
        return "Nasty Bite";
    }

    @Override
    public String getAbilityDescription() {
        return "Costs 11% of max Mana, deals +19% more damage, heal for 2x the Mana cost";
    }

    @Override
    public void onAbilityUse(Player player, SItem sItem) {
    }

    @Override
    public int getAbilityCooldownTicks() {
        return 0;
    }

    @Override
    public int getManaCost() {
        return 0;
    }

    @Override
    public String getDisplayName() {
        return "Mosquito Bow";
    }

    @Override
    public Rarity getRarity() {
        return Rarity.LEGENDARY;
    }

    @Override
    public GenericItemType getType() {
        return GenericItemType.RANGED_WEAPON;
    }

    @Override
    public SpecificItemType getSpecificType() {
        return SpecificItemType.BOW;
    }

    @Override
    public AbilityActivation getAbilityActivation() {
        return AbilityActivation.NO_ACTIVATION;
    }

    @Override
    public int getBaseDamage() {
        return 251;
    }

    @Override
    public double getBaseStrength() {
        return 101;
    }

    @Override
    public double getBaseCritDamage() {
        return 0.09;
    }

    @EventHandler
    public static void onRightClick(PlayerInteractEvent event) {
        if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
            if (event.getItem() != null) {
                Player player = event.getPlayer();
                player.getWorld().spawnEntity(player.getLocation(), EntityType.ARROW);
            }
        }
    }
}```
#

does this do?

quaint mantle
kind hatch
#

Just check if the online players are 0 and then shutdown.

humble tulip
quaint mantle
#

I like ur pfp

quaint mantle
quaint mantle
#

mr bean 🙏

humble tulip
quaint mantle
quaint mantle
kind hatch
# quaint mantle ye but what method?

Wdym? You listen for the PlayerQuitEvent and then do what you need to in there.
If you want to shutdown the server when all players have left, just check if the online player count is 0 then shutdown.
If you want to shutdown after a certain player has left, check if the player who quit is that specific person, then shutdown.

quaint mantle
#

ok

green prism
#

Guys, I was doing a credit card plug-in and I wanted to make sure that there was a step where when the banker makes the card a message comes to the person who says, "Are you sure you want to redo the card?" in chat and if you click there confirms and actually makes the card. I know I have to use hover text but I have no idea how to do it in the form of confirmation as mentioned before. Ideas please?

quaint mantle
#

credit card

#

in game

#

bro why

vocal cloud
#

Um you don't want to do that

quaint mantle
#

imagine

golden kelp
#

yep

quaint mantle
#

someone back doors the server

golden kelp
#

xd

quaint mantle
#

does have in game gui thing

kind hatch
#

I don't think he actually meant real cards.

quaint mantle
#

OH

kind hatch
#

Do any of you realize how hard that would actually be?

humble tulip
#

i thought it was ingame credit cards

quaint mantle
#

my brain runs at 1 fps

kind hatch
#

You would need authorization from a real credit card company,

quaint mantle
#

hard sutff

#

sutff

#

bru

vocal cloud
#

But why would you want to have an item be a card when it can all be via text?

humble tulip
vocal cloud
#

Waste of an inventory slot

quaint mantle
#

@EventHandler
public void onPlayerleave(PlayerQuitEvent e){
Player p = e.getPlayer();
if(p.isOnline()){
}else{
shutdown();
}
why is this doesnt working?

green prism
#

cool event

kind hatch
#

Because the player is not online when they quit.

#

That event is called after they are already gone.

green prism
#

in ur opinion

#

what should i do

kind hatch
#

Also, did you register the event?

quaint mantle
#

ye

#

but the shutdown event didnt work

humble tulip
#

they are offline after all listeners are executed

kind hatch
#

Wait, really? I thought that was called after they already left.

quaint mantle
#

ye i also

eternal oxide
#

check the number of players online, if <=1 shutdown

humble tulip
#

it's called on the tick that the player leaves

vocal cloud
# green prism mike

Considering most games do a virtual currency that is probably the best way to do it. Consider the myriad of issues that come with currency being attached to a block/item.

humble tulip
#

it doesnt deal with clearing the player instance and whatnot until after

kind hatch
humble tulip
#

lmao banknotes plugins is just asking for a destroyed economy

vocal cloud
#

Tokens are not blocks that can store an arbitrary amount. Considering those are vulnerable to duping and what not

#

Plus players can "lose" them. It's also much easier to track a currency stored in a database where history can be added so if someone does exploit it you can reverse things in a way that prevents the most issues

humble tulip
#

unless u use uuids for the tokens

vocal cloud
#

Yes but consider you have to add a bunch of checks to make sure that there isn't duplicates compared to not needing all that extra code/checks

crisp steeple
wet breach
#

depends how it is implemented really

kind hatch
#

^

crisp steeple
#

yea

humble tulip
crisp steeple
#

just yesterday was able to get #1 baltop on a pretty big server just because they had banknotes

buoyant viper
#

just implement the ethereum blockchain into minecraft ezpz

kind hatch
#

Tbh, I think the only reason those types of plugins exist is so that players can trade money via a trade plugin. Only because the proper integration doesn't exist.

vocal cloud
#

/send name amount

#

or a trade window

wet breach
humble tulip
#

a credit card item that accesses a virtual currency can work tho

kind hatch
#

I mean, most of them come from GUIs.

humble tulip
#

it doesnt matter if there are dupes of the card

vocal cloud
#

Yes but remember it's an item that literally adds nothing besides physical access. It takes up a slot in your inventory to serve no real purpose

quaint mantle
crisp steeple
#

there can be a lot of problems when people use plugins that werent designed well to be compatible with others

humble tulip
kind hatch
# quaint mantle how i do it?

Change what you are checking for. How do you want this to work? When a specific player leaves or when no one is online?

vocal cloud
#

Not to mention you'll have to write a tonne of checks to use it

humble tulip
vocal cloud
kind hatch
#

Then just check if Bukkit#getOnlinePlayers() == 0 when a player leaves.

humble tulip
vocal cloud
#

But it can also make it bad. Players will probably be a bit annoyed they have to run around with an inventory slot being used for currency that could literally just be a command or even your fist

kind hatch
#

Well what about the servers that have a "Keystone" or "Menu" item that gives you a GUI with a bunch of information?

vocal cloud
#

Yeah but then what happens when they forget it?

#

"Dangit why can't this just be a command or something"

humble tulip
#

true

vocal cloud
#

My point is it adds needless complexity to something you don't want to add complexity to

#

There is a reason why credit cards added tap and why it's so used. People don't like inserting their card and typing.

#

Same with apple/google pay. KISS method comes into play here

humble tulip
#

or u could just make a /creditcard comamnd

#

but that defeats the purpose

wet breach
#

there is a reason why physical cards are becoming a thing of the past as well

humble tulip
#

lol

wet breach
#

thing is, the machines don't care about the physical card nor the businesses. All that is needed is just the numbers

#

and if that can be obtained by simple means for both

#

then that is the better choice

#

in games, virtual currencies are favored because there is less ways for someone to just arbitrarily obtain that currency

eternal oxide
#

There are also legal reasons games don;t sell things directly in game. They always sell in game currency which is then used to buy in game items

#

If you sell a chance (loot Box) to get an item for real money, it is gambling in many countries. Using in game currency evades teh gambling definition

wet breach
#

to an extent

#

really depends. In the US, virtual currency depending how you are able to get it or how you are able to use it can still be considered gambling

#

hence why there is 2 currencies in games

#

Usually such games that have dual currencies are ones where you can buy currency directly

eternal oxide
#

Here in the UK we had a government enquiry into it. The only reason its not gambling over here is you can;t cash out.

wet breach
#

Ah

#

that makes sense

limber owl
#

hello, does anyone know how to make my function call every day at midnight?

wet breach
#

just check the time, schedule for however long till midnight is

unique eagle
#

Hello i search to teleport a player on a another server with a special location !

wet breach
#

in the function, have it reschedule

eternal oxide
#

Use an executor, not the Bukkit scheduler

#

but also remember yoru server time may not be the same as your local time

quaint mantle
#

Does somebody know how can I make the armor stand wear the armor which is spaned at a location

#

fast

#

@eternal oxide can you

eternal oxide
quasi stratus
#

I'm trying to continuously teleport an Item entity towards a Player; I have both of their Locations. Is there any way to accomplish this in a relatively simple manner?

quaint mantle
#

@eternal oxide do you know how can I make the leather armor change its colors when I take it off

limber owl
crisp steeple
#

?scheduling

undone axleBOT
quaint mantle
#

I want it fast

crisp steeple
#

be patient

limber owl
#

it ould be turned off anytime

#

and I need to be reset not every 24 hours but every midnight

crisp steeple
#

i mean you cant just run something from a plugin if that plugin is turned off

quaint mantle
#

Why it is doesnt work?

limber owl
#

p isnt a list

#

its a class

crisp steeple
undone axleBOT
limber owl
#

and is online is boolean

limber owl
crisp steeple
#

?

quaint mantle
#

why the Bukkit.shutdown doesnt work?

limber owl
#

you need uppercase

crisp steeple
#

if someone clearly does not know what theyre doing showing them resources to help them learn isnt an azzhole thing to do

limber owl
#

what about rather explaining the thing that is from spigot api?

quaint mantle
limber owl
limber owl
crisp steeple
echo basalt
#

as if there was an armor event

tardy delta
limber owl
tardy delta
quaint mantle
crisp steeple
tardy delta
#

uh google it

#

spigot inventoryclick event

harsh totem
limber owl
# quaint mantle example?
onArmorDown(even) {
  if(event.armortookoff) {
    ArmorMeta meta = event.armor.meta;
    meta.armorcolor = Color.Blue;
    event.armor.meta = meta;
  }
}
#

pseudo code

limber owl
quaint mantle
crisp steeple
#

its pretty much already in its simplest form

limber owl
unique eagle
#

Hello i search to teleport a player on a another server with a special location !

coarse shadow
tardy delta
crisp steeple
harsh totem
limber owl
harsh totem
#

in the link

coarse shadow
#

put 3.2.4 its the latest version

#

also u have to add repository if u didnt add that

harsh totem
coarse shadow
#

hmm

#

try to use a class of the api

harsh totem
#
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>```
```        <dependency>
            <groupId>com.github.simplix-softworks</groupId>
            <artifactId>SimplixStorage</artifactId>
            <version>3.2.4</version>
            <scope>compile</scope> <!-- Must be compile since we want to shade it to your jarfile!-->
        </dependency>```
coarse shadow
#

sometimes it gives that error but u can still access to it

limber owl
#

so does anyone know how to check if it's midnight irl? I don't want to check every 24 hours but every midnight. I'm making statistics and I need to make daily stats to be reset at midnight

unique eagle
crisp steeple
#

im not sure if you could teleport them to a specific location

tardy delta
#

bungeecord stuff i guess?

#

or how its called

harsh totem
crisp steeple
#

it might need a bungeecord plugin

coarse shadow
#

lol

harsh totem
#

thanks

coarse shadow
#

np

#

guys can we add a datapack to a world that we created through the plugin

limber owl
#

yes, if it makes something to go to another server then it needs to be bungeecord

coarse shadow
#

i dont mean adding it manually

slate mortar
#

did that previously with instead of teleporting players giving them a unique display name

#

but its basically the same

unique eagle
#

okay

#

i use the message listener 1 for teleport and another for send a packet for teleport on a special location

crisp steeple
slate mortar
#

gimme a sec

unique eagle
limber owl
tardy delta
#

or check the gametime

crisp steeple
quaint mantle
#

whats the event for taking off the armor

slate mortar
#

bascially when you teleport the player, you write utf data to the byte buffer, should look smt like this

        ByteArrayDataOutput out = ByteStreams.newDataOutput();
        out.writeUTF("connect");
        out.writeUTF("servername");

but you can then also send something else together with these data, for example this:

        ByteArrayDataOutput out = ByteStreams.newDataOutput();
        out.writeUTF("connect");
        out.writeUTF("servername");
        out.writeUTF("came_from_previous_server"); // just an example
        ```

then on the other server, you have a listener that catches this "packet" (thats how i call it, because in some way it's the same thing), and if the "packet" (in this case the plugin message) contains this last data `came_from_previous_server`, you teleport them to that location.
#

dont have the plugin messaging 100% in my head, so may not be 100% accurate

crisp steeple
quaint mantle
crisp steeple
#

people have made libraries for it

unique eagle
slate mortar
unique eagle
#

okay

quaint mantle
#

Can somebody tell me How can I change the colors of the armor thats in player's inventory

crimson scarab
#

any ideas on how to implement a chorus fruit effect with an extended distance

echo basalt
#

look at the internal code

quaint mantle
#

and how can I locate in the players inventory

limber owl
# crisp steeple well yeah, you would get the time in milliseconds until midnight, then schedule ...
    private void checkTime() {
        Calendar c = Calendar.getInstance();
        c.add(Calendar.DAY_OF_MONTH, 1);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
        long untilMidnight = (c.getTimeInMillis()-System.currentTimeMillis());

        task = Bukkit.getScheduler().scheduleSyncRepeatingTask(WaterRun.get(), () -> {
            resetStats(); // custom function
        }, 0, untilMidnight/50);
    }
golden kelp
crisp steeple
#

not sure if the midnight will be localized though

limber owl
#

well, time to test it in production

quaint mantle
#

do you how can I make that it keep son changing its colors even if I give it to somebody else

crimson scarab
echo basalt
#

decompile

undone axleBOT
quaint mantle
limber owl
golden kelp
quaint mantle
quaint mantle
limber owl
#

lookit up on internet

#

i dont know

golden kelp
#

PlayerPickUpItem or smth

limber owl
#

yea

quaint mantle
golden kelp
tardy delta
#

deprecated

limber owl
#

?

#

it's not?

#

EntityPickupItemEvent is deprecated

golden kelp
#

oh yea

#

my bad

#

do add a player check and item check

limber owl
#

yeah, sorry, that's right

golden turret
#

what is the default world border damage and damage buffer?

limber owl
#

you wanna know the numbers or get it in code?

golden turret
#

thanks

echo basalt
limber owl
quaint mantle
limber owl
#

of player?

quaint mantle
#

tahts pickup

limber owl
echo basalt
fierce salmon
#

I get this error when I try to register the events in my class

limber owl
quaint mantle
echo basalt
#

The name is stored on the meta

tardy delta
limber owl
fierce salmon
fallow violet
#

everytime i hover over the server icon, i think he's crying

echo basalt
#

if you're here to help, provide accurate help. leading someone to the wrong direction, or places they've tried is not really useful and just wastes time

golden kelp
fallow violet
#

localizedName instead?

quaint mantle
echo basalt
#

nbt tags

limber owl
#

and then apply the meta back to item

#

after you change it

slate mortar
# fierce salmon wdym

the constructor of your class DiscEvents takes in a logger as parameter (for whatever reason), so either remove that from the constructor, or pass in the logger's instance when registering it

quaint mantle
#

@limber owl do you know how can I get its type

limber owl
#

and you should probably check if its armor before getting its meta s it can throw error

golden kelp
limber owl
quaint mantle
limber owl
#

you should probably look more of these things on internet

quaint mantle
slate mortar
#
  • if (e.getItem().getType() == Material.LEATHER_HELMET) {
tardy delta
#

got ninjad

slate mortar
#

dont compare enums with equals

#

:) knew it

echo basalt
#

also reuse variables

limber owl
#

doesn't the material have it's own equals method?

echo basalt
eternal night
#

I'd still suggest using .equals here

buoyant viper
#

y

quaint mantle
eternal night
#

just because spigot will move away from the enum approach

tardy delta
#

whenever its an enum check with == lol

echo basalt
eternal night
#

No obviously not

limber owl
eternal night
#

actually, the registry should maintain instance equality

#

so don't mind me

echo basalt
harsh totem
#

how do I set a skeleton's health with attribute?

echo basalt
#

and it does maintain instance equality so I don't see why bukkit wouldn't

echo basalt
#

addModifier, setBaseValue

#

whatever methods you may need

eternal night
#

You never know what spigot codes up XD

harsh totem
#

Cannot resolve method 'registerAttribute' in 'Skeleton'

slate mortar
#

i dont think the "health" even is an attribute

#

only the max health

harsh totem
#

i meant the max health

slate mortar
#

then

#
entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(20.0D);``` for 20 hp (10 hearts)
#

iirc

pastel juniper
#

Can sb explain to me why I get this error???

chrome beacon
#

The method has two arguments

echo basalt
#

you got 2 players as parameters and you're only passing 1

harsh totem
#

thx

#

what is the base movement speed of a skeleton

slate mortar
#

0.7

harsh totem
#

ok

slate mortar
#

Attributes section

pastel juniper
echo basalt
crimson scarab
#
    public static void generateLocation(Location location) {
        int xOffset;
        int yOffset;
        int zOffset;
        Random random = new Random();

        int x = (int)(Math.random()*(40-16+1)+16);
        int y = (int)(Math.random()*(10-0+1)+10);
        int z = (int)(Math.random()*(40-16+1)+16);
        
        if (random.nextBoolean()) {
            xOffset = -x;
        } else {
            xOffset = x;
        }
        if (random.nextBoolean()) {
            yOffset =- y;
        } else {
            yOffset = y;
        }
        if (random.nextBoolean()) {
            zOffset = -z;
        } else {
            zOffset = z;
        }
    }

ive got this but is there a more efficient way of doing this

limber owl
#

maybe switch?

echo basalt
#

you can avoid half the randoms if you subtract 0.5 from the nextDouble and multiply by 2

echo basalt
limber owl
#

make it repeat if its pickes the same by reapeting the fucntion

#

let me show you pseudo code

harsh totem
#

What is the base follow range of skeletons and creepers?

slate mortar
echo basalt
#

well

#

NMS dont lie

subtle folio
#

nms always lie

slate mortar
#

well

#

wait

subtle folio
#

i never see a or b in minecraft

slate mortar
#

the wiki says both are true

#

it says the base value is 0.7, while the generic.movementSpeed is 0.25

#

i'm confused

#

cant send screenshots sadly lol

limber owl
#
List<ItemStack> items = new ArrayList<>();

ItemStack makeItem() {
  ItemStack item = new ItemStack(quests.get(random.nextInt(quests.size())));

  if(items.contains(item)) {
    return makeItem();
  } else {
    items.add(item);
    return item;
  }
}```
slate mortar
slate mortar
#

tells you all the attributes, and it's base, min and max values for every entity

desert tinsel
#

I have a question, if the same plugin is used on multiple minecraft servers, but is connected to the same mongodb cluster, will the data be common for all servers?

desert tinsel
#

uoh

limber owl
#

show me the code

humble tulip
#

lol

limber owl
#

pase it in some pastebin and send the link

humble tulip
#

I was trying to help him earlier

#

it was hell

#

ended up getting nowhere

limber owl
#

yea, then you should help and not telling me that you helped, he seems to understand what i told him but doesn't know how to implement it, its not his fault

#

yes

limber owl
subtle folio
limber owl
#
List<ItemStack> quests = Arrays.asList(venenum, obscondis, obscurus, ligare, archaicweal, acies, lentus, levitas, forfex, ictus, hospitium);
        Random random = new Random();
        ItemStack randomItem = quests.get(random.nextInt(quests.size()));

        for(int i = 0;i<9;i++) {
            if (!inv.contains(randomItem)) {
                inv.addItem(new ItemStack(quests.get(random.nextInt(quests.size()))));
            }
        }
humble tulip
#

I didnt say you stole it

humble tulip
#

i said the code you pasted was not your actual code

#

because you had a list of integers as your list of itemstack

humble tulip
limber owl
#

i just made it easier to read, its the same

#

use this @wind blaze

#
    void something() {
        List<ItemStack> quests = Arrays.asList(venenum, obscondis, obscurus, ligare, archaicweal, acies, lentus, levitas, forfex, ictus, hospitium);
        
        for(int i = 0;i<9;i++) {
            makeItem();
        }
    }

    List<ItemStack> quests = Arrays.asList(venenum, obscondis, obscurus, ligare, archaicweal, acies, lentus, levitas, forfex, ictus, hospitium);
    List<ItemStack> items = new ArrayList<>();

    ItemStack makeItem() {
        Random random = new Random();
        ItemStack item = new ItemStack(quests.get(random.nextInt(quests.size())));

        if(items.contains(item)) {
            return makeItem();
        } else {
            items.add(item);
            return item;
        }
    }
subtle folio
#

spoon feeding 🥄

limber owl
#

this should work

quaint mantle
#

@limber owl this is not working:
e.getItem().getName().equalsIgnoreCase()

quaint mantle
quaint mantle
# limber owl can you please show the code?

this is my function:

    public void onPlayerPickup(EntityPickupItemEvent e) {
        Player p = (Player) e.getEntity();
        if (e.getItem().getName().equalsIgnoreCase(ChatColor.GREEN + "Re" + ChatColor.WHITE + "ge" + ChatColor.GREEN + "nb" + ChatColor.WHITE + "og" + ChatColor.GREEN + "en-" + ChatColor.WHITE + "He" + ChatColor.GREEN + "lm")) {
            p.sendMessage("HHHH");
            LeatherArmorMeta meta = (LeatherArmorMeta) e.getItem().getItemStack().getItemMeta();
            meta.setColor(Color.GREEN);
        }
    }
}
quaint mantle
green prism
#

how can I hide commands that I ran from TextComponent ClickEvent RUN_COMMAND?

limber owl
#

you need to remove the ChatColor in equals

#

and apply the meta

quaint mantle
subtle folio
humble tulip
#
        List<ItemStack> quests = Arrays.asList(venenum, obscondis, obscurus, ligare, archaicweal, acies, lentus, levitas, forfex, ictus, hospitium);
        Random random = new Random();
        int amountOfQuests = quests.size();

        for (int i = 0; i < amountOfQuests; i++) {
            ItemStack randomItem = quests.remove(random.nextInt(quests.size()));
            inv.addItem(randomItem);
        }
#

this is what u want

green prism
undone axleBOT
#

Spoonfeed a newbie for a day and they'll come back with more questions. Teach them to find their own answers and you'll both be better off: you won't get stuck answering the easy questions and they'll be much more productive than before.

subtle folio
#

will use

quaint mantle
green prism
humble tulip
#

pretty sure it isnt

#

im removing the itemstack from the list

limber owl
humble tulip
#

which is what i told you to do

subtle folio
humble tulip
#

you were just getting it

quaint mantle
green prism
#

ntdi

limber owl
#

you apply the meta by doing set meta

subtle folio
green prism
#

oh wait xd

limber owl
quaint mantle
#

oh

subtle folio
green prism
#

np, hide from showing in console

#

[20:06:06 INFO]: Drago903 issued server command: /creditcard confirm 7f18ElcAaD

limber owl
#

remove all the chatcolor in equals and apply the meta by doing item.setMeta(meta);

subtle folio
humble tulip
#

you need to remove the itemstack you get from the list

#

so u cant get it again

#

so no dupes

subtle folio
#

console has all i believe

limber owl
#

you can use set

#

so there wont be duplicants

green prism
#

what can I do for that?

subtle folio
#

add a cooldown or disable the command to be sent if you’ve already sent it?

harsh totem
#

what is the base attack_knockback attribute of a slime?

subtle folio
#

im confused on the question

humble tulip
#

what's the error?

humble tulip
#

yes paste the stacktrace

subtle folio
humble tulip
#

?paste

undone axleBOT
subtle folio
#

i didn’t know mb

limber owl
#

it;s not working?

limber owl
quaint mantle
#

@limber owl why is it not changing color:

            assert meta != null;
            meta.setColor(Color.GREEN);```
limber owl
#

again, did you apply the meta into the leather armor?

humble tulip
#

ohh its because of arrays.aslist

#

so

quaint mantle
quaint mantle
limber owl
#

but did you apply it into the item after changing it?

humble tulip
#
        List<ItemStack> quests = List.of(venenum, obscondis, obscurus, ligare, archaicweal, acies, lentus, levitas, forfex, ictus, hospitium);
quaint mantle
limber owl
#

color

humble tulip
#

replace the first line with this @wind blaze

subtle folio
#

item.setMeta(meta)

#

pseudo pls no bully

humble tulip
#

arrays.aslist is probably unmodifaiable

quaint mantle
subtle folio
subtle folio
limber owl
subtle folio
#

that’s what you should do but the method is probably named diff

quaint mantle
limber owl
#

yes

subtle folio
#

mhm

quaint mantle
limber owl
#

it applies the meta back to the item and changes the color

subtle folio
#

item meta is super cringe imo

#

just make custom itembuilder that does it for you so you never have to touch it again

limber owl
subtle folio
limber owl
#

still important

river oracle
#

I like item meta

#

If you don't ur just bad tbh

subtle folio
#

i love item meta wdym

quaint mantle
subtle folio
#

error?

limber owl
quaint mantle
limber owl
quaint mantle
limber owl
#

@quaint mantle i suggest googling some things before going here and then giving as much information as possible

limber owl
humble tulip
#

it changes size depending on the amt of stuff in ur list

quaint mantle
# limber owl the whole code please
    public void onPlayerPickup(EntityPickupItemEvent e) {
        Player p = (Player) e.getEntity();
        p.sendMessage("HHHH");
        LeatherArmorMeta meta = (LeatherArmorMeta) e.getItem().getItemStack().getItemMeta();
        assert meta != null;
        meta.setColor(Color.GREEN);
        e.getItem().setMeta(meta);
    }```
chrome beacon
#

It's setItemMeta not setMeta

quaint mantle
limber owl
#

yes

humble tulip
#

also

sour brook
#

Hi , why is flute used for Yaw and Pitch Player?
Is for bugs that have existed
Or to use less RAM

humble tulip
#

Use List.of(stuff)

quaint mantle
limber owl
humble tulip
#

instead of new Arraylist(Arrays.asList())

limber owl
quaint mantle
limber owl
#

then it should give you a suggestion after .

quaint mantle
limber owl
#

and its e.getItem().getItemStack().setItemMeta(meta);

limber owl
quaint mantle
limber owl
#
    @EventHandler
    public void onPlayerPickup(EntityPickupItemEvent e) {
        Player p = (Player) e.getEntity();
        p.sendMessage("HHHH");
        LeatherArmorMeta meta = (LeatherArmorMeta) e.getItem().getItemStack().getItemMeta();
        assert meta != null;
        meta.setColor(Color.GREEN);
        e.getItem().getItemStack().setItemMeta(meta);
    }
#

it should look like this, and next time try googling stuff and when youre at your end reach out here

quaint mantle
#

ok

tardy delta
#

unchecked casts i love it

quaint mantle
#

ok

limber owl
#

?

#

oh yeah

crimson scarab
#
    public static Location generateLocation(Location location) {
        int xOffset;
        int yOffset;
        int zOffset;
        Random random = new Random();

        int x = (int) (Math.random() * (40 - 16 + 1) + 16);
        int y = (int) (Math.random() * (10 - 0 + 1) + 10);
        int z = (int) (Math.random() * (40 - 16 + 1) + 16);

        if (random.nextBoolean()) {
            xOffset = -x;
        } else {
            xOffset = x;
        }
        if (random.nextBoolean()) {
            yOffset = -y;
        } else {
            yOffset = y;
        }
        if (random.nextBoolean()) {
            zOffset = -z;
        } else {
            zOffset = z;
        }
        location.setX(location.getX() + xOffset);
        location.setY(location.getY() + yOffset);
        location.setZ(location.getZ() + zOffset);
        return location;
    }

    @EventHandler
    public void onDie(EntityResurrectEvent event) {
        if (event.getEntity() instanceof Player) {
            Player player = (Player) event.getEntity();
            Location location = generateLocation(player.getLocation());
            player.teleport(location);
            }
        }
    }

why am i not teleported?

limber owl
#

yes

limber owl
distant fern
#

Hello,
Im having an issue with my plugin. So I want to remove item that I clicked if its a hoe with mending enchat:

@EventHandler
    public void onClick(InventoryClickEvent e) {

        ItemStack clicked = e.getCurrentItem();

        if (clicked.getType().equals(Material.DIAMOND_HOE)) {
            if (e.getCurrentItem().containsEnchantment(Enchantment.MENDING)) {
                e.getWhoClicked().getInventory().removeItem(clicked);
            }
        }
    }
}
limber owl
limber owl
distant fern
#

ofc i did

limber owl
#

any error?

limber owl
crimson scarab
#

i cant seem to cancel playerdeathevent

limber owl
distant fern
#

true but im clicking in player inventory xD

crimson scarab
limber owl
distant fern
#

@quaint mantle I event tried to add Bukkit.brodcast to se if I go through all the ifs and i do

limber owl
limber owl
#

or this

distant fern
#

Sooo what to do. I didnt cancel the event btw

distant fern
limber owl
distant fern
#

both dont work

quaint mantle
#

owo

limber owl
ivory flume
#

Hello! I want to make sure my plugin isn't lagging, so what is a good millisecond time to run PlayerJoinEvent?

limber owl
quaint mantle
#

what? @ivory flume

limber owl
ivory flume
#

my PlayerJoinEvent is pretty large and I want to make sure it doesn't lag. whats a good time for it to run?

#

i mean

#

like

#

how long should it take

quaint mantle
undone axleBOT
ivory flume
#

paste the entire thing?

quaint mantle
#

yeah

tardy delta
#

yes

limber owl
ivory flume
#

i think im under an NDA by the server admin

quaint mantle
#

hi fourteen <3

tardy delta
#

hewwo